Тестер батареек
В этом эксперименте мы выводим на жидкокристаллический дисплей данные о напряжении, измеренном на батарейке.
Список деталей для эксперимента
1 плата Arduino Uno
1 беспаечная макетная плата
2 резистора номиналом 10 кОм
1 выпрямительный диод
1 текстовый экран
16 проводов «папа-папа»
1 клеммник
Принципиальная схема

Схема на макетке

Обратите внимание
Мы подключаем «плюс» батарейки через делитель напряжения с равными плечами (
R1 = R2 = 10 кОм
), таким образом деля подаваемое напряжение пополам. Поскольку в аналоговый вход Arduino мы можем подавать до 5В, мы можем измерять напряжение до 10В. Не пробуйте измерять большее напряжение, вы можете повредить плату!На принципиальной схеме внутри изображения дисплея подписаны названия его выводов согласно datasheet, а снаружи — номера его ножек.
Ножки нашего ЖК-дисплея нумеруются не подряд: 15 и 16 ножки находятся перед 1.
Диод пригодится, если пользователь тестера перепутает «+» и «-» батарейки, главное нам самим не забыть про направление, в котором через диод может течь ток, и установить его верно!
Скетч
// p180_lcd.ino
// Подключаем библиотеку для работы с жидкокристаллическим
// экраном (англ. Liquid Crystal Display или просто LCD)
#include <LiquidCrystal.h>
// на диоде, защищающем от неверной полярности, падает доля
// напряжения (англ. voltage drop). Необходимо это учитывать
#define DIODE_DROP 0.7
// Объявляем объект, для управления дисплеем. Для его создания
// необходимо указать номера пинов, к которым он подключен в
// порядке: RS E DB4 DB5 DB6 DB7
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
void setup()
{
// начинаем работу с экраном. Сообщаем объекту количество
// строк и столбцов. Опять же, вызывать pinMode не требуется:
// функция begin сделает всё за нас
lcd.begin(16, 2);
// печатаем сообщение на первой строке
lcd.print("Battery voltage:");
}
void loop()
{
// высчитываем напряжение подключенной батарейки
float voltage = analogRead(A0) / 1024.0 * 10.0;
// если напряжение на делителе напряжения было зафиксировано,
// нужно прибавить напряжение на диоде, т.к. оно было съедено
if (voltage > 0.1)
voltage += DIODE_DROP;
// устанавливаем курсор, колонку 0, строку 1. На деле — это
// левый квадрат 2-й строки, т.к. нумерация начинается с нуля
lcd.setCursor(0, 1);
// печатаем напряжение в батарейке с точностью до сотых долей
lcd.print(voltage, 2);
// следом печатаем единицы измерения
lcd.print(" Volts");
}
Пояснения к коду
Если вы используете диод, падение напряжения на котором происходит на другую величину, не забудьте исправить макроопределение
DIODE_DROP
.В этом эксперименте мы снова пользуемся готовой библиотекой
<LiquidCrystal.h>
для создания объектаlcd
и использования его методов: -lcd.begin(cols,rows)
— задаём количество колонок и строк нашего дисплея. -lcd.print(data)
— вывод данных. У него есть второй необязательный параметрBASE
, передав который, можно выбрать систему счисления, так же, как в примере сSerial.print()
. -lcd.setCursor(col,row)
— устанавливает курсор в переданную колонку и строку. Последующий вывод будет осуществляться с этого места.При создании
lcd
мы передали параметрами пины, к которым подключены выводы дисплея, через которые мы будем им управлять и передавать данные.О том, как выводить текст кириллицей, и о других подробностях работы с дисплеем в нашей вики есть отдельная статья.
Вопросы для проверки себя
Из-за чего измерения напряжения в этом эксперименте могут быть неточными (на что мы можем повлиять)?
Какая библиотека облегчает работу с нашим текстовым экраном? Какие шаги нужно предпринять до начала вывода текста на него?
Каким образом мы задаем позицию, с которой на экран выводится текст?
Можем ли мы писать на экране кириллицей? Как?
Задания для самостоятельного решения
Возможно, вы захотите воспользоваться еще одним методом вашего объекта
lcd
—clear()
: он очищает экран и устанавливает курсор в левую колонку верхней строчки.Создайте секундомер, который будет отсчитывать время, прошедшее с начала работы Arduino и выводить секунды и сотые секунд на экран.
Совместите отсчет времени и измерение напряжения. Отобразите все данные на дисплее. Отправляйте их раз в 10 секунд на компьютер.
Теперь вы можете выводить без компьютера и проводов любые данные, с которыми работаете, и использовать это как в режиме эксплуатации вашего устройства, так и во время отладки!