Mục lục:

Đồng hồ đo điện áp chính xác & chính xác Arduino (0-90V DC): 3 bước
Đồng hồ đo điện áp chính xác & chính xác Arduino (0-90V DC): 3 bước

Video: Đồng hồ đo điện áp chính xác & chính xác Arduino (0-90V DC): 3 bước

Video: Đồng hồ đo điện áp chính xác & chính xác Arduino (0-90V DC): 3 bước
Video: Mạch đo điện áp pin và dòng bằng arduino + ads1115 16bit ADC - Tự Làm Máy Bay Giống DJI (phần 3) 2024, Tháng mười một
Anonim

Trong tài liệu hướng dẫn này, tôi đã chế tạo một vôn kế để đo điện áp cao DC (0-90v) với độ chính xác và độ chính xác tương đối bằng cách sử dụng Arduino Nano.

Các phép đo thử nghiệm mà tôi thực hiện đủ chính xác, hầu hết trong khoảng 0,3v so với điện áp thực được đo bằng vôn kế tiêu chuẩn (tôi sử dụng Astro AI DM6000AR). Điều này đủ gần cho mục đích sử dụng thiết bị của tôi.

Để lưu trữ điều này, tôi đã sử dụng tham chiếu điện áp (4.096v) và bộ chia điện áp.

Về mặt mã, tất nhiên, tôi đã sử dụng tùy chọn "tham chiếu bên ngoài" cho Arduino Nano và ví dụ "Làm mịn" trong hướng dẫn Arduino.

Quân nhu

1 x Arduino Nano - Liên kết

1 x Màn hình Oled (SSD 1306) - Liên kết

Điện trở 1 x 1 / 4W 1% - 1k ohm - Liên kết

Điện trở 1 x 1 / 4W 1% - 220k ohm - Liên kết

Điện trở 1 x 1 / 4W 1% - 10k ohm - Liên kết

Tham chiếu điện áp 1 x 4.096v LM4040DIZ-4.1 - Liên kết

Bảng mạch và dây - Liên kết

Astro AI DM6000AR - Liên kết

Ngân hàng điện USB - Liên kết

Pin 9V - Liên kết

CanadianWinters là người tham gia Chương trình liên kết Amazon Services LLC, một chương trình quảng cáo liên kết được thiết kế để cung cấp phương tiện cho các trang web kiếm phí bằng cách liên kết đến Amazon.com và các trang web liên kết. Bằng cách sử dụng các liên kết này, với tư cách là Cộng tác viên của Amazon, tôi kiếm được từ các giao dịch mua đủ điều kiện, ngay cả khi bạn mua thứ khác - và bạn sẽ không mất bất cứ chi phí nào.

Bước 1: Sơ đồ

Sơ đồ
Sơ đồ
Sơ đồ
Sơ đồ

Tôi đã kết nối tất cả các phần theo sơ đồ ở trên. Đặc biệt, tôi đã chọn tham chiếu điện áp 4.096 để ở càng gần vạch 5v càng tốt để tránh mất độ phân giải.

Sau biểu dữ liệu, tôi đã chọn một điện trở 1K ohm cho tham chiếu điện áp mặc dù có thể sử dụng một giá trị khác. Điện áp cho tham chiếu được cung cấp từ chân Nano 5v.

Ý tưởng của mạch là điện áp một chiều cần đo đi qua một điện trở hiệu điện thế. Điện áp được chia tỷ lệ và sau đó đi vào chân analog của Arduino để được lấy mẫu, làm mịn, điều chỉnh lại tỷ lệ và hiển thị trên màn hình OLed.

Tôi đã cố gắng giữ mọi thứ đơn giản:)

Bước 2: Tính toán mã và điện trở

Các giá trị điện trở đã được khuyến khích (nếu tôi không nhầm thì đây là trên biểu dữ liệu Arduino / Atmega) để giữ cho trở kháng dưới 10k ohm.

