AVR ATmega - Extremt strömsnål rörelsesensor?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
JohnA
Inlägg: 215
Blev medlem: 19 september 2011, 12:25:51
Ort: Vallentuna
Kontakt:

AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av JohnA »

Någon som är insatt i hur komparatorn fungerar i en ATmega?

Då och då när jag får tid att programmera, leker jag ibland med POV-displayer (persistance of vision) av olika typer. En av favoriterna är minimalistiska armbandsur som ritar upp siffror eller linjära urtavlor när klockan sveps i luften. Vissa varianter fungerar ...eh, klockrent, :D rent principiellt, men jag behöver bättre teknik för triggningen av svepet, och det måste vara extremt strömsnålt.

Att trigga svepet manuellt med en tryckknapp fungerar bra och stabilt men det är krångligt att behöva trycka och hos vissa varianter är det praktiskt omöjligt att trycka fram varje svep synkroniserat med armrörelsen. En lösning jag provat är att knapptryckningen aktiverar upprepade displaysvep under några sekunder men då måste armrörelsen i stället synkroniseras mot blinkningarna, vilket inte är helt lätt. (dessutom ser det t.o.m. ännu mer idiotiskt ut)

Jag har provat små tilt-sensorer (en liten cylinder med en kula i) från Kjell &Co, men de har hopplöst mycket kontaktstuds som måste hanteras och där har jag hittills inte fått till något bra. Det blir falska triggningar som utlöser störande ljussvep.

Betydligt bättre har det funkat med hemgjorda skaksensorer bestående av en smal remsa klippt ur en piezoelektrisk högtalarbricka som träffas av en liten mutter som ligger löst i ett rör, men det är en ganska klumpig konstruktion rent fysiskt och att klippa piezobrickor är inget exakt hantverk direkt...

Snyggaste och säkraste funktionen har jag fått med en liten magnet i ett plaströr och tungelement utanför, men också det är en ganska klumpig konstruktion. Dessutom har magneten en tendens att "klibba fast" mot tungelementet, samt att strömförbrukningen stiger katastrofalt i detta läge och därför måste hanteras med timeout och avaktivering av ATmegans interna pull-up.

En lösning som inte fungerat är att i stället för via tungelement låta magneten trigga ATmegan via en liten spole utan järnkärna. Jag antar det behövs väldigt många varv av galet tunn koppartråd för att få upp en spänningsnivå som räcker för att väcka den sovande processorn via port-change interrupt.

IDÉ:
Kanske det kan fungera bättre om spolen ovan kopplas till komparatorn i stället för till port-change interrupt? Spänningsreferensen slukar enligt databladet ca 10uA, vilket är mer än hela systemets viloström, men den behöver kanske inte användas. Eftersom komparatorn kan sättas att reagera på endera flanken kanske jag helt fräckt kan koppla en liten HF-drossel utan järnkärna mellan komparatorns båda anslutningar och sedan låta den lilla magneten slå mot denna?

Jag har läst databladet för ATmega88 men inte lyckats bli klok på om komparatorn kan fungera i extremt strömsnåla sammanhang eller om t.ex. ADC:ns hemska förbrukning fås med "på köpet". Jag har heller inte någon koll på hur mycket induktans som krävs för att få tillräckligt stor spänning när magneten rör sig. Om det krävs järn- eller ens ferritkärna kommer den lilla magneten klibba fast för hårt.

Är det över huvud taget mödan värt att labba med komparatorn och små magnetspolar eller kan någon mer kunnig direkt avfärda metoden som omöjlig? Finns någon annan billig, fysiskt kompakt och extremt strömsnål metod att känna av sveprörelsen?
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av adent »

Jag har små små accelerometrar som skulle kunna funka. De är strömsnåla och kör SPI eller I2C och är lite programmerbara för interrupt också.
Tror man kan läsa ut med iaf 400Hz, vilket borde räcka. Jag har lekt en del med dem och man bör nog kunna detektera en "peak" (==vändning)
ganska lätt. Aktiverar man accelerometern med en knapp och sen fladdrar med armen och sen stängs den av när lämpligt "fladder" slutar.

