Уроки arduino: создаем вольтметр на 5 вольт своими руками

Вольтметр на Arduino | Каталог самоделок

Широкий интерес для любителей самодельных электронно-программируемых устройств представляют многофункциональные сборки Arduino, позволяющие воплощать в жизнь интересные задумки.

Основное преимущество готовых схем Arduino заключается в уникальном блочно-модульном принципе: каждая плата может быть добавлена дополнительными интерфейсами, бесконечно расширяя возможности для создания различных проектов.

Модули Arduino построены на универсальном микроконтроллере с собственным загрузчиком, что позволяет легко прошивать его необходимым программным кодом, без использования дополнительных устройств. Программирование осуществляется на стандартном языке С++.

Одним из простейших примеров использования Arduino может стать реализация на базе этой сборки вольтметра постоянного напряжения повышенной точности с диапазоном измерения от 0 до 30 В.

Аналоговые входы Arduino предназначены для постоянного напряжения не более пяти вольт, поэтому, использование их при превышающих это значение напряжениях возможно с делителем напряжения.

Схема подключения Areduino через делитель напряжения

Делитель напряжения состоит из двух последовательно соединенных сопротивлений. Расчет его производится по формуле:

Где, в данном случае,  – максимальное измеряемое напряжение,  – напряжение после делителя, поступающее на аналоговые вход Arduino, R1 и R2 – значения сопротивлений первого и второго элемента делителя, соответственно.

Чтобы установить определенный «запас прочности» разрабатываемого вольтметра и для простоты подсчетов можно принять величину сопротивлений R1=10кОм и R2=100кОм. В этом случае, на сборку можно подавать напряжение до 55 В.

Встроенный в схему Arduino датчик преобразует поданное на вход А0 напряжение в цифровой сигнал, который поступит на микроконтроллер и будет им обработан, с помощью заложенной в память программы будут произведены необходимые вычисления и значение реального напряжения выведутся на жидкокристаллическом индикаторе.

Наладка прибора и корректировка скретч-листинга программы должны не вызывать затруднений.

Обычные резисторы, используемые в радиолюбительской массе, имеют среднюю погрешность 10 % от номинала. Использование же прецизионных сопротивлений высокой точности не всегда может быть возможным из-за их высокой стоимости.

Поэтому, если при проверке образцовым лабораторным измерительным прибором, обнаружилась погрешность измерения, необходимо проверить реальное сопротивление каждого элемента делителя и отредактировать программу (R1, R2).

Следующим шагом наладки должен стать замер напряжения между клеммами +5 и общей («земля») Arduino. В случае, если полученное значение не будет ровно 5 В, нужно также произвести изменения в коде (заменить число 5 в строке vout=(value*5)…) на действительное напряжение.

Следует не забывать, что даже небольшое превышение напряжения (выше 55 В)приведет к выходу из строя Arduino, поэтому, рационально не применять вольтметр для высоких величин, установив верхней планкой 30 В.

Схема вольтметра на Areduino

Код программы :

