HC-SR04 mierzy czas powrotu odbitej fali ultradźwiękowej. To prosty sposób na ćwiczenie pomiaru czasu i budowę wskaźnika odległości. Wynik zależy jednak także od obiektu, kąta ustawienia oraz warunków otoczenia.
Cztery wyprowadzenia
| Pin | Funkcja |
|---|---|
| VCC | Zasilanie czujnika zgodne z wariantem |
| GND | Masa |
| Trig | Wyzwolenie pomiaru krótkim impulsem |
| Echo | Impuls, którego czas służy do obliczenia odległości |
Typowy HC-SR04 pracuje z zasilaniem 5 V i wyjściem Echo o takim poziomie. Nie podłączaj Echo bezpośrednio do wejścia ESP32 lub ESP8266. Potrzebne jest dopasowanie poziomów, np. odpowiednio zaprojektowany dzielnik albo konwerter. Różnice między klasycznym HC-SR04 a wariantami dla niższych napięć przedstawia Adafruit.
Dlaczego czas dzielimy przez dwa
Fala biegnie do przeszkody i wraca do czujnika. Odległość to zatem połowa iloczynu czasu i prędkości dźwięku. W typowych warunkach pokojowych wygodnym przybliżeniem jest:
odległość w cm ≈ czas Echo w mikrosekundach / 58
To przybliżenie, nie kalibracja dla wszystkich temperatur. Miękka tkanina może tłumić odbicie, a skośna powierzchnia skierować je poza czujnik. Brak echa nie powinien być prezentowany jako odległość zero.
Minimalny przykład dla klasycznego UNO 5 V
Poniższy szkic zakłada UNO z ATmega328P, Trig na D9 i Echo na D10. Nie jest schematem bezpośredniego podłączenia do ESP32. Połączenia wykonuj przy odłączonym zasilaniu.
constexpr byte TRIG = 9;
constexpr byte ECHO = 10;
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
digitalWrite(TRIG, LOW);
}
void loop() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
unsigned long czas = pulseIn(ECHO, HIGH, 30000UL);
if (czas == 0) {
Serial.println("Brak echa w czasie oczekiwania");
} else {
Serial.print(czas / 58.0f, 1);
Serial.println(" cm");
}
delay(100);
}
Limit czasu zapobiega zbyt długiemu oczekiwaniu. pulseIn() zwraca zero, gdy nie otrzyma kompletnego impulsu w określonym czasie; opisuje to dokumentacja Arduino. Przykład wymaga testu na sprzęcie.
Prosty sprawdzian wyników
Ustaw dużą, płaską przeszkodę prostopadle do osi czujnika. Zmierz jej położenie linijką i porównaj serię odczytów. Następnie zmień odległość i kąt. Zapisuj także brak pomiaru, zamiast usuwać go z wyników.
Przy kilku czujnikach wyzwalaj je kolejno, żeby ograniczyć wzajemne zakłócanie. Do sterowania zastosuj filtr i histerezę, a na utratę echa przewidź osobny stan. HC-SR04 w otwartej wersji nie jest automatycznie czujnikiem odpornym na wilgoć ani zabezpieczeniem zapobiegającym kolizji urządzenia.

