Урок 18. Тестер батареек


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

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

Принципиальная схема

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

Обратите внимание

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

Скетч

  1.     // Подключаем библиотеку для работы с жидкокристаллическим
    
  2.     // экраном (англ. Liquid Crystal Display или просто LCD)
    
  3.     #include 
    
  4.     // на диоде, защищающем от неверной полярности, падает доля
    
  5.     // напряжения (англ. voltage drop). Необходимо это учитывать
    
  6.     #define DIODE_DROP  0.7 
    
  7.     // Объявляем объект, для управления дисплеем. Для его создания
    
  8.     // необходимо указать номера пинов, к которым он подключен в
    
  9.     // порядке:       RS   E DB5 DB6 DB7 DB8
    
  10.     LiquidCrystal lcd(
    13, 12, 11, 10,  9,  8
    )
    ;
    
  11.  
  12.     void setup(
    ) 
  13.     {
    
  14.       // начинаем работу с экраном. Сообщаем объекту количество
    
  15.       // строк и столбцов. Опять же, вызывать pinMode не требуется:
    
  16.       // функция begin сделает всё за нас
    
  17.       lcd.begin
    (
    16, 2
    )
    ;
    
  18.       // печатаем сообщение на первой строке
    
  19.       lcd.print
    (
    "Battery voltage:"
    )
    ;
    
  20.     }
    
  21.  
  22.     void loop(
    ) 
  23.     {
    
  24.       // высчитываем напряжение подключенной батарейки
    
  25.       float voltage = analogRead(A0) / 1024.0 * 10.0
    ;
    
  26.       // если напряжение на делителе напряжения было зафиксировано,
    
  27.       // нужно прибавить напряжение на диоде, т.к. оно было съедено
    
  28.       if (voltage > 0.1
    )
    
  29.         voltage +
    = DIODE_DROP;
    
  30.       // устанавливаем курсор, колонку 0, строку 1. На деле — это
    
  31.       // левый квадрат 2-й строки, т.к. нумерация начинается с нуля
    
  32.       lcd.setCursor
    (
    0, 1
    )
    ;
    
  33.       // печатаем напряжение в батарейке с точностью до сотых долей
    
  34.       lcd.print
    (voltage, 2
    )
    ;
    
  35.       // следом печатаем единицы измерения
    
  36.       lcd.print
    (
    " Volts"
    )
    ;
    
  37.     }
    

Пояснения к коду

  • Если вы используете диод, падение напряжения на котором происходит на другую величину, не забудьте исправить макроопределение DIODE_DROP.
  • В этом эксперименте мы снова пользуемся готовой библиотекой для создания объекта lcd и использования его методов
    • lcd.begin(cols,rows) с помощью которого мы задаем количество колонок и строк нашего дисплея
    • lcd.print(data) для вывода данных. У него есть второй необязательный параметр BASE, передав который, можно выбрать систему счисления, так же, как в примере с Serial.print().
    • lcd.setCursor(col,row) устанавливает курсор в переданную колонку и строку. Последующий вывод будет осуществляться с этого места.
  • При создании lcd мы передали параметрами пины, к которым подключены выводы дисплея, через которые мы будем им управлять и передавать данные.

Вопросы для проверки себя

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

Задания для самостоятельного решения

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

 

 

Теги: 
Источник: 
wiki.amperka.ru