Дальномер

Данное устройство работает по следующему принципу: Сначала испускается звуковой щелчок, который отражается от препятствия и возвращается обратно к датчику. В зависимости от времени, которое понадобилось звуку на прохождения пути от датчика до препятствия и обратно, рассчитывается расстояние до препятствия. Такой дальномер имеет 4 вывода. Если смотреть с той стороны, с которой он изображен на картинке, то первый контакт слева – питание датчика (+5В), второй и третий – цифровые порты, посредством которых производиться отправка и прием звукового импульса, а четвертый – земля (GND).

Рисунок 12. Дальномер

Алгоритм работы с датчиком следующий:

  1. Отправка щелчка;
  2. Ожидание отраженного щелчка;
  3. Подсчет времени и перевод в единицы расстояния.

Отправка щелчка производится подачей короткого импульса (длительностью около 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); //Перевод времени в сантиметры и возврат расстояния}
}