Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Ultradźwiękowy czujnik odległości HC‑SR04

HC SR04 jest zasilanym napięciem 5V ultradźwiękowym czujnikiem odległości, który działa w zakresie od 2 do 200 cm. Czujnik mierzy odległość i przekształca wynik pomiaru na sygnał wyjściowy, którego długość jest wprost proporcjonalna do zmierzonej odległości. Podczas dokonywania pomiarów pobiera on około 15mA prądu.

R1FvZvPaQypT7
Czujnik odległości HC SR04
Źródło: tylko do użytku edukacyjnego.

Czujnik HC SR04 wyposażony jest w cztery piny. Dwa z nich (Vcc oraz GND) służą do zasilania czujnika, natomiast dwa pozostałe to piny sygnałowe. Pin Trig to wejście wyzwalające pomiar, a pin Echo to wyprowadzenie sygnału wyjściowego – wyniku pomiaru.

Aby rozpocząć pomiar odległości, należy na wejście wyzwalające (Trig) podać stan wysoki (trwający co najmniej 10 mikrosekund). Czujnik rozpocznie pomiar, którego wynik odczytamy z pinu wyjściowego (Echo).

Budowa układu mierzącego odległość

Co nam będzie potrzebne:

  • płytka stykowa

  • płytka Arduino Uno

  • ultradźwiękowy czujnik odległości HC‑SR04

  • przewody połączeniowe męsko–męskie

  • kabel USB typu A‑B do podłączenia do komputera.

Zbuduj układ przedstawiony na schemacie ideowym.

RjHUraJrdvfgO
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Jeśli układ jest gotowy, przejdźmy do napisania programu.

W pierwszej kolejności zdefiniujmy piny.

Linia 1. kratka define trig 9. Linia 2. kratka define echo 8.

W pętli setup() ustanawiamy połączenie z monitorem portu szeregowego oraz definiujemy piny. Pin Trig definiujemy jako wyjście, a pin Echo – jako wejście.

Linia 1. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik. Linia 2. pinMode otwórz nawias okrągły trig przecinek OUTPUT zamknij nawias okrągły średnik. Linia 3. pinMode otwórz nawias okrągły echo przecinek INPUT zamknij nawias okrągły średnik.

W pętli loop() tworzymy zmienną typu long o nazwie okres. Dalej następuje sekwencja uruchamiająca pomiar. Pierwszy krok to ustawienie na pinie połączonym z wejściem wyzwalającym czujnika (Trig) sygnału niskiego - wystarczą 2 mikrosekundy. Następnie ustawiamy stan wysoki na 10 mikrosekund. Czujnik wykonuje pomiar i zwraca wyniki na pinie Echo. Czas trwania sygnału na pinie Echo przypisujemy do zmiennej czas, a następnie wyświetlamy go w monitorze portu szeregowego.

Linia 1. long okres średnik. Linia 3. digitalWrite otwórz nawias okrągły trig przecinek LOW zamknij nawias okrągły średnik. Linia 4. delayMicroseconds otwórz nawias okrągły 2 zamknij nawias okrągły średnik. Linia 5. digitalWrite otwórz nawias okrągły trig przecinek HIGH zamknij nawias okrągły średnik. Linia 6. delayMicroseconds otwórz nawias okrągły 10 zamknij nawias okrągły średnik. Linia 7. digitalWrite otwórz nawias okrągły trig przecinek LOW zamknij nawias okrągły średnik. Linia 9. okres znak równości pulseIn otwórz nawias okrągły echo przecinek HIGH zamknij nawias okrągły średnik. Linia 10. Serial kropka println otwórz nawias okrągły czas zamknij nawias okrągły średnik. Linia 12. delay otwórz nawias okrągły 500 zamknij nawias okrągły średnik.

Całość kodu wygląda następująco:

