Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Управление двумя DC-моторами при помощи Arduino и Bluetooth

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Управление двумя DC-моторами при помощи Arduino и Bluetooth[1]

Эта статья рассказывает, как через Bluetooth управлять двумя DC-моторами (от англ. «direct current», что значит «постоянный ток»; эти моторы также называют «моторами постоянного тока») при помощи платы Arduino и Android-приложения, созданного с помощью веб-сервиса MIT App Inventor 2 (к слову, это отличная платформа для тех, кто только пробует себя в разработке приложений для Android).

В одной из прошлых статей я рассказывал, как управлять одним DC-мотором при помощи приложения под названием «BlueTerm».

Оно со своей работой справлялось неплохо, но у него были проблемы с отправкой разных команд.

Но приложение, которое мы будем использовать в этом проекте, отлично подходит для того, чтобы управлять любым контактом Arduino, или даже для управления робо-автомобилем. Кроме того, вы можете модифицировать его под собственные нужды.

Bluetooth-модуль HC-05

Чтобы настроить Bluetooth-соединение между смартфоном и Arduino, вам понадобится Bluetooth-модуль, и в нашем проекте будет использоваться модель HC-05 (см. фото ниже):

Bluetooth-Module 1.jpg

Bluetooth-модуль работает через последовательные интерфейс. Это значит, что плата Arduino и Bluetooth-модуль получают и отправляют друг другу последовательные данные.

По умолчанию HC-05 коммуницирует на скорости 9600 бод.

Создание Android-приложения

Чтобы создать Android-приложение для проекта, мы воспользуемся бесплатным веб-сервисом MIT App Inventor. Этот сервис, помимо прочего, отлично подойдет тем, кто только начинает заниматься разработкой Android-приложений, т.е. позволяет создавать простые приложения, используя метод «drag-n-drop».

Чтобы зарегистрироваться в MIT App Inventor, понадобится аккаунт в Google. Залогиниваться нужно тут.

Кликните здесь, чтобы скачать файл «Arduino_Bluetooth_DC_Motors.aia», а затем следуйте инструкциям из видео ниже:

[Видео]

Чтобы загрузить файл, кликните в интерфейсе MIT App Inventor на Projects > Import Project (.aia) from my computer...

MIT App Inventor import 2.png

Две главные секции MIT App Inventor – это Designer и Blocks (переключение между ними осуществляется при помощи кнопок в правой верхней части экрана). Секция Designer позволяет добавлять кнопки, текст, меню и другими способами менять внешний вид приложения.

Android app arduino design mit app inventor 3.png

Секция Blocks позволяет создавать начинку приложения. То есть это, собственно, его «код» – то, какие функции выполняет приложение после того, как вы нажимаете на его кнопки.

Android app arduino blocks mit app inventor 4.png

Рекомендую продолжить этот проект, не внося в мое приложение никаких изменений.

Если вы все же хотите его отредактировать, то затем, чтобы сохранить внесенные изменения, а затем установить приложение на смартфон, щелкните по кнопке Build. Здесь вам будет доступно два варианта:

  • App (provide QR code for .apk). Этот вариант позволяет сгенерировать QR-код, который можно отсканировать, а затем автоматически загрузить приложение на смартфон.
  • App (save .apk to my computer). Этот вариант позволяет скачать APK-файл на компьютер, а затем загрузить его на смартфон.
MIT App Inventor build 5.png

Затем чтобы установить приложение на смартфон, просто следуйте инструкциям мастера установки.

Код

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

