Trappe poulaillier sans contacts fin de course

Bonjour,
Ça correspond à quoi ces 12 w ?
Je vais faire des tests avec ce panneau. Par chez nous y a pas beaucoup de soleil en ce moment.

Comme il n'est pas facile de détecter la fin de charge d'une batterie NIMH en solaire, j'ai pensé à un circuit de surveillance avec une commande via un bistable.

Commutation du panneau seulement quand la luminosité est suffisante.
A chaque réveil du mode économiseur, surveiller et comptabiliser le courant chargé.

Couper le panneau quand le quota de charge journalier est atteint.

Je n'ai pas mis le pont diviseur donnant la tension batterie. C'est un premier jet

Edit : en fait pas besoin de bistable, la commande reste figée en mode veille.

chargenimh.jpg

Bonjour,

ce ne serai pas 1,2W ? en faisan,t quelques recherche je ne trouve pas de photovoltaique de 12 w en 6V.
Si c'est 1,2W tu devrais atteindre les 200 ma.

Ca reste à confirmer, mais on peut tester l'ampérage qu'il fourni en court-cirtuit avec le multimetre.

Les miens sont mort et ne donnent que quelques microampère sauf 2, qui donnent 60 ma autour de 3v chacun, la tronche face au soleil.

Non, mon panneau est bien un : 2W

spécifications:

Matériel: carte de circuit imprimé + monocristallin silicone
Couleur: Noir
Nombre de cellules: 12
Max. courant: 330mA
Max. Tension: 6V
Max. puissance: 2W
Tension en circuit ouvert: 7.2V
Courant de court-circuit: 363mAh
tolérance actuelle: ± 10%
Batterie efficacité de conversion: 15%
Taille: Env. 5.31 * 4.33inch / 13.5 * 11cm

En guise de diode anti-retour, j'ai trouvé a transistor AC127 dans mes fonds de tiroir, tension de déchet 0,12 V, mieux qu'une schottky. :wink:

Bonjour , oui 2 w , désolé j'avais mal lue :o

Bon ça y est, j'ai mis en service le panneau solaire. Reste à voir comment se passe la charge.

Super, merci pour le partage, je me lance dans la création de votre montage.
Pouvez m'apporter des références facile à trouver, sur ebay par exemple, pour les transistors ?
Je ne suis pas un spécialiste dans les pont en H ;).
Merci

Bonjour,
Vous pouvez utiliser des transistors récupérés sur des cartes électroniques du rebut. C'est ce que j'ai fait.

http://moncastel.free.fr/forum/trappePoule/#liste

Bonjour,
Je trouve votre montage très bien, je rajoute de mon coté également 2 boutons pour mémoriser les seuils sans avoir à connecter au PC.

1 pour la mémorisation du seuil jour et 1 pour le seuil nuit qui ne seront utilisé que lors d'un reset dans le setup.

la partie code n'est pas écrite mais dans le principe ca ressemblerai à ca :

setup(){
int jour = eeprom.read(1); // lecture de ce qui est mémorisé
if (bouton1 == HIGH){jour = analogRead(LDR); EEPROM.Write(1, LDR);} // memorisation du seuil si bouton pressé (pas de rebond car exécuté qu'une fois lors du setup)
}

Pour le moment je n'ai fait que les soudures mais je continue à suivre votre post de près. Votre sujet et le principe de récupération j'adore !

Bonjour,
Oui, en effet, ingénieux votre idée de mémoriser les seuils comme ça.
Pour que la fermeture fonctionne correctement, bien après la rentrée des poules, la LDR doit être à l'extérieur et orientée au soleil couchant (mes essais cellule à l'intérieur n'avait pas été très concluants).

Le AC127 a une tension de déchet > 0.6 V, j'ai du me résoudre à mettre quand même une diode schottky en série avec le panneau, sinon quand la tension de batterie est supérieure à celle du panneau, elle se décharge dans le panneau.

