![HC-SR04 и Arduino Измерване на Разстояние](http://ardudevelop.eu/wp-content/uploads/2024/10/HC-SR04-и-Arduino-Измерване-на-Разстояние.png)
Въведение: Ултразвуковият сензор HC-SR04 е един от най-популярните сензори за измерване на разстояние в различни проекти с Arduino. Той предлага прецизност и е лесен за интегриране, което го прави идеален избор както за начинаещи, така и за напреднали разработчици. В тази статия ще научите как да свържете HC-SR04 сензора към Arduino, как да четете данните от него и как да преобразувате времето на отразения сигнал в реално разстояние в сантиметри. С това знание можете да създавате проекти за роботи, системи за избягване на препятствия и още много други приложения, изискващи измерване на разстояние.
Свързване на HC-SR04 с Arduino
За да свържете ултразвуковия сензор HC-SR04 с Arduino, използвайте следните връзки: свържете VCC пина на сензора към 5V пина на Arduino за захранване, GND пина към земя (GND), Trig пина към цифров пин, например пин 9, и Echo пина към друг цифров пин, като пин 10. Trig пинът се използва за изпращане на ултразвуков сигнал, а Echo пинът за получаване на отразената вълна, като тези два пина се използват, за да се изчисли разстоянието до обекта. Уверете се, че всички връзки са стабилни, за да осигурите точно измерване.
![HC-SR04 и Arduino Измерване на Разстояние схема](http://ardudevelop.eu/wp-content/uploads/2024/10/HC-SR04-и-Arduino-Измерване-на-Разстояние-схема.png)
За този пример сме избрали да използваме Arduino NANO. Може да прочетете повече информация за него, както да видите неговата пин диаграмата (pinout) в нашето ревю за него.
Код за HC-SR04
// Дефиниране на пиновете за тригера и ехо
#define TRIG_PIN 9
#define ECHO_PIN 10
void setup() {
// Стартиране на серийния монитор с честота 9600 bps
Serial.begin(9600);
// Определяне на режимите на пиновете
pinMode(TRIG_PIN, OUTPUT); // TRIG_PIN като изход
pinMode(ECHO_PIN, INPUT); // ECHO_PIN като вход
}
void loop() {
// Генериране на ултразвуков импулс
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Четене на времето за връщане на импулса
long duration = pulseIn(ECHO_PIN, HIGH);
// Преобразуване на времето в разстояние (в сантиметри)
float distance = duration * 0.034 / 2;
// Принтиране на стойностите в серийния монитор
Serial.print("Duration: ");
Serial.print(duration);
Serial.print(" us, Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500); // Закъснение преди следващото измерване
}
Обяснение на кода
Дефиниране на пиновете:
#define TRIG_PIN 9
#define ECHO_PIN 10
Тези редове дефинират номерата на пиновете, които ще се използват за свързване на сензора към Arduino. Пин TRIG_PIN
(9) се използва за изпращане на ултразвуков импулс, а ECHO_PIN
(10) за получаване на сигнала, който се връща.
Функция setup()
:
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
Serial.begin(9600);
: Стартиране на серийния монитор с честота на комуникация 9600 бода, за да можем да виждаме стойностите в конзолата.pinMode(TRIG_PIN, OUTPUT);
: ЗадаваTRIG_PIN
като изход (т.е. за изпращане на сигнал).pinMode(ECHO_PIN, INPUT);
: ЗадаваECHO_PIN
като вход (т.е. за приемане на отразения сигнал).
Функция loop()
:
void loop() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
Тази част от кода генерира ултразвуков импулс:
digitalWrite(TRIG_PIN, LOW);
иdelayMicroseconds(2);
: Започваме, като изпращаме кратък сигнал отLOW
(ниско напрежение) за 2 микросекунди, за да се осигури точност.digitalWrite(TRIG_PIN, HIGH);
иdelayMicroseconds(10);
: ИзпращамеHIGH
(високо напрежение) за 10 микросекунди, което генерира ултразвуков импулс.digitalWrite(TRIG_PIN, LOW);
: След изпращането на импулса, задаваме отновоLOW
.
Четене на времето за връщане на импулсa:
long duration = pulseIn(ECHO_PIN, HIGH);
Тази команда използва функцията pulseIn()
за да измери колко време (в микросекунди) е нужно на сигнала да се върне обратно. Стойността на duration
представлява времето, необходимо на ултразвуковия сигнал да измине разстоянието до обекта и обратно.
Преобразуване на времето в разстояние:
float distance = duration * 0.034 / 2;
Скоростта на звука е приблизително 0.034 cm/μs.
Делим на 2, защото времето е за отиване и връщане на сигнала.
Принтиране на стойностите в серийния монитор:
Serial.print("Duration: ");
Serial.print(duration);
Serial.print(" us, Distance: ");
Serial.print(distance);
Serial.println(" cm");
Тази част от кода принтира времето и изчисленото разстояние в серийния монитор на Arduino IDE, за да можете да ги видите и анализирате.
Закъснение:
delay(500);
Добавено е закъснение от 500 милисекунди преди следващото измерване, за да не се претоварва сензора и за да имаме време да наблюдаваме промените в стойностите.
Заключение
Кодът използва ултразвуковия сензор HC-SR04 за измерване на разстояние, като изпраща ултразвуков импулс и измерва времето, необходимо за връщането на сигнала. След това това време се преобразува в разстояние и резултатите се показват в серийния монитор на Arduino. Този тип сензор е много полезен за различни проекти, като роботи и автоматизирани системи за разпознаване на обекти. Повече за него разгледайте тук.