POV-kello

Kuten varmaan monet huomasivatkin uutisoinnistani, oli joku tehnyt Kroatiassa erittäin tyylikkään POV-kellon. Ajattelin aloittaa oman version suunnittelua, mutta kyselisinkin teiltä foorumilaisilta, että olisiko ideoita tai toiveita käytettävän raudan suhteen?

Ajattelin rakentaa järjestelmän pyörimään harjattoman tietokonetuulettimen moottorilla ja virransyöttö tietysti hoituisi myös johdoitta. Mikrokontrolleriksi ajattelin ottaa STMicroelectronicsin STM32F103RCT6:n tai kenties SMT32F103RBT6:n. Noista ensimmäisessä on flash-muistia 256 kilotavua ja jälkimmäisessä 128 kilotavua. Molemmat ovat LQFP-64-koteloituja ja I/O-pinnejä löytyy paljon.

Tästä löytyy muita STM32F-vaihtoehtoja (ARM Cortex-M3): st.com/mcu/inchtml-pages-stm32.html

Ledit voisivat ensimmäisessä versiossa olla yksivärisiä (ei RGB). Kaikki tehtäisiin tietysti mahdollisimman matalilla pintaliitoskomponenteilla ja komponenttien määrä yritettäisiin minimoida. Tämän takia ajattelin ehkä ajella ledejä suoraan mikrokontrollerilla enkä yleensä noissa rakennelmissa käytetyillä erillisillä driveripiireillä. 256 kilotavun flash-muistilla varustetussa MCU:ssa olisi sekin hyvää, että erillistä muistipiiriä tuskin tarvittaisiin, ellei laitteeseen aio tallentaa hirveän paljoa grafiikkaa.

Ohjelmointiliitännäksi pitäisi värkätä varmaankin joku oma pieni JTAG-liitin, koska ARM:lla vakioliitin on 20-pinninen ja todella iso. Ohjelmointi ja debuggaus onnistuisi vaikkapa Olimexin ARM-USB-OCD-palikalla, Eclipsellä ja Linuxilla.

Paikkatiedon antaminen pyöriessä hoidettaisiin luultavasti Hall-anturilla ja magneetilla.

Kun vispilästä tekee tarpeeksi matalan ja virtaviivaisen, ei se luultavasti päästä kovaa ääntäkään pyöriessään. Tällöin sitä voisi käyttää oikeana kellonakin, joka olisi aina liikkeessä.

Suunnittelin ja testailin tuossa äsken ledikellokoneiston tarvitseman virran generoimista toisen kotelotuulettimen avulla. Sain pelkällä yhdellä diodilla tasasuuntaamalla RMS-virraksi sellaista 30 milliampeeria kun ajelin käämeiltä saatavalla virralla kymmentä tavallista punaista lediä.

Kokoaaltotasasuuntaamalla pitäisi päästä tuplalukemiin, mutta täytynee testata vielä käytännössä. Jännite täytyisi tasata 3,3 volttiin esim. jollain konvertteripiirillä, joka osaisi muuntaa jännitteet väliltä 1-6V -> 3,3V mielellään jopa 200 milliampeeriin asti.

Kun ledejä välkytellään oikeassa tahdissa esim. kellon viisareita näytettäessä, nehän ovat suurimman osan ajasta pois päältä. Uskoisin, että toimeen tullaan varsin vähällä virralla, vaikka ledejä olisikin esim. 30-50 kpl.

En ole nähnyt, että kukaan olisi käyttänyt esim. POV-kelloprojekteissa virran generoimista harjattomalla moottorilla. Toivotaan, että idean saa pelaamaan käytännössäkin, sillä hyvänä puolena tuossa olisi se, ettei elektroniikkaa tarvittaisi mihinkään muuhun kuin itse viisariin.

Jos haluat päästä mahdollisimman pienellä komponenttimäärällä (ja pienillä komponenteilla == vähän pinnejä prosessorissa), suosittelen tutustumaan charlieplexaukseen. Kyseinen ledien ohjaustapa tuo hieman haastetta softaan, mutta komponenttien ja io-pinnien määrä on huomattavasti pienempi verrattuna muihin tapoihin.

Charlieplexaamalla voit ajaa 7 io-pinnillä 42 lediä ja 8 io-pinnillä 56 lediä! Eikä ledien etuvastuksia tarvitse roiskia yhtä paljon kuin ledejä, vaan niitä tarvitaan yhtä vähän kuin io-pinnejäkin.

en.wikipedia.org/wiki/Charlieplexing
instructables.com/id/Charlie … he-theory/
members.ziggo.nl/electro1/avr/charlieplexing.htm

Hyvä vinkki! En ollut tuohon vielä tutustunutkaan. Vaikuttaa erittäin mielenkiintoiselta. Huonojakin puolia tuossa kyllä on (muitakin kuin koodin suurempi kompleksisuus), mutta ei mitään ylitsepääsemätöntä varmaankaan.

Haastettahan tässä haetaankin, joten pelkkä koodin monimutkaisuus ei ole este vaan hidaste :wink:

Olisiko ehdotuksia MCU:sta? Erillistä muistia en välttämättä haluaisi levylle pukata ja omasta hyllystä ei löydy tällä hetkellä noiden Cortex-M3:sien lisäksi kuin ATtiny85:sia ja ATmega328P:itä. STM32:ssa olisi ollut sekin hyvä puoli, että olisi ollut mahdollista toteuttaa esim. uusien animaatioiden lisääminen vaikkapa USB:llä. Nämä ovat kuitenkin sitten sitä viimeistä hifistelyä, kun kaikki toimii jo muuten :wink:

Saattaa olla, että mennään tällä kertaa Atmelilla ainakin versio 1:een asti, mikäli Charlieplexing otetaan testikäyttöön… Hall-antureitahan löytyy kaikkien tietokonetuulettimien sisältä (vastaavan datalehden löytymisestä ei tosin ole tietenkään varmuutta).

EDIT: Ei taida Charlieplexauksen hyödyntäminen onnistua sittenkään, koska tekniikalla ei voi sytyttää kaikkia ledejä samanaikaisesti. Tämä on oleellinen ominaisuus esim. kellon viisarin kuvaa näytettäessä. Olisiko muita kikkakolmosia tarjota? :wink:

Entä ihan tavallisen MUXin käyttö, riittääkö I/O-pinnit?

Charlieplexausta voisi ehkä hyödyntää tässä projektissa, mutta en mene takuuseen kellon “kirkkaudesta” tai välkkymättömyydesä, koska charlieplexausta käytettäessä tässä on ikäänkuin “kaksitasoinen” silmän hitauden hyödyntäminen.

Charlieplexauksessa saa siis kaikki ledit näyttämään siltä, että ne palaisivat yhtaikaa, kytkemällä yksittäisiä ledejä päälle ja pois riittävällä taajuudella. Samalla periaatteella kuin pyörivässä liikkeessä saadaan aikaan kaksiulotteinen kuva, vaikka ledit on asetettu viivalle.

Netissä on roimasti esimerkkejä (youtube), joista näkee miten charlieplexaus toimii käytännössä.

Se, että charlieplexausta käytettäisiin vielä yhdessä pyörivässä liikkeessä, voi saada lopputuloksen ehkä hieman vilkkuvaksi jos kierrosnopeutta ei ole tarpeeksi - ja suurilla kierrosnopeuksilla ehkä hieman himmeäksi, koska ledien hyötysuhde on charlieplexauksessa kuitenkin 1/ledien määrä. Musta olisi ainakin mielenkiintoista kokeilla sitä! :slight_smile:

Ajattelinkin, että kirkkauden kanssa saattaa tulla ongelmia, sillä ajattelin muutenkin käyttää mahdollisimman vähävirtaisia 0603-kokoluokan (tai 0805) ledejä. Täytyy miettiä vielä muita toteutusvaihtoehtoja, sillä ei ole mukava, jos huomaa toimivassa laitteessa, ettei kuvasta näykään juuri mitään, vaikka kaikki toimii :wink:

Osramin TopLed sarja kenties?

Noita olenkin käytellyt (kuvassa mm. täällä). Ovat kuitenkin aika korkeita ja ilmanvastus kasvaisi turhaan, joten 0603:t lienevät parempia tähän tarkoitukseen. Ja jos ledejä haluaa laittaa tiuhaan, että näytön tarkkuus kasvaisi, eivät nuo Osramin valot oikein käy siihen, koska ovat niin leveitä.

Tuosta voisi jatkokehitellä vieläkin upeamman kellon, jollaisen itse haluaisin, korvaamalla ledit jollain lasereilla siten, että kuvion voisi ampua esimerkiksi isoksi kelloksi kattoon. Tietysti tuki myös vinolle heijastukselle. Toki lasereita tarvitaan isoa pintaa varten vähän enempi.

Noohh… Sit vähän pienempää… Citizen ja CitiLED, nyt parempi? :wink:

Tuolta näyttää kyllä löytyvän kaikenlaisia, vaan mitkähän lienevät hinnat yksitellen ostettaessa… :unamused:

