Czujnik odległości – HC-SR04

Kolejne testy – tym razem ultradźwiękowy czujnik odległości. Z uwagi na niewielką cenę gotowego modułu HC-SR04 (dokumentacja pdf), nie warto sobie zawracać głowy budową od podstaw modułu nadawczo-odbiorczego. Moduł jest popularny, tani i łatwo dostępny (choćby na Allegro).

Do obsługi takiego modułu przez Arduino, można znaleźć w necie stosowną bibliotekę (Ultrasonic.h), ale ponieważ mi nie działała jak należy (a właściwie to wcale nie działała – wywalało mi jakieś errory), postanowiłem napisać obsługę od podstaw – co okazało się niezwykle łatwe, nawet przy moim braku doświadczenia.

Czujnik steruje się  (zgodnie z dokumentacją) wyzwalając go krótkim impulsem – 10uS na wejście „Trig”, na wyjściu „Echo” dostajemy impuls, którego długość jest proporcjonalna do zmierzonej odległości. Cała zabawa sprowadza się do zmierzenia (i przeliczenia) czasu trwania tego impulsu.

Mój układ wygląda tak :

Tak wyglądają przebiegi na oscyloskopie :

(żółty –  impuls wyzwalający, a poniżej – niebieski – odpowiedź czujnika, długość impulsu proporcjonalna do odległości)

A tak kod :

#include <LiquidCrystal.h>

int TX = 0; //port Ultrasonic - Trig
int RX = 1; //port Ultrasonic - Echo
long TIME;  //długość powrotnego impulsu w uS

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
  lcd.begin(16,2);
  pinMode(TX, OUTPUT);
  pinMode(RX, INPUT);
}

void loop()
{
  pomiar_odleglosci();
  lcd.clear();
  lcd.setCursor(0,0); //w górnej linii LCD - czas
  lcd.print(TIME);
  lcd.setCursor(0,1); // w dolnej linii LCD - cm
  // szerokość odbitego impulsu w uS podzielone przez
  // 58 to odleglosc w cm - patrz dokumentacja
  lcd.print(TIME / 58);

  delay(100);
}

void pomiar_odleglosci ()
{
  // impuls 10 uS inicjalizujacy - patrz dokumentacja
  digitalWrite(TX, HIGH);
  delayMicroseconds(10);
  digitalWrite(TX, LOW);
  TIME = pulseIn(RX, HIGH);
}

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

piętnaście + 10 =