Машинка на радиоуправлении на базе ATtiny2313

Машинка на радиоуправлении на базе ATtiny2313В данной статье пойдёт речь о том как сделать машинку на радиоуправлении своими руками на базе микроконтроллера ATtiny2313. Другими словами — изобретаем велосипед, ибо по интернетам есть тонны примеров на Arduino и без Arduino. Несмотря на это, я тоже решил внести свою лепту.

Я не очень люблю работать с Arduino, так как не чувствуется сама идея работы с микроконтроллерами, всё спрятано в библиотеках и, если что-то нужно, просто скачиваешь нужную либу, устанавливаешь её и используешь, а как и что там в большинстве случаев остаётся тайной.

Для изготовления машинки, нам понадобится

  1. микроконтроллер ATtiny2313;
  2. готовое шасси вместе с двигателями (танк или двухколёсный кит);
  3. HC-11, HC-12, TB387 или любые доступные USART радио-модули — две штуки;
  4. L298 — модуль драйвера двигателей;
  5. Аккумуляторы 18650 Li-ion — две штуки;
  6. Коробка (бокс) под аккумуляторы 18650 (на 2 аккумулятора);
  7. Преобразователь USB-UART на базе CH340G или PL2303HX;
  8. USBasp v2.0 ISP программатор

Ссылки на Aliexpress на всё это добро вы найдёте в конце статьи.

Почему микроконтроллер ATtiny2313

Микроконтроллер ATTiny2313 улучшенный вариант старого микроконтроллера AT90S2313. Внутри у него 120 инструкций оптимизированных для программирования на языках высокого уровня, 32 регистра общего назначения, 2 килобайта флеш-памяти для программ, 128 байт EEPROM (энергонезависимая память) и 128 байт SRAM (оперативная память). Из периферии: один 8 битный таймер/счетчик, один 16 битный таймер/счетчик, четыре ШИМ канала, 2 из которых будут использованы для управления колёсами, аналоговый компаратор, Watchdog таймер, USI универсальный последовательный интерфейс и, самое главное для данного проекта, USART. Если фьюзы выставлены на работу от внешнего кварца, кварц должен быть установлен на частоту, не превышающей максимальную по даташиту, это 20МГц.

Все вышеперечисленные характеристики более чем достаточно для наших задач. К тому же ATTiny2313 не дорогой и доступный микроконтроллер, в отличии от Arduino.
ATTiny2313

Принцип работы программы на МК ATtiny2313

Сама программа состоит из 3-х классов (USART, Queue, CmdExecutor) и основного файла main.cpp, который содержит функцию main(). Класс USART отвечает за инициализацию протокола и получения данных, в нашем случае данные — это команды. После получения, команда добавляется, push(cmd), в очередь Queue. Класс Queue, он же очередь, имеет два метода push(cmd) и pop(cmd). С помощью первого метода, как мы уже сказали, добавляем команды в очередь, а вторым, соответственно берём первую команду из очереди. В функции main() и проверяется если в очереди есть команды. Если команда нашлась main() берёт её и передаёт классу CmdExecutor, он же исполнитель команд, выполняет её — execute(cmd).
Машинка на радиоуправлении на базе ATtiny2313 (Диаграмма последовательности)

Для чего нужна была очередь команд, нельзя было просто выполнять команды сразу после получения, а не тратить время и ресурсы не очень-то и мощного ATtiny2313? Да, можно было, можно было вообще сделать этот пример из двух функций: main() и ISR(USART_RX_vect), и гуляй Вася. Однако не так, во первых, если одна команда выполняется очень много времени, а другая уже на подходе, то как тут быть? Во вторых, если микроконтроллер помимо команд выполняет ещё и другую работу, тоже очень важную, а мы эту работу будем остановить очень часто, тогда может выйти так, что результат будет не тот, да и команды не правильно могут выполнятся, особенно тогда, когда и команда и работа используют те же ресурсы.

Схема подключения компонентов

Машинка на радиоуправлении на базе ATtiny2313 (Схема)P1 (COMPIM) — COM порт, на реальной машине его нужно заменить на USART радио модуля, к примеру: HC-11, HC-12, TB387 или на любого доступного.
U1 (ATTINY2313) — микроконтроллер
U2 (L298) — модуль драйвера двигателей

Программа для управления

Программа для управления

