Pomiaru odległości możemy dokonać za pomocą czujnika ultradźwiękowegoultradźwiękiultradźwiękowego HC‑SR04. Ma on cztery wyprowadzenia:
Vcc – pin zasilający układ napięciem 5 V;
Trig (od ang. trigger) – pin służący do zainicjowania pomiaru; gdy pojawi się na nim stan wysoki, czujnik wysyła falę dźwiękową o częstotliwości 40 kHz;
Echo – pin umożliwiający obserwację wyniku pomiaru (wyjście modułu); pin, do którego dociera fala odbita;
Gnd – masa układu.
Re79WEUPnc6iw
Na fotografii widoczny jest sensor ultradźwiękowy, posiada on kryształ u góry, cztery piny u dołu płytki PCB oraz dwa układy soniczne po lewej i prawej stronie płytki.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Ze względu na wygląd czujnik ten kojarzy się z oczami robota, a tak naprawdę są to jednak „usta” i „uszy”. Za pomocą sensora nie zarejestrujemy oczywiście mowy ani muzyki, lecz niesłyszalne dla człowieka fale ultradźwiękowe.
Jak działa taki moduł? Otóż wysyła on falę dźwiękową, która po natrafieniu na przeszkodę odbija się od niej i wraca do czujnika. Czas potrzebny do przebycia tej odległości dzielimy przez dwa, a następnie mnożymy przez prędkość dźwięku.
R13VoAazE1dsu
Ilustracja przedstawia metodę działania sensora, poprzez emitowanie fali wysłanej możliwe jest jej odebranie tą samą płytką, jeśli odbita zostanie od przedmiotu. Na rysunku widoczny jest sensor, z którego wysyłana jest fala. Fala dociera do przedmiotu, od którego się odbija i wraca do sensora.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Wiemy już, jak realizowany jest pomiar odległości. Pod uwagę należy wziąć jeszcze to, jakie odległości chcemy mierzyć. Przedstawiony moduł działa w zakresie od 2 do 200 centymetrów. Jeżeli więc chcesz zmierzyć odległość większą, musisz zaopatrzyć się w mocniejszy czujnik.
Narysujmy schemat połączenia sensora z płytką Arduino Uno:
RkYOnosdz5pkQ
Ilustracja przedstawia połączenie pomiędzy arduino uno a sensorem. Połączenia (od sensora do arduino): Vcc do 5V, Trig do ~3, Echo do 2, Gnd do GND.
Elementy potrzebne do budowy układu:
płytka Arduino Uno,
płytka stykowa,
kabel USB typu A‑B,
czujnik HC‑SR04,
przewody i zworki połączeniowe.
Skonstruujemy układ, który będzie wyświetlał wyniki w monitorze portu szeregowego, a w następnie dodamy diody LED, sygnalizujące odległość samochodu (albo innego obiektu) od przeszkody.
Korzystając ze schematu podpinamy cztery przewody łączące wyprowadzenia czujnika z odpowiednimi pinami płytki Arduino.
R1s6lKBTmFQmD
Fotografia przedstawia połączenie płytki drukowanej Arduino Uno czterema kablami do płytki stykowej, na której umieszczony jest ultradźwiękowy czujnik odległości. Kabel czerwony podłączony jest do pinu 5V na płytce i prowadzi do pinu VCC na czujniku. Kabel czarny podłączony jest do pinu GND na płytce i GND na czujniku. Kabel żółty podłączony jest do pinu 3 na płytce i pinu Trig na czujniku. Kabel Niebieski podłączony jest do pinu 2 na płytce i pinu Echo na czujniku.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Możemy podłączyć płytkę do komputera. Następnie zaprogramujemy czujnik tak, aby zwrócone przez niego odległości były wyświetlane na monitorze portu szeregowego. Uruchamiamy aplikację Arduino IDE i otwieramy nowy szkic.
Deklarujemy piny płytki Arduino, do których podłączamy wyprowadzenia Trig i Echo.
Linia 1. int trig znak równości 3 średnik.
Linia 2. int echo znak równości 2 średnik.
int trig = 3;
int echo = 2;
W ciele funkcji setup() ustawiamy pin Trig jako wyjściowy, a pin Echo jako wejściowy (odbiera on sygnał, a zatem jest elementem wejściowym). Chcemy wyświetlać odległość na ekranie, musimy więc nawiązać połączenie z portem szeregowym.
Linia 1. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 2. pinMode otwórz nawias okrągły trig przecinek otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny OUTPUT otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny zamknij nawias okrągły średnik.
Linia 3. pinMode otwórz nawias okrągły echo przecinek INPUT zamknij nawias okrągły średnik.
Linia 4. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik.
Linia 5. zamknij nawias klamrowy.
W ciele funkcji loop() ustawiamy wysoki stan napięcia na pinie Trig, dzięki czemu sensor będzie wysyłał fale ultradźwiękowe. W przypadku platformy Arduino czas trwania sygnału określa się zwykle w milisekundach, jednak w przypadku ultradźwiękowego czujnika odległości jest inaczej. Czas podajemy nie w mili-, lecz w mikrosekundach. Aby to zrobić, używamy zmodyfikowanej wersji funkcji delay() – jest nią delayMicroseconds(). Podajemy wartość 1000 µs, co odpowiada jednej milisekundzie. Po wysłaniu sygnału wyłączamy pin, czyli ustawiamy niski poziom napięcia.
Linia 1. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 2. otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny digitalWrite otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny otwórz nawias okrągły trig przecinek otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny HIGH otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny zamknij nawias okrągły średnik.
Linia 3. otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny delayMicroseconds otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny otwórz nawias okrągły 1000 zamknij nawias okrągły średnik.
Linia 4. otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny digitalWrite otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny zamknij nawias ostrokątny otwórz nawias okrągły trig przecinek LOW zamknij nawias okrągły średnik.
Linia 5. zamknij nawias klamrowy.
Musimy się dowiedzieć, ile czasu zajmuje fali dźwiękowej dotarcie do przeszkody i powrót do czujnika. Potrzebna będzie zmienna do przechowywania tej wartość. Deklarujemy ją na początku szkicu (można też zrobić to wewnątrz funkcji loop(), jednak dobrą praktyką jest umieszczanie stałych, zmiennych oraz bibliotek na samym początku). Druga zmienna, jakiej użyjemy, pozwoli na obliczenie odległości.
Linia 1. int czas średnik.
Linia 2. int odleglosc średnik.
int czas;
int odleglosc;
W ciele funkcji loop() odczytujemy czas, jaki został odebrany przez pin Echo. Używamy w tym celu funkcji pulseIn(). Następnie obliczamy odległość. Współczynnik 58 użyty we wzorze niżej wynika z wyrażonego w mikrosekundach czasu potrzebnego fali dźwiękowej na przebycie jednego centymetra. Dla cali ten współczynnik wynosiłby 148.
Linia 1. czas znak równości pulseIn otwórz nawias okrągły echo przecinek HIGH zamknij nawias okrągły średnik.
Linia 2. odleglosc znak równości czas prawy ukośnik 58 średnik.
czas = pulseIn(echo, HIGH);
odleglosc = czas / 58;
Wyświetlamy otrzymany wynik oraz jednostkę pomiaru na ekranie. Ustawiamy przejście do następnej linii po każdej prezentacji wartości. Określamy, co jaki czas ma być dokonywany pomiar – w przykładowym szkicu jest to 100 ms, dzięki czemu następujące po sobie odczyty zmieniają się płynnie. Możemy jednak ustawić tę wartość dowolnie.
Linia 1. Serial kropka print otwórz nawias okrągły cudzysłów Odleglosc wynosi dwukropek cudzysłów zamknij nawias okrągły średnik.
Linia 2. Serial kropka print otwórz nawias okrągły odleglosc zamknij nawias okrągły średnik.
Linia 3. Serial kropka println otwórz nawias okrągły cudzysłów cm cudzysłów zamknij nawias okrągły średnik.
Linia 4. delay otwórz nawias okrągły 100 zamknij nawias okrągły średnik.
Zapisujemy szkic, weryfikujmy poprawność kodu i wysyłamy go do płytki Arduino. Włączamy Monitor portu szeregowego, a następnie ustawiamy dowolny przedmiot przed czujnikiem i zwiększamy oraz zmniejszamy jego odległość od sensora. Na ekranie powinien pokazać się prawidłowy wynik.
RACMPOLgJmFgn
Na zdjęciu widoczne jest okno konsoli wyświetlającej w kolejnych liniach słowach: „Odległość wynosi: x cm”. Za x należy podstawić różne liczby. Na dolnym pasku zaznaczony jest autoscroll, odznaczony jest pokaż znacznik czasu a kolejne 2 menu rozwijane mają pierwszą opcję: „Nowa linia” oraz „9600 baud”. Na końcu widoczny jest przycisk „Wyczyść okno”.
Tinkercad
Zróbmy symulację układu z sensorem ultradźwiękowym za pomocą środowiska Tinkercad.
R1XPEqUhRGTSc
Na zrzucie ekranu widoczne jest środowisko Tinkercad, w którym widać puste pole robocze. Po prawej stronie znajduje się panel z częściami elektronicznymi do wyboru.
Dodaj do głównego okna symulatora płytkę stykową.
R1HDarTn4uPBX
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W polu roboczym znajduje się płytka prototypowa, która służy do podłączania elementów do płytki Arduino. Po prawej stronie znajduje się panel z elementami elektronicznymi do wyboru.
Z listy rozwijanej Komponenty wybierz Wszystko.
RxfWdOxxYn9Nx
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W oknie głównym znajduje się płytka stykowa. Z listy komponentów została zaznaczona opcja: Wszystko.
Znajdź i dodaj do płytki czujnik HC‑SR04.
RsF86Ehg2WxE1
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W polu roboczym znajduje się płytka stykowa z podłączonym do niej czujnikiem HC‑SR04. Po prawej stronie znajduje się panel z elementami elektronicznymi do wyboru.
Dodaj moduł Arduino Uno do okna symulacji.
RMUizMw2UliFf
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W polu roboczym znajduje się moduł Arduino UNO, do którego podłączone jest zasilanie oraz płytka stykowa z podłączonym do niej czujnikiem HC‑SR04. Po prawej znajduje się panel z elementami elektronicznymi do wyboru.
Pin VCC czujnika podpinamy z pinem 5V Arduino.
R5Fe0CAsgH6gl
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W polu roboczym znajduje się moduł Arduino UNO oraz płytka stykowa z podłączonym do niej czujnikiem HC‑SR04. Czujnik z płytką jest podpięty do siebie z wykorzystaniem płytki prototypowej. Czerwony kabel podpięty jest do pinu 5V na płytce Arduino i pinu VCC na czujniku.
Pin Trig podpinamy do pinu D3 Arduino.
RPbQBpKF2Me34
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W polu roboczym znajduje się moduł Arduino UNO oraz płytka stykowa z podłączonym do niej czujnikiem HC‑SR04. Czujnik z płytką jest podpięty do siebie z wykorzystaniem płytki prototypowej. Czerwony kabel podpięty jest do pinu 5V na płytce Arduino i pinu VCC na czujniku. Zielony kabel podpięty jest do pinu 3 na płytce i pinu Trig na czujniku.
Pin Echo podpinamy z pinem D2 Arduino.
R14nuD9k0i57r
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W polu roboczym znajduje się moduł Arduino UNO oraz płytka stykowa z podłączonym do niej czujnikiem HC‑SR04. Czujnik z płytką jest podpięty do siebie z wykorzystaniem płytki prototypowej. Czerwony kabel podpięty jest do pinu 5V na płytce Arduino i pinu VCC na czujniku. Zielony kabel podpięty jest do pinu 3 na płytce i pinu Trig na czujniku. Kabel czarny podpięty jest do pinu 2 na płytce i pinu echo na czujniku.
Pin GND podpinamy z pinem GND Arduino.
R1JT5hdbh83u0
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W polu roboczym znajduje się moduł Arduino UNO oraz płytka stykowa z podłączonym do niej czujnikiem HC‑SR04. Czujnik z płytką jest podpięty do siebie z wykorzystaniem płytki prototypowej. Czerwony kabel podpięty jest do pinu 5V na płytce Arduino i pinu VCC na czujniku. Zielony kabel podpięty jest do pinu 3 na płytce i pinu Trig na czujniku. Kabel czarny podpięty jest do pinu 2 na płytce i pinu echo na czujniku. Kabel niebieski podpięty jest do pinu GND na płytce i pinu GND na czujniku.
Przejdźmy teraz do pisania kodu. W tym celu klikamy na przycisk Kod, z listy rozwijanej wybieramy Tekst, potwierdzamy chęć zmiany widoku i czyścimy zawartość.
Przepisz kod układu z sensorem ultradźwiękowym i uruchom symulację.
R1T5LnLfIF8kP
Na zrzucie ekranu widoczne jest środowisko Tinkercad. W oknie głównym znajduje się moduł Arduino UNO oraz płytka stykowa z czujnikiem HC‑SR04 z podpiętym pinem VCC do pinu 5V Arduino, Trig do pinu D3, Echo do pinu D2, pin GND arduino do pinu GND czujnika. Naciśnieto przycisk kod, w polu którego napisane jest: int trig =3; int echo =2; void setup() { pinMode(trig, OUTPUT); pinMode(echo, INPUT); Serial.begin(9600); } void loop(){ int czas; int odleglosc; digitalWrite(trig, High); delayMicroseconds(1000)l digitalWrite(trig, LOW); czas= pilseIn(echo, HIGH); odleglosc= czas/58; Serial.print("odleglosc wynosi: "); Serial.print(odleglosc); Serial.print(" cm"); delay(100); }
Film z działania programu.
R1Y6sMqjN1XoP
Film nawiązujący do treści materiału: Pokazujący schemat połączenia pomiędzy Płytką Arduino, a ultra dźwiękowym czujnikiem odległości.
Film nawiązujący do treści materiału: Pokazujący schemat połączenia pomiędzy Płytką Arduino, a ultra dźwiękowym czujnikiem odległości.
Film nawiązujący do treści materiału: Pokazujący schemat połączenia pomiędzy Płytką Arduino, a ultra dźwiękowym czujnikiem odległości.
Słownik
ultradźwięki
ultradźwięki
fale akustyczne o częstotliwości zbyt wysokiej, aby mogły być usłyszane przez człowieka; za dolną granicę częstotliwości fal ultradźwiękowych uznaje się 20 000 Hz (20 kHz)