Trådlöst sensor "nätverk"

Berätta om dina pågående projekt.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Trådlöst sensor "nätverk"

Inlägg av mri »

Det här hobbyprojektet startade nångång i början av året. Vi har odlat i växthus två somrar, dessutom har vi våra två sköldpaddor i växthuset sommartid tills det blir för kallt på nätterna. Av den orsaken har jag fantiserat om att bygga ett trådlöst loggande sensorsystem, var vi kunde övervaka många sensorer från ett och samma ställe. Temperatur och luftfuktighet primärt, men kanske även andra saker i framtiden som t.ex. lufttryck och husets elförbrukning.

Efter en hel del letande fastnade jag för en 433 MHz radiomodul från HopeRF; RFM22B. Öppen kod fanns i form av ett Arduino bibliotek: http://www.hoperf.com/rf_fsk/fsk/RFM22B.htm

Bild

Som temperatursensor övervägde jag inte ens DS1820, den är för onogrann, långsam och drar för mycket ström. Istället fastnade jag för STS21 från Sensirion. Bra nogrannhet, relativt snabb och låg strömförbrukning. Faktiskt en mycket bra sansor för pengarna! Enda negativa är att dess I2C adress är hårdkodad, dvs två sådana sensorer kan inte samsas på samma buss.

För luftfuktighet föll valet på HIH6121 från Honeywell. Digitala fuktsensorer är generellt dyra. Den här ligger någolunda okay i pris, och dess nogrannhet är "best in class", enligt Honeywell. Sensorns pris har dock stigit två gånger (Farnell) bara det senaste halvåret vilket inte är så trevligt.

Som processor på sensor noderna finns mycket mer lämpliga kandidater när det gäller låg strömförbrukning i sleep, än den jag valde. Dock är det JOBBIGT att lära sig en ny processor. Renesas R8C/21 kan jag från tidigare så det fick bli den.

Beställde ett 5-pack av RFM22B radiomodulerna på e-bay. Etsade "breakout" kort till två av dem och satte igång med radiolänken. Här en bild med två radiomoduler kopplade till samma processor. Går att skicka "Hello world!" om än kommunikationen är ganska ostabil.

Eftersom jag inte har nån C++ kompilator till min processor, "portade" jag Arduino C++ biblioteket till C. Inte snyggt, men det fungerade, till sist. Hittade några buggar i biblioteket på vägen:

Bild

Efter att koden någolunda fungerade i R8C/21 miljön flyttade jag ena radiomodulen till en ARM Cortex M4 processor som agerar basstation.

Bild

Radiolänken fungerar och det var tid att se på sensorerna. Båda kör I2C. I2C stödet i R8C/21 processorn är hiskeligt dåligt implementerat. Verkar vara nån sommarvikarie vid Renesas utan någon praktisk erfarenhet överhuvudtaget som implementerat I2C blocket. Efter en veckas knåpande gav jag upp och implementerade fungerande I2C i mjukvara, på en kväll!

Sensorerna sitter på kontakter så att de med förlängningskabel kan kalibreras och justeras genom att sänkas ner i ett dryblock (kalibreringsugn). Jag hoppas uppnå bättre absolut nogrannhet än databladet anger genom att kalibrera dem och linearisera i mjukvara. Fuktsensorn har jag inte möjlighet att kalibrera dock.

Bild

Förutom att allt skall fungera måste sensor noderna dra lite ström! Målet från början var att noderna skulle klara sig över ett år på 3V CR2450 knappcell batteri. Även om prcessorn inte är lämplig, lyckades jag komma ner i ca 2.7 uA sleep. Detta genom att stoppa processorn helt och låta radiomodulen väcka den till liv när det är dags att jobba. Radiomodulen har bra sleepläge med wakeup timer och interruptpinne som väcker processorn. Alla komponenter i designen har nogrannt utvärderats med tanke på strömförbrukning. Processorn kör på 8 MHz med sin intera RC-ocillator.

Bild

De olika delarna i mjukvaran fungerar, strömförbrukningen är under kontroll så det var tid att etsa fram en prototyp. Lite lättare att utvärdera radiolänken då också. Det visade sig vara svårt att hitta en lämpligt liten låda med rätt proportioner som kretskort med knappcell skulle passa i. Designar man för knappcell vill man ju ha liten låda också. Slutligen föll valet på 40x20 mm aluminium fyrkantrör men ändpluggar av plast. I det formatet fick större batterier plats, 2 st AAA. Kretskortet format är anpassat helt efter denna "låda". Kortet är 1mm tjockt istället för "standard" 1,6mm för att ge tillräckligt mycket frigång mellan komponenter och lådvägg. Kretskortet lackas för att motstå fukt och korrosion.

