Привет, Habr! Решил описать небольшую систему автоматизации для создания чудесного напитка. Для того, чтобы пиво было вкусным важны время и температура, температура и время. Причём они настолько же необходимы, как и ингридиенты, составляющие сусло. Чтобы пройти путь до готового продукта требуется от 14 до 20 шагов с различной температурой и временем пивоварения. Для всех заинтересовавшихся этим загадочным процессом, прошу под кат.
Нам потребуется два чана различного объёма, для трёх видов:
- сусло Эля
- Пшеничное сусло
- Пильзнер
Каждый тип проходит соответственно различные шаги по времени и температуре. Конечно можно было бы использовать инструкцию и секундомер, но это ужасно неудобно. Поэтому составим csv таблицу, в которой будем хранить: номер шага, объем, целевую температуру, время.
Далее возьмём rasbpberry pi zero и присоединим к нему два датчика температуры DS18B20.
Каждый из датчиков позволит отслеживать температуру в сответствующем чане. Для того, чтобы автоматизировать процесс отсчёта времени установим на малинку adafruit 128×64 oled, на дисплее которого будет отображаться вся необходимая информация. Кнопками же мы сможем управлять проходом по шагам таблицы, а также запускать таймер.
def timer_code(seconds, t_counter = 2, restart = False): time.sleep(0.023) seconds -= time.time() - t_counter t_counter = time.time() minutes = trunc(seconds / 60.0) return seconds, minutes, t_counter
Загадочные
time.sleep(0.023)
здесь по причине того, что на обновление дисплея уходит порядка двух секунд, соответственно экспериментально была установленна данная поправка, позволяющая времени таймера идти каждые две секунды.
Итак, у нас есть таймер, который уменьшается каждые две секуны, соответствено важно, когда он дойдёт до нуля, а мы проморгали время, он отсчитал его, т. е. шёл со знаком минус.
if timer: if ((minutes < 0) and (seconds < 0)): sec = -round(seconds - 60.0*minutes) else: sec = round(seconds - 60.0*minutes) else: sec = 0
Готово. Осталось лишь в бесконечном цикле отобразить всю необходимую информацию на дисплее и вуаля — мы получаем полностью автоматическую пивоваренную установку.
draw.rectangle((0, 0, width, height), outline=0, fill=0) draw.text((x,top), f"{beer_type[countB]} step {step} Pot 1", font=font, fill=255) draw.text((x,top+8), f"T={T1} deg., Target {Target1[step]}", font=font, fill=255) draw.text((x,top+16), f"V={V1[step]} litres", font=font, fill=255) if hop[step] == '': draw.text((x,top+25), " Pot 2 ", font=font, fill=255) else: draw.text((x,top+25), f" Pot 2, Pot = {hop[step]}", font=font, fill=255) draw.text((x,top+34), f"T={T2} deg., Target {Target2[step]}", font=font, fill=255) draw.text((x,top+45), f"V={V2[step]} litres", font=font, fill=255) draw.text((x,top+54), f"Timer {minutes} min {sec} sec", font=font, fill=255) # Display image. disp.image(image) disp.show()
Не забудим лишь запускать таймер по нажатию кнопки.
# Start timer if not button_A.value: t_counter = time.time() print('A #5', button_A.value) timer = True
Конечно, полный код немного сложнее и в нём присутствует вывод всех трёх типов сусла, переключения между режимами и видами, переход по шагам, считывание данных с датчиков и прочее, но это было бы слишком грамоздко. Кому интересно — можете написать мне в личные сообщения. Кстати, инвайт на хабре достался за перевод видео о пивопарении. Всем вкусного пива и хорошей пятницы!
ссылка на оригинал статьи https://habr.com/ru/post/508360/
Добавить комментарий