Данное устройство работает по следующему принципу: Сначала испускается звуковой щелчок, который отражается от препятствия и возвращается обратно к датчику. В зависимости от времени, которое понадобилось звуку на прохождения пути от датчика до препятствия и обратно, рассчитывается расстояние до препятствия. Такой дальномер имеет 4 вывода. Если смотреть с той стороны, с которой он изображен на картинке, то первый контакт слева – питание датчика (+5В), второй и третий – цифровые порты, посредством которых производиться отправка и прием звукового импульса, а четвертый – земля (GND).
Рисунок 12. Дальномер
Алгоритм работы с датчиком следующий:
- Отправка щелчка;
- Ожидание отраженного щелчка;
- Подсчет времени и перевод в единицы расстояния.
Отправка щелчка производится подачей короткого импульса (длительностью около 10 микросекунд) во второй вывод датчика (Trig). Отраженный щелчок можно будет считать в виде импульса с третьего вывода датчика (Echo). Далее остается подсчитать время и перевести в единицы расстояния.
Для программирования этого алгоритма потребуются 2 новые функции, которые еще не были рассмотрены. 1. delayMicroseconds(t);//Задержка на указанное количество микросекунд;2. pulseIn(Pin,State);//Ожидание и подсчет времени, которое понадобилось до появления импульса. Первый параметр – номер порта, в котором будет ожидаться импульс, второй – HIGH или LOW, означающее состояние порта, которое будет ожидать эта фунция.Функция, по работе с дальномером, может быть реализована следующим образом:
int dist(int echoPin, int trigPin){//Функция, определяющая расстояние с помощью дальномера pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); int duration; //Переменное, в которой будет считано расстояние до препятствия digitalWrite(trigPin, LOW); //Отправка импульса длительностью в 10 микросекунд delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); //Задержка на 10 микросекунд digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //Ожидание импульса и возвращение пройденного времени return(duration / 58); //Перевод времени в сантиметры и возврат расстояния} }