Giao tiếp cảm biến điện áp Voltage Sensor với Arduino

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ạo động lực cho Team Arduino KIT ra nhiều bài viết chất lượng hơn, các bạn có thể ủng hộ mình bằng cách Donate qua MoMo, Ngân hàng, Paypal…Nhấn vào link bên dưới nhé.

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 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.

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments