Чистое расстояние: медиана из пяти
Одиночные «выбросы» дальномера отбрасываются: берём средний по величине отсчёт.

Что понадобится
Как подключить
| Откуда | Куда | |||
|---|---|---|---|---|
| Arduino Uno | 5V | → | HC-SR04 | VCC |
| Arduino Uno | GND | → | HC-SR04 | GND |
| Arduino Uno | D9 | → | HC-SR04 | TRIG |
| Arduino Uno | D10 | → | HC-SR04 | ECHO |
Скетч
// Ультразвук иногда возвращает мусор: эхо ушло не туда. Средний по
// величине из пяти измерений (медиана) такие выбросы просто выкидывает.
const int TRIG = 9;
const int ECHO = 10;
long measureCm() {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
return pulseIn(ECHO, HIGH) / 58;
}
long medianCm() {
long v[5];
for (int i = 0; i < 5; i++) { v[i] = measureCm(); delay(30); }
for (int i = 0; i < 4; i++) { // сортировка пузырьком
for (int j = 0; j < 4 - i; j++) {
if (v[j] > v[j + 1]) { long t = v[j]; v[j] = v[j + 1]; v[j + 1] = t; }
}
}
return v[2];
}
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
}
void loop() {
Serial.print("расстояние ");
Serial.print(medianCm());
Serial.println(" см");
delay(300);
}
Коротко о детали: HC-SR04
Ультразвуковой дальномер: измеряет расстояние по времени, за которое возвращается эхо. На TRIG подают импульс 10 мкс, а длительность импульса на ECHO пересчитывают в сантиметры. Расстояние до препятствия задаётся двойным кликом по компоненту.
Ещё примеры с деталью «HC-SR04»
Попробуйте сами
Симулятор работает прямо в браузере: схему можно менять, код — править, а результат видно сразу. Бесплатно, без установки и регистрации.
Открыть «Чистое расстояние: медиана из пяти» в симуляторе