В основе этого давнего DIY проекта — известная копилка от AlexGyver. Я решил не просто повторить, а довести идею до ума: напечатал новый корпус на 3D-принтере, переработал схему, развел печатную плату и изготовил её вручную. Что из этого вышло — читайте в статье!

Принцип работы

В основе лежит метод оптического прерывания. При прохождении монеты через луч инфракрасного светодиода она частично перекрывает излучение, направленное на фототранзистор. Чем меньше диаметр монеты, тем меньше перекрытие: 1 рубль дает минимальное падение напряжения на фототранзисторе, 5 рублей — максимальное.

Система записывает сигнал с привязкой ко времени пролета, получая зависимость падения напряжения от времени. Затем эта кривая сравнивается с калибровочными эталонами для каждого номинала, заранее сохраненными в памяти.

В процессе работы устройство подсчитывает количество монет каждого номинала и умеет выводить итоговый отчет.

Исходники на GitHub

Принципиальная схема

Зарядный модуль

Зарядный модуль для аккумулятора 18650 реализован по классической схеме с использованием 3-х микросхем:

  • TP4056 — заряжает аккумулятор стабильным током до 1 А до достижения 4,2 В;

  • DW01A — контроллер защиты отслеживает напряжение на аккумуляторе и ток через нагрузку, обеспечивая защиту от переразряда ниже 2,4 В, перезаряда выше 4,3 В и перегрузки по току (КЗ);

  • FS8205A - сдвоенный N-канальный MOSFET, который разрывает цепь между аккумулятором и схемой по сигналу от DW01A (при переразряде, перезаряде или КЗ), переходя в режим блокировки и требуя подключения зарядного устройства для выхода из этого режима.

Индикация процесса зарядки стандартная: красный светодиод горит во время зарядки, зеленый загорается по окончании.


Повышающий преобразователь

Для питания Arduino и дисплея используется повышающий DC-DC преобразователь на микросхеме MC34063. Входное напряжение: 3–4,2 В, выходное: 5 В.

Первоначальная схема:
Arduino питалась напрямую от аккумулятора, а повышающий преобразователь и дисплей включались отдельно по сигналу от Arduino через MOSFET. Главный недостаток: при снижении напряжения на аккумуляторе до 3,9 В происходило преждевременное отключение микроконтроллера, хотя аккумулятор был еще далеко не разряжен.

Итоговая схема:
Arduino запитывается от непрерывно работающего повышающего преобразователя MC34063. Это позволило стабилизировать напряжение на входе микроконтроллера на уровне 5 В, благодаря чему система сохраняет полную работоспособность даже при снижении напряжения на аккумуляторе до 3 В. Дисплей по-прежнему управляется отдельно по сигналу от Arduino через транзисторный ключ.

Цена вопроса: автономность

Однако стабилизация питания имела обратную сторону — рост энергопотребления:

  • Активный режим: 124 мА

  • Режим сна: 4 мА, из которых: 0,07 мА приходится на Arduino, 3,93 мА — собственное потребление преобразователя MC34063

Таким образом, в режиме сна 97% всего потребления приходится на микросхему MC34063 и лишь 3% — на микроконтроллер. Аккумулятора емкостью 2000–3000 мА·ч хватает примерно на 20 дней.

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

UPD: Осознание ошибки

Ошибки, допущенные в данном проекте, стали очевидны лишь спустя месяц, когда я приступил к разработке «Метеостанции». Оптимизируя энергопотребление в новом устройстве (снижение частоты МК и порога BOD), я понял: это решение идеально подошло бы и для «Копилки».

Исходная схема, где Arduino во сне питалась через постоянно работающий повышающий преобразователь, оказалась неэффективной. Правильнее было запитать преобразователь через транзистор, а Arduino подключить напрямую к аккумулятору. Благодаря сниженному порогу BOD микроконтроллер не отключался бы даже при падении напряжения до 2,7 В, а преобразователь просыпался бы только для вывода информации на дисплей.