Avec la diode, la batterie se stabilise à environ 6.8 v, donc apparemment pas besoin de régulation de charge, la diode suffit. Dans mon cas, la tension max du panneau est de 7.2 V - 0.3 v de tension de déchet de la diode, ça correspond (soleil voilé aujourd'hui).
Pour ne pas user prématurément cette batterie, est-il préférable de ne pas la recharger en permanence ?
Et d'attendre un seuil bas (6.4 V par exemple) avant une nouvelle charge ?

J'ai changé la trappe par une tôle galva, poids ~ 300 gr ... le moteur la soulève sans sourciller http://moncastel.free.fr/forum/trappePoule/#fab

Bonjour et pas mal ce montage je n'ai pas poules à garder .
J'ai un panneau solaire qui charge une batterie et la nuit m'allume une lampe par contre pour détecter la nuit j'utilise la tension du panneau solaire pas de LDR.
C'était juste une remarque qui pourrait simplifier un peux le montage et éviter un composant dehors et risque d'oxydation.

Bonjour et merci du conseil.
L'idée du panneau est venue après mais si c'est aussi précis par le panneau pourquoi pas ?
Ce serait une simplification.

As-tu prévu une régulation de charge ou seulement une diode ?

Dans cette FAQ, ils écrivent ceci :

Installations auto régulées

Dans certains cas, les panneaux solaires photovoltaïques peuvent fonctionner sans régulateur de charge, utilisant simplement une diode anti-retour pour empêcher le courant de circuler dans le sens inverse sous les conditions suivantes:

Le courant de charge des batteries est égal au courant produit par les panneaux solaires photovoltaïques; La température est relativement constante.
Les batteries ont une capacité au moins 30 fois plus grande que le courant de court-circuit pouvant être délivré par les panneaux solaires photovoltaïques.

Comme il s'agit de NIMH pouvant encaisser plus en début de charge que des batteries plomb, ça ne doit pas poser de problème. Si elles se déchargent peu, le courant de charge est limité et on peut toujours ajouter une résistance en série.
Sinon j'ai pensé ne prévoir de recharger la batterie que quand elle descend en dessous d'un certain seuil, mais est-ce que ça augmentera vraiment sa durée de vie ?

je ne suis pas sur que les batteries NIMH soient adaptées à une recharge par panneau solaire puisqu'il faut piloter précisément le courant de charge, un panneau solaire est plutôt à tension "presque" constante et c'est le courant qui varie en fonction de l’irradiance donc plutôt adapté pour les batteries qu'on charge en tension (voir même des batteries supportant une tension de floating permanente)

Bonjour,

avez vous essayé le montage avec un servomoteur ?
Je suis en train de faire les essaie mais sur les watchdog quelque soit la valeur envoyé au servo il tournera dans le meme sens alors que sur un sketch sans watchdog il n'y a pas de soucis.

Savez vous d'ou vient le probleme ?
je ne trouve pas grand chose sur le sujet concernant watchdog et servo

Cordialement,
Ludo

Non, pas encore reçu.

Pendant le fonctionnement moteur, le mode économiseur doit être désactivé et n'être réactiver qu'après fin de course.

On peut se tutoyer :wink: Donnes le code pour pouvoir en discuter.

Bonjour a tous,

Moi aussi je fait un système d'ouverture de trappe pour mon poulailler, j'ai utilisé un arduino UNO R3 et fait le programme toutefois différent du vôtre sur le fait que je me base sur les heures de levé et couché de soleil.
Le moteur utilisé est le même que le vôtre le montage en pont pour l'instant est en mosfet et les "fin de course" sont dans le circuit de puissance du moteur (petite astuce pour cela).

Le L393D m'a servi il y a quelque décénies pour mes trains Marklin et est assez critique point de vue courant et claque vite donc j'ai tous de suite opté pour le pont H

Le servo moteur type modélisme j'ai essayé mais il "frétille" en permanence donc abandonné après des dizaines de tentatives.

Le transistor AC127 et même AC126 sont des germanium, ta tension base-émetteur n'est pas 0.6 Volts vérifies !

Si cela intéresse je pourrais vous donner quelques renseignements complémentaires.

Philippe.

Bonjour achess et phiphiiii,

Le servo moteur type modélisme j'ai essayé mais il "frétille" en permanence donc abandonné après des dizaines de tentatives.

J'ai eu ce problème à chaque sortie de veuille, du coup j'utilise un transistor 2n2222 comme relai pour commuter le régulateur 5v (7805) qui alimente le servo.

j'utilise également un transistor 2n3904 sur le pont diviseur de tension pour voir si je gagne quelques mA mais j'ai pas trouvé beaucoup de différences.
Je suis actuellement à 10-12 mA en veille et sortie de veille avec une led qui flash. (la led power de la nano est déssoudée).

On peut se tutoyer ;) Donnes le code pour pouvoir en discuter.

