вопрос по ультразвуковому датчику расстояния

Тема в разделе "Arduino & Shields", создана пользователем angabanga, 17 сен 2016.

  1. angabanga

    angabanga Нерд

    [​IMG]

    int trigPin = 11; //
    int echoPin = 12;

    long duration, cm, inches;

    void setup() {

    //Serial Port begin

    Serial.begin (9600);

    //Инициализирум входы и выходы

    pinMode(trigPin, OUTPUT);

    pinMode(echoPin, INPUT);

    }

    void loop()

    {

    // Датчик срабатывает и генерирует импульсы шириной 10 мкс или больше

    // Генерируем короткий LOW импульс, чтобы обеспечить «чистый» импульс HIGH:

    digitalWrite(trigPin, LOW);

    delayMicroseconds(5);

    digitalWrite(trigPin, HIGH);

    delayMicroseconds(10);

    digitalWrite(trigPin, LOW);

    // Считываем данные с ультразвукового датчика: значение HIGH, которое

    // зависит от длительности (в микросекундах) между отправкой

    // акустической волны и ее обратном приеме на эхолокаторе.

    pinMode(echoPin, INPUT);

    duration = pulseIn(echoPin, HIGH);

    // преобразование времени в расстояние

    cm = (duration/2) / 29.1;

    inches = (duration/2) / 74;

    Serial.print(inches);

    Serial.print("in, ");

    Serial.print(cm);

    Serial.print("cm");

    Serial.println();

    delay(250);

    }
    Ребят, у меня вопрос по программе для этого датчика. все написал как тут- работает, но есть одна не понятная вещь. а именно строчка duration = pulseIn(echoPin, HIGH); ведь на сколько я могу знать данная команда ждет когда прийдет ХАЙ и только тогда включает таймер и когда он закончится просто вернет время импульса(10), а не длительность того, какое время он провел в полете и отражаясь. по мне логично в этой команде было бы поставить ЛОУ, так как мы бы посчитали время от низкого уровня сигнала, до прихода нашего ХАЙ ипульса. если кто-то понял вопрос, объясните простым языком, пожалуйста. Заранее спасибо
     
  2. Onkel

    Onkel Гуру

    импульс выхода - это уже и есть время полета туда/сюда, так что длительность этого импульса и есть расстояние. В сенсоре есть своя логика.
     
    angabanga нравится это.
  3. angabanga

    angabanga Нерд

    спасибо. то есть, грубо говоря, мы отправляем сигнал, а по приходу он сам шириной импульса нам расстояние дает, которое мы переводим в сантиметры?
     
  4. Onkel

    Onkel Гуру

    вы отправляете сигнал, датчик сам формирует уз импульс, и во время излучения этого импульса выставляет на выходе 1, а в момент прихода отражения выставляет ноль. Таким образом, временная ширина импульса строго пропорциональна длине. Это в нулевом приближении. некоторые датчики учитывают зависимость скорости звука от температуры, и ширина импульса уже подкорректирована под данную температуру. Но надо конкретный датчик смотреть, есть у него коррекция или нет.
     
    angabanga нравится это.
  5. angabanga

    angabanga Нерд

    только что нашел такое объяснение.
    Сенсор излучает короткий ультразвуковой импульс (в момент времени 0), который отражается от объекта и принимается сенсором. Расстояние рассчитывается исходя из времени до получения эха и скорости звука в воздухе.
    Т.о., сенсор получает сигнал эха, и выдаёт расстояние, которое кодируется длительностью электрического сигнал на выходе датчика (Echo).
    Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс.
    Если на сигнальный пин (Trig) подаётся импульс длительностью 10 мкс, то ультразвуковой модуль будет излучать восемь пачек ультразвукового сигнала с частотой 40кГц и обнаруживать их эхо. Измеренное расстояние до объекта пропорционально ширине эха (Echo) и может быть рассчитано по формуле, приведённой на графике выше.
    Документация на сенсор, так же указывает, что если никаких препятствий не обнаружено, то на выходе будет сигнал с длительностью 38ms.



    тоесть датчик сам замеряет расстояние, а нам просто выдает импульс в микросекунды, которые мы переводим в сантиметры или дюймы по формуле