Page 1 of 1

USB подогреватель детских бутылочек (PIC12F629 + DS18B20)

Posted: 12 Jan 2023 11:32
by hardlock
В связи с некоторыми событиями в моей жизни, пришлось обратиться к такому интересному дэвайсу, как подогреватель бутылочек от USB.
ali_pic.jpg
Приобретено устройство на Али, протестировано и забраковано по нескольким причинам.
1) Термостата в устройстве нет. Регулируется фактически только мощность на нагревателе с помощью ШИМа. Поэтому или перегревает содержимое бутылочки или сильно недогревает.
2) Неудобное управление.
3) Самая главная причина - я его ещё не разбирал...

Поэтому устройство было разобрано. Сделать это не сложно - "кнопка" просто пришита к наружной стенке. Отпарываем, выковыриваем герметик, которым залита плата. Правда на фото ниже на плате уже другой МК, забыл сделать фото до начала "раскопок". На родном контроллере сверху отсутствует маркировка, а на брюхе есть - на схеме это отображено.
IMG_20230110_154040.jpg
IMG_20230110_155639.jpg
Теперь можно срисовать схему устройства. В оригинале стоит МК без маркировки, по распиновке очень похож на pic12F629. Но это точно не он. При попытках чтения "оно" определялось как pic16F886 или pic16F884, при этом все слитые дампы отличались. После попыток чтения дампа, МК перестал нормально работать - запускался через раз, иногда на выходе присутствовал некорректный сигнал... Вобщем я его добил. Ну что ж, подумал я - "доработка неизбежна". Вначале хотел поставить ATTiny13, т.к. под неё есть почти готовый проект, но по цоколёвке получалось очень неудобно... Случайно нашёл у себя pic12F629, поэтому будем осваивать PIC...
sch.gif
Красным цветом я обозначил изменения в схеме, которые я внёс при доработке. Собственно добавлен датчик температуры DS18B20, R9 4,7к - подтяжка линии 1-wire, и R8 4,7к - подтяжка кнопки, т.к. в pic12F629 на этом входе нет возможности включить pull-up. Ну и токоограничивающий резистор в цепи светодиода увеличил в 4 раза, чтобы не светил так ярко. Всё, из схематических доработок всё.
IMG_20230110_164706.jpg
IMG_20230110_164724.jpg
Датчик располагаем внутри "конвертика", МК прошиваем, плату ставим на место, заливаем силиконом и пришиваем на место.

Кстати о прошивке. Совсем забыл описать, что бы мне хотелось видеть в функционале:
так сказать ТЗ и заодно описание работы.
1) Включение устройства сразу при подаче питания. Удобство работы с Powerbank - подключил и забыл.
2) Выключение - длинным нажатием кнопки (Синий индикатор).
3) Установка 4х температур. Настройка - короткие нажатия кнопки. (Мерцание: Синий - 40°C, Зелёный - 45°C, Красный - 50°C, Белый - BOOST 70°C)
4) Режим "BOOST" (Белый индикатор) - повышенная температура (70°C) на 15 минут (красный индикатор моргает), после чего возврат к установленной температуре и поддержание.
5) Сохранение в памяти текущей выбранной температуры (кроме BOOST - он не сохраняется).
6) Индикация установленной температуры при включении (мерцание индикатора), как при выборе настройки.
7) Реализация простого ШИМ, с возможностью плавной регулировки мощности нагрева вблизи установленной температуры.
8) Индикация текущего режима работы (Нагрев 100% - красный, нагрев 70% - желтый, нагрев 50% - зелёный, выключен нагрев - белый, устройство выключено кнопкой - синий, синий моргает - ошибка датчика).
9) Работа с Powerbank - в режиме выключен нагрев ШИМ около 10-20%, чтобы Powerbank не отключал питание.

Т.к. я до этого мало имел дело с PIC'ами, и не знал в чём их готовить программировать, то написал программу в первом попавшемся компиляторе - microPASCAL for PIC. В архиве - исходник проекта, и скомпилированные прошивки под разные температуры. Дело в том, что теплопередача от нагревателя к содержимому бутылочки сильно отличается в зависимости от формы бутылочки, плотности прилегания нагревателя к бутылочке и т.д. Приходится подстраиваться под текущие условия. Например дома включаем "синий режим" - 40°C и содержимое бутылочки поддерживается с температурой около 33-35 градусов. На улице включаем "зелёный режим" (45°C), а при сильном морозе приходится включать "красный режим" (50°C), т.к. потери сильно большие. Ну а в режиме "BOOST" нагреть молоко из холодильника - та ещё задача, т.к. мощность нагревателя всего 9 Вт.

Из особенностей получившейся конструкции:
1) ШИМ очень низкочастотный (период 0,5сек) выбран из-за того, что не все Powerbank`и видели нагрузку даже 20% при более высокочастотном ШИМе. Из-за этого видно мерцание RGB индикатора при вкл/выкл нагрузки.
2) Ещё мерцание индикатора происходит при чтении температуры с датчика DS18B20, т.к. оно осуществляется в общем цикле, а не по прерываниям (особенность библиотеки).