Allez, je me suis mis au boulot hier soir, pour un partage rapide.
Je ne sais pas si cela a été fait sur le site, si jamais ca a été pour moi un petit entraînement.
Petit programme pour savoir quelles sont les butées d'un servo pour une application donnée : aiguilles, pont tournant, etc. Cela va donc me servir pour le réseau 1 et 2.
Matériel : arduino, servo, fils, ordi pour voie série
Préparatifs : mettre le servo en place et l'objet qui bouge en position médiane et fixer cet objet au servo. Dans mon cas, pour le pont tournant au milieu des deux voies. Cette position permet de gérer les deux positions extrêmes en tatonnant. Il me semble être le meilleur départ. Sinon on place dans l'un des positions extrèmes avec un writemicroseconds à 200 avec le .attach du servo et on règle seulement l'autre position. Il y a seulement une ligne à ajouter avant le attach. La position se règle dans le moniteur série en écrivant l'angle en micro-seconds. Voir les articles sur le site pour plus de précisions.
J'ai mis un mouvement réaliste aussi pour ne pas abîmer l'objet qui bouge avec un mouvement brusque. Quand j'aurais réglé les butées j'ai vu qu'il y avait une jolie bibliothèque permettant de bouger tout cela.
Servo sur la broche 2, à changer si nécessaire.
Petite note : j'ai bidouillé pour la voie série, je n'ai pas compris certains trucs, cependant comme je ne l’utiliserais pas ce mode de communication, je vais au plus simple
. En plus, je reprends la programmation après pas mal de temps.
Le voici :
#include <Servo.h>
const int broche=2;
Servo moteur;
int anglepre;
int angleant=1500;
int bin;
void setup() {
Serial.begin(9600);
delay(10);
while (!Serial){};
moteur.attach(broche);
}
void loop() {
if(Serial.available()){
anglepre=Serial.parseInt();
Serial.read();
if(anglepre > 999 && anglepre < 2001)
{
Serial.print("Angle choisi :");
Serial.println(anglepre, DEC);
if(anglepre == angleant){bin=0;}
else
{
if(anglepre > angleant){bin=1;}
else{bin=-1;}
while(anglepre != angleant)
{
angleant = angleant + bin;
moteur.writeMicroseconds(angleant);
delay(2);
}
}
}
else
{
Serial.println("L'angle n'est pas dans les limites de la bibliotèque Servo à savoir entre 1000 et 2000");
}
}
}
A déplacer ailleurs si cela n'est pas le sujet du fil ou si cela intéresse
Je vais racheter un servo pour cette application, j'ai l'impression qu'il rend l'âme, il fait un bruit bizarre. Il a pas du aimer quand j'ai inversé la variable bin et donc mis des microsecondes à 4000 probablement... Il finit sur le banc des objets tests.
Prochaine étape : décor et led