#include
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // resistance of R1 (100K) -see text!
float R2 = 10000.0; // resistance of R2 (10K) — see text!
int value = 0;
void setup(){
pinMode(analogInput, INPUT);
begin(16, 2);
print(«DC VOLTMETER»);
}
void loop(){
// read the value at analog input
value = analogRead(analogInput);
vout = (value * 5.0) / 1024.0; // see text
vin = vout / (R2/(R1+R2));
if (vin

Источник: https://volt-index.ru/podelki-dlya-avto/voltmetr-na-arduino.html

Вольт-ампер-energy-метр на Arduino. Часть 1. Вольтметр

Идея устройства для измерения напряжения, тока, емкости, разряда, а может и заряда возникла давно и не только у меня.

Можно найти немало игрушек под названием USB Tester (Doctor) для тестирования различных устройств с USB.

Мне же интересно несколько более универсальное устройство, независимое от интерфейса, а просто рассчитанное на определенные напряжения и токи. Например, 0 — 20.00в, 0 — 5.00а, 0 — 99.99Ач. Что касается функций, то я вижу так

  • Отображение текущих напряжения и тока, то есть вольт-ампер-метр. Впринципе, можно и мощность сразу отразить.
  • Подсчет и отображение накопленной емкости. В ампер-часах и всего скорее в ватт-часах. 
  • Отображение времени процесса
  • И, всего скорее, настраиваемые нижний и верхний пороги отключения по напряжению (ограничения разряда и заряда)

Разработка

Для реализации расчетов и измерений нам понадобится контроллер. Я вспомнил эту идею в рамках знакомства с Arduino, поэтому контроллером будет простая популярная Atmega328 и программироваться она будет в среде Arduino. С инженерной точки зрения выбор наверно не самый хороший — контроллер для задачи слегка жирноват, а его АЦП не назовешь измерительными, но… будем пробовать.

  • Паять в этом проекте много не будем. В качестве основы возьмем готовый модуль Arduino Pro Mini, благо китайцы готовы их поставлять по $1.5 в розницу.
  • В качестве устройства отображения будет выступать дисплей 1602 — еще $1.5. У меня вариант с интерфейсным модулем I2C, но в этом проекте он не сильно нужен ($0.7).
  • Для разработки нам понадобиться макетная плата. В моем случае это небольшая BreadBoard за $1.
  • Разумеется понадобятся провода и некоторое количество резисторов разного номинала. Для дисплея 1602 без I2C нужен также подбор контрастности — делается переменным резистором на 2 — 20 кОм.
  • Для реализации амперметра понадобится шунт. В первом приближении им может быть резистор 0.1 Ом, 5 Вт.
  • Для реализации автоматики отключения понадобится реле с контактами рассчитанными на максимальный ток устройства и напряжением равным напряжению питания. Для управления реле нужен npn транзистор и защитный диод.
  • Устройство будет питаться от внешнего источника питания, очевидно, что не менее 5 в. Если питание будет сильно варьироваться, то так же потребуется интегральный стабилизатор типа 7805 — он и определит напряжение реле.
  • В случае Arduino Pro Mini для заливки прошивки потребуется USB-TTL конвертер.
  • Для наладки понадобится мультиметр.

Вольтметр

Я реализую простой вольтметр с одним диапазоном примерно 0 — 20в.

Это замечанием важно, тк АЦП нашего контроллера имеет разрядность 10 бит (1024 дискретных значения), поэтому погрешность составит не менее 0.02 в (20 / 1024).

Для реализации железно нам нужен аналоговый вход контроллера, делитель из пары резисторов и какой-нибудь вывод (дисплей в законченном варианте, для отладки можно последовательный порт).

Принцип измерения АЦП состоит в сравнении напряжения на аналоговом входе с опорным VRef. Выход АЦП всегда целый — 0 соответствует 0в, 1023 соответствует напряжению VRef. Измерение реализовано путем серии последовательных чтений напряжения и усреднения по периоду между обновлениями значения на экране.

Выбор опорного напряжения важен, поскольку по умолчанию оно равно напряжению питания, которое может быть не стабильно. Это нам совершенно не подходит — за основу мы будем брать стабильный внутренний опорный источник напряжением 1.1в, инициализируя его вызовом analogReference(INTERNAL).

Читайте также:  Аналоги микроконтроллеров: популярные модели, плюсы и минусы

Затем мы откалибруем его значение по показаниям мультиметра.

На схеме слева — вариант с прямым управлением дисплея (он просто управляется — смотрите стандартный скетч LiquidCrystalHelloWorld). Справа — вариант с I2C, который я и буду использовать дальше. I2C позволяет сэкономить на проводах (коих в обычном варианте — 10, не считая подсветки).

Но при этом необходим дополнительный модуль и более сложная инициализация. В любом случае, отображение символов на модуле надо сначала проверить и настроить контрастность — для этого надо просто вывести после инициализации любой текст.

Контрастность настраивается резистором R1, либо аналогичным резистором I2C модуля.

Вход представляет собой делитель 1:19, который позволяет при Vref = 1.1 получить максимальное напряжение около 20в (обычно параллельно входу ставят конденсатор + стабилитрон для защиты, но нам пока это не важно).

Резисторы имеют разброс, да и опорное Vref контроллера тоже, поэтому после сборки надо измерить напряжение (хотя бы питания) параллельно нашим устройством и эталонным мультиметром и подобрать Vref в коде до совпадения показания.

Так же стоить отметить, что любой АЦП имеет напряжение смещения нуля (которое портит показания в начале диапазона), но мы пока не будем в это углубляться.

Также важным будет разделение питающей и измерительной «земли». Наш АЦП имеет разрешение чуть хуже 1мВ, что может создавать проблемы при неправильной разводке, особенно на макете.

Поскольку разводка платы модуля уже сделана и нам остается только выбор пинов. «Земляных» пинов у модуля несколько, поэтому мы должны сделать так, чтобы питание в модуль заходило по одной «земле», а измерения по другой.

Фактически для изменений я всегда использую «земляной» пин ближайший к аналоговым входам.

Для управление I2C используется вариант библиотеки LiquidCrystal_I2C — в моем случае указывается специфическая распиновка модуля I2C (китайцы производят модули с отличающимся управлением). Так же отмечу, что I2C в Arduino предполагает использование именно пинов A4, A5 — на плате Pro Mini они находятся не с краю, что неудобно для макетирования на BreadBoard.

Исходный код

#include
#include // Простой вольтметр с i2c дисплеем 1602. V 16.

11 // Настройки i2c дисплея 1602 с нестандартной распиновкой
#define LCD_I2C_ADDR    0x27 
#define BACKLIGHT     3      
#define LCD_EN  2            
#define LCD_RW  1            
#define LCD_RS  0            
#define LCD_D4  4            
#define LCD_D5  5            
#define LCD_D6  6            
#define LCD_D7  7            
 
LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7); // Время обновления показаний, мс (200-2000)
#define REFRESH_TIME  330 // Аналоговй вход
#define PIN_VOLT A0
// Внутреннее опорное напряжение (подобрать)
const float VRef = 1.10;
// Коэффициент входного резистивного делителя (Rh + Rl) / Rl. IN 0.2) InVolt += 3;
  // Перевод в вольты (Value: 0..1023 -> (0..VRef) scaled by Mult)
  Volt = InVolt * VoltMult * VRef / 1023;
  // Вывод данных
  lcd.setCursor (0, 1);
  lcd.print(Volt);
  lcd.print(«V «);
}