Также убедитесь, что выбрали правильные пункты в меню Инструменты > Плата (Tools > Board) и Инструменты > Порт (Tools > Port).

  1. /*
  2.  * Автор – Руи Сантос (Rui Santos), http://randomnerdtutorials.com
  3.  * Управление двумя моторами постоянного тока
  4.  * при помощи смартфона через Bluetooth.
  5.  */
  6.  
  7. int motor1Pin1 = 3;   // контакт 2 на микросхеме L293D
  8. int motor1Pin2 = 4;   // контакт 7 на микросхеме L293D
  9. int enable1Pin = 6;   // контакт 1 на микросхеме L293D
  10. int motor2Pin1 = 8;   // контакт 10 на микросхеме L293D
  11. int motor2Pin2 = 9;   // контакт 15 на микросхеме L293D
  12. int enable2Pin = 11;  // контакт 9 на микросхеме L293D
  13. int state;
  14. int flag=0;           // для того, чтобы функция Serial.println()
  15.                       // печатала «state» лишь единожды
  16. int stateStop=0;
  17. void setup() {
  18.     // выставляем эти контакты в режим OUTPUT:
  19.     pinMode(motor1Pin1, OUTPUT);
  20.     pinMode(motor1Pin2, OUTPUT);
  21.     pinMode(enable1Pin, OUTPUT);
  22.     pinMode(motor2Pin1, OUTPUT);
  23.     pinMode(motor2Pin2, OUTPUT);
  24.     pinMode(enable2Pin, OUTPUT);
  25.     // задаем контактам enable1Pin и enable2Pin
  26.     // значение HIGH, чтобы включить моторы:
  27.     digitalWrite(enable1Pin, HIGH);
  28.     digitalWrite(enable2Pin, HIGH);
  29.     // запускаем последовательную коммуникацию на скорости 9600 бод:
  30.     Serial.begin(9600);
  31. }
  32.  
  33. void loop() {
  34.     // если получили какие-нибудь данные, считываем их
  35.     // и сохраняем в переменной «state»:
  36.     if(Serial.available() > 0){    
  37.       state = Serial.read();  
  38.       flag=0;
  39.     }  
  40.     // если значение в «state» – это «F», двигаемся вперед:
  41.     if (state == 'F') {
  42.         digitalWrite(motor1Pin1, HIGH);
  43.         digitalWrite(motor1Pin2, LOW);
  44.         digitalWrite(motor2Pin1, LOW);
  45.         digitalWrite(motor2Pin2, HIGH);
  46.         if(flag == 0){
  47.           Serial.println("Go Forward!");  //  "Вперед!"
  48.           flag=1;
  49.         }
  50.     }
  51.    
  52.     // если значение в «state» – это «R», двигаемся влево:
  53.     else if (state == 'R') {
  54.         digitalWrite(motor1Pin1, HIGH);
  55.         digitalWrite(motor1Pin2, LOW);
  56.         digitalWrite(motor2Pin1, LOW);
  57.         digitalWrite(motor2Pin2, LOW);
  58.         if(flag == 0){
  59.           Serial.println("Turn LEFT");  //  "Поворачиваем ВЛЕВО!"
  60.           flag=1;
  61.         }
  62.         delay(1500);
  63.         state=3;
  64.         stateStop=1;
  65.     }
  66.     // если значение в «state» – это «S», останавливаем мотор:
  67.     else if (state == 'S' || stateStop == 1) {
  68.         digitalWrite(motor1Pin1, LOW);
  69.         digitalWrite(motor1Pin2, LOW);
  70.         digitalWrite(motor2Pin1, LOW);
  71.         digitalWrite(motor2Pin2, LOW);
  72.         if(flag == 0){
  73.           Serial.println("STOP!");  //  "СТОП!"
  74.           flag=1;
  75.         }
  76.         stateStop=0;
  77.     }
  78.     // если значение в «state» – это «L», двигаемся вправо:
  79.     else if (state == 'L') {
  80.         digitalWrite(motor1Pin1, LOW);
  81.         digitalWrite(motor1Pin2, LOW);
  82.         digitalWrite(motor2Pin1, LOW);
  83.         digitalWrite(motor2Pin2, HIGH);
  84.         if(flag == 0){
  85.           Serial.println("Turn RIGHT");  //  "Поворачиваем ВПРАВО!"
  86.           flag=1;
  87.         }
  88.         delay(1500);
  89.         state=3;
  90.         stateStop=1;
  91.     }
  92.     // если значение в «state» – это «B», двигаемся назад:
  93.     else if (state == 'B') {
  94.         digitalWrite(motor1Pin1, LOW);
  95.         digitalWrite(motor1Pin2, HIGH);
  96.         digitalWrite(motor2Pin1, HIGH);
  97.         digitalWrite(motor2Pin2, LOW);
  98.         if(flag == 0){
  99.           Serial.println("Reverse!");  //  "Назад!"
  100.           flag=1;
  101.         }
  102.     }
  103.     //  для отладочных целей:
  104.     //  Serial.println(state);
  105. }

Примечание: Перед загрузкой кода убедитесь, что контакты TX и RX отключены от Bluetooth-модуля.

Необходимые компоненты

  • Одна плата Arduino
  • Один Bluetooth-модуль HC-04, HC-05 или HC-06
  • Одна микросхема L293D
  • Два DC-мотора
  • Одна макетная плата
  • Провода-перемычки
Arduino – Control 2 DC Motors Via Bluetooth (Perfect To Build a Robot) parts 6.jpg

Схема

Подключите эти компоненты друг к другу согласно схеме ниже:

DC-motor-Schematics.jpg
Arduino – Control 2 DC Motors Via Bluetooth (Perfect To Build a Robot) dc 7.jpg

Запуск приложения

Если вы так и не сгенерировали APK-файл (это файл, с помощью которого приложение устанавливается на смартфон), его можно скачать отсюда. Затем загрузите его на смартфон и следуйте инструкциям мастера установки.

Далее включите на смартфоне Bluetooth и кликните по иконке только что установленного приложения. Открыв приложение, кликните по кнопке Connect, чтобы подключить его к Bluetooth-модулю.

Готово! Теперь вы можете управлять моторами при помощи кнопок в приложении:

Android app 2d motors 8.png

Посмотреть на проект в действии можно тут:

[Видео]

См.также

Внешние ссылки

  1. randomnerdtutorials.com - Arduino – Control 2 DC Motors Via Bluetooth (Perfect To Build a Robot)