J'ai un moteur 220v controlé par un relais pilotable via arduino et j'ai egalement mis un capteur inductif derriére le moteur pour compter le nombre de tour (1 tour = 5 impulsions).
Mon probléme est que si je tourne le moteur à la main je vois bien mon compteur s'incrémenter mais si je mets le moteur en route, le compteur de s'incrémente plus et je vois qu'il se re-incrémente quand j'arrete le moteur (peut etre par ce qu'il tourne moins vite).
C'est un moteur asynchrone 220v qui tourne à 1500tr/min, mais sachant que j'ai 5 scotch en fer sur le ventilo à l'arriére, pour 1min je devrais avoir 1500*5 soit 7500impulsions par min.
le detachInterrupt c'était pour faire des tests car ca ne fonctionnait pas, mais il vaut mieux utiliser cli et sei.
Concernant le delais dans certains exemple il y était mais il ne sert à rien au final
edit : je suis sur un arduino nano, le capteur est alimenté en 5v tout comme le relais
Mais ça sera illisible... car ça ira trop vite.
Tu devrais faire un affichage du nombre d'impulsions cumulé sur une certaine durée, disons chaque demi seconde :
const int capteurInduPin = 2;
const int relaisPompePin = 6;
volatile int nbrTours = 0;
unsigned long period = 500ul; // 500 ms
unsigned long chrono;
void CompteurTours() {
nbrTours++;
}
void setup() {
Serial.begin(115200);
Serial.println(F("Demarrage !"));
pinMode(relaisPompePin, OUTPUT);
digitalWrite(relaisPompePin, LOW);
pinMode(capteurInduPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(capteurInduPin), CompteurTours, FALLING);
Serial.print("Nombre Impulsions = ");
chrono = millis();
}
void loop() {
if (millis() - chrono > period) {
chrono = millis();
cli();
Serial.println(nbrTours);
sei();
nbrTours = 0;
}
}
Pense aussi à régler la console sur une vitesse supérieure, ici 115200 baud.
A tester...
merci, je viens de tester mais j'ai le meme probléme, moteur allumé voici mon resultat :
Demarrage !
Nombre Impulsions = Demarrage !
Nombre Impulsions = 0
C'est le nano qui alimente tout ça ou une alim 5V séparée ? Quelle puissance ton alim ?
Ton moteur génère peut-être des parasites qui perturbent le capteur ?
comme je disais quand je fais tourner le moteur à la main (ca tourne pas trés vite du coup) ca s'incrémente bien mais une fois le moteur allumé c'est autre chose.
J'ai une alim externe 220v vers 5v 2.5A qui alimente l'arduino et les capteurs.
comment puis je savoir si mon moteur génére des parasites ?
n'y a t il pas des limites physiques concernant mon capteur, si il y a trop de detections ?
je ne pense pas que ce soit un probléme d'alimentation mais peut être il est quand meme alimenté à la fois par VIN par le transfo 5v et à la fois en usb sur mon ordi pour avoir le debug
La doc indique 500Hz. Mais le pullup interne à l'ATmega est très élevé ce qui ne participe pas à une bonne performance aux "fréquences élevées"
Tu peux mettre une résistance beaucoup plus faible le capteur est capable de fournir jusqu'à 200mA. Essaye avec une résistance de 1K (voir 470 Ohms) au +5V.
V sur Vin n'alimente rien, il faut soit mettre au moins du 7V, soit utiliser l'E/S appelée 5V
Pendant toute l'écriture, les inters sont désactivées. Il vaut mieux utiliser une variable tampon.
la remise à 0 de nbrTours risque de ne pas être correcte si une interruption arrive au milieu de l'instruction. Il vaut mieux:
Mais à priori le programme ne semble pas en cause. Je pense comme @fdufnews que cela vient du capteur. Il faudrait faire l'essai avec une fréquence qui augmente, par exemple une pale montée sur une visseuse.
Pourquoi prendre un entier signé pour le nombre de tours?
bonjour, non mon capteur est alimenté en 5V par une autre carte, mais ma version de capteur est vendue pour 5V, c'est meme specifié dans la ref inscrite dessus : LJ8A3-2-Z/BX-5V
Mais bon plus ca va plus je pense que ca vient du capteur , les autres que j'ai sont en effet en 6v-36v.