Bild

Bild

Bild

Bild

Små justeringar gjordes på layouten och en bunt kretskort beställdes från PCBCart i Kina. Jag kan ju egentligen inte designa kort som har med HF att göra, men jag satsade på så stort och kontinuerligt jordplan som möjligt. Anslöt top och boten jordplan med många vior. Processorpinnar valdes så att inga signalbanor behövde gå i Bottom layer.

Bild

Lödpasta och komponenter på:

Bild

Grillas i ugnen. Radiomodulen löder jag för hand. Vill inte riskera att den går sönder.

Bild

Färdigt:

Bild

Temperatur och fuktsensor på plats i kontakten. Ett antal oanvända pinnar till processorn hittas också i kontatkten, för framtida behov.

Bild

Förlängningskabel till sensor kalibraring. För att få riktigt bra kalibrering kommer jag nog att av ett lagom tjockt metallrör, gjuta in kabeln så att sensorn kan pluggas in på ändan av "röret" och sänkas ner i kalibreringshålet.

Bild

Lite serieproduktion av "lådor".

Bild

Och såhär långt har jag kommit med projektet idag. Basstationen är fortfarande på breadboard och jag kan se inkommande mätvärden via debuggern på PC'n. Mjukvaran i sensor noderna är 95% färdiga. Noderna har kommandointerface via radiogränssnitet var alla relevanta parametrar kan ändras, varefter de sparas i flash, som t.ex. sändareffet, max omsändningar, adresser, mätintervall, justeringsparametrar för sensorerna, osv.

En pinne i kontakten är dedikerad för "safe-mode", dvs när pinnen byglas till GND använder processorn bestämda "säkra" parameterar, ifall man konfigurerat den galet så att man inte får kontakt med den över radiolänken.

Nästa halva av projektet är att bygga "basstationen".
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av blueint »

HP räknare! ;)

Verkar som om växthuset är stort. Tänkte först på ett standard 6 x 2 meters..


STS21
* Fully calibrated
* Digital output, I2C interface
* Low power consumption
* Excellent long term stability
* DFN type package – reflow solderable
(pris?)

Noggranheten är på 0,2 °C verkar det som. SMT160 hos ELFA (3-4 kHz PWM) skulle kanske klara uppgiften också?
(DS1820 sägs ge en precision på 0,5 °C)

HIH6121
I2C,+/-5%RH,SIP 4 Hydrophobic filter (22,41 EUR)
0xDEADBEEF
Inlägg: 17
Blev medlem: 20 oktober 2012, 14:55:05
Ort: Jönköping

Re: Trådlöst sensor "nätverk"

Inlägg av 0xDEADBEEF »

Kul projekt! :D

Jag satte upp ett växthus nu under semestern och har börjat fundera på datainsamling/bevattning-system.
Jag var lite förutseende och drog in vatten, el och TP-kabel.

Som det ser ut nu blir det ett sensor/controller-kort och ett Linux-kort som får presentera det hela lite snyggt med wfrog. ( http://code.google.com/p/wfrog/ )

Smart att ha sköldpaddorna där ute under sommarmånaderna, att jag inte tänkt på det...
Nåja, nu har greken något att se fram emot till nästa år :lol:
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av mri »

blueint:

HP räknare, jo, jag är av årgången när HP 48SX var just den rätta räknaren man skulle ha i studierna. Bra räknare, men lite klumpig Hex, Bin, Dec omvandlig som den ofta används till med microcontroller pyssel.

Växthuset är inte så stort, "bara" 10 m2, och endast en sensor kommer att placeras där inne.

Tack för att du satte in länkar till databladen, jag orka inte leta fram dem. :-)
Angående SMT160 har jag använt den tidigare. Den kräver dock kristall på processorn för att kunna mäta PWM signalen tillräckligt bra, dessutom kräver den kontinuerligt jobb av processorn under mätningen. Med de I2S sensorerna gör jag följande:

1. Bootar sensorerna genom att ge dem matningsspänning
2. Processor och radiomodul går och sova i 100 ms (2.7 uA strömförbr.)
3. Startar mätning i sensorerna
4. Processor och radiomodul går och sova i 100 ms (2.7 uA strömförbr.)
5. Avläser mätvärde från sensorerna
6. Stänger av matningspänning till sensorerna

Alltså, under tiden sensorerna "bootar" och mäter sover resten av systemet. Detta get låg strömförbrukning och dessutom mindre störningar som ger bättre förutsättningar för sensorerna att mäta.

0xDEADBEEF:

