Home Internet of Things - IoT Analog I/O trong Arduino

Analog I/O trong Arduino

by Khanh Tran

Các chân analog I/O trong Arduino có tác dụng gì? Ứng dụng các chân analog của arduino như thế nào. Trong bài này chúng ta cùng tìm hiểu nhé.

analogRead()

Description

Hàm analogRead() có tác dụng đọc giá trị analog từ một chân Analog (ADC) được chỉ định. Bảng Arduino chứa bộ chuyển đổi tín hiệu tương tự sang kỹ thuật số đa kênh, 10-bit. Điều này có nghĩa là nó sẽ ánh xạ điện áp đầu vào giữa 0V và điện áp hoạt động (5V hoặc 3,3V) thành các giá trị nguyên từ 0 đến 1023.

Phạm vi đầu vào có thể được thay đổi bằng cách sử dụng analogReference(), trong khi độ phân giải có thể được thay đổi (chỉ đối với board Zero, Due và MKR) bằng cách sử dụng analogReadResolution().

Hàm analogRead() cần 100 micro giây để thực hiện.

Khi người ta nói “đọc tín hiệu analog”, bạn có thể hiểu đó chính là việc đọc giá trị điện áp.

BOARDOPERATING VOLTAGEUSABLE PINSMAX RESOLUTION
Uno5 VoltsA0 to A510 bits
Mini, Nano5 VoltsA0 to A710 bits
Mega, Mega2560, MegaADK5 VoltsA0 to A1410 bits
Micro5 VoltsA0 to A11*10 bits
Leonardo5 VoltsA0 to A11*10 bits
Zero3.3 VoltsA0 to A512 bits**
Due3.3 VoltsA0 to A1112 bits**
MKR Family boards3.3 VoltsA0 to A612 bits**

*A0 đến A5 được gắn nhãn trên board, A6 đến A11 tương ứng có sẵn trên các chân 4, 6, 8, 9, 10 và 12
** analogRead()Độ phân giải mặc định cho các board này là 10 bit, để tương thích. Bạn cần sử dụng analogReadResolution () để thay đổi nó thành 12 bit.

Syntax

analogRead(pin)

Parameters

pin: tên của chân đầu vào tương tự để đọc (A0 đến A5 trên hầu hết các board, A0 đến A6 trên MKR, A0 đến A7 trên Mini và Nano, A0 đến A15 trên Mega).

Returns

Đọc analog trên pin được chỉ định. Bị giới hạn ở độ phân giải của bộ chuyển đổi analog to digital (0-1023 cho 10 bit hoặc 0-4095 cho 12 bit). Kiểu dữ liệu: int.

Example Code

Code đọc điện áp trên analogPin và print ra serial.

int analogPin = A3; // potentiometer wiper (middle terminal) connected to analog pin 3
                    // outside leads to ground and +5V
int val = 0;  // variable to store the value read

void setup() {
  Serial.begin(9600);           //  setup serial
}

void loop() {
  val = analogRead(analogPin);  // read the input pin
  Serial.println(val);          // debug value
}

Notes and Warnings

Nếu chân đầu vào analog không được kết nối với bất kỳ thứ gì, giá trị được trả về analogRead()sẽ dao động dựa trên một số yếu tố (ví dụ: giá trị của các đầu vào tương tự khác, mức độ gần của bàn tay bạn với mạch, v.v.).

Hình 1: Arduino analogRead()

analogReference()

Description

Cấu hình điện áp tham chiếu được sử dụng cho đầu vào analog (tức là giá trị được sử dụng làm đỉnh của dải đầu vào). Các tùy chọn là:

Arduino AVR Boards (Uno, Mega, Leonardo, etc.)

  • DEFAULT: tham chiếu analog mặc định là 5V (trên board Arduino 5V) hoặc 3,3V (trên board Arduino 3.3V)
  • INTERNAL: tham chiếu tích hợp sẵn, bằng 1,1V trên ATmega168 hoặc ATmega328P và 2,56V trên ATmega32U4 và ATmega8 (không khả dụng trên Arduino Mega)
  • INTERNAL1V1: tham chiếu 1.1V tích hợp sẵn (chỉ Arduino Mega)
  • INTERNAL2V56: tham chiếu 2,56V tích hợp sẵn (chỉ Arduino Mega)
  • EXTERNAL: điện áp đặt vào chân AREF (0 đến 5V) được sử dụng làm tham chiếu.

