Часы на больших индикаторах, "ШО, ОПЯТЬ?!"

lunamid

✩✩✩✩✩✩✩
23 Янв 2022
8
0
Привет.

Извините за многабукав, по-другому не умею.

Как уже принято шутить в сообществе «Что не делай на Ардуинке, рано или поздно всё равно получатся часы», вот и я решил не идти против данных всевышних законов и решил реализовать свой проект. Хотя для меня важнее не результат и процесс. Ну и конечно, когда речь заходит про часы, то лично у меня всегда в голове фраза волка из мультика Жил-был пёс - "Шо, опять?" :)

Сейчас нахожусь в стадии самообучения и разработки и решил, что полезным было бы выложить свою идею в сообществе, чтобы умные люди подсказали, где я могу быть не прав или предложили дополнить проект интересными мыслями. Чтобы потом не было диких фейлов и пришлось сильно переделывать.

Так как я не любитель сидеть на форумах, а самоизоляция дала понять что я оказывается дикий интроверт, решил, что это должен быть какой-то один ресурс, а так как подписан на канал и активно пользуюсь библиотеками «Гайвера», то посчитал что тут мне как раз и помогут.

Сразу предупреждаю, что в плане ардуинки, схемотехники, электроники, программирования и разработки проектов я полный дилетант, поэтому прошу быть снисходительными и не удивляться глупым вопросам из серии «зачем подключать светодиод через резистор?», если вдруг начнётся активная переписка.



ИДЕЯ

На дачном участке установлен летний душ, сверху бочка. На летний душ установить часы на больших семисегментных индикаторах, чтобы аж с полей было время видно😊. Ардуинка (NodeMCU) будет брать с датчиков уровень и температуру воды в бочке, температуру воздуха, температуру в доме (по радиоканалу), давление и передавать это в вебморду и дублировать на малый 4 разрядный индикатор. + на участке есть освещение включаемое пультами 433 МГц. С вебморды так же иметь возможность включать и выключать свет.



ФЛЕШБЭКИ

Два года назад уже предпринималась попытка сделать что-то подобное, но подход был не правильный, всё делалось в попыхах и на коленке и долго не прожило. Но один видосик сохранился, который делал для друга -



ЖЕЛЕЗКИ

Сердцем всего будет NodeMCU V3

Шилд HW-389 – чисто для удобства использования пинов

Датчик температуры ds18b20 – герметичный для измерения температуры воды в бочке

Барометр BMP280 – Именно такой, так как влажность мне вообще не упёрлась, будет давать давление и температуру воздуха

Ультразвуковой датчик HC-SR04 для фиксации уровня воды в бочке

4 больших семисегментных индикатора по 5 диодов на сегмент и 1 на точку

Четырехразрядный индикатор времени на TM1637

DS3231 – RTC – Подстраховка если не придёт время с Инета

Передатчик на 433 МГц

Ардуинка Nano – для дополнительных подключений, так как пинов на NodeMCU по ходу нет

NRF24L01 – для взаимодействия с другими датчиками на 2,4 ГГц



ТЕКУЩАЯ ХОТЕЛКА

Большие часики устанавливаются наверх летнего душа.

Ульразвук и температурный датчик крепятся к бочке

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

Рядом кнопка включения выключения 220. И проводок идущий на розетку, заморачиваться с солнечными батареями и аккумулятор пока не хочется.



ПРОБЛЕМА БОЛЬШИХ ЧАСОВ

Когда делал черновой проект (см. флешбэки) понял, что сдвиговый регистр SN74HC595 не может тянуть большие токи и нужно использовать транзисторные ключи. Всё было реализовано на коленке ужасным паяльником, да и паять то не умею. По итогу сейчас принято решение для каждого разряда делать отдельную плату, на которой будет регистр с smd компонетны и разъёмы для подключения, т.е. можно будет задействовать для экспериментов большое количество разрядов если захочется. Всё будет спроектировано, разведено и заказано в Китае у известных поставщиков. Сейчас же планирую плотно засесть за изучение транзисторных ключей и понимание того как найти аналог в среде smd компонентов.

Для двоеточия часов планирую использовать RGB светодиоды, управление которыми будет реализовываться ещё одним регистром SN74HC595, так у меня было в черновом проекте. Разная световая индикация будет давать мне понимание о внутренних ошибках, если таковые есть, например, что часы не получили время именно из инета и прочее, ну просто если планируется ставить диоды отдельно, то почему бы не сделать RGB, мало ли пригодиться. В старом проекте через ник шло распознавание температуры воды от температуры воздуха.



ПРОБЛЕМА С ПИНАМИ NodeMCU

Как я понял у меня есть 9 пинов D0 – D8

2 - на шину I2C, на которой у меня будет ds18b20, BMP, RTC

2 - для TM1637

2 - на ультразвук

3 - на регистр

1 – на передатчик 433 МГц

NRF24L01 поедет на SPI но всё равно получается нехватка, и тут как раз буду подрубать Ардуинку и спаривать с NodeMCU через RX TX. На ардуинку как раз пойдёт передатчик и что-то ещё если захочется добавить

Пробовалось почитать как задействовать S3 но что-то как-то не пошло и решил лишний раз не мучать NodeMCU



СКЕТЧ

Тут пока всё ровно, но что-то выкладывать нет смысла, потому что основная часть связанная с часами не реализована.

Вся разработка идёт в Arduino IDE

По сути планируется что будет отображаться время, по заданному в конфигу в определённый момент будет отображаться дата, температура воздуха, давление и снова возвращение на часики.

В конфиге можно будет отключить какое либо из отображений, вплодь до того что оставить например отображение одной только температуры.

В вебморде планируется на основной странице отображение трёх кнопок:

  • Мониторинг. Показатели со всех датчиков
  • Пульт. Управление внешними 433 МГц релюхами включения освещения
  • Настройки, то что будет попадать в конфиг, тут пока ещё всё под вопросом и сырое
Отдельная страничка для обновления NodeMCU через вебморду.

В общем уже много всего понаписал, думаю пора завершать вопросами, по которым мне возможно сможете помочь.



ВОПРОСЫ И ПРОБЛЕМЫ

  • Где лучше всего почитать или посмотреть про транзисторные ключи, их характеристики для банального управления большой нагрузкой.
  • Определившись со значениями параметров транзисторного ключа где найти номер smd транзистора, чтобы включить его в схему разработки, тупо на Чип и Дип топать?
  • Как реализовать мощность свечения на больших часах, есть ли какой-то регулятор напряжения, который управляется ардуинкой? Т.е. предположим на часики будут приходить 12 вольт и при них они будут безопасно светить практически на максимуме. А на 7 вольтах уже всё, диодный рубеж не будет реализовываться и часы не будут работать. И вот как сделать регулятор от 7 до 12 вольт, который можно управлять ардуинкой?
  • Хочу хранить файл конфига на своём FTP Серваке, как организовать к нему подключения и с чем лучше работать txt или ini файл
  • Можно ли как-то увеличить количество портов на NodeMCU
  • Есть ли какая-то простая программка где можно было бы расписать задачи и отмечать что сделано и т.д. или лучше блокнота нет ничего?
  • Как понять, что проект завершён и пора остановиться?
  • Как перестать возбуждаться когда смотришь на семисегментные индикаторы?


Всем спасибо кто дочитал до конца. Если поддержите меня добрыми советами, то буду крайне благодарен.
 

Divin

★★★✩✩✩✩
30 Янв 2021
413
184
@lunamid, Вам нужно замерять минимальный и максимальный уровень воды? Или же достаточно минимального?Можно использовать датчик влажности почвы. На даче есть интернет? Если есть - еспшка не нуждается в модуле часов. Семисегментые интикаторы легко сделать самому из адрески, экономия пинов и денег Одной есп хватит на все.
 

bort707

★★★★★★✩
21 Сен 2020
2,921
868
Если поддержите меня добрыми советами, то буду крайне благодарен.
добрый совет - отказаться от обычных светодиодов и взять адресную ленту. Выкинете их схемы кучу деталей - все эти сдвиговые регистры, транзисторы и тд. Все светодиоды управляются одним единственным пином, отпадает проблема с нехваткой портов на нодемку, яркость регулируется одно командой в коде... и тд
 

lunamid

✩✩✩✩✩✩✩
23 Янв 2022
8
0
@Divin, Добрый день. Минимум и максимум уровня воды будет замерен всего один раз, далее нехитрыми вычислениями будет выдаваться значение в процентах по заполненности бочки. Никаких реле для насоса нет. Когда бочка пустая, подключается шланг возле лейки и бочка наполняется через дырку через которую она и сливает воду. Вот и нужен датчик, чтобы понимать когда пора отключить насос, чтобы водичка не перелилась (хотя это не критично). Ну и когда уже воды осталось мало (а вот это критично).

Да, на даче интернет, но RTC именно на тот случай, если вдруг по какой-то причине NodeMCU не сможет получить время по NTP протоколу.

Соглашусь с Вами и @bort707 , адреска превосходна в этом плане, хотя никогда с ней не игрался. Видел много проектов на ней, наверно нужно будет что-то попробовать.
Но к сожалению у меня уже имеются эти сегментники и не очень хочется, чтобы они валялись без дела. Ну и оснавная причина конечно же рукожопство и плохое владение паяльником )))
 

Divin

★★★✩✩✩✩
30 Янв 2021
413
184
@lunamid, Для избежания перелива бочки электроника не обязательна, достаточно поплавкового клапана как в сливных бачках (контроль минимума и максимума воды) и его легко переделать под герметичный выключатель.

@bort707, И цена ошибки ниже. (перепаял запоротые светики и усе)
 

lunamid

✩✩✩✩✩✩✩
23 Янв 2022
8
0
@Divin, Да, я понимаю о чём Вы говорите и согласен полностью. Это я немного не правильно описал ситуацию. Бочка стоящая на крыше душевой кабины имеет сливное отверстие, которое располагается сбоку в нижней части. Далее через сантех П-образно трубы (шланг и фитинги) идут под крышу кабины на лейку и на рукомойник по соседству с кабиной. И когда вода в бочке заканчивается, то подрубается шланг в эту магистраль, нужные краны закрываются и вода поступает в бочку наполняя её. Т.е. отдельный шланга, который бы шёл на верх на поплавок и т.д. точно не будет ) И задача не просто понимать максимум и минимум, а реальное в процентах, поэтому и планируется ультразвуковой датчик )

@bort707 следующие часики наверно точно буду делать на адреске, но вначале поучусь обрабатывать дерево, чтобы можно было делать нормальную корпусяку )
 

lunamid

✩✩✩✩✩✩✩
23 Янв 2022
8
0
Столкнулся со следующей проблемой. Когда вешаю DS3231 и DS18B20 вместе на I2C то первый плохо воспринимает установку на них времени, чаще всего именно минуты страдают, прописывается ноль. Вероятность правильного прописания 25%. Иногда бывает что часовые значения в них неправильно залетают. Прописав температурному датчику адрес ситуация не исправилась. По адресации часов вроде как 0x68 но это и так дефолтом выставлено в библиотеке. Что я упускаю? Как правильно подружить их на данной шине? Пока штудирую интернеты, но мало ли вы на опыте быстро подскажете.
 

lunamid

✩✩✩✩✩✩✩
23 Янв 2022
8
0
Т.е. я и так страдаю от нехватке пинов, так теперь боли всё больше ))) Получается то что есть шина на которую можно навешать 128 поддерживаемых I2C устройств идёт по бороде?
 

poty

★★★★★★✩
19 Фев 2020
3,028
903

@lunamid, I2C позволяет "навешать" много устройств, 1Wire - тоже, но это - разные шины. Недостаток пинов - применяйте другой МП или два менее "мощных".
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
Получается то что есть шина на которую можно навешать 128 поддерживаемых I2C устройств идёт по бороде?
128 там с большой оговоркой) По некоторым источникам максимальное количество - 127, а в зависимости от стандартов - и того меньше, т.к. есть еще служебные адреса) Помимо этого есть еще предел по максимально ёмкости на шине (400пФ).

И как уже написали выше, ds18b20 работает по 1-wire, туда тоже можно напихать много устройств, при том, что у тех же Dallas Semiconductor у каждого устройства свой уникальный айди (64 бита). Так что можете раскинуть несколько одинаковых датчиков и с каждого снимать показания по отдельности.

***
ПРОБЛЕМА С ПИНАМИ NodeMCU
Как я понял у меня есть 9 пинов D0 – D8
2 - на шину I2C, на которой у меня будет ds18b20, BMP, RTC
2 - для TM1637
2 - на ультразвук
3 - на регистр
1 – на передатчик 433 МГц
TM1637 можно разместить на I2C, я такой способ применял в прошивке лампы. После обращения к шине по I2C нужно будет просто переинициализировать дисплей, так что уже 2 пина экономии

Еще возможно, что передатчик на 433МГц можно посадить на один пин с ds18b20
 
Изменено:
  • Лойс +1
Реакции: poty

lunamid

✩✩✩✩✩✩✩
23 Янв 2022
8
0
Спасибо господа, я понял что спутал тёплое с мягким, почему-то думал что wire это и есть отношение к I2C, пойду учить матчасть )
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
@lunamid, Я дополнил свое сообщение выше, у вас есть вариант сэкономить 2-3 пина
 

lunamid

✩✩✩✩✩✩✩
23 Янв 2022
8
0
@Lumenjer,
Спасибо большое, при таком раскладе действительно я бы уложился по пинам.
НО:
1) Ваш проект слишком сложен для меня чтобы вычленить оттуда кусок по ТМ1637, я пока на уровне Arduino IDE и всякие там фреймворки - я слишком стар для этого )))

2) Интернеты не дают успехов в гуглении ТМ1637 и I2C, лучшее что нашёл так это фразу "Работает по двухпроводной шине по типу I2C, но не I2C" от чего стало грусненько

В общем если мне кто-то простым языком покажет как прицепить ТМ1637 к I2C, то буду премного благодарен. Ну а нет, то ничего, буду через сериал дружить NodeMCU и Nono, это тоже опыт как никак )
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
@lunamid, Вам и не нужен код из лампы, берите библиотеку и держите в голове то, что после общения с каким либо устройством по I2C вам нужно будет переинициализировать дисплей вот и все.
 

lunamid

✩✩✩✩✩✩✩
23 Янв 2022
8
0
@Lumenjer,
Это всё очень здорово на словах, но я уже в самом начале писал о своём уровне знаний.
О какой библиотеке речь? Можно прямую ссылку и пример скетча, где например 1637 инициализировано как устройство, потом мы как бы используем 3231 по I2C, а потом снова возвращаемся к 1637. Я как бы соединил и как бы 1637 у меня работает, но в 3231 ничего не получается записать, как будто из-за инициализации GPIO оно тупо отрубается и наверно тогда надо забивать на библиотеки и как-то писать всё напрямую через Wire, но опять не понятно сработает ли это, не будет ли GPIO мешать.
 

bort707

★★★★★★✩
21 Сен 2020
2,921
868
В контроллерах авр у пинов нет специального режима для i2c, там все через стандартное обращение к gpio реализовано.
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
@lunamid, Для TM1637 можете брать эту библиотеку из лампы, у нее неблокирующие анимации
Для RTC тоже можете брать оттуда, я ее правил для работы с ESP, она универсальная, поддерживает несколько модулей (в том числе DS3231)

Инициализацией имеются ввиду методы
tm1637.init();
tm1637.begin();


Вот пример, устанавливаем время RTC, а потом реинициализируем дисплей

C++:
        settime(t->tm_sec, t->tm_min, t->tm_hour, t->tm_mday, t->tm_mon + 1, t->tm_year - 100);
        LOG(printf_P, PSTR("Sec %d min %d hour %d day %d mon %d year %d \n"), t->tm_sec, t->tm_min, t->tm_hour, t->tm_mday, t->tm_mon + 1, t->tm_year - 100);
        LOG(printf_P, PSTR("RTC setted %s \n"), rtc.gettime("Y-m-dTH:i:s"));

        tm1637.tm_setup();  // реинициализация дисплея, внутри tm_setup() как раз находятся init() и begin()
В самой прошивке лампы файлы, которые вам нужны для ознакомления
В папке FireLamp_JeeUI/include/ - rtc.h и tm.h
В папке FireLamp_JeeUI/include/ - rtc.cpp и tm.cpp

Вам просто нужно понять концепт, после общения по I2C - нужно повторно настроить дисплей (вызвать методы выше)