Das Internet der Dinge (4)

Die Software wurde Stück für Stück entwickelt. Angefangen mit Änderungen am blinkled.js. Sie besteht im wesentlichen aus einer Schleife, die den Analogeingang ain0 abfragt, gegen eine Schwellwert vergleicht und bei einem Pegelübergang eine Zähler inkrementiert. Aus dem Zähler lässt sich dann der verbrauchte Strom errechnen. Wie viele Umdrehungen der Scheibe wie viel kWh bedeuten, dass steht meist auf dem Zähler. Bei mir sind es 75 Umdrehungen pro Kilowattstunde.

Der Wert wird dann alle 10 Minuten in eine Datei geschrieben.

Später wurde noch ein Tiefpassfilter in Software hinzugefügt und ein HTTP Server, der die Daten mittels flot in einem Diagramm darstellt.

Hier die strom.js, die die Hauptarbeit erledigt:

var bb = require('./bonescript'); var fs = require("fs"); var ledPin3 = bone.USR3; var ain0 = 0; var level = 2000; var DELAY = 10; var dataFile = 'strom/data/values-'; var state = false; var counter = 0; var startkWh = 248623.44; var minutes10 = Math.floor(new Date().getTime() / (1000 * 60 * 10)); var FILTER_STRENGH = 3; var filterAcc = 0; setup = function() { pinMode(ledPin3, OUTPUT); var server = new bb.Server(8888, "strom"); server.begin(); }; loop = function() { var value = parseInt(analogRead(ain0).toString('ascii'), 10); //low pass filter filterAcc = filterAcc - (filterAcc >> FILTER_STRENGH) + value; value = filterAcc >> FILTER_STRENGH; if(value < level) { digitalWrite(ledPin3, HIGH); if(!state) { //count counter++; } state = true; } else { digitalWrite(ledPin3, LOW); state = false; } var kWh = Math.round((startkWh * 100) + 40 * counter / 30) / 100; var currDate = new Date(); var currMinutes10 = Math.floor(currDate.getTime() / (1000 * 60 * 10)); if(minutes10 != currMinutes10) { //speichern var month = currDate.getUTCMonth() + 1; if(month < 10) { month = '0' + month; } var day = currDate.getUTCDate(); if(day < 10) { day = '0' + day; } var hours = currDate ...Zum vollständigen Artikel

Cookies helfen bei der Bereitstellung unserer Dienste. Durch die Nutzung erklären Sie sich mit der Cookie-Setzung einverstanden. Mehr OK