Med Linux finns ju en del att bygga med jo. Själv har jag inte hittat något lämpligt GUI bibliotek. De flesta är byggda på just Linux. Jag hade tänkt använda något mera lätt, eller inget OS alls.

Paddorna blir helt galna av iver när de får komma ut i växthuset på försommaren, efter hela vintern inomhus. De gillar ju värme och solljus, så växthus är perfekt. De spenderar en hel dag på att bara springa fram och tillbaka i mullen. Vi byggde golvet så att vi kunde hindra paddorna från att ta sig upp i jordbänken, ifall de skulle käka upp eller gräva sönder det vi försöker odla. Den smartare paddan lyckades ganska snart ändå ta sig upp i jordbänken. Nu får de röra sig fritt. De äter lite av bladen som hänger ner eller nån övermogen tomat som ramlat ner. Annars gör de ingen skada. Jag har också en 2 m2 utebur vilken de kan gå in i genom ett hål i växthusets sockel. Och en obligatorisk bild av Mimmi i växhuset. :-)

Bild
ekman
Inlägg: 280
Blev medlem: 13 januari 2009, 14:04:35

Re: Trådlöst sensor "nätverk"

Inlägg av ekman »

Verkar vara väldigt noga och proffsigt utfört :bravo:
Ro hem dom sista 5% nu bara

Ingen skärmdump på debugger programmet i PC'n?

Haha den sköldpaddan såg inte så road ut :D
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Trådlöst sensor "nätverk"

Inlägg av Lennart Aspenryd »

Proffsigt!
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av mri »

Tack!

5% :-)
Det är nog snarare minst 50% kvar. "Basstationen" som skall presentera mätvärden & grafer är ju kvar att bygga. Får hänvisa till en annan tråd var jag efterlyser något att basera den på: http://www.elektronikforumet.com/forum/ ... =7&t=66914
mikromedia+ är fortfarande förstahandsfavorit: http://www.mikroe.com/mikromedia/plus/stm32/
De där 5%'en i sensor noderna är bra att hålla öppet ännu, man vet aldrig vad man kan behöva för features.

Skärmdump var det. Här en bild från Renesas HEW IDE'n som kör mot sensor noderna:
SensorNode_HEW.png
Och här en från CooCox CoIDE som kör mot ARM Cortex M4 processorn, dvs "basstationen". I Semihosting fliken ser man inkommande mätvärden.
Första värdet är tiden sedan senast mätvärde i us.
"rssi" = RSSI mätt av basstationen
"id" = meddelande ID
"T" = temperatur i deg.C * 100
"RH" = relative humidity i % * 100
"RHT" = fuktsensorn egna temperatursensor i deg.C * 100
"RSSI" = RSSI mätt av sensor noden
"retr" = antal omsändningar för föregående meddelande
"PWR" = sensor nodens tx power
"BATT" = sensor nodens batterispänning
SensorNode_CoIDE.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Jonaz
Inlägg: 2326
Blev medlem: 4 november 2003, 22:06:33
Ort: Huddinge

Re: Trådlöst sensor "nätverk"

Inlägg av Jonaz »

Solcellsladdning till sändaren kanske?
Jula har solcellslampor för en 10:stycket kanske något att bygga vidare på?
Användarvisningsbild
gunne
Inlägg: 2070
Blev medlem: 17 juni 2004, 15:00:31
Ort: sthlm
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av gunne »

Finns det nån chans att du vill sälja några enheter när du är klar?

De skulle passa mycket bra till mitt lilla båtbygge (http://stor-erik.com) för att mäta temperatur och fukt på diverse ställen i kölsvin, under tankar, bakom isolering etc för att på så sätt hålla koll på frysrisk och förebygga kondensproblem.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av mri »

Jo visst.
Jag försöker ju designa med tanke på någon form av serieproduktion. Det kanske syns. :-)
Men det här är ett hobbyprojekt så jag utgår inte från att jag måste få sålt något.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av blueint »

Med serieproduktion av lådorna fick iaf jag intrycket att det vart fråga om ett stort växthus i början ;)
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av mri »

Så har jag då skaffat en mikromedia+
För att vara ett utvecklingskort är det mycke grejer på litet kort. Touch skärmen är resistiv och ger förståss inte samma fina känsla som kapacitiv, annars verkar kortet vara mycket trevligt. Och jag kommer givetvis att använda MP3 hårdvaru codec'en och hörlursförsärkaren för att spela upp ljud! ;-)
IMAG0585.jpg
IMAG0586.jpg
Nu skall jag ta en titt på http://www.emblocks.org om det skulle kunna ersätta CoIDE, eftersom jag gärna skulle ha en C++ kompilator till GUI grejerna.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av mri »

Yess!!! ARM Cortex projektet nu överflyttat till Em::Blocks. Kompilering och debuggning fungerar! C och C++ kod kan mixas, vilket inte stöddes av CoIDE.
Em::Blocks kräver dock betydligt mer förkunskap för att få ihop alla bitarna, jämfört med CoIDE. Inte mycket kryss-i-ruta när man kommer ner på processorspecifika saker, t.ex. måste man själv ange FLASH och RAM layouten i länkskriptet, vilket iofs. inte var så svårt. Även om Em::Blocks ännu är Beta känns det mycket mer polerat och färdigt än CoIDE.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av mri »

Börjar ha koll på SSD1963 skärmdrivare och TFT skärmen. Utgick från en Linux FB driver för SSD1963 och reverse engineerade en del kod i Mikromedias MikroC bibliotek för att få till initieriengen av skärmen.

Jag kan tömma skärmen (dvs skriva till varje pixel) på 8 ms (125 FPS) viket är ganska ok hastighet.

Igår fick jag ihop font systemet och printf() textutskrift och kunde första gången printa "Hello world!", vilket ju alltid är en milstolpe! :-)
Har knåpat ihop en true-type fontkonverterare (utgick från MS ttf2bmp) som producerar C källkod som sätts med i C projektet och därmed hamnar fonten som const data i kodsegmentet. Fontdata är lagrad i RLE komprimerat format, och packas upp samtidigt som tecknen renderas på skärmen.
IMAG0611.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Trådlöst sensor "nätverk"

Inlägg av mri »

Efter ett antal lediga dagar under Julhelgen har det här projektet gått framåt.

Har nu knåpat ihop följande:
- I2C driver (vidareutveckling av Korkens I2C kod)
- STMPE610 resistiv touch driver (som ligger på en I2C bus)
- LCD rutiner för text och grafik med alpha-blending
- Ett litet .NET program för att konvertera PNG bilder till mitt eget RLE kodade "C" format
- Jobbar på ett eget GUI framework, se bild:

Bild

Jag hittare aldrig något passande embedded GUI framework. Visst finns det, men alla kostar riktiga pengar. Så det blev att bita ihop och börja bygga eget. Intressant utmaning dock när jag väl kom igång. Har ju använt färdiga system tidigare, men aldrig designat eget. Har sneglat på ST's GUI demo framework (som dock är ganska risigt kodat!) och FLTK. FLTK är bra, men för stort för mina behov. Det blir att jag kollar vilka events de har, och sedan plockar bort allt "onödigt". Man kommer långt i designtankarna bara genom att fundera på eventens namn; DRAW, PUSH, RELEASE, DRAG, osv.

Nåväl, målet med mitt GUI framework är att först och främst se bra ut och ha bra touch känsla. Dessutom skall det vara extremt RAM effektivt. En label, en knapp, en CheckBox kostar i nuläget 24 byte RAM/styck. Varje nytt fält eller pekare som sätts till objekten vägs på guldvåg. Allt skall ge maximal utdelning i fuktionalitet och minimalt RAM avtryck. Allt "onödigt" åker ut! Alla GUI objekt kan allokeras dynamiskt, deklareras i statiskt minne, eller ligga på stacken, beroende på vad slags system man kör på. Kodstorleken är av sekundär betydelse, även om jag försöker skriva minimalistisk kod. Frameworken är modulärt uppbyggt så att "event-motorn" är helt separerat från hårdvaruspecifika saker och separerat från hur saker ser ut på skärmen. Dvs. det går då att plocka ut motorn till ett annat projekt som har helt andra förutsättningar. Systemet är för tillföllet indelat i: "motorn", "Style", "PORT" och "Dialogs". Style är själva renderingen av objekten på skärmen. Jag har planer på att ha flera färgteman som man kan växla mellan, och allt sådant utseende specifikt hamnar i Style modulen. PORT är allt "övrigt" som är platformsspecifikt, t.ex. dynamsikt minne och touch avläsning. Dialogs ska innehålla standarddialoger ock "dialogmallar" som man kan bygga vidare på i applikationen.
Jag försöker också hålla systemet single-threaded, men vet inte ännu hur jag skall bygga upp hanteringen av modala MessageBox'ar som ju blockerar programflödet tills användaren klickat Ok eller Cancel... Men de e de intressanta utmaningarna. :-)

Fick lära mig rita knappar också. Har aldrig egentligen ritat saker, men hittade en bra tutorial på nätet. Så nu gillar jag GIMP startkt!!!
Det som syns på bilden är ett utkast och sannolikt inte det slutliga utseendet.
Skriv svar