Vertical Hydroponic Farm (9 / 13 paso)

Paso 9: Automatización continuó: Intel XDK IoT Edition

Utilizamos la edición de IoT XDK de Intel. Permite escribir el código en JavaScript utilizando bibliotecas de Node.js.

El software puede encontrarse en Intel XDK IoT edición, hay muchos documentos sobre cómo empezar con el IDE.

Código:

/ * jslint nodo: verdad, vars:true, bit a bit: true, unparam:true * //*jshint sin usar: true * / / * global ** una aplicación simple de node.js destinada a parpadear el LED a bordo de Intel basado en consejos de desarrollo como el Galileo de Intel (r) y Edison con Arduino breakout Junta. MRAA - biblioteca de esqueleto bajo nivel de comunicación en plataformas GNU/Linux biblioteca en C/C++ para interfaz con Galileo y otras plataformas de Intel, en un API estructurada y sana con puerto nanmes/numeración que coincida con los tableros y con vinculaciones a javascript y python. Pasos para instalar MRAA y biblioteca de la UPM en Intel plataforma de IoT con IoTDevKit Linux * de la imagen usando un ssh cliente: 1. echo "fuente maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf 2. OPKG actualización 3
. OPKG upgradeArticle: https://software.intel.com/en-us/html5/articles/intel-xdk-iot-edition-nodejs-templates * / var mraa = require('mraa'); requieren mraa / / UDP var opciones = {host: '127.0.0.1', Puerto: 41234}; console.log ('MRAA versión: ' + mraa.getVersion()); escribir la versión mraa la consola XDK Intel var dgram = require('dgram'); var cliente = dgram.createSocket('udp4'); petición de var = requieren ('solicitud'); var lcdDisplayTimer = 0; luces de var = nuevo mraa. GPIO(3); LED conectado hasta el pin digital 13 (o construido en el Galileo Gen2) lights.dir (mraa. DIR_OUT); establecer la dirección de gpio salida var ledState = true; Booleano para sostener el estado de Led var groveSensor = require('jsupm_grove'); LCD de var = require('jsupm_i2clcd'); myLcd var = new LCD.Jhd1313m1 (0, 0x3E, 0x62); var rotarySensor = new mraa. AIO(1); var myButton = new mraa. GPIO(6); var servoModule = requieren ("jsupm_servo"); //var digitalLightSensor = require("jsupm_tsl2561"); lightSensor var = new digitalLightSensor.TSL2561 (); var lightSensor = require('jsupm_grove'); luz var = nuevo groveSensor.GroveLight(0); var lightLevel = 0; var lightLowCnt = 0; var lightTimeRemaining = 960; minutos en 16 horas var lightDay = 1440; minutos en 24 horas día var lightsState = 0; var waterSensor = require('jsupm_grovewater'); nivel del agua var = nuevo waterSensor.GroveWater(2); var waterLeverTimer = 0; var waterLevelValue = 0; var tempSensor = new groveSensor.GroveTemp(3); var tempBase = 23; objetivo temperatura var tempTheshold = 25; tratar de enfriar la temperatura var = 27; demasiado caliente sonidos alarma var louverOpened = 160; var louverClosed = 0; tempValue var = 0; var circulationPump = new mraa. GPIO(4); circulationPump.dir (mraa. DIR_OUT); establecer la dirección de gpio salida var circulationPumpState = 0; var circulationPumpTimer = 0; var CIRCULATION_PUMP_TIME_ON = 1; bomba de tiempo en var CIRCULATION_PUMP_TIME_OFF = 1; bomba de tiempo de / / módulo de crear instancias de Servo servo de puertos digitales 5 var = nuevo servoModule.Servo(5); servo.setMinPulseWidth(600); servo.setMaxPulseWidth(2200) var ecSensor = new mraa. AIO(1); var EC_reading = 0; var ecDoser = new mraa. GPIO(6); ecDoser.dir (mraa. DIR_OUT); establecer la dirección de gpio salida var ecDoserState = 0; var ecDoserTimer = 0; var ecDoserActivate = false; var ecSampleTimer = 0; var EC_DOSER_INTERVAL = 2; segundos para ejecutar dosificador var EC_SAMPLE_INTERVAL = 1; minutos a esperar antes de usar la lectura de CE para determinar dosis var EC_LIMIT = 1500; dosis por debajo de este valor menos EC_Band hasta que alcance este nivel var EC_BAND = 200; var EC_MS = 0; CE fanCooling de micro/Svar = mraa nuevo. GPIO(7); fanCooling.dir (mraa. DIR_OUT); establecer la dirección de gpio salida var fanCoolingState = 0; var alarma = mraa nuevo. GPIO(8); Alarm.dir (mraa. DIR_OUT); establecer la dirección de gpio salida var alarmState = 0; var logTimer = 1; var localWeather = 'Nublado'; var url = 'http://api.wunderground.com/api/df5bd75178df2c09/conditions/q/RI/Providence.json'; var weatherTimer = 1; esperar 1 minuto antes de la primera llamada var datos = [{sensorName: "la luz", sensorType: "light.v1.0"}, {sensorName: "temperatura", / / sensorType temp de aire: "temperature.v1.0"}]; / * data.forEach(function(item) {registerNewSensor (item.sensorName, item.sensorType, la función ()});}); * / periodicActivity(); llamar al periodicActivity functionfunction periodicActivity() {si (checkTimer(weatherTimer)) {getWeather(); weatherTimer = setMinutesTimer(240);} / / cada 4 horas growLights(); tempControl(); checkECDoser(); waterEC(); si (checkTimer(waterLeverTimer)) {waterCirculation(); waterLeverTimer = setSecondsTimer(1);} si (checkTimer(lcdDisplayTimer)) {lcdDisplay(); lcdDisplayTimer = setSecondsTimer(1);} si (checkTimer(logTimer)) {sendToCloud(); logTimer = setMinutesTimer(1);} setTimeout(periodicActivity,500); //call la función indicada después de 1 segundo (1000 milisegundos)} function lcdDisplay() {var lums = 0; myLcd.clear(); myLcd.setCursor(0,0); myLcd.write('Cond : ' + localWeather); myLcd.setCursor(1,0); myLcd.write (' CE:' + EC_MS); myLcd.setCursor(1,8); Si (lightLevel < 100) {lums = 'L';} else if (lightLevel < 130) {lums = estoy ';} else {lums = 'H';} myLcd.write ('L:' + lums); myLcd.setCursor(1,12); myLcd.write (' t:' + tempSensor.value()); } / / lcdDisplayfunction getWeather() {petición ({url: url json: false}, función (error, respuesta, cuerpo) {si (! error & & 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(); / leer la tensión analógica de entrada / / 0 a 1024 = 0 a 5v / / 204 micro/S por voltio EC_MS = (EC_reading * 4.88).toFixed(); / / 5000 micro/S / 1024 = 4.88 si (EC_MS < (EC_LIMIT - EC_BAND)) {/ / fuera de rango aceptable si (checkTimer(ecSampleTimer)) {/ / tiempo para volver a la dosis ecSampleTimer = 0; / / console.log ('--ecDoserState ' + ecDoserState); si (ecDoserState != 1) {/ / si el dosificador no por entonces encendido ecDoserActivate = true; ecSampleTimer = setMinutesTimer(EC_SAMPLE_INTERVAL); / / reset hasta próxima muestra – dosis console.log ('dosis de CE');}} Console.log ('menor que' + (EC_LIMIT - EC_BAND)); } / / console.log ('ecSampleTimer' + ecSampleTimer); Console.log (' CE = ' + EC_MS);} waterCirculation() de función waterEC () {waterLevelValue = waterLevel.isWet(); if (waterLevelValue == true) {si (checkTimer(circulationPumpTimer)) {si (circulationPumpState == 1) {circulationPumpState = 0; circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_OFF);} más {circulationPumpState = 1; circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_ON);} circulationPump.write(circulationPumpState);}} más {console.log ('bajo agua'); circulationPumpTimer = 0; circulationPumpState = 0; circulationPump.write(circulationPumpState);} / / console.log (' bomba = ' + circulationPumpState);} / / waterCirculationfunction checkECDoser() {si (ecDoserState == 0 & & ecDoserActivate == true) / / si no ya por las necesidades en {ecDoserTimer = setSecondsTimer(EC_DOSER_INTERVAL); ecDoserState = 1; ecDoser.write(ecDoserState); console.log ('CE dosificador es' + ecDoserState + ' ' + EC_DOSER_INTERVAL + 'segundos'); } Si (checkTimer(ecDoserTimer)) {/ / contador de tiempo fue ecDoserActivate = false; ecDoserState = 0; / / gire dosificador de ecDoser.write(ecDoserState); / / console.log ('CE dosificador temporizador encendido');} / / console.log ('ecDoserTimer' + ecDoserTimer); } / / checkECDoserfunction tempControl() {/ / cuando temp alta; encender ventiladores, abrir las persianas / / si la temperatura por encima del umbral, estancia hasta que bajen a temperatura base / / encender zumbador en alarma temp tempValue = tempSensor.value(); / / console.log ('temp es =' + tempValue); si (tempValue > tempTheshold) {fanCoolingState = 1; servo.setAngle(louverOpened); / / console.log ('temp caliente');} else if (tempValue < = tempBase) {fanCoolingState = 0; servo.setAngle(louverClosed); / / console.log ('temp normal');} fanCooling.write(fanCoolingState); si (tempValue > = temperatura) {alarmState = alarmState? 0:1; alarm.write(alarmState);} más {alarm.write(0); alarmState = 0;} / / console.log ('alarma es =' + alarmState);} / tempControl () función growLights() / / llama cada minuto {//lightLevel = lightSensor.getLux(); lightLevel = light.value(); if (lightLevel < 100 & & lightTimeRemaining > 0) {si (lightLowCnt < 2) {lightLowCnt ++;} otro {lightsState = 1; lightLowCnt = 0;}} más {lightsState = 0; lightLowCnt = 0;} lights.write(lightsState); lightTimeRemaining--; lightDay--; si (lightDay < 1) {lightDay = 1440; lightRemaining = 640;} / / nuevo día 24 hr con 16 horas de luz if console.log (lightLowCnt > 0) ('lightLow: ' + lightLowCnt); console.log('LightLevel : ' + lightLevel); } / / fin growLightsfunction setSecondsTimer(waitTime) {var endTime; var d = new Date (); endTime = d.getTime() + (waitTime * 1000); / / convertir a milisegundos de endTime retorno segundos;} / / setSecondsTimerfunction setMinutesTimer(waitTime) {var endTime = 0; var d = new Date (); endTime = d.getTime() + (waitTime * 60000); / / convertir a milisegundos de endTime retorno minutos;} / / setMinutesTimerfunction checkTimer(timer) {var d = new Date (); / / console.log ('hora' + d.getTime() + ' temporizador =' + temporizador); si (d.getTime() > temporizador) {devuelve true;} otro {devuelva false ;}} / / checkTimerfunction registerNewSensor (nombre tipo, callback) {var msg = JSON.stringify ({n: nombre, t: tipo}); var sentMsg = new Buffer(msg); console.log ("sensor de registro:" + sentMsg); Client.Send (sentMsg, 0, sentMsg.length, options.port, options.host, callback); }; function sendObservation (nombre, valor, en el) {var msg = JSON.stringify ({n: nombre, v: valor, en: en}); var sentMsg = new Buffer(msg); console.log ("envío observación:" + sentMsg); Client.Send (sentMsg, 0, sentMsg.length, options.port, options.host); }; función sendToCloud() {//sendObservation ("luz", lightLevel, nuevo Date().getTime()); //sendObservation ("temperatura" tempValue, nuevo Date().getTime()); //sendObservation ("bomba", circulationPumpState, nuevo Date().getTime()); //sendObservation ("ecSensor", EC_MS, nuevo Date().getTime()); / / sendObservation ("ecDoser", ecDoserState, nuevo Date().getTime()); //sendObservation ("coolingFan del, fanCoolingState, nuevo Date().getTime()); //sendObservation ("nivel del agua", waterLevelValue, nuevo Date().getTime()); //sendObservation ("growLights", lightsState, nuevo Date().getTime()); //sendObservation ("lumbreras", fanCoolingState, nuevo Date().getTime());} //sendToCloud

Artículos Relacionados

BRICOLAJE Vertical Aquaponic sistema con bomba de aire comprimido agrícola

BRICOLAJE Vertical Aquaponic sistema con bomba de aire comprimido agrícola

Hizo una combinación de proyecto-Sistema hidropónico;-Sistema aqua-cultura;-Elevación de aire de tecnología;Ventajas-Reciclaje + reutilización + reducción de desechos (botellas de refresco) en camas de crecimiento útil,-Arreglo de cultivo vertical ah
Ahorre $500! Hacer su propio sistema de hidroponía vertical/acuaponia!

Ahorre $500! Hacer su propio sistema de hidroponía vertical/acuaponia!

Mirando en línea me he sido intrigado por las torres de crecimiento vertical que venden personas.  Permiten cultivar sus propios productos orgánicos saludables y tomar solamente muy, muy pequeña cantidad de espacio fácilmente.  Desgraciadamente cuest
Jardín vertical en 10 minutos!

Jardín vertical en 10 minutos!

¿Hola cómo estás?¿Te gusta la jardinería?sí, yo también. Pero, ¡ mira mi jardín! Tantos polibags aquí.Espontáneamente, tengo una idea para hacer un jardín vertical simplemente.Creo que no es que permanente, pero me ayuda a darle más espacio mi jardín
Jardín vertical y tiempo por Edison Intel

Jardín vertical y tiempo por Edison Intel

BioEdison es un elegante jardín vertical basado en la nueva Edison de Intel que permite un simple y automatizadagestión de cualquier tipo de vegetal o planta.Ventajas de BioEdison dispositivo de control que un huerto tradicional son el uso eficiente
Almacenamiento vertical Kayak

Almacenamiento vertical Kayak

Tengo un kayak de 13 pies y un garaje lleno de gente, y almacenaje horizontal (utilizando un sistema de polea para una bicicleta) era problemático. Por suerte mi garaje lleno de gente tiene un bonito techo alto con vigas a la vista, así que pude aseg
Vertical zapato Rack - Peg Board escalera

Vertical zapato Rack - Peg Board escalera

Bienvenido a mi medida, estante del zapato que construí en mi garaje. Con mal olor, zapatos mojados o sucios es un burdon que todo el mundo tiene que lidiar con. Teníamos montones de zapatos en diferentes salas, en los armarios y sótanos. Decidí que
Turbina de viento de eje vertical $30 de materiales de desecho

Turbina de viento de eje vertical $30 de materiales de desecho

Se trata de una turbina de viento de eje Vertical que utiliza energía eólica para cosas del disco como aire y bombas de agua para la refrigeración, irrigación y similares o un alternador/generador para producir electricidad.Nota: este tutorial tambié
Hydroponic ideas

Hydroponic ideas

Hola a todosNo he publicado en un tiempo como he estado diseñando nuevos sistemas de hyroponic.Este instructivo no es como para construir los sistemas, sino para mostrar qué se puede hacer con un poco de perspicacia y un montón de ayuda desde arriba.
Granja hidropónica Vertical final baratos... Cultivos verdes lejos de regalo!

Granja hidropónica Vertical final baratos... Cultivos verdes lejos de regalo!

*** para más info y fotos visitan mi blog en http://thehydroponicexperiment.blogspot.comOK chicos les pido disculpas por la crappy instructable... me apuré un poco para hacerlo para el concurso de regalo... perdí obviamente que uno... así que estoy v
El Jardín Vertical de planta 72

El Jardín Vertical de planta 72

este instructable cubrirá los detalles del Jardín Vertical construido por mi "hidropónica, automatización, redes, proyecto de invernadero de clima controlado". El jardín vertical es una forma de cultivar plantas pequeñas hasta 72 (como lechuga,
Plataforma vertical (envase) jardines

Plataforma vertical (envase) jardines

Estos jardines de plataforma están apoyado contra la valla en mi pequeño jardín urbano. Utilizo el interior espacio entre la tela jardinería 2 x 4 y grapa a la madera para crear una jardinera casi oculto, de aspecto rústico a mi espacio exterior.Usar
Vertical de jardinería en una botella!

Vertical de jardinería en una botella!

Espacios abiertos son el sueño de cada jardinero. La zona sin límites para crecer árboles y plantas es realmente emocionante. Pero, entrar en la ciudad y no hay una pulgada de sobra. Plantas toma un asiento trasero como acero y concreto reinado supre
Madera contrachapada vertical bajo Kontrabass

Madera contrachapada vertical bajo Kontrabass

Holasoy un carpintero de 22 años de Berlín y en las siguientes páginas quiero mostrar cómo hice un bajo vertical de madera contrachapada y haya.Creo que no es necesario decirlo, pero hacerlo aunque: no conozco los hechos sobre el arte de la construcc
Que hace A madera contrachapada vertical bajo

Que hace A madera contrachapada vertical bajo

Hi todo el mundo! Para este instructable quiero mostrarles chicos cómo hacer un bajo vertical de madera contrachapada. Este fue mi proyecto más grande para mi último año en la escuela secundaria y fue el proyecto que llevó a competir en el 2012-2013