Arrosage de plantes de balcon solaire avec electrovannes

Bonjour,

Je débute en arduino, mais j'ai de bonnes notions en electronique et en developpement aussi.

J'ai donc pour but de realiser un arrosage automatique de mes deux jardinières de balcons, et par la suite, alimenter tout ca avec un paneau solaire.

Dans l'idee, je souhaites que mon arduino detecte si le ou les jardinieres ont besoin d'eau, et arroser à partir de 20H le ou les pots concernés.

Pour ca j'ai :

  • 1 Arduino (educaduino atmega)
  • 2 sondes d'humidité de sol
  • 1 platique 4 relays
  • 1 horloge RTC
  • 1 pompe + 2 electronvannes en 12v
  • 1 ecran LCD

J'ai monté une platine de test avec tous les composants (en PJ). Le code entier est en PJ aussi.

Tout ca pour dire que j'ai un petit soucis de developpement. Comme dit plus haut, je souhaite declencher mon arrosage à 20h, mais je ne trouves pas comment faire une condition sur l'heure en elle-même, je me retrouves avec des soucis de variables...

Voici l'endroit du code concerné :

void loop () {

//Affiche l'heure et la temperature quand le système attends l'heure prévu

  if (!Rtc.IsDateTimeValid()) 
    {
        // Common Cuases:
        //    1) the battery on the device is low or even missing and the power line was disconnected
        Serial.println("RTC lost confidence in the DateTime!");
    }

    RtcDateTime now = Rtc.GetDateTime();
    printDateTime(now);   


    RtcTemperature temp = Rtc.GetTemperature();
    lcd.setCursor(0,1);
    lcd.print(temp.AsFloat(),1);
    lcd.print("C");
    delay(1000); // 1 seconds
    lcd.clear(); 

//Test de l'heure de départ, a completer

if (test == 1) // Test et declenche le programme quand il est 20h. A COMPLETER
{

Je voudrais que dans le IF mon heure soit comparé..

La fonction qui me donne l'heure est :

//FONCTION Affichage heure
#define countof(a) (sizeof(a) / sizeof(a[0]))
void printDateTime(const RtcDateTime& dt)
{
    char datestring[9];

    snprintf_P(datestring, 
            countof(datestring),
            PSTR("%02u:%02u:%02u"),
            //dt.Month(), //ASUPR
            //dt.Day(),  //ASUPR
            //dt.Year(),  //ASUPR
            dt.Hour(),
            dt.Minute(),
            dt.Second() );
    //Serial.print(datestring);
    lcd.print(datestring);
}

Voila tout, donc si une ame charitable peut me donner un petit coup de main ce serait bienvenue :)

Merci par avance !

Salut,

Tu utilises quel module RTC, il faut affecté une variable à l'heure puis faire un test.

J'utilise un module RTC DS3231 plus la bibliothèque qui va bien, puis quand celui-ci est la bonne date et heure, on récupère l'heure , minutes, secondes , etc avec hour(),minute(), voir exemple ci dessous.

heures=hour(); minutes = minute(); secondes =second();

if (hour()==00 && minute()==00) { ....

}

Le code complet est : http://forum.arduino.cc/index.php?topic=335928.0

Voila @+

Bonjour !

Merci pour la réponse rapide.

J’utilise celle ci : http://www.banggood.com/DS3231-Precision-RTC-Memory-Module-For-Arduino-p-969040.html

donc une DS3231 avec la lib :<RtcDS3231.h>

Je vais regarder ce que tu m’as envoyé et tenter de faire un truc avec :wink:

Ps : la photo n’etait pas passé, la voici en pj.

Oups, le code non plus…

Arrosage.ino (6.33 KB)

Alors j’ai retenté avec la lib proposé au dessus (qui à l’air plus simple au passage).

Je me suis inspiré de ton code pour faire quelque chose qui fonctionne, mais à la compilation j’ai le soucis suivant :

exit status 1
‘setSyncProvider’ was not declared in this scope

Pourtant j’ai suivis les indications, une idée du pourquoi il ne trouve pas cette fonction ?

J’ai les libs
#include <LiquidCrystal.h>
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>

(Code entier en PJ)

Salut,

Il y a une accolade en trop à la ligne 83, après suppression de celle-ci pas de soucis pour compiler, quelle version IDE utilises tu ?.

@+

Bonjour,

Effectivement pour l'accolade, bien vu ! Merci

Par contre j'arrive toujours pas à compiler, même erreur qu'au dessus. J'ai vérifier si j'avais pas une autre faute qui traine, mais j'ai pas vu grand chose.

J'utilise le soft classic en 1.6.9, j'ai DL la Lib RTC sur le lien donné dans ton programme, donc elle est a priori à jour.

Je suis pas neuneu, mais la vraiment je comprends pas, surtout si tu arrives à compiler mon truc sans problèmes...

Sympas de m'aider en tout cas ;)

J'ai aussi la 1.6.9 DL sur arduino CC, et pas de soucis pour la compilation, bizarre la chose,

La vache, j’ai trouvé, c’est de ma faute.

Enfait il faut les deux libs <Time.h> <TimeLib.h>. Dans mon programme l’une fonctionne pas sans l’autre… (La lib est en v 1.5)

Comme elle n’est pas dans ton code je l’avais pas mise, mais quand je passe par le menu d’ajout de lib et que sélectionne Time, il me met les deux d’office.

Merci pour ton aide, j’ai fait le test, ça fonctionne parfaitement pour déclencher à la bonne heure :wink:

Tant mieux si ça fonctionne.

@+

Alors pour ceux que ça intéresse, j’ai terminé la V1, j’ai fais pas mal de chanchements, ça me semble fonctionnel, et ça fait ce dont j’ai envie.

Donc pour le moment ça fait :

  • Affiche l’heure et la température
  • Arrose à une heure programmé
  • Mesure le l’humidité dans le sol et choisit le ou les pots arroser (2 jardinières pour moi)

Les paramètres modifiables sont au début.
En tests rapides ça fonctionne, je vais faire l’essai quelques jours :slight_smile:

Arrosage_v1.0.ino (4.93 KB)

Salut,

Quand tu fais le test de la bonne heure, j'irais pas jusqu’à la seconde, c'est pas essentiel si le declenchement ne se fait pas à la seconde prés.

Salut !

Au début j’avais fait sans les secondes, mais le soucis c’est que si j’ai un arrosage qui dure moins d’une minute, (en fonction du débit de la pompe, si c’est un petit pot ou autre) ça fait une boucle, et ça arrose au final pendant une minute. J’ai donc joué la simplicité en ajoutant les secondes. Si t’as une autre solution je prends :wink:

Merci d’avoir soulevé ce point en tout cas !

Salut,

je parle de cette ligne :

if ((hour()==8 && minute()==00 && second()==00)||(hour()==23 && minute()==10 && second()==00)) // Si il est 8h00 ou 20h00 et que les interrupteurs sont en position basse.

Perso du moment que le programme commence bien à 8h00 ou à 23h10 c'est le principal, est ce super important si il commence à 8h00 et 20 s ??, car suivant le temps que va mettre la carte arduino à faire un cycle complet, il se peut que cette durée dépasse la seconde (peut probable), mais cela aura comme incidence un incrément sur les secondes > a 1s.

Donc il se pourrait que de manière plus au moins aléatoire , tu arrives à la situation suivante , ou tu passes de 7h59min59s à 8h00min01s et la le test if n'est plus vrais.

Le temps que va mettre l'arduino pour faire un cycle dépend aussi des capteurs mis en œuvres, car certain nécessitent un temps plus ou moins long pour retourner une information, donc cela impact le temps du cycle.

Voila, si cela fonctionne bien pour le moment pas de soucis, si tu a des choses bizarres qui se produisent , pense à ce que j'ai écris ci-dessus. @+