You are on page 1of 33

Interakcje wizualno - muzyczne

Marcin Wierzbicki

Arduino Twj may interaktywny przyjaciel

4 6 marca 2011

I. Zamiast wstpu
1. Arduino co to za zwierz?
Arduino powstao w roku 2005 jako projekt typu OpenHardware przede wszystkim z myl o studentach robotyki i kierunkw technicznych. Urzdzenie stanowi miao programowalny, a wic uniwersalny sterownik oraz platform do konstruowania projektw interakcyjnych. Jeli do powyszego opisu doda, i Arduino od pocztku dawao si sprzga z komputerem za porednictwem portu szeregowego oraz posiadao kilka do kilkunastu wej analogowych oraz wej/wyj cyfrowych, oczywistym si staje, i to mae urzdzenie musiao pa prdzej ni pniej ofiar zainteresowania ludzi sztuki, w szczeglnoci za sztuki multimedialnej. Nim rozpoczniemy interaktywn przygod z Arduino w wiecie dwiku i obrazu, warto jednak nadmieni, choby dla porzdku, i Arduino jest urzdzeniem posiadajcym wiele rnych praktycznych zastosowa we wszelkich niemal dziedzinach ycia i nauki. Od sterownika systemem fontann, poprzez superszybki i super precyzyjny wyzwalacz migawki aparatu fotograficznego sterowany dwikiem (pozwalajcy na przykad sfotografowa kul w momencie uderzenia w cel, albo rozprysk jaki tworzy kropla wpadajc do wody), po przernego rodzaju systemy cross-platform pozwalajce na zastosowanie popularnych sterownikw gier komputerowych (WiiMote, GameBoy) do sterowania urzdzeniami gospodarstwa domowego, projektami naukowymi czy grami, niekoniecznie jednak komputerowymi. Liczba zastosowa Arduino tych ju wdroonych, jak i tych czysto teoretycznych, wydaje si by ograniczona jedynie ludzk fantazj. Nie tylko zreszt pomysowo, ale i poczucie humoru jest cech jake pomocn w pracy z tym maym urzdzeniem. Obok realizacji niezwykle powanych, znajdujemy w internecie wiele projektw kompletnie zwariowanych, wrd ktrych moim faworytem jest BotaniCalls (http://www.botanicalls.com/) pozwalajcy rolinom doniczkowym na kontaktowanie si z ich opiekunami za porednictwem telefonu komrkowego (sic!). Wikszo tych projektw, podobnie jak samo Arduino posiada status OpenSource, dziki czemu (oraz oczywicie dziki niezwykle precyzyjnym opisom ich realizacji, dostpnym w internecie), kady posiadacz Arduino moe skorzysta z tej skarbnicy wiedzy i dowiadczenia oraz wybra wasn drog poznania wiata kreatywnej technologii, z preferencj wyboru trasy od zabawy poprzez sztuk do nauki lub w kierunku odwrotnym od nauki poprzez sztuk do zabawy, albo te rozpoczynajc w dowolnym jej miejscu, na sztuce skoczywszy. Tej wanie, ostatniej marszruty niniejszy skrypt stanowi bdzie mini przewodnik.

2. Szczypta historii
2.1. Rozwj technologii. Prezentacja modeli
Arduino w cigu 6 lat od chwili powstania dorobio si nie tylko kilkunastu wersji, ale take licznych klonw. Obroso take w rnego rodzaju peryferia i gadety. Pierwszym Arduino byo Serial Arduino zbudowane na bazie 8-bitowego procesora AVR ATmega8, miao 6 wej analogowych oraz 14 programowalnych wej/wyj cyfrowych w standardzie TTL z czego niektre mogy take obsugiwa sygna PWM. Ponadto posiadao wyjcie zasilajce 5V oraz 9V oraz wyprowadzenie masy. Ten standard powielony zosta w nastpnym wcieleniu Arduino USB (w wersji
2

poprawionej znanym jako Arduino Extreme), po raz pierwszy wyposaonym w zcze USB, ktre mogo jednoczenie doprowadza zasilanie z komputera do ukadu (wejcie zasilacza jednak pozostawiono, z uwagi na to, i rwnie popularnym jak interakcja z komputerem, jest dziaanie Arduino jako niezalenego w peni funkcjonalnego procesora/kontrolera). W takiej postaci ukad powielono w kolejnych wersjach, wprowadzajc rozszerzenia i modyfikacje, a czasem przeciwnie redukujc konstrukcje urzdzenia w celu jego miniaturyzacji. Tak powstao: Arduino NG nastpca Arduino Extreme posiadajcy te same waciwoci, jednak o ulepszonej konstrukcji oraz poprawionym oprogramowaniu Arduino NG+ zbudowany na bazie nowego ukadu ATMega168 (gown rnic byo rozszerzenie pamici operacyjnej ukadu do 16 kB) Arduino Mini zminiaturyzowana wersja Arduino zbudowana na bazie powierzchniowo montowanego ukadu ATMega168, pozbawiona wikszoci wystajcych i duych elementw, jak gniazdo zasilania czy zcza typu pin (zamiast tego posiadajca wyprowadzenia do lutowania kabli poczeniowych bezporednio na pytce). Wyposaona w gniazdo miniUSB typu B. Do zastosowa, gdzie kontroler powinien byc zamontowany na niewielkiej powierzchni lub dobrze schowany. Wersja pierwsza Arduino Mini nazywaa si Arduino Stamp 02 Arduino Bluetooth (BT) wariant Arduino NG z wbudowanym transmiterem/ /receiverem Bluetooth. Ten model nie posiada zcza USB (komunikacja z komputerem odbywa si moga za porednictwem Bluetooth), mg by za to zasilany z baterii. Bez wtpienia jest to pierwszy ukad przeznaczony do dziaa w warunkach, w ktrych poczenia kablowe kontrolera z innymi elementami (jak np. komputer) utrudniayby lub uniemoliwiayby realizacj projektu. Trzeba jednak przy tym nadmieni, i niewielki zasig transmitera Bluetooth nawet i w tym przypadku nie pozwala na oddalanie kontrolera od komputera na odlego wiksz ni kilka metrw i to wycznie w warunkach idealnych (brak fizycznych przeszkd czy zakce osabiajcych sygna) Arduino Diecimilla w zasadzie nie ma istotnych rnic konstrukcyjnych pomidzy tym modelem a wczesniejszym (NG+). Jedyn istotn, i rzeczywicie przydatn, now cech modelu Diecimilla bya moliwo zdalnego resetu kontrolera za pomoc komputera. Tu naley wyjani, i zaadowanie nowego programu do pamici Arudino poprzedzone by musi resetem kontrolera, co w przypadku starszych wersji Arduino naleao wykonywac wciskajc przycisk umieszczony na pytce kontrolera, i to w okrelonej kolejnoci i czasie, a konkretnie na ok. 1 sekund przed transmisj (tzw. upload) programu z komputera do Arduino. Zbyt wczesny reset mg spowodowa, i mikroprocesor zacz ju wykonywa zaadowany w nim wczeniej program, natomiast reset zbyt pny, i pami FLASH nie bya jeszcze gotowa na przyjcie nowego kodu. W obu tych przypadkach transmisja kodu programu koczya si niepowodzeniem. Od modelu Diecimilla kontroler wykonuje automatycznie reset na zlecenie komputera przed wysaniem nowego kodu. Mimo to przycisk reset na pytce kontrolera zosta zachowany. Nazwa tego modelu w jz. polskim oznacza dziesi tysicy i wskazuje na fakt, i przed
3

wypuszczeniem tego modelu na rynek sprzedano ponad 10.000 wczeniejszych wersji Arduino. Arduino Duemillanove (2009) w swojej drugiej wersji, ktrej produkcja rozpocza si 1 marca 2009 r. wprowadzi zupenie nowy procesor ATmega328, z pamici rozszerzon do 32 kB, dziki czemu model ten posiada nie tylko wicej miejsca na kod programu, ale take mona w niej tworzy wiksze bufory danych (np. w celu przechowywania krtkich sampli wzgldnie wikszych tablic z danymi). Ten model zawiera take szereg drobniejszych usprawnie, m.in. automatycznie wybiera rdo zasilania (USB/zasilacz). Wczeniejsze modele wymagay ustawienia tego za pomoc odpowiedniego przecznika na pytce ukadu.

Arduino Duemillanove

Arduino Mega jest zupenie inn konstrukcj pod wieloma wzgldami, przy zachowaniu jednak cakowitej zgodnoci z wersjami starszymi, co do oprogramowania jak i co do moliwoci podczania peryferiw. Bazujcy na mikroprocesorze ATmega1280, posiada nie tylko wicej pamici FLASH od poprzednich modeli, ale take znacznie wiksz liczb wyprowadze. Przede wszystkim mamy tu a 16 wej analogowych. Pojawiaj si take nowe wejcia/wyjcia cyfrowe z podziaem na te, ktre przyjmuj/wysyaj sygna PWM w liczbie 14, te ktre su do komunikacji z peryferiami lub innymi urzdzeniami dziaajcymi w standardzie UART (w sumie 4 porty w ukadzie TX/RX), oraz 32 zwyke wejcia/wyjcia cyfrowe numerowane od 22 do 52. ______________ Opisane powyej modele, jakkolwiek ju nie produkowane, pokazuj w sposb klarowny poszczeglne etapy rozwoju Arduino. Sam kontroler rozwija si nadal bardzo dynamicznie, a lista obecnie dostpnych modeli obejmuje: ______________ Arduino Uno najnowsza konstrukcja, w ktrej gwnie poprawiono design oraz funkcjonalno. Nowy kontroler USB zastosowany w tej wersji Arduino ma rozszerzone moliwoci komunikacji z komputerem. Arduino Mega 2560 stworzona rwnolegle z Uno wersja Arduino Mega z podwojon pamici FLASH (256 kB) oraz nowym, takim samym jak w Uno kontrolerem USB.

Tyle, jeli chodzi o rozwj technologii. Warto jednak pamita, i Arduino to przede wszystkim kontroler mogcy dziaa samodzielnie, dajcy si zastosowa tam, gdzie uycie komputera, ze wzgldu na jego gabaryty, byoby niemoliwe. Dlatego te osobn gazi rozwoju Arduino jest miniaturyzacja zapocztkowana przez Arduino Mini. Do tej linii nale: Arduino Nano funkcjonalnie odpowiednik Arduino Diecimilla, posiadajcy jednak 8 (zamiast 6) wej analogowych Arduino Fio w zasadzie to samo, co Nano, jednak wyposaony w zcze pozwalajce na sprzgnicie go ze specjaln zminiaturyzowan wersj XBee, tj. urzdzenia do komunikacji bezprzewodowej LilyPad odpowiednik Arduino Duemillanove na bazie ukadu ATmega168V (wzgldnie ATmega328V) o niszym ni wersje podstawowe zuyciu prdu. Bardzo ciekawa konstrukcja na paskiej, okrgej pytce. Do niezbdnego minimum zredukowano tu wszystkie wystajce czci nie ma wypukych lutowa, brak jest te gniazd czy zcz, poza 4pinowym zczem serwisowym sucym przede wszystkim do podpicia kontrolera USB, niebdcego standardowym wyposaeniem pytki. Wszystkie wyprowadzenia znajduj si na obwodzie pytki w postaci otoczonych warstw przewodzc dziurek. Podczenia LilyPad za pomoc tych wyprowadze mona dokona na dwa sposoby: albo przeszywajc przez dan dziurk specjaln przewodzc nitk albo wykorzystujc otaczajc j przewodzc struktur jako podstawe do zlutowania z typowym przewodem zaizolowanym. Ponadto dziurki suy maj umocowaniu/przyszyciu samego LilyPad do kostiumu, bowiem ta wersja Arduino stworzona zostaa z myl o projektach lub instalacjach, gdzie kontroler powinien w jaki sposb by zintegrowany z wykonawc lub te kostium, jaki nosi wykonawca jest sam w sobie interaktywn czci instalacji. Powysza skrcona prezentacja nie jest w adnym wypadku pena. Pominite zostay (a niekiedy zaledwie wspomniane) wersje prbne lub porednie niektrych modeli, brak te jest opisu modeli wymagajcych od uytkownika wikszej wiedzy na temat elektroniki (jak np. Arduino Pro lub Pro Mini). Szczegowy wykaz wszystkich produkowanych i nieprodukowanych ju modeli Arduino znale mona pod tym adresem: http://arduino.cc/en/Main/Hardware

2.2. Shields czyli dodatki i gadety


Wraz z powstawaniem kolejnych modeli Arduino oraz z rosncym zainteresowaniem tym kontrolerem, w szczeglnoci za pod wpywem rosncej listy potencjalnych zastosowa tego urzdzenia, wzrastaa take liczba dodatkowych urzdze zgodnych z Arduino i pozwalajcych si montowa bezporednio na nim wzgldnie podpina pod odpowiednie zcza, ktrych zadaniem jest rozszerzanie moliwoci sprztowych kontrolera. Budowane s one najczciej w bardzo prosty sposb, na pytkach montaowych, std nazywane s shields. Obecnie liczba produkowanych odmian rnych peryferiw jest tak dua, i ich choby pobiena prezentacja
5

wykracza znacznie poza ramy tego skryptu. Z najwaniejszych i najbardziej popularnych warto z pewnoci wyliczy: XBee urzdzenie suce do bezprzewodowej transmisji w protokole IEEE 802.15.4. Naley podkreli, i niestety nie jest to protok zgodny z obecnie najpopularniejszym standardem transmisji bezprzewodowej, tzn. WiFi (IEEE 802.11), std te aby dokona transmisji pomidzy Arduino a komputerem potrzebujemy co najmniej dwch ukadw XBee naoonych na dwa XBee Shield. Nie potrzebujemy natomiast dwch Arduino, gdy sam XBee Shield posiada interfejs USB i jest w stanie komunikowa si z komputerem bez pomocy Arduino. Oprcz komunikacji bezprzewodowej pomidzy Arduino a komputerem, para XBee w obudowach XBee Shield moe take suy do komunikacji pomidzy dwoma Arduino bez porednictwa komputera. Generalnie istnieje moliwo tworzenia sieci wielu Arduino wyposaonych w XBee. Teoretyczny zasig XBee to ok. 30 m w pomieszczeniach i ok. 100 m w przestrzeni otwartej. Trzeba jednak pamita, o tym, i wszelkie przeszkody oraz zakcenia (np. dziaanie innych urzdze bezprzewodowych, w tym WiFi) moe znacznie zmniejsza si sygnau. Praktyczne dowiadczenia pokazuj, i gwarantowany zasig XBee w warunkach scenicznych przy zastosowaniu nadajnika XBee wszytego w kostium wykonawcy, przez co osonitego, ogranicza si do 10-15 m. Przy wikszym dystansie transmisja jest co prawda moliwa, ale jej stabilno moe nie by zadowalajca.

XBee Shield

Ethernet Shield wyposaona w standarodowe gniazdko Ethernetowe pytka umoliwiajca podczenie Arduino do internetu lub sprzgnicie z innymi urzdzeniami posiadajcymi zcza Ethernet w wewntrzn sie. Istniejce w zasobach internetu darmowe biblioteki oprogramowania pozwalaj na szeroki zakres wykorzystania Arduino w sieci zgodnie z protokoami transmisji TCP oraz UDP. Bardzo interesujce rozwizanie szczeglnie w czasach ekspansji sztuki w internecie oraz zdecydowanie wiodcego standardu w dziedzinie komunikacji pomidzy urzdzeniami i oprogramowaniem multimedialnym, jakim jest OSC. Motor Shield pytka, dziki ktrej mona bezporednio z programu uruchomionego w Arduino sterowa niskonapiciowymi silniczkami na prd stay (takimi, jakie powszechnie uywa si w modelarstwie). Tego typu rozwizanie sprawdzi si doskonale w konstruowaniu mobilnych instalacji, ruchomych rzeb czy innych form artystycznych, ktrych podstaw stanowi ruch, przemieszczanie si lub obrt obiektu wok wasnej osi.
6

Spord niezwykle dugiej listy peryferiw do Arduino, ktrej najpeniejsz chyba prezentacj w internecie odnale mona pod tym adresem: http://shieldlist.org/ wymieni warto takie, jak elementy tzw. user interface (joysticki, systemy wcznikw/wycznikw, dotykowe ekrany LED, etc.), mikrofony lub goniki sprzone z przedwzmacniaczami oraz inne proste urzdzenia audio na pytkach od razu do montau na Arduino, interfejsy video typu TV-out lub video capture, odbiorniki GPS, czytniki kart SD oraz kart kredytowych (sic!), interfejsy MIDI czy proste samplery a nawet syntezatory sterowane z Arduino.

Motor Shield Kit

2.3. Klony
Decyzj konstruktorw Arduino byo niezastrzeganie praw patentowych do tej konstrukcji, tote rozwizanie to funkcjonuje na zasadach licencji OpenHardware. Konsekwencj tego faktu jest olbrzymia ilo rnego rodzaju wariantw Arduino produkowanych czy to komercyjnie, czy to metodami domowymi na caym wiecie. Walorem tych alternatywnych rozwiza niekoniecznie jest konkurencyjna cena; czciej chodzi o rozszerzenie moliwoci wzgldem konstrukcji bazowej, jak np. Zigduino, posiadajce wbudowany interfejs bezprzewodowy XBee czy Illuminato Genesis, konkurencyjny wzgldem Duemillanove dziki swoim 64 kB pamici oraz 42 wejciom/wyjciom (dopiero Arduino serii Mega podbio tu znacznie standard oferujc nie tylko 256 kB pamieci w wersji mega 2560 ale take zestaw 16 wej analogowych oraz 54 wejcia cyfrowe w rnej konfiguracji). Wrd klonw znajdujemy take konstrukcje kompaktowe, czasem nawet mniejsze od oryginalnych Mini czy Fio. Do najpopularniejszych przykadw nale tu Boarduino, Modified Pico czy Femtoduino bazujcy na zgodnym z ATmega328p ukadzie QFN32 kontroler wielkoci... paznokcia! ________________________ Uwaga! W dalszej czci opisu pracy z kontrolerem Arduino wszystkie przykady, rozwizania oraz szczegy techniczne odnosi si bd do modelu Arduino Uno, chyba, e zostanie wyranie zaznaczone, i jest inaczej. W zdecydowanej wikszoci zastosowa Arduino Uno zgodne jest w d ze wszystkimi modelami linii podstawowej (NG+, Diecimilla, Duemillanove) oraz, przynajmniej co do zgodnoci na poziomie oprogramowania, ze wszystkimi innymi kontrolerami. Arduino Mega (w tym Mega 2560), jako ukadowi o rozszerzonych moliwociach powicony zostanie osobny rozdzia.
7

3. yk technologii
3.1. Wejcia, wyjcia itp.
Charakter tej pracy (szczliwie) nie wymaga analizowania struktury nalutowanych na pytce Arduino komponentw, ich waciwoci elektrycznych oraz funkcji w strukturze caej konstrukcji. Znacznie waniejszym dla uytkownika Arduino, ktry nie bdc z zawodu inynierem elektronikiem, ma jednak jako takie pojcie o elektryce, oraz podstawach fizyki i informatyki, przede wszystkim za chciaby zastosowa ten kontroler w dziaaniach kreatywnych, bdzie zapoznanie si z funkcjonalnoci Arduino, a konkretnie co i jak moemy do niego podczy, by uzyska satysfakcjonujcy rezultat.

3.1.1 Wejcia analogowe


Typowe Arduino posiada 6 wej analogowych (Arduino Mega ma ich 16; niektre klony mog te charakteryzowa si inn iloci wej), przyjmujcych napicie w zakresie od 0 do +5V, a wic w zakresie typowym dla wikszoci podzespow elektronicznych. Konwerter analogowo-cyfrowy Arduino pracuje w rozdzielczoci 10bitowej, co oznacza, e wartoci na wejciu analogowym reprezentowane s przez liczby w zakresie 01023. Warto nadmieni, i cho w obecnej wersji wejcia analogowe zabezpieczone s, do pewnego puapu tolerancji, przed przepiciami oraz zwarciami, obcianie wej Arduino wyszymi napiciami moe doprowadzi do spalenia ukadu. W przypadku wej analogowych istotna jest nie tylko wielko napicia ale take pozytywna polaryzacja. Wejcie nie reaguje poprawnie na napicia ujemne (a jeli nawet, to najczciej uszkodzeniem ukadu), tak wic w przypadku podczania urzdze audio typu mikrofon, dziaajcych w zakresie symetrycznym od wartoci ujemnej do dodatniej napicia (np. -2.5V do +2.5V) naley pomidzy nzk sygnaow takiego urzdzenia a wejcie analogowe Arduino wstawi odpowiedni opornik lub potencjometr by odpowiednio przesun tzw. DC offset sygnau w stron wartoci dodatnich. Do wej analogowych podczy mona takie urzdzenia jak: fotorezystory, potencjometry, analogowe (napiciowe) czujniki temperatury, ruchu, nacisku (pressure), zgicia (flex), analogowe akcelerometry (czujniki przyspieszenia) oraz wiele innych urzdze pracujcych w zakresie napi od 0 do +5V. Urzdzenia pracujce w innym zakresie napi (np. mikrofony elektretowe) mog zosta podczone po zastosowaniu odpowiedniego ukadu wzmacniajcego/redukujcego napicie wyjciowe tych urzdze.

3.1.2. Wejcia/wyjcia cyfrowe


Kady spord 14 wyprowadze cyfrowych Arduino moe by zaprogramowany jako wejcie lub wyjcie. Dodatkowo niektre wyprowadzenia (rnie w zalenoci od modelu Arduino) posiadaj moliwo przyjmowania lub wysyania sygnay PWM, dziki czemu moliwe jest zastosowanie samego Arduino bez specjalnych nakadek, aczkolwiek nie bez pomocy kilku/kilkunastu prostych elementw elektronicznych, jako urzdzenia sterujcego silnikami czy prostego syntezatora. Do wyprowadze cyfrowych, po ustawieniu ich jako wejcia, podpi moemy wszelkie tranzystorowe lub diodowe ukady pomiarowe, w tym fotodiody, odbiorniki
8

IR, czujniki ruchu, ultradzwikowe czujniki zblieniowe (podobne do czujnikw parkowania montowanych w samochodach), wczniki typu switch lub button, bramki inne ukady logiczne dziaajce w standardzie TTL. Do wyprowadze cyfrowych ustawionych jako wyjcia podczy moemy zwyke diody, zegary cyfrowe, dowolne inne urzdzenia sterowane cyfrowym sygnaem TTL, a do wyj typu PWM w przypadku Arduino Uno s to wyprowadzenia 3, 5, 6 oraz 9 do 11 goniczki (tzw. beepery lub buzzery) w celu otrzymania dwiku generowanego bezporednio przez Arduino. Warto wiedzie, i cyfrowe piny 0 i 1 s na stae sprzone z szyn RX i TX portu szeregowego Arduino, co w praktyce oznacza, e jeli Arduino jest podczone do komputera przez dowolny port szeregowy, wzgldnie sprzone z innym urzdzeniem typu shield piny 0 i 1 blokowane s na potrzeby dwukierunkowej transmisji szeregowej pomidzy Arduino a urzdzeniem peryferyjnym i jako takie, nawet jeli nie obsadzone, nie mog by wykorzystane jako cyfrowe wejcia wyjcia.

3.1.3 port szeregowy USB


Suy do transmisji danych pomidzy komputerem a Arduino. W obecnej wersji Arduino port nie wymaga specjalnych sterownikw po stronie komputera; jest automatycznie rozpoznawany przez wikszo oprogramowania dziaajcego w takich systemach jak Windows czy MaxOS. Komunikacja odbywa si dwukierunkowo. Transmisj z komputera do Arduino najczciej stosuje si w celu zaadowania programu dla procesora ATmega napisanego w specjalnej wersji jzyka Wiring w edytorze Arduino zainstalowanym w komputerze. Z kolei dane z Arduino do komputera wysyane s najczciej w wyniku dziaania zaadowanego do Arduino programu. Dane te pochodzce z analizy (wzgldnie przetworzenia) sygnaw pojawiajcych si na wejciach analogowych i cyfrowych Arduino stanowi podstaw interakcji w wielu projektach z wykorzystaniem Arduino i komputera. Ponadto port szeregowy suy moe take jako rdo zasilania Arduino.

3.1.4 Wejcia wyjcia napiciowe


Arduino dysponuje dwoma wyprowadzeniami, na ktrych podawane jest napicie o staej wartoci odpowiednio +3,3V oraz +5V. Napicie to uyte moe by do zasilania podpitych do Arduino czujnikw (np. fotorezystorw) wzgldnie urzdze peryferyjnych lub urzdze, ktrymi Arduino steruje (np. silniczek elektryczny). Na pytce Arduino znajdziemy take 3 wyprowadzenia GND, do ktrych mona podpi mas wszelkich urzdze i czujnikw podczane do Arduino. Ponadto Arduino posiada wyprowadzenie Vin, za pomoc ktrego moemy zasila Arduino, jeli jest montowane jako komponent wikszego systemu zasilanego z zewntrz oraz standardow wtyczk zasilacza niskonapiciowego, do ktrego podpi moemy taki wanie zasilacz o napiciu 5V, w przypadku, gdy Arduino ma dziaa samodzielnie, a wic take bez podczenia go z komputerem przez kabel USB, z ktrego w takim przypadku byoby zasilane.

3.1.5 Przycisk Reset

Na pytce Arduino znajduje si w widocznym miejscu przycisk Reset. Obecnie jego zastosowanie jest mocno ograniczone, aczkolwiek w starszych wersjach (np. NG), konieczne byo wcinicie tego przycisku za kadym razem tu przed transmisj nowego programu z komputera. W nowszych wersjach Arduino reset wykonywany jest na zlecenie komputera automatycznie przed kadym uploadem. Sytuacje, w ktrych przycisk Reset moe by przydatny zwizane s przede wszystkim z niewaciwym podpiciem do Arduino komponentw projektowanego systemu. W szczeglnoci w przypadku podania na dowolne z wej napicia wyszego ni 5V lub spowodowanie zwarcia pomidzy pinem napiciowym, a mas Arduino moe spowodowa jego zawieszenie. Trudno jest natomiast zawiesi Arduino poprzez nieprawidowy kod programu, gdy po pierwsze jzyk programowania Wiring jest bardzo prosty i przejrzysty i zawiera niewiele moliwoci wprowadzenia procesora w bd, po drugie za kod programu kompilowany jest ju w trakcie transmisji, a wikszo bdw wykrywana ju na tym etapie prowadzc do przerwania transmisji kodu i zablokowania jego wykonania w Arduino.

3.1.6. Diody kontrolne LED


Arduino posiada 4 diody kontrolne LED: ON, L, TX oraz RX. Dioda ON wieci si kiedy Arduino jest zasilane z dowolnego ze rde (z komputera, z zasilacza wzgldnie z innego urzdzenia wpitego w zcze Vin Arduino). Dioda ON wieci bdzie nawet, jeli do procesora Arduino nie zosta zaadowany aden program, a wic samo urzdzenie ani nie odbiera ani nie wysya adnych danych. Dioda L sprzona jest z cyfrowym wyprowadzeniem nr 13 w Arduino. Jeli na tym wyjciu ustawiony jest poziom wysoki (cyfrowa 1), dioda wieci. W przeciwnym wypadku dioda pozostaje zgaszona. Najprostszy, podstawowy program dla Arduino (omwiony w nastpnym rodziale) polegajcy na zawieceniu diody poczonej z wyprowadzeniem nr 13 w Arduino powyej modelu NG (ktry nie posiada diody L) nie wymaga wpicia diody zewntrznej po zaadowaniu program bdzie odpowiednio zapala i gasi diod L nalutowan na pytce Arduino. Diody RX i TX migaj za kadym razem kiedy odbywa si transmisja danych do (RX) lub z (TX) Arduino poprzez zcze USB lub cyfrowe wyprowadzenia 0 i 1. Obserwacja tych wanie diod jest najprostszym sposobem na sprawdzenie, czy taka transmisja si odbywa, bez sigania do bardziej skomplikowanych procedur typu skanowanie portu szeregowego komputera.

4. Przygotowanie skadnikw
Zanim zajmiemy si realizacj najprostszego przepisu na interakcj z uyciem Arduino, warto wiedzie, jakie elementy systemu tak co do sprztu jak i co do oprogramowania powinnimy zgromadzi. Oto wykaz najbardziej podstawowych.

4.1. Tzw. hardware


Przede wszystkim Arduino. W zalenoci od zaoe projektu bdzie to standardowa pytka (w tym wypadku Uno), lub pytka o rozszerzonych moliwociach (np. Mega), wzgldnie wersja zminiaturyzowana (np. Nano) albo pozwalajca si atwo wszy (LilyPad) i ukry w materiale z ktrego skonstruowana jest przygotowywana instalacja. Konieczny bdzie take kabel USB, typowy (tzw. A-B) w przypadku
10

standardowych kontrolerw lub A-miniB w przypadku kontrolerw zminiaturyzowanych. Uwaga: w niektrych przypadkach (np. LilyPad) naley take dokupi specjalny interfejs USB, gdy sam kontroler nie jest wyposaony w takie zcze. Jeli po wysaniu kodu programu Arduino ma dziaa niezalenie od komputera, bdziemy potrzebowali zasili je z zewntrznego zasilacza 5V lub z baterii (jeli dana pytka dopuszcza moliwo zasilania z baterii). Powysze to zestaw podstawowy, eby jednak nasz projekt by w jakimkolwiek znaczeniu tego sowa interaktywny, potrzebujemy jeszcze co najmniej dwch elementw: urzdze wejciowych (np. fotorezystorw) oraz urzdze wyjciowych (np. diod, goniczkw albo... komputera). Tu zestaw komponentw moe by nieograniczony, wzgldnie ograniczony jedynie nasz fantazj i wiedz. Niekiedy doczenie danego komponentu wejciowego lub wyjciowego wymaga uycia dodatkowych elementw elektronicznych opornikw, kondensatorw, tranzystorw itp. Naley zatem dokadnie przestudiowa opis projektu zanim zabierzemy si za jego instalacj. Czasem brak prostego opornika czyni cay system bezuytecznym, innym razem brak odpowiedniego skadnika lub niewaciwe dobranie jego parametrw moe doprowadzi do uszkodzenia Arduino. Oczywicie zamiast bawi si w elektronika-amatora, skorzysta moemy z licznych gotowych konstrukcji oferowanych w internecie (tzw. shields), jednakowo w pewnych bardzo prostych zastosowaniach nadal najbardziej opacalne a czasem jedyne moliwe s rozwzania wykonane metod chaupnicz, w innych za dostpno i cena peryferiw jest czsto czynnikiem bardziej deprymujcym ni konieczno signiecia po cyn i lutownic. Na koniec aby zbudowa system interaktywny potrzebowa bdziemy nie tylko cegie ale i zaprawy. Na etapie konstruowania bardzo przyda si tzw. pytka prototypowa (ang. breadboard) plastikowa podstawka z licznymi otworami, wewntrz ktrych znajduje si materia przewodzcy uformowany w rodzaj minizacisku. Kabel woony w taki otwor nie wypadnie samoczynnie (cho relatywnie atwo bdzie si da wycign).

Pytka prototypowa (Breadboard)

Poszczeglne otworki poczone s ze sob w obwd rzdami lub kolumnami, co daje moliwo spicia w szereg kilku do kilkunastu elementw. Aby pracowa z pytk prototypow najczciej stosujemy zestawy specjalnie przygotowanych zaizolowanych krtkich przewodw jednoyowych (od kilkunastu do kilkudziesiciu milimetrw dugoci), z izolacj zdjt na obu kocach na dugoci do 2-3 mm. Przyda si mog take zestawy tzw. jumperw (zwartych w pary lub wiksze ukady pinw) oraz krtkie kable zakoczone klemami, tzw. krokodylki. Nieocenione
11

w precyzyjnym montau oka si mae kombinerki oraz pinceta, a do przycinania kabli obcki.

Narzdzia oraz elementy montaowe a take miernik uniwersalny

Do testowania ukadu lub poszczeglnych jego pocze najlepiej uy uniwersalnego miernika prdu. Idealnie, jeli taki miernik posiada bdzie co najmniej funkcj pomiaru oporu w zakresie od 0 do 100 kOhm oraz napicia prdu staego w zakresie od 0 do +12V. Na tym etapie nie jest konieczne uycie lutownicy, gdy wikszo elementw da si zainstalowa w pytce prototypowej bez lutowania. Nierzadko jednak po stworzeniu i przetestowaniu prototypu bdziemy chcieli umieci go w zdecydowanie bardziej stabilnym otoczeniu, tak by by przenony, a zwyke pocignicie za kabel nie dekonstruowao caej instalacji. W takiej sytuacji najskuteczniejszym rozwizaniem bdzie przeniesienie prototypu na miedzian pytk montaow, gdzie kady z elementw musi zosta wlutowany. W tym skrypcie zatrzmamy si jednak na etapie budowania istalacji prototypowych, zatem kurs lutowania nie bdzie przedmiotem kolejnych jego rozdziaw. Tworzc system interaktywny na bazie Arduino; obojtnie czy prototypowy czy lutowany, naley pamita, i pytka z kontrolerem nie jest w aden sposb izolowana ani zabezpieczona. Naley pamita, i napicie elektrostatyczne, ktre czsto zbiera si na powierzchni naszych ubra oraz skry moe by bardzo niebezpieczne dla elementw elektronicznych. W zwizku z tym, w miar moliwoci naley unika dotykania goymi rkami zarwno elementw nalutowanych na pytk Arduino, samej pytki, jak i poczonych ze znajdujcymi si na niej wyprowadzeniami innych elementw tworzonego przez nas systemu. Ponadto pytki z kontrolerem nie wolno ka na powierzchni przewodzcej (na przykad na metalowym lub mokrym blacie). Zwarcie znajdujcych si na spodniej stronie pytki lutowa moe doprowadzi do zniszczenia kontrolera. Z logicznego punktu widzenia komputer znajduje si poza obowizkowym zestawem podstawowym, jako urzdzenie potrzebne do przygotowania kodu programu dla Arduino. Komputer z pewnoci nie jest konieczny by stworzony na bazie Arduino system interaktywny dziaa i by w peni funkcjonalny, jednak byoby niezmiernie trudno zasili odpowiednim kodem programu znajdujcy si na pytce Arduino mikroprocesor inaczej, jak przygotowawszy go w specjalnym edytorze na ekranie komputera, by nastpnie zaadowa go poprzez zcze USB do Arduino. W takim kontekcie komputer spenia przede wszystkim rol GUI (graphic user interface), cho naley to podkreli, i wiele, jeli nie wikszo istniejcych projektw
12

interaktywnych zbudowanych na bazie Arduino wykorzystuje komputer jako aktywny skadnik systemu.

4.2. Tzw. software


Jeli nie wynika to jednoznacznie z prezentacji Arduino znajdujcej si na pocztku tego skryptu, najwysza pora powiedzie to jasno i wyranie: Arduino bez oprogramowania jest jedynie kawakiem elektronicznego zomu. Przyniesione prosto ze sklepu i podczone czy to do komputera czy czujnikw nie bdzie ani grao ani wiecio. Arduino nie jest wyspecjalizowanym urzdzeniem typu SensorBox czy Eobody, ktre posiada okrelony zestaw funkcji dziaajcych natychmiast po podczeniu urzdzenia do prdu. Arduino to uniwersalny kontroler, a jego uniwersalno jest zarwno jego zalet (bo moemy go zaprzc do dowolnej niemal cyber-roboty) jak i jego zmor (bo, eby go do czegokolwiek zmusi, trzeba mu to bardzo dokadnie wytumaczy w jego wasnym jzyku.

4.2.1 Kontekst
Podstawowym jzykiem programowania Arduino jest... Arduino, bdcy derywatem zestawu polece jzyka Wiring (http://wiring.org.co/), majcych zastosowanie w specyficznym rodowisku kontrolera. Baz dla jzyka Wiring byo C/C++, std powinowactwo midzy tym ostatnim, a jzykiem programowania Arduino jest niezwykle due. Innym rodowiskiem programistycznym, do ktrego odwouje si Wiring jest Processing, majcy znacznie szersze zastosowanie w przypadku tworzenia interaktywnych systemw graficznych. Kod jzyka Processing, bez zastosowania specjalnych bibliotek (np. Firmata) nie jest zrozumiay dla kompilatora Arduino, programowanie kontrolera bezporednio w tym jzyku nie jest zatem moliwe. Rozbudowane funkcje dotyczce przetwarzania grafiki, w jakie wyposaony jest Processing nie pozostaj jednak poza zasigiem Arduino. Istnieje co najmniej kilka sposobw na sprzgnicie tych dwch systemw; co najmniej jeden z tych sposobw omwiony zostanie w dalszej czci skryptu.

4.2.2. Oprogramowanie dla Arduino


Wracajc jednak do podstaw, programem ktry z ca pewnoci naley pobra z internetu i zainstalowa na komputerze, z ktrego chcielibymy adowa przygotowane aplikacje dla Arduino powinien by edytor Arduino dostpny pod adresem: http://arduino.cc/en/Main/Software Instalacja i uruchamianie tego programu jest niezwykle prosta a wyjanienie wszystkich zwizanych z tym zagadnieniem problemw omwione zostao na w/w stronie. Dlatego te w dalszej czci skryptu przyjmujemy zaoenie, e program w zosta pomylnie zainstalowany i poprawnie dziaa na danym komputerze. Wyjanienia moe wymaga jedynie sposb, w jaki naley skomunikowa edytor Arduino z samym kontrolerem, w celu transmisji do przygotowanego w edytorze programu. Aby tego dokona, naley sprawdzi czy w menu Tools/Serial Port edytora Arduino wybrany zosta port, do ktrego podczony jest kontroler, nastpnie z menu Tools/Board wybra waciwy typ kontrolera, by w kocu z menu File wybra funkcj Upload to I/O Board, ktra spowoduje wysanie kodu programu do kontrolera.

13

Jeli Arduino podczone zostao prawidowo, wszystkie w/w opcje wybrane wg stanu faktycznego, a kod nie zawiera bdw, transmisja kodu powinna zakoczy si wywietleniem komunikatu Done Uploading w dolnej czci okna edytora. Od tej pory Arduino automatycznie zaczyna wykonywa wysany kod. Niektre starsze wersje Arduino wymagay wcinicia przycisku reset na pytce Arduino tu przed transmisj kodu programu z komputera oraz tu po niej, w celu uruchomienia programu. W obecnych wersjach kontrolera zaadowany program automatycznie jest uruchamiany natychmiast po zakoczeniu procesu adowania go do pamici kontrolera oraz automatycznie uruchomi si za kadym razem, kiedy podczymy Arduino do zasilania. Poniewa Arduino wyposaone jest w pami RAM typu FLASH, kod programu przechowywany jest w Arduino nawet po odczeniu napicia. Nie jest wic konieczne adowanie programu za kadym razem, kiedy podczymy Arduino do raz stworzonego systemu interaktywnego. Pewnym organiczeniem jest natomiast to, e Arduino moe w danym momencie przechowywa wycznie jeden kod programu. Nie ma moliwoci skadowania w nim kilku rnych niezalenie dziaajcych programw i uruchamiania ich osobno czy po kolei. Za kadym razem zmiana funkcjonowania Arduino musi by poprzedzona zaadowaniem nowego kodu. Oczywicie ze wzgldu na istnienie w jzyku Arduino konstrukcji warunkowych, mona tak napisa program dla kontrolera, by w zalenoci od zaistnienia rnych czynnikw zewntrznych (np. wcinicia podczonego do wejcia cyfrowego Arduino wcznika typu switch) wykonywana bya jedynie dana cz kodu. Wracajc na chwil do procedury adowania kodu z edytora do Arduino, naley doda, i nieprawidowy z punktu widzenia skadni kod zostanie zdyskwalifikowany ju podczas adowania. Arduino zamiast komunikatu Done uploading wywietli nazw bdu, a w czarnym polu na samym dole okna jego bardziej szczegowy opis. Ponadto nieprawidowa linia kodu programu, zostanie podwietlona na to.

14

4.2.3. Oprogramowanie dla komputera


Jeli projekt, nad ktrym pracujemy zakada interakcj pomidzy Arduino a komputerem, winnimy rozway wybr odpowiedniego oprogramowania, ktre uruchomione w komputerze, odbiera bdzie pynce z Arduino dane, przetwarza lub na ich podstawie wykonywa okrelone dziaania. By moe zaistnieje take sytuacja, w ktrej bdziemy chcieli skomunikowa komputer z Arduino w kierunku przeciwnym, tzn. wysya za porednictwem wybranego przez nas programu komputerowego, dane do Arduino. W obu tych przypadkach posuy si musimy programem, ktry potrafi komunikowa si z urzdzeniami zewntrznymi za porednictwem portw szeregowych komputera, a dodatkowo komunkacja ta moe odbywa si na zupenie podstawowym poziomie, z pominiciem jakichkolwiek sterownikw (innymi sowy, powinnimy mie moliwo odbioru danych w postaci szeregu bajtw bezporednio z bufora pamici portu szeregowego, wzgldnie moliwo zapisywania bajtw danych bezporednio do bufora wyjciowego tego portu). Naley przy tym pamita, e poczenie bezprzewodowe za porednictwem Bluetooth odbywa si take na zasadzie zapisu/odczytu do portu szeregowego, w przypadku zatem pary urzdze komputer-ArduinoBT zasada dziaania bdzie taka sama. Wyjtkiem od powyszego moe by wsppraca komputera z Arduino wyposaonym w Ethernet Shield i podczonym kablem internetowym z komputerem. Tu z kolei powinnimy posuy si oprogramowaniem, ktre pozwala na komunikacj komputera z urzdzeniami zewntrznymi za porednictwem protokou TCP lub UDP.

4.2.3.1. MaxMSP
Wykadajc od razu karty na st, powiemy, i bdzie to gwny program do realizowania zada komputera w projektach interaktywnych opisywanych w tym skrypcie. Posiada wszystkie wymagane waciwoci, dziki ktrym wsppraca z Arduino moe przebiega na wszystkich platformach i w bardzo szerokim zakresie. Podstawowym obiektem obsugujcym komunikacj poprzez port szeregowy jest w MaxMSP obiekt [serial]. Z kolei w przypadku komunikacji za porednictwem internetu, transmisj pakietw danych zapewnia para obiektw [udpsend] i [udpreceive]. Ze wzgldu na to, i w dalszych rozdziaach wikszo przykadw realizowanych bdzie wanie w MaxMSP, na tym zakoczymy prezentacj tego programu w tej czci skryptu.

4.2.3.2. PureData
Jest to rodowisko pod wieloma wzgldami podobne do MaxMSP, tote wiele przykadw zrealizowanych w tym pierwszym bdzie si dao przepisa i bez adnych modyfikacji uruchomi w PureData. Jedn z waniejszych rnic pomidzy zastosowaniem PureData i MaxMSP w pracy z Arduino bdzie nazewnictwo niektrych istotnych dla projektu obiektw. Ju na samym pocztku napotykamy ten problem, gdy podstawowy obiekt sucy do komunikacji poprzez port szeregowy nazywa si w PureData [comport]. Parametry i skadnia tego obiektu s natomiast dosy zbiene z tymi, ktre akceptuje obiekt [serial] w MaxMSP. Natomiast komunikacj przez internet uzyskujemy za pomoc pary obiektw [netsend 1] i [netreceive 1], przy czym parametr 1 otwiera komunikacj UDP (brak parametru = komunikacja TCP).
15

4.2.3.4 Processing
Zgodnie z tym, co zostao napisane we wstpie do tego rozdziau, istnieje wiele zbienoci pomidzy jzykiem programowania Processing, a jzykiem jakim posugujemy si programujc Arduino. Najwaniejsz wspln cech jest z pewnoci to, i oba te rodowiska specjalizuj si w tym samym projektowaniu systemw interaktywnych. Istnieje relatywnie atwy sposb komunikacji pomidzy programem uruchomionym w kontrolerze Arduino, a programem napisanym w jzyku Processing, dziaajcym na komputerze sprzgnitym poprzez port szeregowy z Arduino. Bardzo prosty przykad takiej interakcji zamieszczamy poniej. Skada si on z: 1) programu napisanego w jzyku Arduino, odczytujcego warto podawan przez czujnik (w tym wypadku fotorezystor) wpity w wejcie analogowe A0 Arduino:
void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(A0)); delay(10); }

2) programu napisanego w jzyku Processing i uruchomionego na komputerze, pobierajcego wartoci przychodzce na port szeregowy komputera i wywietlajcego w oknie monitora supki o wysokoci rwnej pobieranym wartociom:
import processing.serial.*; Serial myPort; int xPos = 1; void setup () { size(400, 300); myPort = new Serial(this, Serial.list()[0], 9600); myPort.bufferUntil('\n'); background(0); } void draw () {} void serialEvent (Serial myPort) { String inString = myPort.readStringUntil('\n'); if (inString != null) { inString = trim(inString); float inByte = float(inString); inByte = map(inByte, 0, 1023, 0, height); stroke(127,34,255); line(xPos, height, xPos, height - inByte); if (xPos >= width) { xPos = 0; background(0); } else { xPos++; } } }

16

3) ukadu elektrycznego skadajcego si z poczenia fotorezystora z wejciem analogowym A0 Arduino przy zastosowaniu waciwego opornika (w tym przypadku 3 kOhm) korygujcego napicie w ukadzie:

Rezultat dziaania tego prostego projektu zobaczy mona na poniszej ilustracji bdcej zrzutem okna monitora programu Processing:

Jzyk Processing w poczeniu z moliwociami Arduino jako wielofuncyjnego kontrolera analogowo-cyfrowego daje nieskoczon wrcz ilo moliwoci tworzenia systemw interaktywnych, w szczeglnoci w dziedzinie sztuk wizualnych. W dalszej czci skryptu skupimy si jednak przede wszystkim na podstawach interakcji w sztuce ze szczeglnym uwzgldnieniem dziaa muzycznych. Do jzyka Processing wrcimy jeszcze na kocu skryptu. Tam te znale bdzie mona bardziej wyczerpujce omwienie powyszego przykadu. _______________

Jest jeszcze wiele innych programw, ktre w rnym stopniu nadawa by si mogy do stworzenia systemu interaktywnego na bazie tandemu komputerArduino. Trudno oceni, ktry z nich najlepiej do tego si nadaje. Najwaniejsze jest to, czy program, ktry wybierzemy pozwala na bezstratn i obustronn transmisj danych pomidzy Arduino a komputerem oraz czy posiada wszystkie funkcje pozwalajce na pen i bezkompromisow realizacj zaoonych w projekcie interakcji.
17

II. Oswajanie Arduino


1. Hello, World! dla Arduino
Tak, jak pierwszym programem, jaki modzi adepci programowania pisz w jzyku C, Basic czy Pascal jest prosta procedura wywietlajca na ekranie monitora tekst Hello, World!, tak w przypadku Arduino pierwszym krokiem w stron programowania jest procedura powodujca miganie diody L na pytce kontrolera. Program ten znajduje si wrd przykadw dostarczanych wraz z edytorem Arduino i mona go wywoa z menu File/Examples/1.Basics/Blink. Zanim jednak zajmiemy si nim w sposb rwnie naukowy, co kreatywny...

1.1. Kilka sw na temat jzyka, zanim zaczniemy si nim posugiwa


Co zostao ju w niniejszym skrypcie powiedziane, jzyk programowania Arduino ma wiele cech wsplnych z jzykiem C/C++. Wikszo polece jzyka Arduino pochodzi wprost z jzyka C/C++ i ma podobn skadnie oraz znaczenie. Podobnie jak w jzyku C, mona na pocztku kodu zadeklarowa za pomoc polecenia #include doczenie okrelonych bibliotek, ktre poszerzaj zasb polece o dodatkowe, czsto wyspecjalizowane procedury. Np. biblioteka <Ethernet.h> dodaje m.in. polecenie connect() pozwalajce na poczenie si ze zdalnym urzdzeniem w sieci o okrelonym IP oraz porcie. Podobnie, jak w jzyku C, na pocztku kodu programu (lub jego samodzielnej czci) powinny znajdowa si definicje staych i zmiennych, natomiast w dalszej czci definiuje si funkcje, na ktre skada si bdzie cay program. Nieco inaczej ni w jzyku C, konstrukcja programu w jzyku Arduino jest cile okrelona i ogranicza si do dwch funkcji: 1) setup() wykonywanej jeden raz na pocztku programu, zawierajcej najczciej procedury inicjujce pewne komponenty systemu (na przykad otwarcie portu szeregowego wraz z ustaleniem szybkoci transmisji danych za jego porednictwem); 2) loop() wykonywanej w cyklu cigym procedury gwnej. Mimo, i funkcja loop() jest z zaoenia wykonywana w ptli, zestaw polece jzyka Arduino, dziki instrukcjom warunkowym oraz poleceniom zwizanym z czasem, pozwala na zatrzymanie lub zaburzenie powtarzalnoci polece, na ktre skada si funkcja loop(). Ostatnim elementem jzyka programowania Arduino, na jaki warto zwrci uwag, jest moliwo umieszczania komentarzy w kodzie programu. Komentarze nie dusze ni 1 wiersz tekstu umieszczamy poprzedzajc je podwjnym znakiem ukonika (//), natomiast komentarze wielowierszowe obejmujemy rodzajem nawiasw, z czego nawias otwierajcy skada si z ukonika i gwiazdki (/*), a zamykajcy z tych samych znakw, jednak w odwrotnej kolejnoci (*/). Ta bardzo przydatna funkcja pozwala nie tylko na opisanie poszczeglnych fragmentw kodu dla podniesienia ich czytelnoci, ale ma take doskonae zastosowanie w dydaktyce, pomaga bowiem na ywym organizmie programu
18

wskazywa istotne dla jego przebiegu miejsca. W dalszej czci skryptu tam, gdzie bdzie to moliwe, kod programu omawiany bdzie wanie za pomoc umieszczanych w nim komentarzy. Omawianie wszystkich polece jzyka Arduino nie jest i nie moe by przedmiotem tego skryptu, zakadamy wic domylnie, w dalszej jego czci, i czytelnik przestudiowa ju (lub studiuje rwnolegle z lektur niniejszego skryptu) znajdujcy si w internecie pod adresem: http://arduino.cc/en/Reference/HomePage podrcznik szczegowo opisujcy wszystkie gwne polecenia Arduino oraz te, ktre zawarte s w oficjalnych bibliotekach Arduino doczanych za pomoc polecenia #include.

1.2. Migajca dioda


Oryginalny program Blink z zestawu przykadw edytora Arduino wyglda nastpujco:

/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }

// // // //

set the LED on wait for a second set the LED off wait for a second

Zanim przejdziemy do jej analizy maa uwaga techniczna dotyczca edytora Arduino. Na zaczonym powyej zrzucie ekranu atwo mona dostrzec, i poszczeglne elementy kodu programu maj rny kolor. To take bardzo przydatna cecha, pozwalajca ju na pierwszy rzut oka odrni nazwy funkcji jzyka Arduino (wywietlane w kolorze pomaraczowym), nazwy predefiniowanych staych (kolor niebieski), pozostay tekst kodu programu, taki jak nawiasy, liczby, operatory czy zmienne (w kolorze czarnym) i w kocu komentarze, wywietlane zawsze na szaro. Tego typu konwencji nie bdziemy stosowa w listingach programu (drukowanych czcionk Courier w szarych ramkach), jednak dla polepszenia czytelnoci komentarze w listingach bd podawane czcionk pochy i po polsku.

