Pages perso Sam BO

 
 
Séquenseur pour pylone rétractable avec arduino pro mini 16mhz 5V
 

Voici le programme pour la réalisation d'un montage pour un séquenseur électronique pour pylone rétractable de planeur.
Je suis parti avec un arduino ( ça change un peu des pic...) pro mini 5v 16mHz.

Il vous faudra pour transferer le programme le logiciel Arduino et la librairie avec servo.h (pour inclure le sous programme de gestion des sorties servos).

Une seule entrée sera utilsée (moteur throttle) , et 3 sorties ppm : une pour commander le servo de la trappe, une pour la sortie du pylone et une autre pour la gestion du controleur brushless.
Au moment ou on mets un peu de throttle alors la trappe s'ouvre ensuite on sort le pylone doucement pour initialiser le controleur brushless et le mettre en rotation.


Voici une petite video :





/*programme samuel Bo 09/06/2014
 pylone retractable pour planeur electrique
Avec 1 servo pour la trappe, 1 servo pour le pylone et la commande du controleur brushless
ce montage est adapté a mon planeur si vous voulez le copier faire un reglage des min max et des sens de rotation des servos
*/
#include <Servo.h> 
 
Servo trap;  // controle du servo de la trappe 
Servo pyl;  // controle du servo du pylone
Servo brushless;  // commande du controleur brushless

int pos_t = 0;    // variable to store the servo position 
int pos_p = 0;    // variable to store the servo position 
int pos_b = 0;    // variable to store the servo position 
int init_p=170;
int init_t =0;


int ServoVal = 0;    // variable to store the servo position
int declench = 70;
int ServoValt_min = 0;  //min et max servo trappe
int ServoValt_max = 158;

int ServoValp_min = 0;  //min et max servo pylone
int ServoValp_max = 170;


int RCinput = 0;    // variable to store the servo position
int pylone_sortie=0;

unsigned long duree;


void setup() 

  trap.attach(9);  // attaches the servo on pin 9 to the servo object 
  pyl.attach(10);  // attaches the servo on pin 10 to the servo object
  brushless.attach(11);  // attaches the servo on pin 11 to the servo object
  pinMode(3, INPUT);// entrée ppm moteur pin 3
  
  delay(2000);
  brushless.write(60);
  //delay(5000);
 // brushless.write(70);
  trap.write(158);                // positionnement du servo trappe ouverte pour initialisation
  delay(2000);
  brushless.write(60);
  pylone_sortie=0;
  pyl.write(init_p);              // positionnement du servo rentrer le pylone si besoin
  delay(2000);
  trap.write(init_t);              // positionnement du servo en fermeture de la trappe
  delay(1000);

 
 
void loop() 

  duree = pulseIn(3, HIGH);                 // lecture entree ppm des gaz
  ServoVal = map(duree, 520, 2370, 0, 180); //mise à l'echelle pour convertir la durée en angle de la sortie servo
  
 if (ServoVal> declench)
{
  
    for(pos_t = ServoValt_min; pos_t < ServoValt_max; pos_t += 1)  // ouverture trappeincrementation de 1 en degres
  {                                  //  
      trap.write(pos_t);              // positionnement du servo 
      delay(5); 
  }
      delay(500);
      
     
        for(pos_p = ServoValp_max; pos_p >ServoValp_min; pos_p -= 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
      pyl.write(pos_p);              // tell servo to go to position in variable 'pos' 
      delay(15); 
  }              // tell servo to go to position in variable 'pos'
  
          
     delay(1000);
     
     pylone_sortie=1;
     
     
      pos_b = 60;
      brushless.write(pos_b);              // initialisation du controleur brushless 
      delay(2000);
      brushless.write(70);                //essai moteur
      delay(1000);
           
      do
    { 
      
      duree = pulseIn(3, HIGH);                 // lecture entree ppm des gaz
      ServoVal = map(duree, 520, 2370, 0, 180); //mise à l'echelle pour convertir la durée en angle de la sortie servo
      
      if (ServoVal>70)
      {
      brushless.write(ServoVal);
      }
      else
      {
        brushless.write(60);
        delay(1000);
        duree = pulseIn(3, HIGH);                 // lecture entree ppm des gaz
        ServoVal = map(duree, 520, 2370, 0, 180); //mise à l'echelle pour convertir la durée en angle de la sortie servo
      
        delay(20);
        
        if (ServoVal<65)
        {
          
        brushless.write(60);
        pylone_sortie=0;
        goto sortie ;
        }
       
      }


    }while (pylone_sortie=1);

sortie:


        brushless.write(0);
        delay(2000);    //attente del'arret moteur pour le rentrer
        
        for(pos_p = ServoValp_min; pos_p < ServoValp_max; pos_p += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
      pyl.write(pos_p);              // tell servo to go to position in variable 'pos' 
      delay(15); 
  }
     
     delay(1000);
     
        for(pos_t = ServoValt_max; pos_t >ServoValt_min; pos_t -= 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
      trap.write(pos_t);              // tell servo to go to position in variable 'pos' 
      delay(5); 
  }
      
      
        pylone_sortie=0;
        
  

} 



Créer un site
Créer un site