Почему мы добавляем задержку при использовании ультразвуковых датчиков?
Я новичок в 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);
}
Я хотел бы знать, почему мы добавляем задержки в функцию цикла? Буду признателен, если кто-нибудь сможет это объяснить.
@Electric, 👍3
Обсуждение1 ответ
Нам нужно обеспечить HC-SR04 подходящим триггерным сигналом. Когда вы прочтете техническое описание HC-SR04, вы увидите, что ему нужен триггерный импульс 10us.
Первая задержка 2us состоит в том, чтобы убедиться, что мы находимся на установленном НИЗКОМ уровне на триггерном штифте, так как до этого штифт мог быть ВЫСОКИМ. Мы задерживаемся здесь, чтобы убедиться, что HC-SR04 действительно зарегистрировал этот уровень как НИЗКИЙ, даже если раньше он был ВЫСОКИМ. Если мы будем переходить от ВЫСОКОГО уровня к НИЗКОМУ и обратно к ВЫСОКОМУ так быстро, как только сможем, то у HC-SR04 может не хватить времени, чтобы увидеть, как штифт опускается. Это в основном мера для обеспечения правильной работы кода здесь.
Вторая задержка относится к фактическому триггерному импульсу. В таблице данных указано, что это длина 10us, так что это то, что мы здесь задерживаем. После этого мы возвращаемся к МИНИМУМУ, чтобы закончить триггерный импульс, и ждем появления эхо-импульса.
Возможно, вы читали, что плохо использовать задержки в коде, так как они блокируются. В принципе это правильно, но обычно действительно короткие задержки в микросекундном диапазоне не имеют большого значения для потока программы. Просто будьте осторожны, чтобы общее время задержки в вашем коде было достаточно низким, чтобы не пропустить никаких важных событий (например, нажатия кнопок).
Задержки в микросекундах имеют смысл, но моя библиотека также имеет задержку в 25 мс перед возвратом. К этому моменту выполняются все вычисления, поэтому кажется, что это просто задержка, а 25 мс — это много для робота., @user88094
@user88094 user88094 Вы не указали, какую библиотеку имеете в виду. Да, не видя кода и контекста, я бы тоже сказал, что задержка в 25 мс не нужна., @chrisl
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- Как подключить более 10 датчиков к Arduino uno r3
- Как использовать два ультразвуковых датчика для управления двигателем 5 Вольт?
- Чтение датчика давления от 4 до 20 мА с использованием uno
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- SRF04 Ультразвуковой датчик - неточные показания
пожалуйста, прочтите спецификацию HC-SR04 ... https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf, @jsotola