J'ai trouvé sur Internet un code qui permet d'afficher la vitesse du vent en m/s dans le moniteur. J'ai retravaillé ce code pour qu'il m'affiche uniquement le nombre de tours fait par les coupelles en 1 minute (ce dont j'ai besoin). Par contre, il n'affiche aucune valeur dans le moniteur (il affiche "Vitesse de rotation = inf tr/min"). Le câble est branché sur la borne D2 du shield (comme sur le site du vendeur). Je dois sûrement louper quelque chose. Pourriez-vous me dire quoi vu que je suis débutant avec Arduino.
Merci pour votre aide
#define pinANEMO 2
void setup()
{
pinMode(pinANEMO, INPUT);
Serial.begin(9600);
}
unsigned long millis_old(0);
float deltaTime(0);
float NombreTourSec(0);
bool isActive(false);
void loop()
{
UpdateANEMO();
//convertion periode -> fréquence
NombreTourSec = (1/deltaTime);
//affichage de la vitesse
Serial.print("Vitesse de rotation = ");
Serial.print(NombreTourSec);
Serial.print(" tr/min\r\n");
}
void UpdateANEMO()
{
//lecture du capteur
isActive = digitalRead(pinANEMO);
if(isActive)
{
deltaTime = (millis() - millis_old) /1000 ; // div en 1000 pour avoir le résultat en seconde
millis_old = millis(); // remise à 0 du compteur pour capturer la différence de temps au prochain tour
}
}
Dans UpdateANEMO, il ne faut pas tester l'état de l'entrée, mais le changement d'état.
void UpdateANEMO()
{
static byte etatPrecedent=LOW;
//lecture du capteur
byte etat = digitalRead(pinANEMO);
if (etat && etat!=etatPrecedent)
{
deltaTime = (millis() - millis_old) / 1000.0 ; // div en 1000 pour avoir le résultat en seconde
millis_old = millis(); // remise à 0 du compteur pour capturer la différence de temps au prochain tour
}
etatPrecedent=etat;
}
Comme tu fais la mesure dans la loop, tu ne vas obtenir des résultats corrects acceptables que pour les faibles vitesses. Tu dois utiliser une interruption pour la mesure de durée.
De plus tu calcules la vitesse en tr/s et à l'affichage tu dis que c'est des tr/min
Serial.print(NombreTourSec);
Serial.print(" tr/min\r\n");
Le code précédent fonctionne mieux. Celui-ci donne des valeurs assez aléatoires. Mais, ce n'est pas grave car je suis déjà très satisfait que l'autre fonctionne. Merci kamill.
Le dernier programme devrait donner des valeurs beaucoup plus stables.
Comment est ce que tu testes la stabilité?
La fréquence est de quel ordre?
Si la fréquence est supérieure à 10 ou 20 Hz tu peux utiliser micros() à la place de millis() pour avoir une meilleure résolution.
Je fais tourner l'anémomètre grâce à un ventilateur et j'ai un anémomètre manuel digital pour contrôler la vitesse. Celui-ci m'affiche une vitesse de 11,5 km/h donc je devrais trouver des valeurs autours de 7,3 tours/s. Voici ce que le moniteur série affiche :
Vitesse de rotation = 20.00 tr/s
Vitesse de rotation = inf tr/s
Vitesse de rotation = 10.42 tr/s
Vitesse de rotation = 22.73 tr/s
Vitesse de rotation = inf tr/s
Vitesse de rotation = 10.99 tr/s
Vitesse de rotation = 20.41 tr/s
Vitesse de rotation = inf tr/s
Vitesse de rotation = 10.42 tr/s
Vitesse de rotation = 23.26 tr/s
Vitesse de rotation = inf tr/s
Vitesse de rotation = 10.87 tr/s
Vitesse de rotation = 20.41 tr/s
Vitesse de rotation = inf tr/s
Vitesse de rotation = 10.64 tr/s
Vitesse de rotation = 22.73 tr/s
Concernant la fréquence, de quelle fréquence parles-tu ? Ma carte arduino est branché sur mon PC sur le câble USB.
Avec micros() à la place de millis(), voici ce que le moniteur affiche :
Vitesse de rotation = 0.02 tr/s
Vitesse de rotation = 25.00 tr/s
Vitesse de rotation = 0.01 tr/s
Vitesse de rotation = 125.00 tr/s
Vitesse de rotation = 22.73 tr/s
Vitesse de rotation = 0.01 tr/s
Vitesse de rotation = 0.02 tr/s
Vitesse de rotation = 25.00 tr/s
Vitesse de rotation = 0.01 tr/s
Vitesse de rotation = 0.02 tr/s
Vitesse de rotation = 0.01 tr/s
Vitesse de rotation = 0.03 tr/s
Vitesse de rotation = 0.01 tr/s
Vitesse de rotation = 0.02 tr/s
Vitesse de rotation = 0.01 tr/s
Je dois sûrement louper des trucs ... Merci pour ta patiente
Je pense qu'il y a un problème hard.
Est ce que tu as essayé le programme de test donné sur la page de l’anémomètre, que tu as donnée dans ton post initial, en tournant à la main.
Oui je l'avais fait dès que j'avais reçu le matériel et je viens de le refaire à l'instant pour revérifier en faisant tourner les coupelles manuellement. Le LED 13 brille en fonction du contact.
Je viens de tester le programme que je t'ai proposé avec un générateur.
Il fonctionne parfaitement, ce qui me conforte dans l'idée qu'il doit y avoir un problème hard.