Чистое расстояние: медиана из пяти

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

Продвинутый уровень Arduino Uno C++
Схема подключения: Чистое расстояние: медиана из пяти
Схема в симуляторе. Нажмите «Открыть в симуляторе», чтобы запустить её и поменять.

Что понадобится

Как подключить

ОткудаКуда
Arduino Uno5V→HC-SR04VCC
Arduino UnoGND→HC-SR04GND
Arduino UnoD9→HC-SR04TRIG
Arduino UnoD10→HC-SR04ECHO

Скетч

// Ультразвук иногда возвращает мусор: эхо ушло не туда. Средний по
// величине из пяти измерений (медиана) такие выбросы просто выкидывает.
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»

Попробуйте сами

Симулятор работает прямо в браузере: схему можно менять, код — править, а результат видно сразу. Бесплатно, без установки и регистрации.

Открыть «Чистое расстояние: медиана из пяти» в симуляторе