Détection de moteur bloqué

Bonjour,
Pour mon premier montage arduino j’ai fabriqué une trappe poule automatique qui fonctionne depuis mai dernier.

Suite à problèmes de contacts fin de course et aussi parce que j’aime bien expérimenter, j’ai opté pour la détection de blocage. Ça me fait une sécurité supplémentaire pour ne pas transformer la porte en guillotine :wink:

Je mesure le courant aux bornes d’une résistance de 10 ohm placée en série avec le moteur.
Elle sert aussi à limiter le courant pour ne pas griller le moteur.

J’ai trouvé un compromis pour une valeur correspondante au courant de blocage. Seulement, elle dépends aussi de la tension de la batterie. J’ai déjà du réajusté suite à ce que la batterie s’était complètement déchargée, la détection ne s’étant pas faite.
Comme la résistance aux bornes des balais du moteur doit varier aussi, j’ai pensé au détecteur optique à fourche et disque cranté.

N’y aurait-il pas une solution plus simple ?

trappe_promini.ino (4.57 KB)

Oupss ! erreur de schéma :frowning:
http://moncastel.free.fr/forum/trappePoule/

Je pense avoir trouvé la solution que j'essaierai lundi prochain.

Le courant du moteur doit varier beaucoup quand il tourne et plus du tout quand il est bloqué, alors j'ai pensé à ce bout de code pour arrêter le moteur après 400 ms de blocage :

 // variables ajoutées :
int courant_moteur;
unsigned long debut_blocage; // heure du début de blocage
int mem_courant; // valeur sauvegardée au début du blocage
int delai_blocage = 400; 

et dans loop()

 courant_moteur = analogRead(moteur);

  // arret moteur si courant moteur invariable depuis delai_blocage
 
 if (rotation == 1) { // moteur tourne
    if (mem_courant != courant_moteur) { // pas bloqué
      // sauve le courant moteur et debut de comptage
      mem_courant = courant_moteur;
      debut_blocage = millis();
    }

    if ((courant_moteur == mem_courant) && ((millis() - debut_blocage) > delai_blocage)) {
      // bloqué et délai dépassé
      stop();
    }

  }