Arduino. Эксперимент 18. Тестер батареек

В этом эксперименте мы выводим на жидкокристаллический дисплей данные о напряжении, измеренном на батарейке.

 

СПИСОК ДЕТАЛЕЙ ДЛЯ ЭКСПЕРИМЕНТА

 

-   1 плата Arduino Uno;

-   1 беспаечная макетная плата;

-   2 резистора номиналом 10 кОм;

-   1 выпрямительный диод;

-   1 текстовый экран;

-   16 проводов «папа-папа»;

-   1 клеммник.

 

ПРИНЦИПИАЛЬНАЯ СХЕМА

 

 

СХЕМА НА МАКЕТНОЙ ПЛАТЕ

 

 

ОБРАТИТЕ ВНИМАНИЕ

  • Мы подключаем «плюс» батарейки через делитель напряжения с равными плечами (R1 = R2 = 10 кОм), таким образом деля подаваемое напряжение пополам. Поскольку в аналоговый вход Arduino мы можем подавать до 5 В, мы можем измерять напряжение до 10 В. Не пробуйте измерять большее напряжение, вы можете повредить плату!
  • На принципиальной схеме внутри изображения дисплея подписаны названия его выводов согласно datasheet, а снаружи — номера его ножек.
  • Ножки нашего ЖК-дисплея нумеруются не подряд: 15 и 16 ножки находятся перед 1.
  • Диод пригодится, если пользователь тестера перепутает «+» и «-» батарейки, главное нам самим не забыть про направление, в котором через диод может течь ток, и установить его верно!

 

СКЕТЧ

 

скачать скетч для Arduino IDE
// Подключаем библиотеку для работы с жидкокристаллическим
// экраном (англ. 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 мы передали параметрами пины, к которым подключены выводы дисплея, через которые мы будем им управлять и передавать данные.

 

ВОПРОСЫ ДЛЯ ПРОВЕРКИ СЕБЯ

  1. Из-за чего измерения напряжения в этом эксперименте могут быть неточными (на что мы можем повлиять)?
  2. Какая библиотека облегчает работу с нашим текстовым экраном? Какие шаги нужно предпринять до начала вывода текста на него?
  3. Каким образом мы задаем позицию, с которой на экран выводится текст?
  4. Можем ли мы писать на экране кириллицей? Как?

 

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ

Возможно, вы захотите воспользоваться еще одним методом вашего объекта lcd  clear(): он очищает экран и устанавливает курсор в левую колонку верхней строчки.

  1. Создайте секундомер, который будет отсчитывать время, прошедшее с начала работы Arduino и выводить секунды и сотые секунд на экран.
  2. Совместите отсчет времени и измерение напряжения. Отобразите все данные на дисплее. Отправляйте их раз в 10 секунд на компьютер.

Теперь вы можете выводить без компьютера и проводов любые данные, с которыми работаете, и использовать это как в режиме эксплуатации вашего устройства, так и во время отладки!

 

С оригиналом статьи вы можете ознакомиться на сайте Amperka.ru


ЭКСПЕРИМЕНТ 17 | ОГЛАВЛЕНИЕ | ЭКСПЕРИМЕНТ 19

Категория: Простые эксперименты | Добавил: Decay_Dance (15.03.2016)
Просмотров: 2574 | Теги: электрические схемы, основы схемотехники, основы робототехники, тестер, элекктричество, микроконтроллеры, Arduino, простые эксперименты | Рейтинг: 0.0/0