Pas de soucis :slight_smile: pour le servo je pense avoir un problème de contact avec la carte electronique de celui-ci. dès que j'ai un peu de temps je le change.

Crois-tu qu'on peut compter le nombre de watchdog x 8s + la durée d'activation pour avoir une durée totale de fonctionnement ? et ainsi simuler une horloge ?

voici le code mais pas encore abouti :

#include <EEPROM.h>
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#include <Servo.h>

volatile int f_wdt = 1;

const int led = 13; // 1 flash = OK, 2 Flash = Bat a recharger
const int Bat = A0; // prise tension Batterie R1 330ohm et R2 150ohm
const int LDR = A6; // photorésistance +5v---LDR-A5---R10K---GND
const int mem = A5; // +5V---- bouton1 + (bouton2 + R150 omh) ----- A5 -- R10K ----- GND
const int RTrappe1 = 8; // 2N2222 pour trappe 1
const int RBat = 7; //2n3904 sur pont de resistance pour economie de mA

Servo Trappe1; // declaration trappe1 sur servo

int UBat;
int batFaible;
int nuit;
int jour;
int BTNmem; 
int VLDR; // valeur lue du LDR
int etat; // etat global (etat 0 = bat vide/ 1 = tout OK / 2 = trappe1 coincé
int trappe; // etat trappe 0 = fermee et 1 = ouverte
int LDR2; // si luminosité ponctuelle non répétitive
int ouvrir = 180;
int fermer = 0;

void setup() {
  pinMode(led, OUTPUT);
  pinMode(RTrappe1, OUTPUT);
  pinMode(RBat, OUTPUT);

jour = EEPROM.read(1);
nuit = EEPROM.read(2);
BTNmem = analogRead(mem);
if (BTNmem > 10){
  if (BTNmem > 1000 && BTNmem < 1015){jour = analogRead(LDR); EEPROM.write(1, jour); digitalWrite(led, HIGH); delay(300);} // pression sur bouton 1 => seuil jour
  if (BTNmem > 1015){nuit = analogRead(LDR); EEPROM.write(2, nuit); digitalWrite(led, HIGH); delay(300);} // pression sur bouton 2 => seuil nuit
}
digitalWrite(led, LOW);

VLDR = analogRead(LDR);
if (VLDR > jour){servoM(ouvrir); trappe = 1; LDR2 = 0; } //Serial.print(" ouverture ");}       
if (VLDR < nuit){servoM(fermer); trappe = 0; LDR2 = 0; } //Serial.print(" ouverture ");}  

setup_watchdog(9);
}