Linia 1. kratka define trig 9. Linia 2. kratka define echo 8. Linia 4. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik. Linia 6. pinMode otwórz nawias okrągły trig przecinek OUTPUT zamknij nawias okrągły średnik. Linia 7. pinMode otwórz nawias okrągły echo przecinek INPUT zamknij nawias okrągły średnik. Linia 8. zamknij nawias klamrowy. Linia 10. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. long okres średnik. Linia 13. digitalWrite otwórz nawias okrągły trig przecinek LOW zamknij nawias okrągły średnik. Linia 14. delayMicroseconds otwórz nawias okrągły 2 zamknij nawias okrągły średnik. Linia 15. digitalWrite otwórz nawias okrągły trig przecinek HIGH zamknij nawias okrągły średnik. Linia 16. delayMicroseconds otwórz nawias okrągły 10 zamknij nawias okrągły średnik. Linia 17. digitalWrite otwórz nawias okrągły trig przecinek LOW zamknij nawias okrągły średnik. Linia 19. okres znak równości pulseIn otwórz nawias okrągły echo przecinek HIGH zamknij nawias okrągły średnik. Linia 20. Serial kropka println otwórz nawias okrągły okres zamknij nawias okrągły średnik. Linia 22. delay otwórz nawias okrągły 500 zamknij nawias okrągły średnik. Linia 23. zamknij nawias klamrowy.

Wgraj kod i sprawdź wyniki.

Zróbmy symulację układu mierzącego odległość, za pomocą środowiska Tinkercad.

Zaloguj się na swoje konto na https://www.tinkercad.com/

Z listy Komponenty wybierz Wszystko.

RKrfPaw9GCSbY

Dodaj do głównego okna symulatora płytkę stykową.

R1ZQIC2uEmILm

Do płytki dodaj moduł HS‑SR04.

Rx22Xz8ZT1xBF

Do okna symulacji dodaj moduł Arduino Uno.

R6q5D0t1KyOX7

Pin VCC czujnika HC‑SR04 podepnij do pinu 5V Arduino.

R1b8v0BS7oScV

Pin Trig czujnika podepnij pod pin D9.

R8FzgyvZ0Srry

Pin Echo podepnij pod pin D8.

ReFnkyvzPrJFM

Pin GND czujnika podepnij pod pin GND Arduino.

R1URXi2UfOPnU

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, dopasuj widok okna, kliknij na belkę Konsola szeregowa i uruchom symulację.

RwUCy10w4LaeS

Uruchom film, by zobaczyć działanie programu w symulatorze kodu Autodesk Tinkercad.

R16PcCTCfZRmZ
Film nawiązujący do treści materiału. Przedstawia działanie opisanej uprzednio symulacji polegającej na mierzeniu odległości w środowisku Tinkercad.

Efektem działania programu są wyświetlane na ekranie liczby odpowiadające długości sygnału wyjściowego generowanego przez czujnik i odczytywanego z pinu Echo. Łatwo zauważyć, że im bliżej czujnika znajduje się przeszkoda, tym liczby są mniejsze. Jednak by stały się one bardziej zrozumiałe, konieczne jest ich przekształcenie – tak by wyrażone były w bardziej przyjaznych jednostkach. Aby uzyskać odległość od przeszkody wyrażoną w centymetrach, czas trwania sygnału należy podzielić przez 58.

Układ mierzący odległość w centymetrach

Jak już powiedzieliśmy, aby wynik pomiaru odległości był podawany w centymetrach, czas musimy podzielić przez liczbę 58. Zmodyfikujmy zatem nasz kod i sprawdźmy wyniki.

Do pętli loop() dodajemy nową zmienną odleglosc. Dodajemy też linię kodu, w której do zmiennej odleglosc przypisywana jest wartość czasu podzielona przez 58.

