Вольтметр на 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
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
Создание зарядного устройства, управляемого Arduino
Arduino и добавленная к ней схема заряда могут быть использованы для мониторинга и управления зарядкой никель-металл-гидридных аккумуляторов, например, так:
Законченное устройство
Аккумуляторные батареи являются отличным способом для питания вашей портативной электроники. Они могут сэкономить вам много денег при правильной зарядке.
Для того, чтобы вы могли получить максимальную отдачу от ваших аккумуляторных батарей, их необходимо правильно заряжать. Это означает, что вам необходимо хорошее зарядное устройство.
Вы можете потратить кучу денег, купив готовое зарядное устройство, а можете получить удовольствие, сделав его сами. В данной статье мы рассмотрим, как можно создать зарядное устройство, управляемое Arduino.
Во-первых, важно отметить, что не существует универсального способа зарядки, который подходил бы для всех аккумуляторов. Разные типы аккумуляторов используют разные химические процессы, обеспечивающие их работу.
В результате, разные типы аккумуляторов необходимо заряжать по-разному. В этой статье мы не сможем охватить все типы аккумуляторных батарей и методы зарядки.
Поэтому для простоты мы сосредоточим внимание на наиболее распространенном типе аккумуляторных батарей размера AA, на никель-металл-гидридных аккумуляторах (NiMH).
Комплектующие
Список комплектующих слева направо:
Как заряжать NiMH AA аккумуляторы
Увеличение скорости заряда увеличивает риск повреждения аккумулятора.
Существует много способов зарядки NiMH аккумуляторов. Выбор используемого вами метода главным образом зависит от того, как быстро вы хотите зарядить аккумулятор.
Скорость заряда измеряется по отношению к емкости батареи. Если ваша батарея обладает емкостью 2500 мАч, и вы заряжаете ее током 2500 мА, то вы заряжаете ее со скоростью 1C.
Если вы заряжаете этот же аккумулятор током 250 мА, то вы заряжаете его со скоростью C/10.
Во время быстрой зарядки аккумулятора (со скоростью выше C/10), вам необходимо тщательно контролировать напряжение на батарее и ее температуру, чтобы не перезарядить ее. Это может серьезно повредить аккумулятор.
Тем не менее, когда вы заряжаете аккумулятор медленно (со скоростью ниже C/10), у вас гораздо меньше шансов повредить батарею, если случайно перезарядите ее. Поэтому медленные методы зарядки, как правило, считаются более безопасными и помогут вам увеличить срок службы батареи.
Поэтому в нашем самодельном зарядном устройстве мы будем использовать скорость заряда C/10.
Цепь заряда
Для данного зарядного устройства основой является схема для управления источником питания с помощью Arduino. Схема питается от источника напряжения 5 вольт, например, от адаптера переменного тока или компьютерного блока питания. Большинство USB портов не подходит для данного проекта из-за ограничений по току.
Источник 5В заряжает батарею через мощный резистор 10 Ом и мощный MOSFET транзистор. MOSFET транзистор устанавливает величину тока, протекающего через батарею. Резистор добавлен как простой способ контроля тока.
Контроль величины тока выполняется подключением каждого вывода резистора к аналоговым входным выводам Arduino и измерением напряжения с каждой стороны. MOSFET транзистор управляется выходным ШИМ выводом Arduino.
Импульсы сигнала широтно-импульсной модуляции сглаживаются до постоянного напряжения фильтром на резисторе 1 МОм и конденсаторе 1 мкФ. Данная схема позволяет Arduino отслеживать и управлять током, протекающим через батарею.
Датчик температуры
Датчик температуры служит для предотвращения перезаряда батареи и обеспечения безопасности.
В качестве дополнительной меры предосторожности в зарядное устройство добавлен датчик температуры TMP36 для контроля температуры батареи. Данный датчик выдает напряжение, которое линейно зависит от температуры.
Поэтому он, в отличие от термисторов, не требует калибровки или балансировки. Датчик устанавливается в просверленном отверстии в корпусе держателя батареи и приклеивается в отверстии так, чтобы он прижимался к батарее, когда та будет установлена в держатель.
Выводы датчика подключаются к шине 5В, к корпусу и к аналоговому входному выводу Arduino.
Держатель AA батареи перед и после установки на макетную плату
Код
Код для данного проекта довольно прост. Переменные в начале исходного кода позволяют настроить зарядное устройство путем ввода значений емкости батареи и точного сопротивления мощного резистора. Также добавлены и переменные безопасных порогов.
Максимально допустимое напряжение на батарее устанавливается в значение 1,6 вольта. Максимальная температура батареи установлена на 35 градусов по Цельсию. Максимальное время заряда установлено на 13 часов.
Если какой-либо из этих порогов безопасности будет превышен, зарядное устройство выключается.
В теле программы вы можете увидеть, что система постоянно измеряет напряжения на выводах мощного резистора. Это используется для расчета значений напряжения на батарее и протекающего через нее тока.
Ток сравнивается с целевым значением, которое составляет C/10.
Если рассчитанный ток отличается от целевого значения более, чем на 10 мА, система автоматически подстраивает выходное значение, чтобы подкорректировать его.
Arduino использует последовательный интерфейс для отображения всех текущих данных. Если вы хотите проконтролировать работу вашего зарядного устройства, то можете подключить Arduino к USB порту компьютера, но это необязательно, так как Arduino питается от источника напряжения 5В зарядного устройства.
int batteryCapacity = 2500; // значение емкости батареи в мАч float resistance = 10.0; // измеренное сопротивление мощного резистора int cutoffVoltage = 1600; // максимальное напряжение на батарее (в мВ), которое не должно быть превышено float cutoffTemperatureC = 35; // максимальная температура батареи, которая не должна быть превышена (в градусах C) //float cutoffTemperatureF = 95; // максимальная температура батареи, которая не должна быть превышена (в градусах F) long cutoffTime = 46800000; // максимальное время заряда в 13 часов, которое не должно быть превышено int outputPin = 9; // провод выходного сигнала подключен к цифровому выводу 9 int outputValue = 150; // значение выходного ШИМ сигнала int analogPinOne = 0; // первый датчик напряжения подключен к аналоговому выводу 0 float valueProbeOne = 0; // переменная для хранения значения на analogPinOne float voltageProbeOne = 0; // рассчитанное напряжение на analogPinOne int analogPinTwo = 1; // второй датчик напряжения подключен к аналоговому выводу 1 float valueProbeTwo = 0; // переменная для хранения значения на analogPinTwo float voltageProbeTwo = 0; // рассчитанное напряжение на analogPinTwo int analogPinThree = 2; // третий датчик напряжения подключен к аналоговому выводу 2 float valueProbeThree = 0; // переменная для хранения значения на analogPinThree float tmp36Voltage = 0; // рассчитанное напряжение на analogPinThree float temperatureC = 0; // рассчитанная температура датчика в градусах C //float temperatureF = 0; // рассчитанная температура датчика в градусах F float voltageDifference = 0; // разница между напряжениями на analogPinOne и analogPinTwo float batteryVoltage = 0; // рассчитанное напряжение на батарее float current = 0; // рассчитанный ток, протекающий через нагрузку в (мА) float targetCurrent = batteryCapacity / 10; // целевой выходной ток (в мА) устанавливается в значение // C/10 или 1/10 от емкости батареи float currentError = 0; // разница между целевым и фактическим токами (в мА) void setup() { Serial.begin(9600); // настройка последовательного интерфейса pinMode(outputPin, OUTPUT); // установить вывод, как выход } void loop() { analogWrite(outputPin, outputValue); // записать выходное значение в выходной вывод Serial.print(“Output: “); // показать выходные значения для контроля на компьютере Serial.println(outputValue); valueProbeOne = analogRead(analogPinOne); // считать входное значение на первом пробнике voltageProbeOne = (valueProbeOne*5000)/1023; // рассчитать напряжение на первом пробнике в милливольтах Serial.print(“Voltage Probe One (mV): “); // показать напряжение на первом пробнике Serial.println(voltageProbeOne); valueProbeTwo = analogRead(analogPinTwo); // считать входное значение на втором пробнике voltageProbeTwo = (valueProbeTwo*5000)/1023; // рассчитать напряжение на втором пробнике в милливольтах Serial.print(“Voltage Probe Two (mV): “); // показать напряжение на втором пробнике Serial.println(voltageProbeTwo); batteryVoltage = 5000 – voltageProbeTwo; // рассчитать напряжение на батарее Serial.print(“Battery Voltage (mV): “); // показать напряжение на батарее Serial.println(batteryVoltage); current = (voltageProbeTwo – voltageProbeOne) / resistance; // рассчитать ток заряда Serial.print(“Target Current (mA): “); // показать целевой ток Serial.println(targetCurrent); Serial.print(“Battery Current (mA): “); // показать фактический ток Serial.println(current); currentError = targetCurrent – current; // разница между целевым и измеренным токами Serial.print(“Current Error (mA): “); // показать ошибку установки тока Serial.println(currentError); valueProbeThree = analogRead(analogPinThree); // считать входное значение третьего пробника, tmp36Voltage = valueProbeThree * 5.0; // преобразуя его в напряжение tmp36Voltage /= 1024.0; temperatureC = (tmp36Voltage – 0.5) * 100 ; // преобразование, исходя из зависимости в 10 мВ на градус со сдвиком в 500 мВ // ((напряжение – 500 мВ) умножить на 100) Serial.print(“Temperature (degrees C) “); // показать температуру в градусах Цельсия Serial.println(temperatureC); /* temperatureF = (temperatureC * 9.0 / 5.0) + 32.0; //преобразовать в градусы Фаренгейта Serial.print(“Temperature (degrees F) “); Serial.println(temperatureF); */ Serial.println(); // дополнительные пустые строки, чтобы облегчить чтение данных при отладке Serial.println(); if(abs(currentError) > 10) // если ошибка установки тока достаточно велика, то подстроить выходное напряжение { outputValue = outputValue + currentError / 10; if(outputValue < 1) // выходное значение никогда не может быть ниже 0 { outputValue = 0; } if(outputValue > 254) // выходное значение никогда не может быть выше 255 { outputValue = 255; } analogWrite(outputPin, outputValue); // записать новое выходное значение } if(temperatureC > cutoffTemperatureC) // остановить зарядку, если температура батареи превысила безопасный порог { outputValue = 0; Serial.print(“Max Temperature Exceeded”); } /* if(temperatureF > cutoffTemperatureF) // остановить зарядку, если температура батареи превысила безопасный порог { outputValue = 0; } */ if(batteryVoltage > cutoffVoltage) // остановить зарядку, если напряжение на батарее превысило безопасный порог { outputValue = 0; Serial.print(“Max Voltage Exceeded”); } if(millis() > cutoffTime) // остановить зарядку, если время заряда превысило порог { outputValue = 0; Serial.print(“Max Charge Time Exceeded”); } delay(10000); // задержка в 10 секунд перед следующей итерацией цикла }
Скачиваемую версию исходного кода вы можете найти по ссылке, приведенной ниже.
Теперь вы можете создать собственное зарядное устройство. Но обязательно контролируйте скорость заряда и соблюдайте технику безопасности, так как избыточная зарядка аккумулятора может быть опасна.
Оригинал статьи:
- Jason Poel Smith. Create an Arduino Controlled Battery Charger
Arduino Uno
Отладочная плата Arduino Uno построена на микроконтроллере Atmega328P.
Она имеет 14 цифровых входных/выходных выводов (6 из которых могут использоваться в качестве ШИМ выходов), 6 аналоговых входов, кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером; для того, чтобы начать работу с ней, просто подключите…
Батарейный отсек 1xAA
Батарейный отсек на один элемент AA.
Источник: https://radioprog.ru/post/112
Индикатор уровня заряда батареи на ARDUINO | Мастер Винтик. Всё своими руками!
Ранее мы рассматривали различные схемы на основе набора ARDUINO. В этой статье, сегодня мы будем конструировать индикатор уровня заряда батареи.
В ней ряд из 6-ти разноцветных светодиодов показывают уровень заряда батареи. Эта схема может пригодится для контроля вашего 12 В аккумулятора.
Есть много схем на этом сайте более простых, но у нас цель собрать схему на основе ARDUINO, рассмотреть её работу.
Все аккумуляторы имеют определенный предел напряжения для разрядки, если напряжение выходит за рамки установленного, срок службы батареи резко сокращается.
Предлагаемая ниже, схема покажет Вам, сколько энергии осталось в аккумуляторе. Схема может быть подключена к батарее, когда эта схема указывает на низкий заряд батареи, Вы можете подключить батарею для зарядки. Схема имеет 6 светодиодов разных цветов, один светодиод светится, указывая уровень напряжения батареи.
Если ваш аккумулятор полный заряда — самый левый светодиод загорается, а если аккумулятор разрядился — светится правый светодиод.
Схема индикатора уровня:
Набор Arduino в схеме является «мозгом» системы, потенциальный делитель, который помогает Arduino для выборки входного напряжения. Предварительно набор резисторов используется для калибровки. Серия из 6 светодиодов покажет уровень заряда батареи.
Таблица уровня заряда батареи:
Светодиод led №1 – 100% до 80%
Светодиод №2 – 80% до 60%
Светодиод №3 – 60% до 40%
Светодиод №4 – 40% до 20%
Светодиод №5 – 20% до 5%
Светодиод №6 — 12.46) {digitalWrite(a,HIGH);} else { digitalWrite(a,LOW);} if(vin< =12.46 && vin>12.28) {digitalWrite(b,HIGH);} else { digitalWrite(b,LOW);} if(vin< =12.28 && vin>12.12) {digitalWrite(c,HIGH);} else { digitalWrite(c,LOW);} if(vin< =12.12 && vin>11.
98) {digitalWrite(d,HIGH);} else { digitalWrite(d,LOW);} if(vin< =11.98 && vin>11.90){digitalWrite(e,HIGH);} else {digitalWrite(e,LOW);}
if(vin< =11.90) {digitalWrite(f,HIGH);} else {digitalWrite(f,LOW);} delay(2000); } //--------Program developed by R.
Girish———//
Калибровка:
Калибровка для этого Ардуино “6 светодиодный индикатор уровня заряда батареи” должна быть выполнена тщательно. Если Вы не правильно откалибруете, схема будет показывать неверный уровень напряжения батареи.
При включении, схема начинает со светодиодного тест. Здесь светодиоды горят последовательно с некоторой задержкой. Это может помочь при отладке ошибок. Далее:
1) Установить напряжение регулируемого источника питания точно 12,50 в.
2) Откройте монитор.
3) Поверните подстроечным резистором по часовой стрелке или против часовой стрелки и выведите показание до 12,50 в.
4) Теперь уменьшите регулируемым источником питания до 12,00 в, показания на серийном мониторе должны показать тоже 12,00 В.
5) Теперь увеличим напряжение до 13,00 В – показания на мониторе должны показать то же самое или очень близко к 13В.
6) При увеличении или уменьшении напряжения, каждый светодиод включается/выключается с разными уровнями напряжения.
Если указанные выше шаги выполнены успешно, Ваш Индикатор уровня заряда батареи настроена!
R.Girish
- Простой светодиодный тахометр для автомобиля
- Простое цифровое управление синтезатором радиостанций
- ESR-tester своими руками
С использованием недорогих и доступных микросхем NE555, LM3915 и 7805 можно сделать простой тахометр оборотов двигателя для автомобиля на 10 светодиодах.LED тахометр можно использовать для автомобиля с напряжением бортовой сети 12В или 24В питанием.Подробнее…
Модернизация радиостанций «Маяк», «Эстакада» и им подобных…
Описание схемы управления
Во многих радиостанциях (Маяк, Эстакада и тп.) синтезаторы управляются двоичным кодом. Для управления такими синтезаторами предлагаю собрать не сложную схему на «простой» логике. Переключаются каналы вверх / вниз двумя кнопками. Имеется возможность включить «автоматическое сканирование частот»,Подробнее…
Прибор для проверки эквивалентного последовательного сопротивления (ЭПС) электролитических конденсаторов
При ремонте аппаратуры часто появляется необходимость в проверке электролитических конденсаторов. Они наиболее частые виновники поломок.Состояние конденсаторов часто видно визуально: они вздутые, подтёкшие. Но иногда казалось бы на вид хороший конденсатор при проверке оказывается неисправным.Эту задачу поможет решить прибор для проверки ESR или эквивалентного последовательного сопротивления (ЭПС) .Подробнее…
Источник: http://www.MasterVintik.ru/indikator-urovnya-zaryada-batarei-na-arduino/
Цифровой вольтметр на ПК и arduino
ПодробностиКатегория: ArduinoОпубликовано 11.09.2015 17:30Автор: AdminПросмотров: 8140
В этом проекте мы будем передавать данный через сериал соединение на компьютер. Данные,в нашем случае это измеренное напряжение,при помощи arduino передаются в компьютер через последовательное serial соединение.
Вывод данных осуществляется в программу написанную для компьютера под Windows. При этом компьютер может быть абсолютно любым,будь это моноблок,стационарный компьютер или ноутбук,к примеру можно купить моноблок dell. В этом примере программа вольтметра была написана в среде разработке Visual C++. Статья ориентированна на тех кто уже имел дело с языком программирования C++
Измерение напряжения начинается только после того как со стороны компьютера поступят команды 0xAC и 0x1y. Где y представляет собой номер канала аналого цифрового преобразователя Arduino, и может принемать значение от 0 до 2.
После того как arduino получила команды старта измерения, начинается процесс измерения напряжения, измеренное напряжение отсылается обратно в компьютер с интервалом в 50 миллисекунд. Имеют следующий формат: 0xAB, 0xaa, 0xbb, где aa и bb максимальное и минимальное значение.
Прекращение измерения напряжения начинается после того как с компьютера поступят команды 0xAC и 0x00.
Программа написанная под Arduino (скетч) довольно проста – здесь нет ничего сложного,измеренное значение в последовательный порт. Измеренное значение напряжения умещается в 10 бит от 0x000 до 0x0400 хранится в переменной типа integer.
Последовательный порт имеет возможность передавать данные в пакете по 8 бит. Поэтому наше измеренное напряжение можно поделить на 2 пакета, каждый по 8 бит.Сначала осуществляется сдвиг на 8 бит, а затем делится на 256.
Программа вольтметра под компьютер
После того как интерфейс программы создан необходимо добавить объект последовательного порта. Этот объект позволяет изменять и задавать такие параметры как название порта, кол-во бит, скорость передачи. Добавляя поля контролирующие переменные объекта можно динамически (в процессе работы программы) изменять эти значения. В этом примере использована возможность только выбора порта.
По умолчанию программа выбирает первый порт. Важно помнить что порт ПК может быть использован только одним приложением, использование одного порта в двух приложения приведет к ошибке.
Считывание данных осуществляется при помощи события или прерывания. Выбор осуществляется во вкладке свойства.
Кнопка создания метода обработки полученных данных.
Код программы под windows можете скачать тут
Источник: http://www.radio-magic.ru/arduino-projects/294-tsifrovoj-voltmetr-na-pk-i-arduino