Почему мы добавляем задержку при использовании ультразвуковых датчиков?

Я новичок в Arduino и недавно обзавелся ультразвуковым датчиком (HC-SR04).

Я посмотрел учебники о том, как измерить расстояние с помощью датчика, и код, который я использую, выглядит так:

const int trigPin = 8;
const int echoPin = 7;

long duration;
int distance;

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

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2); //почему мы задерживаем 2 микросекунды

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); //почему мы задерживаем 10 микросекунд
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  distance = duration*0.034/2;
  Serial.print("Distance: ");
  Serial.println(distance);
}

Я хотел бы знать, почему мы добавляем задержки в функцию цикла? Буду признателен, если кто-нибудь сможет это объяснить.

, 👍3

Обсуждение

пожалуйста, прочтите спецификацию HC-SR04 ... https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf, @jsotola


1 ответ


10

Нам нужно обеспечить HC-SR04 подходящим триггерным сигналом. Когда вы прочтете техническое описание HC-SR04, вы увидите, что ему нужен триггерный импульс 10us.

Первая задержка 2us состоит в том, чтобы убедиться, что мы находимся на установленном НИЗКОМ уровне на триггерном штифте, так как до этого штифт мог быть ВЫСОКИМ. Мы задерживаемся здесь, чтобы убедиться, что HC-SR04 действительно зарегистрировал этот уровень как НИЗКИЙ, даже если раньше он был ВЫСОКИМ. Если мы будем переходить от ВЫСОКОГО уровня к НИЗКОМУ и обратно к ВЫСОКОМУ так быстро, как только сможем, то у HC-SR04 может не хватить времени, чтобы увидеть, как штифт опускается. Это в основном мера для обеспечения правильной работы кода здесь.

Вторая задержка относится к фактическому триггерному импульсу. В таблице данных указано, что это длина 10us, так что это то, что мы здесь задерживаем. После этого мы возвращаемся к МИНИМУМУ, чтобы закончить триггерный импульс, и ждем появления эхо-импульса.

Возможно, вы читали, что плохо использовать задержки в коде, так как они блокируются. В принципе это правильно, но обычно действительно короткие задержки в микросекундном диапазоне не имеют большого значения для потока программы. Просто будьте осторожны, чтобы общее время задержки в вашем коде было достаточно низким, чтобы не пропустить никаких важных событий (например, нажатия кнопок).

,

Задержки в микросекундах имеют смысл, но моя библиотека также имеет задержку в 25 мс перед возвратом. К этому моменту выполняются все вычисления, поэтому кажется, что это просто задержка, а 25 мс — это много для робота., @user88094

@user88094 user88094 Вы не указали, какую библиотеку имеете в виду. Да, не видя кода и контекста, я бы тоже сказал, что задержка в 25 мс не нужна., @chrisl