Optimisation de la ponte de mes poules

Bonjour à tous,

Je travail sur un projet qui consiste a éclairer l’intérieur de mon poulailler dans le but de permettre à mes poules d'avoir un cycle de ponte régulier.

Je m'explique, à l'aide d'une arduino je voudrai allumer une lampe, notamment en hiver pour que mes poules ai le sentiment que le jour dure 12 heures.
Par exemple, si le jour a duré 9 heures, ma lampe doit s'allumer 12-9 = 3 heures.

Je n'ai trouvé aucune réalisation existante par rapport à ce cahier des charges, j'ai quelques bases en programmation arduino mais dans le cas présent je ne sais comment m'y prendre, si je doit utiliser une RTC, une photorésistance ou autre. :confused:

Voilà merci d'avance :slight_smile:

La RTC me semble la solution la plus adaptée : tu peux choisir un intervalle de temps pendant lequel la lampe est allumée qui reste constant quelles que soient la saison, les conditions météo, les conditions lumineuses, etc. Par exemple, tu le programmes pour un allumage à 7h00 et une extinction à 19h00. Mais c’est plus simple d’acheter une prise programmable.

+1
Une RTC en français c'est une horloge avec une pile qui continue à alimenter le circuit intégré de "la tocante" quand le micro n'est pas alimenté.
On trouve très facilement des modules tout assemblés.

Attention:
Dans la littérature on parle encore trop souvent de DS1307 ----> tu fuis ce modèle.
En 2018 il faut prendre un DS3231 (du même fabricant que le ds1307) qui est est plus précis et vendu au même prix. Tu n 'aura aucune difficulté pour trouver une bibliothèque qui le gére des plus compliquées aux plus simples mais tout aussi efficaces, voir dans la rubrique tuto et cours "les tuto du Bricoleau" .

lesept:
La RTC me semble la solution la plus adaptée : tu peux choisir un intervalle de temps pendant lequel la lampe est allumée qui reste constant quelles que soient la saison, les conditions météo, les conditions lumineuses, etc. Par exemple, tu le programmes pour un allumage à 7h00 et une extinction à 19h00. Mais c'est plus simple d'acheter une prise programmable.

oui pour la RTC mais s'il y a la lumière du jour ce n'est pas la peine d'allumer la lumière - donc il faut aussi un capteur de luminosité

Pour l'algo c'est pas très compliqué, il faut définir une plage pendant laquelle vous voulez "qu'il fasse jour" (9h à 18h par exemple) dans le poulailler toute l'année et le code va dire :

SI je suis dans la plage horaire ET que la luminosité ambiante est plus faible que xxx
alors allumer la lumière
sinon si la luminosité ambiante est supérieure à (xxx + hysteresis) alors éteindre la lumière

(une prise programmable avec détecteur de jour fait aussi le job)

bonjour,
une RTC? je vois pas l'intérêt, c'est pas ce module qui dit s'il fait jour ou non.
un capteur de luminosité, oui
la lib time, suffit
le capteur prend l'heure de début du jour par rapport au seuil fixé, il prend le seuil de la nuit, un petit calcul et on allume la lumière pour avoir les 12h.

Tout d’abord merci pour vos réponses si rapide,

Comme l’a dit J-M-L si il y à la lumière du jour il est inutile d’allumer la lampe,
J’ai en ma possession un DS3231 et une photorésistance j’ai donc télécharger la libraire " RTClib de Adafruit" se qui me permet de connaitre l’heure qu’il est et me l’affiche sur le moniteur série , voici le code :

#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};

void setup () {

#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  Serial.begin(9600);

  delay(1000); 

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    
     rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //  définit le RTC sur la date et l'heure à laquelle cette esquisse a été compilée
     //rtc.adjust(DateTime(2018, 04, 05 , 9 , 39, 0)); // définit le RTC avec une date et une heure que l'on peut choisir
    // ( année , mois , jours , heure format americain, minutes , secondes ) 
  }
}

void loop () {
    DateTime now = rtc.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    delay(1000);
}

Or je ne sais quel valeur utiliser mettre dans mon “if” pour vérifier si je suis bien dans la bonne plage horaire. :sweat_smile:

Encore merci :smiley:

N_Phlp:
Or je ne sais quel valeur utiliser mettre dans mon “if” pour vérifier si je suis bien dans la bonne plage horaire. :sweat_smile:

Créez deux DateTime, un pour l’heure de début (startTime) et un pour l’heure de fin (endTime) et la classe DateTime permet les comparaison if (now >= startTime && now <= endTime) { .... }


corrigez votre post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l’IDE avant de copier le code pour qu’il soit indenté correctement)

Pouvez-vous éditer et mettre le code dans les balises``

Je ne vois pas l'intérêt de gaspiller de l'éclairage. Mes poules pondent très bien l'hiver, du moment qu'elles sont bien nourries et au sec. Par contre, leur ouvrir la porte dès qu'il fait jour leur permet de gambader dès qu'elles le souhaitent. :wink:

