DIY платформа для танка — Управление по Bluetooth + движения по линии

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