Найти в Дзене
DGO шпаргалка

"ТЕРМУРМЕТР". К155ИД3 выходит в интернет! Часть 1. Прототип.

Привет! В недавней статье я рассматривал микросхему К155ИД3 - было весело, но не особенно применимо в современных реалиях. Но что если подключить к ней ESP32? И да, в названии написано, что выходит в интернет - на самом деле выходит, но не в этот раз. В следующей части действительно подключим термометр ...термурметр, котопогодник, котометр... к интернету. Есть, правда, одна загвоздка. ESP32 питается от напряжения 3,3В, а К155ИД3 от пяти вольт. Но так ли это важно? - на самом деле нет! Микроконтроллер просто будет запитан от своего LDO, а дешифратору для уровня логической единицы достаточно напряжения в 2,4В. Обойдемся без преобразователей уровня! Ещё немаловажный момент - ТТЛ микросхемы на входах потребляют значительный ток. В нашем случае 16 миллиампер. Хватит ли ESP32? Спецификация утверждает, что так же да. Каждый GPIO способен отдать 40 миллиампер. Сделать забавный линейный термометр, использовав дешифратор для 16 пунктов температурных, повесить на шину I2C датчик температуры и
Оглавление

Привет! В недавней статье я рассматривал микросхему К155ИД3 - было весело, но не особенно применимо в современных реалиях. Но что если подключить к ней ESP32?

И да, в названии написано, что выходит в интернет - на самом деле выходит, но не в этот раз. В следующей части действительно подключим термометр ...термурметр, котопогодник, котометр... к интернету.

Есть, правда, одна загвоздка. ESP32 питается от напряжения 3,3В, а К155ИД3 от пяти вольт. Но так ли это важно? - на самом деле нет! Микроконтроллер просто будет запитан от своего LDO, а дешифратору для уровня логической единицы достаточно напряжения в 2,4В. Обойдемся без преобразователей уровня!

Ещё немаловажный момент - ТТЛ микросхемы на входах потребляют значительный ток. В нашем случае 16 миллиампер. Хватит ли ESP32? Спецификация утверждает, что так же да. Каждый GPIO способен отдать 40 миллиампер.

Что я придумал?

Сделать забавный линейный термометр, использовав дешифратор для 16 пунктов температурных, повесить на шину I2C датчик температуры и влажности GXHT30, а оставшимися выводами расширить шкалу. Засунуть это всё в небольшой корпус, питающийся от USB и напечатать на пленке черно белого кота с градусником в лапках. Возможно в дальнейшем использовать две микросхемы К155ИД3 для того, чтобы "градусов" побольше влезло. Так, может быть, и на уличную версию наскребется. Разброс там значительно больше, чем дома и пары десятков светодиодов не хватит. А там и солнечную батарею приделать можно будет и на народный мониторинг показания выкладывать.

Что по выводам ESP32?

Без ограничений и не особо задумываясь на микроконтроллере можно использовать 12 GPIO выводов. Можно и больше, но нужно учитывать некоторые нюансы. Так что обойдемся этими GPIO:

16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33

UART для прошивки

GPIO1 TXD0
GPIO3 RXD0

Сервис

GPIO0 переход в режим загрузки
EN перезагрузка

Датчик GXHT30

GPIO21 SDA
GPIO22 SCL

К155ИД3

ЗЕМЛЯ Е1 - согласно таблице истинности для отображения оба контакта должны быть подтянуты к земле. Управлять можно только одним!
GPIO33 E0 - этим
GPIO32 A3
GPIO27 A2
GPIO26 A1
GPIO25 A0

Светодиоды

GPIO23
GPIO19
GPIO18
GPIO17

Статус отображения Температура/влажность

GPIO16 - два светодиода на каждое из активных состояний порта

Ну и сделаем переключатель отображения температура/влажность

GPIO34 - возможно использовать только как вход. В основном списке не значится.

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

Сделано в KiCAD.
Сделано в KiCAD.

Итого у нас 20 светодиодов в шкале! Хватит для отображения температуры дома. От 12 до 32 градусов. И влажности с шагом в 5 процентов. И указатель на нужную шкалу. Там два светодиода на одном пине. Светится либо один, либо другой. Отлично!

Самое время нагенерировать кота с термометром!

Попросил я нейроночку нарисовать кота с градусником в полный рост.

Вроде бы как я хотел, но что-то не то...

Подправлю вручную.
Подправлю вручную.
Ну и вышло как-то так
Ну и вышло как-то так

Кот получился подходящий. Рисуем, печатаем, паяем.

Дальше я добавил рамку для того, чтобы точнее измерить, распечатал в нужном масштабе, измерил штангенциркулем, вставил картинку в САПР, смасштабировал и начал рисовать посадочные места для светодиодов и сам корпус.

Пока корпус печатался спаял всё на макетке.

Тут ещё не совсем всё, но почти.
Тут ещё не совсем всё, но почти.

Запихал всё это дело в корпус.

Мой любимый монтаж в комке)
Мой любимый монтаж в комке)

Самое время программировать!

Интересного на самом деле не много. Разве что функция включения нужного светодиода. Вводим номер - светик светит.

void SHOW_LED(int LED) {

Те, что просто к esp32 просто сравниваем без премудростей.

if(LED == 17) digitalWrite(PIN_LED17, LOW); else digitalWrite(PIN_LED17, HIGH);
if(LED == 18) digitalWrite(PIN_LED18, LOW); else digitalWrite(PIN_LED18, HIGH);
if(LED == 19) digitalWrite(PIN_LED19, LOW); else digitalWrite(PIN_LED19, HIGH);
if(LED == 20) digitalWrite(PIN_LED20, LOW); else digitalWrite(PIN_LED20, HIGH);

Потом смотрим нужно ли включать дешифратор

if(LED == 0 || LED > 16) {
digitalWrite(PIN_E0, HIGH); // Тушим всё
return;
}

Если нужно - включаем.

digitalWrite(PIN_E0, LOW); // Включаем дешифратор

Вот тут я припаял светодиоды не в ту сторону и пришлось сделать костыль, но макет же.

int value = 16 - LED; // Инвертируем

И теперь преобразуем десятичное число в двоичное для четырех разрядов. Выглядит пугающе для ардуинщика. Ловко можно было бы, конечно, обойтись шеснадцатью условиями =), но эта запись значительно короче и позволяет потренироваль побитовые операции. Например для первого бита, если десятичное число, например, 5(0101):* 0101 & 0001 = 0001. Результат = 1 (истина, HIGH). Для старших битов, соответственно, используем сдвиг. Если кому-то нужно более подробно, можно посвятить статью битовым операциям. Но их очень много в этих ваших интернетах и без меня.

digitalWrite(PIN_A0, value & 1);
digitalWrite(PIN_A1, (value >> 1) & 1);
digitalWrite(PIN_A2, (value >> 2) & 1);
digitalWrite(PIN_A3, (value >> 3) & 1);
}

Тесты!

Смотрим на температуру. И бардак на столе немного творческого беспорядка.

Светодиод над столбиком с температурой. Тепло.
Светодиод над столбиком с температурой. Тепло.

Жмем кнопку и переключаемся на отображение влажности.

Светодиод над столбиком влажности. И сухо.
Светодиод над столбиком влажности. И сухо.

Тепло и сухо. Замечательно!

Заключение.

На этом первая часть заканчивается. Концепт оказался рабочим и выглядит довольно мило. Но впереди ещё много работы! Нужно сделать две шкалы, чтобы и температура и влажность показывались всегда, а не переключались кнопкой - при помощи динамической индикации, естественно. Нужно добавить светодиодов и сделать шкалу более равномерной. Собрать всё более компактно и на печатной плате, а то надежность конструкции оставляет желать лучшего. Выйти, наконец-то в интернет и получать данные о микроклимате дома в сообщения вконтакте телефон по запросу. Ну и поделиться исходниками с вами, если вдруг, кому-то понравилась идея.

На этом пока всё. Всем спасибо за просмотр! Если есть предложения по конструкции - обязательно пишите. Хорошие идеи реализуем! До свидания!

П.С. Если вдруг кому-то уже нужны исходники - могу поделиться в телеграм чате канала.