Tag: snap

Arduino - Przycisk

Snap4Arduino – przycisk

Przycisk to najprostszy analogowy czujnik, zależnie od tego czy jest wciśnięty czy nie, przepuszcza bądź nie prąd elektryczny.

Przycisk, który wchodzi w skład zestawu NA KOŁACH to najprostszy przycisk CHWILOWY tzn. taki, który przepuszcza prąd tylko w momencie naciśnięcia (i trzymania).

Schemat połączenia

Przycisk podłączamy do Arduino jak na poniższym zdjęciu. Lewa nóżka podłączona do +5V, prawa do odczytu – pinu cyfrowego nr 3 (lub jakiegokolwiek innego, poza 0 i 1, które są zajęte przez komunikację z komputerem). Dodatkowo prawą nóżkę przy pomocy opornika (np. 100kOhm lub innego) podłączamy do GND.

Arduino - Przycisk

Opornik zapobiega tzw. PŁYWANIU odczytów. Aby pin cyfrowy dawał stabilne odczyty, musi być podłączony stale do 5V lub GND. Bez opornika w momencie gdy przycisk byłby NIEWCIŚNIĘTY pin numer 3 nie byłby do niczego podłączony (odcięty od +5V i GND), dzięki opornikowi w momencie gdy przycisk jest NIEWCIŚNIĘTY pin 3 podłączony jest do GND, a w momencie gdy przycisk jest WCIŚNIĘTY, pin 3 podłączony jest do 5V (i jednocześnie do GND ale 10 000 razy słabiej niż do +5V, przez co odczyt wskazuje +5V).

Programowanie

W Snap4Arduino stworzymy prosty program, który po naciśnięciu przycisku odtwarzać będzie dźwięk.

Jako dźwięk możesz wykorzystać dowolny plika audio (MP3 lub WAV), najlepiej żeby był krótki (mx kilka sekund). Możesz również skorzystać z poniższego sampla wibrafonu.
wibrafon

Aby dodać dźwięk do projektu w Snapie przełącz środkowe okno na zakładkę dźwięki a następnie po prostu przeciągnij ikonę z plikiem dźwiękowym do tej zakładki.

snap - dodawanie pliku dźwiękowego

Przed przystąpieniem do pisania programu musimy jeszczę utworzyć zmienną o nazwie PRZYCISK

Program ma następujący przebieg:
1. Po uruchomieniu (zielona flaga) ustawia pin cyfrowy nr 3 na WEJŚCIE (digital input) – odczytujące sygnały z zewnątrz
2. Wewnątrz pętli ZAWSZE ustawiamy wartość zmiennej PRZYCISK na wartość odczytaną z pinu nr 3 (do którego przypięty jest przycisk)
3. Sprawdzamy warunek, jeżeli wartość zmiennej PRZYCISK wynosi PRAWDA (czyli na pinie 3 jest +5V – przycisk jest wciśnięty) wówczas wyślij wiadomość GRAJ

W osobnym bloku (poza pętlą ZAWSZE) ustawiamy funkcję: kiedy otrzymam wiadomość GRAJ zagraj dźwięk WIBRAFON (lub inny dodany wcześniej do projektu)

snap-przycisk

Jeśli wszystko zostało ustawione poprawnie po naciśnięciu przycisku powinien zostać odtworzony dźwięk zaprogramowanej próbki audio.

potencjometr - adafruit

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ą.

potencjometr - adafruit
Ź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ą.

Potencjometr serwo - schemat

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:

snap - potencjometr odczyt

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.

snap potencjometr servo

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.

Snap4Arduino – Czujnik odległości

Czujnik odległości pozwala robotowi wykrywać znajdujące się przed nim przeszkody. W Lo Fi Robocie zdecydowaliśmy się na wykorzystanie czujników SHARP (dokładnie GP2Y0A41SK0F) ich główną zaletą jest prostota podłączenia i odczytywania pomiarów oraz ich stabilność.

sharp_czujnik

Czujnik podłączmy do Arduino przy pomocy trzech przewodów, najlepiej połączonych wtyczką JST 3-pin.
Wyjścia czujnika to odpowiednio:

1. Vo – sygnał pomiarowy – odpowidający odległości przeszkody od czujnika
2. GND – minus (-) – masa – uziemienie czujnika – podłączamy do GND Arduino lub niebieskiej listwy zasilającej na płytce prototypowej
3. Vcc – zasilanie czujnika – podłączmy do +5V

Sygnalizacja świetlno-dźwiękowa

Prostym przykładem wykorzystania czujnika odległości może być skonstruowanie sygnalizacji alarmowej, która dawać będzie sygnał świetlny i dźwiękowy w momencie wykrycia przeszkody z częstotliwością proporcjonalną do odległości przeszkody.

