Cirkulino (2012/13)
Cirkulino je koncept, ki se je o?itno izpostavil sam:
– je sekvencer – kot eden od najbolj raširjenih na?inov uporab arduina
– ima dolo?ene posebnosti – na vizualno-uporabniški strani je uporabljen rotirajo?i princip – cirkuliranje (kot priti?e povezavi z delavniškimi dejavnostmi Cirkulacije 2)
– kot naslednja stopnja od prototipa je inženirsko bolj dodelan in že želi s?asoma postati izdelek
– to pomeni, da vsi pristopi potekajo v smeri maksimalne poenostavitve in ponovljivosti
– Cirkulino je osnovna u?na struktura, ki bazi?no definira vsa polja in razpre prostor dejavnosti h katerim se bomo vedno bolj podrobno vra?ali – ter po?asi “polnili” luknje.
Cirkulino je izdelek – zato ga je treba izdelati!
Prvi primerki – prototipi… alfa, beta, gama, …
Prvi primerki, prototipi so preizkusni primerki – predvsem glede optimalne razporeditve elementov – geometrije in še posebej možnosti za fukcionalne dodatke (harverske in softverske).
Cirkulino: druga serija, november-december 2012…
Ti primerki že vsebujejo vzporedno odkrivanje razli?nih polj – na sliki je toplotno preoblikovana (thermoform) plasti?na ploš?a. V našem primeru je to dokaj krhki prozorni polistorol (polistiren) debeline 2 mm. Opis tega postopka bo na voljo na strani obdelave materialov.
Na slikah je rezultat drugega poskusa in vezje Cirkulino iz prve serije.
Druga serija je namenjena kot sugestija za delavnice arduino v RogLabu in drugje.
– tiskana vezja smo izdelali sami, pri tem smo uporabili fotosenzitivne ploš?e euro dimenzij (160 x 100 mm)
– film je pripravljen z ra?unalnikom – natisnjen na folijo z laserskim printerjem
– UV osvetljevalnik je prirejeni trdilec laka za nohte – folija je položena na fotosenzitivno ploš?o, pritisnjena z akrilnim steklom debeline 5 mm – osvetlitev traja 3 minute (pri 3mm akrilnem steklu pa 2 minuti)
– fotosenzitivni premaz na osvetljenih (prozornih) mestih spremeni lastnosti in ga lahko “razvijemo” – potopimo v raztopino NaOH (ali komercialni razvijalec, ki vsebuje inhibitor, zato je bolj prakti?en) – nato operemo pod teko?o vodo – sedaj je vezje že vidno
– ploš?o nato jedkamo (HCl – solna kislina in H2O2 – vodikov peroksid – okoli 30% raztopina obeh je dovolj – podrobnosti tega postopka še sledijo)
– po jedkanju imamo tiskana vezja – z bencinom ali acetonom jih o?istimo na obeh straneh in zaš?itimo baker pred oksidacijo z alkoholno raztopino kolofonije, ali s sprejem SK10 flux, ali pa uporabimo vodno raztopino s SENO glanzzinn, ki prekrije baker s kositrom
There is a great page with instructions here http://www.electricstuff.co.uk/pcbs.html
V nadaljevanju se bomo bolj posvetili samemu vezju/ sistemu
“Stacking” logika
“Stacking” pomeni nalaganje eno na drugo – kar je sledenje osnovni obliki uporabe razvojnega vezja arduino – to je princip “shielda” – š?itkov. Pogosto raje govorimo o “motherboardu” (mati?ni ploš?i), “boardu” in “daughterboardu”. V našem primeru bi bil arduino mati?na ploš?a, “shield” pa board ali daughterboard.
Na vsak na?in je dolo?eno, da je najnižja ploš?a vedno arduino, najvišja pa cirkulino – vmes pa bomo lahko dodali še kakšno vezje. Sendvi? in salama… = hamburger & cocacola
Tiskano vezje in razporeditev elementov:
Najve?ji problem je predvideti vse možnosti, ki bi se utegnile pojaviti – tako glede bodo?ih razširitev (npr. LCD display, XYZ akcelerometer; vmesna sendvi? ploš?ica…), kot tudi glede razli?nih elementov, ki bi utegnili biti na voljo namesto predvidenih. Zato sta spodaj prikazani dve varianti razporeditve elementov na tiskanem vezju – široka in ozka.
Pri ozki varianti uporabimo malo ve?je trimerje, ki imajo standardne 6 mm osi. Vsi potenciometri imajo vrednost okoli 100Kohmov – pa tja do 2,2 Mohma – linearni. Najnižje vrednosti potenciometrov naj bi bile 10 Kohmov, saj sicer preve? obremenjujemo napajalno napetost 5V. Tiskano vezje je enostransko, zaradi razpeljave potenciometrov ob obod ploš?ice pa nismo pa se mogli izogniti nekaterim lete?im žicam.
Shema osnovnega vezja Cirkulino
Opis vezja:
Osnovno vodilo je bilo – ?im manjše število elementov…
– pet potenciometrov je namenjenih manipulaciji midi podatkov (velocity, sustain, pitch,…), ritmov s prednastavitvami in razli?nim naklju?nim (random) opcijami, ki se kažejo zanimive – pri vseh spremenljivih parametrih. Uporabimo jih kot spodnji del napetostnega delilnika – pri tem je zgornji del delilnika pullup upor v samem atmel mikrokontrolerju. V zadnjih verzijah vezja smo se raje odlo?ili za klasi?no vezavo krajev potenciometra med 5V in 0V, ker se znebimo nepredvidljivih nelinearnosti pri razli?nih vrednostih potenciometrov.
– osem stikal, osem LED in izbirno CMOS integrirano vezje 4051 (74HCF4051, CD4051 – analogni osem-kanalni multiplekser/demultiplekser) služi za aktivacijo/ deaktivacijo posameznih osmih korakov sekvenc (za “branje”) in za vizualizacijo aktivnih korakov (za “pisanje”). Ker ima aktivirani analogni kanal multiplekserja upornost okoli 100 do 150 Ohmov, smo se odlo?ili da ne potrebujemo upora za limitiranje toka skozi LED. Za zaznavanje pozicije stikala pa potrebujemo upor 22 Kohmov, ki pri branju predstavlja spodnji del napetostnega delilnika – zgornji del delilnika je ponovno pullup upor v samem atmel mikrokontrolerju. Opis vezja 4051 – HCF4051
– dva dodatna stikala služita za lo?eno programiranje sekvenc za tri midi kanale (nobeno stikalo pritisnjeno: kanal 1, prvo stikalo: kanal 2, drugo stikalo: kanal 3; obe stikali pritisnjeni: preklop iz sekvencerja na na?in kontrolerja). Tudi tu uporabimo pullup upore v samem atmel mikrokontrolerju, tako da je izhodiš?no stanje logi?na ena.
– tri LED in pripadajo?i omejitveni upori 100 do 220 ohmov za vizualizacijo midi aktivnosti po kanalih
Ostali dodatki na tiskanem vezju niso potrebni. Razen nekaj (preve?…) dodatnih žic, ker imamo pa? enostransko vezje.
Branje in pisanje:
Branje pozicije stikal in prižiganje LED poteka ob intervalnih ?asovnih prekinitvah programa (“interrupt”) v naslednjem zaporedju:
– vsakih 6000 mikrosekund (6 milisekund) se sproži prekinitev programa in izbere trenutni zaporedni kanal multiplekserja – arduino definira stanja na A, B, C vhodih multiplekserja
– najprej dolo?imo da LED ne gori (to je potrebno, ker branje traja nekaj ?asa in želimo, da je ugasnjena LED tudi v resnici ugasnjena) – arduino pin 5 naj ima najnižjo vrednost (lahko analogWrite s PWM ali kar digitalWrite)
analogWrite(5, 0); // ugasnjena LED s PWM ukazom
digitalWrite(5, LOW); // ugasnjena LED s hitrejšim digitalnim ukazom
Branje poteka v naslednjih korakih:
– redefiniramo arduino pin 5 kot vhod, aktiviramo pull-up upor 20 Kohmov
pinMode(5, INPUT);
digitalWrite(5, HIGH); // pull up activated
– branje poteka na istem pinu 5
digitalRead(5);
– pri branju predstavlja pullup upor 20 Kohmov zgornji del napetostnega delilnika, kadar je stikalo pritisnjeno
– vsa stikala so vezana na maso (najnižji, referen?ni potencial) preko upora 22 Kohmov – to je spodnji del napetostnega delilnika (vrednost tega upora o?itno ni problemati?na – zato uporabimo vrednost 10K)
– pri nepritisnjenem stikalu je izhodna napetost delilnika nad polovico napajalne napetosti (oziroma nad 0.6 * Vcc) – torej je vrednost logi?na ena (1, HIGH), pri pritisnjenem stikalu pa je nižja od polovice napajalne napetosti – prebrana vrednost je logi?na ni?la (0, LOW).
– nato deaktiviramo pull-up upor 20 Kohmov na arduino pinu 5
digitalWrite(5, LOW);
– redefiniramo arduino pin 5 kot izhod in s tem pripravimo vse potrebno za pisanje (prižiganje LED)
pinMode(5, OUTPUT);
S pomo?jo arduino funkcije digitalRead() lahko dovolj hitro preberemo stanje stikala, da ni nobenega ustavljanja. V prvi verziji vezja smo to po?eli na analognem vhodu arduina s funkcijo analogRead(), ki pa se je izkazala za preve? po?asno – ker branje v?asih ni bilo dovolj hitro, se je kroženje ob?asno “zataknilo”.
Pisanje po korakih:
– preverimo kakšno je stanje spremenljivke za trenutni korak (ta ustreza definiciji kanala s kombinacijo A,B,C)
– z arduino ukazom analogWrite() na pinu 5 dolo?imo ali LED ne gori, delno gori ali polno gori. Pri tej fukciji gre za PWM – “pulse width modulation” princip kratkih ali daljših elektri?nih impulsov)
analogWrite(5, 30); // srednje gori
analogWrite(5, 255); // polno gori
Glavni problem, ki se je pokazal pri uporabi funkcije digitalRead() namesto analogRead() za branje stanj stikal, so razli?ne napetosti praga pri razli?nih barvah LED (ki izhajajo iz razlik med uporabljenimi materiali, ki so potrebni za doseganje razli?nih valovnih dolžin oddane svetlobe). Pri analogRead() ni problemov, saj razli?ne napetostne pragove rešimo v nastavitvah programa, pri uporabi digitalRead() funkcije pa normalno delujejo le LED z napetostnimi pragovi nad 3 V (kar je logi?na enica – HIGH) . To so beli in modri odtenki (preko 3,5V pragovne napetosti).
Vse ostale barve imajo napetostne pragove pod 2,5V, kar lahko popravimo z dodajanjem ustrezne zener ali serijsko vezanih silicijevih diod v seriji z LED (ena dioda za vse LED – med skupaj povezanimi katodami LED in maso). To na svetilnost ne vpliva bistveno, pove?a pa napetostni prag na 3,2V. V?asih potrebujemo v seriji dve diodi (recimo pri oranžni barvi).
Sprememba je tako dosežena tudi za funkcijo digitalRead().
Kljub temu svetujemo za cirkulinov display uporabo belih ali modrih LED, ki pa v praksi vseeno potrebujejo eno Si diodo.
Na desni je tabela barv, pragovnih napetosti in materialov.