Bonjour à tous et à toutes,
Je suis élève en classe préparatoire ingénieur et je dois préparer un projet pour mes concours en fin d'année. J'ai choisi la propulsion électromagnétique et j'essaie donc de lancer un aimant dans un tube de plexiglass transparent grâce à une bobine.
Pour ce faire j'utilise une carte arduino UNO qui permet de contrôler l'alimentation de ma bobine, et plus precisément d'inverser le courant quand l'aimant atteint son centre.
Les tensions utilisées étant trop élevées pour la carte (10V/1.5A), j'ai utilisé un pont en H (un circuit inverseur de courant fonctionnant comme une sorte d'interrupteur télécommandé, je mettrai un lien pour le principe de fonctionnement de ce circuit à la fin du post) qui permet à la carte d'inverser le courant sans qu'il ne la traverse elle-même.
Ainsi l'arduino génère une tension sur l'une des 2 entrées du pont en H, ce qui fera fonctionner la bobine dans un sens ou dans l'autre.
A cela s'ajoute une photodiode éclairée par un laser servant à détecter le passage de l'aimant, qui doit inverser le courant quand il atteint le centre de la bobine afin d'éviter qu'il ne s'y immobilise. Ne pouvant pas placer le détecteur au centre de la bobine, je me contente d'un delay dans mon programme que je règle manuellement.
Ceci dit, j'en viens finalement à mon problème: j'ai écrit un programme qui devrait me permettre de réaliser les taches décrites ci-dessus, mais en pratique il ne fonctionne pas !
N'ayant jamais codé en langage arduino ou C avant, je vous demande votre aide pour essayer de comprendre ce qui ne marche pas ici.
Voici le code:
int in1=4; //sens 1 du moteur
int in2=5; //sens 2 du moteur
int PhD=3; // entrée photodiode
int PhDmesure=0;
int nblect=5;
long somme=0;
int seuil=75; //valeur de seuil de l photodiode
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(PhD, INPUT);
}
void loop() {
int i;
somme=0;
for (i=0 ; i<nblect ; i++) { //moyenne des mesures de la photodiode
somme = somme + analogRead(PhD);
}
PhDmesure= (somme / nblect);
digitalWrite(in1,LOW); //sens initial de la bobine: sens 2
analogWrite(in2,200);
if (PhDmesure<seuil) { //coupure du faisceau laser
delay(13); //on attend que l'aimant atteigne le centre de la bobine
digitalWrite(in2,LOW); //inversion: bobine en sens 1
analogWrite(in1,200);
delay(10000); //correspond à un temps infini: je ne savais pas comment faire pour que la bobine reste dans le sens commandé par la boucle if...
}
}
Comme vous pouvez le voir, c'est un peu du bricolage par moment, notament le delay(10000) à la fin qui sert juste à garder la bobine dans le sens 1 "longtemps"...
lien pour le principe du pont en H: https://openclassrooms.com/courses/programmez-vos-premiers-montages-avec-arduino/le-moteur-a-courant-continu-partie-2-le-pont-en-h-et-les-circuits-integres
Merci d'avance de votre aide !
Côme