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.
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
Oprócz podÅ‚Ä…czenia czujnika do Arduino, wykorzytamy jeszcze dwie diody LED (czerwonÄ… i zielonÄ…) do sygnalizacji dystansu poniżej i powyżej 10cm.
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);
}
Karta katalogowa HC-SR04.pdf