Алгоритм работы простой: на вход Trig подается импульс с длительностью 10 микросекунды, после чего датчик посылает звуковой импульс на частоте 40кГц. После того, когда сигнал вернется обратно, ножка Echo устанавливается в единицу и по истечению времени, которое пропорционально времени отправки – получения импульса – устанавливается в ноль:
Зная скорость звука (340 м/с) и учитывая, что звук проходит два расстояния (до предмета и обратно) -получаем, что звук проходит 1 сантиметр за 58,8 микросекунд.
Нам остается настроить таймер, который будет запускаться по высокому уровню сигнала Echo и останавливаться после перехода уровня сигнала Echo с 1 в 0. Зная скорость счета таймера, можно высчитать расстояние которое прошел звук и как следствие расстояние до предмета. int echoPin = 11;
int trigPin = 12;
long duration=0;
long cm=0;
int temp[10]={0};// храним выборку измерений
int insert =0;
int j=0;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
for (int i=0;i<=9;i++){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
temp[i]=pulseIn(echoPin, HIGH);
}
for(int i=0;i<=9;i++){//сортировка
insert = temp[i];
j=i-1;
while((j>=0)and(temp[j]>insert)){
temp[j+1]=temp[j];
j--;
}
temp[j+1]=insert;
}
duration=0;
for(int i=2;i<=7;i++){
duration+=temp[i]/58,8; // преобразуем время в расстояние
}
cm = duration / 6;
Serial.print("cm=");
Serial.println(cm);
delay(500);
}
В случаи ошибки измерения или истечения времени ожидания, — функция выдает ноль.