Etape 11 : Donner le contrôle de Garduino
inclure la bibliothèque datetime, donc nos garduino pouvez garder une trace de combien de temps les lumières sont allumées
#include < DateTime.h >
définir des entrées analogiques à laquelle nous avons branché nos capteurs
int moistureSensor = 0 ;
lightSensor int = 1 ;
int tempSensor = 2 ;
définir les sorties numériques à laquelle nous avons connecte notre relais (eau et lumière) et LED (température)
pompe à eau int = 7 ;
lightSwitch int = 8 ;
tempLed int = 2 ;
définir des variables pour stocker des valeurs de température, la lumière et l’humidité
int moisture_val ;
int light_val ;
int temp_val ;
décider combien d’heures de lumière vos plantes devraient recevoir tous les jours
float hours_light_daily_desired = 14 ;
calculer les heures souhaitées de la lumière totale et supplémentaire quotidien basé sur au-dessus des valeurs
float proportion_to_light = hours_light_daily_desired / 24 ;
float seconds_light = 0 ;
float proportion_lit ;
installer une variable pour stocker secondes depuis l’arduino en marche
flotteur start_time ;
float seconds_elapsed ;
float seconds_elapsed_total ;
float seconds_for_this_cycle ;
void setup() {}
ouvrir le port série
Serial.Begin(9600) ;
mettre l’eau, la lumière et goupilles de température comme sorties qui sont éteints
pinMode (pompe à eau, sortie) ;
pinMode (lightSwitch, sortie) ;
pinMode (tempLed, sortie) ;
digitalWrite (pompe à eau, faible) ;
digitalWrite (lightSwitch, faible) ;
digitalWrite (tempLed, faible) ;
établir l’heure de début
start_time = DateTime.Now.ToString ;
seconds_elapsed_total = 0 ;
}
void loop() {}
lire la valeur dans les sondes de détection de l’humidité, l’imprimer à l’écran et attendez une seconde
moisture_val = analogRead(moistureSensor) ;
Serial.Print ("l’humidité capteur reads") ;
Serial.println (moisture_val) ;
Delay(1000) ;
lire la valeur de la sonde de lumière, l’imprimer à l’écran et attendez une seconde
light_val = analogRead(lightSensor) ;
Serial.Print ("lectures de capteur de lumière") ;
Serial.println (light_val) ;
Delay(1000) ;
lire la valeur de la sonde de température, l’imprimer à l’écran et attendez une seconde
temp_val = analogRead(tempSensor) ;
Serial.Print ("lectures de capteur de température") ;
Serial.println (temp_val) ;
Delay(1000) ;
Serial.Print ("total secondes =") ;
Serial.println (seconds_elapsed_total) ;
Delay(1000) ;
Serial.Print ("secondes allumés =") ;
Serial.println (seconds_light) ;
Delay(1000) ;
Serial.Print (« proportion désirée = ") ;
Serial.println (proportion_to_light) ;
Delay(1000) ;
Serial.Print (« proportion atteinte = ") ;
Serial.println (proportion_lit) ;
Delay(1000) ;
transformer l’eau lorsque le sol est sec et retarder jusqu'à ce que le sol est humide
Si (moisture_val < 850)
{
digitalWrite (pompe à eau, haut) ;
}
tandis que (moisture_val < 850)
{
Delay(10000) ;
Merci à JoshTW pour la correction suivante, importante
moisture_val = analogRead(moistureSensor) ;
}
digitalWrite (pompe à eau, faible) ;
mise à jour de temps et d’incrémentation seconds_light si les lumières sont allumées
seconds_for_this_cycle = DateTime.Now.ToString - seconds_elapsed_total ;
seconds_elapsed_total = DateTime.Now.ToString - start_time ;
Si (light_val > 900)
{
seconds_light = seconds_light + seconds_for_this_cycle ;
}
les journées nuageuses qui obtiennent ensoleillées encore une fois : éteindre les lumières arrière si light_val est supérieur à 900. Cela fonctionne b/c les feux supplémentaires ne sont pas aussi brillantes que le soleil:)
Si (light_val > 900)
{
digitalWrite (lightSwitch, faible) ;
}
éteindre les lumières si proportion_lit > proportion_to_light, puis attendez 5 minutes
Si (proportion_lit > proportion_to_light)
{
digitalWrite (lightSwitch, faible) ;
retard (300000) ;
}
comprendre quelle est la proportion des lumières de temps ont été sur
proportion_lit = seconds_light/seconds_elapsed_total ;
Allumez les phares si light_val est inférieur à 900 et plantes ont lumière proportion désirée moins de temps, puis attendent 10 secondes
Si (light_val < 900 et proportion_lit < proportion_to_light)
{
digitalWrite (lightSwitch, HIGH) ;
Delay(10000) ;
}
voyant d’alarme de température s’allume si temp_val est inférieur à 850 (environ 50 degrés Fahrenheit)
Si (temp_val < 850)
{
digitalWrite (tempLed, élevé) ;
}
}
Notez l’inclusion de la bibliothèque datetime, vous pouvez installer à partir ici. Placez le contenu du fichier dans le répertoire des bibliothèques du dossier arduino et vous devriez être bon d’aller. Consultez le fichier readme dans le téléchargement si vous rencontrez des problèmes.
Suivi doit être grandement amélioré, comme Garduino doit rester là à ne rien faire la plupart du temps quand il ne fonctionne pas correctement. Vous devriez être en mesure de tirer sur les capteurs d’humidité du sol et de les allumer en quelques secondes (air = 0 conductivité entre eux), mais vous ne pouvez pas faire cela avec le capteur de lumière : il est juste essayer d’allumer pendant 16 heures toutes les 24 heures. Actuellement, brancher votre Arduino sur votre ordinateur, puis en surveillant le port série vous donnera quelques réactions significatives. Mais, cela réinitialise le compteur de temps à 0, si vous n’obtenez aucune donnée historique utile sauf si vous laissez le Garduino avec un ordinateur connecté au cours de la période que vous souhaitez surveiller...