Ультразвуковые датчики с двигателями 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); 
}

, 👍0

Обсуждение

Почему вы задерживаете цикл на 500 мс в конце каждой итерации?, @Enric Blanco


1 ответ


Лучший ответ:

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