Ультразвуковой датчик показывает странные показания

Когда я запускаю тестовый код в библиотеке Newping для ультразвукового датчика SR04, он работает правильно, но когда я запускаю реальный код для робота, избегающего препятствий, он каждый раз показывает 0 см. Это означает, что проводка правильная, но в моем коде ниже что-то не так

#include <NewPing.h>
#include <AFMotor.h> //импортируем вашу библиотеку Motor Shield

#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

AF_DCMotor motor1(1, MOTOR12_64KHZ); // настраиваем моторы.
AF_DCMotor motor2(2, MOTOR12_8KHZ);

int distance;

void setup() {
Serial.begin(115200);
}

void loop() {
  delay(50);
  distance = sonar.ping_cm(); // запускаем сканирование
  delay(20);
  if (distance < 2) {   
   Serial.println("Close Obstacle detected!" );
   Serial.println("Obstacle Details:");
   Serial.print("Distance From Robot is " );
   Serial.print(distance);
   Serial.print( " CM!");// распечатываем расстояние в сантиметрах.
   delay(10);
   Serial.println (" The obstacle is declared a threat due to close distance. ");
   Serial.println (" Turning !");
   motor1.run(FORWARD);  // Поворачивайте, пока впереди есть препятствие.
   motor2.run(BACKWARD);

}
  else {
   Serial.println("No obstacle detected. going forward");
   delay(15);
   motor1.run(FORWARD); //если впереди нет препятствий, иди вперед!
   motor2.run(FORWARD);
  }
}

Тестовый код сработавшего датчика:-

#include <NewPing.h>

#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
  Serial.begin(115200);
}

void loop() {
  delay(50);
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm());
  Serial.println("cm");
}

Скажите мне, что здесь не так

используется экран двигателя от dk Electronics

Моторный щит, использованный ниже Проводка датчика подключается к Arduino под экраном

, 👍0

Обсуждение

замените весь цикл if-else на Serial.print(distance); .... что он теперь печатает?, @jsotola

Библиотека NewPing возвращает ноль, если эхо не обнаружено. А 2 см может быть мало. Если я правильно помню, это минимальное расстояние, которое могут обнаружить эти датчики., @chrisl

да, я попробовал Serial.print и немного прочитал. Но теперь она достигает 1000см :|, @Sultan Morbiwala


1 ответ


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

0

Попробуйте

unsigned int distance;

Вместо

int distance;

Это также может быть щиток двигателя, в котором используются те же контакты, что и в ультразвуковом датчике.

,

Спасибо, но это не сработало. Помогло использование Serial.print() вместо переменной расстояния., @Sultan Morbiwala

А вы уверены, что ваш моторный щит не конфликтует? Какая это марка/модель?, @Andre Courchesne

это как в dk Electronics. Теперь датчик снова показывает 0 см, так что я думаю, вы правы. Я проложил проводку датчика под экраном, хороший ли это метод?, @Sultan Morbiwala

Не уверен насчет проводки, не видя ее. Я бы порекомендовал попробовать ваш эскиз без моторного щита., @Andre Courchesne

Я попробовал тестовый код без экрана двигателя, и он сработал, но не работает с экраном двигателя., @Sultan Morbiwala

Согласно этой схеме контакты 11 и 12 используются моторным щитом: https://forum.arduino.cc/index.php?action=dlattach;topic=211225.0;attach=71519, @Andre Courchesne

Вы можете попробовать использовать A0 и A1 для датчика. По идее должно работать. Если нет, вам придется использовать Arduino с большим количеством входов/выходов, например Arduino Mega 2560., @Andre Courchesne