LIS302DL heter de, köpta av en på forumet vem det nu var...

Men jag gillar helt klart idén!

MVH: Mikael
Rick81
Inlägg: 755
Blev medlem: 30 december 2005, 13:07:09

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av Rick81 »

adent:
Jag använder den accelerometern på ett kretskort som jag håller på att testar med, men den är inte rolig att löda för hand. Har du något tips?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av snigelen »

Jag har läst databladet för ATmega88 men inte lyckats bli klok på om komparatorn kan fungera i extremt strömsnåla sammanhang eller om t.ex. ADC:ns hemska förbrukning fås med "på köpet".
Du kan stänga av ADC'n i PRR:
• Bit 0 – PRADC: Power Reduction ADC
Writing a logic one to this bit shuts down the ADC. The ADC must be disabled before shut down.
The analog comparator cannot use the ADC input MUX when the ADC is shut down.
Vid beskrivningen av komparatorn står
The Power Reduction ADC bit, PRADC, in ”Minimizing Power Consumption” on page 43 must
be disabled by writing a logical zero to be able to use the ADC input MUX.
Det tolkar jag som om att du kan använda den analoga komparatorn utan att ADC'n är aktiverad, men då kan du (naturligtvis) inte använda ADC'n till ena komparatoringången utan du måste använda AIN1-pinnen.
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av adent »

Rick81 skrev:adent:
Jag använder den accelerometern på ett kretskort som jag håller på att testar med, men den är inte rolig att löda för hand. Har du något tips?
Jag har lött iaf 3 för hand. Det går förvånansvärt bra. De första lödde jag nog på spisen med lite aluminiumfolie mellan plattan och kretskortet. (Jag löder accelerometern först).

Första var innan jag hade lodpasta, så jag förtennade alla paddar på kretskortet med lödkolv och vanligt tenn och såg till att det var så lika mycket tenn jag kunde på alla paddar (lodfläta?). Sedan mycket flussmedel på kretskortet och mycket på kretsen under också och lade det på spisplattan. Ev. tryckte jag till på den med en pincett när tennet väl smält, tror inte det behövs.

Senare har jag kört med lodpasta och varmluftspistol. Även här har jag nog tryckt till på den när tennet varit smält.

Blyat tenn är nog helt klart att rekommendera. Men jag har lyckats med alla jag har lött (peppar peppar).

MVH: Mikael
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av hanzibal »

JohnA: Superfestlig grej! :tumupp:

Antar att du har flera leds på rad eftersom bilden väl är 2D trots att "svepet" sker längs en ganska given bana (linje).

Förstår det som att du endast synkar i de båda ändlägena så hur extrapolerar du lägena däremellan - räcker sinustabell eller har du ngt mer sofistikerat?

Eftersom du idag väl endast mäter tiden mellan ändlägena så måste man väl justera armrörelsens "slaglängd" tills urtavlan antar rätt proportioner men troligen är slaglängden en funktion av periodtiden för den genomsnittliga människoarmen :)

En accelerometer är nog precis vad som behövs för att göra prylen ännu bättre.

Om inte dylika redan finns är ju idén egentligen alldeles för bra för "skänka bort" till allmänheten i ett öppet forum. Helt klart potential att bli världens fluga, skulle exempelvis gå som smör på alla kvällsmarknader längs hela medelhavskusten. :mrgreen:
Användarvisningsbild
JohnA
Inlägg: 215
Blev medlem: 19 september 2011, 12:25:51
Ort: Vallentuna
Kontakt:

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av JohnA »

