Go Down

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

achess

bonjour
vu la petite moquerie d Achess, je dois laver mon honneur
voici les quelques modifs que j'ai faites (c equi n'enlève rien au fait que je ne sais pas programmer mais  bon ...
Excusez, je ne voulais pas vexer.

Les valeurs d'initialisation de "jour" et "nuit" sont inversées.

Vos valeurs jour et nuit sont mémorisées dans la RAM et pas en dur. ;)

Vincentm1


Phil073

Bonsoir

Merci Achess pour ce graphique très parlant, je l'avais fait également sur un brouillon, nous avons bien la même logique ;)

J'ai testé la V8 que vous m'avez fourni :

Pour le blocage moteur intégrant la variable tolérance DeltaC, pas d'amélioration, l'arrêt se fait toujours avec la séquence Delai_max malheureusement

J'en suis donc toujours au même point :
Initialisation de jour ou de nuit ok le moteur agit bien en conséquence du seuil nuit fixé.
Par contre, à la suite de ça, l'automatisme ne fonctionne pas avec la variation jour ou nuit

J'ai essayé également de faire varier les valeurs des paramètres délai_blocage (en plus et en moins) et deltaC,  sans succès

Peut-etre, pour simplifier la logique de fonctionnement, faudrait-il ne garder que le seuil nuit comme seule référence?

Ca occupe mes soirée... mais j'ai hâte de faire fonctionner ce système!

Bonne soirée

achess

#303
May 24, 2019, 12:04 am Last Edit: May 24, 2019, 08:19 am by achess
Bonsoir,
Le programme pour la LDR ne fonctionnait pas bien à l'origine.
En fait je l'ai refait à partir du programme qui prends la mesure sur le panneau.
Celle du panneau fonctionne bien, par contre je n'ai pas vérifié avec la LDR.

Prendre la mesure sur le PV ne pose pas de problème, il faut juste recalculer le pont diviseur. Il faut mesurer la tension maximale aux bornes du panneau.
Si c'est 18 V, suffit de calculer les résistances pour ne pas dépasser 5 V en A0
Avec une 10 k côté 0V : 5 V / 10 =0.5;  18/0.5 = 36
Entre A0 et le PV, une résistance de 36-10 = 26 k ... 27 k en normalisé. Voir le schéma en page 1 pour le cablage
Quote
J'ai essayé également de faire varier les valeurs des paramètres délai_blocage (en plus et en moins) et deltaC,  sans succès
Est-ce que la résistance de 10 ohm est bien en série avec le moteur ??? Je doute.

Les broches 4, 5 , 13 et 12 ne doivent pas être reliées directement au 0V ... quoique normalement, la résistance doit être insérée dans la partie puissance uniquement (12 V), mais ce n'est pas différencié dans le datasheet

Les broches 12 et 13 concernent l'autre pont H
Peut être que le broche 4 serait le 0 V commande et 5 le 0 V puissance... ou inversement.

Faudrait tester de laisser 12-13 et 4 à la masse et insérer la résistance uniquement à la broche 5 ?
Une autre façon de voir le schéma

Je me rends compte que je n'aurait pas du proposer des possibilités que je n'ai pas essayé. Désolé de vous avoir fait perdre du temps.

Vincentm1

#304
May 24, 2019, 08:00 am Last Edit: May 24, 2019, 02:03 pm by Vincentm1
 Bonjour,
Une petite sujétion qui vaut ce qu'elle vaut, moi qui ai beaucoup de souci pour le montage et le fonctionnement, un moment donné j'ai repris le programme en le simplifiant au maximum. C'est-à-dire uniquement faire marcher le moteur dans un sens et ensuite dans l'autre et j'ai essayé de voir les avancées avec la console.Après j'ai essayé de le faire fonctionner avec le programme complet et la ldr.
Ce qui m'a permis d'éliminer beaucoup d'erreur de ma part (petit trait d'humour, en plus de ne pas savoir programmer je ne suis pas un très bon monteur…)

achess

#305
May 24, 2019, 08:46 am Last Edit: May 24, 2019, 09:16 am by achess
Je n'ai pas non plus fait de programme avec le servo moteur, j'ai juste fait un test.

Le synoptique n'est pas difficile, mais avec une LDR la courbe du jour est en U alors que celle du PV est parabolique:

A l'initialisation (setup) on lit la valeur de luminosité et on vérifie par rapport au seuil "nuit".

Si c'est la nuit, on ferme la trappe.
Si c'est le jour on l'ouvre.

Ensuite ( loop), le tag "trappe" conserve l'état ouvert ou fermé de la trappe

Trappe fermé, on ouvre dès que le seuil "jour" est atteint.
Trappe ouverte, on ferme au seuil "nuit".

Le reste n'est qu'amélioration : gestion fin de course, retard à l'ouverture, économie d'énergie, charge batterie ...
On pourrait, en effet ne tenir compte que du seuil nuit, mais les poules se trouveraient privées d'accéder à l'extérieur pendant un temps long ...  que je n'ai pas mesuré ??

Le langage de programmation, je l'avait appris en m'intéressant au javascript qui est sur la même base du langage C.
En fait, il n'est pas difficile et assez intuitif et il y a plein du tuto sur internet comme le blog d'Eskimon

Phil073

Bonsoir Achess et Vincentm1,

Est-ce que la résistance de 10 ohm est bien en série avec le moteur ??? Je doute.
Je vous confirme que la R 10 Ohm est bien en série entre les masses du L293D et le GND du pro mini.

Je vais revérifier tout ça...

Le langage de programmation, je l'avait appris en m'intéressant au javascript qui est sur la même base du langage C.
En fait, il n'est pas difficile et assez intuitif et il y a plein du tuto sur internet comme le blog d'Eskimon
Moi aussi j'aimerais bien savoir programmer... 8) :D  mais pour l'instant c'est loin d'être le cas.

A bientôt...

achess

Bonjour,
Je vient de faire le test avec LDR et L293 D. Je revient après avoir corrigé le programme, qui pose problème effectivement.
A+

Phil073

Vous êtes un super héro Achess!!!  ;)
Je n'en demandais pas tant  :-[

De mon coté,  je vais profiter de ce week-end pour creuser un peu plus et tenter de résoudre le problème du blocage moteur qui n'est pas détecté...

Merci,
A+

achess

#309
May 26, 2019, 09:22 am Last Edit: May 27, 2019, 02:55 pm by achess
Pas le temps d'en dire plus
Code: [Select]
/* Trappe automatique poulallier avec Arduino Pro Mini
Ouverture declanchee au seuil "jour"
Peut etre retardee en fonction de la variable "nbCycle" pour eviter les ouvertures
 intempestives par des phares de voiture ou lampe de poche

Fermeture au seuil "nuit"

Limitation de puissance moteur par resistance serie 10 ohm pour eviter de blesser
et limiter le courant.

Arret automatique à "delai_max" puis  remise en veille.

Mode économiseur avec reveil tout les 8 secondes, pouvant retarder les actions.
*/

#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
volatile boolean f_wdt = 1;

/* declaration des constantes pour les noms des broches */
const int led = 13; // led du module nano
const int pinldr = A3; // photoresistance
const int pinmoteur = A2; // mesure courant moteur
const int fermer = 2; // commande de fermeture
const int ouvrir = 3; // commande d'ouverture
//const int bat = A1; // surveillance tension batterie

/* declaration des variables */
int nuit = 200; // seuil nuit 0.98 V
int jour = 250;  // seuil jour 1.22 V plus haut que seuil nuit
int LDR; // mesure inverse de luminosite
int courant_moteur;
int retard = 0;
int nbCycle = 0; // retard a l'ouverture X 8 secondes(25 sec)
boolean trappe; // etat trappe
boolean rotation = 0; //  moteur arrete
unsigned long debut_blocage; // debut du blocage
unsigned long retard_dec; // declenchement jour
int delai_dec;
int mem_courant; // courant moteur au debut du blocage
int delai_max = 4000;// 4 secondes

void setup() {
  // initialisation des broches entree/sortie
  pinMode(pinldr, INPUT);
  // pinMode(bat, INPUT);
  pinMode(fermer, OUTPUT);
  pinMode(ouvrir, OUTPUT);
  pinMode(pinmoteur, INPUT);
  pinMode(led, OUTPUT);

  //Serial.begin(9600);
  LDR = analogRead(pinldr);
  // Pour forcer la trappe à se fermer la nuit ou a  s'ouvrir le jour.
  if (LDR > nuit) {// le jour
    trappe = 1; // fermee
  }
  else  {//la nuit
    trappe = 0; // ouverte
  }
  // active le compteur watchdog pour interruption toutes les 8 secondes
  setup_watchdog(9);
}

void loop() {
  if (rotation == 1) { // moteur tourne
    if ((millis() - debut_blocage) > delai_max) {
      digitalWrite(ouvrir, 0); digitalWrite(fermer, 0);
      trappe = !trappe; rotation = 0; sommeil();
    }
  }
  else  {
    LDR = analogRead(pinldr);
    if (LDR > jour) { // jour
      switch (trappe) {
        case 0 : sommeil(); break;
        case 1 : retard ++; ouverture(); break;
      }
    }//jour
    else {
      retard = 0; // éclairage momentane
    }

    if (LDR < nuit) {
      switch (trappe) {
        case 1 : sommeil(); break; // fermee
        case 0 : fermeture(); break;
      }
    }
  }
}// fin de loop()


// Watchdog Interrupt Service est excite lors d'un timeout du WDT
ISR(WDT_vect)
{
  if (f_wdt == 0)
  {
    f_wdt = 1; // flag global }
  }
}

void setup_watchdog(int ii) {
  byte bb;
  int ww;
  if (ii > 9 ) ii = 9;   // pour 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);
}

// active la mise en veille pour 8 secondes
void sommeil(void) {

  // témoin led si la tension de batterie < 6 V
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode(); //En mode veille choisi
  //le micro passe en sommeil pour 8 secondes
  sleep_disable();
  // Le pramme va reprendre ici apres le timeout du WDT

}

