Go Down

Topic: Trappe poulaillier sans contacts fin de course (Read 50346 times) previous topic - next topic

fifi82

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.

achess

#16
Feb 28, 2016, 09:48 am Last Edit: Feb 28, 2016, 10:02 am by achess
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 :

Quote
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 ?

rjnc38

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)

Ludoland64

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

achess

#19
Feb 28, 2016, 10:48 pm Last Edit: Feb 28, 2016, 10:53 pm by achess
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 ;) Donnes le code pour pouvoir en discuter.

phiphiiii

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.

Ludoland64

Bonjour achess et phiphiiii,

Code: [Select]
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).

Code: [Select]
On peut se tutoyer ;) Donnes le code pour pouvoir en discuter.
Pas de soucis :) 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 :
Code: [Select]

#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

achess

#22
Feb 29, 2016, 10:30 pm Last Edit: Mar 01, 2016, 11:17 am by achess
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.

Quote
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)

Ludoland64

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

Ludoland64

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().

achess

#25
Mar 01, 2016, 01:39 pm Last Edit: Mar 01, 2016, 02:21 pm by achess
Bonjour,
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
Quote
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

phiphiiii

Bonjour,

Voici le schema des "Fin de course" avec deux diodes 1N4007 ou 1N4001.


        FC1                           FC2


|                            M                              |
|                                                            |
|_____o----o_____(O)_____o----o______|
     |                |            |                 |
     |----|>|---- |            |-----|<|----|
           
            D1                            D2

Lorsque le moteur actionne un des fin de course (NF) celui-ci s'ouvre et il y a une diode en parallèle sur celui-ci le seul moyen que le moteur redémarre c'est de changer les polarités et ainsi de suite.

Cela veut dire que l'on peut laisser en permanence la tension pour le moteur et que ce sont les fin de course eux meme qui coupe le moteur ce qui fait que si un renard venait a essayer d'ouvrir la porte le moteur se remettrait en marhe pour tenir fermé la porte.

Désolé mais j'ai pas d'autre outils ici pour faire un plus beau schema.

achess

#27
Mar 01, 2016, 02:26 pm Last Edit: Mar 01, 2016, 02:34 pm by achess
Bonjour phpphiiii,
Pour le schéma j'utilise Desselec 2000
Un peu spartiate au début, mais rapide, léger et pratique. pour enregistrer en jpg, il suffit de sélectionner et copier le schéma pour le coller dans ton éditeur d'image préféré ;)

Ok pour les contacts, j'ai préféré gérer ça par soft.

phiphiiii

Je suis désolé le schema n'est pas clair je vais le refaire !

Ludoland64

je vois ce que tu veux dire phiphiiii, c'est ingénieux contre le prédateur. As tu implanté une solution a ton système au cas ou la trappe se retrouverai coincé par un obstacle ? (la fin de course n'étant pas actionné le moteur serai en permanance alimenté ? avec le risque d'épuiser l'accu ?)

En fait achess j'aimerai passer à 5 accu et récupérer le régulateur mais le seul chargeur qui me permet de refaire le plein, ne charge les nimh que par paire...

Le servo qui me sert pour les essai n'a pas de marque je l'ai récupéré sur un gros buggy niikko qui partait à la poubelle. Il semble assez costaud mais celui que je vais utilisé est un "Hitec HS300 CW"
je ne trouve rien sur le CW mais sur le Hitec HS-300 il y'a ca :

Modulation:    Analog
Torque:    4.8V: 42.0 oz-in (3.02 kg-cm)
                6.0V: 51.0 oz-in (3.67 kg-cm)
Speed:    4.8V: 0.19 sec/60°
                6.0V: 0.15 sec/60°
Weight:    1.66 oz (47.1 g)
Dimensions:    
Length: 1.60 in (40.6 mm)
Width: 0.80 in (20.3 mm)
Height: 1.40 in (35.6 mm)
Motor Type: 3-pole
Gear Type:    Plastic
Rotation/Support: Bushing
Additional Specifications
Pulse Cycle:    20 ms
Pulse Width:    900-2100 µs

Tu as acheté ton panneau solaire  sur quel site ?

Go Up