Простая Bluetooth машинка на Arduino

Широкое распространение и дешевизна платформы Arduino и различных робоплатформ позволило любителям создавать радиоуправляемые машинки на любой вкус. А широкое распространение смартфонов позволило использовать их в качестве контроллеров этих машинок. Главной проблемой для многих любителей Arduino является отсутствие опыта в программировании под Android. Сегодня я расскажу, как легко решить эту проблему, используя среду визуальной разработки android-приложений App Inventor 2.



Постройку любой машинки надо начинать с «железа», поэтому вкратце опишу, что использовал для своей машинки:
arduino nano
bluetooth module HC-05
Z-Mini Motor Sensor Shield L293D
2WD Motor Chassis
Конфигурация «железа» не играет большой роли в этом проекте, поэтому шасси, шилд и саму ардуино можно заменить на любые аналоги.

Теперь перейдем к созданию приложения для Android. App Inventor — среда визуальной разработки android-приложений, работает из браузера. Заходим на сайт, разрешаем доступ к своему аккаунту в Google, нажимаем кнопку «create» и создаем новый проект. В новом проекте методом «Drag and Drop» создаем 4 кнопки для выбора направления движения и одну для подключения к нашему bluetooth модулю. Примерно так:

image

Далее нажимаем на кнопку «Blocks» в правом верхнем углу и все тем же методом перетаскивания элементов создаем логику работы нашего android-приложения примерно вот так:

image

Теперь остается скомпилировать приложение, нажав на кнопку «Build».

С написанием скетча я думаю у любителей ардуино проблем не возникнет, скажу лишь, что можно взять выбрать из готовых скетчей, где управление машинкой осуществляется с компьютера по sireal порту. Я использовал этот
скетч
int val;
int IN1 = 4;
int IN2 = 7;
int EN1 = 6;
int EN2 = 5;

void setup()
{
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(EN1, OUTPUT);
pinMode(EN2, OUTPUT);

}
void loop()
{
if (Serial.available())
{
val = Serial.read();

// Задаём движение вперёд
if (val == 'W') // При нажатии клавиши «W»
{
// Выводы конфигурируются согласно работе Motor Shield'а
// Моторы крутятся вперед
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
}

// Задаём движение назад
if ( val == 'S')
{
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}

// Задаём движение вправо
if ( val == 'D')
{
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}

// Задаём движение влево
if ( val == 'A')
{
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}

// Стоп режим
// При отпускании клавиш в программе в порт шлется «T»
if ( val == 'T') // При нажатии клавиши «T»
{
// Выводы ENABLE притянуты к минусу, моторы не работают
digitalWrite(EN1, LOW);
digitalWrite(EN2, LOW);
}
}
}

Итак, вот такая у меня получилась машинка:



Те, кому нравится дизайн в приложениях, могут немного поменять. Подробно описывать как это делать не буду, там не сложно самому разобраться. Скажу лишь, что для этого в основном нужно использовать .png файлы, вместо .jpeg, которые не поддерживают прозрачный фон. Например, сделать такой дизайн за полчаса или час сможет любой неподготовленный человек:

image

P.S. Для тех, кто не сталкивался с разработкой приложений в App Inventor 2, я сделал более подробный гайд по разработке этого приложения (для просмотра нужно перейти на ютуб).



P.P.S. Сборник из более 100 обучающих материалов по ардуино для начинающих и профи тут.
Онлайн курс по ардуино на гиктаймс здесь.
UPD 1.02.2017: выложил приложение на play market.
Аналогичные проекты с другими шилдами здесь.
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 10
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      По моим ощущениям машинка реагирует мгновенно. Это видно на видео тоже.
      • 0
        Есть, но очень маленькая задержка, быстро привыкаешь.

        Вот подобный проект:



        P.S. Баг устранился обновлением софта для Android.
        • 0
          Тоже собирал машинку. На скорости передачи в 9600 задержек незаметно.
        • 0
          Во таких штуках мне всегда хотелось одного: когда машинка уехала далеко и сигнал потерян, чтобы она автоматически возвращалась назад к месту последнего получения сигнала.
          • 0
            или вообще запоминала чек поинты по критерию (время, поворот на 90 и больше) и могла обратно повторить маршрут
            • 0
              Код есть, можно творить что угодно, только не стоит заниматься чем-то типа «Скайнет».
              Скрытый текст
              image
            • +1
              Спасибо за статью, искал простой вариант реализации SPP андроид + ардуину.
              • 0
                Спасибо за статью!
                • 0
                  Накидал по вашему шаблону приложение в App Inventor, залил на телефон, запускаю, в тот момент, когда должен выпадать список устройств — выпадает черный экран, сразу думал что сделал что то не то, потом обнаружил — выключен bluetooth. Если вручную включить bluetooth в телефоне — то все хорошо, список вываливается. Пытался найти блок, который включает автоматом, но так и не нашел. Не подскажите, какой модуль поставить, чтобы включать bluetooth автоматом при обращении к нему?

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.