Vertical Hydroponic Farm (9 / 13 stap)

Stap 9: Automatisering voortgezet: Intel XDK IoT Edition


Wij gebruikt van Intel XDK IoT Edition. U kunt uw code te schrijven in JavaScript Node.js bibliotheken gebruiken.

De software kan worden gevonden op de Intel XDK IoT Edition, zijn er veel documenten over hoe aan de slag met de IDE.

Code:

/ * jslint knooppunt: true, vars:true, bitsgewijze: true, unparam:true * //*jshint ongebruikte: ware * / / * wereldwijde ** een eenvoudige node.js toepassing bestemd te knipperen de onboard LED op de Intel gebaseerd ontwikkelborden zoals de Intel(R) Galileo en Edison met Arduino breakout board. MRAA - lage niveau skelet Library for Communication op GNU/Linux platforms bibliotheek in C/C++ interface met Galileo en andere Intel-platforms, in een gestructureerde en sane API met poort nanmes/nummering, die overeenkomen met planken & met bindingen aan javascript & python. Stappen voor het installeren van MRAA & UPM bibliotheek op Intel IoT Platform met IoTDevKit Linux * afbeelding gebruiken een ssh client: 1. echo "src maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf 2. and update 3
. and upgradeArticle: https://software.intel.com/en-us/html5/articles/intel-xdk-iot-edition-nodejs-templates * / var mraa = require('mraa'); vereisen mraa / / UDP opties var = {host: '127.0.0.1', poort: 41234}; console.log ('MRAA versie: "+ mraa.getVersion()); de mraa-versie naar de Intel XDK console var dgram schrijven = require('dgram'); var client = dgram.createSocket('udp4'); aanvraag van de var = vereisen ('aanvragen'); var lcdDisplayTimer = 0; var lichten = nieuwe mraa. GPIO(3); LED verslaafd tot digitale 13 (of ingebouwde pins op Galileo Gen2) lights.dir (mraa. DIR_OUT); Stel de gpio richting aan output var ledState = true; Boolean te houden van de stand van Led var groveSensor = require('jsupm_grove'); var LCD = require('jsupm_i2clcd'); var myLcd = nieuwe LCD.Jhd1313m1 (0, 0x3E, 0x62); var rotarySensor = nieuwe mraa. AIO(1); var myButton = nieuwe mraa. GPIO(6); var servoModule = vereisen ("jsupm_servo"); //var digitalLightSensor = require("jsupm_tsl2561"); var lightSensor = new digitalLightSensor.TSL2561 (); var lightSensor = require('jsupm_grove'); var licht = nieuwe groveSensor.GroveLight(0); var lightLevel = 0; var lightLowCnt = 0; var lightTimeRemaining = 960; minuten in 16 uur var lightDay = 1440; minuten in 24-uurs dag var lightsState = 0; var waterSensor = require('jsupm_grovewater'); var waterpeil = nieuwe waterSensor.GroveWater(2); var waterLeverTimer = 0; var waterLevelValue = 0; var tempSensor = nieuwe groveSensor.GroveTemp(3); var tempBase = 23; doel temperatuur var tempTheshold = 25; Probeer te koelen var tempAlarm = 27; te warm geluid alarm var louverOpened = 160; var louverClosed = 0; var tempValue = 0; var circulationPump = nieuwe mraa. GPIO(4); circulationPump.dir (mraa. DIR_OUT); Stel de gpio richting aan output var circulationPumpState = 0; var circulationPumpTimer = 0; var CIRCULATION_PUMP_TIME_ON = 1; pomp tijd op var CIRCULATION_PUMP_TIME_OFF = 1; pomp van tijd af / / instantiëren Servo module op digitale poort 5 var servo = nieuwe servoModule.Servo(5); servo.setMinPulseWidth(600); servo.setMaxPulseWidth(2200) var ecSensor = nieuwe mraa. AIO(1); var EC_reading = 0; var ecDoser = nieuwe mraa. GPIO(6); ecDoser.dir (mraa. DIR_OUT); Stel de gpio richting aan output var ecDoserState = 0; var ecDoserTimer = 0; var ecDoserActivate = false; var ecSampleTimer = 0; var EC_DOSER_INTERVAL = 2; seconden uitvoeren doser var EC_SAMPLE_INTERVAL = 1; minuten moet worden gewacht voordat de EG-lezing te gebruiken om te bepalen Doseer var EC_LIMIT = 1500; dosis wanneer onder deze waarde minus EC_Band totdat het bereikt dit niveau var EC_BAND = 200; var EC_MS = 0; EG micro/antwoord fanCooling = nieuwe mraa. GPIO(7); fanCooling.dir (mraa. DIR_OUT); Stel de gpio richting aan output var fanCoolingState = 0; var alarm = nieuwe mraa. GPIO(8); alarm.dir (mraa. DIR_OUT); Stel de gpio richting aan output var alarmState = 0; var logTimer = 1; var localWeather = "Bewolkt"; var url = 'http://api.wunderground.com/api/df5bd75178df2c09/conditions/q/RI/Providence.json'; var weatherTimer = 1; wacht 1 minuut voordat de eerste aanroepgegevens var = [{sensorName: "licht", sensorType: "light.v1.0"}, {sensorName: "temperatuur", / / air temp sensorType: "temperature.v1.0"}]; / * data.forEach(function(item) {registerNewSensor (item.sensorName, item.sensorType, functie () {})}); * / periodicActivity(); Bel de periodicActivity functionfunction periodicActivity() {als (checkTimer(weatherTimer)) {getWeather(); weatherTimer = setMinutesTimer(240);} / / elke 4 uur growLights(); tempControl(); checkECDoser(); waterEC(); als (checkTimer(waterLeverTimer)) {waterCirculation(); waterLeverTimer = setSecondsTimer(1);} als (checkTimer(lcdDisplayTimer)) {lcdDisplay(); lcdDisplayTimer = setSecondsTimer(1);} als (checkTimer(logTimer)) {sendToCloud(); logTimer = setMinutesTimer(1);} setTimeout(periodicActivity,500); //call de aangegeven functie na 1 seconde (1000 milliseconden)} function lcdDisplay() {var Deggendorf = 0; myLcd.clear(); myLcd.setCursor(0,0); myLcd.write('Cond : "+ localWeather); myLcd.setCursor(1,0); myLcd.write (' EG: "+ EC_MS); myLcd.setCursor(1,8); Als (lightLevel < 100) {Deggendorf = 'L';} else if (lightLevel < 130) {Deggendorf = ben ';} anders {Deggendorf = "H";} myLcd.write ('L:' + Deggendorf); myLcd.setCursor(1,12); myLcd.write ('T: "+ tempSensor.value()); } / / lcdDisplayfunction getWeather() {verzoek ({url: url, json: valse}, functie (error fout,, reactie,, lichaam) {als (! fout & & response.statusCode === 200) {/ / console.log(response.body); var foo = response.body; / / console.log(foo.substr(foo.indexOf('"weather":"') + 11,10)); localWeather = foo.substr(foo.indexOf('"weather":"') + 11,10);}});} getWeatherfunction waterEC() {EC_reading = ecSensor.read(); / / Lees de analoge ingangsspanning / / 0 tot 1024 = 0 tot 5v / / 204 micro/S per volt EC_MS = (EC_reading * 4.88).toFixed(); / / 5000 micro/S / 1024 = 4.88 if (EC_MS < (EC_LIMIT - EC_BAND)) {/ / buiten aanvaardbaar bereik als (checkTimer(ecSampleTimer)) {/ / tijd opnieuw Doseer ecSampleTimer = 0; / / console.log ('--ecDoserState ' + ecDoserState); als (ecDoserState != 1) {/ / als doser niet op ecDoserActivate zet = true, ecSampleTimer = setMinutesTimer(EC_SAMPLE_INTERVAL); / / reset tijd tot volgende monster - dosis console.log ('dosis voor EG");}} console.log ('lager dan' + (EC_LIMIT - EC_BAND)); } / / console.log ('ecSampleTimer' + ecSampleTimer); console.log (' EG = "+ EC_MS);} waterEC () functie waterCirculation() {waterLevelValue = waterLevel.isWet(); als (waterLevelValue == true) {als (checkTimer(circulationPumpTimer)) {als (circulationPumpState == 1) {circulationPumpState = 0; circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_OFF);} anders {circulationPumpState = 1; circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_ON);} circulationPump.write(circulationPumpState);}} anders {console.log ("laag water"); circulationPumpTimer = 0; circulationPumpState = 0; circulationPump.write(circulationPumpState);} / / console.log (' pomp = "+ circulationPumpState);} / / waterCirculationfunction checkECDoser() {als (ecDoserState == 0 & & ecDoserActivate == true) / / indien niet reeds op en behoeften op {ecDoserTimer = setSecondsTimer(EC_DOSER_INTERVAL); ecDoserState = 1; ecDoser.write(ecDoserState); console.log ('EG Doser is' + ecDoserState + 'voor' + EC_DOSER_INTERVAL + 'seconden'); } Als (checkTimer(ecDoserTimer)) {/ / timer ging af ecDoserActivate = false; ecDoserState = 0; / / schakelen doser uit ecDoser.write(ecDoserState); / / console.log ('EG Doser Timer Fired");} / / console.log ('ecDoserTimer' + ecDoserTimer); } / / checkECDoserfunction tempControl() {/ / wanneer temp hoog; inschakelen fans, open roosters / / als temp boven theshold, blijven op tot verlaagd tot basis temp / / zoemer op temp tempValue alarm inschakelen = tempSensor.value(); / / console.log ("temp is =" + tempValue); als (tempValue > tempTheshold) {fanCoolingState = 1; servo.setAngle(louverOpened); / / console.log ('temp heet');} anders als (tempValue < = tempBase) {fanCoolingState = 0; servo.setAngle(louverClosed); / / console.log ('temp normaal");} fanCooling.write(fanCoolingState); als (tempValue > = tempAlarm) {alarmState = alarmState? 0:1; alarm.write(alarmState);} anders {alarm.write(0); alarmState = 0;} / / console.log ("alarm is ="+ alarmState);} / / tempControl () functie growLights() / / genaamd elke minuut {//lightLevel = lightSensor.getLux(); lightLevel = light.value(); if (lightLevel < 100 & & lightTimeRemaining > 0) {als (lightLowCnt < 2) {lightLowCnt ++;} anders {lightsState = 1; lightLowCnt = 0;}} anders {lightsState = 0; lightLowCnt = 0;} lights.write(lightsState) lightTimeRemaining--; lightDay--; als (lightDay < 1) {lightDay = 1440; lightRemaining = 640;} / / nieuwe dag 24 hr met 16 uren van licht als (lightLowCnt > 0) console.log ('lightLow: ' + lightLowCnt); console.log('LightLevel : "+ lightLevel); } / / end growLightsfunction setSecondsTimer(waitTime) {var endTime; var d = nieuwe Date(); endTime = d.getTime() + (waitTime * 1000); / / terug omzetten in milliseconden van seconden retour endTime;} / / setSecondsTimerfunction setMinutesTimer(waitTime) {var endTime = 0; var d = nieuwe Date(); endTime = d.getTime() + (waitTime * 60000); / / terug omzetten in milliseconden van minuten terugkeer endTime;} / / setMinutesTimerfunction checkTimer(timer) {var d = nieuwe Date(); / / console.log ("huidige tijd" + d.getTime() + ' timer =' + timer); als (d.getTime() > timer) {return true;} anders {geretourneerd als false ;}} / / checkTimerfunction registerNewSensor (naam type, callback) {var msg = JSON.stringify ({n: naam, t: type}); var sentMsg = new Buffer(msg); console.log ("registratie sensor:" + sentMsg); client.send (sentMsg, 0, sentMsg.length, options.port, options.host, callback); }; sendObservation functioneren (naam, waarde, op) {var msg = JSON.stringify ({n: naam, v: waarde, op: op}); var sentMsg = new Buffer(msg); console.log ("verzenden observatie:" + sentMsg); client.send (sentMsg, 0, sentMsg.length, options.port, options.host); }; functioneren sendToCloud() {//sendObservation ("light", lightLevel, nieuwe Date().getTime()); //sendObservation ("temperatuur", tempValue, nieuwe Date().getTime()); //sendObservation ("waterpomp", circulationPumpState, nieuwe Date().getTime()); //sendObservation ("ecSensor", EC_MS, nieuwe Date().getTime()); / / sendObservation ("ecDoser", ecDoserState, nieuwe Date().getTime()); //sendObservation ("coolingFan", fanCoolingState, nieuwe Date().getTime()); //sendObservation ("waterpeil", waterLevelValue, nieuwe Date().getTime()); //sendObservation ("growLights", lightsState, nieuwe Date().getTime()); //sendObservation ("roosters", fanCoolingState, nieuwe Date().getTime());} //sendToCloud

Gerelateerde Artikelen

IKEA Hack Hydroponic System

IKEA Hack Hydroponic System

een eenvoudig te bouwen ebb en stromen van hydrocultuur systeem (meestal) gemaakt van IKEA containers.Eb en vloed hydroponic systemen zijn een geweldige manier om aan de slag in hydrocultuur en maak een prachtig educatief project voor kinderen.  Niet
Eenvoudige Hydroponic aardbeien

Eenvoudige Hydroponic aardbeien

bekroonde hydrocultuur aardbeien. Gemaakt als een schoolproject. Eenvoudig, gemakkelijk te verzorgen. Perfect voor kleine hobbiests, wetenschap beurzen, of als een leermiddel. Kan worden geconverteerd naar een grotere productie-systeem te maken.Stap
Hydroponic ideas

Hydroponic ideas

Hoi allemaalIk heb niet gepubliceerd in de zoveel tijd als ik hebben het ontwerpen van nieuwe systemen voor hyroponic.Dit instructable is niet hoe om de systemen te bouwen, maar om te laten zien wat kan worden gedaan met een klein beetje inzicht en e
Mini Hydroponic beluchting toren

Mini Hydroponic beluchting toren

Ik bouwde een zelf-drenken van broeikasgassen een paar maanden geleden. het zelf-drenken systeem heeft gewerkt OK voor het grootste deel... Maar... het ontwikkelt enkele vervelende groene slime in het water, wegens gebrek aan zuurstof en verkeer. Mij
Mijn eerste Hydroponic Plant (Beginner's Guide)

Mijn eerste Hydroponic Plant (Beginner's Guide)

Start uw allereerste miniatuur hydroponic plant! Een aanbevolen gids voor beginners die beide houdt van planten en technologie. Ik ga u laten zien hoe een in minder dan 15 minuten, uit huishoudelijke materialen te maken! Onze kleine "hydrocultuur sys
Monarch Butterfly Farm

Monarch Butterfly Farm

Enkele jaren geleden mijn man en ik waren op zoek naar een vrijwilliger kans. De club van de vrienden van de lokale State Park aangekondigd hun nacht van de vergadering in het papier. We woonden en lid zijn geworden. Een van de leden was de Lady Butt
Farmer's ultieme Paintball!

Farmer's ultieme Paintball!

Farmer's ultieme Paintball heeft vele verschillende versies, zodat wij u onze meest populair is tonen zullen.Dit is de Farmer's ultieme Paintball V.2 Capture the Flag, de meest populaire van Farmer's ultieme Paintball.Dit spel wordt gespeeld in een c
Hydroponic Tuin van de Drip voor groenten, kruiden of bloemen

Hydroponic Tuin van de Drip voor groenten, kruiden of bloemen

de volgende afbeelding ziet u de twee hydrocultuur drip systemen ik gebouwd die vallen onder dit instructable. Het prototype-systeem werd gebouwd ongeveer 3 weken voorafgaand aan het nemen van de foto. Alle planten die momenteel woonachtig in het pro
Living Art - Ant Farm

Living Art - Ant Farm

Deze ant farm is zowel interactief en educatief! We dit te binden in elementen uit onze Milieukunde klasse, evenals Gemeenschapsdienstverlening gemaakt. De boerderij maakt deel uit van ons centrum van de opvang, waar de kinderen kunnen communiceren,
Amazing Ant Farm

Amazing Ant Farm

in overeenstemming met mijn andere Instructable, ik had een idee voor een project dat andere mensen had gedaan, maar wilde het beter doen. Hier is een goedkoop, makkelijk te maken, zeer duurzaam ant farm voor uw ant plezier kijken. Het lijkt niet de
Frisdrank fles Ant Farm

Frisdrank fles Ant Farm

ooit wilde een ant farm?  Ant boerderijen zijn onderhoudend, maar onderwijs – het is fascinerend om te zien van de kleine mieren als ze gaan over hun drukke leven.  Maar winkel koopt ant boerderijen zijn vaak duur, en meestal beperkt in omvang.  Wilt
Ant Farm

Ant Farm

ik zal u tonen de stappen op ant farm makenStap 1: De Items die nodig zijn voor het ambachtelijke van dit: -vissentank (kom)-Vaseline-zand of vuil-ant koningin en ant werknemers-decoraties als u wilt-ook voedsel voor de mieren zoals restjes heb jeTot
Hoe te uw oom Milton ant farm klaar

Hoe te uw oom Milton ant farm klaar

gemakkelijk kan zijn, wellicht niet, maar ik ga je laten zien mijn gedetailleerde beschrijving van uw ant farm klaar.Dus, ik heb deze ant farm voor Kerstmis, maar ik kon niet krijgen mieren tot mei tot en met juni, dus ik had gestuurd voor hen rond h
IKEA HACK modulaire STAPELBARE HYDROPONIC venster tuin

IKEA HACK modulaire STAPELBARE HYDROPONIC venster tuin

Deze modulaire hydroponic tuin kunt u uw systeem aanpassen door te kiezen voor de componenten volgens uw persoonlijke wensen. U kunt zelf bepalen of groeien uit het raster met de Kratky modules modules waarvoor elektriciteit zoals de luchtpomp en lic