WindWiz

En GSM-uppkopplad vindmätare

Månadsarkiv: november 2010

Piff

Idag har jag ”första-adventspiffat” lite på vind-webbsidan och adderat en ny flik med information om hur man utvinner rådata från databasen. Det är tänkt att denna funktion skall användas av tredjepartsapplikationer för att visa vindstatistik. Användningsområdena är många, men mobilapplikationer ligger närmast på horisonten. En kollega har visat intresse för projektet och börjat fila på en Iphone app som visar kompassrosen, live från Hammars backar! Än så länge är appen i alpha-stadie, men den existerar i allra högsta grad. Jag fick en liten demo på jobbet i Fredags. Mycket fräsigt!

En androidapp är inte helt osannolik heller, särskilt eftersom man inte behöver punga ut slantar för en developer-licens på $100 som Apple kräver. Startsträckan blir så mycket kortare om man slipper betala för att utföra ett arbete 😉 Själv äger jag ingen smartphone och får nöja mig med att hämta ut textversionen av kompassrosen men det finns sätt att provköra Android-applikationer under utveckling direkt i datorn. Smidigt! Skall bli intressant att pröva på mobilutveckling igen, senast jag ägnade tid åt det var när J2ME var ”inne” och smartphones hade en batteritid på 1 dag. (App! Vänta lite nu.. det har de ju fortfarande!)

På vindmätarbygget har det inte heller stått stilla. Nästan all tid har gått åt till programmering och bara för att det inte skall vara tomma ord när jag säger att koden går framåt har jag nu även laddat upp de flesta kodändringarna i källkodsförrådet på GitHub. För den nyfikne finns nu lite godis att utforska:

  • SWUART – Mjukvaruserieport (8N1)
  • UART – Hårdvaruserieport, interruptbaserad med reglerbar buffertstorlek.
  • Ringbuf – En enkel med naggande god ringbuffert. Används av både SWUART och UART för bufferhantering.

Det finns även ett startskott för A/D-omvandling, power-management för vindgivarna och lite inställningslogik (spara i EEPROM-minne för att överleva omstarter etc).

Mjuka serieportar

Under den gångna veckan har jag hittat lite strötid åt att dels testköra den nya GSM-modulen och dels hacka vidare på mjukvaran. För att få igång modulen fick jag utöka vindmätaren med en spänningsregulator, införskaffa ett Telia kontantkort och koppla på ytterligare en serieport. Men den verkar fungera fint! Den knastrar och knorrar likt en mobil nära en högtalare när den startar upp och efter ca 1 sekund börjar status-dioden blinka med 3 Hz, vilket enligt manual innebär att den registrerat sig på GSM-nätverket. Yeah!

Jag har även provat att köra enkla AT-kommandon mot modulen via en serieportskonsol. Förra söndagen lyckades jag bland annat få iväg ett Farsdags SMS till den gamle via en rå AT-terminal. Pretty cool!

AT-kommandon och GSM-modulens svar. I bilden ovan syns utläsning av modulens version, serienummer m.m.

För min test har jag kopplat modulen rakt på min PC, men i skarpt läge skall GSM-modulen kommunicera direkt med vindmätarens processor. Det finns förberedd hårdvara i vindmätarens processorchip som kan sköta denna kommunikationen, men den är redan upptagen för kommunikation med min PC. Även om min PC inte kommer hänga med utomhus när det väl är dags för montering så är det en ovärderlig felsökningshjälp som jag inte kan offra. Det är inte heller helt orimligt att man vill kunna koppla upp en laptop ”på plats” och läsa ut felkoder för en krånglande vindmätare. Så vad gör man? Det behövs 2 serieportar, men atmega168 har bara en!

