Intel Edison hydrocultuur Controller (3 / 5 stap)

Stap 3: De bouw


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.

Codering:

Timers

 function setSecondsTimer(waitTime)<br>{<br> var endTime;<br> var d = new Date();<br><br> endTime = d.getTime() + (waitTime * 1000); // convert back to milliseconds from seconds<br> return endTime;<br> <br>} // setSecondsTimer<br><br>function setMinutesTimer(waitTime)<br>{<br> var endTime = 0;<br> var d = new Date();<br><br> endTime = d.getTime() + (waitTime * 60000); // convert back to milliseconds from minutes<br> return endTime;<br> <br>} // setMinutesTimer<br><br>function checkTimer(timer) {<br> var d = new Date();<br>// console.log('current time ' + d.getTime() + ' timer =' + timer);<br> if (d.getTime() > timer) {return true;} <br> else {return false;}<br><br>} // checkTimer<br><br><br>// Main Routine<br>function periodicActivity()<br>{<br> if (checkTimer(weatherTimer)) {getWeather(); weatherTimer = setMinutesTimer(240);} // every 4 hours<br> growLights();<br> tempControl();<br> checkECDoser();<br> waterEC();<br> if (checkTimer(waterLeverTimer)) {waterCirculation(); waterLeverTimer = setSecondsTimer(1);}<br> if (checkTimer(lcdDisplayTimer)) {lcdDisplay(); lcdDisplayTimer = setSecondsTimer(1);}<br> if (checkTimer(logTimer)) {sendToCloud(); logTimer = setMinutesTimer(1);}<br> setTimeout(periodicActivity,500); //call the indicated function after 1 second (1000 milliseconds)<br>}<br><br><br> 

Sensorgegevens

EG-Sensor

 // #EC Sensor <br><br>var ecSensor = new mraa.Aio(1);<br>var EC_reading = 0;<br>var ecDoser = new mraa.Gpio(6); <br>ecDoser.dir(mraa.DIR_OUT); //set the gpio direction to output<br>var ecDoserState = 0;<br>var ecDoserTimer = 0;<br>var ecDoserActivate = false;<br>var ecSampleTimer = 0;<br>var EC_DOSER_INTERVAL = 2; // seconds to run doser<br>var EC_SAMPLE_INTERVAL = 1; // minutes to wait before using EC reading to determine to dose<br>var EC_LIMIT = 1500; // dose when below this value minus EC_Band until it reaches this level<br>var EC_BAND = 200;<br>var EC_MS = 0; // EC micro/S<br><br><br>function waterEC() //Read Water ED<br>{<br> EC_reading = ecSensor.read(); // read the analog input voltage<br> // 0 to 1024 = 0 to 5v<br> // 204 micro/S per volt<br> EC_MS = (EC_reading * 4.88).toFixed(); // 5000 micro/S / 1024 = 4.88<br> if (EC_MS < (EC_LIMIT - EC_BAND)) { // outside of acceptible range<br> if (checkTimer(ecSampleTimer)) { // time to re-dose<br> ecSampleTimer = 0;<br> // console.log('--ecDoserState ' + ecDoserState);<br> if (ecDoserState != 1) { // if doser not ON then turn it ON<br> ecDoserActivate = true; <br> ecSampleTimer = setMinutesTimer(EC_SAMPLE_INTERVAL); // reset time until next sample - dose<br> console.log('dose for EC');<br> }<br> }<br>// console.log('lower than ' + (EC_LIMIT - EC_BAND));<br> }<br>// console.log('ecSampleTimer ' + ecSampleTimer);<br>// console.log('EC = ' + EC_MS);<br><br>} // waterEC()<br><br>function checkECDoser()<br>{ <br> if (ecDoserState == 0 && ecDoserActivate == true) // if not already on and needs to be on<br> {<br> ecDoserTimer = setSecondsTimer(EC_DOSER_INTERVAL); <br> ecDoserState = 1;<br> ecDoser.write(ecDoserState); <br> console.log('EC Doser is ' + ecDoserState + ' for ' + EC_DOSER_INTERVAL + ' seconds');<br> }<br> if (checkTimer(ecDoserTimer)) { // timer went off<br> ecDoserActivate = false;<br> ecDoserState = 0; // turn doser off <br> ecDoser.write(ecDoserState); <br>// console.log('EC Doser Timer Fired');<br> }<br>// console.log('ecDoserTimer ' + ecDoserTimer);<br>} // checkECDoser<br> 

Temperatuur

 // Temperature<br>var tempSensor = new groveSensor.GroveTemp(3);<br>var tempBase = 23; // goal temperature<br>var tempTheshold = 25; // try to cool down<br>var tempAlarm = 27; // too hot sound alarm<br>var louverOpened = 160;<br>var louverClosed = 0;<br>var tempValue = 0;<br><br>function tempControl()<br>{<br> // when temp to high; turn on fans, open louvers<br> // if temp above theshold, stay on until lowered to base temp<br> // turn on buzzer at alarm temp<br> tempValue = tempSensor.value();<br>// console.log('temp is=' + tempValue);<br> if (tempValue > tempTheshold) {<br> fanCoolingState = 1;<br> servo.setAngle(louverOpened);<br> // console.log('temp hot');<br> } else if (tempValue <= tempBase) {<br> fanCoolingState = 0;<br> servo.setAngle(louverClosed);<br> // console.log('temp normal');<br> }<br> fanCooling.write(fanCoolingState);<br> <br> <br> if (tempValue >= tempAlarm) {<br> alarmState = alarmState ? 0:1;<br> alarm.write(alarmState);<br> } else {<br> alarm.write(0);<br> alarmState = 0;<br> }<br> // console.log('alarm is=' + alarmState);<br><br>} // tempControl()<br> 

Waterniveau Sensor

 var waterSensor = require('jsupm_grovewater');<br>var waterLevel = new waterSensor.GroveWater(2);<br>var waterLeverTimer = 0;<br>var waterLevelValue = 0;<br> 

Lichtsensor

 var digitalLightSensor = require("jsupm_tsl2561");<br>var lightSensor = new digitalLightSensor.TSL2561();<br>var lightLevel = 0;<br>var lightLowCnt = 0;<br>var lightTimeRemaining = 960; // minutes in 16 hours<br>var lightDay = 1440; // minutes in 24 hour day<br>var lightsState = 0;<br> 

Besturingselementen en de invloed van het bedieningscircuit

Circulatiepomp

 var circulationPump = new mraa.Gpio(4); <br>circulationPump.dir(mraa.DIR_OUT); //set the gpio direction to output<br>var circulationPumpState = 0;<br>var circulationPumpTimer = 0;<br>var CIRCULATION_PUMP_TIME_ON = 1; // pump time on<br>var CIRCULATION_PUMP_TIME_OFF = 1; // pump time off<br><br><br>function waterCirculation()<br>{<br> waterLevelValue = waterLevel.isWet();<br> if (waterLevelValue == true)<br> {<br> if (checkTimer(circulationPumpTimer)) {<br> if (circulationPumpState == 1) {<br> circulationPumpState = 0;<br> circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_OFF);<br> } else {<br> circulationPumpState = 1;<br> circulationPumpTimer = setMinutesTimer(CIRCULATION_PUMP_TIME_ON);<br> }<br> circulationPump.write(circulationPumpState);<br> }<br> } else {<br> console.log('low water');<br> circulationPumpTimer = 0;<br> circulationPumpState = 0;<br> circulationPump.write(circulationPumpState);<br> }<br>// console.log('pump = ' + circulationPumpState);<br><br>} // waterCirculation<br> 

Servo Controller (voor roosters)

 //Instantiate Servo module on digital port 5<br>var servo = new servoModule.Servo(5);<br>servo.setMinPulseWidth(600);<br>servo.setMaxPulseWidth(2200);<br> 

Fancontroller

 var fanCooling = new mraa.Gpio(7); <br>fanCooling.dir(mraa.DIR_OUT); //set the gpio direction to output<br>var fanCoolingState = 0;<br> 

Temperatuur logica

 function tempControl()<br>{<br> // when temp to high; turn on fans, open louvers<br> // if temp above theshold, stay on until lowered to base temp<br> // turn on buzzer at alarm temp<br> tempValue = tempSensor.value();<br>// console.log('temp is=' + tempValue);<br> if (tempValue > tempTheshold) {<br> fanCoolingState = 1;<br> servo.setAngle(louverOpened);<br> // console.log('temp hot');<br> } else if (tempValue <= tempBase) {<br> fanCoolingState = 0;<br> servo.setAngle(louverClosed);<br> // console.log('temp normal');<br> }<br> fanCooling.write(fanCoolingState);<br> <br> <br> if (tempValue >= tempAlarm) {<br> alarmState = alarmState ? 0:1;<br> alarm.write(alarmState);<br> } else {<br> alarm.write(0);<br> alarmState = 0;<br> }<br> // console.log('alarm is=' + alarmState);<br><br>} // tempControl()<br><br> 

Grow Lights

 function growLights() // called every minute<br>{ <br> lightLevel = lightSensor.getLux();<br> if (lightLevel < 100 && lightTimeRemaining > 0) {<br> if (lightLowCnt < 2) {lightLowCnt++;} else {lightsState = 1; lightLowCnt = 0;}<br> } else {<br> lightsState = 0;<br> lightLowCnt = 0;<br> }<br> lights.write(lightsState);<br> lightTimeRemaining--; <br> lightDay--;<br> if (lightDay < 1) {lightDay = 1440; lightRemaining = 640;} // new day 24 hr day with 16 hours of light<br> if (lightLowCnt > 0) console.log('lightLow: ' + lightLowCnt); <br> console.log('LightLevel: ' + lightLevel);<br>} // end growLights<br> 

LCD-uitgang

 function lcdDisplay()<br>{<br> var lums = 0;<br> myLcd.clear();<br> myLcd.setCursor(0,0);<br> myLcd.write('Cond: ' + localWeather);<br> <br> myLcd.setCursor(1,0);<br> myLcd.write('EC:' + EC_MS);<br> <br> myLcd.setCursor(1,8);<br> if (lightLevel < 100) {lums = 'L';} else if (lightLevel < 130) {lums = 'M';} else {lums = 'H';}<br> myLcd.write('L:' + lums);<br> <br> myLcd.setCursor(1,12); <br> myLcd.write('T:' + tempSensor.value());<br>} // lcdDisplay<br><br> 

Publiceren naar de cloud

 // Define your sensors for cloud publish<br>var data = [{<br> sensorName : "light",<br> sensorType: "light.v1.0"<br>},{<br> sensorName : "temperature", // air temp<br> sensorType: "temperature.v1.0"<br>}];<br><br>//Run Once to Init/Register sensors<br>data.forEach(function(item) {<br> registerNewSensor(item.sensorName, item.sensorType, function () { <br> });<br>});<br><br><br><br>function registerNewSensor(name, type, callback){<br> var msg = JSON.stringify({<br> n: name,<br> t: type<br> });<br><br> var sentMsg = new Buffer(msg);<br> console.log("Registering sensor: " + sentMsg);<br> client.send(sentMsg, 0, sentMsg.length, options.port, options.host, callback);<br>};<br><br><br>function sendObservation(name, value, on){<br> var msg = JSON.stringify({<br> n: name,<br> v: value,<br> on: on<br> });<br><br> var sentMsg = new Buffer(msg);<br> console.log("Sending observation: " + sentMsg);<br> client.send(sentMsg, 0, sentMsg.length, options.port, options.host);<br> <br>};<br><br><br>function sendToCloud(){<br> sendObservation("light", lightLevel, new Date().getTime());<br> sendObservation("temperature", tempValue, new Date().getTime());<br>} //sendToCloud<br><br> 

Ophalen van de opmerkingen weer

 var localWeather = 'Waiting';<br>var url = 'http://api.wunderground.com/api/df5bd75178df2c09/conditions/q/MA/Boston.json';<br>var weatherTimer = 1; // wait 1 minute before first call<br><br>function getWeather()<br>{<br> request({<br> url: url,<br> json: false<br> }, function (error, response, body) {<br> if (!error && response.statusCode === 200) {<br> var weatherReport = response.body;<br> localWeather = weatherReport.substr(weatherReport.indexOf('"weather":"') + 11,10);<br> }<br> });<br>} // getWeather<br><br> 

Gerelateerde Artikelen

IoT NFT Aquaponic systeem Controler met WebApp (Intel Edison & Node.js)

IoT NFT Aquaponic systeem Controler met WebApp (Intel Edison & Node.js)

AquaponicsAquaponic combineert aquacultuur (vis groeiende) met hydrocultuur (teelt in water). Vis uitscheiden wordt afgebroken door bacteriën aan nitraat die worden geabsorbeerd door de planten als voedingsstoffen, en plant wortels handeling als een
Programable MIDI Synth met Intel Edison en Csound

Programable MIDI Synth met Intel Edison en Csound

Een MIDI-controller is zoals een computer toetsenbord, maar in plaats van tekens worden verzonden naar de computer, het stuur notities (en een heleboel meer informatie over hoe de notitie wordt gespeeld). U kunt meer informatie over MIDI-Controllers
Camera Trap uploaden Twitter met Intel Edison

Camera Trap uploaden Twitter met Intel Edison

Camera vallen zijn speciaal ontworpen camera's om beelden van dieren in een wild te vangen. Het is gericht op het bestuderen van het ecosysteem van deze dieren in het bos. Deze camera is voorzien van motion cencors die gebruikmaken van censor pir. Al
Bluetooth gecontroleerde LED Wearable met Intel Edison

Bluetooth gecontroleerde LED Wearable met Intel Edison

Heb je ooit gedacht een wereld waar u het patroon van een jurk met een druk op de knop kunt wijzigen? Of een te kunnen veranderen de hoogte van een zoom met swipe van je vinger? Technologie maakt controle en aanpassing mogelijk op plaatsen waar meest
Intel Edison: Opzetten van Stepper Motor

Intel Edison: Opzetten van Stepper Motor

Stappenmotoren zijn een speciaal type elektromotor die kunnen worden gebruikt voor het manoeuvreren van de precisie. Zelfs een kleine stappenmotor kan produceren een heleboel koppel, waardoor het een waardevolle toevoeging aan de Grove Starter Kit op
Lightsaber met behulp van Intel Edison

Lightsaber met behulp van Intel Edison

Op dit Instructable, zal ik delen hoe ik mijn eigen Lightsaber met een Intel Edison board, een goedkoop speelgoed van de Jedi Lightsaber en een aantal adresseerbare RGB LED's gebouwd.Dit was onderdeel van een uitdaging dat Pacman Pereira naar alle Br
Telefoon gecontroleerd garagedeur, aangedreven door Intel Edison Blynk & Arduino

Telefoon gecontroleerd garagedeur, aangedreven door Intel Edison Blynk & Arduino

Geautomatiseerde producten heeft meer gemeengoed geworden en oplossingen die zijn goedkoop bestaat in sommige gebieden, een voorbeeld zou overdekt bliksem of Automatische timers. Maar als u wilt dat een garagedeur die kan worden geopend met een telef
MCU-1: Een prijsbewuste Intel Edison MCU gebaseerd Rover speelgoedauto. (Intel IoT)

MCU-1: Een prijsbewuste Intel Edison MCU gebaseerd Rover speelgoedauto. (Intel IoT)

Kleine weergegeven video: obstakel te vermijden en weinig knop gebaseerde opdrachten via bluetooth.Stap 1: samenvattingDit project zal het bouwen van een eenvoudige rover auto die kan worden gecontroleerd door een Androïde slimme app met behulp van s
Light Plotter with Intel Edison

Light Plotter with Intel Edison

IntroductieIk was blij te worden geselecteerd als een onderdeel van de Intel Edison IoT invitational hier op Instructables (Overweeg stemmen als u bevalt!). Het project voorgesteld was een geautomatiseerde "lichte kunstschilder" die stappenmotor
MIDI SoundFont-synthetizer met Intel Edison en Fluidsynth

MIDI SoundFont-synthetizer met Intel Edison en Fluidsynth

Op dit Instructable, zal ik laten zien hoe te bouwen uw eigen MIDI SoundFont -synthesizer met behulp van Intel Edison en Fluidsynth.Door het volgen van de stappen die hier worden beschreven, moet u een synthesizer die vrijwel elk SoundFont spelen kan
Gebaar gebaseerd Home Automation met behulp van Intel Edison (Intel IoT))

Gebaar gebaseerd Home Automation met behulp van Intel Edison (Intel IoT))