Do skonstruowania sygnalizacji potrzebujemy:

  • Arduino
  • Płytka prototypowa i kabelki
  • Czujnik odległości SHARP
  • Dioda LED
  • Buzzer – czyli mały głośniczek z wbudowanym generatorem
  • Podłączenie czujnika SHARP jest bardzo proste, do czujnika wepnij kabelek JST 3pin a następnie jego przewody połącz odpowiednio:
    1. Czerwony – +5V
    2. Czarny – GND
    3. Żółty – pin anologowy AO (lub jeśli wolisz jakiś inny pin analogowy)

    Sygnalizacja świetlno-dźwiękowa
    Nasza sygnalizacja składać się będzie z dwóch migających diod LED (wybór koloru zależy od Ciebie!) oraz tzw. buzzera.

    Buzzer wygląda jak mały głośniczek, różni się jednak tym, że posiada dodatkowo wbudowany tzw. generator, emitujący charakterystyczny piszczący dźwięk o wysokiej częstotliwości. Aby buzzer zaczął piszczeć wystarczy podłączyć go do zasilania.

    Podłączenie elektroniczne naszej instalacji alarmowej wygląda następująco:
    1. Buzzer (nóżkę oznaczoną +) podłączamy do pinu cyfrowego nr 4
    2. Za buzzerem szerogowo wpinamy diodę led (minus buzzera do plusa diody), krótszą nogę diody wpinamy do masy, tym razem dioda nie potrzebuje opornika, funkcję zabezpieczenia przed przepaleniem pełni buzzer.

    Programowanie

    Podłącz Arduino do komputera i połącz go ze Snap4Arduino

    W pierwszej kolejności zaprogramujemy prostą sygnalizację polegającą na uruchomieniu buzzera i diody w momencie gdy wartość odczytana z czujnika przekroczy określony poziom (w tym wypadku 100).

    W zakładce DANE kliknij przycisk UTWÓRZ ZMIENNĄ i nazwij ją ODLEGŁOŚĆ

    Konstrujemu następujący algorytm:
    1. Po uruchomieniu programu (zielona flaga) ustaw pin cyfrowy 4 jako DIGITAL OUTPUT (wyjście)
    2. W pętli ZAWSZE odczytujemy wartość z pinu analogowego nr 0 (do którego podłączony jest czujnik) i przypisujemy ją do zmiennej ODLEGŁOŚĆ
    3. Jeżeli wartość zmiennej ODLEGŁOŚĆ przekroczy 100 ustawiamy wyjście na pinie 4 jako PRAWDA (włączamy buzzer i diodę) w innym wypadku ustawiamy ją jako FAŁSZ (wyłączamy buzzer i diodę)

    snap_sygnalizacja_prosta

    Po uruchomieniu programu zwróć uwagę że w prawym górnym rogu ekranu pojawiło się pole zmiennej ODLEGŁOŚĆ, w którym na bieżąco wyświetlane są wartości odczytane z czujnika odległości, wartość ta powinna się zmieniać w zakresie 2-600 jednostek. Zwróć uwagę, że nie są to rzeczywiste pomiary odległości w centymetrach, żeby je uzyskać należałoby wyniki odpowiednio przeliczyć, proces ten nazywa się kalibracją czujnika, w tym wypadku nie jest nam ona potrzebna.

    W momencie zbliżenia ręki do czujnika, gdy wartość odległości przekroczy 100, buzzer i dioda zostają uruchomione, gdy oddalimy rękę (odległość spada poniżej 100) buzzer przestaje piszczeć.

    W dalszej kolejności rozwińmy nasz program tak aby buzzer zamiast jednostajnego pisku wykonywał sekwencję “piknięć”, której tempo (częstotliwość) zależeć będzie od odległości przeszkody wykrytej przez czujnik odległości

    Modyfikujemy nasz program w następujący sposób:
    1. Tworzymy nową zmienną TEMPO, której wartość będzie zależna od zmiennej odległość ale przeliczonej odpowiednio tak aby zmieniała się ona w zakresie od 0.2 do 0.1 i zmniejszała się w momencie zbliżania przeszkody do czujnika.
    2. W pętli JEŻELI dodajemy bloki CZEKAJ z wartością odpowiadającą zmiennej TEMPO (czyli zależnie od odległości przeszkody czekaj od 0.2 do 0.1 sekundy) i podobnie jak w przykładzie BLINK włączamy buzzer, czekamy wartość TEMPO, wyłączamy buzzer, czekamy wartość TEMPO, dzięki czemu buzzer i dioda będą cyklicznie pulsować a częstotliwość pulsowania zależy od zmiennej TEMPO.

    snap_sygnalizacja_tempo

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ć.

Snap - klawiatura wybór klawiszy

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.

snap_klawiatura1

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).

Snap klawiatura

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

Servo snap

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).

Snap4Arduino – Fading – Zmiana jasności diody

PWM – płynna zmiana jasności diody