Efter att ha kikat på chipalternativ kom jag fram till att alla chip som faktiskt har två portar också har betydligt högre energiförbrukning. Och är ganska mycket dyrare, eller kommer i sådan kapsel att det blir bökigt att montera/reparera. Till slut hittade jag en artikel om hur man kan emulera en serieport via generella I/O-pinnarna i Atmega-chippet med hjälp av mjukvara. Perfekt! Detta är dock en ganska plågsam operation och tar en hel del av vindmätarens processorkraft, men det väger helt klart upp nackdelarna eftersom chippet inte behöver bytas ut.

Planen är nu att använda den ”dedikerade” hårdvaruserieporten för GSM-kommunikation, och den långsamma mjukvaruserieporten för PC-kommunikation. Detta på grund av att PC-kopplingen förhoppningsvis kommer bli ett ganska ”exotiskt” användarfall i systemet. Den kommer främst användas i labbmiljö där strömförbrukning inte är ett problem, eller under korta perioder ute på fält när felsökning pågår.

Dramatiska bränder

Det är ju tänkt att hela den här vindmätarhistorian skall drivas på batteri. Jag måste erkänna, jag är ingen batteriexpert och för mig är det magiska prylar som ger ut en spänning X med en viss kapacitet Y. Om man önskar t.ex. 2X spänning kan man seriekoppla två batteri och ifall man önskar mer kapacitet, t.ex. 2Y, kan man parallellkoppla. Hur innanmätet ser ut har hittills inte intresserat mig särskilt, men vi har väl alla nån gång gjort ett potatisbatteri på lekis och fått ett hum om kemin som pågår under ytan.

Dagens batteri har kommit långt sen potatisen. Energidensiteten har ökat, vilket har tillåtit allt mindre batterikapslar och högre kapacitet. Batteriets egenskaper varierar vilt beroende på vilken typ (kemi) som används. Olika batterier har dessutom olika restriktioner och är lämpliga för vissa applikationer men helt olämpliga för andra.

Den där idén om en universell magiska energipryl känns inte längre lika korrekt. Besviken? Jo, jag också!

Generellt är det mer restriktioner på komplexa batterier med hög energitäthet. Moderna batteri som innehåller lithium-jon eller lithium-polymer kemi har restriktioner på hur mycket energi som får tas ur, i vilken takt, hur snabbt de får laddas och hur mycket de får laddas. Kemin i dessa mer avancerade batteri är betydligt mer instabil än gamla hederliga blybatteri och kan vid felhantering explodera eller fatta eld på ett ganska dramatiskt och otrevligt sätt. Kort sagt är detta inget batteri som är lämplig att ansluta direkt på en solpanel som kan variera kraftigt i sin laddström. Man måste dessutom se till att laddningen bryts och övergår till ”kittlingsfasen” när batteriet är mättat. Att kittla ett batteri innebär att man med små strömmar håller batteriet i trim när det är fullladdat.

Olika batterityper, eller rättare sagt kemityper, har olika spänningsnivåer. Lithiumbatterier ligger t.ex. på 3.7V (kan variera upp till 4.2V beroende på katod). Detta blir en slags minsta enhet och kan användas som byggsten vid seriekoppling till högre spänningar i multiplar av 3.7V. När man köper LiPo eller Li-Ion-batteri innehåller de ofta fler av dessa 3.7V celler internt, i RC-världen (radiostyrt) är det inte ovanligt med batteri-ackumulatorer på 7.4V (2x 3.7) eller 11.1V (3x 3.7). Dessa kan även innehålla flera parallellkopplade serier för att öka batterikapacitet. Benämningen som används är xS för x celler i serie och xP för x celler parallellt. T.ex. betyder 2S att två celler kopplats i serie, 3P att man parallellkopplat (och därmed tredubblat kapacitet). Man kan även se kombinationer, t.ex. 4S2P, som innebär totalt 8 st celler, seriekopplat kedjor med 4 celler vardera. Kedjorna är sedan parallellkopplade.

4S2P cellkonfiguration