Управлять «бэтмобиль» можно было и с помощью пульта. Однако написать программу на Джаве намного легче, чем взять паяльник в руки и пилить пульт, да и программу можно сделать с большим функционалом, что-то добавить, что-то отображать, другое сделать конфигурируемым и вообще — возможности почти безграничны.

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

Как установить Rx Tx в Java смотрим здесь, а пример приложения здесь.

Список команд

  • private static final byte PWM1 = '1'; — 1-я скорость;
  • private static final byte PWM2 = '2'; — 2-я скорость;
  • private static final byte PWM3 = '3'; — 3-я скорость;
  • private static final byte PWM4 = '4'; — 4-я скорость;
  • private static final byte PWM5 = '5'; — максимальная скорость;
  • private static final byte STOP = 'a'; — стоп машина;
  • private static final byte START = 'b'; — старт машина, включаются периферия и ШИМ, команда выполняется при включении машины;
  • private static final byte RIGHT_FORWARD = 'c'; — правая гусеница движется вперёд;
  • private static final byte LEFT_FORWARD = 'd'; — левая гусеница движется вперёд;
  • private static final byte RIGHT_BACK = 'e'; — правая гусеница движется назад;
  • private static final byte LEFT_BACK = 'f'; — левая гусеница движется назад;
  • private static final byte ALL_FORWARD = 'g'; — обе гусеницы движутся вперёд;
  • private static final byte ALL_BACK = 'h'; — обе гусеницы движутся назад;
  • private static final byte LEFT_STOP = 'i'; — левая гусеница остановлена;
  • private static final byte RIGHT_STOP = 'j'; — правая гусеница остановлена;
  • private static final byte STOP_ALL = 'k'; — обе гусеницы остановлены;

Управление

  1. 5 скоростных режимов (кнопки от 1 до 5);
  2. Движение вперёд — обе гусеницы движутся вперёд (↑↑), нажата стрелка вверх (↑);
  3. Движение назад — обе гусеницы движутся назад (↓↓), нажата стрелка вниз (↓);
  4. Движение вперёд и направо — правая гусеница остановлена, левая движется вперёд (↑■), нажаты стрелки вверх и направо(↑→);
  5. Движение вперёд и налево — левая гусеница остановлена, правая движется вперёд (■↑), нажаты стрелки вверх и налево (←↑);
  6. Движение назад и направо — правая гусеница остановлена, левая движется назад (↓■), нажаты стрелки вниз и направо (↓→);
  7. Движение назад и налево — левая гусеница остановлена, правая движется назад (■↓), нажаты стрелки вниз и налево (←↓);
  8. Движение по кругу по часовой — левая гусеница движется назад, правая движется вперёд (↓↑), нажата стрелка налево (←);
  9. Движение по кругу против часовой — правая гусеница движется назад, левая движется вперёд (↑↓), нажата стрелка направо (→);

Вывод на консоль

После нажатия стрелок в консоли появятся знаки, указывающие движение машины/танка:

↑↑
■■
↓↑
■■
↑↓
■■
↓↓
■■
↑↑
■↑
↑↑
↑■
↑↑
■■
↓↓
■↓
↓↓
↓■
↓↓
■■

Настройки программы

Выход из программы: USART->Exit или Alt-F4;

Программа для управления

Подключение: USART->Connect или Ctrl+Alt-C и выбираем COM порт;Программа для управления

Настройка скорости: USART->Baud или Ctrl+Alt-B и выбираем скорость передачи данных, по умолчанию 9600, такаяже установлена и в прошивке. Настроить следует перед тем, как подключиться;Программа для управленияНастроить можно число стоп битов и число битов данных, но в нашем случае их лучше оставить 1 и 8 соответственно.

Код программы для ATtiny2313

Программа для ATtiny2313 написана на C++, а проект сделал в Eclipse C++. Как настроить Eclipse C/C++ для программирования AVR микроконтроллеров смотрите здесь.

main.cpp

Queue.h

Queue.cpp

CmdExecutor.h

CmdExecutor.cpp

USART.h

USART.cpp

Исходники и Java приложение

Проект на C++: ATtiny2313_Car — C++.zip
Проект на Java : ATtiny2313_Car — Java.zip
Java приложение: ATiny2313_Car-1.0.0.jar.zip

Маленькое видео

Купить на AliExpress

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *