Stap 12: Software
Nu dat de hardware voltooid is, komen we bij het leukste deel: uitvoeren van de software die de gegevens worden opgehaald uit onze ontvanger XBee en opgeslagen in onze computer of upload het naar een database of updates van onze twitter-feed of... wat je zou willen!
Hier is hoe het werkt, de XBee binnen de Kill-per-Watt maximaal twee analoge signalen wordt vastgehaakt. Een is het signaal van de spanning waarmee wordt aangegeven de AC spanning lezen. In het algemeen is dit een sinusgolf thats 120VAC. Een lastig ding om te onthouden is dat 120V de spanning 'RMS is' en de 'echte spanning' +-170VDC is. (u kunt meer lezen over de RMS spanning op wikipedia fundamenteel is het een manier om aan te geven hoeveel 'gemiddelde' spanning er.) De tweede lezing is de AC huidige lezen. Dit is hoeveel stroom wordt getrokken door de Kill-per-Watt. Als u de huidige met de spanning vermenigvuldigen, krijg je het vermogen (in watt) gebruikt!
Van de XBee analoog/digitaal converter is ingesteld op een ' momentopname ' van een sinus-cyclus op een moment. Elk dubbel-monster (spanning en stroom) 1ms is gedemonteerd en duurt 17 van hen. Dat betekent een lange trein van de 17ms van de monsters. Een cyclus van stroomverbruik is 1 / 60Hz lange oftewel 16.6ms. Dus werkt het vrij goed!
Laten we enkele voorbeelden van spanning en huidige golfvormen zoals de XBee ze ziet.
Deze eerste grafiek is een voorbeeld van een laptop aangesloten. U ziet dat het een switch levering, en alleen macht tijdens de piek van de curve van de spanning trekt.
Laat nu proberen aan te sluiten in een 40W gloeilamp. U zult merken dat in tegenstelling tot de switch levering, de huidige de spanning bijna perfect volgt. Dat is omdat een gloeilamp is alleen een weerstand!
Tot slot laat proberen de meter op een dimbare switch steken. U zult zien dat de spanning '', niet langer sinusvormige gehakt is. En hoewel de huidige de spanning volgt, zijn nog steeds vrij goed bijpassende.
De XBee stuurt de onbewerkte gegevens naar de computer die in een python-script, cijfers uit wat de (geijkte) spanning en stroomsterkte is bij elk monster en vermenigvuldigt elk punt samen om te krijgen de watt gebruikt in die cyclus. Aangezien er bijna geen apparaat dat de macht-usages van cyclus tot cyclus verandert, de momentopname is een goede indicator van de totale stroomverbruik dat tweede. Dan wordt eens om de 2 seconden, een enkele momentopname verzonden naar de ontvanger XBee
Installeer python & vrienden
De software die tegen de XBee praat is geschreven in python. Ik gebruikte python omdat haar snel te ontwikkelen, heeft engineeringgroep ondersteunen en is vrij populair met software en hardware hackers. De XBees praten via de seriële poort zo letterlijk dat elke programmeertaal kan/kan hier worden gebruikt. Als je een geek software en wilt gebruiken perl, C, C#, tcl/tk, verwerking, java, etc. go for it! Je moet de seriële gegevens lezen en parseren van het pakket, maar zijn niet bijzonder moeilijk.
Echter wil de meeste mensen voortmaken , en dus voor u gaan we door het proces van het installeren van de python en de bibliotheken die we nodig hebben.
1. download en installeer python 2.5 van http://www.python.org/download/ stel ik 2,5 omdat dat lijkt te zijn stabiel en goed ondersteund op dit moment. Als u een andere versie gebruikt kunnen er problemen
2. download en installeer pyserial uit het pakket repository (dit zal laten praten met de XBee via de seriële poort)
3. Als u werkt met windows downloaden en installeren win32file voor python 2.5 (dit zal toevoegen bestandsondersteuning)
4. download en installeer de simplejson python bibliotheek (dit is hoe de twitter api graag worden gesproken)
Nu kunt u eindelijk De Wattcher script downloaden die zullen we hier laten zien! We gaan om het te downloaden naar de C:\wattcher directory, voor andere OS's kunt u natuurlijk deze map wijzigen
Basic configureren
We zullen moeten doen een beetje van setup te starten, open te stellen het wattcher.py script met een teksteditor en zoek de regel
SERIALPORT = "COM4" # de com/seriële poort de XBee is aangesloten op
omzetten in COM4 wat de seriële poort die u worden, de XBee met verbonden zal heet. Onder windows poort zijn sommige COMx , onder linux en mac zijn iets zoals /dev/cu.usbserial-xxxx de/dev / directory en/of de dmesg controleren
Sla het script met de nieuwe naam van de seriële poort
Test het uit
Zodra u hebt geïnstalleerd van de python en de scripts hebt uitgepakt naar uw werkmap, start een Terminal (onder linux is dit gewoon rxvt of xterm, onder mac de Terminal, onder windows, het is een cmd -venster)
Ik ga ervan uit u windows van nu af aan, het moet niet moeilijk om de instructies aan linux/mac aan te passen zodra het terminal-venster geopend is.
Voer de opdracht cd C:\wattcher om naar de plaats waar u de bestanden ongecomprimeerd. Door het uitvoeren van de opdracht dir kunt u zien dat u de bestanden in de map hebt
Zorg ervoor dat uw zender (Kill-per-Watt + Xbee) is aangesloten, en om de 2 seconden knipperen. Vergeet niet dat het duurt een tijdje voor de zender opladen macht te beginnen met verzenden. De LCD display moet duidelijk, geen fuzzy. Zorg ervoor dat er niets aangesloten op de Kill-per-Watt, ook. De RSSI (rood) LED op de ontvanger aangesloten op de computer moet worden aangestoken met vermelding van gegevens wordt ontvangen. Niet totdat dat is allemaal goed te gaan.
Python nu worden uitgevoerd door het uitvoeren van de opdracht C:\python25\python.exe wattcher.py
Moet je een constante print uit gegevens. Het eerste getal is de XBee adres waarvan het gegevens ontvangen, hier volgt de geschatte huidige loting, vermogen gebruikt en de watturen geconsumeerd sinds de laatste gegevens. Hooray! Wij hebben draadloze data!
Kalibreren
Nu dat we goede gegevens worden ontvangen hebben, zijn tijd om te tweaken het. Bijvoorbeeld, zijn zeer waarschijnlijk dat zelfs zonder een toestel- of licht aangesloten op de Kill-per-Watt, de script-denkt dat er stroom wordt gebruikt. We moet kalibreren de sensor zodat we weten waar 'nul' is. In de Kill-per-Watt is er een zelfdiagnose systeem maar helaas de XBee is niet slim genoeg om het te doen op zijn eigen. Dus, we doen het in de python-script. Stoppen met het script door te typen in CTRL-C en voer het ook dit keer, zoals C:\python25\python.exe wattcher.py -d nota de -d die het script te printen foutopsporingsinformatie vertelt
Nu kunt u het script afdrukken uit een hele puinhoop van gegevens. Het eerste stuk met veel -1 erin is het ruwe pakket. Terwijl zijn interessant willen we kijken naar de regel die met ampdata begint:
ampdata: [498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 497, 498, 498, 498]
Nu zult u merken dat de nummers vrijwel allemaal hetzelfde zijn. Dat is omdat er dat niets aangesloten op de tweetawatt en dus elke cyclus 1/60 Hz heeft een platte lijn op 'nul'. De A/D in de XBee is 10 bits, en waarden tussen 0 en 1023 zal terugkeren. Dus, in theorie, als het systeem perfect is de waarde op 'nul' moet 512. Echter, er zijn een heleboel kleine dingen die maken het systeem onvolmaakt en dus nul is alleen sluiten aan 512. In dit geval is het 'nul' kalibratiepunt echt 498. Wanneer zijn weg er is een 'DC-offset' de Amp lezingen, zoals uit deze grafiek blijkt:
Zie hoe de Amp-lijn (groen) is stabiel maar zijn niet op nul, zijn bij 0,4 ampère? Er is een 'DC-offset' van 0,4 ampère
OK, het wattcher.py script in een teksteditor openen.
vrefcalibration = [492, # kalibratie voor sensor #0]
492, # kalibratie voor sensor #1
489, # kalibratie voor sensor #2
492, # kalibratie voor sensor #3
501, # kalibratie voor sensor #4
493] # enz... approx ((2.4v * (10Ko/14.7Ko)) / 3
Zie de lijn die zegt van kalibratie voor sensor #1 #? Verandering die tot 498
vrefcalibration = [492, # kalibratie voor sensor #0]
498, # kalibratie voor sensor #1
489, # kalibratie voor sensor #2
492, # kalibratie voor sensor #3
501, # kalibratie voor sensor #4
493] # enz... approx ((2.4v * (10Ko/14.7Ko)) / 3
Sla het bestand op en start het script opnieuw, dit tijd zonder de -d
Nu u zien zult dat de loting Watt 2W of minder, in plaats van 40W (die was weg!) De reden zijn niet 0W is dat, eerst, er is een beetje ruis die we reading in de A/D-lijnen, ten tweede er stroomverbruik door de Kill-per-Watt zelf en ten slotte de XBee hoeft niet een heleboel monsters om mee te werken. Echter < 2W is vrij goed overweegt dat het volledige sensing bereik 0-1500W is
Opmerking de grafiek met de geijkte sensor:
Zie hoe de versterkers-lijn is nu 0 gestage, is er geen DC-offset
Logboekgegevens
Zijn leuk om te hebben deze gegevens, maar het zou nog mooier zijn als wij kon opslaan voor gebruik. Nou, dat automatisch voor u wordt gedaan! In het wattcher.py-script, kunt u de naam van het logboekbestand instellen. Standaard is dit powerdatalog.csv. Het script verzamelt gegevens en elke 5 minuten schrijft één regel in de notatie jaar-maand-dag tijd, Sensor #, watt voor elke sensor. Zoals u zien kunt, is dit een voorbeeld van een 40W gloeilamp gloeilamp aangesloten voor een paar uur. Vanwege de lage samplefrequentie ziet u dat enkele kleine variaties in de watt opgenomen. Deze gegevens kan gemakkelijk worden ingevoerd rechtstreeks naar een spreadsheetprogramma
Tweeting
Ten slotte komen we bij het tweeting deel van de tweet-a-watt. Eerst het wattcher.py script openstellen en stellen
# Twitter gebruikersnaam & wachtwoord
twitterusername = "gebruikersnaam"
twitterpassword = "wachtwoord"
om uw gebruikersnaam en wachtwoord op twitter. Als u geen één hebt, kunt u een account op twitter.com maken.
Vervolgens het script uitvoeren zoals gebruikelijk. Elke 8 uur (middernacht, 8 uur en 4 uur) het script verstuurd een twitter met behulp van de Twitter API
Dan check it out op uw account: