Tweet-a-watt - hur man gör en kvittrande kraftmätare... (12 / 19 steg)
Steg 12: programvara
Nu när maskinvaran är klar, vi kommer till den spännande delen: med program som hämtar data från våra mottagare XBee och sparar det till vår dator eller överför det till en databas eller uppdaterar vår twitter-feed eller... vad du vill!
Här är hur det fungerar, XBee inuti den Kill-a-watten hakas upp till två analoga signaler. En är spänning signalen som anger AC spänning Läs. I allmänhet är detta en sinus våg som är 120VAC. En knepig sak att komma ihåg är att 120V är spänningen "RMS" och "sann spänning" är +-170VDC. (Kan du läsa mer om RMS spänning på wikipedia i grunden är det ett sätt att ange hur mycket "genomsnittliga" spänning det är.) Den andra behandlingen är den AC nuvarande läsning. Detta är hur mycket ström dras genom den Kill-a-watten. Om du multiplicerar strömmen av spänning, får du den effekt (i watt) används!
Den XBee Analog/Digital omvandlare ställs in att ta en "ögonblicksbild" av en sinus-cykel i taget. Varje dubbel-provet (spänning och ström) tas 1ms sönder och det tar 17 av dem. Som kan översättas till ett 17ms långa tåg av prover. En cykel av strömförbrukning är 1 / 60Hz lång vilket är 16.6ms. Så fungerar det ganska bra!
Låt oss titta på några exempel på spänning och nuvarande vågformer som XBee ser dem.
Denna första graf är till exempel av en bärbar dator inkopplad. Du ser att det är en växling leverans, och endast drar ström under toppen av spänning kurvan.
Nu kan försöka koppla in en 40W glödlampa. Du kommer att märka att till skillnad från växlingen leverans, nuvarande följer spänningen nästan perfekt. Det beror på att en glödlampa är bara ett motstånd!
Slutligen låter prova klibba mätaren på en dimbar switch. Du ser att spänningen är "hackas" upp, inte längre sinusformad. Och även om nuvarande följer spänningen, dess fortfarande på ganska bra.
XBee skickar rådata till datorn, som i ett python-skript, siffror vad (kalibrerad) spänning och strömstyrka är på varje prov och multiplicerar varje punkt tillsammans för att få de watt som används i denna cykel. Eftersom det finns nästan ingen enhet som ändras power-seder från cykel till cykel, ögonblicksbilden är en god indikator på övergripande makten användning att andra. Sedan skickas en gång var 2 sekunder, en enda ögonblicksbild till mottagaren XBee
Installera python & vänner
Den programvara som talar till XBee är skrivet i python. Jag använde python eftersom dess snabba att utvecklas i, har multi-OS stöder och är ganska populärt med mjukvara och hårdvara hackare. XBees tala över den seriella porten så bokstavligen alla programmeringsspråk kan/skulle kunna användas här. Om du är en programvara nörd och vill använda perl, C, C#, tcl/tk, bearbetning, java, etc. gå för det! Du måste läsa den seriella data och tolka ut paketet men det är inte särskilt svårt.
Men vill de flesta människor bara gå vidare med det och så för dig vi ska gå igenom processen att installera python och bibliotek vi behöver.
1. Ladda ner och installera python 2.5 från http://www.python.org/download/ jag föreslår 2,5 eftersom det verkar vara stabil och väl stöds vid denna tid. Om du använder en annan version kan det finnas frågor
2. Ladda ner och installera pyserial från paketet databasen (detta kommer att låt oss tala till XBee genom den seriella porten)
3. om du kör windows Ladda ner och installera win32file för python 2.5 (detta kommer att lägga till fil stöd)
4. data överför och installera simplejson python biblioteket (detta är hur twitter api gillar att vara talat med)
Nu kan du äntligen Hämta skriptet Wattcher vi kommer att demonstrera här! Vi kommer att ladda ner den till katalogen C:\wattcher , för andra operativsystem kan du naturligtvis ändra denna katalog
Basic konfigurera
Vi har till gör lite stycke av installationen startar, öppna wattcher.py skriptet med en textredigerare och leta upp raden
SERIALPORT = "COM4" # com/serieporten XBee är ansluten till
ändra COM4 till vad den seriella porten som du kommer att ansluta till XBee med heter. Under Fönstren port dess vissa COMx , under linux och mac dess något som /dev/cu.usbserial-xxxx kontrollera /dev/ katalog och/eller dmesg
Spara skriptet med det nya namnet för seriell port
Testa det.
När du har installerat python och utdraget skript till arbetskatalogen, starta en terminal (under linux är detta bara rxvt eller xterm, under mac sin Terminal, under windows, är det en cmd fönster)
Jag ska anta att du kör windows från nu på, det borde inte vara svårt att anpassa instruktionerna för linux/mac när terminal-fönstret är öppet.
Kör kommandot cd C:\wattcher att komma till den plats där du okomprimerade filer. Genom att köra kommandot dir kan du se att du har filerna i katalogen
Kontrollera att din sändare (Kill-a-Watt + Xbee) är inkopplad och blinkar en gång varannan sekund. Kom ihåg att det tar ett tag för sändaren att ladda upp makt och börja överföra. LCD-displayen bör vara tydlig, inte luddig. Se till att det finns ingenting ansluten till Kill-a-Watt, alltför. Vara bör tänd RSSI (röd) LED på mottagaren är ansluten till datorn som anger data tas emot. Inte fortsätta tills det är allt bra att gå.
Nu kör python genom att köra kommandot C:\python25\python.exe wattcher.py
Du borde få en stadig ut ur data. Det första numret är XBee adress från vilken den fått data, efter den beräknade strömförbrukning, wattal används och wattimmar konsumeras sedan senaste data kom. Hurra! Vi har trådlös data!
Kalibrera
Nu när vi har bra data som tas emot, det är dags att justera den. Till exempel det mycket troligt att även utan en apparat eller ljus ansluten till Kill-a-Watt, de script tycker att det är makt som används. Vi behöver kalibrera sensorn så att vi vet var "noll". I Kill-a-Watt finns ett autocalibration system men tyvärr XBee är inte smart nog att göra det på egen hand. Så, vi gör det i skriptet python. Avsluta skriptet genom att skriva in Control-C och köra det igen denna gång som C:\python25\python.exe wattcher.py -d notera den -d som berättar skriptet att skriva ut Avlusningsinformation
Nu kan du se skriften utskriva ut en hel röra av data. Det första segmentet med massor av -1 i det är den raw paketen. Medan dess intressant vill vi titta på den rad som börjar med ampdata:
ampdata: [498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 497, 498, 498, 498]
Nu märker du att siffrorna är ganska mycket alla likadana. Det är för det finns ingenting inkopplad i tweetawatt och så varje 1/60 Hz cykel har en platt linje på "noll". A/D i XBee är 10 bitar, och kommer att returnera värden mellan 0 och 1023. Så, i teorin, om systemet är perfekt värdet på "noll" bör vara 512. Det finns dock en massa små saker som gör systemet ofullkomlig och så noll är bara stänga till 512. I detta fall är "" kalibrering nollpunkten verkligen 498. När dess off där är en "DC offset" till Amp läsningar, som detta diagram visar:
Se hur Amp linjen (grön) är stadig men inte nolla dess vid 0.4 ampere? Det finns en "DC offset" 0.4 ampere
OK, öppna skriptet wattcher.py i en textredigerare.
vrefcalibration = [492, # kalibrering för sensor #0]
492, # kalibrering för sensor #1
489, # kalibrering för sensor #2
492, # kalibrering för sensor #3
501, # kalibrering för sensor #4
493] # osv... ca ((2.4v * (10Ko/14.7Ko)) / 3
Visas den rad som säger # kalibrering för sensor #1? Ändra det till 498
vrefcalibration = [492, # kalibrering för sensor #0]
498, # kalibrering för sensor #1
489, # kalibrering för sensor #2
492, # kalibrering för sensor #3
501, # kalibrering för sensor #4
493] # osv... ca ((2.4v * (10Ko/14.7Ko)) / 3
Spara filen och starta skriptet igen, denna tid utan den -d
Nu ser du att Watt lottningen är 2 w eller mindre, i stället för 40W (som var långt borta!) Anledningen till det är inte 0W är att först och främst, det är lite ljud som vi läser i raderna A/D, för det andra finns det effektuttaget av Kill-a-Watt själv och slutligen XBee inte har en massa prover att arbeta med. Men < 2W är ganska bra med tanke på att alla sensing de är 0-1500W
Notera grafen med kalibrerad sensor:
Se hur Amps linjen är nu vid 0 stadig, det finns ingen DC offset
Loggning av data
Det är trevligt att ha denna data men det skulle vara ännu trevligare om vi kunde lagra den för användning. Tja, det är automatiskt gjort för dig! Du kan ange namnet på loggfilen i skriptet wattcher.py. Som standard är det powerdatalog.csv. Skriptet samlar in data och varje 5 minuter skriver en enda rad i formatet år månad dag, tid, Sensor #, watt för varje sensor. Som ni kan se, är detta ett exempel på en 40W glödlampa glödlampa ansluten ett par timmar. På grund av låg samplingsfrekvens ser du några mindre ändringar i watt inspelad. Dessa data kan lätt importeras direkt till någon kalkylprogram
Tweeting
Slutligen får vi den tweeting delen av den tweet-a-watten. Först öppna upp skriptet wattcher.py och ange
# Twitter användarnamn & lösenord
twitterusername = "användarnamn"
twitterpassword = "lösenord"
till din username och lösenord på twitter. Om du inte har ett kan du göra ett konto på twitter.com .
Sedan kör skriptet som vanligt. Varje 8 timmar (midnatt, 08: 00 och 16: 00) skriptet kommer skickas en twitter med hjälp av Twitter API
Sedan kolla in det på ditt konto: