jeudi 25 décembre 2014

Réglage du moteur

Cette article va vous aider à régler rapidement votre ouverture/fermeture  de porte de votre poulailler


Une étape essentielle lors de la mise en service de la porte du poulailler est celle du réglage du temps de descente et de montée.



c'est le rôle du sketch ci-dessous il vous aidera à trouver vos propres valeurs en fonction de votre installation. (Rappel, les valeurs sont en millisecondes.)


 /*  
 ELECTRONIC 77   
  Version 1.0 du 01/12/2013  
  L9110 motor driver controlling   
  - 1 small DC motors  
  */  
  /*  
 SCHEMA Utilisation d'un moteur CC  
 pin IA1 || LOW   || High  
 pin IB1 || HIGH  || Low  
 Motor  || backward || forward  
 PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() function.   
  */   
 const int IA1 = 9; // DIGITAL PIN 8 Bits   
 const int IB1 = 10; // DIGITAL PIN 8 Bits  
 const int IALIM=2;   
  /*  
  SCHEMA Cellule photosensible  
  reçoit digital un 0 ou 1  
  */  
 //const int IP1=3; // DIGITAL INPUT   
 int IsJourLast=HIGH; //Mise en route il fait jour  
 void setup()   
 {  
  //Commande du moteur cc via le L9110H  
  pinMode(IA1, OUTPUT); // set pin to output  
  pinMode(IB1, OUTPUT); // set pin to output  
  pinMode(IALIM,OUTPUT); // set pin output  
  // au branchement lance l'ouverture  
  //forward();   
  //delay(10000);  
  //stop();  
 }  
 void loop() {  
  digitalWrite(IALIM, HIGH);  
    forward();   
    delay(1100);  
    stop();  
    digitalWrite(IALIM, LOW);   
    delay(10000);  
    digitalWrite(IALIM, HIGH);  
    backward();  
    delay(880);  
    stop();  
    delay(10000);  
 }  
 void stop(){  
  digitalWrite(IA1, LOW);  
  digitalWrite(IB1, LOW);  
 }  
 void backward()  
 {  
  digitalWrite(IA1, LOW);  
  digitalWrite(IB1, HIGH);  
  }  
 void forward()  
 {  
  digitalWrite(IA1, HIGH);  
  digitalWrite(IB1, LOW);  
  }  

la porte s'ouvre et se ferme toutes les 10 secondes "delay(10000)",  il vous faut régler le temps de montée actuellement fixé à "1100":
    
forward();   
delay(1100);  // temps de montée  
stop(); 

Temps de descente :
 
backward();  
delay(880);  
stop();

Bon réglage !

mercredi 24 décembre 2014

Porte de poulailler Part - 3 : Arduino avec RTC (horloge)

 Retour Part-2

Version arduino avec horloge RTC

Dans cette article nous allons voir comment utiliser une horloge RTC. L'idée est de fermer et d'ouvrir la porte du poulailler selon un horaire défini par le microcontrôleur. On a besoin d'une horloge (Real Time Clock) DS1307 sur batterie interne, d'une carte de commande de moteur CC avec un bridge type DRV8835 par exemple et de 2 alimentations : une pour le microcontrôleur et l'autre pour le moteur. 

La mise en oeuvre d'une horloge RTC sur bus I2C se fait en connectant  la sortie 'sda' sur le pin 4  et 'sdl' sur le pin 5 de l'arduino. Pour le branchement des autres éléments je vous invite à consulter la partie 2.

 Schéma de câblage :

Réglage de l'heure :

Lors de l'achat de votre RTC, vous voudrez certainement régler l'heure, inutile de faire un article de plus vous trouverez toutes les infos ici ! Voici le lien vers la librairie RTCLib nécessaire pour utiliser l'horloge.
Dans mon cas j'ai opté pour conserver l'heure d'hiver. 

L'étape suivante est de paramétrer les tableaux d'ouverture et de fermeture dans le code du microcontrôleur (ces tableaux seront utilisés dans le sketch de l'arduino un peu plus loin) :

Après une petite recherche sur internet, vous trouverez certainement les horaires de lever et de coucher du soleil de votre région.
http://ecole.onsevoitdemainalors.org/IMG/pdf/41_Tableau_02.pdf

Voici les tableaux que nous allons utiliser :
 
 ////////////////////////// JANV    FEV    Mars    Avr   Mai    Jun  
 int LeveSoleilHeure[12]=  {07,06, 06,06, 05,05, 04,04, 03,03, 03,03  };  
 int LeveSoleilMinute[12]= {00,50, 40,20, 40,00, 30,00, 45,15, 05,05  };  
 int CoucheSoleilHeure[12]= {18,18, 19,19, 19,20, 21,21, 21,22, 22,22  };  
 int CoucheSoleilMinute[12]={15,45, 00,30, 45,35, 00,25, 45,05, 20,25  };  



Observons les 2 tableaux suivants: LeveSoleilHeure[12] ,LeveSoleilMinute[12].

Ils représentent une demi année,  pour faire l'année complète on reprends le tableau à l'envers, ainsi juillet=juin, aout=mai etc... il y a un tableau pour les heures et un autre pour les minutes. Il y a 2 heures de défini par mois par exemple pour le mois de janvier, du [1-14] l'ouverture est programmé à 07h00 et du [15-31] janvier l'ouverture se fait à 06h50 heure d'hiver. 

Remarques : Pour économiser de l’énergie, je coupe l'alimentation de la carte de commande du moteur (pin D3), idem pour l'horloge  (pin D2, elle passera automatiquement sur pile de sauvegarde).

Les conditions initiales :
l'arduino doit-être branché de jour et la porte du poulailler est fermée.

Voici le code complet:
 /*   
  Electronic 77  
  Version 3.0 du 09/01/2014   
  L9110 or DRV8835 motor driver controlling    
  - 1 small DC motors      
  - RTC DS1307   
  */   
  #include <Wire.h>   
  #include "RTClib.h"   
  #include <avr/sleep.h>   
  // This library contains functions to set various low-power    
  // states for the ATmega328   
  // This variable is made volatile because it is changed inside   
  // an interrupt function   
  volatile int sleep_count = 0; // Keep track of how many sleep   
  // cycles have been completed.   
  const int interval = 5; // Interval in minutes between waking   
  // and doing tasks.   
  const int sleep_total = (interval*60)/8; // Approximate number    
  // of sleep cycles needed before the interval defined above    
  // elapses. Not that this does integer math.   
  /*   
  SCHEMA Utilisation d'un moteur CC   
  pin IA1 || LOW  || High   
  pin IB1 || HIGH || Low   
  Motor || backward || forward   
  PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() function.    
  */    
  const int IA1 = 9; // DIGITAL PIN 8 Bits    
  const int IB1 = 10; // DIGITAL PIN 8 Bits   
  const int TpsMontee=1200; // réglage du temps de montée   
  const int TpsDescente=880; // réglage du temps de descente   
  /*MODULE RTC SPARK FUN BOB 099   
  DS 1307 Communication I2C   
  Récupération de l'heure via I2C sur les ports 4 et 5 analogique de l'arduino NANO   
  */   
  // RTC   
  RTC_DS1307 RTC;   
  int AlimentationRTC=3;   
  //Carte Brighe Commande   
  int ALimentationCMD=2;   
  //POULAILLER    
  boolean FlagOpen=false; //porte   
  //Heure Hiver   
  //http://ecole.onsevoitdemainalors.org/IMG/pdf/41_Tableau_02.pdf   
  //matin retire 1h45    
  // soir ajoute 1h30   
  ////////////////////////// JANV FEV Mars Avr Mai Jun   
  int LeveSoleilHeure[12]= {07,06, 06,06, 05,05, 04,04, 03,03, 03,03 };   
  int LeveSoleilMinute[12]= {00,50, 40,20, 40,00, 30,00, 45,15, 05,05 };   
  int CoucheSoleilHeure[12]= {18,18, 19,19, 19,20, 21,21, 21,22, 22,22 };   
  int CoucheSoleilMinute[12]={15,45, 00,30, 45,35, 00,25, 45,05, 20,25 };   
  void setup(void) {   
   //Commande du moteur cc via le L9110H   
  pinMode(IA1, OUTPUT); // set pin to output   
  pinMode(IB1, OUTPUT); // set pin to output   
  // au branchement lance l'ouverture   
  // COndition initiales :    
  // - faire jour   
  //- Porte poulailler fermée   
  stop();   
   // Carte de commande des moteurs switch alim pour economie d'nrj   
   pinMode(ALimentationCMD, OUTPUT);    
   digitalWrite(ALimentationCMD, LOW);    
   pinMode(AlimentationRTC, OUTPUT);     
   digitalWrite(AlimentationRTC, LOW);    
   Wire.begin();   
   RTC.begin();;   
   //Serial.begin(57600);   
  watchdogOn(); // Turn on the watch dog timer.   
  // The following saves some extra power by disabling some    
  // peripherals I am not using.   
  // Disable the ADC by setting the ADEN bit (bit 7) to zero.   
  ADCSRA = ADCSRA & B01111111;   
  // Disable the analog comparator by setting the ACD bit   
  // (bit 7) to one.   
  ACSR = B10000000;   
  // Disable digital input buffers on all analog input pins   
  // by setting bits 0-5 to one.   
  DIDR0 = DIDR0 | B00111111;   
  //Serial.print("FIN init");   
  //Serial.println();   
  }   
  void loop(void) {   
  goToSleep(); // ATmega328 goes to sleep for about 8 seconds   
  // and continues to execute code when it wakes up   
  if (sleep_count == sleep_total) {   
  // CODE TO BE EXECUTED PERIODICALLY   
   digitalWrite(AlimentationRTC, HIGH);    
   delay(500);   
   DateTime now = RTC.now();   
   digitalWrite(AlimentationRTC, LOW);    
   //Les poules sont -elles levées   
   int index= getIndex(now);   
   if (FlagOpen==false && canOpen(now,index))   
   {   
   //Ouvre   
   OpenPorte();   
   FlagOpen=true;   
   }   
   if (FlagOpen && canClose(now,index))   
   {   
   //Ferme   
   ClosePorte();   
   FlagOpen=false;   
   }   
   //Serial.print(now.year(), DEC);   
   //Serial.print('/');   
   //Serial.print(now.month(), DEC);   
   //Serial.print('/');   
   //Serial.print(now.day(), DEC);   
   //Serial.print(' ');   
   //Serial.print(now.hour(), DEC);   
   //Serial.print(':');   
   //Serial.print(now.minute(), DEC);   
   //Serial.print(':');   
   //Serial.print(now.second(), DEC);   
   //Serial.println();   
   delay(5000);   
   sleep_count = 0;    
  }   
  }   
  void goToSleep()    
  {   
  // The ATmega328 has five different sleep states.   
  // See the ATmega 328 datasheet for more information.   
  // SLEEP_MODE_IDLE -the least power savings    
  // SLEEP_MODE_ADC   
  // SLEEP_MODE_PWR_SAVE   
  // SLEEP_MODE_STANDBY   
  // SLEEP_MODE_PWR_DOWN -the most power savings   
  // I am using the deepest sleep mode from which a   
  // watchdog timer interrupt can wake the ATMega328   
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set sleep mode.   
  sleep_enable(); // Enable sleep mode.   
  sleep_mode(); // Enter sleep mode.   
  // After waking from watchdog interrupt the code continues   
  // to execute from this point.   
  sleep_disable(); // Disable sleep mode after waking.   
  }   
  void watchdogOn() {   
  // Clear the reset flag, the WDRF bit (bit 3) of MCUSR.   
  MCUSR = MCUSR & B11110111;   
  // Set the WDCE bit (bit 4) and the WDE bit (bit 3)    
  // of WDTCSR. The WDCE bit must be set in order to    
  // change WDE or the watchdog prescalers. Setting the    
  // WDCE bit will allow updtaes to the prescalers and    
  // WDE for 4 clock cycles then it will be reset by    
  // hardware.   
  WDTCSR = WDTCSR | B00011000;    
  // Set the watchdog timeout prescaler value to 1024 K    
  // which will yeild a time-out interval of about 8.0 s.   
  WDTCSR = B00100001;   
  // Enable the watchdog timer interupt.   
  WDTCSR = WDTCSR | B01000000;   
  MCUSR = MCUSR & B11110111;   
  }   
  ISR(WDT_vect)   
  {   
  sleep_count ++; // keep track of how many sleep cycles   
  // have been completed.   
  }   
  ///////////////////////////////////////////////////////////////////////   
  //////: GESTION POULIAILER   
  ///////////////////////////////////////////////////////////////////////   
  int getIndex(DateTime t){   
  int Index=t.month();   
   if (t.month()>6)   
 {  
   Index=13-t.month();    
   Index=(Index-1)*2;     
   if( t.day()<15)   
   Index++;   
 }  
 else   
 {  
   Index=(Index-1)*2;     
   if( t.day()>15)   
   Index++;   
 }  
   //Serial.print("Index ");   
   //Serial.print(Index, DEC);   
   //Serial.println();   
   return Index;   
  }   
  boolean canOpen(DateTime t,int index)   
  {   
   if (t.hour()<=13 && (t.hour()== LeveSoleilHeure[index] && t.minute()>= LeveSoleilMinute[index] || t.hour()> LeveSoleilHeure[index]))   
   return true;   
   else    
   return false;   
  }   
  boolean canClose(DateTime t,int index){   
   if (t.hour()<=23 && (t.hour()== CoucheSoleilHeure[index] && t.minute()>= CoucheSoleilMinute[index] || t.hour()> CoucheSoleilHeure[index]))   
   return true;   
   else    
   return false;   
  }   
  void SetALimentationCMD(boolean isAlimente)   
  {    
  if (isAlimente)   
  {   
   digitalWrite(ALimentationCMD, HIGH);     
   delay(1000);   
  }   
  else   
   digitalWrite(ALimentationCMD, LOW);     
  }   
  void ClosePorte()   
  {   
  SetALimentationCMD(true);   
  //Serial.print("Fermeture de la porte\n");   
   backward();   
   delay(TpsDescente);     
   stop();   
  SetALimentationCMD(false);    
  }   
  void OpenPorte()   
  {   
   SetALimentationCMD(true);   
   //Serial.print("Ouverture de la porte\n");   
   forward();    
   delay(TpsMontee);   
   stop();   
   SetALimentationCMD(false);    
  }   
  void stop(){   
  digitalWrite(IA1, LOW);   
  digitalWrite(IB1, LOW);   
  delay(1000);   
  }   
  void backward()   
  {   
  digitalWrite(IA1, LOW);   
  digitalWrite(IB1, HIGH);   
  }   
  void forward()   
  {   
  digitalWrite(IA1, HIGH);   
  digitalWrite(IB1, LOW);   
  }   
  ////////////////////////////////////////////////////////////////////////  


 Quel est l'avantage d'utiliser une horloge par rapport à  un capteur crépusculaire ?  

L'horloge est un système plus robuste, il ne souffre pas d'une mauvaise détection du capteur (feuille sur le capteur, etc... ), pas de rebond de détection.
Cependant la consommation comme le montage précédent ne permet pas de tenir la semaine. Malgré une mise en veille de l'arduino toute les 8 secondes.
C'est pourquoi dans la  4ème partie nous allons utiliser une horloge RTC DS3231 qui à l'avantage d'avoir un mode alarme pour mettre en veille prolongée le microcontrôleur et en plus, on va changer de microcontrôleur par un moins gourmand en énergie. J'ai choisi d'acheter un kit 'launchpad' de la famille MSP430 de chez Texas Instrument.

Lien vers la partie 4

lundi 22 décembre 2014

Porte de poulailler Part - 2 : Arduino avec une photo-résistance

Retour Part-1

 Version arduino avec photo-résistance


La première solution qui m'est venue à l'esprit est d'utiliser une photorésistance de type LDR03 comme capteur crépusculaire et une carte de commande de moteur Courant Continue et un arduino nano alimenté par un accu Li-ion 6000mAh.

Petit rappel du matériel :

  • Un arduino nano
  • une carte de commande moteur CC. J'ai utilisé 2 types, une à base du L9110 H-bridge (plus fragile), et l'autre à base d'un  DRV8835 de marque pololu qui a l'avantage d'avoir une alimentation séparé pour le moteur.
  • une photorésistance LDR03 et une résistance de 47k.
  • 2 batteries, une pour le moteur et une autre pour le micro-contrôleur. 

Oui j'ai bien mis 2 batteries, le moteur a besoin de puissance et d'une tension plus importante.

voici le montage simplifié :



Ne sont pas présents le régulateur de tension +5V pour pouvoir utiliser l'accu et le potentiomètre au niveau de la photo-résistance pour affiner le seuil de détection. 
Le potentiomètre n'est pas très utile car la plage de longueur d'onde de la photo-résistance n'est pas terrible, je l'ai remplacé par une résistance de 47k. 

Le code fonctionne comme une bascule, la photo-résistance est branchée sur la pin 'D2' de l'arduino qui est une entrée TTL.  lorsqu'il fait jour la résistance est petite et laisse passer le courant ce qui déclenche le niveau Haut au borne de la pin 'D2' de l'arduino, la porte peut s'ouvrir. A contrario lorsque la nuit est présente, la résistance est alors infinie et bloque le courant, l'entrée de la pin 'D2' passe en niveau bas, la porte peut se fermer.

La commande du moteur est très simple si on envoie un signal Haut sur D9 et bas sur D10, le moteur tourne et le sens s'inverse si D9=bas et D10=Haut. Pour l’arrêt D9=D10=bas. Pour tester votre porte  voici un petit sketch de réglage.


Pour gagner de l'énergie, il est nécessaire de mettre en veille l'arduino, oui mais qui dit mise en veille dit réveille ! Heureusement l'arduino dispose d'une interruption sur la pin D2 et en plus le réveille peut se faire par changement d’état c'est à dire un passage d'un niveau bas vers haut par exemple.
     
Reste un problème à régler, celui de  l'initialisation de la bascule. Dans mon cas la mise en route de l'arduino doit se faire le jour et porte fermée.

voici le code utilisé :
 /*  
 Electronic 77   
  Version 1.0 du 01/12/2013  
  L9110 motor driver controlling   
  - 1 small DC motors  
  - 2 small DC motors   
  - 1 PWM 4 wires  
  */  
 #include <avr/interrupt.h>  
 #include <avr/power.h>  
 #include <avr/sleep.h>  
 #include <avr/io.h>   
  /*  
 SCHEMA Utilisation d'un moteur CC  
 pin IA1 || LOW   || High  
 pin IB1 || HIGH  || Low  
 Motor  || backward || forward  
 PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() function.   
  */   
 const int IA1 = 9; // DIGITAL PIN 8 Bits   
 const int IB1 = 10; // DIGITAL PIN 8 Bits  
  /*  
  SCHEMA Cellule photosensible  
  reçoit digital un 0 ou 1  
  */  
 const int IP1=2; // DIGITAL INPUT + Interruption  
 const int TpsMontee=2000; // réglage du temps de montée  
 const int TpsDescente=1700; // réglage du temps de descente  
 int IsJourLast=HIGH; //Mise en route il fait jour  
 int flag=0; // sécurité interruption  
 void setup()   
 {  
  DDRD &= B00000011;    // set Arduino pins 2 to 7 as inputs, leaves 0 & 1 (RX & TX) as is  
  DDRB = B00000000;    // set pins 8 to 13 as inputs  
  PORTD |= B11111100;   // enable pullups on pins 2 to 7  
  PORTB |= B11111111;   // enable pullups on pins 8 to 13  
  //Commande du moteur cc via le L9110H  
  pinMode(IA1, OUTPUT); // set pin to output  
  pinMode(IB1, OUTPUT); // set pin to output  
  //Lecture cellule photosensible  
  pinMode(IP1,INPUT); // set pin in INPUT  
 // au branchement lance l'ouverture  
 // COndition initiales :   
 // - faire jour  
 //- Porte poulailler fermée  
  stop();  
 }  
 void loop() {  
  // détection du changement d'etat  
  int IsJour=digitalRead(IP1);  
  if (IsJourLast != IsJour)  
  {  
   // vérifie que la valeur a bien changé n sec plus tard    
   delay(30000); // attends 30 secondes  
   IsJour=digitalRead(IP1);  
  }  
  if (IsJourLast != IsJour)  
  {  
   if (IsJour==LOW)  
   {  
    // Ouvre  
    forward();   
    delay(TpsMontee);  
   }  
   else  
   {  
    // Ferme  
    delay(5500000); // attendre 40 minutes et demi  
    backward();  
    delay(TpsDescente);     
   }   
   stop();  
   IsJourLast=IsJour;  
  }  
  // Met en veille l'arduino  
  sleepNow();  
 }  
 void stop(){  
  digitalWrite(IA1, LOW);  
  digitalWrite(IB1, LOW);  
  delay(1000);  
 }  
 void backward()  
 {  
  digitalWrite(IA1, LOW);  
  digitalWrite(IB1, HIGH);  
 }  
 void forward()  
 {  
  digitalWrite(IA1, HIGH);  
  digitalWrite(IB1, LOW);  
 }  
 // PARTIE MISE EN VEILLE DU proccesseur  
 void sleepNow(void)  
 {  
   flag=0;  
   attachInterrupt(0, pinInterrupt, CHANGE);  
   delay(1000); // important laisse le temps de mettre en place l'interruption  
   //  
   // Choose our preferred sleep mode:  
   set_sleep_mode(SLEEP_MODE_PWR_DOWN);  
   //  
   // Set sleep enable (SE) bit:  
   sleep_enable();  
   //  
   // Put the device to sleep:  
   sleep_mode();  
   //  
   // Upon waking up, sketch continues from this point.  
   sleep_disable();  
   // SORTI DE LA VEILLE    
   flag=1;  
 }  
         //  
 void pinInterrupt(void)  
 {  
  if (flag>0)  
   detachInterrupt(0);  
 }  


Réglage du moteur:

 const int TpsMontee=2000; // réglage du temps de montée  
 const int TpsDescente=1700; // réglage du temps de descente  

le temps est en milliseconde, ajuster ces 2 variables à votre projet.

En conclusion, le système en lui même fonctionne parfaitement, pour palier au problème de justesse de détection du crépuscule, j'ai mis en place une minuterie pour retarder  l'ouverture / fermeture de la porte. 
On verra par la suite qu'il existe d'autres capteurs avec de meilleurs performance. 
Un autre problème apparaît rapidement, celui de l'autonomie. He oui l'arduino même en mode veille consomme trop et le montage ne tient pas la semaine. Il existe des pistes, utiliser un arduino pro en  3V en 8 mHz, ou de changer de micro-controleur par un MSP430.

Nous allons voir dans la partie 3, un montage utilisant une horloge RTC à la place de la photo-résistance.  

dimanche 21 décembre 2014

Porte de poulailler Part - 1 : Partie mécanique


  Construire une porte de poulailler automatique fonctionnant sur batterie

 

Voilà 1 an maintenant que ma porte est opérationnelle, ma porte a évolué durant quelques mois et finalement je dispose désormais d'une version stable ou plus exactement je dispose d'un panel de solutions ! 
J'ai fait l' acquisition de 2 poules ainsi que d'un joli poulailler en bois et enfin j'ai aménagé un enclos pour leur donner plus d'espace au fond de mon jardin. J'avais pris l'habitude d'ouvrir et de fermer  leur porte  pour leur sécurité (fouine renard etc..). C'est là que m'est venu l'idée de réaliser une porte automatique pour sécuriser le poulailler et pour leur permettre de se balader dans l'enclos même si nous sommes en déplacement. Avec cet article, j'ai voulu partager mon expérience.

Objectif


il m'a fallu du temps pour arriver à mes fins... A première vue le principe est simple: ouvrir la porte le matin, fermer le soir. Il suffit de répondre à cette question, à quelle heure se couche et se lève une poule ? Réponse: en fonction de la luminosité oui mais .... la sensibilité des animaux n'est pas toujours équivalente à celle de l'homme, il se trouve que j'ai une poule qui est une vraie trainarde et une lève tôt. A la limite de l'obscurité elle n'est pas décidée à rentrer....
Bon voilà les bases du problème ! Assez parlé voyons d'abord en détails la partie la plus simple du projet  la partie mécanique.

La partie mécanique


 La contrainte est d'avoir un mécanisme peu couteux en énergie, j'ai retenu le principe de la porte à guillotine pour sa facilité de mise en œuvre. La porte coulisse entre 2 rails de bas en haut et inversement. Le tout commandé par un petit moteur électrique récupéré d'un vieux jouet. Il nous faudra donc une poulie sur l'axe du moteur pour débobiner ou rembobiner un câble fixé à la porte. Petite astuce, j'ai attaché le fil comme dans le schéma ci-dessous. 

Ce schéma présente 2 avantages, la force de traction du moteur est divisée par 2 et il n'est plus nécessaire de mettre en place un frein moteur pour maintenir la porte en position ouverte simplifiant ainsi la mise en œuvre.


Matériaux utilisés

  • 2 glissières en alu qui servaient au store de velux pour réaliser les rails.
  •  Du fil de pêche pour le câble.
  •  Un vieux moteur électrique de jouet.
  • Un plaque de plastic de 3 mm d'épaisseur assez légère et sans entretien qui fera office de porte. 
  • une poulie en bois réalisé avec une perceuse et une scie cloche.
  • Une boite en plastique pour recevoir le moteur et l’électronique. 

Montage 


Porte et glissières :

  • Couper les glissières avec une scie à métaux d'une longueur de 50 cm.

  • Découper un morceau de plastique pour obtenir un rectangle de 28 (largeur) X 20 (hauteur) cm. Biseauter les coins pour faciliter la descente et la montée de la porte.

  • puis à l'aide d'un niveau positionner les glissières sans les fixer de part et d'autre de la porte avec un écartement de 30 cm, introduire la porte et vérifier qu'elle navigue aisément de haut en bas entre les glissières.  Ajuster si nécessaire l'écartement des glissières.

  • Il ne vous reste plus qu'à percer et visser les glissières. 

Remarques : Les glissières sont fixées directement sur la porte attention a ce que les vis n'entravent pas le passage de la porte.

Poulie, moteur :



j'ai réalisé la poulie à l'aide de morceaux de bois coupé à la scie à cloche et d'une douille  que j'ai récupéré  le tout collé avec de l'araldite. Passons au moteur, il faut s'assurer d'avoir une bonne longueur de fil d'alimentation du moteur sinon placer une rallonge (cosses ou des dominos sur les fils du moteurs) pour pouvoir relier le moteur à notre platine de test à l'intérieur de la boite.

Moteur,boite  et câble :


Percer un trou à la scie cloche sur une extrémité de la boite (côté opposé à l'ouverture) pour permettre de faire sortir le moteur électrique de quelques mm . coller ensuite le moteur au pistolet à colle soyer généreux en colle pour bien maintenir l'ensemble et réaliser une bonne étanchéité. 

Remarques : réaliser des petits trous dans le fond de la boite pour évacuer l'eau qui aurait réussi à rentrer.
Il ne reste plus qu'à fixer la boite et de mettre en place le câble, comme le montre la photo suivante(sur la photo la porte est en position haute). Pour cela percer un trou au milieu supérieur de la porte pour permettre le passage du fil de pêche. Placer la porte en position basse et faire un nœud côté crochet  et relier la porte puis la poulie en laissant une surplus de 2 cm qui nous servira de marge d'erreur pour la temporisation d'ouverture de la porte.


Et voilà la partie mécanique est terminée, nous allons nous intéresser à l'électronique dans les prochains articles.

Part - 2