Gebaar gebaseerd huisautomatisering is de nieuwe manier om te interageren met elektrische apparaten beschikbaar in ons huis. In dit project we zullen worden met behulp van sensoren in plaats van de camera voor gebaar erkenning, omdat het biedt betere
Intel Edison, nabijheid geactiveerd, spreken kalender

Intel Edison, nabijheid geactiveerd, spreken kalender

(Boven is een Video - maar kan niet op een mobiele telefoon. Klik hier om te bekijken op youtube. )Dit project werd gepland als een Ondersteunende technologie apparaat voor verzorgers van mensen met Geheugenstoornissen. Het is een wandmodel kalender
Intel Edison - Robot

Intel Edison - Robot

Geruime tijd geleden ik een Arduino Robot gebouwd en vervolgens een upgrade dat naar een betere versie die veel sneller was, na het experimenteren met de Intel Edison heb ik besloten om de Arduino robot een upgrade en vervanging van de Arduino met de
Met behulp van de Intel Edison op een koud gassysteem voor de controle van de reactie voor een raket klinkende

Met behulp van de Intel Edison op een koud gassysteem voor de controle van de reactie voor een raket klinkende

Wat is het doel van het maken van een controlesysteem reactie?Conventionele houding controlesystemen voor amateur-raketten gebruikt bijgevoegde vinnen, die stabiliteitscontrole van de passieve bieden. Voor het uitvoeren van actieve stabilisatie en ma