Итак, в тандем терморегулятору был разработан таймер.
Экраны
Трёхпозиционный тумблер – это главная коробка передач часового механизма.
В нейтральном (среднем) положении рычажка - сушилка на нагрев не работает, но можно задать нужные настройки, такие как:
- Set Planed Off - время выключения сушки (да, да - выключения, вы не ослышались);
- Set Work Time - время продолжительности сушки;
- Set Clock - установка времени и даты встроенных часов.
Если со вторым и третьим пунктами всё понятно, то время выключения сушки – может вызывать вопрос: «Что это и для чего?». Рассмотрим простую ситуацию. Допустим - завтра в 10 утра вы планируете запустить 3D печать. К этому времени вам нужно иметь на руках бобину подсушенного PLA. Вы идете к сушилке, кладёте в неё катушку и говорите аппарату: «К 9:45 завтрашнего дня закончить сушку пластика.» Всё!
Остальное на совести таймера. Оперируя временем продолжительности сушки и заданным временем выключения, он включит сушилку с таким расчетом, чтобы на момент печати филамент был качественно прожарен.
При нижнем положении рычажка тумблера, таймер работает в привычном всем режиме.
Кроме управления временем работы нагревателя, таймер ещё управляет работой мотора, который крутит бобины с пластиком.
Все настройки меню запоминаются в памяти контроллера, и кратковременные перебои с напряжением их не сбросят. При возобновлении питания сушилка продолжить работу согласно установкам.
Немного о коде
Использовались библиотеки:
- Часы - <Wire.h>, <iarduino_RTC.h>
- Термометр - <SHT1x.h>
- Таймштамп - <UnixTime.h>
- Дисплей - <Arduino.h>, <U8x8lib.h>
- Память (ПЗУ) - <EEPROM.h>
Что было интересного при написании кода?
Расчёты над датами делались посредством таймштампов. То есть, для действий (отнять, прибавить) дата и время, сначала пересчитываются в количество секунд, происходит действие, а затем количество секунд (если это надо) переводится обратно в дату. Для этого использовалась библиотека Гайвера <UnixTime.h>. Она не идеальна, но в целом подходит для таких преобразований.
Шрифты
Львиную часть кода занимает обработка экрана и преобразование данных для удобного показа. Много места занимают используемые шрифты, поэтому я ограничился тремя из библиотеки <U8x8lib.h>:
- Обычным - u8x8_font_chroma48medium8_r;
- С двойной высотой - u8x8_font_7x14B_1x2_f;
- и укороченным набором спецсимволов - u8x8_font_open_iconic_arrow_1x1.
(продолжение) - (предыдущая статья)