C'est plutôt les périodes de grand froid et de mue qui impactent la ponte.

Quel est le microcontrôleur que tu utilises ?

Je ne parviens pas a créer deux DateTime, je gère mal la fonction DateTime, le code qui présente une erreur étant :

#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
int startTime ;
int endTime ;

void setup () {

#ifndef ESP8266
 while (!Serial); // for Leonardo/Micro/Zero
#endif

 Serial.begin(9600);
 pinMode( 13 , OUTPUT );
 delay(1000);

 if (! rtc.begin()) {
   Serial.println("Couldn't find RTC");
   while (1);
 }

 if (rtc.lostPower()) {

   rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //  définit le RTC sur la date et l'heure à laquelle cette esquisse a été compilée
   //rtc.adjust(DateTime(2018, 04, 05 , 9 , 39, 0)); // définit le RTC avec une date et une heure que l'on peut choisir
   // ( année , mois , jours , heure format americain, minutes , secondes )
   startTime = (DateTime(2018, 04, 06 , 4 , 40, 0)) ;
   endTime = (DateTime(2018, 04, 06 , 5 , 40, 0)) ;
 } 
}

void loop () {
 DateTime now = rtc.now();

 Serial.print(now.year(), DEC);
 Serial.print('/');
 Serial.print(now.month(), DEC);
 Serial.print('/');
 Serial.print(now.day(), DEC);
 Serial.print(" (");
 Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
 Serial.print(") ");
 Serial.print(now.hour(), DEC);
 Serial.print(':');
 Serial.print(now.minute(), DEC);
 Serial.print(':');
 Serial.print(now.second(), DEC);
 Serial.println();

 delay(1000);

 if (now >= startTime && now <= endTime) {

   digitalWrite( 13 , HIGH );
 }
}

J’utilise une carte arduino Uno

Avec 3 post Vous êtes un vétéran maintenant...

plus de réponse si pas vous ne corrigez vos post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

Regarde l'exemple datecalc de la bibliothèque RTCLib. Les lignes :

    TimeSpan ts1 = dt6 - dt5;
    showTimeSpan("dt6-dt5", ts1);

comparent deux dates en calculant le temps passé entre elles. Je pense que ce qui t'intéresse c'est :

    Serial.print(ts.totalseconds(), DEC);

ça doit donner le nombre de secondes entre les deux dates : tu le compares à 0 pour deux différences

TimeSpan Temps_ecoule_depuis_allumage = StartTime - rtc.now();
TimeSpan Temps_restant_avant_extinction = EndTime - rtc.now();
T1 = Temps_ecoule_depuis_allumage.totalseconds();
T2 = Temps_restant_avant_extinction.totalseconds();

Quand T1 devient positif, il faut allumer, quand T2 devient négatif, il faut éteindre. Il y a sûremetn d'autres solutions possibles.

d’ailleurs les dateTime ne sont pas obligatoires car ils continent le jour exact donc faut les initialiser tous les jours… le plus simple et de comparer les heures et minutes sans doute

on peut utiliser une RTC sans mesure de luminosité.
Il suffit de modéliser la durée du jour par une sinusoïde de période ... 1 an.
En calant le maxi sur le 21 juin.
Pour l'amplitude, un peu de recherche permet de trouver les heures de l'aube et du crépuscule selon la date.
(C'est la solution du mec qui est plus matheux et programmeur qu'électronicien :slight_smile: )

biggil:
on peut utiliser une RTC sans mesure de luminosité.
Il suffit de modéliser la durée du jour par une sinusoïde de période ... 1 an.
En calant le maxi sur le 21 juin.
Pour l'amplitude, un peu de recherche permet de trouver les heures de l'aube et du crépuscule selon la date.
(C'est la solution du mec qui est plus matheux et programmeur qu'électronicien :slight_smile: )

et le matheux (que je suis aussi) aurait-il oublié que parfois il fait très gris / gros nuages noirs toute la journée ? :))
dans ces cas je suppose qu'il faut de la lumière aussi pour les poules?

perso j'y connais rien, j'achète mes oeufs sur le marché :slight_smile:

J-M-L:
dans ces cas je suppose qu'il faut de la lumière aussi pour les poules?

oui bon, les poules ne sont pas des plantes non plus !

Bonjour,
Cela peut-être intéressant techniquement et un cauchemar pour les poules qui vont rentrer parce que la nuit tombe … dans un local éclairé, alors qu’elles se préparaient psychologiquement à s’endormir :money_mouth_face:

Les miennes ont une trappe qui se ferme et s’ouvre en fonction de la luminosité. J’ai déjà constaté que l’été elles ne se précipitaient pas sur la sortie à l’aube. Elles doivent réguler leur métabolisme en fonction de leurs besoins et pas que sur la durée du jour.

Qu’est-ce qui vous fait penser que ça va optimiser leur ponte ?