Как сделать 5в вольтметр с помощью arduino
Содержание
- 1 Исходный код программы
- 2 Сделайте цифровой вольтметр с помощью Arduino
- 3 LCD дисплей 16×2
- 4 ССЫЛКИ НА ИНТЕРНЕТ-РЕСУРСЫ
- 5 Внешний AREF
- 6 Принципиальная схема и соединения
- 7 [46] Десульфатирующая зарядка своими руками на Arduino — бортжурнал Mitsubishi Lancer 1.5 MT ★ Silver Shark ★ 2009 года на DRIVE2
- 8 Работа схемы
- 9 Arduino Uno
- 10 Bluetooth вольтметр на базе arduino
- 11 Идея
- 12 Как этот проект измеряет уровень заряда батареи?
- 13 Шаг 2. Подключаем экран
- 14 Настройка
- 15 Смотрите видео: Arduino в роли вольтметра. Вывод напряжения на LCD дисплей
Исходный код программы
Полный текст программы приведен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.
Сначала в программе нам необходимо подключить все используемые библиотеки (в нашем случае мы будем использовать только одну библиотеку – для работы с ЖК дисплеем). Затем мы будем считывать значения напряжения в двух точках с помощью функции analogread.
Arduino
int voltage_value0 = analogRead(A0);
int voltage_value1 = analogRead(A1);
1 |
intvoltage_value0=analogRead(A0); intvoltage_value1=analogRead(A1); |
Затем мы объявим временную переменную (value), в которой будем хранить разницу значений voltage_value0 и voltage_value1. Затем значение этой переменной мы будем умножать на 0.00488 чтобы получить действительную величину падения напряжения на резисторе, а затем получившуюся величину мы будем делить на 22 (сопротивление) чтобы получить значение силы тока.
Arduino
int subraction_value =(voltage_value0 — voltage_value1) ;
float temp_val = (subraction_value*0.00488);
float current_value = (temp_val/22);
1 |
intsubraction_value=(voltage_value0-voltage_value1); floattemp_val=(subraction_value*0.00488); floatcurrent_value=(temp_val22); |
Далее представлен полный текст программы.
Arduino
#include<LiquidCrystal.h> // библиотека для работы с ЖК дисплеем
LiquidCrystal lcd (7,8,9,10,11,12); // контакты платы Arduino, к которым подключен ЖК дисплей
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16,2);
lcd.clear();
}
void loop() {
// put your main code here, to run repeatedly:
int voltage_value0 = analogRead(A0);
int voltage_value1 = analogRead(A1);
int subraction_value =(voltage_value0 — voltage_value1) ;
float temp_val = (subraction_value*0.00488);
float current_value = (temp_val/22);
Serial.print(current_value);
lcd.setCursor(0,0);
lcd.print(«current value=»);
lcd.setCursor(0,1);
lcd.print (current_value); // выводим измеренное значение тока на экран ЖК дисплея
lcd.print(«A»);
delay(1000);
}
1 |
#include<LiquidCrystal.h> // библиотека для работы с ЖК дисплеем LiquidCrystallcd(7,8,9,10,11,12);// контакты платы Arduino, к которым подключен ЖК дисплей voidsetup(){ // put your setup code here, to run once: Serial.begin(9600); lcd.begin(16,2); lcd.clear(); } voidloop(){ // put your main code here, to run repeatedly: intvoltage_value0=analogRead(A0); intvoltage_value1=analogRead(A1); intsubraction_value=(voltage_value0-voltage_value1); floattemp_val=(subraction_value*0.00488); floatcurrent_value=(temp_val22); Serial.print(current_value); lcd.setCursor(,); lcd.print(«current value=»); lcd.setCursor(,1); lcd.print(current_value);// выводим измеренное значение тока на экран ЖК дисплея lcd.print(«A»); delay(1000); } |
Сделайте цифровой вольтметр с помощью Arduino
Легко сделать простой цифровой вольтметр, используя жидкокристаллический дисплей Arduino и 16×2 (LCD).
Сравнительно просто использовать Arduino для измерения напряжений. У Arduino есть несколько аналоговых входных контактов, которые подключаются к аналого-цифровому преобразователю (АЦП) внутри Arduino. Arduino ADC — это десятибитовый преобразователь, что означает, что выходное значение будет находиться в диапазоне от 0 до 1023. Мы получим это значение с помощью функции analogRead (). Если вы знаете, опорное напряжение — в этом случае мы будем использовать 5 V — вы можете легко вычислить напряжение присутствующего в аналоговом входе.
Чтобы отобразить измеренное напряжение, мы будем использовать жидкокристаллический дисплей (LCD), который имеет две строки по 16 символов. ЖК-дисплеи широко используются для отображения данных с помощью таких устройств, как калькуляторы, микроволновые печи и многие другие электроприборы.
Этот проект также покажет вам, как измерить напряжение выше опорного напряжения с помощью делителя напряжения.
Эксперимент 1
В этом эксперименте мы сделаем цифровой вольтметр, способный измерять до 5 В, используя плату Arduino и 16×2 LCD.
Требуется оборудование
- 1 x Arduino Mega2560
- 1x LCD (жидкокристаллический дисплей)
- 1x 5 кОм потенциометр
- 1x макет
- разъемы
- провода перемычки
Схема подключения
ЖК-дисплей 16×2, используемый в этом эксперименте, имеет в общей сложности 16 контактов. Как показано в таблице ниже, восемь штырей представляют собой линии данных (контакты 7-14), два для питания и заземления (контакты 1 и 16), три используются для управления работой ЖКД (контакты 4-6), и один используется для регулировки яркости ЖК-экрана (контакт 3). Оставшиеся два вывода (15 и 16) активируют подсветку.
Терминал 1 | GND |
---|---|
Терминал 2 | + 5V |
Терминал 3 | Средний вывод потенциометра (для регулировки яркости) |
Терминал 4 | Выбор резистора (RS) |
Терминал 5 | Чтение / запись (RW) |
Терминал 6 | Enable (EN) |
Терминал 7 | DB0 |
Терминал 8 | DB1 |
Терминал 9 | DB2 |
Терминал 10 | DB3 |
Терминал 11 | DB4 |
Терминал 12 | DB5 |
Терминал 13 | DB6 |
Терминал 14 | DB7 |
Терминал 15 | + 4.2-5V |
Терминал 16 | GND |
См. Диаграмму ниже, чтобы узнать, как подключить ЖК-дисплей к Arduino
Обратите внимание, что потенциометр подключен к источнику 5 В и GND, а средний терминал подключен к контакту 3 ЖК-дисплея. Вращение этого банка изменяет яркость ЖК-дисплея
Четыре вывода данных DB4-DB7 подключены к контактам Arduino 4-7. Enable подключается к контакту 9 Arduino, а RS подключается к контакту 8 Arduino. RW подключен к земле. Светодиод подсветки подключен к 5V и заземлен. В следующей таблице показаны выводы контактов:
DB4 ——> pin4
DB5 ——> pin5
DB6 ——> pin6
DB7 ——> pin7
RS ——> pin8
EN ——> pin9
В приведенной ниже программе используется библиотека LiquidCrystal. Эта библиотека содержит все функции, необходимые для записи на ЖК-дисплей.
Цикл считывает аналоговое значение от аналогового входа, и потому, что опорное напряжение 5 В, его кратных этого значение на 5, затем делит на 1024 для расчета фактического значения напряжения. Как только напряжение будет рассчитано, значение записывается на ЖК-дисплей.
На приведенном ниже рисунке показан типичный дисплей.
Эксперимент 2
Для того чтобы измерить напряжение больше, чем опорное напряжение 5 В, необходимо разделить входное напряжение так, что напряжение на самом деле на вход Arduino 5 В или меньше. в этом эксперименте мы будем использовать резистор 90, 9 кОм и резистор 10 кОм для создания делителя 10: 1. Это позволит нам измерять напряжения до 50 В.
Требуется оборудование
- 1x Arduino Mega2560
- 1x 90, 9 кОм резистор
- 1x резистор 10 кОм
- 1x LCD (жидкокристаллический дисплей)
- 1x 5k потенциометр
- 1x макет
- гнездовой разъем
- провода перемычки
Схема подключения
Схема для этого эксперимента точно такая же, как в эксперименте # 1, за исключением того, что теперь у нас есть делитель напряжения, состоящий из резистора 90, 9 кОм и резистора 10 кОм, подключенного к входу. См. Диаграмму ниже.
программа
Программа для этого эксперимента почти такая же, как для эксперимента №1. Единственное различие заключается в том, что теперь мы должны разделить рассчитанное напряжение на отношение R2 / (R1 + R2), которое в этом случае составляет 10 000 / (90 900 + 10000) ≈ 0, 1.
LCD дисплей 16×2
LCD дисплей 16×2 – это широко используемый во встраиваемых приложениях дисплей. Ниже приведено краткое описание выводов и работы LCD дисплея. В нем используется два важных регистра. Это регистр данных и регистр команд. Регистр команд используется для отправки таких команд как очистка дисплея, перемещение курсора и так далее. Регистр данных используется для отправки данных, которые должны быть отображены на LCD дисплее. Ниже приведена таблица описания выводов символьного LCD дисплея 16×2.
Номер вывода | Обозначение | Вход/выход | Назначение вывода |
---|---|---|---|
1 | Vss | – | Земля |
2 | Vdd | – | Питание +5В |
3 | Vee | – | Средний вывод потенциометра (для регулировки контрастности) |
4 | RS | вход | Выбор регистра (RS=0 для регистра команд, RS=1 для регистра данных) |
5 | RW | вход | Чтение/Запись (RW=0 для записи, RW=1 для чтения) |
6 | E | вход/выход | Включение |
7 | D0 | вход/выход | 8-разрядная шина данных (младший значащий бит) |
8 | D1 | вход/выход | 8-разрядная шина данных |
9 | D2 | вход/выход | 8-разрядная шина данных |
10 | D3 | вход/выход | 8-разрядная шина данных |
11 | D4 | вход/выход | 8-разрядная шина данных |
12 | D5 | вход/выход | 8-разрядная шина данных |
13 | D6 | вход/выход | 8-разрядная шина данных |
14 | D7 | вход/выход | 8-разрядная шина данных (старший значащий бит) |
15 | A | – | +4.2–5 В для подсветки |
16 | K | – | земля |
ССЫЛКИ НА ИНТЕРНЕТ-РЕСУРСЫ
Электронные компоненты, используемые в проекте:
· Микроконтроллер Arduino Nano — https://store.arduino.cc/arduino-nano (англ.)
· Плата Data Logging Board фирмы Deek-Robot — http://draeger-it.blog/arduino-lektion-27-datenloggen-mit-dem-logging-shield/ (нем.) (Сайт производителя платы на дату написания статьи находится в нерабочем состоянии, поэтому приведена ссылка на сторонний ресурс). Документация микросхемы часов реального времени DS1307 фирмы Dallas Semiconductor — https://www.sparkfun.com/datasheets/Components/DS1307.pdf (англ.).
· Модуль АЦП ADS1115 — https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/ (англ.).
Документация микросхемы ADS1115 — http://www.ti.com/lit/ds/symlink/ads1115.pdf (англ.).
· Модуль датчика тока на базе микросхемы ACS712 — https://www.elecrow.com/wiki/index.php?title=ACS712_Current_Sensor-_5A (англ.).
Описание принципа работы микросхемы ACS712 — http://embedded-lab.com/blog/a-brief-overview-of-allegro-acs712-current-sensor-part-1/ (англ.).
Документация микросхемы ACS712 — https://www.allegromicro.com/~/media/Files/Datasheets/ACS712-Datasheet.ashx (англ.).
· LCD дисплей — http://www.winstar.com.tw/products/character-lcd-display-module/16×2-lcd.html (англ.), модуль интерфейса I2C для дисплея — http://modtronix.com/mod-lcdi2c-bb1.html (англ.)
Библиотеки, используемые в проекте:
· Wire (встроенная библиотека Arduino IDE) — https://www.arduino.cc/en/Reference/Wire
· Adafruit_ADS1015 — https://github.com/adafruit/Adafruit_ADS1X15
· LiquidCrystal_I2C — https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
· RTCLib — https://github.com/adafruit/RTClib
· SPI (встроенная библиотека Arduino IDE) — https://www.arduino.cc/en/Reference/SPI
· SD — https://github.com/arduino-libraries/SD
Текст публикуется в соответствии с условиями лицензии CREATIVE COMMONS Attribution-NonCommercial-ShareAlike 3.0
2018 Александр Бутовский
г. Санкт-Петербург
11 января 2018
3
Внешний AREF
Внешний AREF тот, куда направляется внешний источник опорного напряжения на плате Arduino. Это может происходить от регулируемого источника питания, или, если вам нужно 3,3 В, вы можете получить его от 3,3 В вывода Arduino. Если вы используете внешний источник питания, обязательно подключите GND к выводу GND Arduino. Или, если вы используете источник 3,3 В Arduno — просто установите перемычку с контакта 3,3 В на контакт AREF.
Чтобы активировать внешний AREF, используйте следующее в void setup ():
analogReference(EXTERNAL); // использование AREF для опорного напряжения
Это устанавливает опорное напряжение на то, что вы подключили к пину AREF, что, конечно, будет иметь напряжение между 1,1В и напряжением работы платы.
Очень важное примечание — при использовании внешнего опорного напряжения вы должны установить analogReference() на EXTERNAL (внешнее), прежде чем использовать analogRead(). Это предотвратит вас от короткого замыкания активного внутреннего опорного напряжения и вывода AREF, которое может повредить микроконтроллер на плате
При необходимости вы можете вернуться к рабочему напряжению платы для AREF (то есть — вернуться в нормальное состояние) с помощью следующей команды:
analogReference(DEFAULT);
Как нам продемонстрировать внешний AREF в работе? Используя AREF 3,3 В, следующий скетч измеряет напряжение от A0 и отображает процентная доля всего AREF и рассчитанного напряжения:
#include "LiquidCrystal.h" LiquidCrystal lcd(8,9,4,5,6,7); int analoginput = 0; // our analog pin int analogamount = 0; // stores incoming value float percentage = 0; // used to store our percentage value float voltage =0; // used to store voltage value void setup() { lcd.begin(16, 2); analogReference(EXTERNAL); // use AREF for reference voltage } void loop() { lcd.clear(); analogamount=analogRead(analoginput); percentage=(analogamount/1024.00)*100; voltage=analogamount*3.222; // in millivolts lcd.setCursor(0,0); lcd.print("% of AREF: "); lcd.print(percentage,2); lcd.setCursor(0,1); lcd.print("A0 (mV): "); lcd.println(voltage,2); delay(250); }
Результаты скетча показаны на видео выше.
Принципиальная схема и соединения
Схема устройства представлена на следующем рисунке.
От платы Arduino Uno осуществляется питание всех остальных компонентов схемы. Выход датчика измерения силы тока подключен к одному из аналоговых контактов платы Arduino. ЖК дисплей подключен к цифровым контактам Arduino (7,8,9,10,11,12).
ЖК дисплей содержит 16 контактов, первые два контакта (VSS,VDD) и последние два контакта (анод и катод) подключены к земле и 5v. Контакты сброса (RS) и доступности (E) подключены к цифровым контактам Arduino 7 и 8. Контакты данных D4-D7 подключены к цифровым контактам Arduino (9,10,11,12). Контакт V0 подключен к средней точке потенциометра. Красный и черный провода – соответственно 5v и gnd (земля).
[46] Десульфатирующая зарядка своими руками на Arduino — бортжурнал Mitsubishi Lancer 1.5 MT ★ Silver Shark ★ 2009 года на DRIVE2
Вернувшись недавно из отпуска, первым делом я, конечно же, отправился проверять свою любимицу, шутка ли, машина простояла во дворе без движения почти три недели. Аккумулятор у меня стоит до сих пор «родной» а ему между тем исполнилось уже девять лет! Захотелось мне, проверить на нем напряжение после долго простоя. Картина была прямо таки удручающая, 11.
85 вольт, для современного акб это почти полный разряд. Более того, категорически не рекомендуется допускать падение напряжения ниже 12 вольт, так как после этого кальциевый аккумулятор очень быстро приходит в негодность. В общем, я тут же отправился сделать круг по КАДу что-бы подзарядить АКБ и в процессе обдумать, как продлить жизнь моего дедушки аккумулятора.
Полный размер
11.85 вольт для современного акб это почти полный разряд.
Таблица заряда аккумулятора
Хороших зарядных устройств ни у кого из знакомых не оказалось, а идею с покупкой нового я отмел сразу, поскольку нормальный зарядник стоит от трех тысяч рублей и выше, а мой бюджет и так был очень сильно подкошен прошедшим отпуском.
5 ампера2) DC-CC понижающий преобразователь до 9 ампер3) Цифровой Вольтметр/Амперметр4) Ардуино УНО совместимая плата Wemos D15) Пару ардуиновских реле6) LED дисплей, лампа на 5 ватт, резисторы и куча проводов.Подключил я всё это следующим образом.
Полный размер
Схема десульфирующего зарядника своими руками на 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.7 вольт. А вот с плотностью дела обстоят хуже, в пяти банках она поднялась до 1.25, а в первой составила всего 1.20.
Наверное, придётся в ближайшем будущем погонять акум в режиме заряд/разряд.
Всем добра!
Работа схемы
Схема рассматриваемого нами цифрового вольтметра на основе платы Arduino представлена на следующем рисунке.
В схеме необходимо сделать следующие соединения:
- Соедините высоковольтную часть трансформатора (220V) с источником напряжения, а его низковольтную часть (12v) — с делителем напряжения в схеме.
- Соедините резистор 10 кОм последовательно с резистором 4,7 кОм. Убедитесь в том, что на вход схемы напряжение будет поступать с именно с резистора 4,7 кОм (не перепутайте резисторы).
- Соедините диод как показано на схеме.
- Подсоедините конденсатор и стабилитрон как показано на схеме.
- Соедините отрицательный вывод диода с контактом A0 платы Arduino.
Примечание: обязательно соедините землю Arduino с точкой, показанной на рисунке, иначе схема не будет работать.
Зачем нужен делитель напряжения
Поскольку мы используем трансформатор 220/12 это значит что на его низковольтной стороне будет напряжение 12 В, которое не подходит для питания платы Arduino (не подходит в качестве ее входного напряжения). Поэтому мы и используем делитель напряжения чтобы получить подходящее напряжение для платы Arduino.
Зачем нужны диод и конденсатор
Поскольку плата Arduino не может работать с отрицательными значениями напряжения мы должны удалить отрицательные циклы напряжения из поступающего напряжения переменного тока, чтобы остались только положительные циклы. Поэтому для выпрямления поступающего входного напряжения и используется диод.
Но напряжение на выходе диода не будет “гладким” (ровным) и будет содержать большие пульсации, которые нежелательно (в нашем случае) подавать на аналоговый вход платы Arduino. Поэтому в схему и включен конденсатор чтобы сглаживать пульсации напряжения на выходе диода.
Назначение стабилитрона
Можно повредить плату Arduino если на ее контакт подать напряжение более 5 В. Поэтому, чтобы напряжение на контакте Arduino не превысило 5 В, в схеме и используется стабилитрон.
Arduino Uno
Arduino Uno – это открытая микроконтроллерная плата на базе микроконтроллера ATmega328p. Она имеет 14 цифровых выводов (из которых 6 выводов можно использовать в качестве выходов ШИМ), 6 аналоговых входов, встроенные стабилизаторы напряжения и так далее. Arduino Uno имеет 32 КБ флэш-памяти, 2 КБ SRAM и 1 КБ EEPROM. Она работает с тактовой частотой 16 МГц. Для связи с другими устройствами Arduino Uno поддерживает последовательный интерфейс, I2C, SPI. В таблице ниже приведены технические характеристики Arduino Uno (более подробное техническое описание можно посмотреть здесь).
Микроконтроллер | ATmega328P |
Рабочее напряжение | 5 В |
Входное напряжение (рекомендуемое) | 7-12 В |
Цифровые входные/выходные выводы | 14 |
Аналоговые входные выводы | 6 |
Флэш-память | 32 Кбайт, из которых 0,5 Кбайт используются загрузчиком |
Оперативная память SRAM | 2 Кбайт |
Энергонезависимая память EEPROM | 1 Кбайт |
Тактовая частота | 16 МГц |
Bluetooth вольтметр на базе arduino
Привет! Сегодня хочу продолжить тему «скрещивания» arduino и android. В предыдущей публикации я рассказал про bluetooth машинку, а сегодня речь пойдет про DIY bluetooth вольтметр. Еще такой девайс можно назвать смарт вольтметр, «умный» вольтметр или просто умный вольтметр, без кавычек.
Последнее название является неправильным с точки зрения грамматики русского языка, тем не менее частенько встречается СМИ. Голосование на эту тему будет в конце статьи, а начать предлагаю с демонстрации работы устройства, чтобы понять о чем же пойдет речь в статье.
Disclaimer: статья рассчитана на среднестатистического любителя arduino, который обычно не знаком с программированием под android, поэтому как и в прошлой статье, приложение для смартфона мы будем делать, используя среду визуальной разработки android-приложений App Inventor 2.
Чтобы сделать DIY bluetooth вольтметр нам нужно написать две относительно независимых друг от друга программы: скетч для ардуино и приложение для андроид.Пожалуй начнем со скетча.
Здесь достаточно одной-двух строк кода, а напряжение подается напрямую на пин А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 вольт.Тут схема такая же, но код чуть длиннее.
Приложение будем делать прямо из браузера в среде визуальной разработки android-приложений App Inventor 2. Заходим на сайт appinventor.mit.
edu/explore/, авторизуемся с помощью гугл-аккаунта, нажимаем кнопку create, new project, и путем простого перетаскивания элементов создаем примерно такой дизайн:Я сделал графику очень простой, если кому-то захочется более интересной графики, напомню, что для этого нужно использовать вместо .jpeg файлов, файлы формата .png с прозрачным фоном. Теперь переходим во вкладку Blocks и создаем там логику работы приложения примерно так:
Идея
Идея
устройства для измерения напряжения, тока, емкости, разряда, а может и заряда возникла давно и не только у меня. Можно найти немало игрушек под названием USB Tester (Doctor) для тестирования различных устройств с USB. Мне же интересно несколько более универсальное устройство, независимое от интерфейса, а просто рассчитанное на определенные напряжения и токи. Например, 0 — 20.00в, 0 — 5.00а, 0 — 99.99Ач. Что касается функций, то я вижу так
- Отображение текущих напряжения и тока, то есть вольт-ампер-метр. Впринципе, можно и мощность сразу отразить.
- Подсчет и отображение накопленной емкости. В ампер-часах и всего скорее в ватт-часах.
- Отображение времени процесса
- И, всего скорее, настраиваемые нижний и верхний пороги отключения по напряжению (ограничения разряда и заряда)
Как этот проект измеряет уровень заряда батареи?
У любых батарей есть то, что мы называем уровнем заряда. Это можно понять как количество напряжения, содержащегося в батарее. Аналоговый вывод Arduino действует как простой вольтметр, на котором определяется значение напряжения. Затем мы можем преобразовать аналоговое значение в цифровое значение напряжения с помощью формулы преобразования АЦП.
Значения, которые мы конвертируем, будут отображаться на светодиодной гистограмме, где они могут проецировать силу. Таким образом, если все десять светодиодов горят, аккумулятор полностью заряжен. Если горят только пять светодиодов, то аккумулятор наполовину заряжен (или разряжен — для пессимистов).
АЦП Arduino Uno имеет 10-битное разрешение. АЦП преобразует входные напряжения от 0 до 5 вольт в целочисленные значения от 0 до 1023. Поэтому, если мы умножим входное аналоговое значение на (5/1024), то получим цифровое значение входного напряжения.
Шаг 2. Подключаем экран
Разобьём подключение на два этапа. Сначала подключим правую группу пинов, затем — левую.
Пойдём справа налево: подключим ножки 1, 2, 3, 4, 5 и 6.
Ножки 1 (GND) и 2 (UCC)отвечают за питание электроники модуля. Подключим их к плюсу и минусу на макетной плате.
Ножка 3 (Uo) отвечает за управление контрастностью. Проще всего просто подключить её к общему минусу, так контрастность будет максимальной.
Ножки 4 (Ao), 5 (R/W) и 6 (E) служат для управления режимами работы экрана. Подключим среднюю к минусу, а остальные к контактам 13 и 12 на Arduino. Звучит запутанно, но разобраться вам поможет схема подключения.
К сожалению пока проверить экран не получится, чтобы вывести хотя бы одну точку, придётся подключить ещё четыре ножки. На моём модуле это левая группа контактов, они пронумерованы с 14 по 11.
Эти контакты отвечают за передачу символов, которые будут выводиться на экран. Внимательно изучите свой модуль и подключите их в таком порядке:
— 14 (DB7) ножку экрана к 8 контакту платы Arduino,
— 13 (DB6) ножку к 9 контакту,
— 12 (DB5) ножку к 10 контакту,
— 11 (DB4) ножку к 11 контакту (наконец-то номера совпали!).
Настройка
В основном, требования к запуску проекта «вольтметр на Arduino» на независимой печатной плате – это источник питания 5 В, 16-мегагерцовый кварцевый генератор и, конечно же, связанные выводы микроконтроллера со всеми цифровыми и аналоговыми портами платы Arduino. Диаграмма ниже популярна в Интернете и объясняет, как нужно использовать схему для работы в качестве прототипа.
Новые компоненты, которые необходимо добавить в прототип для работы на печатной плате:
- 1 28-контактный паяльник для пайки (для микроконтроллера Atmega);
- 1 разъем питания для печатной платы;
- 1 регулятор LM78L05;
- 1 1uf конденсатор;
- 1 конденсатор 10футов;
- 1 кварцевый генератор 16 МГц;
С новыми компонентами и выводом микроконтроллера имеем следующую схему проекта «Ардуино-вольтметр»:
Еще на просторах Интернета можно найти такую схему вольтметра:
Благодаря схематическому дизайну можно выполнить проверку дорожек для построения схемы. После размещения всех устройств на плате, чтобы облегчить их подключение, необходимо вручную написать раскладку дорожек, поскольку функции автоматической маршрутизации обычно не выполняют свою работу до конца.
Смотрите видео: Arduino в роли вольтметра. Вывод напряжения на LCD дисплей
Соберем схему как в прошлый раз мы собирали, здесь я добавил еще один переменный резистор, он же сопротивление, и меняя его значение мы можем измерять постоянное напряжение, между минусом и резистором, в пределах 5 вольт.
Мы запитали 5 вольт по красному проводнику, в на плату Arduino поступает значение напряжения, хотя можно было бы подключить маленькую батарейку и проверить ее вольтаж.
Давайте приступим к написанию скетча, и далее рассмотрим, как это все сделать. Хочу показать вам принципиальную плату, потом будет на сайте изображена схема, она похожа на пример, который мы собирали в прошлый раз с LCD дисплеем.
Обратите внимание, мы выводили текст на экран, в принципе здесь отличие единственное это второе сопротивление. Здесь по подключению, я думаю вопросов не возникнет, мы используем 4, 6, 10, 11, 12, 13 разъемы, минус берём общий, он расходится по плате, минус на первый контакт, и на последний(16)
Он здесь обозначен на моей плате буквой К, на сколько я помню на разных схемах по-разному. На одних схемах и на других . Давайте напишем скетч, поскольку мы использовали в ней контакты 4, 6, 10, 11, 12, 13 нам нужно будет их обозначить.
И поскольку мы опять работаем с LCD дисплеем, мы должны будем подключить библиотеку , константу для нашего аналогового разъёма, объявим массив контактов, которые мы использовали.
#include < LiquidCrystal.h>
Объявим переменную val, в которую мы будем считывать, преобразовывать, так сказать получать, исходя из значение A0.
const int analogIn = A0; LiquidCrystal lcd(4, 6, 10, 11, 12, 13); float val = 0;
В setup мы включим, в принципе это дело по пожеланию, для мониторинга последовательный порт, объявим LCD 16 символов по 2 строки и выведем текст не указывая конкретно на какой строке значение напряжения. Это будет первая строка. В цикле loop мы получим в переменную значение с нашего разъема, которое у нас определяется как значение между плюс-минус и вот это выводится из .
void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.print("Voltage Value:"); }
Далее мы его преобразовываем, поскольку мы знаем, что там 5 Вольт, у нас было как максимальное значение, предполагаемое максимальное значение, изменяется значение от 0 до 1024, мы выводим его методом пропорции, поэтому для замера напряжения пальчиковой батарейки в формуле будем умножать не на 5, а на 1,5. Далее выводим значение в последовательный порт и печатаем после него символ вольтажа, английскую букву V.
Теперь на первой строке, она по сути вторая строка, с 6 символа выводим значение нашей переменной , символ вольтажа, английскую букву V и сделаем небольшую задержку в одну пятую секунды, или 200 миллисекунд. Сохраним наш скетч, в принципе, после этого плата Arduino может стать небольшим вольтметром, который можно проверить напряжение небольшой батарейки.
void loop() { val = analogRead(A0); val = val/1024*5.0; Serial.print(val); Serial.print("V"); lcd.setCursor(6,1); lcd.print(val); lcd.print("V"); delay(200); }
Проверим скетч на ошибки и загрузим его в Arduino. Загрузка завершена, и как я вам в начале показывал, меняя сопротивление переменного резистора, вращая его ручку, мы меняем вольтаж в цепи, что в свою очередь отображается на дисплее.
Начинать измерение лучше всего вывернув резистор в крайнее положение, что бы был замкнут на землю, и постепенно мы будем менять сопротивление, увеличивая сопротивление между и и уменьшая между и плюсом источника питания.