void loop() {
  controlBat();
  
  switch(etat){
    case 0: // batterie vide 2 flash led 13
    if (batFaible > 2){ dormirBat(6000); }
    break;

    case 1: // tout est ok / 1 flash rapide / control toutes les 4 minutes et activation trappe a la 8ieme minute
    VLDR = analogRead(LDR);
    //Serial.print (" LDR = "); Serial.print(VLDR); Serial.print("\r \n");
    if (VLDR > jour && trappe == 0){LDR2 = 1;}
    if (VLDR < nuit && trappe == 1){LDR2 = 2;}
    dormir(30);  // 60 sommeil de 8s = 480s = 8 min
    if (VLDR > jour && trappe == 0 && LDR2 == 1){servoM(ouvrir); trappe = 1; LDR2 = 0; } //Serial.print(" ouverture ");}
    if (VLDR < nuit && trappe == 1 && LDR2 == 2){servoM(fermer); trappe = 0; LDR2 = 0; } //Serial.print(" fermeture ");}
    dormir(30); // 60 sommeil de 8s = 480s = 8 min
    break;

    case 2 : // trappe coincé...
    break;
  }

}

ISR(WDT_vect){ if(f_wdt == 0){f_wdt = 1;}}

void setup_watchdog(int ii){
  byte bb; int ww;
  if (ii > 9) ii = 9; // 8 secondes
  bb = ii & 7;
  if (ii > 7) bb |= (1 << 5);
  bb |= (1 << WDCE);
  ww = bb;
  // Clear the reset flag
  MCUSR &= ~(1 << WDRF);
  // start timed sequence
  WDTCSR |= (1 << WDCE) | (1 << WDE);
  // set new watchdog timeout value
  WDTCSR = bb;
  WDTCSR |= _BV(WDIE);
}

void sommeil(void){
  digitalWrite(led, LOW);  
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode();
  sleep_disable();
 
}

void dormir(int m){
  for (int i = 0; i < m; i = i+1) {digitalWrite(led, HIGH); delay(25); sommeil();}
}

void dormirBat(int m){
   for (int i = 0; i < m; i = i+1) {digitalWrite(led, HIGH); delay(25); digitalWrite(led, LOW); delay(25); digitalWrite(led, HIGH); delay(25); sommeil();}
}


void controlBat(){
  digitalWrite(RBat, HIGH);
  delay(50);
  UBat = analogRead(Bat);
  delay(50);
   digitalWrite(RBat, LOW);
// Serial.print("bat = "); Serial.print(UBat); Serial.print("\r \n");
  if (UBat < 400 && etat != 2){ etat = 0; batFaible++;}
  if (UBat > 400 && etat != 2){ etat = 1; batFaible = 0;}
}

void servoM(int x){
  digitalWrite(RTrappe1, HIGH);
  Trappe1.attach(9);
  delay(50);
  Trappe1.write(x);
  delay(2000);
  Trappe1.detach();
  digitalWrite(RTrappe1,LOW);
}

Merciii

Bonjour phiphiiii et merci pour ce retour,
Tes fin de course sont des contacts ?

Le L393D conviendrait, car une résistance de 10 ohm limite le courant du moteur.

Je ferais l'essai du servo moteur quand je l'aurais reçu. Son alimentation sera coupée en fin de course par un transistor.

je me base sur les heures de levé et couché de soleil.

Je préfère la détection par LDR ou tension du panneau solaire , comme proposé par fifi82 (je vais tester).
Par temps couvert, la nuit vient plus vite et dans ce cas, les prédateurs peuvent être déjà là, alors que la trappe n'est pas encore fermée. Le seuil "nuit" doit être déclenché avant nuit noire, pour éviter d'être déclenché par un éclairage de rue ou par la pleine lune. C'est un compromis.

Ton montage est-il alimenté par un panneau solaire ?

Ludoland64, suite à une première lecture de ton code, je ne vois pas pourquoi tu utilises un régulateur 7805 pour alimenter ton servo-moteur, ça consomme inutilement.

