Получение 0 см от ультразвукового датчика, когда ничего нет впереди

Мой ультразвуковой датчик (HC-SR04) возвращает следующие типы значений, когда перед ним ничего нет:

Ping: 144cm
Ping: 0cm
Ping: 0cm
Ping: 0cm
Ping: 105cm
Ping: 105cm
Ping: 94cm
Ping: 0cm
Ping: 378cm
Ping: 0cm
Ping: 0cm
Ping: 0cm
Ping: 0cm
Ping: 0cm
Ping: 0cm
Ping: 106cm
Ping: 106cm
Ping: 0cm
Ping: 0cm
Ping: 0cm
Ping: 106cm
Ping: 250cm
Ping: 0cm
Ping: 108cm
Ping: 0cm
Ping: 108cm
Ping: 0cm

Я не могу понять, почему я получаю 0 см. Это значение имеет решающее значение в программе, которую я использую. Вот тестовый код, который дает мне такой вывод:

#include <NewPing.h>

#define TRIGGER_PIN  A5
#define ECHO_PIN     A4
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN);

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

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

Из-за этих нулей мой робот делает неожиданные повороты.

Есть ли у вас идеи, почему это может произойти?

, 👍1


1 ответ


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

3

В документации к библиотеке NewPing указано:

Конструктор

NewPing sonar(trigger_pin, echo_pin [, max_cm_distance]);

и

max_cm_distance не является обязательным [по умолчанию = 500 см].

Затем:

sonar.ping_cm(); - Отправка пинга, возврат расстояния в сантиметрах или 0 (ноль), если в пределах установленного расстояния нет эха пинга

Поэтому, похоже, если перед вашим датчиком нет ничего ближе 500 см, эта библиотека возвращает 0 см. Возможно, это не лучший дизайн, но, по крайней мере, он раскрыт.

Таким образом, вам необходимо написать свой код таким образом, чтобы измерение в 0 см рассматривалось как отсутствие видимых препятствий; скорее как бесконечное измерение в см.

,

Библиотека определяет **NO_ECHO** как 0, поэтому для ясности проверьте sonar.ping_cm() == NO_ECHO., @Craig