Vertical Hydroponic Farm (9 / 13 steg)

Steg 9: Automation fortsatte: Intel XDK IoT Edition



Vi utnyttjade Intels XDK IoT Edition. Det tillåter dig att skriva din kod i JavaScript med Node.js bibliotek.

Programvaran finns på Intel XDK IoT Edition, det finns många dokument om hur du kommer igång med IDE.

Kod:

/ * jslint nod: true, vars:true, bitvis: true, unparam:true * /
/ * jshint oanvända: sant * /
/ * globala *
*
En enkel node.js ansökan avsett att blinka ombord LED på Intel baserad utveckling styrelser som Intel(R) Galileo och Edison med Arduino breakout ombord.
MRAA - låg nivå skelett bibliotek för att kommunicera på GNU/Linux-plattformar
Biblioteket i C/C++ gränssnitt med Galileo & andra Intel-plattformar, i en strukturerad och sane API med port nanmes/numrering som matchar styrelser & med bindningar till javascript & python.
Steg för att installera MRAA & UPM bibliotek på Intel IoT plattform med IoTDevKit Linux * bild
Använda en ssh klient:
1. echo "src maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf
2. opkg uppdatering
3. opkg uppgraderingen
Artikel: https://software.intel.com/en-us/html5/articles/intel-xdk-iot-edition-nodejs-templates
*/
var mraa = require('mraa'); kräver mraa
UDP-alternativ
var alternativ = {
värd: '127.0.0.1',
Port: 41234
};
Console.log ("MRAA Version:" + mraa.getVersion()); skriva den mraa versionen till Intel XDK konsolen
var dgram = require('dgram');
var kund = dgram.createSocket('udp4');
var begäran = require('request');
var lcdDisplayTimer = 0;
var ljus = nya mraa. Gpio(3); LED hooked upp till digital stift 13 (eller inbyggda stift på Galileo Gen2)
Lights.dir (mraa. DIR_OUT); Ange gpio riktningen till utgång
var ledState = sant; Boolean att hålla tillståndet för Led
var groveSensor = require('jsupm_grove');
var LCD = require('jsupm_i2clcd');
var myLcd = ny LCD.Jhd1313m1 (0, 0x3E, 0x62);
var rotarySensor = ny mraa. AIO(1);
var myButton = nya mraa. Gpio(6);
var servoModule = require("jsupm_servo");
var digitalLightSensor = require("jsupm_tsl2561");
var lightSensor = ny digitalLightSensor.TSL2561();
var lightSensor = require('jsupm_grove');
var ljus = nya groveSensor.GroveLight(0);
var lightLevel = 0;
var lightLowCnt = 0;
var lightTimeRemaining = 960; minuter i 16 timmar
var lightDay = 1440; minuter i 24 timmars arbetsdag
var lightsState = 0;
var waterSensor = require('jsupm_grovewater');
var waterLevel = ny waterSensor.GroveWater(2);
var waterLeverTimer = 0;
var waterLevelValue = 0;
var tempSensor = nya groveSensor.GroveTemp(3);
var tempBase = 23. mål temperatur
var tempTheshold = 25; försök att kyla ner
var tempAlarm = 27. för varmt ljud larm
var louverOpened = 160;
var louverClosed = 0;
var tempValue = 0;
var circulationPump = ny mraa. Gpio(4);
circulationPump.dir (mraa. DIR_OUT); Ange gpio riktningen till utgång
var circulationPumpState = 0;
var circulationPumpTimer = 0;
var CIRCULATION_PUMP_TIME_ON = 1; pump tid på
var CIRCULATION_PUMP_TIME_OFF = 1; pump ledighet
Initiera Servo modul på digital port 5
var servo = nya servoModule.Servo(5);
servo.setMinPulseWidth(600);
servo.setMaxPulseWidth(2200)
var ecSensor = ny mraa. AIO(1);
var EC_reading = 0;
var ecDoser = ny mraa. Gpio(6);
ecDoser.dir (mraa. DIR_OUT); Ange gpio riktningen till utgång
var ecDoserState = 0;
var ecDoserTimer = 0;
var ecDoserActivate = false;
var ecSampleTimer = 0;
var EC_DOSER_INTERVAL = 2; sekunder att köra doser
var EC_SAMPLE_INTERVAL = 1; minuter att vänta innan du använder EG läsning för att bestämma att DOS
var EC_LIMIT = 1500; DOS när under detta värde minus EC_Band tills den når denna nivå
var EC_BAND = 200.
var EC_MS = 0; EG micro/S
var fanCooling = ny mraa. Gpio(7);
fanCooling.dir (mraa. DIR_OUT); Ange gpio riktningen till utgång
var fanCoolingState = 0;
var larm = nya mraa. Gpio(8);
alarm.dir (mraa. DIR_OUT); Ange gpio riktningen till utgång
var alarmState = 0;
var logTimer = 1;
var localWeather = 'Klart';
var url = "http://api.wunderground.com/api/df5bd75178df2c09/conditions/q/RI/Providence.json";
var weatherTimer = 1; vänta 1 minut innan första samtalet

var data = [{
sensorName: "ljus",
sensorType: "light.v1.0"
},{
sensorName: "temperatur", / / luft temp
sensorType: "temperature.v1.0"
}];
/*
data.forEach(function(item) {
registerNewSensor (item.sensorName, item.sensorType, funktion () {
});
});
*/
periodicActivity(); anropa funktionen periodicActivity
funktion periodicActivity()
{
om (checkTimer(weatherTimer)) {getWeather(); weatherTimer = setMinutesTimer(240);} / / var 4 timmar
growLights();
tempControl();
checkECDoser();
waterEC();
om (checkTimer(waterLeverTimer)) {waterCirculation(); waterLeverTimer = setSecondsTimer(1);}
om (checkTimer(lcdDisplayTimer)) {lcdDisplay(); lcdDisplayTimer = setSecondsTimer(1);}
om (checkTimer(logTimer)) {sendToCloud(); logTimer = setMinutesTimer(1);}
setTimeout(periodicActivity,500); anropa funktionen indikerade efter 1 sekund (1000 millisekunder)
}
funktion lcdDisplay()
{
var lums = 0;
myLcd.clear();
myLcd.setCursor(0,0);
myLcd.write (' dir: "+ localWeather);

myLcd.setCursor(1,0);
myLcd.write ("EG:" + EC_MS);

myLcd.setCursor(1,8);
om (lightLevel < 100) {lums = "L";} else om (lightLevel < 130) {lums = är ";} annat {lums ="H";}
myLcd.write ('L: "+ lums);

myLcd.setCursor(1,12);
myLcd.write ('T: "+ tempSensor.value());
} / / lcdDisplay
funktion getWeather()
{
begäran ({
URL: url,
JSON: falskt
}, funktion (fel, svar, kroppen) {
om (! fel & & 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);
}
});
} / / getWeather
funktion waterEC()
{
EC_reading = ecSensor.read(); Läs analoga spänningen
0 till 1024 = 0 till 5v
204 micro/S per volt
EC_MS = (EC_reading * 4.88).toFixed(); 5000 micro/S / 1024 = 4,88
om (EC_MS < (EC_LIMIT - EC_BAND)) {/ / utanför acceptabelt
om (checkTimer(ecSampleTimer)) {/ / tid att åter dos
ecSampleTimer = 0;
Console.log ("--ecDoserState" + ecDoserState);
om (ecDoserState! = 1) {/ / om doser inte å slår på den
ecDoserActivate = sant;
ecSampleTimer = setMinutesTimer(EC_SAMPLE_INTERVAL); återställa tiden fram till nästa prov - dos
Console.log ("dos för EG');
}
}
Console.log ("lägre än" + (EC_LIMIT - EC_BAND));
}
Console.log ("ecSampleTimer" + ecSampleTimer);
Console.log ("EG =" + EC_MS);
} / / waterEC()
funktion waterCirculation()
{
waterLevelValue = waterLevel.isWet();
om (waterLevelValue == true)
{
om (checkTimer(circulationPumpTimer)) {
om (circulationPumpState == 1) {
circulationPumpState = 0;
circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_OFF);
} annat {
circulationPumpState = 1;
circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_ON);
}
circulationPump.write(circulationPumpState);
}
} annat {
Console.log ("låg vatten");
circulationPumpTimer = 0;
circulationPumpState = 0;
circulationPump.write(circulationPumpState);
}
Console.log ("pump =" + circulationPumpState);
} / / waterCirculation
funktion checkECDoser()
{
om (ecDoserState == 0 & & ecDoserActivate == true) / / om inte redan på och behöver vara på
{
ecDoserTimer = setSecondsTimer(EC_DOSER_INTERVAL);
ecDoserState = 1;
ecDoser.write(ecDoserState);
Console.log ("EG Doser är" + ecDoserState + "för" + EC_DOSER_INTERVAL + "sekunder");
}
om (checkTimer(ecDoserTimer)) {/ / timer gick
ecDoserActivate = false;
ecDoserState = 0; Inaktivera doser
ecDoser.write(ecDoserState);
Console.log ("EG Doser Timer Fired');
}
Console.log ("ecDoserTimer" + ecDoserTimer);
} / / checkECDoser
funktion tempControl()
{
När temp till hög; slå på fans, öppna lameller
om temp ovanför theshold, bo tills sänkte till bas temp
Aktivera summern larm Temp
tempValue = tempSensor.value();
Console.log ("temp är =" + tempValue);
om (tempValue > tempTheshold) {
fanCoolingState = 1;
servo.setAngle(louverOpened);
Console.log ("temp heta');
} else om (tempValue < = tempBase) {
fanCoolingState = 0;
servo.setAngle(louverClosed);
Console.log ("temp normal');
}
fanCooling.write(fanCoolingState);

om (tempValue > = tempAlarm) {
alarmState = alarmState? 0:1;
alarm.write(alarmState);
} annat {
alarm.write(0);
alarmState = 0;
}
Console.log ("larmet är =" + alarmState);
} / / tempControl()
fungera growLights() / / kallas varje minut
{
lightLevel = lightSensor.getLux();
lightLevel = light.value();
om (lightLevel < 100 & & lightTimeRemaining > 0) {
om (lightLowCnt < 2) {lightLowCnt ++;} annat {lightsState = 1; lightLowCnt = 0;}
} annat {
lightsState = 0;
lightLowCnt = 0;
}
Lights.write(lightsState);
lightTimeRemaining--;
lightDay--;
om (lightDay < 1) {lightDay = 1440; lightRemaining = 640;} / / ny dag 24 hr dag med 16 timmars ljus
om (lightLowCnt > 0) console.log ("lightLow:" + lightLowCnt);
Console.log ("LightLevel:" + lightLevel);
} / / end growLights
funktion setSecondsTimer(waitTime)
{
var endTime;
var d = nya Date();
endTime = d.getTime() + (waitTime * 1000); konvertera tillbaka till millisekunder från sekunder
returnera endTime;

} / / setSecondsTimer
funktion setMinutesTimer(waitTime)
{
var endTime = 0;
var d = nya Date();
endTime = d.getTime() + (waitTime * 60000); konvertera tillbaka till millisekunder från minuter
returnera endTime;

} / / setMinutesTimer
funktion checkTimer(timer) {
var d = nya Date();
Console.log ("aktuell tid" + d.getTime() + ' timer = "+ timer);
om (d.getTime() > timer) {return true;}
annat {return false;}
} / / checkTimer
funktion registerNewSensor (namn, typ, callback) {
var msg = JSON.stringify ({
n: namn,
t: typ
});
var sentMsg = ny Buffer(msg);
Console.log ("Registering sensor:" + sentMsg);
client.send (sentMsg, 0, sentMsg.length, options.port, options.host, callback);
};
funktion sendObservation (namn, värde, på) {
var msg = JSON.stringify ({
n: namn,
v: värde,
på: på
});
var sentMsg = ny Buffer(msg);
Console.log ("Skicka observation:" + sentMsg);
client.send (sentMsg, 0, sentMsg.length, options.port, options.host);

};
funktion sendToCloud() {
sendObservation ("lätt", det lightLevel, nya Date().getTime());
sendObservation ("temperatur", tempValue, nya Date().getTime());
sendObservation ("packningssats", circulationPumpState, nya Date().getTime());
sendObservation ("ecSensor", EC_MS, nya Date().getTime());
sendObservation ("ecDoser", ecDoserState, nya Date().getTime());
sendObservation ("coolingFan", fanCoolingState, nya Date().getTime());
sendObservation ("waterLevel", waterLevelValue, nya Date().getTime());
sendObservation ("growLights", lightsState, nya Date().getTime());
sendObservation ("lameller", fanCoolingState, nya Date().getTime());

} //sendToCloud

Se Steg
Relaterade Ämnen

Flat Pack Farm Stand

Detta projekt för en gård stå i södra Kalifornien kommer från en veckas charette som tillät oss att börja experimentera med möjligheterna av plåt i den arkitektoniska sfären. Vårt projekt syftar till att skapa en funktionell byggnad hud som kan ändra...

Ant Farm

Hej, alla! Vi är tillbaka med en annan episod av Minecraft skapelser (jag är fortfarande ung, så vänligen inte vara oförskämd) och idag kommer jag att visa dig hur man bygger en myra gård! Oroa dig inte, för de är bara passiva mobs och inte bita. Så...

Farmer's Ultimate Paintball!

Farmer's Ultimate Paintball har många olika versioner, så visar vi dig vår mest populära en.Detta är bondens Ultimate Paintball V.2 fånga flaggan, den mest populära av Farmer's Ultimate Paintball.Detta spel spelas i ett majsfält omgiven av träd, åtmi...

Häpnadsväckande Ant Farm

i linje med min andra Instructable, jag hade en idé för ett projekt som andra människor hade gjort, men ville göra det bättre. Här är en billig, lätt att göra, mycket slitstark ant farm för din myra tittar njutning. Det ser inte snyggast, men sedan i...

Monarch Butterfly Farm

Flera år sedan letade min man och jag efter en volontär möjlighet. Vänner klubban av de lokala State parken tillkännage deras möte natt i uppsatsen. Vi gick och blev medlemmar. En av medlemmarna var Butterfly damen. Inte bara var hon en master trädgå...

Urban farming smycken

denna samling av levande smycken gjordes under 2013 FabJam på leFabShop Paris på lördag 4 maj.Den röstade tema, delade med 15 andra Fab utrymmen runt om i världen var «Urban Farming». Vi alla hade en eftermiddag med prototypen våra idéer och detta är...

Thorn borttagning hem hacka Urban Farming av openInvent

Hej detta är min första instructable jag grundade en grupp som kallas openInvent eftersom inte jag är mentalt inkompetent kan du gå med denna grupp via dessa länkar tiny.cc/openinvent och på facebook tiny.cc/openinventfb. Detta instructable kommer at...

Hayashi Farm Stand

Hayashi Farm Stand är ett konceptdesign för en gård i Arroyo Grande, California. Utformningen av arbetet som paneler som fiskfjäll att kasta vatten. Till paneler pivot öppna för ventilation och indirekt dagsljus. De roterande panelerna också utsätta...

Fire Ant Farm

att ha och ant farm är en stor pedagogisk erfarenhet för barn. Du och ditt barn kan nu bygga en egen.Steg 1: Ant Farm Base Det som oroar föräldrar mest om att äga en myra gård är det faktum att om det bryter myrorna är gratis inom hushållet. Vi komme...

Hacking John Deere American Farmer

i detta Instructable jag visar dig många mycket enkelt hackar för John Deere American Farmer (JDAF). De flesta spel data sparas i XML-format så det är mycket enkelt att redigera. Du behöver bara en grundläggande kunskap om XML att manipulera spelet f...

Läsk flaska Ant Farm

någonsin ville ha en ant farm? Ant gårdar är underhållande, men utbildning – det är fascinerande att följa de små myrorna som de går sina upptagna liv. Men affären ant gårdar är ofta dyra och oftast begränsad i storlek. Om du vill ha en billig, lätt...

"Arm-y" Ant farm v1.0 - håll kontakten med din koloni

Intro och teoriI min forskning och design behöver jag studera beteenden av insekter, särskilt bin och myror. Det finns många metoder för lärande om de åtgärder och förfaranden för dessa andra former av liv. Du kan läsa böcker och tidskrifter, analyse...

Farma: ett hem bioreaktor för läkemedel

ÖversiktSyntetisk biologi har snabbt utvecklats från en vetenskaplig disciplin till en stor industri. Många nya företag utforma mikrober som producerar värdefulla kemikalier, läkemedel och dofter, i mycket stora jäsning reaktorer.Idag, är vi på väg a...

Arduino Uno Ant Farm 64 w / spänning Booster, Buck Toot Driven LED-belysning, Temp Sensor *

InledningVi har...Arduino Uno mikrokontrollerspänningen ökade...Buck toot driven...Lamporna lyser...64-tums Ant Farm livsmiljö. Som skulle ha haft kontrollerad temperatur belysning om det inte vore för att firmware "frågan". Mer om det senare.Ja...

Staten Farm våren hem underhåll

Alla som någonsin har överlevt en hårt väder storm eller naturligakatastrof vet att skadorna på hem och egendom kan vara överväldigande, känslomässigt och ekonomiskt. Även om det är omöjligt att veta exakt när en katastrof kommer att slå, vill State...

An Urban farm

This is my dad's garden.Varje år under de senaste åren, har vi planterade grönsaker och frukter, några blommor, och använt våra kycklingarna "gödsel" för gödselmedlet. Och varje år grödan ger några månader av läckra, smak-packade, färska ekologi...

Hydroponic ideas

Hej allaJag har inte publicerat på ett tag som jag har designat nya hyroponic system.Detta instructable är inte hur man bygger systemen men att visa vad man kan göra med lite insikt och mycket hjälp från ovan.Jag är ett stort fan av kretsloppsodling,...

Automatisk Melon Farm i Minecraft

rätt. har du din oövervinneliga fästning och alla dina objekt är säkra. men jakten har förstört din gård!Tur att jag har ett svar för det! (vad skulle du göra utan mig)Steg 1:För att få din melon bara gör detta. få lite gräs och förlägger det som på...

Effektiv AFK morötter, potatis och vete farm [800 artiklar/min] (1,8)

Det är en effektiv AFK gård med 1.8 mekanikSteg 1: Komma igång Först av allt behöver du några wet jordbruksmark och en utgångSteg 2: Täcka jordbruksmarkenNästa behöver du täcka jordbruksmark med plattor som i bildenSteg 3: Lägga till Redstone Nu du b...