Всем привет, Друзья!
Да простит меня Игорь, что замахнулся на святое, но карантин даёт о себе знать. От скуки решил сделать цифровой датчик давления для РОСЫ с реакцией на превышение порога давления + термометр на базе DS18B20. Рабочее название –
DDT (Датчик Давления, Термометр). Значение давления и температуры выводится циклически с интервалом 3 секунды.
Возможности:1) Показывает давление от 0 до 400 мм. водяного столба . Точность рабочего диапазона 200-400 мм. вод. столба +/- 0,7 %. Датчик опрашивается каждые 6 секунд 50 раз, потом из массива результатов выводится усредненное медианное значение приведенное к единицам мм.вод. столба.
2) Показывает, что произошло с давлением по отношению к предыдущему значению. В первой ячейке дисплея выводится либо верхняя черточка (повысилось) либо нижняя черточка (понизилось) либо верхняя и нижняя одновременно (давление без изменений).
3) При превышении порога 400 мм. вод. столба срабатывают выходы реле, которые замыкают порт «ПОТОП» на РОСЕ, останавливая таким образом нагрев. При этом на экран DDT выводится надпись “STOP”. DDT остается в таком состоянии до его перезагрузки. Для перезагрузки достаточно выключить и включить питание.
4) Показывает температуру с датчика DS18B20 в интервале 0 – 99,9 градусов Цельсия. Датчик опрашивается с интервалом 6 секунд и возвращает значение с разрешением 12 бит. Выводит значение в виде 26:5 и знак градуса. Десятичные значения температуры отделены двоеточием. Если температура ниже нуля на экране пишется “t Lo”, если больше 99.9, то выводится “t hi”.
Для сборки ДДТ необходимо:- Плата ARDUINO NANO V3.0 с преобразователем CH340G ~ $3.5 -
http://www.kosmodrom.com.ua/prodlist.php?name=Arduino%20Nano%20v3.0%20Blue- Кабель miniUSB для ее прошивки и дальнейшего подключения к питанию (обычно идет в комплекте с Arduino) ~ $0,3 -
http://www.kosmodrom.com.ua/el.php?name=CabUSBAMiniUSB0.8- Зарядное от телефона с портом USB. Максимальное потребление этого устройства - 150мА
- Двухканальный релейный модуль 2-Channel 5V Relay Module for Arduino ~ 1,2$ -
http://www.kosmodrom.com.ua/el.php?name=2CH5VRMA- Датчик малых давлений MPX5010DP ~14$ -
http://www.kosmodrom.com.ua/el.php?name=MPX5010DP- Светодиодный индикатор четырехсимвольный на TM1637 c разделителем двоеточие (Clock) ~ 1,7$ -
http://www.kosmodrom.com.ua/el.php?name=4-DigitGREEN30x14Clock- Резистор постоянного сопротивления 4,7 Ком любой мощности ~ 0,1$ -
https://radiodetali.com.ua/product/rezistor-06-vt-47-kom-1-d2-l6-mf06w-15871- Герметичный датчик температуры на базе DS18B20 (1 метр) ~ $1,3 -
http://www.kosmodrom.com.ua/el.php?name=DS18B20-1M-TUBE-IP67- Набор проводов-перемычек различной длины. 13 видов по 10 шт, ну или кусок провода монтажного ~ $0,7 -
http://www.kosmodrom.com.ua/el.php?name=KIT-WIRE-130PCS- Корпус и разъемы подключения всего этого добра подбирается под свой вкус на том же Космодроме.
Так же надо кусачки, термоусадка, паяльник, припой и флюс.
Сборка производится согласно картинке-схеме ниже. Цветовая маркировка проводов гильзованного датчика DS18b20 соответствует цветам соединений на картинке. Если применяется безкорпусной датчик – выводы обозначены на схеме. При подключении датчика давления MXP5010DP обратите внимание на правильное его расположение – ножка с выборкой в виде полумесяца должна быть слева, к ней надо подключать минус питания – черный провод на рисунке. На релейном модуле перемычкой должны быть закорочены ноги JD-VCC и VCC.
Далее надо записать исполняющий код в Ардуино. Займет это меньше минуты, со всеми настройками программы.
NOTE: По хорошему, еще надо внести правильный офсет для вашего датчика в текст программы и записать программу заново. Но так как этот офсет гуляет туда-сюда на 10 единиц, это будет вносить дополнительную погрешность в 10 мм.вод. столба или дополнительные 3,5% погрешности. Цифра не критична и в принципе можно на эту манипуляцию забить, но я ее всё равно опишу.Что нам надо для залива прошивки:0) Принять на грудь 378 грамм хорошего крепкого напитка. При меньшей дозе страх побеждает интерес и ничего не получается.
1) Программное обеспечение ARDUINO IDE, скачиваем отсюда, раздел Download the Arduino IDE, выбираете вашу операционную систему -
https://www.arduino.cc/en/main/software2) Драйвер для ARDUINO NANO V3.0 с преобразователем CH340G – где его скачать и как его установить описано здесь -
https://myrobot.ru/downloads/driver-ch340g-arduino.php3) 3 библиотеки для компилирования кода программы - GyverTM1637.h.zip, OneWire.h.zip, DallasTemperature.h.zip и код исполняемой программы DDT.ino. Все они в архиве внизу сообщения.
Действия для записи прошивки:1) Устанавливаем Драйвер для ARDUINO NANO V3.0 с преобразователем CH340G (см выше)
2) Устанавливаем ARDUINO IDE, заходим в папку с программой запускаем файл «arduino.exe» (имя может быть просто «arduino» без exe.)
3) Подключаем библиотеки – верхнее меню программы - > нажимаем «Скетч» -> «Подключить библиотеку» -> «Добавить .zip библиотеку» . Таким образом подключаем по очереди все 3 библиотеки.
4) Открываем код программы «Файл» -> «Открыть» -> выбираем файл с архива «DDT.ino» и нажимаем «Открыть».
Далее работаем с окном в котором открылся текст программы:
5) Подключаем плату ARDUINO NANO кабелем mini USB к компьютеру.
6) Выбираем плату Ардиуино , ее порт и загрузчик для работы – верхнее меню программы-> «Инструменты» -> «Плата» -> выбираем ARDUINO NANO. Чуть ниже «Процессор» -> выбираем ATMega328P (old bootloader). Еще ниже – «Порт» -> выбираем «Com 5» (ЦИФРА МОЖЕТ БЫТЬ ЛЮБОЙ ДРУГОЙ!). И предпоследний пункт – «Программатор» -> выбираем «USBtinyISP».
7) Проверяем корректность подключения – верхнее меню программы-> «Инструменты» -> «Получить информацию о плате». При корректном подключении появится окошко с очень мелким текстом где будет написано что-то типа такого: «BN: Неизвестная плата VID: 1A86 PID: 7523 SN: Загрузить любой скетч, для использования.». Это значит что все получилось настроить и можно записывать прошивку.
8 ) Для записи прошивки - верхнее меню программы-> «Скетч» -> «Загрузка». Дождаться загрузки, внизу окна с текстом программы будет написано «Загрузка завершена».
9) Программа записана, плата готова к работе.
P.S. Как ранее обещал, для любителей точности расcказываю как выставить правильный офсет:
1) В 19 строчке текста программы int offset = 43; // офсет датчика в ед. с порта без давления число 43 меняем на 0.
2) Записываем программу в Ардуино
3) После записи запускаем последовательный монитор порта – нажимаем Ctrl+Shift+M или нажимаем вверху программы «Инструменты» -> «Монитор порта»
4) В открывшемся окне в столбик каждые 6 секунд будет появляться отрицательная цифра (скорей всего эта цифра будет от -40 до -50.
5) В 19 строчке текста программы int offset = 43; // офсет датчика в ед. с порта без давления ранее установленное число 0 меняем на это число БЕЗ ЗНАКА МИНУС (если выводит -46, то пишем 46).
6) Записываем программу в АрдуиноДисклеймер: Сразу приношу извинения перед гуру программирования за «говнокод». До этого с программированием не сталкивался (разве что примитивные вещи в Blynk), изучить программирование ARDUINO и написать этот код у меня заняло
две ночи. Можете использовать/исправлять/модифицировать/улучшать этот «говнокод» как желаете.
Важный момент - Игорь предупредил что при закипании возможен краткосрочный подъем давления выше критического, что может вызвать отключение РОСЫ из за команды "Потоп". Я промониторю этот момент. Если такое будет наблюдаться скорей всего можно подключить датчик к порту включения клапана воды, чтобы нивелировать этот момент.