Chế tạo đồng hồ đo điện áp DC 0-25V, hiển thị lên OLED 0.96 bằng Arduino

Chế tạo đồng hồ đo điện áp DC 0-25V, hiển thị lên OLED 0.96 bằng Arduino

Trong bài viết trước đó mình đã hướng dẫn cho các bạn cách giao tiếp cảm biến điện áp (Voltage Sensor) với Arduino. Để hiểu rõ hơn những ứng dụng từ cảm biến này mang lại, thì bài viết này mình sẽ chế tạo một bộ đo điện áp DC 0-25V có thể dùng để đo nguồn, Pin hoặc bình ác quy…

Linh kiện cần thiết cho dự án

TÊN LINH KIỆN SỐ LƯỢNG NƠI BÁN
Arduino Nano 1 Shopee | Cytron
Cảm biến điện áp 1 Shopee | Cytron
Màn hình OLED 0.96 I2C 1 Shopee | Cytron
Còi Chip 5VDC 1 Shopee | Cytron
Transistor 2N2223 hoặc C1815 1 Shopee | Cytron
Điện trở 10K 1 Shopee | Cytron
Tụ phân cực 470uF 2 Shopee | Cytron
IC ổn áp LM7805 1 Shopee | Cytron
Jack nguồn DC 1 Shopee | Cytron
Dây cắm (Đực – Cái) 10 – 20 Shopee | Cytron

Tổng quan về cảm biến điện áp

Đối với dự án này mình sẽ sử dụng một module cảm biến điện áp Arduino, được sử dụng khá phổ biến các bạn có thể tìm mua một cách dễ dàng ở bất kỳ cửa hàng linh kiện điện tử nào hoặc nhấn vào liên kết bên trên để mua sản phẩm.

Voltage Sensor cơ bản là một mạch chia áp đơn giản bao gồm hai điện trở 30K và 7.5k nối tiếp với nhau. Tiếp điểm giữa hai điện trở sẽ là đầu ra (S) và được nối với chân Analog trên Arduino. Các bạn có thể tìm hiểu rõ hơn bằng cách nhấp vào liên kết của bài viết bên dưới.

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

Sơ đồ đấu nối

Code cảm biến điện áp

#include <SPI.h>  // include libraries
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
float correctionfactor = .5;
int VoltageSensor = A1;
float vout = 0.0;
float vin = 0.0;
int buzzer = 4;
// two resistors 30K and 7.5k ohm
float R1 = 30000;  //
float R2 = 7500;   //
int value = 0;
#define SCREEN_WIDTH 128  // ORelay display width, in pixels
#define SCREEN_HEIGHT 64  // ORelay display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define ORelay_RESET -1  // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, ORelay_RESET);

void setup() {
  Serial.begin(9600);
  pinMode(VoltageSensor, INPUT);
  pinMode(buzzer, OUTPUT);
  Serial.print("DC VOLTMETER");
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}
void loop() {
  // read the value at analog input
  value = analogRead(VoltageSensor);
  vout = (value * 5.0) / 1023.0;
  vin = vout / (R2 / (R1 + R2));
  vin = vin - correctionfactor;

  if (vin < 5) {
    digitalWrite(buzzer, HIGH);
  } else {
    digitalWrite(buzzer, LOW);
  }
  Serial.print("INPUT V= ");
  Serial.println(vin, 4);
  display.clearDisplay();
  display.setCursor(10, 20);
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.print(String(vin) + "V");
  display.display();
  delay(500);
}

Giải thích Code

#include <SPI.h>  // include libraries
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Khai báo các thư viện cần thiết cho dự án. Ở đây, sử dụng thư viện SPI, Wire (I2C), Adafruit_GFX và Adafruit_SSD1306 để điều khiển màn hình OLED.

float correctionfactor = .5;
int VoltageSensor = A1;
float vout = 0.0;
float vin = 0.0;
int buzzer = 4;

Khai báo và định nghĩa các giá trị cho cảm biến. Trong đó correctionfactor là hệ số hiệu chỉnh, VoltageSensor là chân Analog A1 kết nối với cảm biến điện áp, VoutVin là các biến để lưu giá trị điện áp đo được.

// two resistors 30K and 7.5k ohm
float R1 = 30000;  //
float R2 = 7500;   //

R1 và R2 là các giá trị của hai resistor được sử dụng để đo điện áp

void setup() {
  Serial.begin(9600);
  pinMode(VoltageSensor, INPUT);
  pinMode(buzzer, OUTPUT);
  Serial.print("DC VOLTMETER");
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

Trong hàm setup(), khởi tạo giao tiếp Serial với tốc độ 9600 baud, thiết lập chế độ INPUT cho chân VoltageSensor và OUTPUT cho chân buzzer. Sau đó, khởi động màn hình OLED và xóa tất cả nội dung hiển thị ban đầu.

void loop() {
  // read the value at analog input
  value = analogRead(VoltageSensor);
  vout = (value * 5.0) / 1023.0;
  vin = vout / (R2 / (R1 + R2));
  vin = vin - correctionfactor;

  if (vin < 5) {
    digitalWrite(buzzer, HIGH);
  } else {
    digitalWrite(buzzer, LOW);
  }
  Serial.print("INPUT V= ");
  Serial.println(vin, 4);
  display.clearDisplay();
  display.setCursor(10, 20);
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.print(String(vin) + "V");
  display.display();
  delay(500);
}

Trong hàm loop(), đọc giá trị từ cảm biến điện áp Analog bằng cách sử dụng analogRead(VoltageSensor). Sau đó, tính toán giá trị điện áp thực tế từ giá trị đọc được (Vout và Vin) bằng cách áp dụng công thức tính toán dựa trên giá trị điện trở (resistor) R1 và R2. Nếu giá trị đo được nhỏ hơn 5V, bật còi (buzzer) cảnh báo và ngược lại.

Gửi các giá trị điện áp đo được (Vin) thông qua cổng Serial Monitor và hiển thị lên màn hình OLED 0.96. Đồng thời, delay trong 500ms trước khi lặp lại quá trình đo điện áp.

Hình ảnh thực tế

Để kiểm tra đồng hồ đo điện áp, mình sử dụng một Adapter 12V để đo.

Khi đo bằng đồng hồ đo điện đa năng điện áp hiển thị là 12.28V.

Đây là điện áp mình đo được trên đồng hồ đo mình vừa chế tạo xong, kết quả đo tương đương với đồng hồ đa năng.

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments