Bonjour,
J'aimerai calculer la vitesse de rotation d'un disque avec un capteur optique. Le capteur envoie un faisceau lumineux entre sa partie émettrice et sa partie réceptrice. Il est capable de détecter si un objet est présent etre ces deux parties. Principe de mon algorithme: j'ai fait un trou dans mon disque. Je compte le nombre de fois où le trou passe entre la partie émettrice et réceptrice du capteur durant un laps de temps et je calcule ainsi la vitesse de rotation de mon disque. Malheureusement, mon programme ne fonctionne pas et il affiche en boucle une vitesse de 0 tr/min. Je suis débutante en code arduino, je me suis inspirée de plusieurs codes existants et j'ai essayé d'utiliser la fonction millis(), le problème vient peut être de là. Il n'y a pas de faute de syntaxe. Je dois dans un premier temps simuler mon projet sur le logiciel proteus, je vous passe quelques captures d'écran.
Code:* Main.ino file generated by New Project wizard * * Created: Thu Sep 5 2013 * Processor: ATmega2560 * Auto-coupleur */ int variable = 0; int test =0; #include <LiquidCrystal.h> LiquidCrystal lcd(15, 14, 13, 12, 11, 10); // Pins utilisé const int capteur=5; //capteur port OUT relié au pin5 de l'arduino // Initialisation des variables int lumiere; // affiche si le faisceau lumineux est coupé ou non par le disque. Si la lumière est allumé la partie trouée est devant le capteur int tour=0; //variable qui compte le nombre de fois où la partie trouée du disque passe devant le capteur float trmin; // variable qui affichera la vitesse du disque en tour/min unsigned long temps; //sert à enregistrer le temps écoulé depuis la dernière mise à jour du compteur void setup() { Serial.begin(9600); //connection au port série pinMode(capteur, INPUT); //connection du capteur à l'arduino temps=millis(); } void loop() { //Vérifie si le trou arrive à hauteur du capteur lumiere = digitalRead(capteur); if (lumiere == LOW) { // on ajoute 1 à la variable qui compte le nombre de tours tour=tour+1; // si il s'est passé plus d'une seconde depuis le début du calcul du nombre de tours if ((millis() - temps) > 1000){ // trmin= (nb de tours depuis le dernier calcul)/ (temps écoulé entre les deux caculs en minute 1min=60 000ms trmin=tour/(millis()-temps)*60000.0; lcd.print("vitesse en tour/min: "); lcd.println(trmin); //Réinitialisation du temps et du nombre de tours temps=millis(); tour=0; } } delay(500); }
Si quelqu'un trouve ce qui ne va pas ça serait super !
-----