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 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
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.
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
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
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 kΩomega
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
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.
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 kΩomega.
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
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