Ультразвуковые датчики с двигателями 12v не работают! (АДРУИНО)
хорошо... поэтому я использую четыре мотора на 12 В и один ультразвуковой датчик с моторным щитом... и получаю странные результаты... в моем коде у меня это так, когда расстояние до объекта меньше 4 см, он будет двигаться назад, а когда что-то не на 4 см впереди робота, он пойдет вперед... просто! но колеса с левой стороны моего робота остановятся! и просто ничего не делать!
Самое странное в этом то, что когда я делаю какой-то код, ПРОСТО перемещая колеса вперед и назад, колеса будут работать СОВЕРШЕННО нормально. и когда я использую какой-то код ТОЛЬКО для датчиков... он отлично работает! но вместе... это делает все эти странные вещи.
это щит, который я использую: https://www.pololu.com/product/2507
Если я пропустил какую-либо информацию, которая вам нужна, дайте мне знать, и я свяжусь с вами. Я новичок в Arduino, поэтому я очень запутался...
код.
#include "DualVNH5019MotorShield.h"
DualVNH5019MotorShield md;
#define trigPin 7
#define echoPin 8
void setup() {
md.init(); //устанавливаем код колеса
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
// Это проверка датчика, если что-то находится в пределах досягаемости!
if (distance < 4){
Serial.println("in range");
md.setM1Speed(100);
md.setM2Speed(-100);
}
else {
Serial.println("not in range");
md.setM1Speed(-100);
md.setM2Speed(100);
}
if (distance >= 200){
Serial.println("!");
}
else {
Serial.print(distance);
Serial.println(" cm");
}
Serial.println(distance);
delay(500);
}
@Max, 👍0
Обсуждение1 ответ
Лучший ответ:
TLDR: измените свой проект (и программу, и подключение), чтобы использовать ультразвуковой датчик на любых двух контактах 3,5,11, и он должен работать.
Вы используете контакты 7 и 8
для ультразвука.
В то же время вы используете щит https://www.pololu.com/product/2507 для двигателей, но если вы посмотрите на описание шилда на картинке Двойной шилд драйвера VNH5019 с Arduino (шилд и Arduino питаются отдельно).
https://a.pololu-files.com/picture/0J3753.1200.png?5877a2053bf73d6dbb43d10e7d268ce5
Вы увидите, что экран использует pin 7
как M2INA
и pin 8
как M2PINB
Поэтому в каждом цикле вы нажимаете M2INA
(trigPin
) НИЗКИЙ, затем ВЫСОКИЙ, затем НИЗКИЙ, затем ждете, пока датчик не запишет ВЫСОКИЙ уровень в M2INB
( echoPin
) только для немедленной отправки импульсов ШИМ как на trigPin
(M2INA
), так и на echoPin
(M2INB
) с помощью команд
md.setM1Speed(100);
md.setM2Speed(-100);
Это не может работать так, как вы ожидаете.
Вы должны использовать другие контакты (неиспользуемые защитным экраном) для ультразвукового датчика. Предлагаю объявить
#define trigPin 3
#define echoPin 5
и соответствующим образом подключите к нему ультразвуковой датчик.
(Вы также можете использовать контакт 11, если хотите. Я бы не рекомендовал контакт 13, так как к нему подключен светодиод Arduino, который также используется загрузчиком, поэтому вы можете перепутать датчик, а также контакты 1 и 2, поскольку они используются Serial (и USB).Также вы можете использовать «аналоговые контакты» A2..A5 в качестве цифровых контактов, но это может вас немного смутить (AVR может использовать «аналоговые» контакты как «цифровые», но многие новички так и делают). не похожи на такие конструкции, как "digitalWrite(A2)", "digitalRead(A3)").
Также имейте в виду, что A4 и A5 используются для связи I2C, если вы будете использовать I2C позже в проекте.
это работает сейчас! Большое спасибо! Я впервые пользуюсь этим сайтом, и он спас мне жизнь :) спасибо!!!!!! Я пробовал 3 и 5, и это не сработало... Я пробовал 1 и 0, и это сработало отлично! ваш умный XD спасибо., @Max
Хорошо, что теперь это работает :) Можете ли вы пометить это как ответ?, @gilhad
Думаю, я сделал это. Я нажал галочку и кнопку со стрелкой вверх., @Max
Возможно, потребовалось некоторое время, чтобы распространиться по всей системе :), @gilhad
- Вопрос о различных способах подключения платы драйвера двигателя L298N к Arduino и двигателям и их питания.
- Как заставить сервопривод вращаться на угол больше 180°
- Почему Adafruit motor shield не крутит моторы?
- Как управлять 4 двигателями постоянного тока с помощью Arduino?
- Как соединить L293D и MPU6050 для совместной работы?
- Привод двигателя работает только в одну сторону
- Управление серводвигателем с помощью сенсорного датчика
- Как подключить двойной редуктор Tamiya к Arduino Uno?
Почему вы задерживаете цикл на 500 мс в конце каждой итерации?, @Enric Blanco