Ультразвуковой датчик показывает странные показания
Когда я запускаю тестовый код в библиотеке 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");
}
Скажите мне, что здесь не так
Моторный щит, использованный ниже Проводка датчика подключается к Arduino под экраном
1 ответ
Лучший ответ:
Попробуйте
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
- Объединение 2 датчиков в один код с 1 кнопкой
- Попытка использовать решение для обнаружения кранов с помощью ADXL345 с Arduino
- Библиотека клавиатуры не работает или я где-то ошибаюсь
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- Как подключить более 10 датчиков к Arduino uno r3
- Как использовать два ультразвуковых датчика для управления двигателем 5 Вольт?
замените весь цикл
if-else
наSerial.print(distance);
.... что он теперь печатает?, @jsotolaБиблиотека NewPing возвращает ноль, если эхо не обнаружено. А 2 см может быть мало. Если я правильно помню, это минимальное расстояние, которое могут обнаружить эти датчики., @chrisl
да, я попробовал Serial.print и немного прочитал. Но теперь она достигает 1000см :|, @Sultan Morbiwala