Тема: Настраиваемый термометр на Arduino
Добрый вечер, эта тема посвящается термометру для самогонщиков, назовем его самогинатор - лайт. На форуме есть большая тема про автоматизацию на arduino Автоматика на Arduino для ректификации и дистилляции (схема-прошивки) , но захотелось выжать из калькулятора несколько больше.
Автоматику не приделывал, появится время - реализую.
Для сборки устройства потребуется практически любой из доступных *duino, в моем случае это был nano, к нему резистор 4,7k для подключения ds18b20, сами датчики в количестве 3-х штук, экран -2004,1602 или любой другой. Опционально - датчик давления BMP180. Еще будет нужна кнопка. Еще неплохо-бы разъемы и прочее - но на первый раз будет достаточно и простой макетной платы.
Итого у нас имеется четыре датчика и кнопка, их нужно подключить. Я постарался остаться в схеме предложенной в вышеупомянутой теме.
Начнем с DS18B20 - их три и подключаются они параллельно. Если смотреть на надпись - ноги слева направо = земля-данные-+питания. Землю подключаем к GND *duino, питание к +5v и среднюю ногу (данные) к выходу микросхемы D10.
далее, ногу D10 резистором подтягиваем к +5в (фото выложу завтра) - 1 резистор на все 3 датчика, подключенных параллельно. Намертво датчики не запаиваем, может понадобиться их поочередное подключение.
Проще всего с кнопкой - если возникают ложные (лишние) срабатывания последовательно с ней ставим резистор на 1к и керамический конденсатор. Один провод от кнопки подключается к выводу *duino D2, второй на GND. Кнопка нормально разомкнута.
Последние два устройства - экран и датчик давления BMP180 подключаются по протоколу I2C. Тоже параллельно. 4 провода - VCC к +5в,GND, SDA - A4, SCL -A5. Ножки на датчике и экране подписаны - не ошибетесь. В документации на BMP180 упоминается, что он должен питаться от 3.3в, но у меня он работает от 5 и не греется.
Далее скетч. Самое интересное. Ставим среду arduino и настраиваем на наше устройство (тип *duino и порт COM3-4-5-6...) Дополнительно нужно доставить библиотеки OneWire, SparkFun BMP180 и LiquidCrystal I2C. Они все стандартные и устанавливаются в среду без проблем.
скетч в посте №3
https://yadi.sk/d/fk7DSvLZ3KFx58 <- нужные библиотеки
Копируем, вставляем - собираем - загружаем. Загрузка завершена - нажимаем волшебные ctrl+shift+m и видим терминал. Убедитесь, что скорость выбрана правильно 115200.
Если все у вас прошло гладко - то вы увидите надписи и в терминале и на экранчике.
alcodistillers.ru
Read config
ROM =1 28 FF 88 8 A1 16 4 DB
ROM =2 28 FF 9D 55 A1 16 5 6E
ROM =3 28 FF 3 7D B3 16 4 4C
BMP180 init success
1 0.00 0.00 0.00
----------
Tn=00.00 Tk=00.00
To= 0
P= 0.0 Tc=49.2
----------
Tn=00.00 Tk=00.00
To= 0
P=736.7 Tc=77.2
----------
Tn=00.00 Tk=00.00
To= 0
P=736.7 Tc=77.2
----------
Tn=00.00 Tk=00.00
To= 0
P=736.7 Tc=77.2
----------
Tn=00.00 Tk=00.00
To= 0
P=736.7 Tc=77.2
----------
Tn=21.18 Tk=21.50
To=21
P=736.7 Tc=77.2
----------
Tn=21.18 Tk=21.50
To=21
P=736.7 Tc=77.2
----------
Tn=21.18 Tk=21.50
To=21
P=736.7 Tc=77.2
Теперь немного про настройки. У нас есть три датчика ds18. Они находятся на одной шине и различаются только адресами, которые на корпусе не написаны. Это может привести к определенным затруднениям, если, допустим датчики уже подписаны или имеют разные гильзы для установки в разные места. Еще неприятная ситуация возникает, когда один из датчиков пропадает и оставшиеся вполне могут поменяться местами или что-то типа того. Эта проблема решается обучением нашего устройства.
При загрузке устройство выучивает до трех датчиков и сохраняет их в долговременную память. После запоминания датчики уже не будут прыгать или подменять друг друга.
Но как расставить их по местам? При загрузке зажимаем кнопку на половину секунды. Эта операция обнуляет сохраненный список датчиков и позволяет провести обучение заново.
1. Отключаем все датчики кроме Тпар и выключаем устройство.
2. Зажимаем кнопку и включаем устройство. Датчик будет виден в терминале или на экране
3. выключаем устройство, подключаем датчик Тсередина и не зажимая кнопки включаем. Ждем несколько секунд.
4. повторяем п.3 для Тохл
Теперь немаловажный момент. Эта программа написана таким образом, что не вывешивается длительными ожиданиями при опросе датчиков, что позволило использовать округление из трех опросов температуры для каждого DS18. Во время ожидания готовности температуры программа занимается опросом других датчиков или выводом. Цикл тройного опроса датчиков составляет около 2,5 секунд, что вполне допустимо для наших задач. Зачем нужно округление? Хочется немного убрать дискретность из вывода. скачки-переходы на графиках особенно раздражают.
К сожалению, времени свободного появилось немного - попозже дополню функционалом.
UPD: 5/7/17: версия 2.2 - с контролем отбора в т.ч. и с перистальтическим дозатором.
Настраиваемый термометр на Arduino