Inversion du courant d'une bobine lors de la coupure d'un faisceau laser

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

Bonsoir,
Ton projet est très intéressant.
Comme tu es en classe prépa ingénieurs, il te reste encore beaucoup de chose à apprendre mais elles ne sont pas instrumentales :wink:
Première remarque :
En quoi, ton topic est une réalisation ou un projet fini ?
Eh oui tu l'as posté dans la mauvaise rubrique.
Deuxième remarque :
La présentation du code ne se fait pas de cette manière. Il est entre "balises codes"
Troisième remarque :
Lorsqu'on vient sur un forum (cela est vrai pour tous les forums), on se donne la peine de lire les messages épinglés.
Pour le forum Arduino, ils se trouvent ici :
Bienvenue
Nouveau sujet avec balises
Pour faire déplacer ton sujet, il faut faire la demande au modérateur (report to moderator en bas à gauche de ton sujet).
@+