Добрый день! В прошлых статьях мы уже разобрались как адресно собирать показания с нескольких датчиков температуры и выводить их на дисплей. Сегодня попробуем найти полезное применение полученным навыкам и разработаем трёхзонный термометр. К примеру это будет улица, дом и балкон, ну или любые нужные вам зоны. Проект можно масштабировать, ведь датчиков может быть и больше. Но просто показ температур мы делали и в прошлой статье, сегодня же усложним проект вычислениями и показом пиковых температур в каждой зоне. Это очень полезная функция, например когда с утра нужно узнать была ли ночью минусовая температура на улице или на балконе. Добавим в проект две кнопки, первая будет переключать показ данных на дисплее, а вторая будет сбрасывать показания пиковых температур на текущие. Также предусмотрим автоматический сброс пиковых температур раз в сутки.
Комплектующие:
- аналог arduino nano
- OLED-дисплей SSD1306
- 3 датчика DS18B20
- резистор 4,7 кОм
- 2 резистора 10 кОМ
- 2 кнопки
- макетная плата
Подробности о работе с дисплеем, а также все необходимые библиотеки мы разбирали здесь. Дисплей, конечно, маловат для такого проекта, но другого под рукой нет и придется как то ужаться. Все о работе датчиков DS18B20 по шине 1-Wire, нужные библиотеки и скетч для считывания кода датчика мы разбирали здесь.
Дисплей подключаем к А4 и А5, так как только эти выводы могут работать с I2C и запитываем его от 3,3 В. Кнопки подключаем по схеме выше к D2 и D3, так как только эти выводы работают с прерываниями на arduino nano, но об этом позже. Датчики можно подключить к любому оставшемуся пину, я выбрал D4 и запитываем их от 5В, не забываем соединить +5В и информационный выход резистором 4,7 кОм. У меня получилась такая временная конструкция:
При включении, по умолчанию, на дисплей будет выводится текущая температура во всех трех зонах и названия этих зон. При нажатии первой кнопки будет происходить смена информации на более подробную по каждой зоне ( её название, текущая температура с точностью одного знака после запятой, минимальная и максимальная температура за период в целочисленном виде). Нажатие второй кнопки будет обнулять период за который фиксируется максимальная и минимальная температура, также предусмотрен автоматическое обнуление через сутки после включения или нажатия второй кнопки. В первом варианте скетча работа с кнопками была реализована стандартным способом, но так как скетч нагружен сбором информации, её обработкой и выводом, то выполнялся довольно долго и кнопки работали не совсем так как хотелось. Быстрое нажатие не переключало режимы, нужно было немного подержать кнопку, это связано с долгой работой скетча и не совпадением времени физического нажатия и программного опроса кнопки. Пропала даже необходимость задержки для устранения дребезга контактов кнопки. Получалось, что все работает, но не комфортно. Чтобы это устранить в окончательном варианте скетча добавим опрос первой кнопки в прерывании и именно поэтому нужно было подключать её к D2 или D3. Вторую кнопку решено было оставить как есть, срабатывание при удержании нам на руку, это будет как защита от случайного нажатия. Далее сам скетч с подробным описанием внутри:
Далее загружаем скетч, для проверки возьмем стакан горячей воды и стакан холодной и вот что у нас получилось:
Режимы зациклены и переключаются по кругу, удержание второй кнопки сбрасывает минимумы и максимумы до текущих показаний. На этом пока все, осталось только спаять это всё, собрать в корпус и вывести датчики в нужные места, но это совсем другая история.
Если статья была вам полезна ставьте лайк, подписывайтесь на мой канал, ведь впереди еще много интересного!
#diy #arduino #ардуино #электроника для начинающих #программирование #электротехника #своими руками #arduino nano #микроконтроллеры #технологии