J'ai découvert le monde fabuleux d'Arduino il y a quelques jours. J'ai déjà fait du c++ en école d'ingénieur et j'avais regardé pour programmer des PIC.
Premier projet :
Je fais de l'airsoft (jeu de tire de bille de plastique inoffensive si on porte des lunettes homologuées) et je voudrais réaliser une commande de réplique avec un Arduino.
Sur les répliques d'airsoft dite AEG (Automatic Electric Gun), la commande est réalisé mécaniquement : la gâchette fait le contact qui alimente la réplique, et c'est mécaniquement que la sécurité empêche ce contact ou que le contact est rompu en fin de cycle quand on tire en semi.
Les répliques d'airsoft AEG consomment pas mal de courant. Elles sont souvent alimentées par des batteries de 9V en Nimh, LIPO, LIFE et sont souvent muni de fusible de 15-20-25 ampère.
La consommation d'un tel courant et surtout nécessaire quand il faut relancer le cycle alors que le ressort est presque en arrière. Ce shéma peut vous aider à comprendre.
Je voudrai réaliser une commande d'AEG a partir d'un circuit Arduino car cela me permettrait de :
compter le nombre de bille tiré et donc le nombre de bille restante
effectuer des tires en mod BURST par exemple : 3 tires consécutifs commandé par 1 seul pression sur la gâchette.
déporter la gâchette.
...etc
Je compte réaliser une réplique complétement c'est a dire que j'ai un peu de place pour loger le circuit de l'Arduino.
Ma question est la suivante : que dois-je utiliser pour le commande de mon moteur ?
Ma question : pour la partie soft, est-ce qu'un Arduino peut mesurer la vitesse d'une bille avec une précision de quelques pour cent ?
La temps de parcours serait de l'ordre 1/1000 de secondes (vitesse de 100m/s sur une distance de 0.1m).
J'ai cherché des infos sur ce forum en tapant des mots clés comme "airsoft", "chrony", "chronomètre" mais je n'ai rien trouvé.
Merci d'avance pour vos réponses.
Ju-de-tomate: Premier projet :
...
La consommation d'un tel courant et surtout nécessaire quand il faut relancer le cycle alors que le ressort est presque en arrière. Ce shéma peut vous aider à comprendre.
Ma question est la suivante : que dois-je utiliser pour le commande de mon moteur ?
pas vu ton schema , mais trouvé celui là sur wikipedia
le moteur ne tourne donc que dans un seul sens, à chaud je mettrais un mosfet N un peu costaud commandé directement par une sortie de l'arduino.
Ma question : pour la partie soft, est-ce qu'un Arduino peut mesurer la vitesse d'une bille avec une précision de quelques pour cent ?
La temps de parcours serait de l'ordre 1/1000 de secondes (vitesse de 100m/s sur une distance de 0.1m).
en utilisant les ressources d'interruption et/ou de timer de l'arduino c'est faisable, après il faut voir la restitution des infos.
bonjour
Je n'ai pas trouvé le PDE
commande moteur par Mosfet N , c'est ce qu'il y a de plus simple/souple
rapidement
je ne trouve pas la partie alim de l'arduino très secure, perso je mettrais un regulateur low-drop et une bonne capa en sortie .
Qu'est ce que tu appels la restitution des infos ?
acquerir une info (ici la velocité) c'est bien, mais il faut restituer cette info pour l'utiliser.
Tu veux lire l'info dans quelles circonstances ? en utilisation permanente ou juste dans des conditions de test/évolution en labo ?
PDE = ? désolé je suis un newbie en Arduino et en électronique (juste quelques cours d'éec en école d'ing).
Pour l'alim de l'arduino je pensais mettre une autre batterie mais si je peux utiliser un régulateur low drop comme tu le dis, ce serai encore mieux. Par contre pour choisir le modèle c'est autre chose...
Le code source je pense que je devrais arriver à le réaliser. J'ai plus de mal avec la partie hard. C'est ce qu'il me manque pour avancer dans le projet n°1. Sur le topic que j'ai évoqué précédement, il propose un schéma mais je ne sais pas s'il est correcte.
Pour le projet n°2, je veux afficher les infos sur un LCD à chaque fois qu'un mesure est faite (obturation devant le capteur 1 puis devant le 2).
Pour ce qui est des interruptions je n'en ai encore jamais utiliser, faut que je me documente.
Faisant de l'airsoft je connait la problématique ^^
Projet 1 : pour le comptage tu vas galerer ... c'est pas pour rien que le burst est apparu il y a seulement quelques mois (et n'a eu aucun succès ...). Ces sytèmes utilisent une roue codeuse IR. Sinon les MOSFET airsoft existent, regarde sur france airsoft il y a de schéma qui trainent.
Projet 2 : la vitesse d'échantillonnage à pleine résolution est de 7 khz, soit une période 140 µs. Mais en abaissant la resolution (10 bits completement inutile ici !) on peut bien accelerer les choses. Avec une bascule aussi tu pourrait mesurer la période intermédiaire et donc réduire l'erreur.
Projet 1 : je pensais utiliser une entrée analogique de l'arduino pour avoir une image de l'intensité consommé par le moteur et donc en déduire le nombre de cycle. Sinon prendre de l'information de fin de cycle par un switch dans la gearbox sur le cutoff lever.
B@tto:
Projet 2 : la vitesse d'échantillonnage à pleine résolution est de 7 khz, soit une période 140 µs. Mais en abaissant la resolution (10 bits completement inutile ici !) on peut bien accelerer les choses. Avec une bascule aussi tu pourrait mesurer la période intermédiaire et donc réduire l'erreur.
Pour utiliser les interruptions, je dois utiliser une entrée analogique avec un code de ce style :
void setup() {
attachInterrupt(0, detect, CHANGE);
}
Salut amis airsofteurs,
sinon pour ton projet 1, tu peut acheter un mosfet spéciale AEG:
j'ai ça sur un de mes joujous et ça marche nickel.
En plus ça protège ton moteur ainsi que la mécanique. Grâce à ça, l'intensité qui passe par le contact de la gachette est très faible, et tu pourrait relier la gachette à l'arduino.
Et pour effectuer un tir, laisse passer le courant pendant un temps donner.
ps: en plus avec certains de ces mosfets, tu peut tirer en burst
J'aurais fait autrement parce que deja tu n'as pas besoin de l'analogRead (il sert à rien) et ensuite avec CHANGE il va surement faire l'interruption à la montée et à la descente de chaque pic.
Donc plus un truc du genre :
long Depart;
int Flag=0;
void setup(){
Serial.begin(57600);
attachInterrupt(0,detect,FALLING);
}
void loop(){
if (Flag==1){
Flag++;
Depart=micros();
}
if (Flag==3){
Depart=Depart-micros();
Flag=0;
Serial.println(Depart);
}
}
void detect(){
Flag++;
}
Je vois pas comment je peux faire sans analogread.
Ce que j'ai compris : j'ai une led IR qui sera allumé en permanence avec en fasse un capteur IR. Quand une bille devant la tension va chuter sur le capteur. J'ai donc besoin de l'analogread pr détecter la chute de tension. Quand la chute de tension est détecter j'enregistre le temps dans une variable. J'attends la détection sur l'autre capteur IR pou enregistrer cette deuxième valeur de temps. La différence entre ses 2 valeurs de temps me donne la vitesse vu que j'ai la distance.
Deja, c'est un phototransistor, donc pas d'IR = état bloqué = pic de tension et non une chute.
Mon programme fait ça : l'interruption a lieu quand l'entrée passe de HIGH à LOW, autrement dit, quand une bille va passer et générer le pic de tension, il va détecter le front descendant (on pourrait très bien le faire avec le front ascendant). un principe de base avec les interruptions c'est d'en faire le moins possible et le plus rapidement possible. C'est pour celà que j'incrémente une variable, Flag, et qu'à chaque valeur de flag correspond une étape. En détail ça donne :
Flag = 0
Une bille passe, interruption, Flag = 1
Flag = 1 donc aquisition du temps de départ, Flag = 2
Nouveau pic, Flag = 3
Flag = 3 donc acquisition du temps final, calcul, envoi du résultat par le port série, réinitialisation de Flag
Je vais tester ca. J'attends juste de recevoir les led IR.
Par contre pour branché les phototransistors (j'ai commandé ca : IRM_3638 Infrared Receiver 38Khz)
Tu parlais d'état High et Low pour l'entrée j'en déduis que tu les branches sur une entrée numérique. Je peux les brancher directement ? Est-ce que le faisceau sera entièrement coupé par la bille ?
Est-ce que l'entrée va bien passé de High à Low quand une bille passera ?
Une règle de base est de toujours mettre une résistance, quelque soit l'entrée ou la sortie. Un µC comme l'Atmega ne sert qu'à traiter de l'information et à envoyer des ordres (grosso-modo hein) c'est pas un étage de puissance. Donc les courant mis en jeu sont relativement faible.
Dans ton cas il faut juste suivre un état logique, donc entrée digitale en effet. Après oui effectivement, est-ce que le le transistor va bien completement se bloquer ... ça je peux pas le dire. Si c'est pas le cas, faudra juste faire une petite amplification (avec un amplificateur opérationnel c'est très simple à faire).
A l'entrée tu auras un pic, donc une transition low to high, puis high to low (si bien sûr le phototransistor se bloque)