Такая доработка могла бы увеличить автономность устройства до одного года.


Устранение помех

Повышающий импульсный преобразователь на MC34063 создавал значительные помехи, из-за чего Arduino работала некорректно: система самопроизвольно засчитывала отсутствующие монеты.

Начальная версия (навесной монтаж): Для подавления помех достаточно было установить электролитический конденсатор 470 мкФ.

После перехода на печатную плату (ПП): Этой меры оказалось недостаточно. Для надежного подавления помех потребовался комплекс мер:

  1. Добавлен LC-фильтр с частотой среза 2,3 кГц

  2. Топология платы изменена — преобразователь максимально удален от Arduino и аналоговой части (фототранзистор)

  3. Разделение земель — аналоговая земля отделена от силовой

В результате устройство стало работать стабильно, а ослабление пульсаций составило 18,6 дБ, что соответствует снижению уровня помех в 8,5 раза по напряжению.

Сравнение осциллограмм до и после применения фильтра приведено на рисунках ниже

Без фильтра: пульсации 111 мВ
Без фильтра: пульсации 111 мВ
С LC-фильтром: 13 мВ
С LC-фильтром: 13 мВ

Печатная плата в Altium Designer

Готовое устройство на печатной плате

ПП изготовлена вручную фоторезистивным методом.

Для защиты токопроводящих дорожек от окисления и коротких замыканий на плату нанесена паяльная маска, сформированная методом УФ-экспонирования через фотошаблон. Также это придало устройству красивый профессиональный вид.

Для обеспечения компактности ПП и гибкости размещения компонентов в корпусе устройства — аккумулятора, фототранзистора, ИК-светодиода, кнопки включения и дисплея — их подключение к основной плате реализовано через разъемы типа PLS.

Такое решение позволило:

  • Оптимально разместить элементы в пространстве корпуса

  • Упростить сборку и разборку устройства

  • При необходимости легко заменять компоненты без перепайки

Корпус

3D-моделирование выполнено в SolidWorks, печать корпуса — из ABS-пластика.

Особенности конструкции:

  • Крепление: дисплей и аккумуляторный отсек зафиксированы винтами М3 через вплавляемые гайки, запрессованные в пластик корпуса

  • Монтаж платы: ПП удерживается пластиковыми клипсами

  • Компоновка: внутреннее пространство разделено перегородкой, изолирующей электронику от монет

  • Доступ к монетам: задняя крышка скользит по направляющим, что позволяет легко и быстро извлекать содержимое

  • Интерфейсы: разъем зарядки и светодиодная индикация выведены на левую грань корпуса

Хочу сказать отдельное спасибо Передовой инженерной школе «ЛЭТИ» и аспиранту кафедры ЭПУ Кушнаревой Олесе Андреевне за помощь и предоставленную возможность в реализации корпуса для проекта.

Демонстрация работы устройства

Итог

Проект «Копилка» прошел полноценный путь развития: от первого прототипа в DIY-корпусе с навесным монтажом до законченного устройства на печатной плате в индивидуальном корпусе, изготовленном с помощью 3D-печати.

Главный вывод, который я сделал для себя: энергопотребление нужно закладывать на начальных этапах разработки устройства, а не дорабатывать после сборки.

Подписывайтесь, если интересны DIY проекты и истории их (не всегда идеальной) разработки. Пишите в комментарии — что я упустил? Как бы сделали вы?

