Я специально добавил хаб «читальный зал», так как конкретных схем, ПО и чертежей тут не будет, зато будет сказ о том, как проект выходного дня растянулся на 2 недели. В общем, нет ТЗ — результат ХЗ.

Предпосылка. Не знаю, или кризис 4х — 5и лет, или непростой 2020, но поведение дочки стало резко портиться. Дома — еще ничего, а на занятиях — мрак. С другой стороны, в развивающем клубе, куда она ходит, есть аналоговый «поведениеметр» (не знаю, как он правильно называется, пусть будет так), представляющий из себя 5и этажный многоподъездный «домик», где каждому ребенку выделен именной «подъезд» и звездочка, которую ставят от 1 до 5 уровня. Эту же «игру» мелкая принесла домой, нарисовав на бумажке клеточки, но ставит всегда звезду на верхний этаж, вне зависимости от реального поведения. Ладно, надо это геймифицировать, используя тягу к лидерству, подумал я и решил сделать цифровой измерительный прибор. В результате получилось вот такое, как ни странно, работает:

image

Работает именно по назначению. За месяц использования удалось немного откорректировать поведение в лучшую сторону. Если интересно, как на такой простой проект ушло больше недели,

(Памятка для граммар-наци от человека с легкой степенью дисграфии)
Да, у меня есть проблемы с естественными языками. Я это осознаю. И предупреждаю / предполагаю, что в тексте допущено достаточно много орфографических и пунктуационных ошибок. Надеюсь, нет логических и технических. Это не желание возрождать «олбанию», просто так получается. Не могу позволить личного корректора, а написание статей мне не приносит прибыли, только отнимает время, но хочется поделиться идеями/мыслями с сообществом. На ошибки указывать не надо, не буду исправлять, так как к моменту исправления, с последующим вычитыванием, статья уже уйдет в глубины ленты Хабра и работа будет напрасной. Покорнейше прошу отнестись с пониманием, а если Вас передергивает от неправильно поставленной запятой, лучше не открывайте пост. Пожалейте свои и мои нервы, иначе —

добро пожаловать!

Конечно, про «несколько недель» я слукавил, непосредственно активная работа заняла пару дней, но шла она с невероятным «скрипом», с фейлами просто на ровном месте.
Первый вариант родился, когда я проходил мимо очередного рисунка «домика» со «звездой» на крыше. Берем досочку, к ней крепим 3 подходящие полупрозрачные емкости, которые планировал подобрать в ближайших хозтоварах, светодиодов у меня коробка, случайно на порядок ошибся, когда на Али заказывал, собираем. Выглядеть это должно было как то так:

image

Прошу прощения, вообще нет таланта рисовальщика. Из электроники — PIC12F508, пару герконов, батарейка и несколько десятков строк на Ассемблере. Управлять предполагалось «волшебной палочкой» с закрепленным на конце магнитом (да, справа была попытка нарисовать волшебную палочку). Подносим к левому геркону — отнимаем балл, к правому — добавляем. Итого, из 6 GPIO контроллера — 3 на светодиоды, 2 на герконы, 1 свободный. Внутренняя подтяжка GPIO к U+, по сути — на плату надо будет поместить только 1 контроллер и токоограничивающие резисторы для светодиодов. Эта конструкция родилась за пару минут в голове и оказалась неприемлемой к сборке в текущих условиях, несмотря на свою простоту. Как так?

Вначале была досочка. Это в нашем доме есть все необходимое, а на съемной квартире не смог найти даже заготовку. Еще нужна ножовка, желательно лобзик, дрель, шлифовальная машина, ладно, шкурка подойдет, морилка, лак и хоть какой то уголок, где можно намусорить локально, не получив люлей от жены. Рассматривал вариант поездки к коллеге, у которого частный дом и все необходимое есть, но отрывать человека от дел, согласовывать время… Не оправдано. До своего дома пилить почти 1000км, с пересечением границы. Досочка в минус, ищем другое решение.



Просто соединить подходящие «корпуса», найденные в хозяйственном магазине. Но поход по ближайшим не дал ничего стоящего. И как соединить все красиво? МГТФ — чудесный провод, но соединять только им — не эстетично. Термоусадка? Убожество! Еще есть очень красивый аудиокабель, проложенный от усилителя к колонкам и его — с запасом. Обычный, не аудиофильский. Но мне надо несколько проводов, а выдергивать из него жилы и пропихивать МГТФ — сомнительно. Стоп, где-то уже видел такое. Рыбка из капельницы:



Сейчас понимаю, что иметь этих рыбок в доме — большое горе, но в детстве мы хвастались такими поделками, не понимая, почему они есть не у всех… К счастью, теперь купить капельницу можно в ближайшей аптеке, что и было сделано. Попробовал окрасить йодом — получилось. Дело за корпусами индикаторов и электроники…

Первоначально 3D печать не входила в планы, но отсутствие подходящих корпусов + приблизительно сложившийся вид готового изделия заставили поменять намерения. Создал простой проект:



