Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
// Definition des pins des capteurs et actionneurs
#define capteur_hum_sol A0 //capteur humidite sol a connecter sur le A0
#define pin_hum_sol 2 //connecter le + du capteur humidite sol
#define pompe 3 //connecter le S du relais sur la pin 3, il controle la pompe
#define electrovanne 4 //connecter le S du relais sur la pin 4, il controle l'electrovanne
#define capteur_reservoir 5 //connecter le capteur de niveau d'eau
//Déclaration des variables du programme
int valeur_hum_sol = 0; // on stocke les valeurs lu par le capteur d'humidité sol
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7); // 0x27 is the I2C bus address for an unmodified backpack
void setup ()
{
Serial.begin(9600);
// activate LCD module
lcd.begin (16, 2); // for 16 x 2 LCD module
lcd.setBacklightPin(3, POSITIVE);
lcd.setBacklight(HIGH);
pinMode(capteur_hum_sol, INPUT);
pinMode(capteur_reservoir, INPUT);
pinMode(pin_hum_sol, OUTPUT);
pinMode(pompe, OUTPUT);
pinMode(electrovanne, OUTPUT);
////////////////////////////////////// configuration de l'horloge //////////////////////////////////////
if (! rtc.begin())
{
Serial.print("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning())
{
Serial.print("RTC is NOT running!");
}
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//auto update from computer time
//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));// configurer manuellement l'heure
////////////////////////////////////////////////////////////////////////////////////////////////////////
}
void loop ()
{
// on lit l'heure sur le rtc
DateTime now = rtc.now();
//on lance le debug pour verifier si il ya pas de probleme
Debug();
affiche_lcd();
//on test si il est heure d'arroser
if ((now.hour() == 20 ) && (now.minute() == 02))
{
if ( digitalRead(capteur_reservoir) == 1) // on test si le reservoir d'eau est remplit
{
arroser();
}
else // sinon on envoie un message alert que le reservoir est vide
{
Serial.print(" le reservoir est vide ");
}
}
}
////////////////////////////////////// fonction arroser //////////////////////////////////////
void arroser () {
digitalWrite(pin_hum_sol, HIGH); // on allume le capteur
do {
//on lit 10 fois le capteur
for (int i = 0; i < 10; i++)
{
valeur_hum_sol = analogRead(capteur_hum_sol); // on lit la valeur analogique du capteur
}
///////////////////// on test le sol si il est mouille ou pas et on action ou pas les moteurs /////////////////////
if (valeur_hum_sol > 500 )
{
digitalWrite(electrovanne, HIGH); // on allume electrovanne
delay(500); // on attend 500ms
digitalWrite(pompe, HIGH); // on allume la pompe
}
}
while (valeur_hum_sol > 500); // tant que le sol est sec on arrose
if (valeur_hum_sol < 500 ) // si le sol est mouille
{
digitalWrite(electrovanne, LOW); // on eteind l'electrovanne
digitalWrite(pompe, LOW); // on eteind la pompe
digitalWrite(pin_hum_sol, LOW); // on eteind le capteur
}
}
////////////////////////////////////// Débug //////////////////////////////////////
void affiche_lcd()
{
DateTime now = rtc.now();
lcd.home (); // set cursor to 0,0
lcd.print(now.hour());
lcd.print(':');
lcd.print(now.minute());
lcd.print(':');
lcd.print(now.second());
lcd.print(" ");
}
void Debug()
{
DateTime now = rtc.now();
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.print(now.second());
Serial.print(" ");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(" ,");
Serial.print(now.day());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.year());
Serial.print(" valeur humidite sol ");
Serial.println(valeur_hum_sol);
delay(1000);
}