Lekcja 6: Pomiar odległości czujnikiem ultradźwiękowym.

Tym razem zajmiemy sie pomiarem odległości za pomocą ultradźwiękowego czujnika US-020. Skłąda się on z dwóch przetworników - wysyłającego i odbierającego fale dźwiękowe. Czujnik ultradźwiękowy działający w efektywnym zakresie 2 - 700 cm. Do pomiarów można również wykorzystać podobny czujnik o krótszym zasięgu (2-200cm) o symbolu HC-SR04.
Dane czujnika US-020:

  • Napięcie zasilania: 5 V
  • Średni pobór prądu: 3 mA
  • Zakres pomiarowy: 2 - 700 cm
  • Dokładność: 0,3 cm + 1 %
  • Wyjście: sygnał częstotliwościowy
  • Częstotliwość pracy: 40 kHz
  • Wymiary: 45 x 20 x 15 mm

Aby rozpocząć pomiar należy podać na pin TRIG impuls napięciowy (stan wysoki 5 V) przez 10 uS (10 mikrosekund). Moduł dokonuje pomiaru odległości przy pomocy fali dźwiękowej o częstotliwości 40 kHz. Do mikrokontrolera wysyłany jest sygnał, w którym odległość zależna jest od czasu trwania stanu wysokiego i można ją obliczyć ze wzoru: s = t ⋅ v 2 , gdzie s - odległość, t -czas trwania wysokiego poziomu, v - prędkość dźwięku (340m/s). Wynik dzielimy przez 2 gdyż odległość od przeszkody jest o połowę krótsza od drogi jaką pokonuje dźwięk (dźwięk biegnie od czujnika do przeszkody i z powrotem).

*źródło: www.botland.com.pl

Składamy układ z czujnikiem wg. poniższych schematów z połączeniami:

  • VCC do 5V
  • Trig do pinu 7
  • Echo do pinu 8
  • GND do GND



Piszemy kod jak poniżej.

        #include < NewPing.h>
        #define TRIGGER_PIN  7  
        #define ECHO_PIN     8 
        #define MAX_DISTANCE 200 
        NewPing odl(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); 
        void setup() {
            Serial.begin(115200); 
            }
        void loop() {
            delay(50);                     
            unsigned int uS = odl.ping(); 
            Serial.print(uS / US_ROUNDTRIP_CM); 
            Serial.println("cm");
            }
        

W linii 1 mamy instrukcję include i w nawiasach trójkątnych nazwę pliku nagłówkowego NewPing.h, który został stworzony przez producenta czujnika. W tym pliku znajdują się instrukcje obsługujące elementy czujnika. My tylko z nich korzystamy w naszym kodzie. Pliki można ściągnąć stąd a następnie rozpakować do folderu naszego projektu.
W linii 2 i 3 definiujemy dwie zmienne na pinach 7 i 8, które oznaczają wyzwalanie sygnału i odbiór.
W linii 4 deklarujemy maksymalny mierzony zakres odległości.
W linii 5 znajduje sie wywołanie z klasy NewPing nowej funkcji o nazwie odl, która będzie przechowywała chwilową odległość.
Zauważmy, że w linii 7 zadeklarowaliśmy prędkość przesyłu danych portem szeregowym na 115200 bitów na sekundę. Trzeba będzie pamiętać o tym by w oknie Serial Monitora, w którym będziemy widzieć wyniki, również zmienić prędkość wysyłania danych (prawy dolny róg okna).
W linii 10 ustalamy czas między pomiarami na 50ms.
W linii 11 deklarujemy nową wartość unsigned int uS, która przyjmie wartości z funkcji odl. Jest to liczba bez znaku i całkowita (dodatnia).
W linii 12 wysyłamy do okna Serial Monitor wynik przechowywany w zmiennej uS przeliczony na cm.
W linii 13 dopisujemy tylko jednostkę do wartości mierzonej.
Powinniśmy widzieć obraz jak poniżej. Wystarczy teraz zbliżać i oddalać od czujników dłoń by sprawdzić działanie układu.



Powrót do spisu materiałów

Nowy zakup

Zakupiliśmy nowy moduł Arduino Leonardo i Yun z obsługą sieci przez Ethernet i WiFi.

Nowe czujniki

Mamy nowe czujniki żyroskopowe. Możemy kontrolować położenie robota.

Zajęcia otwarte

Zapraszamy na zajęcia otwarte uczniów klas SP, które odbywają się w każdy poniedziałek w godz. 15.00-16.00 (Prosimy o kontakt w celu zebrania grupy).