Ссылки

Железо

Источник: http://alexeevd.narod.ru/publ/arduino_voltmetr/1-1-0-8

4-канальный вольтметр с ЖК-индикатором на базе Arduino

Четырехканальный «Arduino-вольтметр» может измерять четыре независимых напряжения постоянного тока в диапазоне от 0 до 50В. Аналоговые каналы с A2 по A5 на Arduino Uno используются для измерения четырех различных напряжений. Измеренные значения напряжений отображаются на 16-символьном, двухстрочном ЖК-индикаторе.

Напряжения отображаются в виде значения с одной цифрой после запятой, напр., 5.3В, 12.8В и т.д.

На видео ниже показана работа вольтметра на базе Arduino, который измеряет напряжение четырех батарей с различным уровнем напряжения.

Принцип работы вольтметра

Каждый канал вольтметра на базе Arduino имеет пару резисторов, которые образуют делитель напряжения. Делитель напряжения уменьшает входное напряжение до уровня, который может быть измерен микроконтроллером Arduino. Запущенный код на Arduino вычисляет действительное значение напряжения и отображает результат на ЖК-дисплее.

Электрическая схема вольтметра на базе Arduino

Перед началом сборки схемы убедитесь в том, что ваш ЖК-дисплей имеет такое же количество выводов, что и дисплей, указанный на схеме. При неправильном подключении ЖК-дисплей может выйти из строя.

В данном учебном материале Arduino LCD показано, как подключить ЖК-дисплей к плате Arduino Uno. 

Напряжение измеряется между точками A, B, C или D и землей или 0В. Не забудьте отрегулировать уровень контрастности с помощью потенциометра, чтобы показания на ЖК-дисплее были видимыми.

Резистор R1 обеспечивает ограничение тока для опциональной задней подсветки и позволяет ей быть постоянно включенной.

Скетч вольтметра на базе Arduino

Переменные sum и voltage объединяются в массив, что позволяет сохранять значения показаний от четырех аналоговых каналов. 

Калибровка

Процесс калибровки подробно описан в статье Измерение напряжения постоянного тока с использованием Arduino, но в нашем случае нужно вычислить коэффициент деления 4 делителей напряжения.

Значения калибровки могут быть легко изменены в верхней части кода:

// voltage divider calibration values
#define DIV_1 11.1346
#define DIV_2 11.1969
#define DIV_3 11.0718
#define DIV_4 11.0718
// ADC reference voltage / calibration value
#define V_REF 4.991

Калибровка опорного напряжения

Измерьте напряжение 5В и измените значения константы V_REF в соответствии с измеренным значением.

Измерьте напряжение в схеме с подключенным ЖК-дисплеем и при запущенном скетче, поскольку напряжение может измениться при подключении ЖК-дисплея.

Например, при подключенной схеме, значение напряжения с величины 5.015В при отключенном ЖК-дисплее может упасть до 4.991В при подключенном ЖК-дисплее на том же «железе».

Калибровка делителя напряжения

Измените значения делителя напряжения для каждого делителя напряжения от DIV_1 до DIV_4 в верхней части скетча. DIV_1 — DIV_4 соответствуют аналоговым выводам A2 — A5.

Список радиоэлементов

Скачать список элементов (PDF)

Оригинал статьи

Прикрепленные файлы:

Источник: http://cxem.net/arduino/arduino145.php

Вольт ампер метр на Arduino мини часть 1,2 | Пелинг Инфо солнечные батареи — ветрогенераторы DIY своими руками 2011 г-2018г

Найдена интересная схема хоть и старая, и код там ограменный но плюс такого измерителя на ардуинке найдут те кто не разу нечего подобного не собирал. Так как скетч проливается без заморочки с библиотеками и деталей там толком нет. Я решил по практиковаться и собрать подобную схему для дела, чтобы видеть какая мощность прилетает на панели для испытаний контроллеров. 

Читайте также:  Программирование детям: рекомендации, основные языки

И так первоисточник:  http://rexpirando.blogspot.ru/2011/01/volt-amperimetro-com-arduino-parte-1.html

Автор : Renato

Дополнительная ссылка на схему принципиальную : http://rexpirando.blogspot.ru/2011/01/volt-amperimetro-com-arduino-parte.html

Схемы :

Что вам понадобится:

  • 1 —  Arduino — любая;
  • Монтажная плата — у меня их ушло две.
  • 1 — Дисплей 1602A (16×2 с подсветкой);
  • 1 — зуммер — не обязательно;
  • 2  — переходники клемники двойной;
  • 3  —  (кнопки);
  • 1  — Потенциометр 10k;
  • 6 — резисторы 10k;
  • 2 — резисторы 100k;
  • 1 — резистор 100R;
  • 1 — резистор 10R;
  • 1 — резистор 0.47R с 5W власти — я ставил на 10W -25W сопротивлением от 0.10 ом до 1 Ом — все работает —  с обычными шунтами не получилось!

Скетч к сожалению нет возможности выложить на этом компьютере, так что придется выложить весь код :

//version #define NAME «Arduino Ammeter» #define VERSION «0.9» //debug flag (avoid enabling. it makes your device slower) //#define DEBUG //pins const int PIN_BACKLIGHT = 7; const int PIN_BUZZER = 3; const int PIN_VOLTAGE = 0; const int PIN_CURRENT = 1; const int PIN_BUTTON_UP = 6; const int PIN_BUTTON_SETUP = 5; const int PIN_BUTTON_DOWN = 4; // includes #include #include // initialize the library with the numbers of the interface pins LiquidCrystal lcd(13, 12, 11, 10, 9, 8); //variables //voltage int VOLTAGE_CURRENT; int VOLTAGE_LAST=99999; unsigned long VOLTAGE_MILLIS; float VOLTAGE_CALCULATED; float VOLTAGE_MAP = 50; //default voltage map… calibration needed //current int CURRENT_CURRENT; int CURRENT_LAST=99999; unsigned long CURRENT_MILLIS; float CURRENT_CALCULATED; float CURRENT_MAP = 10; //default current map… calibration needed //buttons boolean BUTTON_PRESSED = false; unsigned long BUTTON_MILLIS = false; byte BUTTON_LAST; boolean SETUP_MODE = false; byte SETUP_ITEM; boolean SETUP_DELAYBEEP; //… unsigned long MILLIS; unsigned long SETUP_BLINKMILLIS; boolean SETUP_BLINKSTATE; //parameters const int SENSOR_INTERVAL = 500; const int BUTTON_HOLDTIME = 2000; const int SETUP_MAXITEMS = 2; const int SETUP_BLINKINTERVAL = 300; const byte EEPROM_VALIDATOR = 73; //random number const float VOLTAGE_STEP = 0.1; const float CURRENT_STEP = 0.1; //configuration const byte EEPROM_CONFIGADDRESS = 0; struct config_t { byte Validator; ///////////////////// float VOLTAGE_MAP; float CURRENT_MAP; ///////////////////// byte ValidatorX2; } EEPROM_DATA; void setup() { //configure pins pinMode(PIN_BACKLIGHT, OUTPUT); pinMode(PIN_BUZZER, OUTPUT); pinMode(PIN_VOLTAGE, INPUT); pinMode(PIN_CURRENT, INPUT); pinMode(PIN_BUTTON_UP, INPUT); pinMode(PIN_BUTTON_SETUP, INPUT); pinMode(PIN_BUTTON_DOWN, INPUT); //set up LCD lcd.begin(16, 2); //initial message lcd.setCursor(0, 0); lcd.print(NAME); lcd.setCursor(0, 1); lcd.print(«Version «); lcd.print(VERSION); //lights up digitalWrite(PIN_BACKLIGHT, HIGH); #ifdef DEBUG delay(2000); lcd.setCursor(0, 1); lcd.print(«Debug enabled! «); lcd.print(VERSION); Serial.begin(9600); Serial.println(«============================»); Serial.println(NAME); Serial.println(«Version «); Serial.println(VERSION); Serial.println(«============================»); Serial.println(«Debug messages:»); Serial.println(«—————————-«); #endif //try to load the configuration loadConfiguration(); //show initial message for a while then clear and beep delay(2000); lcd.clear(); showLabels(); //beep beepStart(); } void loop() { processButtons(); MILLIS = millis(); if ( (MILLIS — VOLTAGE_MILLIS) >= SENSOR_INTERVAL ) { readVoltage(); if (!SETUP_MODE || SETUP_ITEM!=1) { showVoltage(); } VOLTAGE_MILLIS = MILLIS; } if ( (MILLIS — CURRENT_MILLIS) >= SENSOR_INTERVAL ) { readCurrent(); if (!SETUP_MODE || SETUP_ITEM!=2) { showCURRENT(); } CURRENT_MILLIS = MILLIS; } if (SETUP_MODE) { if ( (MILLIS — SETUP_BLINKMILLIS) >= SETUP_BLINKINTERVAL ) { if (SETUP_BLINKSTATE) { if (SETUP_ITEM==1) showVoltage(); else if (SETUP_ITEM==2) showCURRENT(); SETUP_BLINKSTATE = false; } else { if (SETUP_ITEM==1) hideVoltage(); else if (SETUP_ITEM==2) hideCURRENT(); SETUP_BLINKSTATE = true; } SETUP_BLINKMILLIS = MILLIS; } } } void processButtons() { if (digitalRead(PIN_BUTTON_UP) == HIGH) { if (!BUTTON_PRESSED) { #ifdef DEBUG showDebug(«Pressed UP»); #endif BUTTON_LAST = PIN_BUTTON_UP; BUTTON_PRESSED = true; } } else if (digitalRead(PIN_BUTTON_SETUP) == HIGH) { if (!BUTTON_PRESSED) { #ifdef DEBUG showDebug(«Pressed SETUP»); #endif beepButton(); BUTTON_LAST = PIN_BUTTON_SETUP; BUTTON_MILLIS = millis(); BUTTON_PRESSED = true; SETUP_DELAYBEEP = false; } else { if ((millis() — BUTTON_MILLIS) > BUTTON_HOLDTIME) if (!SETUP_DELAYBEEP) { beepButton(); SETUP_DELAYBEEP = true; } } } else if (digitalRead(PIN_BUTTON_DOWN) == HIGH) { if (!BUTTON_PRESSED) { #ifdef DEBUG showDebug(«Pressed DOWN»); #endif BUTTON_LAST = PIN_BUTTON_DOWN; BUTTON_PRESSED = true; } } else { if (BUTTON_PRESSED) { if (BUTTON_LAST == PIN_BUTTON_SETUP) { #ifdef DEBUG showDebug(«Released SETUP»); #endif if (!SETUP_MODE && (millis() — BUTTON_MILLIS) > BUTTON_HOLDTIME) { #ifdef DEBUG showDebug(«Entered setup mode!»); #endif lcd.setCursor(0, 1); lcd.print(» Setup Mode «); SETUP_MODE = true; SETUP_ITEM = 1; } else { if (SETUP_ITEM == SETUP_MAXITEMS) { #ifdef DEBUG showDebug(«Exited setup mode!»); #endif showLabels(); SETUP_MODE = false; SETUP_ITEM = 0; saveConfiguration(); } else { SETUP_ITEM++; } showVoltage(); showCURRENT(); } } else if (BUTTON_LAST == PIN_BUTTON_UP) { #ifdef DEBUG showDebug(«Released UP»); #endif if (SETUP_MODE) { beepButton(); if (SETUP_ITEM==1) { //voltage VOLTAGE_MAP+=VOLTAGE_STEP; readVoltage(); #ifdef DEBUG startDebug(«New VOLTAGE_MAP: «); Serial.println(VOLTAGE_MAP,6); #endif } else if (SETUP_ITEM==2) { //current CURRENT_MAP+=CURRENT_STEP; readCurrent(); #ifdef DEBUG startDebug(«New CURRENT_MAP: «); Serial.println(CURRENT_MAP,6); #endif } } } else if (BUTTON_LAST == PIN_BUTTON_DOWN) { #ifdef DEBUG showDebug(«Released DOWN»); #endif if (SETUP_MODE) { beepButton(); if (SETUP_ITEM==1) { //voltage VOLTAGE_MAP-=VOLTAGE_STEP; readVoltage(); #ifdef DEBUG startDebug(«New VOLTAGE_MAP: «); Serial.println(VOLTAGE_MAP,6); #endif } else if (SETUP_ITEM==2) { //current CURRENT_MAP-=CURRENT_STEP; readCurrent(); #ifdef DEBUG startDebug(«New CURRENT_MAP: «); Serial.println(CURRENT_MAP,6); #endif } } } BUTTON_PRESSED = false; } } } #ifdef DEBUG void showDebug(char* Message) { Serial.print(millis()); Serial.print(«: «); Serial.println(Message); } void startDebug(char* Message) { Serial.print(millis()); Serial.print(«: «); Serial.print(Message); } #endif void showLabels() { lcd.setCursor(0, 1); lcd.print(«Volts Amps»); } void showVoltage() { lcd.setCursor(0, 0); lcd.print(VOLTAGE_CALCULATED, 2); lcd.print(» V»); if (VOLTAGE_CALCULATED

