Оглавление
Здравствуйте любители электроники! Хотел сделать робота и вот представилась возможность, пусть просто но пока такой. Поезд имел радиоуправление приёмник-передатчик 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)