hanzibal, det är simplare än du tror och det fungerar förvånansvärt bra! -Jag har en fast hastighet för utmatningen. Svepet triggas av G-graften när rörelsen vänder i ena ändläget. En liten fördröjning av utmatningen tillåter armen att få upp en relativt jämn hastighet från vändpunkten, annars blir visningen hoptryckt i ena änden. Att utmatningshastigheten är fast ger inga som helst problem. Att skapelsen snabbt fick namnet Karateklockan är helt naturligt. :)

Det är inte kul att behöva byta batteri i armbandsuret med några veckors mellanrum. Den aktiva visningstiden är relativt kort jämfört med standbytiden och därför gör varje uA skillnad. Senast jag mätte drog klockan 5-7 uA i standby med aktiv RTC.
(ATmega88PA med 32768-kristall på Timer2) En accelerometer känns som en ganska onödig och dyr sak som dessutom slukar ganska mycket ström om den hela tiden ska bevaka armrörelsen. Hellre något mer primitivt, även om det ger en och annan oönskad triggning.

Displayvarianter:
Min första version har fem LED tätt ihop på rad (runda som slipats platta på kanterna för att få ihop dem lite extra).
Svepet bildar siffror och versaler i 5x5-matris. Ögat hinner utan problem läsa "urtavlans" HH:MM på ett enda svep och bilden är mycket lättavläst. Texter på uppemot sex sju tecken funkar bra, men däröver behöver man svepa flera gånger och fokusera på olika delar av den virtuella displayen för att pussla ihop helheten.

Därefter kom jag på att man kan simulera en vanlig sjusegments sifferindikator med endast tre LED på rad till en 3x5-matris om man sveper vertikalt. En komplett klocka med "HH:MM" går alltså att rita, men det är svårare för hjärnan att sätta samman helheten snabbt när siffrorna ritas vertikalt över varandra.
På bekostnad av tydligheten och det faktum att vissa siffror får göras lite speciella fungerar det t.o.m. att rita begripliga siffror vertikalt med endast TVÅ LED! Med lite övning går det riktigt bra att läsa av tiden på en sådan display.
För att begränsa höjden på displayen kör jag med 12-timmarstid (0-11) och genom att visa "10" och "11" vridet på högkant klarar sig tidvisningen med tre sifferpositioner. Klockor med två eller tre LED och vertikalt svep går att bära som en ring på pekfingret! 8) Som fingerring går det riktigt bra att trigga manuellt med en tryckknapp för tummen.

Eftersom det är svårare att snabbt fånga helheten hos vertikalt placerade siffror provade jag en variant med sex LED grupperade parvis tätt ihop på en horisontell rad. När man sveper vertikalt ritas alltså tre siffror horisontellt i var sin 2x5-matris. Denna variant är relativt lättavläst men sex LED är inte så där coolt minimalistiskt.

Jag har även experimenterat med "analoga urtavlor" som POV-display. Här använder jag PWM-baserad ljusstyrkereglering i mjukvaruloop för att skilja på urtavla och visare. Urtavlan ritas med en enda LED som en linje av ljussvaga prickar medan visaren lyser upp starkare. För att kunna urskilja timmarna tydligare är pricklinjen avbruten vid 3, 6 och 9. Parallellt med timvisningen sitter en andra LED och ritar minutvisaren. För att inte blanda ihop timmar och minuter har minutvisningens pricklinje bara avbrott på mitten, d.v.s. vid "30". Problem: Sitter lysdioderna en bit isär uppstår förvirrande paralaxproblem om svepet inte görs vinkelrätt mot lysdioderna. Det blir också svårare att fokusera blicken rätt och få en tydlig helhet. Med lysdioderna tätt ihop flyter de i stället lätt samman. Att använda två olika färger ger förmodligen en tydligare avläsning.
Det går även att visa tiden analogt med en enda LED om minutskalan visas efter timskalan. Man slipper då helt ifrån problem med ögonfokus och parallaxproblem, men får i stället en längre urtavla som blir svårare att överblicka.
Men vaddå, vill man ha en cool klocka får man ge avkall på vissa saker. :mrgreen:

