Ultradźwiękowy czujnik odległości HC-SR04
HC-SR04
HC-SR04 to czujnik ultradźwiękowy działający w zakresie od 2 do 200 cm, zasilany napięciem 5V. Mierzony za jego pomocą czas trwania sygnału wejściowego, jest proporcjonalny do mierzonej odległości. Typowy pobór prądu podczas pomiaru wynosi około 15mA.
Posiada cztery piny, dwa zasilające oraz dwa do wyzwolenia i odczytania pomiaru.

- hc-sr04.jpg (7.06 KiB) Przejrzano 1408 razy
Aby rozpocząć pomiar odległości należy podać na pin TRIG impuls napięciowy w stanie wysokim 5V przez czas 10μs, następnie dokonywany jest pomiar odległości przy pomocy fali ultradźwiękowej o częstotliwości 40kHz, która odbijając się od napotkanej przeszkody, wraca do czujnika. Kiedy pomiar zostanie wykonany, na pin ECHO wystawiany jest sygnał, którego czas trwania zależy od odległości znajdującej się od przeszkody.
Pierwszą metodę pomiaru opisuje prosta zależność, w której mierzony jest czas (T1) w sekundach od momentu wyzwolenia sygnału na TRIG do momentu pojawienia się odpowiedzi na pinie ECHO:
odległość = (T1 * prędkość rozchodzenia się dźwieku) / 2
Interesuje nas prędkość rozchodzenia się dźwięku w powietrzu, a więc 340 m/s:
odległość [m] = ( T1 [s] * 340 [m/s] ) / 2
HC-SR04 posiada jednak opcję, która pozwoli nam na określenie odległości od przeszkody na podstawie czasu trawania sygnału ECHO (T2) mierzoną w mikrosekundach. Łatwo policzyć więc, że fala dźwiękowa pokonuje jeden centymetr w czasie 29us, a więc ułatwiając sobie powyższą zależność, otrzymamy wzór i wynik w centymetrach:
odległość [cm] = T2 [us] / 58
Jeśli interesuje nas wynik w calach, powyższy wzór będzie wyglądał następująco:
odległość [inch] = T2 [us] / 148
Schemat połączeń.
Oprócz podłączenia czujnika do Arduino, wykorzytamy jeszcze dwie diody LED (czerwoną i zieloną) do sygnalizacji dystansu poniżej i powyżej 10cm.

- hc-sr06.jpg (8.59 KiB) Przejrzano 1406 razy
Kod:
Kod: Zaznacz cały
int Trig = 2; // Numer pinu wyzwolenia
int Echo = 3; // Numer pinu odpowiedzi
int Red = 4; // Numer pinu - dioda czerwona
int Green = 5; // Numer Pinu - dioda zielona
long EchoTime; // Czas trwania sygnału ECHO
int Distance; // Odległość w centymetrach
int MaximumRange = 200; // Maksymalna odległość
int MinimumRange = 2; // Minimalna odległość
void setup()
{
// Inicjalizacja portu szeregowego
Serial.begin(9600);
// Konfiguracja pinów
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Red, OUTPUT);
pinMode(Green, OUTPUT);
}
void loop()
{
// Ustawiamy TRIG w stan niski na 2us
digitalWrite(Trig, LOW);
delayMicroseconds(2);
// Ustawiamy TRIG w stan wysoki na 10us
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
// Ustawiamy TRIG w stan niski - rozpoczynamy pomiar
digitalWrite(Trig, LOW);
// Odczytujamy czas trwania stanu wysokiego na pinie ECHO
EchoTime = pulseIn(Echo, HIGH);
// Obliczamy odległość
Distance = EchoTime / 58;
// Sprawdzamy zakres pomiarowy
if (Distance >= MaximumRange || Distance <= MinimumRange)
{
Serial.println("Poza zakresem");
} else
{
// Jeśli poniżej 11cm zapalamy diodę czerwoną
// Jeśli powyżej 10cm zapalamy diodę zieloną
if (Distance < 11)
{
digitalWrite(Red, HIGH);
digitalWrite(Green, LOW);
} else
{
digitalWrite(Red, LOW);
digitalWrite(Green, HIGH);
}
Serial.print("Odleglosc: ");
Serial.println(Distance);
}
// Opóźnienie kolejnego pomiaru
delay(100);
}
Ostateczny wygląd

- hc-sr04-photo.jpg (15.8 KiB) Przejrzano 1403 razy
Terminal

- hc-sr04-serial.jpg (12.25 KiB) Przejrzano 1402 razy