Датчик HC-SR04 действует безумно - PullRequest
0 голосов
/ 11 мая 2018

Я довольно новичок в Arduino, но я пытаюсь учиться, но в настоящее время у меня проблема. Выход при стационарном датчике показывает скачки расстояния. Это неисправный датчик или проблема в коде?

Выход:

Distance: 3540.65
Distance: 25.93
Distance: 3528.96
Distance: 25.42
Distance: 3550.34
Distance: 25.88
Distance: 3536.78
Distance: 36.27
Distance: 3501.94
Distance: 25.42
Distance: 28.37
Distance: 3531.37
Distance: 24.51
Distance: 26.99

Код:

  * HC-SR04 example sketch
  *
  * https://create.arduino.cc/projecthub/Isaac100/getting-started-with-the- hc-sr04-ultrasonic-sensor-036380
  *
  * by Isaac100
  */

const int trigPin = 9;
const int echoPin = 10;

float duration, distance;

void setup() {
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 Serial.begin(9600);
}

void loop() {
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);

 duration = pulseIn(echoPin, HIGH);
 distance = (duration*.0343)/2;
 Serial.print("Distance: ");
 Serial.println(distance);
 delay(100);
}

1 Ответ

0 голосов
/ 14 мая 2018

Я думаю, что вы нашли ответ на свой вопрос, но в будущем я бы порекомендовал вам отфильтровать эти значения. Возможно, подумайте о простом медианном фильтре или фильтре нижних частот. Медианный фильтр: Возьмите последние значения X (например, 5) и поместите их в массив. Сортировать массив. Получить значение массива [(X / 2)]. Теперь это немного более полезно. Вы можете динамически добавлять данные, поэтому вам не нужно накапливать 10 из них и затем фильтровать их. Например, если вы получаете новое измерение A:
A - новое значение измерения
X - количество данных для накопления (сила фильтрации)
0 <= i <X <br> массив [X] - массив с накопленными данными

массив [i] = A;
я ++;
если (i == X) i = 0;

Все просто.

...