Snap4Arduino – Potencjometr
Potencjometr to prosty analogowy czujnik, na pierwszy rzut oka wyglądać może nieznajomo, ale z pewnością używałeś go już tysiące razy, kręcąc jakąkolwiek gałką w różnego typu urządzeniach elektronicznych, zazwyczaj po prostu jest schowany za obudową.
Źródło zdjęcia – Adafruit
Zasada działania potencjometru jest prosta, dzięki wewnętrznemu układowi dwóch oporników kręcąc gałką potencjometru możemy płynnie zmieniać napięcie prądu przez niego przepływającego. Podłączając potencjometr do Arduino możemy przy jego pomocy generować płyne zmiany napięcia w zakresie od 0 do 5V, dzięki czemu przy pomocy potencjometru możemu płynnie sterować np. prędkością obrotu silnika, jasnością diod LED, płynną zmianą jakichkolwiek parametrów w Snapie itp
Schemat
Potencjometr ma trzy nóżki, wpinamy go pionowo w płytkę prototypową (jak na powyższym zdjęciu) i podłączamy odpowiednio:
1. LEWA – do GND
2. ŚRODKOWA – do odczytu – dowolny pin analogowy np. A0
3. PRAWA – do +5V
Podłączenie lewej i prawej nóżki może być odwrotne (lewa do +5V, prawa do GND) wówczas potencjometr odwrotnie wskazywać będzie wartość maksymalną i minimalną.
Program
Sna4Arduino połącz z Arduino i w zakładce DANE utwórz zmienną ODCZYT (jeśłi chcesz możesz nazwać ją zupełnie dowolnie) a następnie aby odczytać wskazanie potencjometru złóż z bloków następujący program:
Uruchom program naciskając zieloną flagę i zobacz jak zmieniają się wartości zmiennej ODCZYT – jej wskaźnik jest prawym górnym rogu okna programu. Wartości powinny zmieniać się płynnie od 0 do 1023 odpowiednio do obrotów potencjometru (0 gdy potencjometr jest ustawiony maksymalnie w lewo, 1023 gdy pomaksymalnie w prawo). Jeśli wskazania ODCZYT skaczą i zmieniają się na losowe liczby prawdopodobnie jest jakiś błąd w podłączeniu potencjometru.
Jeśli udało Ci się poprawnie odczytać wskazania potencjometru możemy pójść krok dalej i zaprogramować sterowanie przy jego pomocy silnikiem, w tym celu wystarczy dodać do programu blok konfigurujący odpowiedni pin cyfrowy jako SERVO a następnie wewnątrz pętli ZAWSZE zaraz po odczycie danych z potencjometru przesłać je do bloku sterującego silnikiem.
Zwróć uwagę, że wartość odczytu z potencjometru w momencie wysłania do silnika jest podzielona przez 4. Wynika to z faktu, że jak już wcześniej zauważyliśmu odczyty z potencjometru zmieniają się w skali od 0 do 1023, podczas gdy sterowanie silnikiem odbywa się w zakresie od 0 do 255. Aby sprowadzić dane z potencjometru do poziomu sygnału sterującego silnikiem dzielimy je więc przez 4 (1023/4 wynosi ok. 255)
Po uruchomieniu programu silnik powinien kręcić się w lewo gdy potencjometr ustawiony jest maksymalnie w lewo, stać przy środkowym położeniu potencjometru i kręcić się w prawo przy obróceniu potencjometru maksymalnie w prawo.
Sprawdź również co się stanie gdy będziesz sterować silnikiem wartością ODCZYT bez podzielenia jej przez 4.
Spaliłem serwomotor – co dalej?
Jeśli podczas konstruowania robotów Twój serwomotor uległ przepaleniu to:
1. Nie martw się, można go dość łatwo naprawić, przynajmniej częściowo – będzie działał ale trudniej będzie zmieniać kierunek i prędkość jego obrotu
2. Modyfikacja jest dość prosta wymaga podstawowej umiejętności lutowania i trwa ok. 10 minut.
3. Po naprawie będzie on zdecydowanie bardziej odporny na elektryczno/elektroniczne pomyłki i raczej już się nie zepsuje (co najwyżej z przyczyn mechanicznych)
W zestawie NA KOŁACH jako napędy kół wykorzystujemy serwomotory przerobione tak by obracały się w pełnym zakresie 360 stopni.
Mają one kilka dużych zalet:
1. Pozwalają łatwo zamocować koło na plastikowym orczyku
2. Posiadają wygodny przewód zasilający
3. Umożliwiają łatwe sterowanie napędem – zmianę kierunku i regulację prędkości (normalny silnik DC wymagałby do tego osobnego sterownika tzw. mostka H)
Serwomotorem można łatwo sterować elektronicznie gdyż posiada wbudowany własny sterownik, który pozwala na zmianę polaryzacji zasilania silnika (czyli zmianę kierunku jego obrotu) i płynną regulację prędkości poprzez sygnał PWM.
Ten sam sterownik jest jednak najdelikatniejszą częścią serwomotora i o ile sam silnik ciężko uszkodzić poprzez złe podłączenie zasilania, to wbudowany układ elektroniczny jest już na to zdecydowanie bardziej podatny i może zdarzyć się sytuacja, że w wyniku zwarcia lub odwrotnie podłączonego zasilania ulegnie on przepaleniu i silnik przestanie działać.
Wbudowany sterownik ciężko jest naprawić, łatwo natomiast przerobić serwomotor tak aby pracował jako zwykły silnik prądu stałego z przekładnią.
Nasza modyfikacja polegać będzie na prostym zabiegu przylutowania przewodu zasilającego bezpośrednio do silnika z całkowitym pominięciem wewnętrznego sterownika.
Co będziesz potrzebował do wykonania naprawy:
1. Śrubokręt
2. Lutownica i cyna
3. Nożyk lub ostre szczypce
Naprawa (a raczej modyfikacja) spalonego serwomotora
1. Odkręć cztery śrubki od spodu serwomotora i zdejmij jego dolną klapkę, uważaj bu jednocześnie nie zdjąć górnej części obudowy by nie wypadły zębatki przekładni (a jeśli to się stanie powkładaj je tak jak były i zamknij zpowrotem ;-).
2. Na powyższym zdjęciu zaznaczone są miejsca gdzie przyłączone jest zasilanie silniczka, do nich przylutowujemy przewody zasilające. Możesz spróbować przyłożyć do nich dwa kabelki podłączone do plusa i minusa baterii (zasilanie 5-6V) silnik powinien się kręcić.
3.Odetnij przewód zasilający we wskazanym miejscu, wewnątrz obudowy, tuż przy płytce sterownika.
4. Czarną gumkę ściągnij trochę w dół przewodu zasilającego, z końcówek brązowej i czerwonej żyły zdejmij fragment izolacji tak by można je było przylutować. Żółtego przewodu nie będziemy do niczego podłączać można więc lekko go skrócić aby nie przeszkadzał wewnątrz obudowy.
5. W tym momencie będzie ci potrzebna gorąca lutownica, cyna i podstawowa umiejętność lutowania. Jeśli nigdy w życiu nic nie lutowałeś nic nie szkodzi, operacja którą masz wykonać to dobre ćwiczenie dla debiutanta. Polecam obejrzenie tego krótkiego filmu instruktażowego jak należy lutować (j.ang)
6. Końcówki brązowego i czerwonego przewodu zarób cyną a następnie przylutuj do przyłączeń silnika serwomotoru.
7. Końcówkę żółtego przewodu skróć i umieść wewnątrz obudowy tak by nie przeszkadzała przy jej zamknięciu a następnie zamknij dolną klapkę i wkręć śrubki.
8. Aby sprawdzić czy zmodyfikowany serwomotor działa poprawnie podłącz go do zasilania, brązowy przewód do (-) a czerwony do (+), do jego uruchomienia nie potrzebujemy już Arduino, gdyż nie musimy komunikować się z wbudowanym sterownikiem serwomotora (dlatego nie używamy żółtego przewodu), napięcie podawane jest bezpośrednio na silnik.
10. Zmodyfikowany serwomotor pracuje jak zwykły silnik DC aby używać go jako napęd możesz korzystać z instrukcji zawartej w artykule opisującym Robot pojazd z silnikami DC
PLUSY MODYFIKACJI:
1. Nie potrzeba Arduino do uruchomienia silnika, będzie się on kręcił po podłączeniu bezpośrednio do zasilania.
2. Ponieważ wyeliminowaliśmy sterownik wbudowany w serwomotor będzie on zdecydowanie bardziej odporny na błędy przy podłączaniu kabelków.
WADY MODYFIKACJI
1. Żeby sterować silnikiem (zmieniać kierunek i prędkość obrotu) potrzebować będziemy osobnego sterownika typu MOSTEK H może to być np. układ scalony L293D
NADAL NIE DZIAŁA???
Jeśli przewody zasilające są podłączone do silnika poprawnie i po podłączeniu zasilania z baterii silnik nadal się nie kręci najprawdopodobniej przyczyna awarii ma charakter mechaniczny. Sprawdź czy uszkodzniu nie uległa przekładnia znajdująca się w górnej części serwomotoru.
Robot poduszkowiec
Co potrzebujesz do zbudowania robota poduszkowca:
- Komplet części drewnianych + śrubki i nakrętki do zbudowania poduszkowca
- Dwa komplety części drewnianych do skonstruowania koła + odwa ringi 90mm
- Dwa silniki serwo 360
- Płytka prototypowa + kabelki
- Arduino
- Diody LED i oporniki 1kOhm
Pliki do ściągnięcia
Części drewniane – Robot Poduszkowiec z zestawu NA KOŁACH
Koło ver.2 – części drewniane
Model SKETCHUP
Konstrukcja
1. Do modułu z Arduino i płytką prototypową przyczep po bokach klocki z obustronnymi wypustami.
2. Silniki serwo zamontuj w uchwytach i przyczep do klocków z wypustami.
3. Do spodniej części korpusu przyczep moduł z koszykiem na baterie.
4. Z dwóch płaskich klocków 6×12 otworów i trójkątnych łączników zmontuj “łyżkę” do zamontowania na froncie poduszkowca.
5. Zamontuj łyżkę na przedniej ściance i koła na silnikach serwo. Model jest skończony.
Snap4Arduino – Sterowanie serwomotorem przy pomocy klawiatury
Snap4Arduino posiada gotowy blok, który wykrywa naciśnięcie dowolnego klawisza na klawiaturze. Należy on do grupy bloków KONTROLA, z rozwijanego menu można wybrać, który klawisz będzie go aktywować.
Silniki serwo przypinamy do pinów cyfrowych 9 i 10. Przy pomocy bloku SET DIGITAL PIN … TO … ustawiamy piny 9 i 10 na SERVO.
Gdy piny są odpowiednio skonfigurowane sterowanie nimi przy pomocy klawiatury jest bardzo proste. Poniższy przykład pokazuje jak ustawić odpowiednie ruchy silników dla odpowiednich strzałek klawiatury.
Minusem powyższego rozwiązania jest fakt, że blok KIEDY KLAWISZ … NACIŚNIĘTY daje sygnał tylko wtedy kiedy klawisz został WCIŚNIĘTY ale nie daje żadnego sygnału kiedy klawisz jest PUSZCZONY. Dlatego jako klawisz zatrzymujący silniki ustawiona jest SPACJA.
Program sterujący silnikami tak aby kręciły się one gdy klawisz strzałki jest wciśnięty, a przestają się obracać gdy klawisz jest puszczony jest trochę bardziej skomplikowany.
W poniższym przykładzie do wykrycia wciśniętego klawisza wykorzystujemy odpowiedni blok z grupy CZUJNIKI który zwraca wartość PRAWDA kiedy klawisz został naciśnięty a w przeciwnym wypadku zwraca FAŁSZ, umieszczamy go w bloku warunku JEŻELI. Wewnątrz bloku JEŻELI wstawiamy bloki sterujące odpowiednio kierunkami silników.
Tworzymy cztery podobne warunki JEŻELI wykrywające naciśnięcie każdego z klawiszy strzałek i umieszczamy je w bloku ZAWSZE, dzięki któremu po naciśnięciu zielonej flagi program cały czas sprawdza czy któryś z klawiszy został wciśnięty (bez bloku ZAWSZE sprawdził by to tylko raz po wciśnięciu flagi).
Mamy już zdefiniowane wykrywanie naciśnięcia klawiszy, następny krok to wykrywanie kiedy klawisz został PUSZCZONY. Do tego celu wykorzystamy dwa bloki z zakładki WYRAŻENIA, pierwszy to NIE …, wewnątrz którego umieszczamy blok KIEDY KLAWISZ … NACIŚNIĘTY dzięki czemu możemy wykryć czy klawisz NIE jest wciśnięty. Drugi zielony blok, który potrzebujemy to … I …, który określa że warunek znajdujący się po jego lewej i prawej stronie ma być spełniony jednocześnie.
Musimy sprawdzić jednocześnie cztery warunki (cztery klawisze strzałek) musimy więc zagnieźcić w sobie kilka bloków … I … z odpowiednimi warunkami… w efekcie otrzymujemu coś co wygląda tak jak ta zielona część poniższego diagramu. Połączone warunki umieszczamy w jeżeli JEŻELI dzięki czemu otrzymujemy warunek brzmiący mniej więcej tak:
JEŻELI “klawisz góra NIE jest wciśnięty I klawisz dół NIE jest wciśnięty I klawisz lewo NIE jest wciśnięty I klawisz prawo NIE jest wciśnięty” wtedy ZATRZYMAJ SILNIKI (ustaw je w pozycji neutralnej ~90).
Snap4Arduino – Sterowanie serwomotorem
SERVO – sterowanie silnikiem SERWO
Silnik SERWO czyli SERWOMOTOR to podstawowy rodzaj silnika jakiego używamy do budowania lo fi robotów.
Dwa podstawowe typy serwomotorów to
1. STANDARDOWY – obracający swoje ramię w zakresie 180 stopni
2. ODBLOKOWANY / PEŁNOOBROTOWY – wykonujący obroty w pełnym zakresie 360 stopni
W tym przykładzie wykorzystamy silnik PEŁNOOBROTOWY, który stosujemy jako napęd koła.
Schemat:
Program
Do kontroli serwomotorów wykorzystujemy blok SET SERVO … TO …. Jego pierwszy parametr ustala pin do którego podłączone jest sterowanie serwomotorem a drugi kierunek, w którym silnik ma się obracać:
1. ANGLE – w przypadku standardowego serwomotora obraca silnik do konkretnej pozycji w zakresie 0-180 stopni, w przypadku serwomotora pełnoobrotowego przy pomocy parametru ANGLE możemy regulować prędkość i kierunek obrotu silnika (0 – obrót z maksymalną prędkością w lewo, 90 – silnik zatrzymany, 180 – obrót z maksymalną prędkością w prawo)
2. CLOCKWISE – obrót z maksymalną prędkością w prawo
3. COUNTER-CLOCKWISE – obrót z maksymalną prędkością w lewo
4. STOPPED – zatrzymanie silnika, odpowiada wartości ANGLE = 90
W praktyce serwomotor pełnoobrotowy ciężko jest ustalić precyzyjnie w pozycji neutralnej (silnik zatrzymany) gdyż zależnie od poziomu naładowania baterii i obciążenia całego zasilania pozycja neutralna zmienia się w zakresie ANGLE mniej więcej od 88 do 92.
Uruchom program (zielona flaga) i pozmieniaj parametry obrotu silnika (po każdej zmianie musisz ponownie kliknąć zieloną flagę), sprawdź dla jakiej wartości ANGLE jest jego pozycja neutralna (silnik się nie obraca).
Robot na kołach
Co potrzebujesz do zbudowania podstawowego robota-pojazdu:
- Komplet części drewnianych + śrubki i nakrętki do zbudowania ramy pojazdu
- Dwa komplety części drewnianych do skonstruowania koła + odwa ringi 90mm
- Dwa silniki serwo 360
- Płytka prototypowa + kabelki
- Arduino
- Czujnik odległości – SHARP GP2Y0A41SK0F
- Przewód JST 3pin – do podłączenia czujnika odległości
- Obrotowe kółko do mebli
- Kilka kolorowych diod i oporników również się przyda
Pliki do ściągnięcia
Części drewniane – pojazd NA KOŁACH
Koło ver.2 – części drewniane
Model SKETCHUP
Konstrukcja
1. Zamontuj silniki serwo w ściankach bocznych pojazdu.
2. Połącz ścianki boczne odpowiednimi klockami z wypustami.
3. Na górze pojazdu przymocuj element z płytką prototypową i Arduino. Z przodu pojazdu zamocuj płaski klocek 6×12 otworów zklockiem “uśmiechem”
4. Od spodu pojazdu, w tylnej jego części włóż koszyk na baterie, zamocuj wsporniki i kółko obrotowe.
3. Zmontuj uchwyt do czujnika odległości
4. Od przodu pojazdu zamontuj czujnik odległości. Do silników zamontuj koła. Podstawowa konstrukcja pojazdu jest gotowa.
Elektronika
Robot pojazd sterowany jest przy pomocy czujnika odległości, dzięki któremu może wykrywać przeszkody pojawiające się na jego drodze i je omijać.
Do skonstruowania układu elektronicznego potrzebujemy:
- Arduino – dowolny model, w przypadku zestawu NA KOŁACH jest to LEONARDO
- Płytka prototypowa + kabelki
- Czujnik odległości SHARP GP2Y0A41SK0F (lub inny model ANALOGOWEGO czujnika odległości)
- Przewód JST 3pin
- Dwa silniki serwo 360
- Zasilanie – 4 baterie AA lub zasilanie przez kabel USB
UWAGA!
Zanim podłączysz serwomotory do zasilania, zapoznaj się dokładnie z działaniem płytki prototypowej i przerób wszystkie ćwiczenia z działu PODSTAWY.
Błędne podłączenie silników może skutkować ich uszkodzeniem.
Zanim podłączysz baterie do płytki prototypowej SPRAWDŹ DOKŁADNIE CZY PODŁĄCZASZ JE ZGODNIE Z POLARYZACJĄ POZOSTAŁYCH ELEMENTÓW!
Skunstruuj układ elektroniczny jak na poniższym schemacie.
1. Piny zasilające Arduino podłącz do listew zasilających płytki prototypowej (5V do czerwonej listwy, GND do niebieskiej listwy).
2. Koszyk z bateriami podłącz do listew zasilających płytki prototypowej.
3. Silniki SERWO podłącz w standardowy sposób – przewód czerwony do +5V, brązowy do GND, żółty do pinów cyfrowych Arduino nr 9 i 10 .
4. Do czujnika odległości wepnij wtyczkę JST a następnie podłącz odpowiednie przewody: czerwony do +5V, czarny do GND, żółty (sygnał pomiarowy) do pinu analogowego A0
Programowanie
Jeśli wszystkie moduły robota (Arduino, czujnik odległości i silniki) są już ze sobą odpowiednio połączone, możemy przystąpić do programowania.
Snap4Arduino
Przygotowanie:
1. Podłącz Arduino do komputera.
2. Upewnij się, że na Arduino wgrany jest skrypt STANDARD FIRMATA (zestaw na kołach wysyłamy z wgranym skryptem n Arduino)
3. Uruchom Snap4Arduino i połącz go z Arduino
Program:
1. Po kliknięciu zielonej flagi ustaw cyfrowe piny 9 i 10 jako SERVO
2.W zakładce DANE stwórz zmienną ODLEGŁOŚĆ.
3. Do bloku z zieloną flagą dodaj pętlę ZAWSZE i w jej środku umieść blok, który będzie zamieniał wartość zmiennej ODLEGŁOŚĆ na wartość odczytaną z pinu analogowego O – czyli odbieraną z czujnika odległości.
3. Uruchom program (naciśnij zieloną flagę), zwróć uwagę jak zmienia się wartość zmiennej ODLEGŁOŚĆ gdy zbliżasz rękę do czujnika. Gdy nic nie znajduje się w zasięgu czujnika wartość zmiennej powinna wynosić od 0 do ok 100, gdy zbliżysz rękę na ok. 25cm wartość zmiennej ODLEGŁOŚĆ powinna wynosić ok. 120-160, gdy zbliżysz na ok 5cm powinna wzrosnąć do ok 400-600.
ŚLEDZENIE
Możemy przystąpić do programowania ruchu. Na początku zaprogramujmy prosty mechanizm śledzenia.
Jego algorytm będzie następujący:
1. Kiedy czujnik nic nie wykrywa (ODLEGŁOŚĆ mniejsza od 100) robot stoi w miejscu
2. Gdy coś pojawia się w zasięgu wzroku czujnika (ODLEGŁOŚĆ większa od 100 i mniejsza od 300) robot stara się do tego obiektu zbliżyć (jedzie do przodu).
3. Gdy robot zbliży się do przeszkody odpowiednio blisko (ODLEGŁOŚĆ > 300) robot staje w miejscu.
W Snapie nasz program wyglądać będzie następująco:
Zwróć uwagę na środkowy krok, gdy robot powinien iść do przodu. Aby obydwa koła obracały się do przodu, silniki muszą kręcić się W PRZECIWNYCH KIERUNKACH ponieważ w konstrukcji ustawione są w lustrzanym odbiciu, dlatego silnik podłączony do pinu 9 ustawiony jest na obrót w kierunku przeciwnym do ruchu wskazówek zegara (Counter-clockwise) a silnik podłączony do pinu numer 10 obraca się w kierunku zgodnym z ruchem wskazówek zegara (Clockwise). Jeśli w Twoim wypadku takie ustawienie powoduje obracanie się kół do tyłu poprostu odwróć kierunki obrotu silników.
OMIJANIE PRZESZKODY
Algorytm prostego omijania przeszkód jest podobny do przedstawionego powyżej. Można go opisać następująco:
1. Jeśli nic nie znajduje się w polu widzenia czujnika (ODLEGŁOŚĆ < 150) jedź do przodu. 2. Kiedy zauważysz przeszkodę (150 < ODLEGŁOŚĆ < 300) skręcaj w lewo. 3. Jeśli przeszkoda jest bardzo blisko (ODLEGŁOŚĆ > 300) cofaj się.