Источник: https://peling.ru/volt-amper-metr-na-arduino-mini-chast-1-2/

[46] Десульфатирующая зарядка своими руками на Arduino — бортжурнал Mitsubishi Lancer 1.5 MT ★ Silver Shark ★ 2009 года на DRIVE2

Вернувшись недавно из отпуска, первым делом я, конечно же, отправился проверять свою любимицу, шутка ли, машина простояла во дворе без движения почти три недели. Аккумулятор у меня стоит до сих пор «родной» а ему между тем исполнилось уже девять лет! Захотелось мне, проверить на нем напряжение после долго простоя. Картина была прямо таки удручающая, 11.

85 вольт, для современного акб это почти полный разряд. Более того, категорически не рекомендуется допускать падение напряжения ниже 12 вольт, так как после этого кальциевый аккумулятор очень быстро приходит в негодность. В общем, я тут же отправился сделать круг по КАДу что-бы подзарядить АКБ и в процессе обдумать, как продлить жизнь моего дедушки аккумулятора.

Полный размер

11.85 вольт для современного акб это почти полный разряд.

Таблица заряда аккумулятора

Хороших зарядных устройств ни у кого из знакомых не оказалось, а идею с покупкой нового я отмел сразу, поскольку нормальный зарядник стоит от трех тысяч рублей и выше, а мой бюджет и так был очень сильно подкошен прошедшим отпуском.

