onsdag 27 mars 2013

Strömförbrukning ATtiny85, MSP430 och ATtiny84A

Tanken med ATtiny85 kretsen är att använda den i små sensornoder som drivs med batteri. Därför är det viktigt att strömförbrukningen är så låg som möjligt. En typ av sensornod är en trådlös temperatursensor baserat på en DS18B20 samt en 433 MHz radiosändarmodul. Denna typ av nod kan vara i stand-by läge den mesta delen av tiden och bara vakna t.ex. var femte minut för att göra en temperaturavläsning som skickas via radio. Sedan kan noden gå ned i stand-by läge igen för att spara ström.

För att testa detta skapades ett litet testprogram som sätter MCUn i sleep_mode_pwr_down äge och som sedan väcks av WDT var åttonde sekund. När noden väckts tänds en led i en sekund och så går noden ner i power down läge.

För att mäta strömförbrukningen kopplade jag en multimeter inställd på strömmätning i serie med strömkällan (ett 3.7V, 2400 mAh, 18650 batteri, vilket var laddat till 4.13V).

Strömförbrukning i vaket tillstånd med LED tänd: 4.64 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 1.073 mA
Strömförbrukning sleep_mode_pwr_down: 6 uA

Vissa sensorer kan kräva 5V spänningsmating. I dessa fall kan en step-up modul användas. För att se hur den påverkar strömförbrukningen gjordes samma experiment med en krets som tar 3.7 V från batteriet som input och lämnar ut 5V.

Strömförbrukning i vaket tillstånd med LED tänd: 11 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 2.4 mA
Strömförbrukning sleep_mode_pwr_down: 0.3 mA = 300 uA

En stooor försämring!

Som sista experiment slogs BOD (Brown Out Detection) av vid power_down, det gjorde följande med strömförbrukningen:



Strömförbrukning i sleep_mode_pwr_down: 4-5 uA.

Med en strömförbrukning på 4 uA den mesta delen av tiden borde ett batteri kunna räcka rätt länge. För att veta exakt kan man använda kalkylatorn på: http://oregonembedded.com/batterycalc.htm

Om man i batterikalkylatorn använder ovanstående värden tillsammans med 18650 batteriet (2400 mAh) och väcker MCUn under en sekund 12 ggr i timmen skulle batterierna räcka i 5.39 år!

Test med 3.21V matning (2 x AAA).
Strömförbrukning i vaket tillstånd med LED tänd: 1.503 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 0.748 mA
Strömförbrukning sleep_mode_pwr_down: 3 uA

Test med 3.3V matning.
Strömförbrukning i vaket tillstånd med LED tänd: 1.876 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 0.804 mA
Strömförbrukning sleep_mode_pwr_down: 4 uA


Test med 5V matning.
Strömförbrukning i vaket tillstånd med LED tänd: 6.45  mA
Strömförburkning i vaket tillstånd med LED urkopplad: 1.293 mA
Strömförbrukning sleep_mode_pwr_down: 5 uA

Nästa steg blir att göra samma test med en TI MSP430-G2553 och se hur den står sig med ATtiny85. Kommer även att utvärdera ATtiny84A med ATMELs picopower teknologi.

Uppdattering: MSP430-G2553 med 3.3V störmförsöjning från en Arduino Uno
Strömförbrukning i vaket tillstånd med LED tänd: 1.57 mA
Strömförbrukning i sovande tillstånd med LED tänd: 1.29 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 355 uA
Strömförbrukning LPM3 (Timerinterupt): 1 uA (minsta värde multimetern kan mäta)

Om man i batterikalkylatorn använder dessa värden tillsammans med två AA batterier (1200 mAh) och väcker MCUn under en sekund 12 ggr i timmen skulle batterierna räcka i 10.44 år!

Med två AAA batterier på 3.21 V

Strömförbrukning i vaket tillstånd med LED tänd: 1.411 mA
Strömförbrukning i sovande tillstånd med LED tänd: 1.144 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 345 uA
Strömförbrukning LPM3 (Timerinterupt): 1 uA (minsta värde multimetern kan mäta)

Det verkar som om MSP430 verkligen rockar när det gäller low power! Ska bli kul att se om ATMELs picopower kan rå på TI:s MSP430.

