Машина Arduino Bluetooth не отвечает
Когда я подключаю аккумулятор к сервоприводу L298n, он издает жужжащий звук, а моторы не реагируют на команды из мобильного приложения. Шум прекращается, когда я отключаю контакты in1, in2, in3, in4
Мой проект состоит в том, чтобы сделать руку робота и поместить ее на колеса, а затем управлять всем через Bluetooth с помощью приложения «Arduino Bluetooth Control» от Giumig. Это мои материалы:
- 3 сервопривода MG996R
- 2 мотор-редуктора из комплекта 2WD
- Bluetooth-модуль HC-05
- Драйвер двигателя L298N
- Turnigy 2S, 7,4 В, 2200 мАч, литий-полимерный аккумулятор
- ARDUINO NANO (клон)
- Vivo 1801 (Android)
Я загрузил этот код:
#include <SoftwareSerial.h> // Программная библиотека TX RX для Bluetooth
#include <Servo.h> // сервобиблиотека
Servo myservo1, myservo2, myservo3; // имя сервопривода
int bluetoothTx = 0; // bluetooth tx на 10-контактный
int bluetoothRx = 1; // bluetooth rx на 11-контактный
int motorOne = 3;
int motorOne2 = 4;
int motorTwo = 5;
int motorTwo2 = 6;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
//начальный вывод двигателей
char command;
char Value;
void setup()
{
myservo1.attach(12); // подключаем сигнальный провод сервопривода к контакту 9
myservo2.attach(11);
myservo3.attach(10);
//Настройка последовательного USB-подключения к компьютеру
Serial.begin(9600);
//Настройка последовательного соединения Bluetooth с Android
bluetooth.begin(9600);
}
void loop()
{
while (bluetooth.available() > 0) {
Value = Serial.read();
Serial.println(Value);
}
if ( Value == 'F') {
// Робо-питомец бежит вперед
digitalWrite(motorOne, HIGH);
digitalWrite(motorOne2, LOW);
digitalWrite(motorTwo, HIGH);
digitalWrite(motorTwo2, LOW);
} else if (Value == 'B') {
//Робо-питомец бежит назад
digitalWrite(motorOne, LOW);
digitalWrite(motorOne2, HIGH);
digitalWrite(motorTwo, LOW);
digitalWrite(motorTwo2, HIGH);
} else if (Value == 'L') {
//Робо-питомец поверни налево
digitalWrite(motorOne, LOW);
digitalWrite(motorOne2, LOW);
digitalWrite(motorTwo, HIGH);
digitalWrite(motorTwo2, LOW);
} else if (Value == 'R') {
//Робо-питомец поверни направо
digitalWrite(motorOne, HIGH);
digitalWrite(motorOne2, LOW);
digitalWrite(motorTwo, LOW);
digitalWrite(motorTwo2, LOW);
} else if (Value == 'S') {
//Робо-остановка домашних животных
digitalWrite(motorOne, LOW);
digitalWrite(motorOne2, LOW);
digitalWrite(motorTwo, LOW);
digitalWrite(motorTwo2, LOW);
}
//Чтение с bluetooth и запись на usb serial
if(bluetooth.available()>= 2 )
{
unsigned int servopos = bluetooth.read();
unsigned int servopos1 = bluetooth.read();
unsigned int realservo = (servopos1 *256) + servopos;
Serial.println(realservo);
if (realservo >= 1000 && realservo <1180) {
int servo1 = realservo;
servo1 = map(servo1, 1000, 1180, 0, 180);
myservo1.write(servo1);
Serial.println("Servo 1 ON");
delay(10);
}
if (realservo >= 2000 && realservo <2180) {
int servo2 = realservo;
servo2 = map(servo2, 2000, 2180, 0, 180);
myservo2.write(servo2);
Serial.println("Servo 2 ON");
delay(10);
}
if (realservo >= 3000 && realservo <3180) {
int servo3 = realservo;
servo3 = map(servo3, 3000, 3180, 0, 180);
myservo3.write(servo3);
Serial.println("Servo 3 ON");
delay(10);
}
}
}
Я использую "Arduino Bluetooth control" от приложений Giumig для управления колесами робота:
https://play.google .com/store/apps/details?id=com.giumig.apps.bluetoothserialmonitor&hl=en&gl=US
Мы будем очень признательны за любую помощь или предложения!
@user17247218, 👍-1
Обсуждение2 ответа
Соответствующие части:
int bluetoothTx = 0; // bluetooth tx на 10-контактный
int bluetoothRx = 1; // bluetooth rx на 11-контактный
// ...
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
// ...
void setup()
{
Serial.begin(9600);
// ...
if(bluetooth.available()>= 2 )
{
unsigned int servopos = bluetooth.read();
unsigned int servopos1 = bluetooth.read();
Выводы 0 и 1, которые вы используете для SoftwareSerial
, являются контактами, которые Serial
использует в UNO для связи через соединение USB. к ПК. Они не могут работать таким образом одновременно. Это одна из причин, почему во многих примерах вы видели, как они работают с выводами 10 и 11.
Вы вряд ли столкнетесь с вариантом использования, когда имеет смысл иметь SoftwareSerial
на контактах, уже поддерживающих аппаратную последовательную поддержку... поскольку аппаратная поддержка уже есть и обычно это причина, по которой Повторное использование SoftwareSerial
связано с тем, что вы уже используете аппаратное последовательное соединение для некоторых других целей, например, для связи с ПК.
Используйте для SoftwareSerial
другие контакты, кроме контактов 0 и 1.
Или вы можете избавиться от SoftwareSerial
и использовать обычный Serial
на контактах 0 и 1 для модуля Bluetooth, но на практике это означает отказ от связи с ПК через USB.< /p>
Похоже, вы также путаете Serial
и SoftwareSerial
:
while (bluetooth.available() > 0) { // <--- проверка прогрмаммного последовательного порта
Value = Serial.read(); // <--- но затем прочитать аппаратный серийный номер?
Serial.println(Value);
}
SoftwareSerial
лучше вообще избегать. Вам будет намного лучше, если вы сможете использовать Arduino с двумя реальными последовательными соединениями, другим USB-последовательным портом и USART или двумя USARTS. Вы также можете использовать некоторые другие варианты последовательного подключения к модулю Bluetooth частично аппаратно, в зависимости от того, какие контакты у вас есть.
Спасибо, что нашли время ответить на мой пост. Возможно, я сделал что-то не так, так как это комбинация двух разных скетчей. Я внес изменения в код и разместил контакты Bluetooth TX и RX на 10 и 11. Я протестировал переключение «Serial» и «SoftwareSerial» в первом цикле while. Однако я до сих пор не получаю ответа. Вот ссылка на 2 скетча: https://javainstituteforadvancedtechnology.blogspot.com/2020/12/bluetooth-two-wheel-car-control-via.html https://docs.google.com/document/d/1_xsLIkV4i2YlnQrTLxNZni1Udhk-nQUQ/edit, @user17247218
Я решил свою проблему. Я дал SoftwareSerial
контакты 10 & 11, и я добавил выводы из enA и enB, что является одной из причин, по которой они не будут работать. Затем я заменил первый цикл while на:
while (bluetooth.available() > 2) {
Value = bluetooth.read();
Serial.println(Value);
}
включение подключения Bluetooth.
Спасибо тем, кто нашел время помочь и ответить на мою проблему
- Модуль Bluetooth HC-05 мигает красным светом - Arduino Uno
- Какова самая высокая скорость передачи данных, которая может работать между Android-устройством и Ардуино, подключенным к HC05?
- Отправка целого числа> 1 байта с Android на Arduino через последовательный порт
- Управление скоростью двигателя постоянного тока с батареей 9 В
- HC-05 подключение к Arduino
- Подключить кнопку к плате Bluetooth и общаться с Android
- Автомобиль-робот не работает
- Неверные данные, полученные в Arduino по bluetooth
напишите простой код, который запускает один двигатель в одном направлении... без bluetooth... без нескольких двигателей, @jsotola