Garduino: Trädgårdsskötsel + Arduino (11 / 14 steg)
Steg 11: Ge Garduino kontroll
inkludera datetime biblioteket, så att våra garduino kan hålla koll på hur länge lamporna är tända
#include < DateTime.h >
definiera analoga ingångar som vi har anslutit vår sensorer
int moistureSensor = 0;
int lightSensor = 1;
int tempSensor = 2;
definiera digitala utgångar som vi har kopplet våra reläer (vatten och ljus) och LED (temperatur)
int packningssats = 7.
int lightSwitch = 8.
int tempLed = 2;
definiera variabler för att lagra fukt, ljus och temperatur värden
int moisture_val;
int light_val;
int temp_val;
bestämma hur många timmar av ljus dina växter bör få dagligen
flyta hours_light_daily_desired = 14.
beräkna önskad timmars ljus totalt och kompletterande dagligen baserat på ovan värden
flyta proportion_to_light = hours_light_daily_desired / 24;
flyta seconds_light = 0;
float proportion_lit;
setup en variabel för att lagra sekunder sedan arduino påslagen
float starttid;
float seconds_elapsed;
float seconds_elapsed_total;
float seconds_for_this_cycle;
void setup() {
Öppna serieporten
Serial.BEGIN(9600);
Ange den vatten, ljus och temperatur pins som utgångar som är avstängda
pinMode (packningssats, produktionen);
pinMode (lightSwitch, produktionen);
pinMode (tempLed, utgång);
digitalWrite (packningssats, låg);
digitalWrite (lightSwitch, låg);
digitalWrite (tempLed, låg);
upprätta starttid
start_time = DateTime.now();
seconds_elapsed_total = 0;
}
void loop() {
läsa värdet från de fukt-sensing sonderna, skriva ut den till skärmen och vänta en sekund
moisture_val = analogRead(moistureSensor);
Serial.Print ("fukt sensor läsningar");
Serial.println (moisture_val);
Delay(1000);
läsa värdet från photosensor, skriva ut den till skärmen och vänta en sekund
light_val = analogRead(lightSensor);
Serial.Print ("ljussensor läsningar");
Serial.println (light_val);
Delay(1000);
läsa värdet från temperaturgivare, skriva ut den till skärmen och vänta en sekund
temp_val = analogRead(tempSensor);
Serial.Print ("tempsensor läsningar");
Serial.println (temp_val);
Delay(1000);
Serial.Print ("sekunder totalt =");
Serial.println (seconds_elapsed_total);
Delay(1000);
Serial.Print ("sekunder lyser =");
Serial.println (seconds_light);
Delay(1000);
Serial.Print ("andel önskas =");
Serial.println (proportion_to_light);
Delay(1000);
Serial.Print ("andel uppnåtts =");
Serial.println (proportion_lit);
Delay(1000);
slå vatten på när jorden är torr, och skjuta tills jorden är våt
om (moisture_val < 850)
{
digitalWrite (packningssats, hög);
}
samtidigt (moisture_val < 850)
{
Delay(10000);
Tack till JoshTW för följande, viktiga korrigeringen
moisture_val = analogRead(moistureSensor);
}
digitalWrite (packningssats, låg);
uppdatera tid och öka seconds_light om lamporna är tända
seconds_for_this_cycle = DateTime.now() - seconds_elapsed_total;
seconds_elapsed_total = DateTime.now() - start_time;
om (light_val > 900)
{
seconds_light = seconds_light + seconds_for_this_cycle;
}
molniga dagar att få soligt igen: förvandla belysningen tillbaka om light_val överstiger 900. Detta fungerar b/c extra lampor är inte lika ljus som solen:)
om (light_val > 900)
{
digitalWrite (lightSwitch, låg);
}
stänga av lampor om proportion_lit > proportion_to_light, och sedan vänta 5 minuter
om (proportion_lit > proportion_to_light)
{
digitalWrite (lightSwitch, låg);
fördröjning (300000);
}
räkna ut hur stor del av tiden ljus har varit på
proportion_lit = seconds_light/seconds_elapsed_total;
sätta ljus på om light_val är mindre än 900 och växter har ljus för mindre än önskad del av tid och vänta 10 sekunder sedan
om (light_val < 900 och proportion_lit < proportion_to_light)
{
digitalWrite (lightSwitch, hög);
Delay(10000);
}
slå på temp larm ljus om temp_val är mindre än 850 (ca 50 grader Fahrenheit)
om (temp_val < 850)
{
digitalWrite (tempLed, hög);
}
}
Observera att uppta datetime biblioteket, som du kan installera från här. Placera innehållet i filen i katalogen bibliotek för arduino mappen och du borde hjälpe till gå. Se README-filen i nedladdningen om du stöter på problem.
Övervakningen måste bli mycket bättre, som Garduino bör sitta där gör ingenting för det mesta när det fungerar. Du bör kunna dra fukt sensorer i marken och har dem slå på några sekunder (luft = 0 ledningsförmåga mellan dem), men du kan inte göra detta med ljussensorn: det är bara försöker slå på i 16 timmar per dygn. För närvarande, ger ansluta din Arduino till datorn och sedan övervaka den seriella porten dig några meningsfulla feedback. Men detta återställs räknaren tid till 0, så du inte får någon användbar historiska data om du lämnar Garduino med en dator ansluten under den period som du vill övervaka...