Вольтметр на базе Ардуино - Своими руками
Своими руками

Вольтметр на базе Ардуино

>

Этот вольтметр измеряет напряжения постоянного тока от 12 до 100 В. Устройство не нуждается во внешнем источнике питания и работает на базе Ардуино.
Инструменты и материалы:-Arduino Nano;-Дисплей SSD 1306;-ADS 1115 – 16-битный АЦП;-Резистор 690 кОм;-Резистор 10 кОм;-Макетная или печатная плата;-Цифровой мультиметр;-Преобразователь постоянного тока XH-M298;-Аккумулятор 9 В;-3D-принтере;-Нить для принтера;
Шаг первый: корпус
Корпус мастер разработал в программе CAD и затем распечатал на 3D-принтере.
Вольтметр на базе АрдуиноШаг второй: схема
Перед сборкой схемы необходимо отрегулировать преобразователь на напряжение 12В. Затем все монтируется согласно схемы. При этом контакт ADDR ADC1115 подключается к земле. Это устанавливает адрес АЦП на 0x48.
Вольтметр на базе АрдуиноВольтметр на базе АрдуиноШаг третий: код
Идея устройства состоит в том, что измеряемое постоянное напряжение проходит через делитель напряжения. Затем напряжение поступает на аналоговый вывод преобразователя АЦП для считывания, передается в Arduino через I2C, и отображается на дисплее.
Мастер сделал электронную таблицу, которая автоматизирует вычисления на случай, если используются разные значения резисторов в делителе напряжения.
Код можно скачать ниже.
Вольтметр на базе Ардуино Показать / Скрыть текст#include <Arduino.h>
#include <U8g2lib.h>
#include <Adafruit_ADS1015.h>
#include <Wire.h>
Adafruit_ADS1115 ads(0x48); //Adress of the ADC

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (rotation, [reset])
int calib = 7; // Value of calibration of ADS1115 to reduce error
float voltage =0; // used to store voltage value
float Radjust = 0.01430684; // (for 690K resistior) Voltage divider factor ( R2 / R1+R2 )
float vbat =0; //final voltage after calcs- voltage of the battery

//variables for refreshing the screen without using delay
unsigned long previousMillis = 0; // will store last time the screen was refreshed

// constants won't change:
const long interval = 250; // interval at which to refresh the screen (milliseconds)

void setup(void) {
Serial.begin(9600);
u8g2.begin();
ads.begin();

}

void loop(void) {

int16_t adc0; // 16 bits ADC read of input A0
adc0 = ads.readADC_SingleEnded(0);
voltage = ((adc0 + calib) * 0.1875)/1000;

unsigned long currentMillis = millis();

vbat = voltage/Radjust;

//Prevent displaying negative voltage when battery/power is disconnected
if (vbat < 0.1) {
vbat = 0.01;
}
// Setting the delay for the screen refresh using Millis

if (currentMillis – previousMillis >= interval) {
previousMillis = currentMillis;

u8g2.clearBuffer(); // clear the internal menory

//Pack Voltage display – Fonts at this page: https://github.com/olikraus/u8g2/wiki/fntlistall
//u8g2.setFont(u8g2_font_fub20_tr); // 20px font
u8g2.setFont(u8g2_font_fub35_tr); // 35px font
u8g2.setCursor (1, 42);
u8g2.print(vbat,2);
u8g2.setFont(u8g2_font_8x13B_mr); // 10 px font
u8g2.setCursor (1, 60);
u8g2.print("Volts");

}
u8g2.sendBuffer(); // transfer internal memory to the display
delay(1);
}
Вольтметр на базе АрдуиноШаг четвертый: тестирование
Чтобы проверить вольтметр, мастер использовал зарядное устройство для электрического велосипеда и аккумулятор, который идет в комплекте с велосипедом. Зарядное устройство установлено на 54,4 / 54,5 В.
Проверка цифровым мультиметром показала точность показаний вольтметра.
Вольтметр на базе Ардуино

SitesReady

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.