Поиск

29 мая 2016 г.

Термометр с тревогой и логированием в баню


         Для контроля температуры, влажности и датчиков дыма решил собрать схемку с использованием платки Arduino Pro Mini.
Плата, в принципе, подойдет любая, главное чтобы на ней стоял микроконтроллер ATMEGA328P и были доступны все выводы.
Датчики температуры цифровые (1-Wire), датчик влажности аналоговый.
Запись лога в формате CSV ведется на SD карту (используется библиотека FatFs (C) ChaN).
Дисплей используется символьный - 20x4.

Итого в проекте используются:

1. Плата Arduino Pro Mini 5В 16МГц (китайский аналог). 
2. Плата часов Tiny RTC I2C на DS1307. 
3. Плата Micro SD 5V с микросхемой согласования уровней напряжения (SPI). 
4. Символьный LCD 20 x 4 производства МЭЛТ с нормальной русской кодировкой (страница 1) MT-20S4A. 
5. Цифровые датчики температуры DS18B20 (1-Wire).
6. Аналоговый датчик влажности HM1500LF. 
7. Сирена XHD SFB-55. 
8. Батарейный блок на 3 х 1.5В (ААА) для резервного питания. 
9. Датчики дыма на микросхеме MC145010 или аналогичной. 






Ардуиновских плат "Pro Mini" на ATMEGA328P великое множество с разной обвязкой, стабилизаторами и с разным количеством подключенных выводов. 
В проекте используются почти все выводы, включая ADC6, ADC7, которые как раз могут быть и не подключены. 

Свободных ножек маловато, поэтому кнопки подключены к одному выводу через делитель напряжения. Информация о нажатиях считывается с помощью АЦП.
Для бесперебойной работы используется резервное питание на 3-х пальчиковых батарейках размера AAA. 

Переключающая кнопка SW1 используется для выключения устройства, микроконтроллер видя сигнал на ноге PC3, отключает резервное питание с помощью мосфета Q3.

Внешнее питание 9-ти вольтовое, чтобы можно было подключить датчики дыма напрямую. 

Датчики дыма обычные, фотоэлектрические (ИК), куплены в ОБИ, внутри оказался аналог чипа MC145010 (XC5010DW). У него вывод 7 используется для соединения датчиков в сеть и для информировании о срабатывании. То есть, если один датчик сработал - верещать будут все. 

Плата часов реального времени была куплена давно и аккумулятор LIR2032 уже помер. Он, в принципе, и не нужен, вместо него хорошо встает обычная батарейка CR2032, только надо выпаять D1, R4, R5, и закоротить R6. 

Долго думал какой выбрать датчик влажности и остановился на готовом модуле HM1500LF, он выдает результат в аналоговом виде линейно от 1 до 3.6В. 
Можно было выбрать какой-нибудь цифровой и подешевле, но не нашел в подходящем корпусе. Про этот написано, что он водостойкий и работает в широких температурно-влажностных режимах. Посмотрим...
Также поддерживается датчик температуры и влажности - Aosong AM2305.

Программа вычисляет влажность, используя в качестве опоры напряжение питания (AVcc), которое в свою очередь вычисляется, используя встроенный в микроконтроллер источник опорного напряжения 1.13 вольт. 
При старте программа пытается продолжить писать лог в файл, имя которого запомнено в EEPROM (tlog_*.csv). 
Фактическая запись на карту памяти идет периодически - по заполнению буфера в ОЗУ на 3/4. Кнопка "OK" - сброс буфера на карту, отображение дополнительной информации и вход в настройки, кнопка "LEFT" - отключение тревоги (сначала по температуре, потом по дыму).

Настройки: 
1. Информация об имени и размере лога, создание нового лога. 
2. Установка даты и времени. 
3. Сохранение настроек в tlog.cfg (название датчиков, имена колонок в логе и другие настройки). 
4. Считывание настроек из tlog.cfg. 
5. Очистка датчиков температуры и поиск их по-новой.
6. Калибровка опорного источника напряжения. 
7. Редактирование тревожной температуры для каждого датчика. 

Для работы с картой памяти используется библиотека FatFs. Использован пример "avr_complex" с небольшими корректировками.

Схема:



Прошивка: AVRFLASH.ROM

Комментариев нет:

Отправить комментарий