Poniższy przykłąd jest odwzorowaniem przykładu Arduino o nazwie FADING, pokazującego najprostszą możliwość sterowania zewnętrznym urządzeniem (w tym wypadku diodą LED) przy pomocy sygnału PWM. Efektem tego przykładu jest świecenie diody płynnie zmieniające poziom jasności od 0 do 100%.

Co potrzebujesz:

1. Arduino
2. Dioda LED
3. Opornik o wrtości od 100Ohm do 10kOhm (im większa wartość opornika tym dioda słabiej będzie świecić)

Schemat:

Diodę LED podłącz (przez opornik) do pinu cyfrowego numer 9, zwróć uwagę, że na płytce Arduino jest on oznaczony falką ~ podobnie jak piny 13, 11, 10, 6, 5 i 3 tylko one mogą generować sygnał PWM.

Program:

Połącz Arduino z Snap4Arduino, w zakładce DANE wybierz opcję STWÓRZ ZMIENNĄ i nazwij ją JASNOŚĆ a następnie złóż następujący program:
fading

Algorytm działania programu wygląda następująco:
1. Po kliknięciu zielonej flagi (uruchomieniu programu) ustaw pin nr 9 jako WYJŚCIE PWM
2. Ustaw początkową wartość zmiennej JASNOŚĆ na 0 (dioda nie świeci)
3. Rozpocznij wykonywanie pętli ZAWSZE – powtarzaj zawarte w niej instrukcje aż do zatrzymania programu.
4. Do momentu aż zmienna JASNOŚĆ osiągnie wartość maksymalną, czyli 255 (dioda świeci najjaśniej), zwiększaj ją stopniowo o 1 i tak samo ustalaj wartość PWM na pinie nr 9
5. Gdy JASNOŚĆ osiągnie wartość maksymalną zacznij ją stopniowo zmniejszać o 1 (i tak samo wartość PWM na pinie 9), aż osiągnie wartość 0
6. Rozpocznij od początku wykonywanie pętli ZAWSZE

Efektem programu powinno być stopniowe rozjśnianie i ściemnianie diody LED. Spróbuj zamiast diody podłączyć mały silniczek DC (wyjmując również opornik od diody – silnik potrzebuje dużo energii, opornik by ją niepotrzebnie zmniejszał) zobaczysz, że podobnie jak dioda zmieniała swoją jasność silnik będzie zwiększał prędkość swojego obrotu. Sygnał PWM jest jedną z możliwości regulowania prędkości silników na prąd stały.

Snap4Arduino – Blink – Miganie diody

Ćwiczenia

Sterowanie diodą – BLINK

Poniższy kod jest odwzorowaniem najprostszego standardowego przykładu Arduino o nazwie BLINK (w programie Arduino znajdziesz go w zakładce Plik->Przykłady->01.Basics->Blink), jego celem jest pokazanie najprostszego możliwego sterowania pinem cyfrowym a efektem miganie diody podłączonej do pinu nr 13.

Co potrzebujesz:

1. Arduino
2. Dioda LED
3. Opornik o wrtości od 100Ohm do 10kOhm (im większa wartość opornika tym dioda słabiej będzie świecić)

Schemat:

Podłącz dlodę LED do pinu numer 13. Dłuższą nogę diody (anodę) wepnij w pin 13, a krótszą (katodę) wepnij do sąsiedniego pinu GND (ang. Ground, czyli tzw. MASA, czyli MINUS), na schemacie widać że dioda połączona jest z opornikiem (jak zwykle kiedy podłączamy diodę do zasilania) ale w tym wypadku nie jest on konieczny, gdyż pin 13 w Arduino jako jedyny posiada wbudowany opornik.

Otwórz teraz Snap4Arduino, połącz go z Arduino i ułóż następujący program:

blink

Uruchom następnie program klikając na zieloną flagę jego efektem powinno być miganie diody co sekundę.

Algorytm działania programu opisać można następująco:
1. W momencie uruchomienia programu (kliknięcie na zieloną flagę) ustaw pin nr 13 jak CYFROWE WYJŚCIE (digital output)
2. Rozpocznij wykonywanie pętli ZAWSZE – czyli powtarzaj w nieskończoność (lub do momenty zatrzymania programu) instrukcje zawarte wewnątrz bloku ZAWSZE
3. Zapal diodę – ustaw stan pinu numer 13 na PRAWDA – czyli tzw. stan wysoki, czyli ustaw na nim napięcie 5 voltów – dioda będzie podłączona do zasilania
4. Poczekaj 1 sekundę
5. Zgaś diodę ustaw stan pinu numer 13 na FAŁSZ – czyli tzw. stan niski, czyli ustaw na nim napięcie 0 voltów – dioda zostanie odłączona od zasilania
6. Poczekaj 1 sekundę
7. Rozpocznij od początku pętlę zawsze