Linia 1. kratka define trig 9. Linia 2. kratka define echo 8. Linia 4. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik. Linia 6. pinMode otwórz nawias okrągły trig przecinek OUTPUT zamknij nawias okrągły średnik. Linia 7. pinMode otwórz nawias okrągły echo przecinek INPUT zamknij nawias okrągły średnik. Linia 8. zamknij nawias klamrowy. Linia 10. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. long okres średnik. Linia 12. long odleglosc średnik. Linia 14. digitalWrite otwórz nawias okrągły trig przecinek LOW zamknij nawias okrągły średnik. Linia 15. delayMicroseconds otwórz nawias okrągły 2 zamknij nawias okrągły średnik. Linia 16. digitalWrite otwórz nawias okrągły trig przecinek HIGH zamknij nawias okrągły średnik. Linia 17. delayMicroseconds otwórz nawias okrągły 10 zamknij nawias okrągły średnik. Linia 18. digitalWrite otwórz nawias okrągły trig przecinek LOW zamknij nawias okrągły średnik. Linia 20. okres znak równości pulseIn otwórz nawias okrągły echo przecinek HIGH zamknij nawias okrągły średnik. Linia 21. odleglosc znak równości okres prawy ukośnik 58 średnik. Linia 23. Serial kropka print otwórz nawias okrągły odleglosc zamknij nawias okrągły średnik. Linia 24. Serial kropka println otwórz nawias okrągły cudzysłów cm cudzysłów zamknij nawias okrągły średnik. Linia 26. delay otwórz nawias okrągły 500 zamknij nawias okrągły średnik. Linia 27. zamknij nawias klamrowy.

Do tej symulacji nie musimy modyfikować połączenia. Musimy natomiast zmodyfikować kod.

Uruchom film, by zobaczyć działanie programu w symulatorze kodu Autodesk Tinkercad.

RlVjuWFvRczn7
Film nawiązujący do treści materiału. Przedstawia działanie opisanej uprzednio symulacji polegającej konstrukcji układu mierzącego odległości w centymetrach w środowisku Tinkercad.

Układ scalony L293D

Aby do Arduino podłączyć silniki, konieczne jest zastosowanie dodatkowych pośredniczących elementów sterujących. Elementy takie możemy zbudować samodzielnie (jest to układ złożony z kilku tranzystorów). Możemy również wykorzystać do tego celu scalone mostki Hmostek Hmostki H.

To drugie rozwiązanie ma dodatkową zaletę. Dzięki mostkom H możemy bowiem bezpiecznie sterować silnikami, których praca wymaga zasilania prądem 12V i 1A.

Ważne!

Linie sygnałowe Arduino mogą pracować maksymalnie z prądem 5V i 20mA.

Układ scalony L293D zawiera dwa mostki H. Dzięki temu możemy go wykorzystać do sterowania dwoma silnikami.

Układ L293D ma 16 wyprowadzeń. Są one oznaczone następująco:

RKD9tAJHyBqFx

Piny zasilania:

  • 4, 5, 12, 13 - łączymy razem do masy (GND)

  • 16 - zasilanie Vcc części logicznej (5V)

  • 8 - zasilanie Vc silników (do 36V)

Piny sterujące silnikami:

  • 2, 7 - wejścia określające kierunek obrotów pierwszego silnika

  • 10, 15 - wejścia określające kierunek obrotów drugiego silnika

  • 1 - wejście ENABLE określające prędkość pierwszego silnika

  • 9 - wejście ENABLE określające prędkość drugiego silnika

Piny silników:

  • 3, 6 - wyjścia do pierwszego silnika

  • 11, 14 - wyjścia do drugiego silnika

W celu zatrzymania silników lub zmiany kierunku jazdy najlepiej zbudować tablicę prawdytablica prawdytablicę prawdy.

R1PEpldNq8vYJ

Symulacja silnika

Zbudowany układ może być zasilony jednym lub dwoma napięciami (VCC 1, VCC 2). Pierwszy wariant oznacza, że zarówno silniki, jak i cała logika układu będą zasilane z tego samego źródła. Takie połączenie nie jest dobrą praktyką i nie jest zalecane, gdy chcemy zasilać silniki.

My jednak na potrzeby naszej symulacji silnika zastosujemy ten właśnie wariant podłączenia zasilania, czyli z jednym wspólnym zasilaniem pinów VCC 1 oraz VCC 2.

Co nam będzie potrzebne:

  • dwie diody LED w różnych kolorach

  • jeden rezystor 1 komega

  • płytka stykowa

  • płytka Arduino Uno

  • układ L293D

  • przewody połączeniowe męsko‑męskie

  • dwa przyciski tact switch 6x6 mm

  • kabel USB typu A‑B do podłączenia do komputera.

Zbuduj układ na płytce stykowej według poniższego schematu ideowego.

R1FFCVrzXSpkI
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Jeśli układ jest gotowy, przejdźmy do napisania prostej symulacji silnika. Za pomocą przycisków SW1 i SW2 będziemy symulować kierunek obrotu silnika.