И запустил пробную печать одного фонарика. До этого все шло хорошо… От идей до первой печати прошел день, но малая стала выяснять, а что делает папа? Пришлось рассказать. И получить первую правку к ТЗ:

— Пап, а лампочек надо не 3, а 5, как в школе!

Ок, все равно все корпуса под индикаторы идентичные, напечатаю 5. Но, похоже, на этом этапе дочурка договорилась с нечистой силой и все пошло наперекосяк. Тем более разговор состоялся в Хэллоуин. Шутка. Я — старый атеист и в чудеса не верю, но все же…

Контроллер. Уже 5 GPIO задействованы под светодиоды, остается 1, который работает только как вход (или reset). Конечно, можно сделать что то подобное, высвободив еще 1 GPIO, даже подключив 6 светодиодов, но это увеличит количество проводов между индикаторами, что неудобно (подтягивающие резисторы на вход не рисовал):



Комбинируя на P0 единицу или ноль, а на P1, P2 — 1/0/Z, можно зажечь требуемый светодиод.

Но, как сказал выше, неохота протягивать лишние провода в итак маленькие отверстия трубки от капельницы. Надо искать другое решение, которое просто смотрело на меня. ИК пульт от ресивера, которым не пользовался (пультом). Порывшись в хламе, наткнулся на давно купленные ИК приемники TSOP2138, с использованием которых хотел сделать временное управление освещением в доме (не успел, переехал) и по счастливой случайности перевезенные на съемную квартиру. Честно, никогда не работал с ИК пультами. Так получилось.

И с Ethernet работал, и с SpaceWire, SRIO всякими, не говоря про каноничные UARTы, SPI, I2C, даже ISA застал, а ИК пригодился впервые. Немного погуглив, выяснил, что есть 2 основных протокола, известные как Philips и NEC. Первый использует манчестерский код, второй — ШИМ. ШИМ проще декодировать, особенно когда у тебя всего 512 слов ПЗУ и 25 байт ОЗУ на все, но пульт работал по протоколу Philips. К счастью, нашел еще один, абсолютно ненужный пульт от игрушечного китайского проектора, который использовал NEC стандарт. Определял протоколы просто подключив к ИК приемнику питание, подтяжку и осциллограф. Так как PIC12 не имеет внутрисхемной отладки, отлаживал на PIC16F819, учитывая ограничения двенашки. Как ни странно, ушло на написание с отладкой меньше часа времени, завелось почти без косяков, кроме одного. Фронт импульса от датчика чуть затянут, пришлось подкрутить тайминги. Вроде все нормально, но тут я решил посчитать (вообще, это надо делать еще на этапе идеи).

Вылез первый черт из табакерки


Планировал питать устройство от 2х щелочных батареек AA. Потребление вроде небольшое. Чуть меньше 8мА. Но и емкость щелочной батарейки в районе 2000 mA/h. Конечно, я хотел потихоньку уменьшать яркость индикаторов при простое, но как не крутил, время работы ограничено 2-3 неделями, что очень мало. Аккумуляторы — не вариант. NiCa имеют напряжение 1.2В, то есть надо уже 3, Литиевые — дикий оверхед, к которым еще надо контроллеры заряда / разряда делать. Решил питать от сети, хорошо что есть много компактных AC/DC 5V, 800mA преобразователей. Остается один вопрос, как сохранять текущий показатель поведения при отключении питания? К сожалению, встроенного EEPROM данный контроллер не имеет, FLASH сам перешивать не может. Ставить резервную литиевую 3.3V батарейку или ионистор? Вариант хороший, но контроллер должен определять пропадание основного питания, отключить светодиоды и уйти в глубокий сон. А у него уже не осталось свободных выводов.*

*Хорошая мысля приходит опосля.
Пока писал текст, придумал как решить проблему. Если подать питание на ИК приемник и его резистор подтяжки от сетевого источника, поставив «обратный» диод, то «0» на входе GPIO в течение длительного времени, нескольких сотен миллисекунд, будет сигнализировать про пропадание питания. Так же, ИК приемник не будет потреблять ток от резервной батарейки.

Хотел применить сдвиговый регистр. По ногам хватает, уже можно подключить 8 светодиодов, тем самым добавив анимацию для самой верхней «звездочки», но лишние детали сводят «на нет» основное преимущество мелкого (SO8) контроллера — компактность и простоту платы. Решил оставить отладочный PIC16F819, самый маленький, который был в наличии. У него есть встроенная EEPROM, проблема с сохранением состояния после пропадания питания решена.

Чертик второй, от куда не ждали


Один корпус, состоящий из чаши, крепежа светодиодов и крышки был напечатан. Детали неплохо подошли (это я так думал) друг к другу, можно печатать «серию». Учитывая, что все детали печатались разным пластиком, прозрачный SBS для крышки, белый PET-G для держателя и черный PET-G для чаши, решил печатать тем, что было вставлено вчера. Черным PET-G.

