Re: Gestion d'un PN (Barrières oscillantes)
Posté : 09 avr. 2020, 15:00
Tout ou presque sur le Zéro
https://cercleduzero.org/forum/
Tout ça c'est possible avec un seul Arduino.MIMINE DU 03 a écrit : ↑09 avr. 2020, 15:43 Donc je reste sur ma programmation avec deux modules arduino indépendants pour chaque servo et donnera de la souplesse à la vitesse, à l’angle et de synchronisation avec une possibilité de rebond des bras choisi pour que l’ensemble reste fluide…
Si, un deuxième Arduino.
Bien sûr que si ! C'est une question de programmation. Des valeurs de progression différentes, voire variables au cours des mouvements, sont possibles, des arrêts ou redémarrage de mouvement pour l'un ou pour l'autre sont possibles, etc...MIMINE DU 03 a écrit : ↑09 avr. 2020, 18:12 Et oui c'est bien ce que je disait, l’arduino ne peut pas commander deux servomoteurs pour des réglages différent en même temps. CQFD
Je viens d'écrire que les servos N'ONT PAS D'A-COUP ! Ce sont les barrières, qui par leur conception, en ont ; comme les vraies.MIMINE DU 03 a écrit : ↑09 avr. 2020, 18:12Maintenant je comprends l'à-coups du servo, si il a une rupture de courant ou mise en tension du servo par la carte relais, cela provoque le défaut d'à-coup.
Code : Tout sélectionner
//CODE POUR FAIRE UN TEST D UN SERVOMOTEUR OU DEUX SERVOMOTEURS EN //
// SERVOMOTEUR**********************************************************************************
#include <Servo.h>
Servo myservo2; // création du servomoteur myservo
Servo myservo1; // création du servomoteur myservo
int pin_servo1 = 9; // Pin sur lequel est branché le servo
int pin_servo2 = 10; // Pin sur lequel est branché le servo
int pos = 0; // variable permettant de conserver la position du servo
int angle_initial = 25; //angle initial du point zero
int angle_final = 180; //angle final
int increment = 1; //incrément entre chaque position par pas de 1 degrée
bool angle_actuel = false;//Envoi sur le port série la position courante du servomoteur
//BOUTON CONTACT***************************************************************************************
boolean DigitalRead(int pinNumber)
{
pinMode(pinNumber, INPUT);
return digitalRead(pinNumber);
}
void setup()
{
myservo1.attach(pin_servo1); // attache le servo au pin 9 spécifié sur l'objet myservo
myservo2.attach(pin_servo2); // attache le servo au pin 10 spécifié sur l'objet myservo
delay(50);// DUREE DU SERVOMOTEUR
}
void loop()
{
//if (DigitalRead(A0))// CONTACT A0 POUR DESCENDRE LA BARRIERE
{
//**************SERVO*********************************************
for
(pos = angle_initial; pos <= angle_final; pos += increment)
{ // Déplace le servo de 0 à 180 degrées par pas de 1 degrée
myservo1.write(pos); // Demande au servo de se déplacer à cette position angulaire
myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire
delay(20); // Attend 20ms entre chaque changement de position vitesse de deplacement du servo
//si 20ms = vitesse rapide et si 100 ms vitesse lente
}
//*****************************************************************
}
// SI CONTACT SUR LE PLOT A1 = OUVERTURE BARRIERE
//if (DigitalRead(A1))// CONTACT POUR OUVRIR LA BARRIERE
{
//*********** SERVO ******************************************************
for (pos = angle_final; pos >= angle_initial; pos -= increment)
{ // Fait le chemin inverse
myservo1.write(pos);
myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire
delay(20); // Attend 20ms entre chaque changement de position vitesse deplacement du servo
//si 20ms = vitesse rapide et si 100 ms vitesse lente
}
//***********************************************************************
delay(100);//RAFRAICHISSEMENT
}
}
// FIN DU LOOP
Code : Tout sélectionner
// SERVOMOTEUR AVEC REBOND**********************************************************************************
#include <Servo.h>
Servo myservo2; // création du servomoteur pour le bras gauche myservo2
Servo myservo1; // création du servomoteur pour le bras droit myservo1
int pin_servo1 = 9; // Pin sur lequel est branché le servo bras droit
int pin_servo2 = 10; // Pin sur lequel est branché le servo brat gauche
int pos = 0; // variable permettant de conserver la position du servo
int angle_initial = 0; //angle initial du point zero
int angle_final = 130; //angle final
int increment = 1; //incrément entre chaque position par pas de 1 degrée
//***************************************************
int angle_initial7 =125; //angle initial du point REBOND
int angle_final7 = 130; //angle final
//**************************************************************
bool angle_actuel = false;//Envoi sur le port série la position courante du servomoteur
//BOUTON CONTACT***************************************************************************************
boolean DigitalRead(int pinNumber)
{
pinMode(pinNumber, INPUT);
return digitalRead(pinNumber);
}
void setup()
{
myservo1.attach(pin_servo1); // attache le servo au pin 9 spécifié sur l'objet myservo
myservo2.attach(pin_servo2); // attache le servo au pin 10 spécifié sur l'objet myservo
delay(200);//
pos = angle_initial;// MISE EN PLACE DES BRAS
}
void loop()
{
//if (DigitalRead(A0))// CONTACT A0 POUR DESCENDRE LA BARRIERE (mise a la masse sinon mettre A0 au 5v pour demarage du servo)
//***************************SERVO***************************************
//****************************REBOND**************************************
for (pos = angle_initial; pos <= angle_final; pos += increment)
{
myservo1.write(pos);
myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire
delay(150); // Attend 20ms entre chaque changement de position vitesse deplacement du servo
// si 20ms = vitesse rapide et si 100 ms vitesse lente
}
//*************************************************************************
for
(pos = angle_initial7; pos <= angle_final7; pos += increment)
{
myservo1.write(pos);
myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire
delay(150); // Attend 20ms entre chaque changement de position vitesse deplacement du servo
// si 20ms = vitesse rapide et si 100 ms vitesse lente
//*************** FIN DE LA DESCENTE DE LA BARRIERE*************************
}
//*********************************OUVERTURE BARRIERE***************************************************************
delay(6000);//ATTENTE pour test
// SI CONTACT SUR LE PLOT A1 = OUVERTURE BARRIERE
//if (DigitalRead(A1))// CONTACT POUR OUVRIR LA BARRIERE(mise a la masse sinon mettre A1 au 5v pour demarage du servo)
//*************************** SERVO ******************************************************
for (pos = angle_final; pos >= angle_initial; pos -= increment)
{
// Fait le chemin inverse
myservo1.write(pos);
myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire
delay(150); // Attend 20ms entre chaque changement de position vitesse deplacement du servo
//si 20ms = vitesse rapide et si 100 ms vitesse lente
}
//***********************************************************************
delay(9000);//RAFRAICHISSEMENT ET ATTENTE DE 9S pour test
}
// FIN DU LOOP