Комментарии (14)


  1. little-brother
    01.03.2026 13:09

    Для большей времени автономности лучше поставить e-Ink экран. Если пробуждать МК только при опускании монеты, поставив на входе микро-переключатель с рычагом, то в остальное время МК может спать. В этом случае зарядка не потребуется вовсе.

    На мой любительский вкус часть отвечающая за заряд, - переусложнена. Зарядку и защиту можно и на готовых модулях было реализовать, а еще проще перейти на 3.7В аккум со встроенной защитой или совсем отказаться от зарядки.

    И да, выбранный МК жирноват для подобной задачи.


    1. andreyyykovvv Автор
      01.03.2026 13:09

      Спасибо за развернутый комментарий!

      1. Да, e-lnk экран поможет сохранить заряд, но мне больше по душе LCD1602) Пришлось для большей яркости и контрастности 1602 добавить повышающий преобразователь до 5в. Пусть схема чуть сложнее, зато результат именно такой, как хотелось.

      2. Почти всё время мк проводит в режиме глубокого сна (LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);

        Внутри монетоприемника приклеены две полоски металла - они работают как контакты. При опускании монеты контакты замыкаются. Это замыкание вызывает аппаратное прерывание: attachInterrupt(0, wake_up, CHANGE);

        Функция wake_up включает периферию и сбрасывает таймер:

        void wake_up() { digitalWrite(disp_power, 1); // Включить дисплей digitalWrite(LEDpin, 1); // Включить подсветку digitalWrite(IRpin, 1); // Включить датчик standby_timer = millis(); // Сбросить таймер ожидания }

        После пробуждения выполнение возвращается в основной цикл. Здесь система проверяет флаг sleep_flag — индикатор того, что система только что вышла из сна. Если флаг поднят, значит, дисплей был обесточен и требует полной переинициализации: вызывается lcd.init(), после чего на него выводится актуальная информация. Затем флаг сбрасывается в false, и система переходит к распознаванию монет.

        В статье упустил упоминание этого момента.

      3. Схема для заряда взята с данного популярного модуля. Перенес её на пп, чтобы не навешивать целый модуль отдельно.

      4. Да, можно было поставить аккумулятор со встроенной защитой — тогда из схемы можно было бы исключить DW01A и его обвязку

      5. Тут вы абсолютно правы: Arduino для такой задачи великовата, однако наличие нескольких штук в запасе перевесило аргументы в пользу перехода на другой мк)


      1. green88
        01.03.2026 13:09

        Зачем вообще здесь аккумулятор и этот огород с повышателями/защитами? 2 или 3 ААА и ни о чём не думай. Или тогда и писать нечего?


        1. andreyyykovvv Автор
          01.03.2026 13:09

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


          1. green88
            01.03.2026 13:09

            Ну, если потренироваться, тогда да. А при низком напряжении, для контраста LCD делается преобразователь в минус на 3-х детальках.


  1. sergyk2
    01.03.2026 13:09

    красиво и аккуратно всё реализовано.

    разве что желто-зеленый индикатор выглядел бы симпатичнее.


    1. andreyyykovvv Автор
      01.03.2026 13:09

      Благодарю!

      Мне больше красно-зеленая индикация привычнее)


  1. dmitrik4321
    01.03.2026 13:09

    Спасибо за статью и проект (точнее за доработку имеющегося). Оставь ссылочку на диск с исходниками, в идеале гитхаб


    1. andreyyykovvv Автор
      01.03.2026 13:09

      Вот исходники (прошивка, корпус, печатная плата): https://github.com/Andrey3245/Project-2-Smart-moneybox


  1. green88
    01.03.2026 13:09

    Прошивка:

    Только не прошивка, а проект в данном случае. Прошивка - это ХЕКС файл (без исходных текстов), который записывается программатором или загрузчиком.


    1. andreyyykovvv Автор
      01.03.2026 13:09

      Понял, исправлю!


  1. RezonanS1
    01.03.2026 13:09

    Рекомендую на будущее делать окошко под экран по стеклу ЖК дисплея, а не по его рамке. Выглядеть будет лучше.


    1. andreyyykovvv Автор
      01.03.2026 13:09

      Как-нибудь попробую) Нашел пример в интернете, хоть и дисплей получается утоплен, но смотрится хорошо


      1. RezonanS1
        01.03.2026 13:09

        Да, можно даже чуть меньше, чтобы рамку вообще не видно было. Условно по символам с небольшим запасом по краям ~1 мм.