Noh, ledien valinta kyllä onnistuu, mutta ongelmia saattaa tuottaa esim. tuo ideani tarvittavan virran generoimisesta tuulettimen käämeistä. Pyörintävastus nimittäin kasvaa virranottotarpeen mukaan ja toisen tuulettimen pyörimisnopeus muuttuu jonkin verran tuon seurauksena. Kuinkahan tasainen pyörimisnopeuden täytyy olla? Ehkäpä ongelman voisi kuitenkin ratkaista koodillakin päivittelemällä Hall-anturilta saatavaa kierrosnopeustietoa tarpeeksi usein tai sitten vain koittaa elektroniikalla tasata virrankulutus jotenkin.

Tältä näytti testaamani tuulettimen ulostulo suoraan käämiltä mitattuna, kun pyöräyttelin tuuletinta sormilla:

Täytyy koittaa tasasuunnata tuo ja tutkia saisiko jännitteen pysymään rasituksessakin tuolla neljässä voltissa. Tuolloin riittäisi LDO-regulaattori pudottamaan jännitteen 3,3 volttiin MCU:lle.

Kannattaa valita sellainen prosessori, jossa on laaja käyttöjännitealue, esim. ATmega88Pa, joka toimii muistaakseni 1.8…5.5V:lla, niin ei tarvitse hukata tehoa regulaattoriin.

Kierrosnopeutta kannattaa lukea softassa jatkuvasti, eli lasket edelliseen kierrokseen kuluneen ajan mikrosekunteina ja käytät tuota aikaa muuttujana seuraavan kierroksen kuvaa muodostaessa.

On sekin toki mahdollista ja ATmega328P olikin toinen vaihtoehto MCU:ksi STM32:n ohella. RTC-piiri ja siihen nappiparistovarmennus olisivat myös kova sana, sillä ei ole mukava, jos kelloaika häviää aina kun propelli pysähtyy :smiley:

Muut komponentit kuten IR-anturi, Hall-anturi, mahdolliset ledidriverit ja RTC saattavat vaatia vakaata käyttöjännitettä (3,3 tai 5V), joten tuntuisi että koko levyn jännite olisi kuitenkin hyvä pitää esim. tuossa 3,3 voltissa LDO:lla tai jollain hakkurivirityksellä. Riippuen puretusta tuulettimesta ja käytettävästä magneetista tasasuunnattu jännite saattaa nimittäin vaihdella aika paljonkin.

Kysy Arrantilta (esim. Janne Mäkinen)…

Jokos Jämsän kello on valmis?
Itellä ois kans haaveena toteuttaa tällänen…

Ei valitettavasti ole alkuunkaan valmiina. Aloin vääntämään diplomityötä vielä muiden kiireiden lomassa, joten ei varmaan ainakaan ennen kesää etene mihinkään :blush:

Sen verran kiinnostava idea tuo kuitenkin on, että luultavasti jossain vaiheessa jatkan suunnitelmat loppuun ja rakennan tuollaisen. Charlieplexaus voisi olla hyvä valinta, jos halutaan IO-expanderit jättää pois. Tällöin riittäisi nimittäin se enintään 10 IO-pinniä ja lediryhmiä ajettaisiin MOSFET:eillä armottomalla ylivirralla ilman etuvastuksia. PWM vaan kohdilleen niin, etteivät ledit pala. Softapuoli on tosin tällöin aika haastava verrattuna perinteiseen tapaan (expanderit tai tarpeeksi IO-pinnejä).

Suoraan IO-pinneillä ajettaessa ongelmaksi tulee se, ettei mikrokontrollerin totaalivirrananto- tai upotuskyky (yleensä jotain ~200mA) riitä koko ledirivistön jatkuvaan päällä olemiseen. Ei voi siis koko näyttöä värjätä kunnolla yhtäaikaisesti… Noh, kokeilemalla selviää onko se edes tarpeen, täydellisyyttä tavoitellessa pitäisi kuitenkin tämänkin ottaa huomioon :wink:

Todella hieno kello! Minä oon ettiny aika kauan jo nättiä kelloo, ja tommonen kyllä kelpais. Ite ostan aina ikeasta kaikenlaista, mut nyt mun kello meni rikki ku kaveri astu vahingos sen päälle :confused:

Ite miettinyt että vois enkä tän tyylistä miettiä pöydälle. Tuo vaatii vain hyvän tasapainotuksen
limba.kuvat.fi/kuvat/Assembly/As … G_1105.JPG

Anteeks mut onks tossa kuvassa jossain kello? En oikeen nää, sori tyhmyyteni =)