Оставалось лишь одно: собрать ЗУ самостоятельно из подручных материалов, да не простое, а десульфирующее!А под рукой у меня оказались вот что:1) Блок питания от ноутбука 19 вольт 4.

5 ампера2) DC-CC понижающий преобразователь до 9 ампер3) Цифровой Вольтметр/Амперметр4) Ардуино УНО совместимая плата Wemos D15) Пару ардуиновских реле6) LED дисплей, лампа на 5 ватт, резисторы и куча проводов.Подключил я всё это следующим образом.

Читайте также:  Цифровые часы atmega328: создание своими руками

Полный размер

Схема десульфирующего зарядника своими руками на Arduino

Суть предельно проста: напряжение с блока питания пускаем через преобразователь, настраиваем на выходе 14.4 вольта и до 4 ампер тока, для наглядности пропускаем всё это через вольтметр/амперметр и подключаем к аккумулятору через реле. Через второе реле вешаем на аккум лампочку. Плата Wemos управляет включением и выключением реле, так же к ней подключен LCD дисплей, кнопка включения, а к аналоговому пину A0 через делитель напряжения подведены провода напрямую с клемм акб для постоянного мониторинга напряжения во время зарядки.В скетче изначально я задал два режима:

1) Десульфикация – 3 секунды заряда током до 4 ампер, 3 секунды разряда током 0.4 ампера. Этот цикл заряда длится до повышения напряжения на клеммах до 14.4 вольт, далее автоматически переходит во второй режим.

2) В этом режиме зарядка происходит трёх секундными импульсами с паузами.

Перед зарядкой я так же промерил плотность электролита. В пяти банках она оказалась в пределах 1.20, а в первой к моему великому огорчению всего 1.175. А напряжение составило 12.3 вольта, что соответствует примерно 60% заряда.

Плотность в первой банке

Полный размер

Десульфирующая зарядка своими руками на Arduino

Первый цикл прошел достаточно быстро, всего около 8 часов, в начале заряда ток был около 4 ампер, а к концу цикла составлял всего чуть больше одного ампера. Во втором режиме зарядка проработала еще около двух часов, пока ток не упал до 0.4 ампера. Итого по грубым подсчетам за 10 часов в АКБ было влито всего около 10 ампер тока, явно маловато для 100% заряда, должно было влезть еще минимум 10!Зарядка в действии
К этому я был готов заранее. Дело в том, что специфика современных кальциевых АКБ не позволяет зарядить их полностью привычным напряжением 14.4 вольта, им требуется от 15.8 до 16.1 вольта для 100% зарядки. Поэтому я тут же отрегулировал преобразователь на 15.8 вольт с максимальным током в 3 ампера. И поправил скетч в режим 2 секунды заряда, 4 секунды паузы.

Полный размер

Десульфирующая зарядка своими руками на Arduino

