Cirkulino

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


Problemi:

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.

The codeand all else is available at  http://www.3via.org/records/index.php?opt=item&id=69