Để đơn giản hóa mọi thứ, tôi đã tạo một bảng tính tự động tính toán trong trường hợp bạn muốn sử dụng các giá trị điện trở khác nhau: Liên kết tới Google Trang tính

Đây là mã tôi đã sử dụng cho dự án này:

#bao gồm

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (quay, [reset]) floattage = 0; // dùng để lưu giá trị điện áp float Radjust = 0.043459459; // Hệ số phân áp (R2 / R1 + R2) float vbat = 0; // điện áp cuối cùng sau calcs- điện áp của pin float Vref = 4.113; // Tham chiếu điện áp - giá trị thực được đo. Giá trị danh nghĩa 4.096v const int numReadings = 50; // số lượng mẫu đọc - tăng để làm mượt hơn. Giảm để đọc nhanh hơn. int lần đọc [numReadings]; // các bài đọc từ đầu vào tương tự int readIndex = 0; // chỉ số của lần đọc hiện tại là unsigned long total = 0; // tổng số đang chạy int average = 0; // các biến để làm mới màn hình mà không sử dụng delay unsigned long beforeMillis = 0; // sẽ lưu trữ lần cuối cùng màn hình được cập nhật // các hằng số sẽ không thay đổi: const long distance = 50; // khoảng thời gian làm mới màn hình (mili giây) void setup (void) {analogReference (EXTERNAL); // sử dụng AREF cho điện áp tham chiếu 4.096. Điện áp thực tham chiếu của tôi là 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… quấn quanh đầu: readIndex = 0; } // tính giá trị trung bình: average = (total / numReadings); điện áp = trung bình * (Vref / 1023.0); //4.113 là Vref vbat = điện áp / Radjust; // Đặt độ trễ cho việc làm mới màn hình bằng cách sử dụng Millis if (currentMillis - beforeMillis> = khoảng) {// lưu lần cuối cùng màn hình được cập nhật trước đóMillis = currentMillis; u8g2.clearBuffer (); // xóa menory nội bộ // Hiển thị điện áp gói u8g2.setFont (u8g2_font_fub20_tr); // phông chữ 20px u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // Phông chữ 10 px u8g2.setCursor (76, 20); u8g2.print ("Vôn"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Điện áp Chính xác"); } u8g2.sendBuffer (); // chuyển bộ nhớ trong sang độ trễ hiển thị (1); }

Xin lưu ý rằng tôi hơi thiếu hiểu biết về mã hóa Arduino, vì vậy nếu bạn tìm thấy bất kỳ lỗi nào hoặc cách nào để cải thiện mã, tôi sẵn sàng góp ý:)

Bước 3: Hãy thử nghiệm

Hãy kiểm tra nó ra!
Hãy kiểm tra nó ra!
Hãy kiểm tra nó ra!
Hãy kiểm tra nó ra!
Hãy kiểm tra nó ra!
Hãy kiểm tra nó ra!

Để kiểm tra vôn kế này, tôi đã sử dụng pin 8x 9v mua ở một cửa hàng địa phương. Tôi đang định sử dụng vôn kế này để đo điện áp trên bộ ắc quy xe đạp điện của mình (chúng có điện áp dao động từ 24-60v và đôi khi là 72v).

Một khi các thiết bị điện tử được đóng gói thành một pcb và một chiếc hộp nhỏ, điều này sẽ trở thành một đồng hồ đo mức pin di động và đẹp mắt. Đồ họa và phông chữ trên OLED có thể được tùy chỉnh để phù hợp với nhu cầu của bạn (ví dụ: phông chữ lớn hơn để dễ đọc).

Mục tiêu của tôi là có số đọc điện áp trên đồng hồ Oled / Arduino không quá xa Đồng hồ đa năng kỹ thuật số của tôi. Tôi đã nhắm đến vùng đồng bằng tối đa +/- 0, 3v. Như bạn có thể thấy từ video, tôi có thể lưu trữ dữ liệu này ngoại trừ ở phần cuối của các phép đo.

Tôi hy vọng bạn thích tài liệu hướng dẫn này và hãy cho tôi biết suy nghĩ của bạn!

Đề xuất: