Я использую этот код:
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?
Я прочитал эту документацию, но я до сих пор не понимаю понятие ширины импульса.
Спасибо заранее!
Как и Крис, затронутый в комментариях, входной контакт идет HIGH в течение времени между его отправкой и получением. Я не совсем уверен, будет ли он HIGH в течение определенного промежутка времени после или во время передачи, но вы можете найти это в техническом описании.
откуда приходит 29,1?
Что скорость звука через воздух... вы можете использовать это, чтобы преобразовать время в сантиметры. Вам придется разделить его на два, потому что это происходит двумя способами.
Резюме:
digitalWrite(trigPin,HIGH);
, delayMicroseconds(1000);
, & digitalWrite(trigPin,LOW);
,Arduino измеряет длину сигнального штыря HIGH:
duration = pulseIn (echoPin,HIGH);