19

A oto zwiza analiza kodu programu Blink:


/* funkcja setup() wykonywana jednokrotnie na pocztku. W tym przypadku funkcja ustawia cyfrowe wyprowadzenie nr 13 jako wyjcie */

void setup() { pinMode(13, OUTPUT); }


/* funkcja loop() powtarzana tak dugo, jak dugo program znajduje si w pamici Arduino a samo Arduino podczone jest do zasilania */

void loop() { digitalWrite(13, HIGH);

// wyprowadzeniu pojawia si napicie delay(1000); // digitalWrite(13, LOW); // wyprowadzeniu pojawia si napicie delay(1000); //

ustawia cyfrowe wyprowadzenie nr 13 w stan wysoki (na dodatnie, co powoduje zawiecenie si diody L) linia opniajca. Proces czeka 1000 ms czyli 1 sekund ustawia cyfrowe wyprowadzenie nr 13 w stan niski (na zerowe, co powoduje zgaszenie si diody L) linia opniajca. Proces czeka 1000 ms czyli 1 sekund

Powyszy program wprowadza, oprcz znanych ju elementw funkcji setup() i loop() dwa typowe polecenia jzyka Arduino: digitalWrite(x,y[LOW,HIGH]) ustawiajcej stan niski lub wysoki y na cyfrowym wyjciu (wyprowadzeniu) x, oraz delay(t) zatrzymujcym wykonywanie jakichkolwiek procesw do upynicia czasu t, podanego w milisekundach. Ponadto moemy tu znale funkcj pinMode(x,y[INPUT,OUTPUT]), definiujc na czas dziaania programu, czy dany cyfrowy pin Arduino bdzie dziaa jako wejcie czy wyjcie. Jak to ju wczeniej zostao powiedziane, wszystkie cyfrowe wyprowadzenia Arduino mog by niezalenie konfigurowane jako wejcia lub wyjcia cyfrowe. W zalenoci od ustawienia dany pin bdzie jako wyjcie pozwala si ustawia w stan wysoki (odpowiednik 1 w kodzie binarnym) lub niski (binarne 0) albo te bdzie jako wejcie oczekiwa pojawienia si na przyczonym do niego ukadzie stanu wysokiego lub niskiego. Ostatnim nowym elementem kodu jest wprowadzenie staych predefiniowanych. W powyszym programie takimi staymi s: OUTPUT i HIGH oraz LOW. Stae predefiniowane maj swoje odpowiedniki w postaci wartoci liczbowych. Wpisanie zamiast digitalWrite(13, HIGH) polecenia digitalWrite(13, 1) da dokadnie taki sam rezultat, jednak w pewnych zastosowaniach stae predefiniowane znacznie poprawiaj czytelno kodu i wprowadzaj pewn, jake potrzebn logik. Przechodzc na chwil do kwestii sprztowych, warto podkreli, i powyszy program nie tylko zapala i gasi diod L na pytce kontrolera, ale rzeczywicie podaje i zeruje naprzemian napicie na cyfrowym wyprowadzniu nr 13. eby to sprawdzi najatwiej jest uy maej zwykej diody LED, wsuwajc jej dusz nk w cyfrowe wyprowadzenie nr 13, a krtsz w znajdujce si obok gniazdo GND:

20

wiczenie 1 Sprbujmy teraz popracowa nad kodem programu wprowadzajc kilka drobnych modyfikacji. Zacznijmy od bardzo prostego wiczenia, polegajcego na dodaniu funkcji zapalajcej diod wpit na przykad w wyprowadzenie nr 11. Uwaga: do prawidowego zamontowania drugiej diody w Arduino konieczne moe si okaza zastosowanie pytki prototypowej.

1.3. Podczanie prostego sensora


Wiemy ju jak w prosty sposb oprogramowa wyjcie Arduino. Sprbujmy zatem zrealizowa pierwszy projekt, ktrego zadaniem bdzie pobieranie wartoci z wejcia analogowego. Polecenie jzyka Arduino, ktre zczytuje poziom napicia na wyprowadzeniu analogowym zwracajc jego warto w postaci liczby z zakresu 0 1023 to analogRead(). Oczywicie byoby wskazane, by wartoci zczytywane z wejcia analogowego Arduino wywietlane byy na przykad na ekranie komputera. Aby to umoliwi, powinnimy do naszego programu wprowadzi jeszcze dwa polecenia: wywoywane jednorazowo (zatem umieszczane wewntrz funkcji setup() polecenie Serial.begin(x), gdzie x jest prdkoci transmisji danych portu szeregowego wyraon w baudach (bitach na sekund, inaczej bps). Polecenie Serial.begin() otwiera port szeregowy, tzn. tworzy specjalny bufor w pamici Arduino, na ktry trafia bd dane z portu szeregowego oraz inny, w ktrym zapisywane bd dane do wysania przez port szeregowy. Ponadto ustala dla danej transmisji prdko przesyu danych. Prdko ta nie jest wartoci przypadkow. Zcza szeregowe pracuj jednej z kilkunastu predefiniowanych prdkoci transmisji. Prdkoci poniej 9600 baudw s ju w zasadzie nieuywane. Powoli take standardem minimum staje si prdko jeszcze niedawno uznawana za maksymaln, czyli 57600 (56 kbps). Pomidzy tymi dwiema wartociami do wyboru mamy jeszcze 14400, 19200, 28800 oraz 38400. Maksymaln prdko transmisji, jak moemy zadeklarowa dla Arduino Uno jest 115200 baudw. Deklarujc prdko transmisji musimy pamita o kilku czynnikach. Pierwszym jest przewidywana ilo danych, jakie w okrelonym czasie napisany przez nas program bdzie chcia wysa przez port szeregowy. Naley pamita, i prdko transmisji wyraona w baudach odnosi si do iloci bitw przesyanych na sekund, podczas gdy jedna, pojedyncza liczba reprezentowana moe by przez kilka bajtw. Przykadowo wartoci liczbowe w zakresie 0-1023 wysyane na port szeregowy w postaci znakw ASCII reprezentujcych poszczeglne cyfry danej liczby, mog potrzebowa, w grnej strefie skali, 4 bajtw na kad warto (np. liczba 1019 to znaki ASCII: 1, 0, 1, 9 reprezentowane odpowiednio przez omiobitowe liczby o wartociach: #049, #048, #049 #057). Do tego naley doda bajt pity bdcy separatorem, tj. znakiem niebdcym cyfr (dlaczego potrzebny jest separator, wyjanimy dalej, analizujc kod przygotowywanego wanie programu). W sumie wic dla transmisji pojedynczej liczby czterocyfrowej potrzeba 5*8=40 bitw. Tak naprawd potrzeba ich jednak nieco wicej, gdy transmisja szeregowa charakteryzuje si pewn redundancj potrzebn dla zachowania synchronizacji. Jeli nawet zaoymy, e liczba czterocyfrowa zamienia si w czasie transmisji szeregowej na strumie 48 bitw, to przy prdkoci 9600 baudw bdziemy mogli w cigu jednej sekundy wysa 200 takich wartoci, a wic jedn liczb co 5 ms. Dla potrzeb poniszego przykadu jest to prdko w zupenoci wystarczajca.
21

Innym wanym czynnikiem, o ktrym naley pamita, jest zgodno prdkoci transmisji pomidzy nadajnikiem a odbiornikiem. Poniewa zarwno Arduino jak i komputer nie s w stanie automatycznie wykry i ustawi si na prdko nadajcego, tote zadanie ustawienia i sprawdzenia czy prdko transmisji zadeklarowana w programie Arduino jest tosama z prdkoci odbioru danych w komputerze spada na nas. Przejdmy jednak do kolejnego zagadnienia. eby wysa z Arduino dane na port szeregowy nie wystarczy otworzy go poleceniem Serial.begin(). Sama transmisja odbywa si dziki wprowadzeniu polecenia Serial.print(s) lub Serial.println(s), ktre zapisuje do bufora wyjciowego portu szeregowego cig bajtw odpowiadajcych kodom ASCII kolejnych znakw symbolu s, bdcego parametrem polecenia Serial.print(s). W przypadku polecenia Serial.println(s) dodatkowo na kocu cigu wysyany jest tzw. znak koca linii (w zalenoci od systemu jest to jeden lub dwa bajty o wartociach <CR> = #013 i <LF> = #010). Wiemy ju wszystko o czytaniu wartoci z wejcia analogowego Arduino, potrafimy je take wysa na port szeregowy. Czas zatem na kod programu:
void setup() {
// otworzenie portu szeregowego i ustawienie prdkoci transmisji na 9600 baud

Serial.begin(9600); } void loop() { Serial.println(analogRead(A0));


/* warto zwracana przez polecenie analogRead(A0) staje si parametrem polecenia Serial.println(), co w praktyce oznacza wysanie liczby okrelajcej warto napicia na wejciu analogowym A0 na port szeregowy, a wic do komputera */

delay(10);
/* 10 ms opnienia zanim nowa warto napicia zostanie wysana na port szeregowy jest tu bardzo potrzebna. Po pierwsze dla stabilizacji ukadu konwertera analogowo-cyfrowego na wejciu analogowym, po drugie za, by zredukowa ilo danych na sekund wysyan przez port szeregowy */

Program ju mamy. Potrzebny jeszcze ukad z czujnikiem. Do tego eksperymentu uyjmy bardzo prostego elementu fotorezystora. Charakteryzuje si on zmienn rezystancj (opornoci) odwrotnie proporcjonaln do natenia wiata padajcego na element wiatoczuy. Fotorezystor czymy z Arduino w taki sposb, i jedn jego nk wpinamy w wyprowadzenie GND, drug za umieszczamy w pytce prototypowej pomidzy wyprowadzeniem +5V a wejciem analogowym A0. Zasada dziaania jest tu nastpujca: nieowietlony fotorezystor charakteryzuje si wysok opornoci. W zwizku z tym cay prd z wyprowadzenia +5V pynie do wejcia A0, ustawiajc na tym wejciu warto maksymaln (1023). Jeli na element wiatoczuy fotorezystora padnie strumie wiata, to rezystancja tego elementu zmaleje, powodujc i prd pyncy z wyprowadzenia +5V, proporcjonalnie do natenia wiata, popynie przez fotorezystor. Im wiksze natenie wiata tym mniejsze napicie prdu pyncego poza fotorezystorem, a wic na wejcie A0. Przy odpowiednio silnym owietleniu fotorezystora osigniemy bardzo mae wartoci dekodowane na wejciu A0. I tu wana uwaga: wikszo fotorezystorw charakteryzuje si wysok rezystancj wasn. Innymi sowy nawet bardzo silnie owietlone, nie bd w stanie odprowadzi caego napicia z ukadu, co spowoduje
22

znaczne zmniejszenie skali, w szczeglnoci jej dolnego zakresu. Aby temu zapobiec, naley poczenie wyprowadzenia +5V i wejcia A0 przedzieli dobranym na drodze eksperymentalnej opornikiem. Typowo stosuje si oporniki o rezystancji 2-3 kOhm. W poniszym przykadzie jest to opornik 3 kOhm:

Zanim to wszystko uruchomimy pozostaje jeszcze jedna kwestia: w jaki sposb zobaczy na ekranie komputera wartoci wysyane na port szeregowy przez Arduino? Ot rozwizanie jest bardzo proste, a przynosi je sam edytor Arduino, ktry posiada funkcj skanowania portu szeregowego i wywietlania wszystkich pojawiajcych si na nim danych w specjalnym oknie. Aby to okno otworzy, z menu Tools edytora Arduino powinnimy wybra opcj Serial Monitor. Okno to w prawym dolnym rogu posiada menu, za pomoc ktrego moemy wybra prdko, na jakiej nasuchiwanie portu szeregowego prowadzi bdzie monitor. Pamitajmy, e prdko ta musi by tosama z ustawion przez nasz program prdkoci transmisji danych z Arduino. Jeli wszystko poczylimy prawidowo, to chwil po wysaniu do Arduino kodu programu w oknie Serial Monitora w komputerze powinny zacz pojawia si liczby o wartociach odwrotnie proporcjonalnych do natenia wiata padajcego na fotorezystor:

23

wiczenie 2 Zmodyfikuj program tak, by brak owietlenia fotorezystora generowa na wyjciu wartoci jak najmniejsze, rosnce wprost proporcjonalnie do natenia wiata. wiczenie 3 Poprzez dobieranie opornikw o rnej wartoci oraz czenie ich sprawd jak zmienia si zakres generowanych na wyjciu wartoci.

1.4. czenie wejcia z wyjciem, czyli pierwszy projekt interaktywny


Dziki programowi Blink skonilimy Arduino do podejmowania okrelonych dziaa, dziki programowi drugiemu, kontroler sta si czuy na natenie wiata. Pora zatem poczy te dwa algorytmy uzyskuj w ten sposb pierwszy projekt interaktywny. Niech zaoeniem bdzie, i czstotliwo migania diody na cyfrowym wyprowadzeniu nr 13 bdzie wprost proporcjonalna do natenia wiata padajcego na fotorezystor. Odwrmy tym razem rol. Oto kod programu, bez adnych komentarzy czy wyjanie:
int int int int luminance = 0; counter = 0; blinktime = 0; ledState = 0;

void setup() { pinMode(13, OUTPUT); } void loop() { luminance=analogRead(A0); blinktime=luminance/5; if (counter++ >= blinktime) { ledState= !ledState; digitalWrite(13, ledState); counter = 0; }; delay(2); }

wiczenie 4 Prosz objani zasad dziaania powyszego algorytmu. wiczenie 5 Prosz wyjani, dlaczego nie jest dobrym rozwizaniem powyszego zagadnienia poniszy, znacznie prostszy algorytm:
int blinktime = 0; void setup() { pinMode(13, OUTPUT); } void loop() { blinktime=analogRead(A0)/2; digitalWrite(13, 1); delay(blinktime); digitalWrite(13, 0);

24

delay(blinktime); }

wiczenie 6 Wykonaj rodzaj miernika natenia wiata za pomoc fotorezystora oraz ukadu kilku diod LED podczonych jedna obok drugiej do kolejnych wyprowadze cyfrowych Arduino. Miernik powinien dziaa w taki sposb, e im wiksze natenie wiata, tym wicej diod powinno si wieci. wiczenie 7 Z poczenia dostpnej iloci fotorezystorw i diod LED wykonaj inny oryginalny projekt interaktywny wg wasnego pomysu.

__________________________

NB. Czy wiesz, e wszystkie wiczenia i przykady opisane w rozdziale 1.4. bd dziaa take na Arduino niepodczonym do komputera? Moesz to sprawdzi odczajc Arduino od komputera, naley jednak wtedy doprowadzi do Arduino prd ze standardowego zasilacza 5V podczonego do gniazdka zasilania na pytce kontrolera.

2. Kilka przykadw udanej wsppracy midzy Arduino a MaxMSP


2.1. Jak poczy? Najwaniejsze ju wiemy. Wiemy mianowicie jak wysa dane z Arduino przez port szeregowy do komputera. Wiemy take (z rozdziau 4.2.3) jak odbiera dane napywajce przez port szeregowy w takich programach jak MaxMSP czy PureData. Teraz wystarczy tylko poczy jedno z drugim. Zaadujmy najpierw do Arduino program ze strony 22 skryptu i wyjdmy z edytora Arduino. Wystartujmy MaxMSP i utwrzmy w nim obiekt [serial]. O obiekcie [serial] naley wiedzie tyle, e odczytuje on lub wysya dane przez ten port szeregowy, ktry podalimy jako pierwszy argument. Drugim argumentem jest prdko transmisji. Skd wiedzie na ktrym porcie nadaje nasz Arduino? Najlepiej zapyta o to wprost obiekt [serial] wysyajc do niego komunikat {print}. Spowoduje to wypisanie w oknie MaxWindow nazw wszystkich dostpnych portw szeregowych w naszym komputerze. Nie naley specjalnie liczy na to, e port, do ktrego podczylimy Arduino bdzie nazywa si Arduino lub podobnie. Jego nazwa bdzie jednakowo zbiena z t, ktr znale moemy w edytorze Arduino w menu Tools/SerialPort. Nazwy wasne portw dziedziczone po nazwach podczonych do nich urzdze s zazwyczaj dosy dugie i trudne do przepisania. W oknie MaxWindow jednak kada nazwa wasna poprzedzona jest jednoliterowym deskryptorem. Uycie tej litery jako parametru nazwy portu w obiekcie [serial] powinno w zupenoci wystarczy. Arduino stara si zazwyczaj wymusi pierwszestwo. Z duym prawdopodobiestwem portem na ktrym bdzie przesya dane bdzie port a.

25

Co, oprcz obiektu [serial], powinien zawiera najbardziej podstawowy patch w MaxMSP, pozwalajcy na odczytywanie danych z portu szeregowego? Przede wszystkim, obiekt w sprawdza bufor portu szeregowego wycznie na danie. daniem tym jest komunikat {bang} wysany na wejcie obiektu [serial]. Jeli w tym czasie w buforze portu szeregowego znajduj si jakie dane, zostan one wyrzucone przez lewe wyjcie obiektu [serial]. Aeby pobiera dane z portu szeregowego w trybie cigym, musimy zamiast prostego obiektu [bang] poczy [serial] z obiektem [metro], ktry ma t waciwo, e po uruchomieniu (wysaniu 1 na lewe wejcie) generuje w sposb nieprzerwany komunikaty {bang} w odstpie czasowym podanym jako argument 1, oczywicie w milisekundach. Jak czsto powinien by zczytywany port szeregowy? Zdecydowanie czciej ni przychodz tam dane. W przeciwnym razie ryzykujemy ich utrat (port po przepenieniu nieoprnianego na czas bufora traci wczeniej zapisane dane; w konsekwencji doj moe nawet do zawieszenia si programu MaxMSP). Zbyt czste skanowanie portu szeregowego z kolei nie grozi adnymi konsekwencjami; dopki bufor portu jest pusty, obiekt [serial] i tak nie wygeneruje na wyjciu adnej wartoci. Przy prdkoci transmisji 9600 baudw, interwa 5 ms odczytu danych ustawiony jako argument obiektu [metro] powinien by w zupenoci wystarczajcy. Przy szybszych prdkociach transmisji lepsze bdzie zastosowanie interwau 2 a nawet 1 ms dla obiektu [metro]. Mamy wic podstawowy algorytm poczenie obiektu skanujcego port szeregowy z mechanizmem, ktry wymusza bdzie szybkie i cykliczne skanowanie tego portu. Teraz warto spowodowa, by dane pobierane przez obiekt [serial] pojawiy si w na ekranie komputera. Sprobujmy najpierw najprostszej metody po prostu wpinajc lewe wyjcie obiektu [serial] do obiektu [print] i obserwujmy co si dzieje w oknie MaxWindow:

Dzieje si sporo, ale chyba nie to, czego oczekiwalimy. Zamiast znanych ju z okna SerialMonitora w edytorze Arduino wartoci w zakresie od 0 do 1023, otrzymujemy jakie dziwne dwucyfrowe liczby generalnie w okolicach pitej dziesitki, z dosyc regularnie pojawiajc si kombinacj liczb 13 i 10. Jak to interpretowa? Ot bardzo prosto. MaxMSP nie wie jakiego typu wartoci przychodz na port szeregowy i cho Arduino wysya kodowane za pomoc ASCII poszczeglne cyfry przedzielone separatorem <CR/LF> (to wanie ta tajemnicza kombinacja 13 i 10), to na ekranie MaxWindow pojawiaj si kody ASCII zamiast odpowiadajcych im cyfr. Potrzebujemy zatem konwertera, ktry wyglda mgby tak:
26

Lepiej, cho to jeszcze nie to. Przede wszystkim zamiast liczb otrzymujemy cigi skadajcych si na nie cyfr. Po drugie kody <CR/LF> co prawda nie s wywietlane w oknie MaxWindow, ale nie oznacza to, e zniky o ich obecnoci wiadcz puste linie. Sprbujmy poradzi sobie z oboma problemami na raz. Przede wszystkim naley pogrupowa cyfry w liczby. Pomoe nam w tym wanie kombinacja <CR/LF>, ktra peni rol separatora. aby odowi separatory z cigu danych zastosujemy obiekt [match], ktry generuje {bang} za kadym razem, kiedy na jego lewym wejciu pojawi si sekwencja liczb tosama z sekwencj zdefiniowan jako parametry tego obiektu. W tym wypadku bdzie to oczywicie [match 13 10]. Rwnolegle kody ASCII cyfr grupowa bdziemy w listy, by nastpnie utworzy z nich liczby. Grupowanie odbywa si w obiekcie [zl group 127]. Argument (127) jest maksymaln wielkoci listy i jest oczywicie mocno na wyrost. Tak naprawde lista jest zamykana i wysyana przez lewe wyjcie obiektu [zl group] za kadym razem, kiedy [match 13 10] wyle komunikat {bang}, czyli... wiadomo kiedy. Jednoczenie z wysaniem do dalszej obrbki listy kodw ASCII cyfr skadajcych si na jedn liczb wysan niegdy szeregowo przez Arduino, obiekt [zl group] jest czyszczony, moe wic od nowa grupowa kolejne nadchodzce kody ASCII w list. Tymczasem lista trafia do obiektu [zl filter 13 10], gdzie usuwane s wystpienia kodw <CR/LF>. Tak naprawd, kodu <LF> w licie nie powinno by ju dawno, z ca pewnoci znajdzie si tam jeszcze kod <CR>, ktry trzeba usun zanim tak przygotowana lista kodw ASCII poszczeglnych cyfr trafi do obiektu [itoa]. Obiekt ten posiada t waciwo, e nie tylko zamienia kody ASCII na odpowiadajce im znaki, ale take integruje listy kodw w cigi znakw. W tym wypadku cigiem znaku bdzie... liczba, a dokadniej warto w zakresie od 0 do 1023, jak wygenerowao Arduino. Jeszcze dla zasady (oraz na potrzeby niektrych obiektw) zamienimy t liczb reprezentowan jako cig znakw (po ludzku: napis) w typ danej, ktry bdzie dla nas znacznie bardziej przydatny (integer) i wszystko to moemy wreszcie posa do obiektu [print], eby obejrze sobie rezultat naszych przeksztace w oknie MaxWindow:

27

2.2. Sterujemy gonoci za pomoc... latarki


To jeden z prostszych pomysw na interakcj, ale jake efektowny. Wicej wiata = wicej dwiku. Peny synkretyzm, oczywista interakcja. Sprbujmy. Wczenie do stworzonego w poprzednim podrozdziale patcha obiektw [sfplay~] (odtwarzanie plikw audio z dysku komputera) z obiektem [*~] (mnonik sygnau, umoliwiajcy m.in. sterowanie amplitud sygnau) oraz dodanie do tego kilku istotnych drobiazgw, jak na przykad obiekt [zmap] pozwalajcy na zamian wartoci z zakresu 01023 na wartoci z zakresu 0.1. (idealnego do sterowania amplitud), pozwoli na stworzenie takiego wanie interaktywnego systemu odtwarzania dwiku:

Dosy podobne rozwizanie w oparciu o 7 fotorezystorw sterujcych gonoci odtwarzania 7 zsynchronizowanych cieek dwikowych zastosowaem niedawno podczas wernisau prac pewnego luksemburskiego abstrakcjonisty. Zarwno same dziea, jak i zaproponowana przez malarza nazwa wystawy Scapes: Escapes, Landscapes, Soundscapes prowokowaa do uycia podobnych rodkw. Wernisa polega na tym, i publiczno wpuszczano do cakowicie wyciemnionej sali, gdzie
28

wisiay obrazy. Kady, kto wchodzi otrzymywa latarke, ale nie dostawa adnych instrukcji co do tego jak powinien si zachowywa we wntrzu sali wystawowej. Ludzie, chcc obejrze obrazy kierowali na nie w sposb naturalny strumie wiata latarki. Snop wiata padajc na obraz wywoywa muzyk. Im bliej obrazu by ogldajcy i im janiej go owietla, tym goniejsza bya muzyka tego konkretnego obrazu. Na koniec zaprosiem siedem wybranych osb do wsplnego wykonania utworu na wiata i obrazy. Osoby z latarkami ustawiy si przy obrazach, w ktrych byy ukryte czujniki. Na mj znak wskazane osoby owietlay poszczeglne obrazy. Z pojedynczych struktur melodycznych powstawao powoli tutti, kiedy wszystkie obrazy zostay owietlone latarkami. A oto niewielka dokumentacja techniczna z tej instalacji:

Cwiczenie 8 Na bazie powyszego przykadu zbuduj mikser pozwalajcy modyfikowa amplitud kilku odtwarzanych na raz plikw dwikowych. Wymagana bdzie oczywicie odpowiednio wiksza ilo fotorezystorw, a co za tym idzie, odpowiednie zmiany take w programie dla Arduino. wiczenie 9 Sprbuj zrealizowa podobny projekt za pomoc PureData.

29

2.3. Event triggering


Czasem najprostsze rozwizania daj najlepsze efekty. Wszystko zaley od pomysowoci, no i oczywicie od sprawnego i interesujcego wykorzystania stworzonego systemu interaktywnego. Sprbujmy teraz stworzy bardzo prosty system, w ktrym okrelona informacja pynca z Arduino bdzie nie tyle sterowaa parametrami wykonania, ile wyzwalaa pewne okrelone akcje. Majc gotowy patch, w ktrym wiato sterowao gonoci odtwarzania dwiku, sprbujmy go nieco zmodyfikowa:

wiczenie 10 Czy potrafisz odpowiedzie na pytanie, jaka dokadnie interakcja zachodzi w tym przypadku? wiczenie 11 Wykonaj projekt polegajcy na uruchamianiu odtwarzania kilku plikw dwikowych, w zalenoci od wartoci parametru przesyanego przez Arduino.

2.4. Precyzja pomiaru czujnikw analogowych a filtrowanie szumu


Czujniki analogowe s z reguy elementami dosy czuymi. Oczywicie w zastosowaniach laboratoryjnych nie sprawdziyby si, ale w dziaaniach interaktywnych ich parametry s najczciej absolutnie wystarczajce, a niekiedy nawet zbyt wyrubowane. Typowym problemem zwizanym ze sterowaniem interakcj s szumy i krtkie wahania wartoci mierzonych z czujnikw nawet przy wydawaoby si niezmiennej wartoci mierzonego bodca. Artefakty te s z reguy sum kilku czynnikw, z czego najpowaniejszym wydaje si by niesterylno rodowiska w jakim dokonujemy pomiaru (przykadowo, rzadko kiedy instalacje i performance bazujce na czujnikach fotoelektrycznych odbywaj si w doskonaej ciemnoci). Sytuacja koncertowa/wykonawcza jest niezwykle daleka od sytuacji
30

laboratoryjnej, a nawet nierzadko odbiega od warunkw studyjnych czy domowych w jakich testowalimy nasz projekt. Pewn cz winy za poszarpany sygna mona zrzuci take na nieprezycyjne i mao profesjonalne instrumenty generujce mierzony przez czujnik bodziec. Czy bowiem od zwykej latarki lub wiata odbitego od reflektora na scenie moemy oczekiwa stabilnoci i takiego samego przez cay czas trwania performanceu natenia? Koniec kocw niebagateln rol w powstawaniu znieksztace gra take sama technologia. Konwersja analogowocyfrowa jakiej dokonuje serce Arduino ukad ATmega z ca pewnoci nie jest pozbawiona typowych dla tanich rozwiza problemw, takich jak np. szumy kwantyzacji. Dlatego wanym elementem oprogramowania powinny by filtry wygadzajce i uredniajce w dziedzinie czasu dane jakich w wyniku konwersji dostarcza komputerowi Arduino. W wikszoci wasnych projektw stosuje prosty filtr II stopnia sumujcy i uredniajcy podan jako parametr ilo kolejnych wartoci wejciowych. Oto patch realizujcy ten algorytm oraz rezultat jego dziaania na sygnale pochodzcym z czujnika w stanie spoczynku:

31

2.5. Inne czujniki

W duej rodzinie czujnikw analogowych poczesne miejsce znajduj czujniki zgicia (flex) oraz wychylenia (tilt). Wszyte w kostium, czy zamocowane w atwy sposb na ciele performera nadaj si one wietnie do w miar precyzyjnego dekodowania ruchu rk i ng. W wielu zastosowaniach mog miao konkurowa ze sporo droszymi i wymagajcymi znacznie wikszego nakadu pracy programistycznej systemami do renderingu ruchu w obrazie z kamery (np. EyesWeb). Oczywicie co do zasady dziaania s to kompletnie odmienne od systemw bazujcych na obrazie video rozwizania, ale jedno nie ulega wtpliwoci przekazuj dosy precyzyjnie dane na temat ruchu poszczeglnych koczyn. Poczone w jeden ukad z akcelerometrami (sensorami przyspieszenia w przestrzeni trjwymiarowej) oraz czujnikami nacisku (pressure) mog stworzy system rejestrujcy ruch, gest i zachowanie tancerza czy performera na scenie.

Na bazie takich wanie czujnikw oraz kontrolera LilyPad powsta kostium, ktry posuy do zrealizowania projektu Evasion autorstwa grupy OxO-Factory z moim udziaem jako twrcy systemu inteaktywnego. Kostium skada si z 8 czujnikw typu flex wszytych rkawy i nogawki na wysokoci okci, barkw, bioder i kolan, dwch czujnikw typu accelerometer wszytych w mankiety rkaww, 4 czujnikw typu pressure umieszczonych po dwa w podeszwach butw oraz na specjalnych naszywkach trzymanych umocowanych w doniach tancerki. Dziki tak oonemu systemowi czujnikw podczonemu do LilyPad, informacja za porednictwem XBee docieraa bezprzewodowo do komputera, gdzie zamieniana bya na szereg zdarze dwikowych. Tancerka ruchem ciaa wyzwalaa odtwarzanie plikw dwikowych, innym razem przetwarzaa te odtwarzane dwiki, a jeszcze kiedy indziej przetwarzaa dwik pochodzcy z perkusji jedynego instrumentu akustycznego towarzyszcego wykonaniu. Ruchy rkami w przestrzeni
32

trjwymiarowej, dekodowane za pomoc akcelerometrw dokonyway dyspozycji przestrzennej (spacjalizacji) tak dwikw elektronicznych, jak dwikw perkusji. Oto kilka zdj z wykonania Evasion w Paryu oraz w Sewilli, w Konserwatorium Taca:

33

You might also like