Arduino SAMD (Zero, v.v.)

  • AR_DEFAULT: tham chiếu analog mặc định 3.3V
  • AR_INTERNAL: tham chiếu 2,23V tích hợp sẵn
  • AR_INTERNAL1V0: tham chiếu 1.0V tích hợp
  • AR_INTERNAL1V65: tham chiếu 1,65V tích hợp sẵn
  • AR_INTERNAL2V23: tham chiếu 2,23V tích hợp sẵn
  • AR_EXTERNAL: điện áp đặt vào chân AREF được sử dụng làm tham chiếu

Arduino megaAVR (Uno WiFi Rev2)

  • DEFAULT: tham chiếu 0,55V tích hợp
  • INTERNAL: tham chiếu 0,55V tích hợp sẵn
  • VDD: Vdd của ATmega4809. 5V trên Uno WiFi Rev2
  • INTERNAL0V55: tham chiếu 0,55V tích hợp
  • INTERNAL1V1: tham chiếu 1.1V tích hợp sẵn
  • INTERNAL1V5: tham chiếu 1.5V tích hợp
  • INTERNAL2V5: tham chiếu 2,5V tích hợp
  • INTERNAL4V3: tham chiếu 4.3V tích hợp
  • EXTERNAL: điện áp được áp dụng cho chân AREF (chỉ 0 đến 5V) được sử dụng làm tham chiếu

Arduino SAM

  • AR_DEFAULT: tham chiếu tương tự mặc định của 3.3V.

Syntax

analogReference(type)

Parameters

type: loại tham chiếu nào sẽ sử dụng (xem danh sách các tùy chọn trong description).

Returns

Nothing

Notes and Warnings

Sau khi thay đổi analog reference, một vài số đọc đầu tiên analogRead()có thể không chính xác.

Không sử dụng điện áp nhỏ hơn 0V hoặc hơn 5V cho điện áp tham chiếu bên ngoài trên chân AREF! Nếu bạn đang sử dụng tham chiếu bên ngoài trên chân AREF, bạn phải đặt tham chiếu tương tự thành EXTERNAL trước khi gọi analogRead()Nếu không, bạn sẽ nối tắt điện áp tham chiếu hoạt động (được tạo bên trong) và chân AREF, có thể làm hỏng vi điều khiển trên bảng Arduino của bạn.

analogWrite()

Description

Ghi một giá trị analog ( xung PWM ) vào một chân. Có thể được sử dụng để thắp sáng đèn LED ở các độ sáng khác nhau hoặc điều khiển động cơ ở nhiều tốc độ khác nhau.

BOARDPWM PINSPWM FREQUENCY
Uno, Nano, Mini3, 5, 6, 9, 10, 11490 Hz (pins 5 and 6: 980 Hz)
Mega2 – 13, 44 – 46490 Hz (pins 4 and 13: 980 Hz)
Leonardo, Micro, Yún3, 5, 6, 9, 10, 11, 13490 Hz (pins 3 and 11: 980 Hz)
Uno WiFi Rev2, Nano Every3, 5, 6, 9, 10976 Hz
MKR boards *0 – 8, 10, A3, A4732 Hz
MKR1000 WiFi *0 – 8, 10, 11, A3, A4732 Hz
Zero *3 – 13, A0, A1732 Hz
Nano 33 IoT *2, 3, 5, 6, 9 – 12, A2, A3, A5732 Hz
Nano 33 BLE/BLE Sense1 – 13, A0 – A7500 Hz
Due **2-131000 Hz
1013, 5, 6, 9pins 3 and 9: 490 Hz, pins 5 and 6: 980 Hz

Syntax

analogWrite(pin, value)

Parameters

pin: chân Arduino analog cần điều khiển. Kiểu dữ liệu: int.
value: duty cycle: từ 0 (always off) đến 255 (always on). Kiểu dữ liệu: int.

Return

nothing

Example Code

Code điều khiển độ sáng của bóng đèn:

int ledPin = 9;      // LED connected to digital pin 9
int analogPin = 3;   // potentiometer connected to analog pin 3
int val = 0;         // variable to store the read value

void setup() {
  pinMode(ledPin, OUTPUT);  // sets the pin as output
}

void loop() {
  val = analogRead(analogPin);  // read the input pin
  analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
Analog IO with Arduino - FritzenLab
Hình 2: Arduino analogWrite()

You may also like

Leave a Comment