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.