Låter det knöligt? Lugna sig, det kommer mer! Lithium batterier är som bekant också betydligt mer känsliga för stora strömuttag (risk för explosion, som du kanske minns!). Ett batteri som är specat för 3.7V och 3200 mAh har kapacitet att leverera 3.7V vid 3.2 A (3200 mA) under en timme. Givetvis kan man dra göra större strömuttag på bekostnad av tid, t.ex. skulle man kunna ta ut 6.4A (2x 3.2A) under en halvtimme. Skulle du däremot försöka ta ut säg 100x så mycket ström, 320A, ur detta batteri skulle det troligtvis brinna upp. Så vart går gränsen? När är det risk för dramatisk brand?

Hur långt man kan gå beror på batteriets urladdningskapacitet. Detta är specat för varje batteri och varierar bland olika märke. Det är helt enkelt en egenskap som kostar. Om man surfar på hobbysidor för radiostyrt kan man hitta särskilda ”racing” batterier, med flashig blixtgrafik på förpackningen och med namn som ”MaxxxAmps”, ”Rally XL”, ”Stampede” osv. Dessa är batterier som tillåter aningen högre urladdningsfaktor än de billigare varianterna. Benämningen är zC där z är urladdningsfaktorn. 150C innebär t.ex. att du kan göra ett uttag på 150x kapaciteten. Om ovan 3.7V/3200 mAh hade en urladdningsfaktor på 10C hade man alltså kunnat ta ut 32A utan risk för dramatik.

På samma sätt finns en laddningsfaktor som bestämmer hur snabbt batteriet får laddas, t.ex max 1C. Kortfattat, Ladda för snabbt: Gameover. Ladda ur för mycket: Gameover. Ladda upp för mycket: Gameover. Solpaneler rimmar inte särskilt bra med dessa batterier. Så vad gör man? Man sätter in en slags regulator mellan solpanelen och batteriet som ser till att laddspänningen inte blir för hög trots strålande sol, att laddströmmen inte överstiger laddningsfaktorn och att laddningen upphör när batteriet är fullt. Jättebra!

Eftersom ett byggfel i laddningskretsen kan orsaka dramatiska bränder och potentiellt skogsbränder så är det helst något jag vill köpa in färdigt (läs: vältestat). Nu gäller det bara att hitta en regulator som klarar en inspänning på 20V från solpanel och laddar ett 11.1V LiPo-batteri. Att jag valt 11.1V (3S) beror på att GSM-modulen behöver 9-12V inspänning. Till mikroprocessorn och vindgivarna kommer denna spänning sedan justeras ner ytterligare till 3.3V. Spänningsdomänen kommer alltså att bli:

1) 20V solpanel

2) Regulator 20V till 11.1V

3) Regulator 11.1V till 3.3V

4) GSM-modul drivs på 11.1V källan (regleras internt ner till 3.7V)

Verkar det bra? Jag hoppas det. Ett bekymmer med alltför många spänningsomvandlingar är att detta kostar. En bra s k ”switchad” regulator har en verkningsgrad på kanske 90% medans de linjära ligger på ca 70-80%. Idealiskt hade man velat ha ett system som helt och hållet drivs på 3.7V. GSM-modulen i sig innehåller ytterligare en regulator som tar ner sin inkälla på 9-12V till just 3.7V. Det är lätt att vara efterklok! I nästa revision lär det bli en 3.7V GSM-modul, ett antal parallella LiPO-celler.

Avslutar med en bild från solpanelsmätningarna. UPPDATERING: I den första upplagan av detta inlägg fanns ett beräkningsfel i solpanelsmätningarna som gjorde att strömmen var en faktor 100x för lite. Duh 🙂 Nu har jag korrigerat och det ser genast bättre ut. 400 mA under peak-hours på en höstdag är helt okej!

Laddström från solpanel, 13 Nov, SV-läge delvis växelvis mulet/svag sol

Sverige – Solpanelens värsta fiende

Vilket kanonväder vi har! Grått, mulet och dystert. Soluppgång vid 8-snåret och ner igen vid 16-tiden. Det slog mig att detta måste vara nära ”värstafallsförhållanden” för solpaneler i Sverige, så jag har riggat upp en liten testpanel som skall placeras på min balkong för att förse med lite väderfull mätdata. Förhoppningsvis kan detta långtidstest (ett par dygn) svara på den vitkiga frågan: Hur mycket energi genererar en 20V/10W panel i praktiken under svenska vinterförhållanden?

Jag har kopplat ett motstånd över panelen som jag sedan läser av med en ”specialdesignad” multimeter, som tillåter att jag kan logga alla mätvärden på fil i min dator. Dessa skall sedan skalas om, plottas och analyseras. Denna information kan hjälpa mycket i dimensioneringsarbetet för  vindmätarelektronikens strömförbrukning och batterikapacitet. Som Tisdagsgodis bjuder jag på en film med min (som vanligt provisoriska) mätannordning:

PS. GSM-modulen har anlänt idag, än så länge har jag bara hunnit packa upp den och konstaterat att den var väldigt liten och behändig. DS.

Utelåst!

En regnig kväll upptäckte jag funktionen som gör att man inte längre kan programmera sin processor med ny programvara. Av misstag. Tydligen är det något som folk i säkerhetsbranschen vill kunna göra för att folk inte skall kunna mixtra med mjukvaran.

Dessvärre klassas inte mitt vindmätarbygge som en säkerhetslösning och man kan tycka att det borde vara svårare att aktivera denna utestängar-funktion av misstag. Men jag lyckades ändå! Lite stolt är jag.

Den gamla nerlåsta processorn är numera prydnad på hyllan och i labbet ligger en sprillans ny. Det är nu man är rätt nöjd att man valt en väldigt billig processor!

Det ”lilla misstaget” kostade drygt 4 dagar inkl frakt från svenska Lawicel shop, men sen dess har det hänt grejer:

  1. Programkoden börjar få lite fason. Den har lämnat det förskräckliga prototypstadiet och har gått in i ett mindre förskräckligt prototypstadie.
  2. Jag har bestämt mig för att lämna Arduino efter att jag upptäckt flera störande begränsningar: pin-headerspacing till påbyggnadskorten är ICKE-standard (troligtvis cad-fel som är för sent att rätta till då alla påbyggnadskort anpassat sig efter felet), och dels för att de flesta Arduino-brädor (inkl kloner) innehåller störande säkringar till strömkällan som tyvärr  är dimensionerade så att de kan slå till när man kopplar en tyngre last som ett GSM-modulen.
  3. Jag har försökt bilda mig en uppfattning om strömförbrukning med nuvarande prototyp, så jag kopplade multimetern i serie med vindmätaren samtidigt som den kontinuerligt samplade både riktning och hastighet och skrev ut resultatet på serieport i en oändlig loop. 1.5 mA på 3.3V, alltså ca 4.5 mW. När jag ryckte ur ”power”-lysdioden sjönk förbrukningen till ca 0.5 mA (1.6 mW). Rätt sjukt att lysdioden drar mer ström än alla andra komponenter i systemet just nu 🙂
  4. GSM-modul är beställd! Efter mycket velande föll valet tillslut på Indiska Rhydolabz GSM-modul. Främst för att den är den enda modul som enligt spec klarar ner till -20 grader celcius, men också för att den inte är bunden till Arduino-plattformen. Förhoppningsvis anländer modulen nästa vecka.
  5. Rhydolabz har även en GSM-modul i schysst ruggad låda med serieportskontakt, redo för inkoppling i PC. Denna skulle passa perfekt som ”telefongateway” mot vindmätarna. Släng i ett SIM-kort, koppla på en PC-server med internetanslutning och låt den svara ivriga CPS:are med uppläst vinddata från alla aktiva vindmätare. För 60 EUR + frakt är det nästan gratis!