КОПИЛКА СО СЧЁТЧИКОМ МОНЕТ

Электронный распознаватель монет (по размеру) для копилки со счётчиком суммы и статистикой по каждому типу монет.
Возможности:

  • Распознавание размера монет с высокой точностью и его привязка к стоимости каждой монеты
  • Вычисление общей суммы монет в копилке
  • Статистика по числу монет каждого типа
  • Все настройки сохраняются в энергонезависимую память и не сбрасываются при питании
  • Накопленная сумма тоже хранится в энергонезависимой памяти и не боится сбоев питания
  • Режим глубокого энергосбережения: в спящем режиме потребляется 0.07 мА, в схеме без преобразователя 0.02 мА
  • Поддержка любого числа монет разного размера
  • Автоматическая калибровка типов монет
  • Сброс накопленного количества

ПОДРОБНОЕ ВИДЕО ПО ПРОЕКТУ

  • В данном видео показан полный и максимально подробный процесс разработки и изготовления устройства, а также обзор его возможностей и функций, всё это с приятным монтажиком, музычкой и комментариями. В общем, приятного просмотра!
поддержать автора
канал на youtube
страничка на github
группа вконтакте

ИНСТРУКЦИИ ПО ЭКСПЛУАТАЦИИ

Перед началом работы нужно провести калибровку под ваш монеты, делается это следующим образом. На ардуино есть кнопка перезагрузки, и рядом есть наша кнопка для калибровки. Нажимаем кнопку калибровки, и затем перезагружаем ардуину, кнопку не отпускаем. На дисплее появится кнопка сервис, держим кнопку 3 секунды. Затем появится надпись память очищена. Эта процедура обнуляет число монеток, которые были брошены в копилку. Отпускаем, запускается процесс калибровки. Теперь нужно бросать в копилку монетки с такой ценой, которая указана на дисплее. Система находит максимальное значение сигнала с датчика для каждой монетки и записывает его в память, все настройки сохраняются даже после перезагрузки. Всё, копилка выходит на обычный режим.

Давайте посчитаем, сколько мелочи было у меня в кошельке. Сейчас система спит глубоким сном и видит жуткие цифровые сны. Как только я вставляю монетку, контакты на входе в щель замыкаются, и ардуино просыпается и включает дисплей и датчик, и начинает ждать монетки. Если перестать кидать монетки, дисплей погаснет и ардуино снова уснёт. А сейчас я покажу вам ещё одну интересную функцию: вставляем монетку и удерживаем её несколько секунд, то есть замыкаем контакты. И на дисплее отображается в первой строчке цена монетки, и на второй строчке число этих монеток, то есть мы знаем, какое количество монеток каждого типа лежит в копилке на данный момент. И затем снова засыпаем.

СХЕМЫ, ПЕЧАТНЫЕ ПЛАТЫ

Схема питания от USB

Схема питания от аккумулятора через мосфет

МАТЕРИАЛЫ И КОМПОНЕНТЫ

Ссылки на магазины, с которых я закупаюсь уже не один год

Вам скорее всего пригодится:

Если товар закончился, то почти всё указанное ниже можно найти здесь https://alexgyver.ru/arduino_shop/ или здесь https://alexgyver.ru/electronics/

всё для пайки
аккумуляторы и модули
все arduino модули
мультиметры
инструменты
бп и преобразователи

ПРОШИВКА И НАСТРОЙКА

Содержимое папок в архиве

  • Библиотеки – библиотеки для дисплея и прочего, скопировать в
    C:\Program Files (x86)\Arduino\libraries\ (Windows x64)
    C:\Program Files\Arduino\libraries\ (Windows x86)
  • money_box_counter – прошивка для Arduino, файл в папке открыть в Arduino IDE (читай FAQ)
скачать архив
страница на github

Как прошить?

  • ЕСЛИ ЭТО ПЕРВЫЙ ОПЫТ РАБОТЫ С ARDUINO – посмотреть ВИДЕО о платформе с целью ознакомления, далее скачать, установить и настроить необходимые для работы программы согласно СУПЕР ПОДРОБНОЙ ИНСТРУКЦИИ (там даже видео версия есть!).
  • Скачать архив с проектом напрямую, или с GitHub (кнопки чуть выше)
  • Установить библиотеки (папка Libraries) в
    C:\Program Files (x86)\Arduino\libraries\ (Windows x64)
    C:\Program Files\Arduino\libraries\ (Windows x86)

  • Подключить Ардуино к компьютеру при помощи Data-кабеля
  • Открыть файл прошивки желаемой версии (файлы прошивок .ino лежат в одноимённых папках)
  • Настроить Arduino IDE (COM порт, куда подключена плата; подключенная модель Arduino, как в статье из первого пункта)
  • Настроить что нужно в прошивке, нажать загрузить
  • Если происходит ошибка компиляции или ошибка загрузки, читать 5-ый пункт в ЭТОЙ СТАТЬЕ

Настройки в прошивке

#define coin_amount 5    // число монет, которые нужно распознать
float coin_value[coin_amount] = {0.5, 1.0, 2.0, 5.0, 10.0};  // стоимость монет
String currency = "RUB"; // валюта (английские буквы!!!)
int stb_time = 10000;    // время бездействия, через которое система уйдёт в сон (миллисекунды)

Дополнительно

  • Нажать и удерживать кнопку калибровки, затем подать питание/перезагрузить Arduino
  • Если отпустить кнопку калибровки, система перейдёт в режим калибровки
  • Если удерживать ещё 3 секунды – режим очистки памяти (сброс числа монет)
  • После окончания калибровки система сама перейдёт в обычный режим работы

АЛГОРИТМ РАБОТЫ

if (sleep_flag) {  // если проснулись  после сна, инициализировать дисплей и вывести текст, сумму и валюту
   delay(500);
   lcd.init();
   lcd.clear();
   lcd.setCursor(0, 0); lcd.print(L"На яхту");
   lcd.setCursor(0, 1); lcd.print(summ_money);
   lcd.setCursor(13, 1); lcd.print(currency);
   empty_signal = analogRead(IRsens);
   sleep_flag = false;
 }

 // далее работаем в бесконечном цикле
 last_sens_signal = empty_signal;
 while (1) {
   sens_signal = analogRead(IRsens);  // далее такой же алгоритм, как при калибровке
   if (sens_signal > last_sens_signal) last_sens_signal = sens_signal;
   if (sens_signal - empty_signal > 3) coin_flag = true;
   if (coin_flag && (abs(sens_signal - empty_signal)) < 2) {
     recogn_flag = false;  // флажок ошибки, пока что не используется
     // в общем нашли максимум для пролетевшей монетки, записали в last_sens_signal
     // далее начинаем сравнивать со значениями для монет, хранящимися в памяти
     for (byte i = 0; i < coin_amount; i++) {
       int delta = abs(last_sens_signal - coin_signal[i]);   // вот самое главное! ищем АБСОЛЮТНОЕ (то бишь по модулю)
       // значение разности полученного сигнала с нашими значениями из памяти
       if (delta < 30) {   // и вот тут если эта разность попадает в диапазон, то считаем монетку распознанной
         summ_money += coin_value[i];  // к сумме тупо прибавляем цену монетки (дада, сумма считается двумя разными способами. При старте системы суммой всех монет, а тут прибавление
         lcd.setCursor(0, 1); lcd.print(summ_money);
         coin_quantity[i]++;  // для распознанного номера монетки прибавляем количество
         recogn_flag = true;
         break;
       }
     }
     coin_flag = false;
     standby_timer = millis();  // сбросить таймер
     break;
   }

2018-02-21T00:40:04+00:00