DIY платформа для танка на Arduino — Управление по Bluetooth (мобильное приложение на Android App Invertor 2) + автономный режим — движение по линии на макетах для соревнований Робофеста.
В первой части мы рассмотрим Управление по Bluetooth (мобильное приложение на Android App Invertor 2)
Платформа с шасси для танка предоставлена сервисом ЖелеZona. Но вообще, продается в Banggood и стоит всего ~15$.
Приступим к созданию движущейся платформы. В качестве контроллера будем использовать Arduino Nano. Схема соединений
Вот как получилось
Управление танк будем осуществлять с планшета с ОС Android по Bluetooth. Нам нужна простая и понятная система создания кода для Android, наподобие системы Sctratch для Arduino, Будем использовать онлайн редактор для визуального программирования для Android App Invertor 2. Страница проекта – http://ai2.appinventor.mit.edu.
После авторизации (можно использовать профиль google) или регистрации попадаем в свой профиль программы, где можем создать новый проект.
Сначала в панети Design создаем интерфейс нашего приложения, перетаскивая на экран необходимые компоненнты. Кроме визуальных компонентов необходимо добавить 4 невизуальных:
- Bluetooth client из раздела Connectivity;
- Clock из раздела Sensors (для получения данных из Bluetooth c периодичностью, установленной в Clock);
- Notifer из UserInterface;
- OrientationSensor.
Для создания кода переходим в раздел Block.
Скачать данный проект можно архива прикрепленного в конце статьи — my_bluetooth_car_aia.zip
Создаем app приложение и загружаем его на телефон — my_bluetooth_car_apk.zip
Скриншоты работы приложения
Теперь скетч на Arduino
основной файл — tank_cxemnet_01.ino
// подключаем файл настроек #include "defines.h" // Подключаем библиотеку SoftwareSerial #include <SoftwareSerial.h> // Создаем последовательный порт на пинах HC05_RX, HC05_TX SoftwareSerial HC05(HC05_RX, HC05_RX); // RX, TX // Переменная для приема данных по Bluetooth. char hc05_input; // структура для сохранения настроек движения struct MOVE { int left1; // int left2; // int leftpwm; // int right1; // int right2; // int rightpwm; // int pr; // 1- ; 1- ; 1- ; 1- ; }; MOVE MOVE1={0,0,255,0,0,255}; //текущий режим int mode=STOP_MODE; // скорость изменения состояния unsigned long millis1=0; // данные, пришедшие из последовательного порта String inputString = ""; // строка пришла boolean stringComplete = false; //*** данные из HC05 // команда int command_serial=0; // данные int data_serial=0; // flag для режима 2 boolean flag2=true; // int orient_speed_left=0; int orient_speed_right=0; // настройки void setup() { // запуск последовательных портов Serial и HC05 Serial.begin(9600); HC05.begin(9600); // резервирование 30 bytes для inputString: inputString.reserve(50); // инициализация и установка в начальное состояние ini_motors(); set_motors(0,0,0,0,0,0); // старт!!! Serial.println("start"); } // основная программа void loop() { // проверка прихода строки из последовательного порта serialEventHC05(); if (stringComplete) { Serial.println(inputString); // парсинг строки if(!parse_string()) { Serial.println("ERROR"); } else { run_command(); } // очистить строку inputString = ""; stringComplete = false; } // изменение состояния моторов if(millis()-millis1>=MILLIS_M) { millis1=millis(); set_motors(MOVE1.left1,MOVE1.left2,MOVE1.leftpwm,MOVE1.right1,MOVE1.right2,MOVE1.rightpwm); } }
В продолжении мы рассмотрим автономный режим — движение по линии на макетах для соревнований Робофеста.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Плата Arduino | Arduino Nano 3.0 | 1 | ||||
Драйвер электродвигателей | L293 | 2 | ||||
Аккумулятор литиевый | 18650 | 2 | ||||
Отсек для 2-х аккумуляторов | 1 | |||||
Линейный регулятор | LM7805 | 1 | ||||
Конденсатор | 10мкФ 25В | 2 | ||||
Конденсатор | 0.1 мкФ | 1 | ||||