Ultradźwiękowy czujnik odległości HC-SR04 jest jednym z prostszych w obsłudze komponentów, które umożliwiają rozbudowę płytki Arduino.
Składa się on z nadajnika i odbiornika ultradźwięków o częstotliwości 40kHz.
Wyprowadzenia
Na wyprowadzeniu z płytki mamy 4 piny oznaczone odpowiednio:
| Pin | Opis |
|---|---|
| Vcc | tutaj przykładamy napięcie 5v albo bezpośrednio z płytki Arduino |
| Trig | pin wyzwalacza, który odpowiada za aktywację układu |
| Echo | pin odpowiadający za wiadomość zwrotną w postaci czasu |
| Gnd | standardowy pin 0 |
Działanie układu
- Aktywacja układu następuje poprzez ustawienie wysokiego sygnału na pinie Trig na co najmniej 10 uS (mikrosekund)
- Następnie moduł automatycznie wysyła 8 impulsów o częstotliwości 40kHz i wykrywa falę odbijającą się od przeszkód.
- Jeśli wystąpił sygnał zwrotny (wykryto przeszkodę) pin Echo poprzez czas wysokiego sygnału informuje o czasie pomiędzy wysłaniem impulsu a sygnałem zwrotnym.
Aby policzyć dystans korzystamy z podanego przez producenta wzoru
dystans = czas wysokiego stanu x prędkość dźwięku
Aby obliczyć dystans w cm korzystamy z formuły
dystans = czas / 58 (czas w mikrosekundach)
Czujnik działa w zakresie od 2 cm do 4 m a kąt mierzonego sygnału to 15 stopni. Sprawdza się on dobrze przy wykrywaniu przeszków w ogólności. Natomiast jeśli chodzi o 'wielkość przeszkody' to precyzja maleje z odległością. Problem ten zostanie opisany przy okazji następnego wpisu na temat budowy małego radaru w oparciu o silnik krokowy bądź serwo i wykorzystanych tu komponentów.
Użycie w praktyce
Czujnik najwygodniej podłączyć do płytki stykowej i kabelkami z odpowiednimi pinami z płytki arduino. Na poniższym schemacie pokazano jak podłączyć płytkę stykową do Arduino. Sam czujnik należy podłączyć do pól a27(Vcc), a28 (Trig), a29 (Echo), a30(Gnd).
#define TRIGGER_PIN 12
#define ECHO_PIN 11
void setup() {
Serial.begin(9600);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
int distance = performRadarAction();
Serial.print(distance);
Serial.println(" cm");
delay(1000);
}
int performRadarAction() {
long time;
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(100);
digitalWrite(TRIGGER_PIN, LOW);
time = pulseIn(ECHO_PIN, HIGH);
return calculateDistanceInCm(time);
}
int calculateDistanceInCm(long time) {
return time / 58;
}
Użycie czujnika zaczynamy od zdefiniowania prędkości portu szeregowego (line 5), który wykorzystamy do komunikacji. Następnie oznaczamy pin 12 jako wyjściowy (OUTPUT). Oznacza to, że ustawiając ten pin będziemy 'pisać/wysyłać sygnał' na zewnątrz. Odwrotnie ustawiamy pin 11, z którego sygnał będziemy odczytywać. Główna logika programu znajduje się w funkcji loop(), gdzie wykonujemy akcje na czujniku (line 11).
Metoda performRadarAction ustawia stan wysoki na pinie podłączonym do pinu Trig czujnika a następnie odczytywana jest wartość z pinu Echo.
Wartość jest następnie przeliczana według wzoru podanego wyżej na odległość w centymetrach. Odległość wypisujemy korzystając z portu szeregowego.


