Bonjour,
Arrosez vos plantes, avec juste ce qu’il faut, lorsque vous êtes absents
Comment vont tenir mes plantes en mon absence ? Question fréquente en période de vacances.
À défaut de charger quelqu’un d’y veiller, il existe de petits automates programmables qui peuvent servir. Le risque est cependant d’utiliser trop d’eau ou pas assez.Seul la mesure de l’humidité de la terre permet de doser correctement l’arrosage .
Par chance, il existe dans le monde Arduino un capteur efficace et bon marché qui peut servir. Il s'agit du Capteur d'Humidité du Sol Module Capacitif Hygromètre V1.2 AZDelivery compatible avec Arduino et Raspberry.
En relation avec un Arduino Nano, un barre-graphe d’affichage, un module relais statique, une petite pompe et un bloc d’alimentation, on peut faire passer d’un réservoir à la plante juste la quantité d’eau qui lui est nécessaire. Le tout dans le volume très réduit d’un morceau de moulure électrtique. Le barre-graphe et le pot. de réglage viendront en superposition.
Le schéma de câblage saisi avec Kicad es le suivant :
Et le programme implanté par l’IDE d’Arduino est donné ci-après :
//initialisation capteur
const int dry = 680; // seuil du capteur pour terre sèche 595 en principe
const int wet = 270; // seuil du capteur pour terre humide 239 en principe
void setup()
{
// analogique A5 : Sonde
// analogique A6: Consigne
pinMode(2, OUTPUT); //led rouge très sec
pinMode(3, OUTPUT); //led rouge sec
pinMode(4, OUTPUT); //led orange moyen-
pinMode(5, OUTPUT); //led orange moyen
pinMode(6, OUTPUT); //led orange moyen+
pinMode(7, OUTPUT); //led verte humide-
pinMode(8, OUTPUT); //led verte humide
pinMode(9, OUTPUT); //led verte humide+
pinMode(10, OUTPUT); //led verte très humide
pinMode(11, OUTPUT); //led verte très humide+
pinMode(12, OUTPUT); //led violet Humid 100%
pinMode(13, OUTPUT); //commande pompe
/* Serial.begin(9600); // decommenter pour mise au point */
}
void loop() {
delay(40);
// réacquisition de l'humidité
int sensorVal = analogRead(A5);
int humid1 = map(sensorVal, wet, dry, 100, 0);
sensorVal = analogRead(A6);
int humid2 = map(sensorVal, wet, dry, 100, 0);
/* Serial.print(humid1);
Serial.print(" ");
Serial.println(humid2); //décommenter pour mise au point
delay(1500);
*/
int i;
bool ouvre = false;
if (humid1 <= 10) {
digitalWrite(2, LOW);
}
else {
digitalWrite(2, HIGH);
}
if (humid1 > 10 && humid1 <= 20) {
digitalWrite(3, LOW);
}
else {
digitalWrite(3, HIGH);
}
if (humid1 > 20 && humid1 <= 30) {
digitalWrite(4, LOW);
}
else {
digitalWrite(4, HIGH);
}
if (humid1 > 30 && humid1 <= 40) {
digitalWrite(5, LOW);
}
else {
digitalWrite(5, HIGH);
}
if (humid1 > 40 && humid1 <= 50) {
digitalWrite(6, LOW);
}
else {
digitalWrite(6, HIGH);
}
if (humid1 > 50 && humid1 <= 60) {
digitalWrite(7, LOW);
}
else {
digitalWrite(7, HIGH);
}
if (humid1 > 60 && humid1 <= 70) {
digitalWrite(8, LOW);
}
else {
digitalWrite(8, HIGH);
}
if (humid1 > 70 && humid1 <= 80) {
digitalWrite(9, LOW);
}
else {
digitalWrite(9, HIGH);
}
if (humid1 > 80 && humid1 <= 90) {
digitalWrite(10, LOW);
}
else {
digitalWrite(10, HIGH);
}
if (humid1 > 90 ) {
digitalWrite(11, LOW);
}
else {
digitalWrite(11, HIGH);
}
if (humid1 < humid2)
{
digitalWrite(13, HIGH);
}
else
{
digitalWrite(13, LOW);
}
}