В этой статье показано как связать Arduino и ПК и передавать на ПК данные с АЦП. Программа для Windows написана с использованием Visual C++ 2008 Express. Программа вольтметра очень проста и имеет обширное поле для улучшений. Основной её целью было показать работу с COM-портом и обмен данными между компьютером и Arduino.
Связь между Arduino и ПК:
- Снятие показаний с АЦП начинается, когда компьютер посылает Arduino команды 0xAC и 0x1y. у – номер канала АЦП (0-2);
- Снятие показаний прекращается после получения Arduino команд 0xAC и 0×00;
- Во время снятия показаний Arduino раз в 50 мс посылает компьютеру команды 0xAB 0xaa 0xbb, где aa и bb максимальные и минимальные результаты измерения.
Программа для Arduino
Подробнее о последовательной связи Вы можете прочесть на arduino.cc. Программа достаточно проста, большую её часть занимает работа с параллельным портом. После окончания снятия данных с АЦП мы получаем 10 битное значение напряжения (0×0000 – 0×0400) в виде 16-битных переменных (INT). Последовательный порт (RS-232) позволяет передавать данные в пакетах по 8 бит. Необходимо разделить 16-битные переменные на 2 части по 8 бит.
Serial.print(voltage>>8,BYTE);
Serial.print(voltage%256,BYTE);
Мы смещаем байты переменной на 8 бит вправо и потом делим на 256 и результат отправляем на компьютер.
Полный исходник ПО для Arduino вы можете скачать
Visual C++
Я предполагаю, что у Вас уже есть базовые знания в области программирования на C + + для Windows, если нет, то используйте Google. Интернет полон уроков для начинающих.
Первое, что нужно сделать, это добавить последовательный порт из панели инструментов в нижнюю форму. Это позволит изменить некоторые важные параметры последовательного порта: имя порта, скорость передачи данных, битность. Это полезно для добавления элементов управления в окно приложения, для изменения этих настроек в любое время, без перекомпиляции программы. Я использовал только возможность выбора порта.
После поиска доступных последовательных портов первый порт выбирается по умолчанию. Как это сделано:
array< String ^>^ serialPorts = nullptr;
serialPorts = serialPort1->GetPortNames();
this->comboBox1->Items->AddRange(serialPorts);
this->comboBox1->SelectedIndex=0;
Последовательный порт на ПК может быть использован только одним приложением одновременно, так что порт должен быть открыт перед использованием и не закрываться. Простые команды для этого:
serialPort1->Open();
serialPort1->Close();
Для правильного чтения данных из последовательного порта необходимо использовать события (в нашем случае прерывание). Выберите тип события:
Раскрывающийся список при двойном нажатии "DataReceived".
Код события генерируется автоматически:
Если первый байт прибывший по последовательному порту 0xAB, если это означает, что остальные байты несут данные о напряжении.
private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) {
unsigned char data0, data1;
if (serialPort1->ReadByte()==0xAB) {
data0=serialPort1->ReadByte();
data1=serialPort1->ReadByte();
voltage=Math::Round((float(data0*256+data1)/1024*5.00),2);
data_count++;
serialPort1->ReadByte();
Запись и чтение данных последовательного порта
Для меня небольшой проблемой было послать шестнадцатиричные RAW-данные через последовательный порт. Была использованна команда Write(); но с тремя аргументами: массив, номер стартового байта, кол-во байтов для записи.
private: System::Void button2_Click_1(System::Object^ sender, System::EventArgs^ e) {
unsigned char channel=0;
channel=this->listBox1->SelectedIndex;
array^start ={0xAC,(0x10+channel)};
array^stop ={0xAC,0x00};
serialPort1->Write(start,0,2);
this->button2->Text="Stop";
} else {
serialPort1->Write(stop,0,2);
this->button2->Text="Start";
На этом все!
Оригинал статьи на английском языке (перевод: Александр Касьянов для сайта cxem.net)
Описано как собрать самодельный двойной вольтметр на основе платформы Arduino UNO с использованием ЖК-дисплея 1602A. В некоторых случаях необходимо измерять одновременно два постоянныхнапряжения и сравнивать их. Это может потребоваться, например, при ремонте или налаживании стабилизатора постоянного напряжения, чтобы измерять напряжение на его входе и выходе, либо в других случаях.
Принципиальная схема
Используя универсальный микроконтроллерный модуль ARDUINO UNO и двухстрочный ЖК-дисплей типа 1602А (на основе контроллера HD44780) можно легко сделать такой прибор. В одной строке он будет показывать напряжение U1, в другой - напряжение U2.
Рис. 1. Принципиальная схема двойного вольтметра с дисплеем 1602A на Arduino UNO.
Но, прежде всего, хочу напомнить, что ARDUINO UNO это относительно недорогой готовый модуль, - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.
Тем, кто незнаком с ARDUINO UNO, советую сначала ознакомиться со статьями Л.1 и Л.2. Схема двойного вольтметра показана на рис. 1. Он предназначен для измерения двух напряжений от 0 до 100V (практически, до 90V).
Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А. Питается ЖК-индикатор от стабилизатора напряжения 5V, имеющегося на плате стабилизатора напряжения 5V.
Измеряемые напряжения поступают на два аналоговых входа А1 и А2. Всего аналоговых входов шесть, - А0-А5, можно было выбрать любые два из них. В данном случае, выбраны А1 и А2. Напряжение на аналоговых портах может быть только положительным и только в пределах от нуля до напряжения питания микроконтроллера, то есть, номинально, до 5V.
Выход аналогового порта преобразуется АЦП микроконтроллера в цифровую форму. Для получения результата в единицах вольт, нужно его умножить на 5 (на опорное напряжение, то есть, на напряжение питания микроконтроллера) и разделить на 1024.
Для того чтобы можно было измерять напряжение более 5V, вернее, более напряжения питания микроконтроллера, потому что реальное напряжение на выходе 5-вольтового стабилизатора на плате ARDUINO UNO может отличаться от 5V, и обычно немного ниже, нужно на входе применить обычные резистивные делители. Здесь это делители напряжения на резисторах R1, R3 и R2, R4.
При этом, для приведения показаний прибора к реальному значению входного напряжения, нужно в программе задать деление результата измерения на коэффициент деления резистивного делителя. А коэффициент деления, обозначим его «К», можно вычислить по такой формуле:
К = R3 / (R1+R3) или К = R4 / (R2+R4),
соответственно для разных входов двойного вольтметра.
Очень любопытно то, что резисторы в делителях совсем не обязательно должны быть высокоточными. Можно взять обычные резисторы, затем измерить их фактическое сопротивление точным омметром, и уже в формулу подставить эти измеренные значения. Получится значение «К» для конкретного делителя, которое и нужно будет подставлять в формулу.
Программа для вольтметра
Программа на языке C++ приведена на рисунке 2.
Рис. 2. Исходный код программы.
Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты, но я вот так, решил использовать именно эти.
Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления. Такие подпрограммы называются «библиотеками», и в программном комплекте для ARDUINO UNO есть много разных «библиотек». Для работы с ЖК-индикатором на основе HD44780 нужна библиотека LiquidCrystal. Поэтому программа (таблица 1) начинается с загрузки этой библиотеки:
Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-индикатором. Я выбрал порты с D2 по D7. Можно выбрать другие. Эти порты назначены строкой:
LiquidCrystal led(2, 3, 4, 5, 6, 7);
После чего, программа переходит собственно к работе вольтметра. Для измерения напряжения решено было использовать аналоговые входы А1 и А2. Эти входы заданы в строках:
int analogInput=1;
int analogInput1=2;
Для чтения данных с аналоговых портов используется функция analogRead. Чтение данных с аналоговых портов происходит в строках:
vout=analogRead(analogInput);
voutl=analogRead(analoglnput1);
Затем, производится вычисление фактического напряжения с учетом коэффициента деления делителя входного напряжения:
volt=vout*5.0/1024.0/0.048 ;
volt1=vout1*5.0/1024.0/0.048;
В этих строках число 5.0 - это напряжение на выходе стабилизатора платы ARDUINO UNO. В идеале должно быть 5V, но для точной работы вольтметра это напряжение нужно предварительно измерить. Подключите источник питания и измерьте достаточно точным вольтметром напряжение +5V на разъеме POWER платы. Что будет, то и вводите в эти строки вместо 5.0, например, если будет 4.85V, строки будут выглядеть так:
volt=vout*4.85/1024.0/0.048;
volt1=vout1*4.85/1024.0/0.048;
На следующем этапе нужно будет измерить фактические сопротивления резисторов R1-R4 и определить коэффициенты К (указаны 0.048) для этих строк по формулам:
К1 = R3 / (R1+R3) и К2 = R4 / (R2+R4)
Допустим, К1 = 0.046, а К2 = 0.051, так и пишем:
volt=vout*4.85/1024.0/0.046 ;
volt1=vout1*4.85/1024.0/0.051;
Таким образом, в текст программы нужно внести изменения соответственно фактическому напряжению на выходе 5-воль-тового стабилизатора платы ARDUINO UNO и согласно фактическим коэффициентам деления резистивных делителей. После этого прибор будет работать точно и никакого налаживания или калибровки не потребует.
Изменив коэффициенты деления резистивных делителей (и, соответственно, коэффициенты «К») можно сделать другие пределы измерения, и совсем не обязательно одинаковые для обоих входов.
Каравкин В. РК-2017-01.
Литература:
- Каравкин В. - Ёлочная мигалка на ARDUINO как средство от боязни микроконтроллеров. РК-11-2016.
- Каравкин В. - Частотомер на ARDUINO. РК-12-2016.
Привет, Хабр! Сегодня хочу продолжить тему «скрещивания» arduino и android. В предыдущей публикации я рассказал про , а сегодня речь пойдет про DIY bluetooth вольтметр. Еще такой девайс можно назвать смарт вольтметр, «умный» вольтметр или просто умный вольтметр, без кавычек. Последнее название является неправильным с точки зрения грамматики русского языка, тем не менее частенько встречается в СМИ. Голосование на эту тему будет в конце статьи, а начать предлагаю с демонстрации работы устройства, чтобы понять о чем же пойдет речь в статье.
Disclaimer: статья рассчитана на среднестатистического любителя arduino, который обычно не знаком с программированием под android, поэтому как и в прошлой статье, приложение для смартфона мы будем делать, используя среду визуальной разработки android-приложений App Inventor 2.
Чтобы сделать DIY bluetooth вольтметр нам нужно написать две относительно независимых друг от друга программы: скетч для ардуино и приложение для андроид.Пожалуй начнем со скетча.
Для начала следует знать, что существует три основных варианта измерения напряжения при помощи ардуино, не зависимо от того куда нужно выводить информацию: в com-порт, на подключенный к ардуино экранчик, или на смартфон.
Первый случай: измерения напряжения до 5 вольт. Здесь достаточно одной-двух строк кода, а напряжение подается напрямую на пин А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);
}
Arduino Uno
Блютуз модуль
Третий случай. Когда нужно получить более точные о напряжении в качестве опорного напряжения нужно использовать не напряжение питания, которое может немного меняться при питании от акб, например, а напряжение внутренного стабилизатора ардуино 1.1 вольт.Тут схема такая же, но код чуть длиннее. Подробно этот вариант разбирать не буду, так как он и так хорошо описан в тематических статьях, а мне вполне и достаточно второго способа, поскольку питание у меня стабильное, от usb-порта ноутбука.
Итак с измерением напряжения мы разобрались, теперь перейдем ко второй половине проекта: созданию андроид-приложения. Приложение будем делать прямо из браузера в среде визуальной разработки android-приложений App Inventor 2. Заходим на сайт appinventor.mit.edu/explore , авторизуемся с помощью гугл-аккаунта, нажимаем кнопку create, new project, и путем простого перетаскивания элементов создаем примерно такой дизайн:
Я сделал графику очень простой, если кому-то захочется более интересной графики, напомню, что для этого нужно использовать вместо.jpeg файлов, файлы формата.png с прозрачным фоном.
Теперь переходим во вкладку Blocks и создаем там логику работы приложения примерно так:
Если все получилось можно нажимать кнопку Build и save .apk to my computer, а затем уже скачиваем и устанавливаем приложение на смартфон, хотя есть и другие способы заливки приложения. тут уж кому как удобнее. В итоге у меня получилось вот такое приложение:
Понимаю, что мало кто использует среду визуальной разработки android-приложений App Inventor 2 в своих проектах, поэтому может возникнуть много вопросов по поводу работы в ней. Чтобы снять часть таких вопросов, я сделал подробное видео, о том как сделать такое приложение «с нуля»(для просмотра нужно перейти на ютуб):
P.S. Сборник из более 100 обучающих материалов по ардуино для начинающих и профи
Идея
Идея устройства для измерения напряжения, тока, емкости, разряда, а может и заряда возникла давно и не только у меня. Можно найти немало игрушек под названием USB Tester (Doctor) для тестирования различных устройств с USB. Мне же интересно несколько более универсальное устройство, независимое от интерфейса, а просто рассчитанное на определенные напряжения и токи. Например, 0 - 20.00в, 0 - 5.00а, 0 - 99.99Ач. Что касается функций, то я вижу так
- Отображение текущих напряжения и тока, то есть вольт-ампер-метр. Впринципе, можно и мощность сразу отразить.
- Подсчет и отображение накопленной емкости. В ампер-часах и всего скорее в ватт-часах.
- Отображение времени процесса
- И, всего скорее, настраиваемые нижний и верхний пороги отключения по напряжению (ограничения разряда и заряда)
Разработка
Для реализации расчетов и измерений нам понадобится контроллер. Я вспомнил эту идею в рамках знакомства с Arduino, поэтому контроллером будет простая популярная Atmega328 и программироваться она будет в среде Arduino. С инженерной точки зрения выбор наверно не самый хороший - контроллер для задачи слегка жирноват, а его АЦП не назовешь измерительными, но... будем пробовать.
- Паять в этом проекте много не будем. В качестве основы возьмем готовый модуль Arduino Pro Mini, благо китайцы готовы их поставлять по $1.5 в розницу.
- В качестве устройства отображения будет выступать дисплей 1602 - еще $1.5. У меня вариант с интерфейсным модулем I2C, но в этом проекте он не сильно нужен ($0.7).
- Для разработки нам понадобиться макетная плата. В моем случае это небольшая BreadBoard за $1.
- Разумеется понадобятся провода и некоторое количество резисторов разного номинала. Для дисплея 1602 без I2C нужен также подбор контрастности - делается переменным резистором на 2 - 20 кОм.
- Для реализации амперметра понадобится шунт. В первом приближении им может быть резистор 0.1 Ом, 5 Вт.
- Для реализации автоматики отключения понадобится реле с контактами рассчитанными на максимальный ток устройства и напряжением равным напряжению питания. Для управления реле нужен npn транзистор и защитный диод.
- Устройство будет питаться от внешнего источника питания, очевидно, что не менее 5 в. Если питание будет сильно варьироваться, то так же потребуется интегральный стабилизатор типа 7805 - он и определит напряжение реле.
- В случае Arduino Pro Mini для заливки прошивки потребуется USB-TTL конвертер.
- Для наладки понадобится мультиметр.
Вольтметр
Я реализую простой вольтметр с одним диапазоном примерно 0 - 20в. Это замечанием важно, тк АЦП нашего контроллера имеет разрядность 10 бит (1024 дискретных значения), поэтому погрешность составит не менее 0.02 в (20 / 1024). Для реализации железно нам нужен аналоговый вход контроллера, делитель из пары резисторов и какой-нибудь вывод (дисплей в законченном варианте, для отладки можно последовательный порт).
Принцип измерения АЦП состоит в сравнении напряжения на аналоговом входе с опорным VRef. Выход АЦП всегда целый - 0 соответствует 0в, 1023 соответствует напряжению VRef. Измерение реализовано путем серии последовательных чтений напряжения и усреднения по периоду между обновлениями значения на экране. Выбор опорного напряжения важен, поскольку по умолчанию оно равно напряжению питания, которое может быть не стабильно. Это нам совершенно не подходит - за основу мы будем брать стабильный внутренний опорный источник напряжением 1.1в, инициализируя его вызовом analogReference(INTERNAL). Затем мы откалибруем его значение по показаниям мультиметра.
На схеме слева - вариант с прямым управлением дисплея (он просто управляется - смотрите стандартный скетч LiquidCrystal\HelloWorld). Справа - вариант с I2C, который я и буду использовать дальше. I2C позволяет сэкономить на проводах (коих в обычном варианте - 10, не считая подсветки). Но при этом необходим дополнительный модуль и более сложная инициализация. В любом случае, отображение символов на модуле надо сначала проверить и настроить контрастность - для этого надо просто вывести после инициализации любой текст. Контрастность настраивается резистором R1, либо аналогичным резистором I2C модуля.
Вход представляет собой делитель 1:19, который позволяет при Vref = 1.1 получить максимальное напряжение около 20в (обычно параллельно входу ставят конденсатор + стабилитрон для защиты, но нам пока это не важно). Резисторы имеют разброс, да и опорное Vref контроллера тоже, поэтому после сборки надо измерить напряжение (хотя бы питания) параллельно нашим устройством и эталонным мультиметром и подобрать Vref в коде до совпадения показания. Так же стоить отметить, что любой АЦП имеет напряжение смещения нуля (которое портит показания в начале диапазона), но мы пока не будем в это углубляться.
Также важным будет разделение питающей и измерительной "земли". Наш АЦП имеет разрешение чуть хуже 1мВ, что может создавать проблемы при неправильной разводке, особенно на макете. Поскольку разводка платы модуля уже сделана и нам остается только выбор пинов. "Земляных" пинов у модуля несколько, поэтому мы должны сделать так, чтобы питание в модуль заходило по одной "земле", а измерения по другой. Фактически для изменений я всегда использую "земляной" пин ближайший к аналоговым входам.
Для управление I2C используется вариант библиотеки LiquidCrystal_I2C - в моем случае указывается специфическая распиновка модуля I2C (китайцы производят модули с отличающимся управлением). Так же отмечу, что I2C в Arduino предполагает использование именно пинов A4, A5 - на плате Pro Mini они находятся не с краю, что неудобно для макетирования на BreadBoard.
Исходный код
#includeПринципиальная схема самодельного двуполярного вольтметра на Arduino Uno и с дисплеем 1602A. В статье «Двойной вольтметр на ARDUINO UNO» (Л.1) автор предложилописание вольтметра и программы для одновременного измерения и индикации двух постоянных напряжений. Что очень удобно, если нужно измерять одновременно два постоянных напряжения и сравнивать их.
Это может потребоваться, например, при ремонте или налаживании стабилизатора постоянного напряжения, чтобы измерять напряжение на его входе и выходе, либо в других случаях.
Однако, бывают схемы с двухполярным питанием, когда напряжение в какой-то точке схемы относительно общего «нуля» может быть как положительным, так и отрицательным.
Принципиальная схема
Здесь описывается доработка схемы и программы, чтобы прибор мог измерять и индицировать как положительное, так и отрицательное напряжение.
Начну с того, что измеряемые напряжения поступают на два аналоговых входа А1 и А2. Всего аналоговых входов шесть, - А0-А5, можно было выбрать любые два из них. В данном случае, выбраны А1 и А2. Напряжение на аналоговых портах может быть только положительным и только в пределах от нуля до напряжения питания микроконтроллера, то есть, номинально, до 5V.
Выход аналогового порта преобразуется АЦП микроконтроллера в цифровую форму. Для получения результата в единицах вольт, нужно его умножить на 5 (на опорное напряжение, то есть, на напряжение питания микроконтроллера) и разделить на 1024.
Рис. 1. Принципиальная схема двуполярного вольтметра на Arduino Uno и 1602A.
Для того чтобы можно было измерять напряжение более 5V, вернее, более напряжения питания микроконтроллера, потому что реальное напряжение на выходе 5-вольтового стабилизатора на плате ARDUINO UNO может отличаться от 5V, и обычно немного ниже, нужно на входе применить обычные резистивные делители.
Здесь это делители напряжения на резисторах R1, R3 и R2, R4. А как быть, если напряжение нужно измерить меньше нуля? В этом случае есть только один выход из положения, - это поднять уровень входного нуля. Идеально, нужно на половину напряжения питания, то есть, до 2,5V. При этом, к напряжению на входе будет прибавляться данные 2,5V.
Затем, программно это напряжение просто вычитать из измеряемого. Но, это потребует необходимости дополнительного источника данного напряжения. В принципе, это не сложно сделать, но есть и более простое решение.
Помимо стабилизатора напряжения 5V на плате ARDUINO UNO есть источник и напряжения 3,ЗV. Вот его и можно использовать как «виртуальный нуль» для входа.
Изменения в схеме видны на рисунке 1. По сравнению с первым вариантом входной «нуль» просто переставлен с общего нуля на источник +З.ЗV. Поэтому, когда входное напряжение положительное, на входе оно более 3,ЗV (но не более 5V - это верхний предел измерения), а когда отрицательное - менее 3,ЗV (но не менее ОV - это нижний предел измерения).
Увеличение пределов измерения (по модулю) достигается резистивным делителем, а индикация фактического входного напряжения, поступающего на Х2 и ХЗ, путем программного вычитания из напряжения на входах микроконтроллера величины в 3,ЗV.
Программа приведена в таблице 1. Это видно в строках:
volt=(vout*5.0/1024.0-3.3)/0.048 ;
voltl=(voutl*5.0/1024.0-3.3)/0.048;
Число 3.3 - это как раз данное напряжение «виртуального нуля» входа.
В этих строках число 5.0 - это напряжение на выходе стабилизатора платы ARDUINO UNO. В идеале должно быть 5V, но для точной работы вольтметра это напряжение нужно предварительно измерить. Подключите источник питания и измерьте достаточно точным вольтметром напряжение +5V на разъеме POWER платы.
Что будет, то и вводите в эти строки вместо 5.0, То же самое касается и напряжения +3.3V, - его нужно измерить на разъеме платы, потому что фактически оно может несколько отличаться от 3,ЗV. Например, если «5V» будет на самом деле 4.85V, а «3,ЗV» будет на самом деле 3,32V строки будут выглядеть так:
volt=(vout*4.85/1024.0-3.32)/0.048;
voltl=(voutl*4.85/1024.0-3.32)/0.048;
На следующем этапе нужно будет измерить фактические сопротивления резисторов R1-R4 и определить коэффициенты К (указаны 0.048) для этих строк по формулам:
К1 = R3 / (R1+R3) и К2 = R4 / (R2+R4)
Допустим, К1 = 0.046, а К2 = 0.051, так и пишем:
volt=(vout*4.85/1024.0-3.32)/0.046;
voltl=(voutl*4.85/1024.0-3.32)/0.051;
Таким образом, в текст программы нужно внести изменения соответственно фактическому напряжению на выходе 5-воль-тового и 3,3-вольтового стабилизаторов платы ARDUINO UNO, и согласно фактическим коэффициентам деления резистивных делителей.
После этого прибор будет работать точно, и никакого налаживания или калибровки не потребует. При измерении отрицательного напряжения на ЖК-индикаторе в соответствующей строке перед величиной напряжения будет знак «минус». При измерении положительного напряжения - знака нет.
Изменив коэффициенты деления резистивных делителей (и, соответственно, коэффициенты «К») можно сделать другие пределы измерения, и совсем не обязательно одинаковые для обоих входов.
Хочу напомнить, что к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А. Питается ЖК-индикатор от стабилизатора напряжения 5V, имеющегося на плате стабилизатора напряжения 5V.
Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления. Такие подпрограммы называются «библиотеками», и в программном комплекте для ARDUINO UNO есть много разных «библиотек». Для работы с ЖК-индикатором на основе HD44780 нужна библиотека LiquidCrystal. Поэтому программа (таблица 1) начинается с загрузки этой библиотеки:
Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-инди-катором. Я выбрал порты с D2 по D7. Можно выбрать другие. Эти порты назначены строкой:
LiquidCrystal led(2, 3, 4, 5, 6, 7);
После чего, программа переходит собственно к работе вольтметра.
Каравкин В. РК-06-17.
Литература: 1. Каравкин В. - Двойной вольтметр на ARDUINO UNO. РК-01-17.