Stap 11: Garduino controle geven
omvatten de datetime-bibliotheek, zodat onze garduino kan bijhouden van hoe lang de lichten zijn op
#include < DateTime.h >
definiëren van analoge ingangen waarop wij onze sensoren hebben aangesloten
int moistureSensor = 0;
int lightSensor = 1;
int tempSensor = 2;
definiëren van digitale uitgangen waarnaar we connecte onze Relais (water en licht) en LED (temperatuur hebben)
int waterpomp = 7;
int lightSwitch = 8;
int timalia = 2;
variabelen voor het opslaan van vocht, licht en temperatuur waarden definiëren
int moisture_val;
int light_val;
int temp_val;
beslissen hoeveel uren van licht uw planten dagelijks moeten krijgen
zweven hours_light_daily_desired = 14;
gewenste uren van licht totale en aanvullend dagelijks op basis van bovenstaande waarden berekenen
zweven proportion_to_light = hours_light_daily_desired / 24;
zweven seconds_light = 0;
float proportion_lit;
instellen van een variabele om te slaan seconden sinds arduino ingeschakeld
float start_time;
float seconds_elapsed;
float seconds_elapsed_total;
float seconds_for_this_cycle;
VOID Setup {}
seriële poort openen
Serial.begin(9600);
instellen van het water, licht en temperatuur pinnen als uitgang die zijn uitgeschakeld
pinMode (waterpomp, OUTPUT);
pinMode (lightSwitch, OUTPUT);
pinMode (tempLed, uitvoer);
digitalWrite (waterpomp, laag);
digitalWrite (lightSwitch, laag);
digitalWrite (tempLed, laag);
stellen van de begintijd
start_time = DateTime.now();
seconds_elapsed_total = 0;
}
void loop {}
luiden naar de waarde van de vocht-sensing sondes, af te drukken op het scherm en wacht een seconde
moisture_val = analogRead(moistureSensor);
Serial.Print ("vocht sensor leest");
Serial.println (moisture_val);
delay(1000);
luiden naar de waarde van de photosensor, af te drukken op het scherm en wacht een seconde
light_val = analogRead(lightSensor);
Serial.Print ("lichtsensor leest");
Serial.println (light_val);
delay(1000);
luiden naar de waarde van de temperatuursensor, af te drukken op het scherm en wacht een seconde
temp_val = analogRead(tempSensor);
Serial.Print ("temp sensor leest");
Serial.println (temp_val);
delay(1000);
Serial.Print ("seconden totaal =");
Serial.println (seconds_elapsed_total);
delay(1000);
Serial.Print ("seconden verlicht =");
Serial.println (seconds_light);
delay(1000);
Serial.Print ("deel gewenst =");
Serial.println (proportion_to_light);
delay(1000);
Serial.Print ("percentage bereikt =");
Serial.println (proportion_lit);
delay(1000);
Zet water op wanneer de bodem droog is en uitstellen tot het moment dat de bodem nat is
Als (moisture_val < 850)
{
digitalWrite (waterpomp, hoge);
}
terwijl (moisture_val < 850)
{
delay(10000);
Dankzij JoshTW voor de volgende, belangrijke correctie
moisture_val = analogRead(moistureSensor);
}
digitalWrite (waterpomp, laag);
bijwerken van tijd en seconds_light te verhogen als de lichten op
seconds_for_this_cycle = DateTime.now() - seconds_elapsed_total;
seconds_elapsed_total = DateTime.now() - start_time;
Als (light_val > 900)
{
seconds_light = seconds_light + seconds_for_this_cycle;
}
bewolkte dagen die weer zonnig: uitschakelen van lichten terug als light_val meer dan 900. Dit werkt b/c de aanvullende lichten zijn niet zo helder als de zon:)
Als (light_val > 900)
{
digitalWrite (lightSwitch, laag);
}
uitschakelen van lichten als proportion_lit > proportion_to_light, en wacht vervolgens 5 minuten
Als (proportion_lit > proportion_to_light)
{
digitalWrite (lightSwitch, laag);
vertraging (300000);
}
erachter te komen welk percentage van de tijd verlichting geweest op
proportion_lit = seconds_light/seconds_elapsed_total;
verlichting inschakelen als light_val minder dan 900 is en planten licht minder dan gewenste deel van de tijd hebben, dan wacht 10 seconden
Als (light_val < 900 en proportion_lit < proportion_to_light)
{
digitalWrite (lightSwitch, hoge);
delay(10000);
}
temp alarm licht inschakelen als temp_val minder dan 850 (ongeveer 50 graden Fahrenheit is)
Als (temp_val < 850)
{
digitalWrite (tempLed, hoge);
}
}
Opmerking de opneming van de datetime-bibliotheek, die u vanaf installeren kunt hier. De inhoud van het bestand in de map bibliotheken voor de arduino map plaatsen en je moet goed om te gaan. Zie het Leesmij-bestand in de download als u problemen tegenkomt.
Toezicht moet aanzienlijk worden verbeterd, zoals ook Garduino moeten zitten niets doen de meeste van de tijd wanneer het goed werkt. U moet zitten kundig voor trekken de sensoren van de vocht uit de bodem en hebben ze binnen een paar seconden inschakelen (lucht = 0 geleidendheid tussen hen), maar u kunt dit niet met de lichtsensor: het gewoon proberen om in te schakelen voor 16 uur per etmaal. Op dit moment krijgt je Arduino aansluiten op de computer en vervolgens de controle van de seriële poort u enkele betekenisvolle feedback. Maar, dit is de tijdteller terugstellen aan 0, dus je krijgt niet elke nuttige historische gegevens, tenzij u de Garduino met een computer verbonden tijdens de periode die u wilt controleren...