Jag tycker mina klockexperiment är kul och ganska fiffiga. Det går kanske att patentera/mönsterskydda, tillverka billigt i Kina och göra stor profit på längs strandpromenaderna vid Medelhavet och i Thailand men jag är en usel entreprenör och hämtar hellre mina kickar i livet från själva uppfinnandet. POV-displayer är i sig inget nytt, men jag har inte sett något så minimalistiskt som det jag experimenterar med. Dessutom vill jag inte hållas skyldig för alla förmodade slagsmål på krogen och fulla bussar när folk plötsligt slår ut med armarna för att se vad klockan är... :lol:
Användarvisningsbild
JohnA
Inlägg: 215
Blev medlem: 19 september 2011, 12:25:51
Ort: Vallentuna
Kontakt:

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av JohnA »

Lite OT då det inte handlar om hur man känner av en rörelse:

Utöver POV-klockor experimenterar jag även med mer statiska varianter på minimalistiska LED-klockor. Binär/seriell utmatning på en enda LED är en variant. Den bästa hittills lånar av morsekodens princip med korta/långa motsvarande etta/nolla. Den mest lättavlästa och effektiva varianten har variabel "sifferlängd", d.v.s. siffran noll visas som ".", etta som "-", tvåa som ".-", trea "--", fyra "..-" och så vidare. Medan man lär sig koderna adderar man bitvärden, senare känner man igen koderna på samma sätt som man lär sig mönster hos morsetecken. Att använda morsekodens siffertecken vore dumt eftersom de är så långa.

Det som får karateklockorna (POV) att fungera så fint är tyvärr en stor nackdel för den seriella varianten. Ögat kräver mycket större skillnad på "kort" och "lång" än vad som behövs för hörseln, så tidvisningen blir ganska långsam. Genom att använda två olika färger och/eller separera lysdioderna för "etta" och "nolla" kan man öka tydligheten en del.

Seriella klockversionen är utmärkt att kombinera med karateklockan, t.ex. för att slippa käftsmällar och konstiga blickar på bussen. :)

Den seriella klockan funkar egentligen bäst i akustisk form då den efter lite övning kan bli mycket snabbare. Den rent akustiska versionen kan göras härligt minimalistisk genom att piezohögtalaren också används som tryckknapp för aktivering av tidsutropet. -En lätt knackning på piezobrickan räcker för att ge en puls som väcker microcontrollern ur sitt sleepmode.
En komplett sådan klocka består av endast MCU, batteri, 32.768-kristall och piezohögtalaren. För inställning av aktuell tid m.m. måste något annat system än "korta-långa" användas eftersom piezobrickan inte är så bra på att förmedla olika långa tryckningar.

Den absolut elektronördigaste LED-klocka jag sett på youtube hade en enda RGB-led och visade tidens siffror sekventiellt genom att anta de olika färgkoderna för motstånd och kondensatorer. Vissa färger kan nog bli lite svåra att tolka tydligt i starkt omgivningsljus. Brun och orange kan säkert blandas ihop. "Svart" är ett problem i sig...
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av hanzibal »

Håller med, det minimalistiska är själva grejen i detta. Troligen inte patenterbart (otillräcklig höjd i förh till bef teknik) utan det är, som du säger, supereffektivt entreprenörskap som gäller - snabbt ut med ett estetsikt tilltalande armband med tillräcklig batteritid och utpris på ~100kr så kan man göra sig en hacka under en sommar tills asiaterna tar över :-)

Riktikt fräck grej tycker jag - kan du inte lägga upp en video?
Användarvisningsbild
LaRdA
EF Sponsor
Inlägg: 3766
Blev medlem: 9 september 2003, 14:10:46
Ort: Jämtland

Re: AVR ATmega - Extremt strömsnål rörelsesensor?

Inlägg av LaRdA »

Mönsterskydd kan man däremot få om man hittat en speciell form eller design, men det hjälper nog inte så mycket mot kineserna. :)
Skriv svar