Au lieu de "prise tension Batterie R1 330ohm et R2 150ohm", j'aurais mis 33 k et 15 k.
Sur une batterie de 6v, tu consommes en permanence 6/(150+330) = 12.5 mA et 100 fois moins avec des valeurs en kohm.

Il faut avoir à l'esprit que la fonction loop() est parcouru plusieurs milliers de fois par seconde et en mode veille, à chaque fin de cycle de 8 secondes.

Ta fonction dormir sans condition, va se relancer à chaque boucle et si elle est relancée pendant la rotation du moteur, c'est la cata.
Prévoir une variable "rotation" par exemple pour ne donner l'ordre d'ouverture ou
de fermeture qu'une fois et que le mode veille ne soit pas relancé pendant cette période.

delay () peut poser des problèmes incompréhensibles aussi, mieux vaut utiliser millis().

Le retardement n'est utile que pour éviter d'ouvrir la trappe sur une lumière artificielle momentanée. Mieux vaut ne pas retarder le soir.

Regardes mon code, j'ai employé la variable "retard". La variable est remise à 0 si la lumière ne dure pas 15 cycles de veille.
http://moncastel.free.fr/forum/trappePoule/#prog

Comment détectes-tu la trappe coincée ? (etat 2)

Salut,
Merci pour le pont de diode(g toujours eu du mal avec ces calculs lol), je vais modifier ca, je comprend alors pourquoi j'avais tours une 10aine de mA utilisé dans mon montage alors que l'arduino etait alimentée par USB.

J'alimente le tout via 6 accu nimh pour un total de 7,8v chargé a fond et j'avais peur que le servo n'encaisse pas ce voltage et je ne l'ai pas alimenté via la Nano pour ne pas la griller (le servo demande 100-150mA ).

Pour la boucle a la sortie de veille je croyais que le programme reprenais de la où il s'est arrété ? Le programme tourne depuis dimanche sans prob (je teste grosso modo l'autonomie).

Pour le moment je tourne a vide mais je prévois un contact assez rustique lol où ou le bras en alu qui fais levié viendrai faire contact contre un ressort sur la fin de course.

J'ai repris ton idée de retard qui est super et qui est nommée LDR2 (c'est moi qui est fait le couillon en recopiant car pour mieux comprendre j'essai d'eviter les copié collé).

Cordialement

Apres recontrol, j'ai bien une sortie de veille toutes les 4 minutes (sortie de la boucle 'for' via le moniteur de serie) mais je rajoute une lecture de la LDR entre les 2 fonction dormir car effectivement le servo ne s'actionne qu'apres avoir repris la fonction loop depuis le debut lit la LDR puis veille de 4min de + puis enfin comme ca correspond au 'if' suivant avec 'LDR2 ==1' ca acionne le servo.

Du coup ca fait 12min avant actionnement c'est un peu long lol

Merci de t'etre penché dessus, effectivement je vais suivre ton conseil pour les delay().

Bonjour,

Ludoland64:
J'alimente le tout via 6 accu nimh pour un total de 7,8v chargé a fond et j'avais peur que le servo n'encaisse pas ce voltage et je ne l'ai pas alimenté via la Nano pour ne pas la griller (le servo demande 100-150mA ).

ça risque d'être un peu léger en puissance.

Tu n'as pas les caractéristiques du servo ? qu'elle est sa référence ?
Celui que j'ai commandé :
S3003 Standard Servo

Specification:
Operating Speed : 0.19sec / 60 degrees (4.8V no load)
0.23sec / 60 degrees (6.0V no load)
Stall torque: 3.2kg/cm(4.8V),4.1kg/cm(6V)
Operation Voltage : 3-7.2V

12min avant actionnement c'est un peu long lol

Pas grave pour l'ouverture mais trop long en fermeture. De plus, je ne pense pas que ça économise plus sur la batterie.
Tu devrais ajouter un panneau solaire de 6v 1W, ça coûte moins de 2 €.
Et enlève un élément de batterie pour faire 6 v