Невозможно заставить ультразвуковой датчик работать с контроллером двигателя.
Я только начал использовать Arduino Uno, не могу заставить работать ультразвуковой преобразователь, с платой контроллера двигателя выходное значение всегда равно нулю.
Просто чтобы убедиться, что я говорю о правильной теме: Я использовал это руководство, чтобы попытаться заставить его работать (посмотрите на картинку, как я соединил детали).
А это мой код:
#define trigPin A4//Подключите Trig к порту 8
#define echoPin A5// Подключаем Echo к порту 7
#include <AFMotor.h>
//SMARS Demo 2 с линейным датчиком
AF_DCMotor R_motor(2); // определяет правый вывод двигателя
AF_DCMotor L_motor(1); // определяет вывод левого двигателя
int lmotorpin1 = 3;
int lmotorpin2 = 5;
int rmotorpin1 = 6;
int rmotorpin2 = 9;
int distancecm = 0;
//const int trigPin = 18;
//const int echoPin = 19;
// определяет переменные
long duration;
int distance;
void setup() {
Serial.begin(9600); // настраиваем последовательную библиотеку на скорости 9600 бит/с
//изменяет следующие значения, чтобы робот двигался как можно прямо
L_motor.setSpeed(200); // устанавливает скорость двигателя L
R_motor.setSpeed(140); // устанавливает скорость двигателя R
R_motor.run(RELEASE); //включаем двигатель L
L_motor.run(RELEASE); //включаем двигатель R
pinMode(trigPin, OUTPUT); // Устанавливает trigPin как выход
pinMode(echoPin, INPUT); // Устанавливает echoPin как вход
}
void loop() {
Serial.println(trigPin);
Serial.println(echoPin);
distancecm = mdistance();
if (distance < 5) {
L_motor.run(BACKWARD); //двигает мотор L вперед
R_motor.run(FORWARD); //двигает мотор L вперед
// задержка(1000);
// L_motor.run(ВПЕРЕД); //двигает мотор L вперед
// R_motor.run(ВПЕРЕД); //двигает двигатель L вперед
// задержка(1000);
}
else {
L_motor.run(FORWARD); //двигает двигатель L вперед
R_motor.run(FORWARD); //двигает двигатель L вперед
}
}
int mdistance()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Устанавливает trigPin в состояние HIGH на 10 микросекунд
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Считывает echoPin, возвращает время прохождения звуковой волны в микросекундах
duration = pulseIn(echoPin, HIGH);
Serial.print("Duration: ");
Serial.println(duration);
// Расчет расстояния
distance = duration * 0.034 / 2;
// Печатает расстояние на последовательном мониторе
Serial.print("Distance: ");
Serial.println(distance);
}
Как видите, я пробовал разные номера контактов, но всегда 0....
Как вы думаете, что может быть не так?
Двигатели работают. Контроллер двигателя: KEYES L293D Щит управления двигателем Датчик: Ультразвуковой Рейнджер V2.0
@11alex11, 👍0
Обсуждение1 ответ
Номера контактов 0 и 1 зарезервированы для последовательного монитора, который вы используете на плате.
Функция int mdistance()
должна возвращать целое число.
Вы также, похоже, не установили контакты двигателя как ВЫХОД.
Кажется, это скорее комментарий, чем фактическое решение проблемы ОП., @MichaelT
Где контакты 0 и 1? Я не понимаю, почему это проблема, потому что моторы работают. Проблема в ультразвуковом датчике. Пожалуйста, объясните., @11alex11
номер двигателя не является номером контакта, @Juraj
- Какое максимальное количество датчиков можно использовать на одном устройстве Aurdino?
- Какие бы компоненты мы ни подключали к Arduino, их земля и контактное соединение 5 В должны быть одинаковыми?
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- Как подключить более 10 датчиков к Arduino uno r3
- Как использовать два ультразвуковых датчика для управления двигателем 5 Вольт?
- Чтение датчика давления от 4 до 20 мА с использованием uno
а моторы работают? у тебя есть щит?, @Juraj
какой датчик вы используете?, @MichaelT
Добавил информацию в основной пост в конце, @11alex11
в описании вашей проблемы написано: "Рейнджер не работает с контроллером мотора, но работает без контроллера мотора"..... вот что происходит?, @jsotola
Без контроллера мотора не проверял., @11alex11