Единственное, перед очередной печатью «серии» решил почистить и отрегулировать стол. Дело обычное. Промыл, отрегулировал зазоры, нанес лак для лучшего прилипания и поставил деталь на печать. Не тут то было. Плохая адгезия к столу. Перепроверил калибровку оного — все Ок. Печать, если и начиналась, то через несколько слоев деталь отлипала, а кайма разворачивалась в спираль. Такое уже было при недостаточной экструзии. Как с ней воевал — даже написал статью. Хорошо, проверил и почистил ролики экструдера, вроде все красиво. Проблема не исчезла. Стал грешить на фильеру (в простонародье — сопло). Заменил. Нииихрееенааа. Горло? Вполне. Игрался с пластиками, давно не печатал, забыл поставить очиститель филамента, могла попасть и пригореть пыль. Разбираю, чищу. Пробки нет, все чисто. Собираю обратно. Это писать быстро, а в жизни — все делалось в промежутках «пока компилируется», короче — прошла неделя. А результата — 0. Последняя надежда — проверка калибровки экструдера. И это сработало. Сбилась уставка шага подачи. Как? Не знаю. Покораптились данные в EEPROM. Как тут в черную магию не поверить??? Ладно, дальше все 3D печатные работы пошли как по маслу.

Китайский чертило, или как он в той мифологии называется?


Пока принтер потихоньку шуршит своими шаговиками, решил потратить «время компиляции» на сборку светодиодов. Распаковал мешок красных ледиков, стал потихоньку монтировать. Начал с красной пластины. Дело не быстрое, если делать в фоне. Проверить светодиод, если брак установить, все, пластину можно выкинуть. Аккуратно приклеить его суперклеем, после установки всех светодиодов аккуратно припаять токоограничивающие резисторы и вывести точки питания. К концу рабочего дня (много кодил, редко компилил), красная пластина была готова. Решил проверить, как это будет выглядеть в корпусе и измерить ток, на сколько он соответствует расчетному. Так виртуозно матом давно не ругался. Нет, все светодиоды ярко светились, ток почему то был меньше расчетного. Но чистым красным они горели от силы 0.5с, далее переливаясь в зеленый, голубой и промежуточные цвета. Китайский продавец дважды накосячил. Вместо мешочка сверхъярких оранжевых светодиодов положил голубые, на это я успел высказать свое «фе», вместо обычных красных — переливающиеся со встроенным «контроллером», даже не знаю, где их применить, кроме новогодней гирлянды. Но нет худа без бобра. Если с них снимать питание на 100мкс, то контроллер светика успевает сбросится и постоянно горит красный. А ШИМить (312.5Гц период) фонарики все равно собирался. Теперь у меня уже 2 мешка ненужных светодиодов.

На этом основные неприятности закончились. Из мелких: детали не все хорошо подошли. Из небольших углублений держателя светодиодов не удалось полностью извлечь поддержки, что усложнило монтаж. Пришлось высверливать отверстия держателя, а в шипы чаши вплавлять направляющие из медной проволоки, после чего клеить. Корпус для платы не получилось сделать из PLA бронзового цвета. Его остаток «протух». Пластик стал ломким и не хотел слипаться. Слетел драйвер цветного принтера, когда собрался распечатать картинки. В заключение — сдохла TF карта с G-code файлами моделей для 3D. Но самоделку доделал!

Фото этапов сборки
Собственно, сам корпус индикатора:



Светодиоды приклеивались к «плате» и к ним припаивались резисторы и проводники:



Отладка прошивки:



Обратите внимание, сетевой источник установлен, но имеется разрыв по + питания. Сделано это по соображениям безопасности, отладка выполнялась при питании от лабораторного источника, подключение сетевого питания осуществлялась перед сборкой в корпус. Желаю не сгорать на pet проектах!

Плата крайне простая, совсем капля МГТФа:



Все готово к сборке:



В качестве отражателя пригодилась крышка от термоконтейнера, в котором лежала очень вкусная еда…

Фикс бага конструкции при помощи проволоки:



Готовый результат — в начале статьи.

P.S.


Чертежи, схемы и прошивку не выкладываю, так как первые — не совершенны, вторых вообще нет, только в голове и списке распайки GPIO, а прошивка без всего этого — бессмысленна. Да и мало кто в DIY проекте сейчас будет писать на Ассемблере. Это меня укусило серийное производство электроники, где экономится каждая копейка. Первоначальный проект, на дощечке, особенно используя Ардуино с готовыми библиотеками, можно сделать за день. А мне охота было заняться тем, что называется словом, недопустимым правилами сайта. Надеюсь, сама идея Вам понравилась…

P.P.S.

К сожалению, многие не верно поняли основной посыл статьи — поиск инженерного решения на примере примитивной задачи, и обрушились праведным гневом на наш воспитательный метод, по этому добавлю несколько пояснений. Нет, мы не собираемся делать из ребенка «собачку Павлова». Визуализация поведения — это только одна небольшая игра, дополняющая все остальное. В нашем случае, используя тягу к лидерству, такая игра дала свой результат очень быстро. В других условиях эта штука может быть абсолютно неэффективной, даже вредной, если использовать ее как метод дрессировки.