Arduino — Управление 2 DC-моторами через Bluetooth (Идеально для создания робота)
В этом руководстве я покажу вам, как управлять 2 DC-моторами через Bluetooth с помощью Android-приложения, созданного в MIT App Inventor 2. MIT App Inventor — это отличная платформа для начала разработки под Android.
В предыдущем руководстве (нажмите здесь, чтобы посмотреть тот проект) я управлял 1 DC-мотором с помощью приложения «BlueTerm». Это приложение справлялось с задачей, но оно не идеально для постоянной отправки различных команд удобным способом.
Приложение, которое вы собираетесь создать, идеально подходит для управления любым пином Arduino или для интеграции с вашим собственным робомобилем. Вы можете отредактировать это приложение под свои конкретные нужды.
Bluetooth-модуль HC-05
Для установления Bluetooth-связи между вашим смартфоном и Arduino вам нужен Bluetooth-модуль. В этом проекте используется Bluetooth-модуль HC-05 (как показано на рисунке ниже).
Этот Bluetooth-модуль работает с последовательными данными. Это означает, что Arduino отправляет информацию, а Bluetooth-модуль получает её через последовательный порт (и наоборот).
По умолчанию Bluetooth-модуль HC-05 работает на скорости передачи данных 9600 бод.
Создание Android-приложения
Android-приложение будет создано с помощью бесплатного веб-приложения MIT App Inventor. MIT App Inventor — отличное место для начала разработки под Android, поскольку он позволяет создавать простые приложения с помощью перетаскивания.
Для регистрации в MIT App Inventor вам нужен аккаунт Google, и вот страница входа: http://ai2.appinventor.mit.edu.
Нажмите здесь, чтобы скачать .aia файл, затем посмотрите видео ниже:
Если вы перейдёте на вкладку Projects, вы сможете загрузить .aia файл для этого проекта
В MIT App Inventor есть 2 основных раздела: дизайнер и блоки. Дизайнер позволяет добавлять кнопки, текст, экраны и редактировать общий внешний вид приложения.
Раздел блоков позволяет создавать пользовательскую функциональность для вашего приложения, чтобы при нажатии кнопок приложение действительно что-то делало с этой информацией.
Я рекомендую начать с этого проекта и использовать приложение без изменений.
Если вы хотите внести какие-либо изменения в приложение, когда закончите и захотите установить приложение на свой смартфон, перейдите на вкладку Build.
Вы можете сгенерировать QR-код, который можно отсканировать смартфоном и автоматически установить приложение на смартфон.
Или вы можете скачать .apk файл, подключить смартфон к компьютеру и переместить .apk файл на телефон.
Просто следуйте мастеру установки, чтобы установить приложение, и готово!
Код
Для этого проекта вам не нужно устанавливать какие-либо библиотеки Arduino. Поэтому просто скачайте или скопируйте следующий код в Arduino IDE и загрузите его на вашу плату Arduino. Убедитесь, что выбрана правильная плата и COM-порт.
/*
* created by Rui Santos, https://randomnerdtutorials.com
* Control 2 DC motors with Smartphone via bluetooth
*/
int motor1Pin1 = 3; // pin 2 on L293D IC
int motor1Pin2 = 4; // pin 7 on L293D IC
int enable1Pin = 6; // pin 1 on L293D IC
int motor2Pin1 = 8; // pin 10 on L293D IC
int motor2Pin2 = 9; // pin 15 on L293D IC
int enable2Pin = 11; // pin 9 on L293D IC
int state;
int flag=0; //makes sure that the serial only prints once the state
int stateStop=0;
void setup() {
// sets the pins as outputs:
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
pinMode(enable2Pin, OUTPUT);
// sets enable1Pin and enable2Pin high so that motor can turn on:
digitalWrite(enable1Pin, HIGH);
digitalWrite(enable2Pin, HIGH);
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
//if some date is sent, reads it and saves in state
if(Serial.available() > 0){
state = Serial.read();
flag=0;
}
// if the state is 'F' the DC motor will go forward
if (state == 'F') {
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
if(flag == 0){
Serial.println("Go Forward!");
flag=1;
}
}
// if the state is 'R' the motor will turn left
else if (state == 'R') {
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
if(flag == 0){
Serial.println("Turn LEFT");
flag=1;
}
delay(1500);
state=3;
stateStop=1;
}
// if the state is 'S' the motor will Stop
else if (state == 'S' || stateStop == 1) {
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
if(flag == 0){
Serial.println("STOP!");
flag=1;
}
stateStop=0;
}
// if the state is 'L' the motor will turn right
else if (state == 'L') {
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
if(flag == 0){
Serial.println("Turn RIGHT");
flag=1;
}
delay(1500);
state=3;
stateStop=1;
}
// if the state is 'B' the motor will Reverse
else if (state == 'B') {
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
if(flag == 0){
Serial.println("Reverse!");
flag=1;
}
}
//For debugging purpose
//Serial.println(state);
}
Примечание: перед загрузкой кода убедитесь, что пины TX и RX отключены от Bluetooth-модуля!
Необходимые компоненты
Arduino UNO — читайте Лучшие стартовые наборы Arduino
1x L293D IC
Вы можете использовать ссылки выше или перейти напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схемы
Следуйте схеме на рисунке ниже, чтобы собрать вашу цепь.
Запуск приложения
Если вы не сгенерировали .apk файл на предыдущем шаге, вы можете нажать здесь, чтобы скачать .apk файл (это файл установки Android-приложения). Переместите этот файл на свой смартфон и откройте его. Следуйте мастеру установки, чтобы установить приложение.
Включите Bluetooth на вашем смартфоне.
Нажмите на недавно установленное приложение. Нажмите кнопку «Connect», чтобы подключить ваше приложение к Bluetooth-модулю Arduino.
Теперь вы можете легко управлять 2 DC-моторами с помощью вашего приложения:
Смотрите видео-демонстрацию
Устранение неполадок:
Отсоедините кабели RX и TX при загрузке нового скетча на плату Arduino.
Люди часто подключают TX от Bluetooth-модуля к TX Arduino — это не будет работать. Убедитесь, что вы подключили: TX идёт к RX, а RX идёт к TX.
Если Bluetooth-модуль HC-04/HC-06/HC-05 запрашивает пароль, это «1234».
Заключение
Надеюсь, вы нашли это полезным.
Знаете друга, которому было бы интересно увидеть этот проект? Обязательно поделитесь этим проектом с ним!
Хотите узнать больше о создании приложений для Arduino? Получите доступ к нашему курсу: Android Apps for Arduino with MIT App Inventor 2.
P.S. Если у вас нет Bluetooth-модуля, прочитайте мой обзор HC-05 здесь.