Porte poulailler Stepper

Bonjour

Je suis novice et je suis en train de programmer une porte de poulailler automatique.

Mon code fonctionne et ma question est justement : pourquoi mon code fonctionne ?

Je précise juste que si je me prends la tête alors que mon code fonctionne c'est aussi parce que j'ai vu sur internet beaucoup de sujet sur les codes pour portes de poulailler et la simplicité de mon code ne surprend vu que le sujet pose beaucoup de questions à beaucoup de monde. Du coup, je sens qu'il y aura une tuile à venir

J'utilise 2 stepper 28 BJY 48 + ULN2003 et une cellule photosensible (les basiques)

voici le code : (je n'ai pas réglé les données luminosité et nombre de pas)

#include <AccelStepper.h>


AccelStepper droite(AccelStepper::FULL4WIRE, 2, 4, 3, 9);  // AccelStepper::FULL4WIRE >> ou mettre chiffre 4
AccelStepper gauche(AccelStepper::FULL4WIRE, 6, 8, 7, 5);

int capteur = A0;
int valCapteur = 0;

void setup() {

  Serial.begin(9600);

  pinMode(capteur, INPUT);

  droite.setMaxSpeed(400);
  droite.setAcceleration(500);
  gauche.setMaxSpeed(400);
  gauche.setAcceleration(500);
}

void loop() {

  valCapteur = analogRead(capteur);
  Serial.println(valCapteur);

if (valCapteur < 500){
  droite.moveTo(1000);
  gauche.moveTo(1000);
  droite.run();
  gauche.run();
}

if(valCapteur > 500){
  droite.moveTo(-1000);
  gauche.moveTo(-1000);
  droite.run();  
  gauche.run();
}

}

Ce code fonctionne vraiment comme l'objectif que je veux :
jour > demarre moteur pour ouvrir. moteur reste arrêté pdt la journée
nuit > demarre le moteur pour fermer . moteur reste arrêté pendant la nuit

Ce que je ne comprends pas c'est que je n'ai pas eu besoin d'utiliser un capteur d'arrêt quelconque (j'ai aussi fait le code avec un bouton fin de course à galet)

Je ne comprends pas pourquoi le moteur ne revient pas dans sa boucle. Je m'attendais à :
" le capteur continue de voir du jour, le moteur refait mille pas." D'où l'importance de mettre un capteur fin de course.

Merci pour vos réponses

la commande moveTo donne une position absolue : vous allez à la position 1000 donc quand vous repassez dans le code, vous redemandez d'aller en 1000 mais comme vous y êtes déjà, ça ne bouge pas.

la question est que va-t-il se passer d'après vous quand un nuage fera que la luminosité est autour de 500 et que la boucle va osciller entre 501 et 499 ?

tant que les moteurs restent synchronisés (que le droite et le gauche bougent exactement de la même manière) alors un déplacement absolu peut aller. Mais avec l'usure, la saleté qui vont ralentir la porte d'un côté etc, un de vos steppers va commencer potentiellement à rater un pas de temps en temps. Au bout d'un moment la porte sera tirée de biais et coincera.

le capteur de fin de course est un bon moyen de re-synchroniser les moteurs et définir le 0 absolu

merci pour ta réponse.

Je comprends mieux pourquoi moveTo s'arrête completement alors qu'avec .move, il fallait que je mette un .stop et .runToPosition après lecture etatBouton pour ne pas repartir indéfiniment.

Pour ma valeur <500, > 500, ce n'est qu'une valeur de test. je vais considérablement les réduire en fonction de mes tests ValCapteur en réel pour pallier ces questions de nuages.

Ok alors je vais mettre un capteur de fin de course.
Est ce que je peux rester avec droite.moveTo() ou est ce que je dois revenir sur droite.move() ? (ce que j'ai fait avec code qui a des capteurs fin de course.)

Avec un fin de course vous déclenchez le mouvement et vous vous arrêtez quand le capteur dit que vous êtes arrivés - on travaille moins en position absolue (cela dit une position absolue permet de limiter aussi le mouvement si d’aventure le capteur de fin de course était défectueux)

Hello,

une suggestion au passage : prévoir une détection d'obstacle. Histoire de ne pas fabriquer involontairement une guillotine à poules (ou plus vraisemblablement que cela détraque la mécanique)

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.