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'
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
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); }