WindWiz

En GSM-uppkopplad vindmätare

Månadsarkiv: juli 2012

Vår&sommar 2012

Jag har slarvat med blogguppdateringar och det straffar sig när man väl tar sig tid att skriva. Arbetet sen i November har varit något ofokuserat och det är svårt att sammanfatta allt i samma inlägg. Det eviga bekymret med spänningsdippar kvarstår, vilket resulterat i att jag tappat förtroendet för min nuvarande plattform. Jag har gjort nya försök att designa ett eget kretskort, men behöver hjälp med caddning. Min plan är att försöka värva någon för detta, men det är svårt att hitta kompetent folk som kan tänka sig ställa upp till en rimlig peng. Allra helst hade man velat hitta en skärmflygande elektronikingenjör som arbetar med cad till vardag, som råkar ha alldeles för mycket fritid över. Men det är nog tyvärr önsketänk.

Det kort jag designat är tänkt att vara ett prototypkort för att testa min design med det nya SIM900-modemet. För att slippa kladda med t.ex. antenn-matchning så har jag för detta kort valt att plocka in en färdig GSM-modul, som monteras mha stiftlister på mitt prototypkort. GSM-modulen jag valt är Propox MMsmartGSM. Kortet drivs på 4V som går rakt in i GSM-modulen. GSM-modulen har sedan en egen regulator som tar ner spänningen till 2.8V, som används för att driva AVR-processorn. Eftersom AVR-processorn kör på 2.8V, vilket också råkar vara GSM-modulens I/O-spänning, så krävs ingen omvandling. Nästan som om någon tänkt till här 😉

För reglering av input-spänning har jag använt en färdig modul, KIS-3R33S. Den ger egentligen ut 3.3V, men kan öppnas och modiferas för andra spänningar. Inuti sitter ett MP2307-chip och gör allt arbete, och fixar önskar utspänning (4V) upp till 3A med en inspänning mellan 4.75-23V. Med det stora input-spannet borde man kunna koppla på nästan vad som helst!

För inkoppling av sensorer finns en stiftlist (CONN1) som drar ut I2C-pinnarna från AVR-processorn, ett antal GPIO, ADC m.m.

Prototypkort

Propox MMsmartGSM

Kodbasen är för tillfället en enda stor röra då jag i våras tog beslutet att separera kärnan från den applikationsspecifika koden. Detta medför att man kan använda mjukvaran till annat än en vindmätare, som jag hoppas kunna göra i framtiden. Även hårdvaran är sådan att den skall fungera som en plattform för GSM-uppkopplade sensorer.  Min inspiration har till stor del varit linuxkärnan när jag designat mitt ”operativsystem”, då jag arbetat mycket med detta tidigare. Jag har försökt porta de delar som jag finner fiffiga, medans jag förenklat andra koncept som känns onödigt komplicerade.

T.ex. har jag inget behov av en äkta schemaläggare, men vill gärna ha förmågan att strukturera min kod i olika processer. Därför har jag valt att plocka in Protothreads, en portabel trådningsmekanism. Biblioteket arbetar att skutta omkring i kod via macro-inkapslade switch-block och tricks med goto, istället för att göra äkta kontextbyten. Detta medför låg overhead och god portabilitet. Fördelen är att kod kan struktureras som om kod kör i separata processer, medans det under ytan fortfarande fungerar som ett gäng tillståndsmaskiner. Vi får se hur bra det fungerar, jag misstänker att detta approach kan försvåra debugging något.

Jag har också lagt till ett abstraktionslager för hårdvaran, en s k ”HAL”. Detta gör att jag lättare kan byta plattform i framtiden, något jag gjort ett par gånger redan 😉 Ett HAL-lager underlättar också om man vill testköra kod på sin vanliga arbetsstation, som är mycket enklare att felsöka. I ett tidigare inlägg skrev jag om hur jag gjort en abstraktion för GSM-modem, och detta blir en förlängning som sträcker sig över andra periferienheter, t.ex. timers, sockets, lagring (t.ex. på fil eller flash) osv.

I sin första utgåva kommer det finnas ett HAL för Linux, och ett för Atmegan. Det innebär att man kan köra vindmätarmjukvaran på antingen en linuxmaskin, eller på den ”riktiga” hårdvaran. Givetvis skulle linuxmaskinen också kunna vara en relativt liten sak, som t.ex. en Raspberry Pi.

På tal om Raspberry Pi så får jag direkt erkänna att jag äger en och att jag redan avfärdat den som en lämplig vindmätarplattform. Åtminstone för den typ av vindmätare som skall fungera fristående. Strömförbrukningen är många gånger högre än min nuvarande plattform, och skulle kräva stora batteri och gigantiska solpaneler. För ett olastat Linux-system på Raspberry Pi drar ca 200 mA, medans en AVR endast drar 1 mA (eller ännu mindre i sömnläge). På detta tillkommer GSM-modem i båda fall. För vindmätare med fast ström är en RPi mycket intressant, men med det nya HAL-lagret har jag flexibilitet att byta vid ett senare skede om behovet finns.

Avslutningvis tänkte jag skriva några ord om andra relaterade projekt som progressat under sommaren. Jag har varit i kontakt med Onsalas rymdobservatorium för att höra om det finns möjlighet att få ut data från deras vindmätare på Onsala. Det visade sig gå alldeles utmärkt och de matar numera ut mätdata på webben varje minut. För tillfället håller jag på att bygga om winddb, den komponent i vindwebben som samlar in data från olika typer vindmätare och slår dem samma till ett enhetligt format, så den skall stödja även denna typ av mätare. När allt är klart kommer man kunna avnjuta live-data från Onsala, utifall att nån våghalsig flygare får för sig att ta en svängom på Torkelstorpsberget.