ESP32 Potentiometer (Biến Trở Xoay)

Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 với potentiometer (biến trở xoay). Cụ thể, chúng ta sẽ học:

Linh Kiện Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×Chiết áp
1×Alternatively, 10k Ohm Trimmer Potentiometer
1×Mô-đun chiết áp có núm xoay
1×(Thay thế) Potentiometer Kit
1×(Thay thế) Potentiometer Module with Knob
1×breadboard
1×dây jumper
1×(Tùy chọn) DC Power Jack
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Potentiometer

Potentiometer (còn được gọi là cảm biến góc xoay) được sử dụng để thay đổi các cài đặt (ví dụ: âm lượng loa, nhiệt độ phòng, độ sáng đèn...)

chiết áp sơ đồ chân

Sơ Đồ Chân Potentiometer

Potentiometer thường có 3 chân:

  • Chân VCC: kết nối chân này với VCC (5V hoặc 3.3V)
  • Chân GND: kết nối chân này với GND (0V)
  • Chân Output: xuất điện áp ra chân đầu vào của ESP32.
chiết áp sơ đồ chân

※ Lưu ý:

Chân GND và chân VCC có thể hoán đổi cho nhau

Cách Hoạt Động Của Potentiometer

Trục của potentiometer có thể được xoay từ 0° (gần nhất với chân GND) đến một góc (gần nhất với chân VCC), được gọi là ANGLE_MAX.

Điện áp ở chân output tỷ lệ thuận với vị trí góc của trục, biến thiên từ 0 đến VCC. Bảng dưới đây thể hiện mối quan hệ giữa góc và điện áp trên chân output:

Góc Điện Áp
0v
ANGLE_MAX°VCC
angle°angle° × VCC / ANGLE_MAX°

※ Lưu ý:

Giá trị ANGLE_MAX phụ thuộc vào nhà sản xuất.

how chiết áp works

ESP32 - Potentiometer Xoay

Chân analog input của ESP32 chuyển đổi điện áp (giữa 0v và 3.3V) thành giá trị số nguyên (giữa 0 và 4095), được gọi là giá trị ADC hoặc giá trị analog.

Chúng ta có thể kết nối chân output của potentiometer với chân analog input của ESP32, sau đó đọc giá trị analog từ chân đó.

Giá trị analog từ chân input có thể được chia tỷ lệ thành giá trị khác. Hãy xem các trường hợp sử dụng:

  • Chia tỷ lệ giá trị analog thành góc của potentiometer.
  • Chia tỷ lệ giá trị analog thành điện áp của potentiometer.
  • Chia tỷ lệ giá trị analog thành giá trị cài đặt (ví dụ: âm lượng loa, nhiệt độ phòng, độ sáng đèn...)

Phạm Vi Chia Tỷ Lệ

TỪ ĐẾN
Gócxoay bởi người dùngANGLE_MAX°
Điện áptừ chân của potentiometer 0V3.3V
Giá trị ADCđọc bởi ESP32 04095
Giá trị cài đặtchuyển đổi bởi ESP32 VALUE_MINVALUE_MAX

Sơ Đồ Đấu Nối Giữa Potentiometer và ESP32

  • Cách kết nối ESP32 và potentiometer sử dụng breadboard
ESP32 chiết áp sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

how to connect ESP32 and chiết áp

Cách Lập Trình Potentiometer

  • Đọc giá trị từ chân input, được kết nối với chân output của potentiometer bằng cách sử dụng hàm analogRead().
analogValue = analogRead(36); // GPIO36
  • Chia tỷ lệ thành góc của potentiometer bằng cách sử dụng hàm map().
angle = map(analogValue, 0, 4095, 0, ANGLE_MAX);
  • Chia tỷ lệ thành điện áp của potentiometer:
voltage = map(analogValue, 0, 4095, 0, 3.3);
  • Chia tỷ lệ thành giá trị điều khiển (ví dụ: âm lượng stereo, độ sáng, tốc độ động cơ DC...)
value = map(analogValue, 0, 4095, VALUE_MIN, VALUE_MAX);
  • Ví dụ, chia tỷ lệ thành độ sáng của LED. Như đã đề cập trong hướng dẫn này, độ sáng của LED có thể được điều khiển bằng giá trị PWM từ 0 (luôn TẮT) đến 255 (luôn BẬT). Do đó, chúng ta có thể ánh xạ giá trị analog thành độ sáng của LED (từ TẮT đến sáng nhất) như sau:
brightness = map(analogValue, 0, 4095, 0, 255);

Nếu bạn muốn điều chỉnh độ sáng LED từ ánh sáng ban đêm đến sáng nhất,

nightlight = 100; // tùy thuộc vào độ sáng mong muốn của bạn brightness = map(analogValue, 0, 4095, nightlight, 255);

※ Lưu ý:

Hàm map() chỉ có thể được sử dụng để chia tỷ lệ giá trị analog thành giá trị kiểu int hoặc long. Nếu giá trị điều khiển là kiểu float, bạn cần sử dụng hàm floatMap() thay vì hàm map().

Hàm floatMap():

float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

Code ESP32

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-potentiometer */ float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin GPIO36: int analogValue = analogRead(36); // Rescale to potentiometer's voltage (from 0V to 3.3V): float voltage = floatMap(analogValue, 0, 4095, 0, 3.3); // print out the value you read: Serial.print("Analog: "); Serial.print(analogValue); Serial.print(", Voltage: "); Serial.println(voltage); delay(1000); }

Các Bước Nhanh

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Sao chép code trên và dán vào Arduino IDE.
  • Biên dịch và upload code lên board ESP32 bằng cách nhấp vào nút Upload trên Arduino IDE
tải mã lên Arduino IDE
  • Mở Serial Monitor trên Arduino IDE
how to open serial monitor on Arduino ide
  • Xoay potentiometer
  • Xem kết quả trên Serial Monitor. Nó sẽ trông như thế này:
COM6
Send
Analog: 0, Voltage: 0.00 Analog: 0, Voltage: 0.00 Analog: 126, Voltage: 0.62 Analog: 281, Voltage: 1.37 Analog: 517, Voltage: 2.53 Analog: 754, Voltage: 3.69 Analog: 906, Voltage: 4.43 Analog: 4095, Voltage: 3.30 Analog: 4095, Voltage: 3.30
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Lưu ý:

Hướng dẫn này sử dụng hàm analogRead() để đọc giá trị từ ADC (Analog-to-Digital Converter) kết nối với potentiometer. ADC của ESP32 phù hợp cho các dự án KHÔNG cần độ chính xác cao. Tuy nhiên, đối với các dự án cần đo lường chính xác, hãy lưu ý:

  • ADC của ESP32 không hoàn toàn chính xác và có thể cần hiệu chuẩn để có kết quả chính xác. Mỗi board ESP32 có thể hơi khác nhau, vì vậy bạn cần hiệu chuẩn ADC cho từng board riêng lẻ.
  • Hiệu chuẩn có thể khó khăn, đặc biệt đối với người mới bắt đầu, và có thể không luôn cho kết quả chính xác như mong muốn.

Đối với các dự án cần độ chính xác cao, hãy cân nhắc sử dụng ADC ngoài (ví dụ ADS1115) với ESP32 hoặc sử dụng Arduino, có ADC đáng tin cậy hơn. Nếu bạn vẫn muốn hiệu chuẩn ADC của ESP32, hãy tham khảo ESP32 ADC Calibration Driver

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Bình Luận