При таком раскладе АКБ стал активно брать ток, при этом, естественно, начались первые признаки легкого бурления, но в фазу активного кипения, к счастью, акум не перешел, и простоял он в таком режиме еще почти 12 часов.

По итогу после ночного отстаивания АКБ показал напряжение 12.7 вольт. А вот с плотностью дела обстоят хуже, в пяти банках она поднялась до 1.25, а в первой составила всего 1.20.

Наверное, придётся в ближайшем будущем погонять акум в режиме заряд/разряд.

Всем добра!

Источник: https://www.drive2.ru/l/476118222714700050/

Bluetooth вольтметр на базе arduino

Привет! Сегодня хочу продолжить тему «скрещивания» arduino и android. В предыдущей публикации я рассказал про bluetooth машинку, а сегодня речь пойдет про DIY bluetooth вольтметр. Еще такой девайс можно назвать смарт вольтметр, «умный» вольтметр или просто умный вольтметр, без кавычек.

Последнее название является неправильным с точки зрения грамматики русского языка, тем не менее частенько встречается СМИ. Голосование на эту тему будет в конце статьи, а начать предлагаю с демонстрации работы устройства, чтобы понять о чем же пойдет речь в статье.

Disclaimer: статья рассчитана на среднестатистического любителя arduino, который обычно не знаком с программированием под android, поэтому как и в прошлой статье, приложение для смартфона мы будем делать, используя среду визуальной разработки android-приложений App Inventor 2.

Чтобы сделать DIY bluetooth вольтметр нам нужно написать две относительно независимых друг от друга программы: скетч для ардуино и приложение для андроид.Пожалуй начнем со скетча.

Для начала следует знать, что существует три основных варианта измерения напряжения при помощи ардуино, не зависимо от того куда нужно выводить информацию: в com-порт, на подключенный к ардуино экранчик, или на смартфон. Первый случай: измерения напряжения до 5 вольт.

Здесь достаточно одной-двух строк кода, а напряжение подается напрямую на пин А0: int value = analogRead(0);// читаем показания с А0 voltage = (value / 1023.0) * 5; // верно только если Vcc = 5.0 вольт Второй случай: для измерения напряжения более 5 вольт используется делитель напряжения. Схема очень простая, код тоже.

«

Скетчint analogInput = A0; float val = 0.0; float voltage = 0.0; float R1 = 100000.0; //Battery Vin-> 100K -> A0 float R2 = 10000.0; //Battery Gnd -> Arduino Gnd and Arduino Gnd -> 10K -> A0

int value = 0;

void setup() { Serial.begin(9600); pinMode(analogInput, INPUT);

}

void loop() { value = analogRead(analogInput); val = (value * 4.7) / 1024.0; voltage = val / (R2/(R1+R2)); Serial.println(voltage); delay(500);

}

Третий случай. Когда нужно получить более точные о напряжении в качестве опорного напряжения нужно использовать не напряжение питания, которое может немного меняться при питании от акб, например, а напряжение внутренного стабилизатора ардуино 1.1 вольт.Тут схема такая же, но код чуть длиннее.

Подробно этот вариант разбирать не буду, так как он и так хорошо описан в тематических статьях, а мне вполне и достаточно второго способа, поскольку питание у меня стабильное, от usb-порта ноутбука.
Итак с измерением напряжения мы разобрались, теперь перейдем ко второй половине проекта: созданию андроид-приложения.

Приложение будем делать прямо из браузера в среде визуальной разработки android-приложений App Inventor 2. Заходим на сайт appinventor.mit.

edu/explore/, авторизуемся с помощью гугл-аккаунта, нажимаем кнопку create, new project, и путем простого перетаскивания элементов создаем примерно такой дизайн:Я сделал графику очень простой, если кому-то захочется более интересной графики, напомню, что для этого нужно использовать вместо .jpeg файлов, файлы формата .png с прозрачным фоном. Теперь переходим во вкладку Blocks и создаем там логику работы приложения примерно так:

Источник: http://www.pvsm.ru/diy/85910

Ссылка на основную публикацию