Giao tiếp cảm biến điện áp Voltage Sensor với Arduino
Cảm biến điện áp hay đơn giản là mạch chia áp, với cấu trúc đơn giản và chi phí thấp, mạch chia áp được sử dụng trong nhiều ứng dụng, bao gồm đo lường điện áp, điều khiển độ sáng, điều chỉnh tín hiệu và nhiều ứng dụng khác.
Trong bài viết này, các bạn sẽ tìm hiểu về nguyên lý hoạt động của mạch chia áp và cách tính toán để đạt được giá trị điện áp mong muốn. Các bạn cũng sẽ thực hành và tạo một mạch chia áp đơn giản để thấy được ứng dụng thực tế của nó.
Tổng quan về cảm biến điện áp
Về bản chất, Cảm biến điện áp là một mạch chia áp đơn giản bao gồm hai điện trở.
Sơ đồ của Cảm biến áp điện được minh họa trong hình ảnh sau.
Hai điện trở trong mạch. Điện trở (R1) gần với điện áp đầu vào, có giá trị 30 KΩ và điện trở (R2) gần GND (nối đất), có giá trị 7,5 KΩ. Điện áp rơi trên R2 là mạch chia áp. Tín hiệu này được ký hiệu trên cảm biến là chữ S.
Đọc giá trị cảm biến điện áp
Để đọc cảm biến điện áp hoặc bất kỳ mạch chia áp nào. Các bạn có thể sử dụng công thức sau.
Công thức mạch chia áp giả sử rằng đã biết ba giá trị của mạch trên: điện áp đầu vào (Vin) và cả hai giá trị điện trở (R1 và R2). Với những giá trị đó, các bạn có thể sử dụng công thức này để tìm điện áp đầu ra (Vout):
Tuy nhiên, trong trường hợp mình sẽ đo điện áp đầu ra (Vout) từ mạch chia áp bằng các chân ADC của Arduino. Do đó, nên mình sẽ không biết giá trị Vin là bao nhiêu.
Hãy sử dụng công thức bên dưới để tìm điện áp đầu vào (Vin).
Sơ đồ chân cảm biến điện áp
Chân đầu vào
- VCC: Được nối với nguồn điện áp dương bạn cần đo. Dải điện áp là từ 0 đến 25V.
- GND: Được nối với nguồn điện áp âm.
Chân đầu ra
- S: là chân đầu ra tín hiệu của module cảm biến áp điện. Nó thường được nối với các chân đầu vào trên Arduino.
- +: không được nối.
- –: là chân nối đất chung.
Linh kiện cần thiết cho dự án
TÊN LINH KIỆN | SỐ LƯỢNG | NƠI BÁN |
Arduino Uno R3 | 1 | Shopee | Cytron |
Cảm biến điện áp | 1 | Shopee | Cytron |
Dây cắm (Đực – Cái) | 10 – 20 | Shopee | Cytron |
Sơ đồ đấu nối cảm biến điện áp (Voltage Sensor) với Arduino Uno
Code ví dụ
Đây là một ví dụ đơn giản để đọc điện áp trên chân ADC A0, và tính toán điện áp đầu vào bằng cách sử dụng công thức chia điện áp và in kết quả ra Serial Monitor.
// Define analog input #define ANALOG_IN_PIN A0 // Floats for ADC voltage & Input voltage float adc_voltage = 0.0; float in_voltage = 0.0; // Floats for resistor values in divider (in ohms) float R1 = 30000.0; float R2 = 7500.0; // Float for Reference Voltage float ref_voltage = 5.0; // Integer for ADC value int adc_value = 0; void setup(){ // Setup Serial Monitor Serial.begin(9600); } void loop(){ // Read the Analog Input adc_value = analogRead(ANALOG_IN_PIN); // Determine voltage at ADC input adc_voltage = (adc_value * ref_voltage) / 1024.0; // Calculate voltage at divider input in_voltage = adc_voltage*(R1+R2)/R2; // Print results to Serial Monitor to 2 decimal places Serial.print("Input Voltage = "); Serial.println(in_voltage, 2); // Short delay delay(500); }
Kết quả khi cấp 5V cho cho cảm biến điện áp:
Và đây là khi cấp 12V.
Giải thích Code
// Define analog input #define ANALOG_IN_PIN A0
Sử dụng hằng số ANALOG_IN_PIN
để định nghĩa chân Analog đầu vào (ở đây là chân A0).
// Floats for ADC voltage & Input voltage float adc_voltage = 0.0; float in_voltage = 0.0; // Floats for resistor values in divider (in ohms) float R1 = 30000.0; float R2 = 7500.0; // Float for Reference Voltage float ref_voltage = 5.0; // Integer for ADC value int adc_value = 0;
adc_voltage và in_voltage là hai biến float để lưu trữ giá trị điện áp đọc được từ ADC và giá trị điện áp đầu vào của mạch chia áp. R1 và R2 là giá trị của hai resistor trong mạch chia áp, ref_voltage là giá trị điện áp tham chiếu (ở đây là 5V). adc_value là biến integer để lưu trữ giá trị đọc từ ADC.
void setup(){ // Setup Serial Monitor Serial.begin(9600); }
Trong hàm setup()
, khởi tạo giao tiếp với Serial Monitor bằng cách gọi Serial.begin(9600).
adc_value = analogRead(ANALOG_IN_PIN);
Trong hàm loop()
, đọc giá trị Analog từ chân đầu vào (analogRead(ANALOG_IN_PIN)) và gán cho biến adc_value.
adc_voltage = (adc_value * ref_voltage) / 1024.0;
Tiếp theo, dựa vào giá trị đọc từ ADC, tính toán giá trị điện áp tương ứng bằng cách nhân giá trị đọc với giá trị điện áp tham chiếu và chia cho 1024 (adc_voltage = (adc_value * ref_voltage) / 1024.0)
.
in_voltage = adc_voltage*(R1+R2)/R2;
Dựa vào giá trị adc_voltage, tính toán giá trị điện áp đầu vào của mạch chia áp bằng cách nhân adc_voltage với tổng của hai resistor (R1+R2) và chia cho giá trị của R2 (in_voltage = adc_voltage*(R1+R2)/R2)
.
Serial.print("Input Voltage = "); Serial.println(in_voltage, 2); delay(500);
In giá trị điện áp đầu vào của mạch chia áp lên Serial Monitor với 2 chữ số thập phân (Serial.println(in_voltage, 2))
.
Delay 500ms trước khi bắt đầu vòng lặp tiếp theo.