void ouverture() {
  //Serial.println(retard);
  if (retard > nbCycle) { // environ 2 minutes
    digitalWrite(ouvrir, 1); digitalWrite(fermer, 0); rotation = 1; retard = 0;
    debut_blocage = millis();
  }
  else {
    sommeil();
  }
};

void fermeture() {
  digitalWrite(ouvrir, 0); digitalWrite(fermer, 1); rotation = 1;
  debut_blocage = millis();
};


Phil073

Bonjour Achess,

Merci, impeccable le programme fonctionne à merveille!! ;D

Je laisse en test quelques jours jusqu'au weekend prochain, histoire de contrôler les heures de fermeture et ouverture en fonction de mes poulettes...

Du coup, qu'est ce qui était bloquant dans le programme?

En tous cas, MERCI BEAUCOUP!
Je posterai quelques photos dès que possible

A bientôt
Bonne journée!

achess

#311
May 26, 2019, 08:08 pm Last Edit: May 26, 2019, 08:16 pm by achess
Bonsoir,
J'avait un L293d et un petit moteur dans les tiroirs.
En fin de compte la courbe du jour est la même qu'en prenant l'info sur PV. Du coups, j'ai repris un programme qui marchait sur mon système actuel avec pont H à transistor et vérifié fonction par fonction avec le moniteur série, tout en simplifiant et optimisant.

Le plus gros problème est que ce qui marchait avec mon moteur de jouet (depuis 2015) ne fonctionne pas sur ce petit moteur de récup, non réducteur.
Je n'ai donc conservé que l'arrêt sur durée programmée, mais on peut en ajouter une si la fermeture est  plus rapide.

Le problème vient peut être de ne pouvoir différencier la masse du circuit de puissance de la commande ? Ou que le moteur ne peine pas autant à la tache ? La consommation du mien est presque qu'au maximum en ouverture ?

Le principal est que la fermeture soit efficace  Quand je voit les systèmes du commerce, ou la trappe est simplement suspendue à une ficelle, pas sur que ça résiste à la détermination du renard. ;)

Phil073

Bonsoir Achess,

Oui effectivement, les deux masses sont connectées ensemble, cela vient probablement de là...
Je pense que le moteur ne force pas trop car la trappe est montée sur une glissière à roulement à billes de tiroir d'agencement. De plus, la course ouverture et la course fermeture sont égales au niveau force vu que la trappe se déplace sur un axe horizontal.

Par contre, je vais me procurer tout de suite un moteur identique à celui que j'ai commandé sur ebay en cas de défaillance... Vu la mécanique de précision que j'ai dû préparé au niveau de l'axe d'enroulement de la cordelette, je préfère éviter de le refaire...

A l'heure même ou j'écrit ce poste, je sors voir où en est la trappe, et là, surprise plutôt moyenne:
Elle se ferme et s'ouvre en boucle... :smiley-eek:
J'ai pris la tension aux bornes de la LDR, elle est de 1,77 V
Vu que je ne sais pas depuis quand elle fonctionne comme ça, je soupçonne que ce problème intervient dans la zone de tension entre seuil jour et seuil nuit.
Il est maintenant 21h10, la tension de la LDR est de 2,55 V, et mes cocottes ne sont pas encore couché (faudra que je réajuste le seuil nuit), l'état de la trappe est stable, fermée.

Encore un mystère de plus
 

Phil073

Bonjour,

Pour la 1ere phase de test, j'ai laissé les valeurs telles qu'elles étaient dans votre programme.
J'ai joué le frileux… je me suis dis :" ne pète pas le programme pour le moment, teste le tel qu'il a été écrit" 8)

J'ai fais mes relevés hier soir et ce matin :
Au seuil nuit : 4500 mV, donc définir à 918 seuil nuit.
Au seuil jour : 2000 mV, donc définir à 408 seuil jour.

Pour la sécurisation de la trappe, pas de soucis, on ne voit pas bien sur la photo mais en position fermé elle rentre dans une petite gorge ménagée dans le poteau de droite ;) J'avais prévu le coup!

Si le problème persiste malgré l'ajustement des seuils, je tenterais d'ajouter une ligne de code pour éviter d'ouvrir et fermer en boucle entre les valeurs seuil jour et seuil nuit, c'est pas pas gagné mais j'essayerais de moi même...

A bientôt

achess

#314
May 27, 2019, 03:02 pm Last Edit: May 27, 2019, 03:27 pm by achess
Bonjour,
Oupss ! j'ai oublié de préciser que pour que la courbe soit la même que pour le panneau; c'est à dire en cloche, j'ai disposé la LDR( 20 kohm) entre A3 et Vcc et une résistance entre A3 et 0V. (Je n'avais pas fait attention), d'ou le problème d'ouverture- fermeture en boucle que vous avez rencontré.  :smiley-confuse:

 Peut-être que 150 k par rapport à votre 4.7 k risque de ne pas convenir...

Pour simplifier le test, j'ai tout alimenté en 5 V et essayé avec un petit moteur de récup.




Go Up