Bonjour,
Avec mon ami, on a pour projet de faire une catapulte magnétique à l'aide de bobines contrôlés via des relais Arduino. On a une alimentation externe pour les bobines (2.5 A) et on utilise une Arduino REV3 je crois.
Pour le principe, on a un mobile attaché a un fil de pèche tendu dans un tube en plexiglass que l'on fait passer dans nos bobines, nos deux capteurs sont entre les bobines. Et je pense c'est "normal" mais lors de l'activation des relais, indépendamment de si les bobines sont alimentés ou non, on voit quelque chose sur notre moniteur série, si quelqu'un sait, c'est surement du brouillage.
Jusqu'ici, tout allait bien, sauf que nous souhaitons, à l'aide de deux capteurs a effets Hall, déterminer la vitesse de notre mobile afin de pouvoir allumer la seconde bobine au bon moment, connaissant la distance entre les bobines et entre les capteurs. On a l'impression que notre carte est potentiellement trop lente par rapport aux calculs à fournir.
Voilà, donc sur le code si joint, on arrive pas à faire apparaitre et à utiliser notre vitesse justement pour contrôler la bobine. Si une âme charitable aurait une bonne idée pour fusionner les deux codes, et ainsi pouvoir contrôler notre seconde bobine.
Si besoin de plus de précisions, je resterai actif assez longtemps sur ce post. (Je n'ai pas vraiment accès à mon matériel de TIPE avant le 12 mai 2025)
Merci à vous !
Codes :
-Capteur de vitesse
int analogPin1 = A0; //pin pour le capteur
int analogPin2 = A1;
int analogVal1;
int analogVal2;
unsigned long debut = 0;
unsigned long fin = 0;
float vitesse;
void setup() {
Serial.begin(9600); // vitesse de transmission
pinMode(analogPin1, INPUT); //la pin est en entrée
pinMode(analogPin2, INPUT);
}
void loop() {
analogVal1 =analogRead(analogPin1);
analogVal2 =analogRead(analogPin2);
//Serial.println(analogVal1 - analogVal2-15); //afficher la valeur analogique avec un offset de 545 points ( valeur moyenne)
Serial.println(analogVal1-530);
Serial.print(",");
//Serial.println();
Serial.println(analogVal2-520);
if (analogVal1 -545 < -15)
{
debut = millis();
//Serial.println(debut);
}
if (analogVal2 < -15)
{
fin = millis();
}
//Serial.println(fin-debut);
vitesse = (8E-2)/(fin - debut);
//Serial.print(vitesse);
fin=0;
debut=0;
delay(20); //délai 100ms
}
Ce que fait ce code, fin normalement, c'est que le premier capteur détecte le maximum de champ magnétique, et enregistre le temps à cet instant, puis la même chose pour le second. On fait la soustraction des deux et connaissant la distance entre les deux capteurs, on a notre vitesse. Sauf que justement c'est ce code qui coince :,(
(Les -530, -520 ect sont juste la pour remettre les valeurs au zéro)
-Relais Arduino
int relais1 = 12;
int relais2 = 11;
int relais3 = 13;
int ledrouge = 1;
int ledverte = 2;
const int ledPin = 13;
plotting.graphcolor.00 = #2c7bb6
plotting.graphcolor.01 = #fdae61
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
Serial.println(F("Initialize System"));
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(relais2, LOW);
digitalWrite(relais1, HIGH);
delay(300);
digitalWrite(relais1, LOW);
digitalWrite(relais2, HIGH);
delay(250);
digitalWrite(relais2, LOW);
//digitalWrite(relais3, HIGH);
delay(5000);
//digitalWrite(relais3, LOW)
}