Surveillance de rotation
Problème posé
Un axe doit tourner en permanence. Si il s'arrête, la Nano doit envoyer un signal indiquant l'arrêt.
Solution
Un capteur (NPN, mécanique, effet hall) se trouve sur l'axe et délivre des impulsions à chaque tour. Si il n'y a plus d'impulsion pendant 3s c'est que l'axe ne tourne plus. Une Nano va alors activer une sortie.
Réalisation
Un objet MTbutton utilise le capteur en entée. Chaque changement de niveau indique que l'axe tourne (on ne peut pas s'intéresser au niveaux car un arrêt de l'axe peut se produire aussi bien quand le capteur est HIGH que LOW. On peut utiliser uniquement l'information front montant, ici j'opte pour les deux changements de niveaux.
Si au bout de 3s on n'a pas d'informations, on va activer une led, par exemple BUILTIN_LED. Il faut donc utiliser un monostable que l'on réinitialisera à chaque changement de niveau du capteur. Tant que l'on a des impulsions, la réinitialisation du monostable fera que l'on arrivera pas au 3s.
Programme
#include "MTbutton.h" // V1.0.0 Voir http://arduino.dansetrad.fr/MTobjects #include "MTclock.h" // V1.0.0 Voir http://arduino.dansetrad.fr/MTobjects const byte CAPTEUR = 2; void allume(void) // Appelée en cas d'arrêt de plus de 3s { pinMode(LED_BUILTIN, OUTPUT); // Peut être mis dans le setup digitalWrite(LED_BUILTIN, HIGH); } MTclock Metronome(3000 milli_secondes, allume); void eteint(void) // Appelée pour chaque front du capteur { Metronome.start(); // Réinitialise le métronome digitalWrite(LED_BUILTIN, LOW); } MTbutton Capteur(CAPTEUR, eteint, eteint); void setup(){} void loop(){}
loop() étant vide, il est possible d'utiliser ce programme sans aucune modification avec n'importe que autre code, par exemple en supprimant les deux dernières lignes de ce code et en mettant le reste avant l'autre code.