Na początek zdefiniujemy piny.

Linia 1. kratka define KierunekLewo 2. Linia 2. kratka define KierunekPrawo 3. Linia 3. kratka define DiodaLewo 4. Linia 4. kratka define DiodaPrawo 5.

W pętli setup() ustawiamy piny przycisków jako wejścia, a piny diod jako wyjścia.

Linia 1. pinMode otwórz nawias okrągły KierunekLewo przecinek INPUT podkreślnik PULLUP zamknij nawias okrągły średnik. Linia 2. pinMode otwórz nawias okrągły KierunekPrawo przecinek INPUT podkreślnik PULLUP zamknij nawias okrągły średnik. Linia 3. pinMode otwórz nawias okrągły DiodaLewo przecinek OUTPUT zamknij nawias okrągły średnik. Linia 4. pinMode otwórz nawias okrągły DiodaPrawo przecinek OUTPUT zamknij nawias okrągły średnik.

W pętli loop() ustawiamy proste warunki. Jeśli wciśniemy przycisk SW1 (kierunek w LEWO), program ma zaświeć diodę, która symuluje obrót silnika w lewo (w prezentowanym przypadku jest to dioda niebieska). Jeśli wciśniemy przycisk SW2 (kierunek w PRAWO), program ma zaświecić diodę, która symuluje obrót silnika w kierunku prawym (w prezentowanym przypadku jest to dioda czerwona).

Ustawmy czas świecenia danej diody na 3 sekundy, po czym ją zgasimy.

Linia 1. if otwórz nawias okrągły digitalRead otwórz nawias okrągły KierunekPrawo zamknij nawias okrągły znak równości znak równości LOW zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. digitalWrite otwórz nawias okrągły DiodaLewo przecinek LOW zamknij nawias okrągły średnik. Linia 3. digitalWrite otwórz nawias okrągły DiodaPrawo przecinek HIGH zamknij nawias okrągły średnik. Linia 4. delay otwórz nawias okrągły 3000 zamknij nawias okrągły średnik. Linia 5. digitalWrite otwórz nawias okrągły DiodaPrawo przecinek LOW zamknij nawias okrągły średnik. Linia 6. zamknij nawias klamrowy else if otwórz nawias okrągły digitalRead otwórz nawias okrągły KierunekLewo zamknij nawias okrągły znak równości znak równości LOW zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. digitalWrite otwórz nawias okrągły DiodaLewo przecinek HIGH zamknij nawias okrągły średnik. Linia 8. digitalWrite otwórz nawias okrągły DiodaPrawo przecinek LOW zamknij nawias okrągły średnik. Linia 9. delay otwórz nawias okrągły 3000 zamknij nawias okrągły średnik. Linia 10. digitalWrite otwórz nawias okrągły DiodaLewo przecinek LOW zamknij nawias okrągły średnik. Linia 11. zamknij nawias klamrowy.

Kod

Całość kodu wygląda następująco:

Linia 1. kratka define KierunekLewo 2. Linia 2. kratka define KierunekPrawo 3. Linia 3. kratka define DiodaLewo 4. Linia 4. kratka define DiodaPrawo 5. Linia 6. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. pinMode otwórz nawias okrągły KierunekLewo przecinek INPUT podkreślnik PULLUP zamknij nawias okrągły średnik. Linia 8. pinMode otwórz nawias okrągły KierunekPrawo przecinek INPUT podkreślnik PULLUP zamknij nawias okrągły średnik. Linia 9. pinMode otwórz nawias okrągły DiodaLewo przecinek OUTPUT zamknij nawias okrągły średnik. Linia 10. pinMode otwórz nawias okrągły DiodaPrawo przecinek OUTPUT zamknij nawias okrągły średnik. Linia 11. zamknij nawias klamrowy. Linia 13. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. if otwórz nawias okrągły digitalRead otwórz nawias okrągły KierunekPrawo zamknij nawias okrągły znak równości znak równości LOW zamknij nawias okrągły otwórz nawias klamrowy. Linia 15. digitalWrite otwórz nawias okrągły DiodaLewo przecinek LOW zamknij nawias okrągły średnik. Linia 16. digitalWrite otwórz nawias okrągły DiodaPrawo przecinek HIGH zamknij nawias okrągły średnik. Linia 17. delay otwórz nawias okrągły 3000 zamknij nawias okrągły średnik. Linia 18. digitalWrite otwórz nawias okrągły DiodaPrawo przecinek LOW zamknij nawias okrągły średnik. Linia 19. zamknij nawias klamrowy else if otwórz nawias okrągły digitalRead otwórz nawias okrągły KierunekLewo zamknij nawias okrągły znak równości znak równości LOW zamknij nawias okrągły otwórz nawias klamrowy. Linia 20. digitalWrite otwórz nawias okrągły DiodaLewo przecinek HIGH zamknij nawias okrągły średnik. Linia 21. digitalWrite otwórz nawias okrągły DiodaPrawo przecinek LOW zamknij nawias okrągły średnik. Linia 22. delay otwórz nawias okrągły 3000 zamknij nawias okrągły średnik. Linia 23. digitalWrite otwórz nawias okrągły DiodaLewo przecinek LOW zamknij nawias okrągły średnik. Linia 24. zamknij nawias klamrowy. Linia 25. zamknij nawias klamrowy.

Wgraj kod do Arduino Uno i uruchom symulację silnika.

Zróbmy symulację silnika, za pomocą środowiska Tinkercad.

Z listy Komponenty wybierz Wszystko, znajdź i dodaj do okna symulacji płytkę stykową.

R1LJ4cGvOVtI8

Do płytki dodaj układ L293D.

RI0WQzoDx1Dos

Dodaj teraz dwie diody w różnych kolorach.

R6RSlstfSCCGW

Do jednej z nóżek diody dodaj rezystor o wartości 1 komega.

R108uMC3udZA7

Dodaj teraz dwa przyciski do płytki.

R3CnAUowPgQLW

Do okna symulacji dodaj moduł Arduino Uno.

R1W1Uw1HfnJ0l

Do ujemnej szyny płytki podepnij: pin GND Arduino, pin 4 układu L293D, pin 5 układu L293D, pin 12 układu L293D, pin 13 układu L293D oraz po jednym pinie każdego z przycisków.

R1JaNZDbSZDNF

Do dodatniej szyny płytki podepnij: pin 5V Arduino, pin 1 układu L293D, pin 8 układu L293D, pin 16 układu L293D.

RrYOkSraroYkK

Podepnij katodę pierwszej diody z anodą drugiej diody. Następnie podepnij anodę pierwszej diody z katodą drugiej diody.

Rh8bqp6xFEPRX

Wolną nóżkę rezystora podepnij pod pin 3 układu L293D.

R1OprUlUyQRQm

Połączenie diod w którym nie ma rezystora podepnij pod pin 6 układu L293D.

R94LM7OmzEer8

Pin 2 układu L293D podepnij z pinem D4 Arduino.

RD9j6nSW8v3XA

Pin 7 układu L293D podepnij z pinem D5 Arduino.

R18fWE8cErDkF

Wolny pin pierwszego przycisku podepniemy pod pin D3 Arduino.

ROWYLoDRct7AT

Wolny pin drugiego przycisku podepniemy pod pin D2 Arduino.

R1N0JkwIoQeCp

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, dopasuj widok okna i uruchom symulację.

Rt6K0yswdAQOG

Uruchom film, aby zobaczyć działanie programu w symulatorze kodu Autodesk Tinkercad.

RcS8QzVzjnEN6
Film nawiązujący do treści materiału. Przedstawia symulację działania silnika w środowisku Tinkercad.

Słownik

light‑follower
light‑follower

robot podążający za światłem

delayMicroseconds ();
delayMicroseconds ();

funkcja odliczająca czas w mikrosekundach (µs)

mostek H
mostek H

często stosowany w robotyce układ elektryczny umożliwiający sterowanie kierunkiem działania silników prądu stałego (DC)

tablica prawdy
tablica prawdy

tabela kombinacji zero‑jedynkowych przedstawiająca wyniki operacji logicznych danego układu dla każdej z możliwych kombinacji stanów logicznych na jego wejściu