Ultradźwiękowy czujnik odległości HC-SR04

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

  1. Aktywacja układu następuje poprzez ustawienie wysokiego sygnału na pinie Trig na co najmniej 10 uS (mikrosekund)
  2. Następnie moduł automatycznie wysyła 8 impulsów o częstotliwości 40kHz i wykrywa falę odbijającą się od przeszkód.
  3. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *