Bài 2: Lập trình ESP32 Analog Input đọc tín hiệu tương tự (ADC)

lap trinh esp32 analog input adc

Trong bài viết này chúng ta sẽ học cách lập trình ESP32 Analog Input, hay còn gọi là ADC ( Analog Digital Convert) nghĩa chuyển đổi tín hiệu tương tự sang số, như những vi điều khiển khác.

Bài 2 trong Serie Lập trình ESP32 từ A tới Z

Khái niệm chuyển đổi tương tự sang số ADC

Chuyển đổi tương tự ra số hay ADCAnalog-to-Digital Converter) là hệ thống mạch thực hiện chuyển đổi một tín hiệu analog (tín hiệu tương tự) liên tục, ví dụ như tín hiệu âm thanh thanh micro, hay tín hiệu ánh sáng trong máy ảnh kỹ thuật số, thành tín hiệu số. Một hệ thống ADC là một bộ phận phần cứng (như một bộ tính toán độc lập) làm nhiệm vụ chuyển đổi tín hiệu analog (dưới dạng điện áp hay dòng điện) thành các giá trị số (digital) đại diện cho cường độ điện áp hay tín hiệu đó.

ADC

Có 2 tham số quan trọng của bộ ADC cần lưu ý:

  • Tốc độ lấy mẫu (sampling) được tính theo số chu kì chuyển đổi
  • Độ phân giải: Tính theo Bit bộ ADC có độ phân giải 10 Bit sẽ có 2^10 = 1024 giá trị

Đọc giá trị tương tự với ESP32 có nghĩa là bạn có thể đo các mức điện áp khác nhau giữa 0V và 3,3V. Điện áp đo được sau đó được gán cho giá trị từ 0 đến 4095, trong đó 0 tương ứng với 0V và 3,3V tương ứng với 4095. Bất kỳ điện áp nào từ 0V đến 3,3V sẽ nhận giá trị tương ứng ở giữa.

voltage levels es32

Analog Input trong ESP32

Đọc đầu vào tín hiệu tương tự cũng giống như đọc đầu vào tín hiệu số chúng ta chỉ cần một hàm đơn giản đó là analogRead() với tham số truyền vào là số chân GPIO đó.

analogRead(GPIO);
example:
int value = analogRead(2);

Ngoài ra để có thể cấu hình chi tiết cho Analog Input. Chúng ta có thể sử dụng thêm các hàm sau:

  • analogReadResolution(resolution): thiết lập độ phân giải. Giá trị từ 9 (0 – 511) đến 12 bit (0 – 4095). Mặc định là độ phân giải 12 bit.
  • analogSetWidth(width): thiết lập độ phân giải. Giá trị từ 9 (0 – 511) đến 12 bit (0 – 4095). Mặc định là độ phân giải 12 bit
  • analogSetCycles(cycles): thiết lập số chu kỳ cho một lần lấy mẫu. Mặc định là 8. Phạm vi: 1 đến 255.
  • analogSetSamples(samples): đặt số lượng mẫu trong một lần lấy mẫu. Mặc định là 1 mẫu. Nó có tác dụng làm tăng độ nhạy.
  • analogSetClockDiv(attenuation): đặt bộ chia cho clock ADC. Mặc định là 1. Phạm vi: 1 đến 255.
  • adcAttachPin(pin): Gắn một chân vào chế độ ADC (cũng xóa bất kỳ chế độ tương tự nào khác được bật trên chân đó). Trả về kết quả TRUE hoặc FALSE.
  • adcStart(pin): bắt đầu chuyển đổi ADC trên chân
  • adcBusy(pin): Kiểm tra xem chân có đang bận chuyển đổi không (trả về TRUE hoặc FALSE).
  • resultadcEnd(pin): Nhận kết quả của chuyển đổi: trả về số nguyên 16 bit.

Ví dụ lập trình ESP32 Analog Input đọc giá trị biến trở và in ra màn hình Serial

Trong bài này, chúng ta sẽ sử dụng biến trở để thay đổi điện áp đầu vào, sau đó đọc giá trị và in ra màn hình Serial.

Chúng ta cần chuẩn bị:

  • Kit ESP32
  • Breadboard: bo cắm
  • Biến trở
  • Dây dẫn

Sơ đồ kết nối

Kết nối chân thứ 2 của biến trở vào chân 34. Hai chân còn lại chúng ta kết nối với 3.3V và GND. Khi đó biến trở sẽ tạo thành một mạch phân áp. Giá trị điện áp sẽ dao động từ 0 – 3.3V

Analog Input Potentiometer 700px

Code và giải thích code

Tạo một project với Platform IO, sau đó sử dụng code sau

#include <Arduino.h>

// định nghĩa chân kết nối ADC
const int potPin = 34;

// giá trị đo được
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // Đọc giá trị analog
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}

Giái thích code:

Định nghĩa chân 34 được kết nối với biến trở

const int potPin = 34;

Khởi tạo serial để truyền lên monitor

Serial.begin(115200);

Đọc giá trị của chân ra biến potValue

potValue = analogRead(potPin);

In kết quả lên Serial Monitor

Serial.println(potValue);

Nạp Code và kết quả

Nhấn biểu tượng mũi tên để nạp. Sau đó nhấn biểu tượng monitor.

esp32 analog input

Chỉnh giá trị của biến trở và xem sự thay đổi.

analog input rotate pot

lập trình ESP32 analog input

Kết luận

ESP32 Analog Input là một bài rất đơn giản nhưng cũng cần sử dụng rất nhiều trong lập trình. Hãy tiếp tục đến với những bài tiếp theo trong seri này nhé. Đừng quên tham gia nhóm Nghiện lập trình để kết nối với những người cùng đam mê.

4 thoughts on “Bài 2: Lập trình ESP32 Analog Input đọc tín hiệu tương tự (ADC)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *