Stap 1: Initial setup en temperatuur sensor
Cylon.js toevoegen
Dit project gebruikt het kader van de Cylon.js (http://cylonjs.com/)
Cylon.js is een JavaScript-kader voor Robotica, physical computing, en het Internet van dingen. Het maakt het ongelooflijk gemakkelijk opdracht robots en apparaten
Het grootste voordeel van Cylon.js is dat dezelfde code wordt uitgevoerd op verschillende apparaten (Intel Galileo, Arduino, Raspberry Pi, enz.).
Om het te gebruiken, voeg de volgende afhankelijkheden op package.json
"cylon": "1.2.0", "cylon-intel-iot": "0.8.0", "cylon-gpio": "0.27.0", "cylon-i2c": "0.23.0"<br>
En op main.js
var cylon = require("cylon"); cylon.robot({ name: "floodDetection", connections: { galileo: { adaptor: "intel-iot" }
},
devices: {
},
work: function() { } });<br>
Inpluggen van de temperatuursensor
Voordat we beginnen met de ontwikkeling van de functie voor het detecteren van overstroming, laten we beginnen met de temperatuursensor.
Steek de stekker in haven A2 en voer vervolgens de volgende code:
var cylon = require("cylon"); cylon.robot({ name: "floodDetection",
verbindingen: {galileo: {adapter: "intel-iot"} connections: { galileo: { adaptor: "intel-iot" } },
devices: { temp: { driver: "upm-grovetemp", pin: 2, connection: "galileo" }, }, Temp: {stuurprogramma: "upm-grovetemp", pin: 2, verbinding: "galileo" debugValue: function(message, value, status) { console.log(new Date(), message + " = " + value + " [" + status + "]"); },
debugValue: functie (bericht, waarde, status) {console.log (nieuwe Date(), bericht "=" + waarde + "[" + status + "]"); processBuffer: function(/*Value reported by the sensor*/ currentValue, /*Array*/ buffer, /*Context*/ that) { // Initialize buffer if null if (!buffer.values) { buffer.values = []; }; // Add currentValue to buffer buffer.values.push(currentValue); // Check size of buffer. If it has reached // its buffer.MAX_SIZE, then take some action if (buffer.values.length == buffer.MAX_SIZE) { // Get average value. This value is gonna be used // to trigger an action. var sumOfAllValues = 0; buffer.values.forEach(function(oldValue) { sumOfAllValues += oldValue; }); var avgOfAllValues = (sumOfAllValues / buffer.MAX_SIZE); // The action itself buffer.action(that, avgOfAllValues); //Reset buffer buffer.values = null; }; return buffer; },
processBuffer: functie (/ * waarde gemeld door de sensor * / currentValue, / * Array * / buffer / * Context * / dat) {/ / buffer initialiseren als null als (! buffer.values) {buffer.values = [];}; / / Add currentValue om buffer buffer.values.push(currentValue); / / controleert u de grootte van de buffer. Als het heeft bereikt / / de buffer. Maximumomvang, dan sommige actie ondernemen als (buffer.values.length == buffer. Maximumomvang) {/ / Get gemiddelde waarde. Deze waarde gaat worden gebruikt / / activeren van een actie. var sumOfAllValues = 0; buffer.values.forEach(function(oldValue) {sumOfAllValues += oldValue;}); var avgOfAllValues = (sumOfAllValues / buffer. MAXIMUMOMVANG); De actie zelf buffer.action (, avgOfAllValues); Reset buffer buffer.values = null; }; retourneren van buffer; work: function() { var that = this;
var temperatureBuffer = { MAX_SIZE: 5, data: null, action: function(that, avgValue) { that.debugValue("temperature", avgValue); }, };
var temperatureBuffer = {maximumomvang: 5, gegevens: null, actie: functie (dat avgValue) {that.debugValue ("temperatuur", avgValue); setInterval(function() { that.temperateBuffer = that.processBuffer(that.temp.value(), temperatureBuffer, that); }, 1000); } });<br>
setInterval(function() {that.temperateBuffer = that.processBuffer(that.temp.value(), temperatureBuffer, die); devices: { // ... moisture: { driver: 'analog-sensor', pin: 0 }, led: { driver: "led", pin: 8, connection: "galileo" }, screen: { driver: "upm-jhd1313m1", connection: "galileo" } },
De output moet de temperatuur (Celsius) elke 5 seconden weergegeven.
Gebufferde waarden
De waarde van de temperatuur gemeld door de sensor is vastgelegd per seconde en zet in een buffer die is gewijd aan de waarden van deze sensor. Deze buffer wordt gecontroleerd door de methode processBuffer, die als parameters (1) de huidige waarde van een bepaalde sensor, (2) het voorwerp van de buffer van deze sensor en (3) de variabele 'dat'.
De buffer-object (Zie temperatureBuffer) moet ten minste beschikken over:
- Maximumomvang - de maximale grootte van de buffer;
- gegevens - een matrix met waarden die zijn gemeld door de sensor;
- actie - Javascript-functie geactiveerd door processBuffer;
De methode bufferedReader zal stapelen de laatste waarden van de maximumomvang gemeld door een bepaalde sensor. Wanneer de matrixgrootte 'gegevens' gelijk aan de maximumomvang is, berekent deze methode de gemiddelde waarde van de waarden in deze array. Vervolgens de functie doorgegeven als parameter 'actie' zal worden uitgevoerd met behulp van deze gemiddelde waarde en de variabele 'gegevens' zal worden ingesteld op null.
Het doel van deze buffer is discrepantie waarden voorkomen.
Op de bovenstaande code, de 'actie' functie zal gewoon de uitgang van de gemiddelde temperatuur. Bij de volgende stappen, zal deze functie meer nuttig zijn.