Ультразвуковой датчик HC-SR04 + Arduino Расчет?

0

Я использую этот код:

int trigPin = 7;
int echoPin = 8;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);
}

void loop() {
  int duration;
  int distance;
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin,LOW);
  duration = pulseIn (echoPin,HIGH);
  distance = (duration/2)/29.1;
  Serial.print("distance = ");
  Serial.println (distance);
  delay(500);
}

Я понимаю концепцию, что в этом случае мы посылаем импульс 1000 мкс, и мы ждем отраженного сигнала. Но я не понимаю, как в этом коде используется только ширина импульса отраженного сигнала.

Я обыскал вокруг, и они говорят, что ширина отраженного импульса пропорциональна пройденному расстоянию. Может кто-нибудь объяснить, как это происходит (физика за ним), а также откуда происходит 29,1?

Я прочитал эту документацию, но я до сих пор не понимаю понятие ширины импульса.

Спасибо заранее!

  • 0
    Вы уверены, что он измеряет ширину отраженного импульса, а не просто «ширину» единичного сигнала, который меняет состояние при появлении (сравнительно короткого) отраженного импульса?
  • 0
    @chrisStatton На странице 7 прикрепленного документа он показывает диаграмму импульсов и говорит, что «ширина импульса эхо-сигнала соответствует расстоянию» ... а функция pulseIn (echoPin, HIGH) дает время включения импульса эхо-сигнала. Так что это единственное, что я понял из этого!
Показать ещё 4 комментария
Теги:
arduino
sensor

1 ответ

0
Лучший ответ

Как и Крис, затронутый в комментариях, входной контакт идет HIGH в течение времени между его отправкой и получением. Я не совсем уверен, будет ли он HIGH в течение определенного промежутка времени после или во время передачи, но вы можете найти это в техническом описании.

откуда приходит 29,1?

Что скорость звука через воздух... вы можете использовать это, чтобы преобразовать время в сантиметры. Вам придется разделить его на два, потому что это происходит двумя способами.

Резюме:

  1. Arduino посылает импульс на SR04 (1000 микросекунд): digitalWrite(trigPin,HIGH); , delayMicroseconds(1000); , & digitalWrite(trigPin,LOW); ,
  2. SR04 испускает пинг и изменяет сигнал на HIGH
  3. Пинг ударяет по объекту, отскакивает назад и возвращается к SR04
  4. SR04 устанавливает вывод обратно в положение LOW

Arduino измеряет длину сигнального штыря HIGH:

duration = pulseIn (echoPin,HIGH); 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню