====== Эксперимент 18. Тестер батареек ====== [[пантограф|← Пантограф]] | [[конспект-arduino:|Оглавление]] | [[светильник-управляемый-по-usb|Светильник, управляемый по USB →]] В этом эксперименте мы выводим на жидкокристаллический дисплей данные о напряжении, измеренном на батарейке. ===== Список деталей для эксперимента ===== * 1 плата [[amp>product/arduino-uno|Arduino Uno]] * 1 беспаечная [[amp>collection/breadboards|макетная плата]] * 2 [[amp>product/resistor-10k|резистора]] номиналом 10 кОм * 1 [[amp>product/rectifier-diode|выпрямительный диод]] * 1 текстовый [[amp>product/display-lcd-text-16x2-fla|экран]] * 16 проводов [[amp>product/wire-mm|«папа-папа»]] * 1 [[amp>product/terminal-block|клеммник]] ===== Принципиальная схема ===== {{ :конспект-arduino:18_lcd_scheme.svg.png?nolink& |}} ===== Схема на макетке ===== {{ :конспект-arduino:18_lcd_bread.svg.png?nolink& |}} ===== Обратите внимание ===== * Мы подключаем «плюс» батарейки через делитель напряжения с равными плечами (R1 = R2 = 10 кОм), таким образом деля подаваемое напряжение пополам. Поскольку в аналоговый вход Arduino мы можем подавать до 5В, мы можем измерять напряжение до 10В. Не пробуйте измерять большее напряжение, вы можете повредить плату! * На принципиальной схеме внутри изображения дисплея подписаны названия его выводов согласно datasheet, а снаружи — номера его ножек. * Ножки нашего ЖК-дисплея нумеруются не подряд: 15 и 16 ножки находятся перед 1. * Диод пригодится, если пользователь тестера перепутает «+» и «-» батарейки, главное нам самим не забыть про направление, в котором через диод может течь ток, и установить его верно! ===== Скетч ===== // Подключаем библиотеку для работы с жидкокристаллическим // экраном (англ. Liquid Crystal Display или просто LCD) #include // на диоде, защищающем от неверной полярности, падает доля // напряжения (англ. 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''. * В этом эксперименте мы снова пользуемся готовой библиотекой '''' для создания объекта ''lcd'' и использования его методов * ''lcd.begin(cols,rows)'' с помощью которого мы задаем количество колонок и строк нашего дисплея * ''lcd.print(data)'' для вывода данных. У него есть второй необязательный параметр ''BASE'', передав который, можно выбрать систему счисления, так же, как в примере с ''Serial.print()''. * ''lcd.setCursor(col,row)'' устанавливает курсор в переданную колонку и строку. Последующий вывод будет осуществляться с этого места. * При создании ''lcd'' мы передали параметрами пины, к которым подключены выводы дисплея, через которые мы будем им управлять и передавать данные. * О том, как выводить текст кириллицей, и о других подробностях работы с дисплеем в нашей вики есть отдельная [[http://wiki.amperka.ru/products:display-lcd-text-16x2#%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%B8%D1%86%D0%B0|статья]]. ===== Вопросы для проверки себя ===== - Из-за чего измерения напряжения в этом эксперименте могут быть неточными (на что мы можем повлиять)? - Какая библиотека облегчает работу с нашим текстовым экраном? Какие шаги нужно предпринять до начала вывода текста на него? - Каким образом мы задаем позицию, с которой на экран выводится текст? - Можем ли мы писать на экране кириллицей? Как? ===== Задания для самостоятельного решения ===== Возможно, вы захотите воспользоваться еще одним методом вашего объекта ''lcd'' — ''clear()'': он очищает экран и устанавливает курсор в левую колонку верхней строчки. - Создайте секундомер, который будет отсчитывать время, прошедшее с начала работы Arduino и выводить секунды и сотые секунд на экран. - Совместите отсчет времени и измерение напряжения. Отобразите все данные на дисплее. Отправляйте их раз в 10 секунд на компьютер. Теперь вы можете выводить без компьютера и проводов любые данные, с которыми работаете, и использовать это как в режиме эксплуатации вашего устройства, так и во время отладки! ---- [[пантограф|← Пантограф]] | [[конспект-arduino:|Оглавление]] | [[светильник-управляемый-по-usb|Светильник, управляемый по USB →]]