Игрушечный поезд на Ардуино

Здравствуйте любители электроники! Хотел сделать робота и вот представилась возможность, пусть просто но пока такой. Поезд имел радиоуправление приёмник-передатчик TX-2B RX-2B — я не видел как он работал до поломки, наверное хорошо. Причина поломки: в передатчике, пробит транзистор и самое главное микросхема. Не стал париться на счёт поиска микросхемы, сразу решил, что проапргрейдю игрушку. Поезд шёл вперёд, назад, останавливался — проигрывал какую-то мелодию. Вот и всё! Вот что было в начале (слева — пульт (где "Крона" вставлена) и разобранный корпус):

Делаем ИГРУШЕЧНЫЙ ПОЕЗД НА АРДУИНО

Мой опыт в электронике пока беден, но аппетит приходит во время еды — и это правда. Для начала надо разобраться, с системой дистанционного управления — выбрал пару ИК — TSOP 4838 и ПДУ, это не равнозначная замена радиоуправлению, но выйти из ситуации решил запараллелив две TSOP 4838, и развернуть их в разные стороны (ИК-датчик на схеме).

ИГРУШЕЧНЫЙ ПОЕЗД СВОИМИ РУКАМИ

За движение мотора вперёд-назад будет отвечать микросхема-драйвер L293D (управление коллекторным двигателем).

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

  • RGB светодиод использовал от "жадности" — оставалось много портов не затронутых на Atmege (RGB).
  • Через блок (Динамик) будут выводиться 8 мелодий.
  • S. O. S — красный светодиод и зуммер синхронно выдают три точки три тире три точки.
  • В блоке (Индикация хода) зелёный светодиод — вперёд, красный назад.

Не буду приводить код программы, основные части легко можно найти в интернете, мною использовалась библиотека "IRremote.h", мелодии брал с сайта Амперка, стандартные решения на базе операторов case и if счётчика for для реализации медленного старта и медленного останова двигателя. В общем всё не сложно: бери готовое и вставляй под свои "нужды". Остановиться хотел лишь на одном важном моменте — при компиляции, библиотеки Qb_PLAY и IRremote использовали один и тот же таймер, по совету с Амперки в библиотеке по пути IRremote\IRremoteInt.h изменил вот эти строки у Atmega 328:

#define IR_USE_TIMER1   // tx = pin 9
#define IR_USE_TIMER2    // tx = pin 3

то есть первую раскомментировал, а вторую закомментировал. Теперь всё работало как надо.

Ещё один нюанс: ШИМ с выхода контроллера имеют частоту 490 Гц, так что при медленном раскручивании моторчика — то есть плавном старте — начинается приличный гул. Так вот, повысить частоту можно следующей вставкой в Setup:

TCCR0B = TCCR0B & 0b11111000 0x01; // частота 62500 кГц для 5 и 6 выхода ARDUINO.

Но и тут не всё гладко, на TCCR0B (Таймер 0) завязаны все основные функции времени в Arduino: то есть, если вы измените этот таймер, такие функции как Delay(), Millis() и т.п. будут продолжать работать, но в другом масштабе времени (быстрее или медленнее). (спасибо сайту KAZUS). Я эту тему прошляпил, и уже развёл плату — пришлось сокращать время в счётчике. Остальные таймеры не завязаны на Delay(), Millis() их изменение не повлияет на код.

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

Вот собственно плата:

Дальше переношу свой код Atmeg-у с записанным бутлоадером вот по этой распиновке:

Вот так зашивается бутлоадер в контроллер голый:

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

Назначение кнопок управления

Итоги работы

ИГРУШЕЧНЫЙ ПОЕЗД НА АРДУИНО

Из минусов — последовательный алгоритм работы контроллера не даёт одновременно управлять поездом и переключаться дополнительными (продолжительными опциями — проигрывание мелодии), наверное можно как-то, но я пока не осилил. Нет защитных диодов от переполюсовки, да и вообще не предусмотрел стабилизированное питание контроллера — это тоже минус. Ну а в общем всё слушается ПДУ (причём с любого угла) бегает, моргает и т.д. С большим уважением — Тольяттинский Эмбеддер (1945)

   Форум

Оцените материал:

0 / 5. Рейтинг: 0

Может подскажете что улучшить?