Både 5.39 och 10.44 år är väldigt mycket och det finns anledning att tro att batteriernas självurladdning är det som påverkar tiden mest.

ATtiny84A

För att mäta strömförbrukningen kopplade jag en multimeter inställd på strömmätning i serie med strömkällan (ett 3.7V, 2400 mAh, 18650 batteri, vilket var laddat till 4.13V).
Strömförbrukning i vaket tillstånd med LED tänd: 4.18 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 717 uA
Strömförbrukning sleep_mode_pwr_down: 4 uA


Med två AAA batterier på 3.21 V

Strömförbrukning i vaket tillstånd med LED tänd: 1.5 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 500 uA
Strömförbrukning sleep_mode_pwr_down: 4 uA

Med sleep bod disabled och två AAA batterier:

Strömförbrukning sleep_mode_pwr_down: 3 uA

Sammanfattning

Det verkar som om Atmels picopower inte riktigt rår på TI:s MSP430 serie. Även om ATtiny drar 3 gånger så mycket som MSP430 i standby så är de väldigt strömsnåla. Dock är MSP430 king of low power.


Programmera ATtiny85 och ATtiny84A med AVR Dragon

Detta är en guide till hur man programmerar en ATtiny85 och ATtiny84A med hjälp av en AVR Dragon programmerare och AVR Studio 5.1.

ATtiny85

Jag kommer använda ISP (In System Programming) metoden (som nyttjar SPI protokollet). För att se hur man skall koppla in draken går man lämpligtvis till denna länk. Där finns följande bild.
SPI programming and debugWIRE debugging

Detta är egentligen allt som behövs. Jag kopplade upp ovanstående på en breadboard med jumper wires.
Inkoppling av AVR Dragon för att programmera ATtiny85. Vid programmeringsläge ansluts tinyn till pin 10-13 på breadboard.
När inkopplingen är gjort är det mycket viktigt att ställa hastigheten i programmeringshanteraren i AVR Studio till 125 kHz. Om man försöker med defaultvärdet på 1 MHz funkar det inte alls.

ATtiny84A

Jag kommer använda ISP (In System Programming) metoden även för ATtiny84A:an. För att se hur man skall koppla in draken går man lämpligtvis till denna länk:

Där finns följande bild: 

VCC

6
B
nc
5
4
G
nc
3
2
nc
nc
1

HV_PROG

20
nc
nc
19
18
nc
nc
17
16
nc
nc
15
14
nc
nc
13
12
nc
nc
11
10
nc
nc
9
8
nc
nc
7
6
nc
nc
5
4
nc
nc
3
2
nc
nc
1

ISP

6
F
E
5
4
D
C
3
2
B
A
1

JTAG

10
nc
nc
9
8
nc
nc
7
6
nc
nc
5
4
nc
nc
3
2
nc
nc
1

DEVICE


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc

8
A
D
7
9
C
nc
6
10
nc
nc
5
11
nc
E
4
12
nc
nc
3
13
nc
nc
2
14
F
G
1

söndag 17 mars 2013

Rainbow Cylon project

Detta projektet går ut på att undersöka hur RGB-LEDar fungerar och hur man driver/styr dem. För att göra detta kommer effekten i ögonen hos robot-versionen av Cylons i Battlestar Galactica simuleras (ser ut som Kitt från Knight Riders röda lampor i fram). Förutom att använda färgen röd kommer även alla regnbågens färger användas.

Material
Arduino Uno
10 st RGB LEDs (Länk)
2 st TLC5940 drivkretsar, seriell ingång och 16 PWM utångar (Länk).
Breadboard
Kablar

Progress:
Har kopplat in en TLC5940 och driver den röda dioden i 10 stycken RGB-leds. Kör Cylon-svepet.
Skulle ladda upp en video men det verkar inte funka. :(

Nästa steg blir att koppla in alla tre led:arna och de andra TLC5940 kretsen. Då kommer 30 av de 32 PWM-kanalerna behöva användas. Många (10x4) jumpercables blir det...


lördag 16 mars 2013

Nattlampa med Colorduino

Detta projekt går ut på att bygga en nattlampa som visar solens och månens upp och nedgång på de tider som dottern bör sova. Det innebär att när det är läggdags går solen ner och månen kommer fram. När det är dags att gå upp går månen ner och solen upp. På så sätt vet hon när det är dags att gå upp (hindrar säkert inte henne från att gå upp och leka mitt i natten men ändå).

Basen i projektet är en Colorduino med en 8x8 RGB LED matris. En Colorduino är en Arduino-kompatibel enhet med en Atmel Atmega328, LED drivkretsar (24 st PWM ut) samt Darlingtontransitorer för att strömförsörja alla LEDar. Själva matrisen är av typen "common anode", dvs den har totalt 32 pinnar, 8 st common anode och sedan 8 stycken för respektive färg (Röd, Grön, Blå).

Tanken är att göra ett antal "bilder/animationer":
* Solen går upp och månen ned, snygga röda färger för att simulera soluppgång.
* Solen går ned och månen upp, samma som ovan med åt andra hållet.
* Månen är uppe på en stjärnhimmel med blinkande stjärnor.
* Solen är uppe, kanske vandrar den över himlen beroende på tid på dagen.

Enheten konfigureras med de tider som gäller på veckodagarna respektive helgen. T.ex. på veckodagar går solen upp klockan 07.00 och ned 19.00. På helgerna går solen kanske inte upp förrän 08.30 men ned 19.00.

Hela matrisen byggs sedan in i en lämplig fotoram för att vara snygg att se på.

Material
Colorduino (Länk)
8x8 RGB LED matrix (Länk)

Progress:
Nu har sakerna kommit och en första programmering är gjort med hjälp av en FTDI-adapter och Arduino-utvecklingsmiljön.

lördag 9 mars 2013

Detaljerad loggning av elförbrukning

I dagsläget använder jag 1-wire räknare för att logga elförbrukningen från tre olika elmätare (huvudmätare, bergvärmepump och FTX-system). 1-wire räknarna läses av varannan minut och data sparas i en databas. Detta fungerar bra för att se total förbrukning per dygn eller månad men dåligt för att se momentan förbrukning. I dagsläget blir de momentana förbrukningen samma som medelförbrukningen under två minuter vilket inte är tillräckligt för att kunna se individuella förbrukare.

Tanken är att utöka systemet med en Arduino Uno med Ethernet-shield som räknar pulser från huvudmätare och bergvärmemätare och sedan skickar dessa till en port på en server där en applikation tar emot datan och lagrar i en databas.

Progress:
* Ethernet-shielden är testad genom ett program som läser av en 1-wire temperatursensor och sedan skickar temperaturen till en socket på en PC.

Automatisk loggning av vattenförbrukning

Loggning av vattenförbrukning är en av de funktioner som saknas i mitt "system". Tyvärr saknar min vattenmätare någon form av elektrisk pulsutgång så lösningen blir en optisk avläsning.

Planen är att montera en gammal mobiltelefon med kamera och "blixt" som får ta bilder på vattenmätaren med jämna mellanrum. Telefonen är kopplad till mitt WIFI-nät och laddar automatiskt upp alla bilder på en ftp-server. Sedan körs ett analysprogram på servern som genom bildbehandling extraherar nuvarande mätarställning. Det är två typer av bildbehandling som behövs, först bör räkneverket OCR:as och sedan bör de fyra röda mätarna läsas av med lämplig metod. När all information är avläst lagras den i en Mysql databas .

Exempel på hur en vattenmätare kan se ut.
Tanken är att utgå från Python-sciptet på den här sidan.

Trådlös blomövervakning

Detta projektet går ut på att bygga små trådlösa noder med en jordfuktighetssensor. Dessa skall regelbudet rapportera fuktigheten i jorden till ett överordnat system. Det överordnade systemet kan vara en Raspberry Pi med en Tellstick Duo eller en Arduino med 433 MHz mottagare.
Det överordnade systemet kan sedan larma personen ansvarig för blombevattning.


Kontorsnotifieringssystemprojektet

Detta projektet går ut på att sätta ihop 2-8 stycken 8x8 LED matriser och sedan visa meddelande som en scrollande text. Texten skall kunna styras från internet vilket gör att styrnoden måste ha tillgång till ett nätverk med internet-access eller ha ett eget 3g modem.

Planen är att använda en Raspberry Pi som styrnod, det går även med en Arduino men då blir det krångligare att  koppla den till nätet, behövs nog en PC som gateway isåfall.

Komponentlista
  • Raspberry Pi
  • Eventuellt USB-WIFI modul
  • Eventuellt 3g-modem med SIM-kort
  • X st 8x8 LED matriser (exempel)
  • X st MAX7219 LED drivers (exempel)
  • En rejäl nätdel, varje 8x8 drar runt 170 mA + 1A för Rasbperry Pi:n
  • En snygg låda
Progress:
* 2 st LED matriser med drivare beställda.

Trådlös energimonitor

Detta projektet går ut på att trådlöst övervaka hur mycket el som förbrukas i ett hushåll. Detta görs genom att läsa av IR-dioden på elmätaren. Genom att mäta tiden mellan varje puls kan den momentana elförbrukningen i Watt beräknas, antalet pulser per timme/dag/månad/osv kan användas för att beräkna förbrukningen i kWh.

För att slippa springa ut till elmätaren hela tiden kommer systemet bestå av två enheter. En som läser av den blinkande IR-dioden och en som presenterar informationen för en användare. Dessa kommunicerar trådlöst på 433 MHz.

Sensornoden mäter förutom pulser även batterispänningen. När en ny puls detekteras från elmätaren vaknar noden ur sleep-mode och skickar ett kort paket med en start-tag samt en byte med pulsnummer. Batterinivå skickar var X:de puls.

Presentationsnoden är ansvarig för att presentera momentan förbrukning samt ackumulerad förbrukning sista timman, dagen, veckan, månaden och året. Dock bygger detta på att presentationsnoden inte missar att ta emot för många (fler än 256) pulser från sensornoden.

Komponentlista - sensornod

  • Arduino-kompatibel nod, t.ex. ATTiny85
  • TSL261 Light to Voltage sensor
  • 433 MHz sändarmodul (exempel)
  • Batterihållare för 2xAA batteri
  • Låda
Komponentlista - presentationsnod
  • Arduino Mini Pro eller Uno
  • 433 MHz motagarmodul (exempel)
  • 5V nätdel
  • Nokia 5110 display
  • Realtidsklocka (exempel)
  • Låda

Sensornoden är baserad på systemet på den här länken.

Progress:
* Ett prototypsystem är byggt på två stycken Arduino Uno. Den ena noden läser av elmätaren med en IR-sensor och skickar en puls via den trådlösa länken. Den andra noden lyssnar efter pulser och räknar sedan ut den momentana förbrukningen och visar den på en 16x2 display.

Växthusövervakningsprojektet

Eftersom Google Translate gör ett bra jobb med att översätta sidor mellan olika språk kommer detta och nästföljande inlägg om mina Arduinoprojekt vara på svenska.

Detta projektet går ut på att fjärrövervaka växter i ett växthus. Förutsättningarna är att det finns el samt ett wifi-nät med internetaccess.

Tanken med systemet är att mäta förhållandena i växthuset med hjälp av ett antal sensorer. Följande saker kommer mätas:

  • Temperatur (DHT22 sensor) 
  • Luftfuktighet (DHT22 sensor)
  • Jordfuktighet (Soil Hygrometer Detection Module)
  • Timelapse över växternas växt (Raspberry Pi Camera module eller Webcam)
Planen är att använda en Raspberry Pi för att samla in data från sensorer samt att skicka vidare till en server på internet. Alternativt köra en web-server där klienter kan ansluta direkt. Presentation av informationen kommer göras via en websida med grafer samt video och stillbilder.
Temperatur, luftfuktighet samt jordfuktighet kommer att mätas genom sensorer som kopplas till en Arduino Uno som agerar som sensor-board till Raspberry Pi:en. Detta möjliggör sex stycken jordfuktighetssensorer.

Förutom dessa komponenter kommer eventuellt någon av enheterna även ha en enklare display (Nokia 5110 , 16x2 eller 20x4) för att presentera informationen lokalt.

Systemet kommer byggas och deployas under våren 2013.

Komponentlista
  • Raspberry Pi
  • SD-kort
  • Strömförsörjning, 1A, 5V
  • USB-WIFI adapter
  • Arduino Uno med USB kabel
  • DHT22 temperatur/luftfuktighetssensor (exempel)
  • X stycken Soil Hygrometer Detection Module (exempel)
  • 16x2 display till Raspberry Pi (exempel)