- Простой вольтметр на Arduino Uno
- Необходимые компоненты
- Схема делителя напряжения
- Работа схемы
- Исходный код программы для Arduino
- Видео, демонстрирующее работу схемы
- Как сделать индикатор уровня воды с помощью Arduino
- Когда может пригодиться?
- Как работает индикатор уровня воды Arduino?
- Комплектующие
- Схема соединений
- Скетч для Ардуино
- Ультразвуковой датчик и водный резервуар
- Arduino и динамические индикаторы
- Индикатор уровня воды c помощью Arduino Nano
- Шаг 1. Инструменты и компоненты
- Шаг 2. Начало работы с HC-SR04
- Шаг 3. Подключение ЖК-дисплея
- Шаг 4. Код (скетч)
- Шаг 5. Результат
Простой вольтметр на Arduino Uno
В данной статье мы рассмотрим создание на основы платы Arduino Uno и делителя напряжения простого цифрового вольтметра, который будет отображать измеренное значение напряжения на экране жидкокристаллического (ЖК) дисплея 16×2.
Плата Arduino имеет несколько аналоговых входов, к которым внутри платы подсоединены встроенные аналогово-цифровые преобразователи (АЦП). АЦП платы Arduino имеют разрядность 10 бит, поэтому значения на их выходах будут лежать в диапазоне от 0 до 1023. Мы можем считывать эти значения в программе, используя функцию analogRead() . Таким образом, если вы знаете опорное напряжение (reference voltage) АЦП, то вы легко можете рассчитать аналоговое напряжение, присутствующее на входе АЦП. Более подробно об аналогово-цифровом преобразовании в плате Arduino вы можете прочитать в этой статье.
Для измерения напряжения в нашем проекте цифрового вольтметра мы также будем использовать делитель напряжения. Измеренное значение напряжения мы будем показывать на экране ЖК дисплея 16×2 и выводить в окне монитора последовательной связи (Serial Monitor) Arduino IDE. Правильность измеренного значения напряжения мы будем проверять с помощью мультиметра.
Необходимые компоненты
Плата Arduino Uno
ЖК дисплей 16х2
Резистор 100 кОм
Резистор 10 кОм
Потенциометр 10 кОм
Макетная плата
Соединительные провода
Схема делителя напряжения
Делитель напряжения представляет собой схему из двух резисторов, показанную на следующем рисунке.
В нашем примере резисторы R1 и R2 имеют номиналы 10 кОм и 100 кОм. Средняя точка делителя напряжения используется для подачи сигнала на аналоговый вход платы Arduino. Напряжение, падающее на резисторе R2 (Vout), называется напряжением на выходе делителя напряжения. Оно может быть рассчитано по следующей формуле:
Vout = Vin (R2/R1+R2)
То есть напряжение на выходе делителя прямо пропорционально напряжению на его входе и отношению сопротивлений резисторов R1 и R2.
Используя приведенную формулу в коде программы для Arduino мы легко можем определить напряжение на входе делителя. Максимальное напряжение на входе (контактах) платы Arduino составляет 5 В, поэтому при используемых нами номиналах резисторов (их отношение составляет 100:10) мы с помощью нашего вольтметра сможем измерять напряжения до 55 В.
Работа схемы
Схема цифрового вольтметра на основе платы Arduino представлена на следующем рисунке.
ЖК-дисплей подключен в 4-битном режиме. Его контакты DB4, DB5, DB6, DB7, RS и EN непосредственно подключены к контактам D4, D5, D6, D7, D8, D9 платы Arduino Uno.
Средняя точка делителя напряжения на резисторах R1 и R2, подключена к аналоговому контакту A0 платы Arduino. Остальные два конца делителя напряжения подключаются к источнику измеряемого напряжения и корпусу (земле).
Исходный код программы для Arduino
Основную часть кода программы составляет преобразование и отображение входного напряжения в отображаемое выходное напряжение с помощью приведенного выше уравнения Vout = Vin (R2/R1+R2). Как упоминалось ранее, выходное значение АЦП Arduino может варьироваться в диапазоне от 0 до 1023, а максимальное входное напряжение Arduino составляет 5 В, поэтому нам нужно умножить значение на выходе АЦП контакта A0 на 5/1024, чтобы рассчитать входное напряжение (на контакте A0).
void loop()
<
int analogvalue = analogRead(A0);
temp = (analogvalue * 5.0) / 1024.0; // формула для конвертирования значения напряжения
input_volt = temp / (r2/(r1+r2));
Мы будем отображать измеренное значение напряжение на экране ЖК-дисплея с помощью функции lcd.print и в окне монитора последовательной связи с помощью функции Serial.println .
Serial.print(«v= «); // выводим значение напряжения в окно монитора последовательной связи
Serial.println(input_volt);
lcd.setCursor(0, 1);
lcd.print(«Voltage= «); // выводим значение напряжения на экран ЖК дисплея
lcd.print(input_voltage);
Далее представлен полный текст программы.
#include
// библиотека для работы с ЖК дисплеем
LiquidCrystal lcd( 4, 5, 6, 7,8 ,9 ); // контакты, к которым подключен ЖК дисплей
float input_volt = 0.0;
float temp=0.0;
float r1=10000.0; //сопротивление резистора r1
float r2=100000.0; // сопротивление резистора r2
void setup()
<
Serial.begin(9600); // инициализируем последовательный порт связи для передачи на скорости 9600 бод/с
lcd.begin(16, 2); // устанавливаем число столбцов и строк используемого нами ЖК дисплея
lcd.print(«DC DIGI VOLTMETER»);
>
void loop()
<
int analogvalue = analogRead(A0);
temp = (analogvalue * 5.0) / 1024.0; // формула для конвертирования значения напряжения
input_volt = temp / (r2/(r1+r2));
if (input_volt // выводим значение напряжения в окно монитора последовательной связи
Serial.println(input_volt);
lcd.setCursor(0, 1);
lcd.print(«Voltage= «); // выводим значение напряжения на экран ЖК дисплея
lcd.print(input_volt);
delay(300);
>
Видео, демонстрирующее работу схемы
Источник
Как сделать индикатор уровня воды с помощью Arduino
Используем плату Ардуино и ультразвуковой модуль для создания своими руками проекта по определению уровня воды в баке.
Когда может пригодиться?
Представим ситуацию, когда у вас на дачном участке есть душ, основу которого составляет бак с водой, который наполняется либо через насос либо дождевой водой.
Часто узнать количество воды в резервуаре может быть утомительной задачей. Обычно вы поднимаетесь по лестнице и проверяете уровень вручную или вы услышите что вода переполняется сверху.
В наши дни появилось много разных электронных индикаторов уровня воды, но они часто имеют высокую цену и обычно сложны в установке. Большинство доступных систем используют электроды или поплавковые переключатели, которые могут быть головной болью в долгосрочной перспективе.
Мы решим эту задачу с совершенно другим подходом к знанию уровня воды — с использованием ультразвукового модуля и Ардуино. Преимущество этого метода заключается в том, что он бесконтактный, поэтому такие проблемы, как коррозия электродов, не будут влиять на эту систему. Кроме того, этот индикатор уровня воды Arduino намного проще устанавливать, чем обычные системы.
Как работает индикатор уровня воды Arduino?
Этот индикатор уровня воды Ардуино использует ультразвуковой датчик или, по-другому, Ping датчик для определения уровня воды в баке. Датчик Ping измеряет расстояние, используя гидролокатор.
Из аппарата передается ультразвуковой импульс (значительно выше человеческого слуха), а расстояние до цели определяется путем измерения времени, необходимого для возврата эха. На выходе Ping датчика импульс переменной ширины, который соответствует расстоянию до цели. Затем он подается в микроконтроллер, который определяет уровень воды и отображает его через ряд светодиодов.
Этот проект может быть реализован на одной из плат Arduino, если микроконтроллером платы является непосредственно микроконтроллер ATmega 328.
Комплектующие
По традиции переходим к комплектующим, набор деталей довольно большой:
1 | Микроконтроллер ATMega328P или плата Arduino |
1 | HC-SR04 ультразвуковой модуль (также известный как датчик PING) |
1 | 10K резистор |
1 | Кристалл 16 МГц |
2 | 22pf дисковые конденсаторы |
Провода-перемычки | |
1 | Регулятор LM7805 5V |
1 | 9В батарея и разъем |
1 | Электролитический конденсатор 10uF |
1 | Макетная плата (или печатная плата) |
1 | Инструмент для зачистки проводов |
Схема соединений
Все детали нужно собрать соответственно диаграмме выше. Сразу заметим, что в данной схеме на макетную плату размещается микроконтроллер ATmega328. Если вы используете плату Arduino, вы можете просто установить соединения для светодиодов и ультразвукового датчика.
Скетч для Ардуино
Скопируйте прилагаемый ниже скетч в Arduino IDE и найдите строку «int d = 18;» и измените «18» на глубину вашего резервуара в сантиметрах.
Загрузите код для индикатора уровня воды Arduino непосредственно на плату Arduino или в микроконтроллер ATMega328P.
Ультразвуковой датчик и водный резервуар
Закрепите датчик так, чтобы он непосредственно смотрел на воду в баке. Основная плата управления со светодиодами может быть закреплена внутри дома в любом удобном положении. Любые многожильные кабели (Ethernet-кабель) могут использоваться для соединения датчика и остальной части схемы.
Теперь просто подключите аккумулятор (питание) и ваш индикатор уровня воды Ардуино готов к использованию.
Источник
Arduino и динамические индикаторы
Недавно столкнулся с тем, что нужный мне датчик для Arduino уже прибыл из Китая, а цифровой индикатор задержался. И неизвестно, сколько еще он пробудет в пути. Немного поразмыслив и вспомнив, сколько индикаторов на старых ненужных платах лежит в моей кладовке, было принято решение выпаять и задействовать один из них. Беды ничего не предвещало – план действий был простой и обычно безотказный: выпаять детальку, посмотреть маркировку, вбить ее в гугл, прочитать документацию и, собственно, подключить на макетной плате для теста. Но все, кроме первого пункта, оказалось не так просто, как я предполагал.
В качестве подопытного был выбран образец из блока управления микроволновкой. Индикатор был 4-х-разрядный, по работе микроволновки помню, что светился он приятным зеленым светом и имел посередине точку (даже две, как потом оказалось!). Т.е. устраивал меня по функциональности и выглядел довольно стильно. На его переднем крае я прочитал марку: MD-EG80EPE. Отлично, выпаиваем! Отпаяв индикатор, я понял, что меня ждала еще одна неожиданность: он всеми ногами четко вставал в макетную плату. Но на этом приятные бонусы закончились. Найти разводку этого устройства в гугле у меня не получилось – максимум ссылки на продажи блоков управления микроволновками, где он использовался. Немного загрустив, переключился на другие индикаторы, но результат поиска даташитов к ним оказался схожим, вне зависимости от типа устройства и где оно использовалось. Загрустив совсем, вернулся к выпаянной штуковине, взял в руки блок питания с килоомным ограничительным резистором на выходе и начал попарно перебирать контакты индикатора. Все оказалось просто: 5 левых верхних контактов отвечали за выбор позиции цифры (или точек посередине, + питания), остальные верхние – за выбор сегмента (- питания). Два нижних контакта не использовались:
Что ж, линии выбора сегмента подключим – к D1-D7 и A0, а выбор позиции – к D8-D12 ардуинки. Сказано – сделано. Была написана функция outDigit (тестовый код будет целиком ниже) для вывода нужных мне символов. Каждый отдельный символ выводился отлично, но неудача меня постигла при попытке вывода сразу нескольких символов: они выводились одинаковыми, поскольку выводы выбора сегмента были общими. Тогда я задумался о предназначении двух нижних выводов: может быть они выбирают и фиксируют набор выбранных сегментов при подаче на них значений от нуля до трех. Но нет, чуда не случилось. Но ведь он работал в микроволновке, с выводом разных 4-х-разрядных значений. Как?! Да все гениальное просто – как телевизор, покадрово. Сначала выводим первую цифру, очищаем, потом вторую, очищаем и т.д. С высокой частотой. Так и сделал. Работает отлично. Датчик подключил.
В заключение хочу сказать, что почти все остальные индикаторы, которые у меня есть, работают на том же принципе, только ножки другие. В общем, не выбрасывайте их, они подключаются за пару минут с мультиметром в режиме прозвона или простым пробником (5+ вольт с резистором). Еще немного хочу добавить по коду: если цифра 1 светится ярче, чем, например, 8, то в выводе цифр надо добавить микросекундные задержки, пропорциональные количеству горящих сегментов. Для моего индикатора это не принципиально, но для некоторых старых моделей это не лишено смысла. Поскольку экран индикатора должен обновляться динамически, то функцию delay стоит заменять на функцию outNumber, где точность по времени не сильно критична. Либо повесить отображение на прерывание, статей на эту тему много.
Источник
Индикатор уровня воды c помощью Arduino Nano
Урок показывает как с помощью Arduino Nano сделать устройство, которое измеряет уровень воды и отображает его на ЖК-экране.
Arduino Nano — это небольшая плата, полная и дружественная макетной плате, основанная на ATmega328 (Arduino Nano 3.x). Она имеет более или менее ту же функциональность что и Arduino Duemilanove, но в другой комплектации.
Проект основан на Arduino Nano и взаимодействует с другими датчиками. Это руководство показывает, как с помощью Arduino Nano сделать устройство, которое измеряет уровень воды и отображает его на ЖК-экране. Поэтому в этом проекте я буду использовать ультразвуковой модуль HC-SR04 для измерения уровня воды и ЖК-дисплея I2C, чтобы увидеть уровень воды в см.
Шаг 1. Инструменты и компоненты
Для этого проекта нам понадобятся:
- Arduino Nano
- HC-SR04 Ultrasonic Модуль
- LCD-дисплей
- LCD i2c
- Bread Board (макетная плата)
- Провода
- Контейнер с водой
Шаг 2. Начало работы с HC-SR04
HC-SR04 или ультразвуковой датчик — это электронное устройство, которое работает по принципу передачи и отражения. Этот датчик имеет два контакта, названных как контакты TRIG и ECHO.
Функция вывода ECHO состоит в том, чтобы излучать волны на канал. Эти волны проходят через среду как волна и отражаются назад, когда она попадает на объект или препятствие по пути распространения. Время, затраченное на излучение и отражение, рассчитывается и используя это значение мы определяем расстояние приближающегося к нам препятствия.
Ультразвуковой датчик подключается к Nano следующим образом:
- Контакт TRIG подключен к цифровому выводу Nano 9
- Штырь ECHO подключен к цифровому выводу Nano 10
- Вывод VCC подключается к положительному макетной платы
- Штырь GND подключен к отрицательному макетной платы
Шаг 3. Подключение ЖК-дисплея
16×2 ЖК-дисплей Arduino сначала припаян к I2C. Я использую драйвер I2C просто для устранения беспорядочного и большого количества перемычек, что делает возможным подключение большего количества датчиков и устройств вывода. I2c хватает 4 выводов, чтобы получить функцию ЖК-дисплея, когда традиционный ЖК-дисплей имеет 12 контактов. Краткое описание контактов I2C ниже.
- Линия данных (SDA): эта линия или линия передачи I2C используется для передачи данных от передатчика к приемнику. Символ, который должен отображаться на ЖК-дисплее, передается по этой линии.
- Линия синхронизации (SCL): это контрольная линия I2C, которая определяет скорость передачи символов, как импульс синхронизации в традиционных триггерах.
I2C подключаются следующим образом:
- Штырь SDA подключен к аналоговому выводу A5
- Контакт SCL подключается к аналоговому выводу A4
- Вывод VCC подключается к положительному макетной платы
- GND-контакт подключен к отрицательному макетной платы
Мы закончили с оборудованием, давайте теперь перейдем к коду.
Шаг 4. Код (скетч)
Код довольно прост. Кроме того, мы теперь добавляем еще несколько библиотек для работы ЖК-дисплея I2C — LiquidCrystal_I2C, Wire.
Убедитесь, что вы ввели правильный адрес I2C в коде, адрес по умолчанию для I2C равен 0x3f.
Скопируйте и вставьте код ниже в Arduino IDE и выберите Arduino Nano и правильный порт, затем нажмите «Загрузить».
Шаг 5. Результат
И после того, как вы завершили проект, вы должны увидеть, как Arduino отображает уровень воды на ЖК-дисплее. Вы можете добавить дополнительный зуммер, чтобы вы знали, что уровень воды достигнет определенного порога.
Источник