projet porte de poule

Bonjour, je suis en galère.
projet de porte automatique sans fin de course par mesure de puissance du moteur sur l'entré analogique
Le moteur tourne au démarrage de l’Arduino sans s’arrêté.
si joint le schéma de câblage et le code.
Et t'il possible d'enlever la mise en veille et comment?
J'ai fait tous cela avec un Arduino Nano.

/* Trappe automatique poulallier avec Arduino Pro Mini
Ouverture declanchee au seuil "jour"
Peut etre retardee en fonction de la variable "nbCycle" pour eviter les ouvertures
 intempestives par des phares de voiture ou lampe de poche

Fermeture au seuil "nuit"

Limitation de puissance moteur par resistance serie 10 ohm pour eviter de blesser
et limiter le courant.

Arret automatique à "delai_max" puis  remise en veille.

Mode économiseur avec reveil tout les 8 secondes, pouvant retarder les actions.
*/

#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
volatile boolean f_wdt = 1;

/* declaration des constantes pour les noms des broches */
const int led = 13; // led du module nano
const int pinldr = A3; // photoresistance
const int pinmoteur = A2; // mesure courant moteur
const int fermer = 2; // commande de fermeture
const int ouvrir = 3; // commande d'ouverture
//const int bat = A1; // surveillance tension batterie

/* declaration des variables */
int nuit = 50; // seuil nuit 0.98 V
int jour = 150;  // seuil jour 1.22 V plus haut que seuil nuit
int LDR; // mesure inverse de luminosite
int courant_moteur;
int retard = 0;
int nbCycle = 8; // retard a l'ouverture X 8 secondes(25 sec)
boolean trappe; // etat trappe
boolean rotation = 0; //  moteur arrete
unsigned long debut_blocage; // debut du blocage
unsigned long retard_dec; // declenchement jour
int delai_dec;
int mem_courant; // courant moteur au debut du blocage
int delai_max = 9000;// 9 secondes

void setup() {
  // initialisation des broches entree/sortie
  pinMode(pinldr, INPUT);
  // pinMode(bat, INPUT);
  pinMode(fermer, OUTPUT);
  pinMode(ouvrir, OUTPUT);
  pinMode(pinmoteur, INPUT);
  pinMode(led, OUTPUT);

  //Serial.begin(9600);
  LDR = analogRead(pinldr);
  // Pour forcer la trappe à  se fermer la nuit ou a  s'ouvrir le jour.
  if (LDR > nuit) {// le jour
    trappe = 1; // fermee
  }
  else  {//la nuit
    trappe = 0; // ouverte
  }
  // active le compteur watchdog pour interruption toutes les 8 secondes
  setup_watchdog(9);
}

void loop() {
  if (rotation == 1) { // moteur tourne
    if ((millis() - debut_blocage) > delai_max) {
      digitalWrite(ouvrir, 0); digitalWrite(fermer, 0);
      trappe = !trappe; rotation = 0; sommeil();
    }
  }
  else  {
    LDR = analogRead(pinldr);
    if (LDR > jour) { // jour
      switch (trappe) {
        case 0 : sommeil(); break;
        case 1 : retard ++; ouverture(); break;
      }
    }//jour
    else {
      retard = 0; // éclairage momentane
    }

    if (LDR < nuit) {
      switch (trappe) {
        case 1 : sommeil(); break; // fermee
        case 0 : fermeture(); break;
      }
    }
  }
}// fin de loop()


// Watchdog Interrupt Service est excite lors d'un timeout du WDT
ISR(WDT_vect)
{
  if (f_wdt == 0)
  {
    f_wdt = 1; // flag global }
  }
}

void setup_watchdog(int ii) {
  byte bb;
  int ww;
  if (ii > 9 ) ii = 9;   // pour 8 secondes
  bb = ii & 7;
  if (ii > 7) bb |= (1 << 5);
  bb |= (1 << WDCE);
  ww = bb;
  // Clear the reset flag
  MCUSR &= ~(1 << WDRF);
  // start timed sequence
  WDTCSR |= (1 << WDCE) | (1 << WDE);
  // set new watchdog timeout value
  WDTCSR = bb;
  WDTCSR |= _BV(WDIE);
}

// active la mise en veille pour 8 secondes
void sommeil(void) {

  // témoin led si la tension de batterie < 6 V
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode(); //En mode veille choisi
  //le micro passe en sommeil pour 8 secondes
  sleep_disable();
  // Le pramme va reprendre ici apres le timeout du WDT

}

void ouverture() {
  //Serial.println(retard);
  if (retard > nbCycle) { // environ 2 minutes
    digitalWrite(ouvrir, 1); digitalWrite(fermer, 0); rotation = 1; retard = 0;
    debut_blocage = millis();
  }
  else {
    sommeil();
  }
};

void fermeture() {
  digitalWrite(ouvrir, 0); digitalWrite(fermer, 1); rotation = 1;
  debut_blocage = millis();
};

Bonjour

Que fait ce message dans la zone dédié aux choses FINIES ?
Utilises le lien 'Report to Moderator' pour demander le déplacement à l'endroit défini dans la Règle du Forum

Les poules ont des portes maintenant ? :smiley:

Les portes sont surtout faites pour les renards. Ne pas oublier d'enterrer la clôture métallique à 40 cm sous le sol, en remplissant la tranchée de cailloux bien tranchants. Penser au grillage en dessus, pour dissuader les rapaces. Ou tout compte fait, vue la difficulté de l'entreprise, aller acheter ses oeufs et du poulet roti au supermarché du coin.

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