Bonjour, je m'appelle olivier, je suis nouvelle dans la communauté.
J'ai le projet de réaliser une porte automatique pour l'ouverture/fermeture de la porte des poules, le matin et le soir.
J'ai fait un programme qui fonctionne avec, une photorésistance pour capter quand il fait nuit/jour, un pont en H avec 4 relais pour les 2 sens du moteur, et 2 capteurs de fin de courses.
voici le code (qui fonctionne bien):
const int cpt = A0; //photorésistance
const int mh = 11; //moteur pour le levage
const int mb = 12; //moteur pour la descente
const int cth = 4; //contacte fin de course haut
const int ctb = 5; //contacte fin de course bas
int ectb; //etat contacte fin de course bas
int ecth; //contacte fin de course haut
void setup() {
Serial.begin (115200); //liaison pc info moniteur
pinMode (mh, OUTPUT);
pinMode (mb, OUTPUT);
pinMode (ctb, INPUT);
pinMode (cth, INPUT);
pinMode (cpt, INPUT);
ectb = HIGH;
ecth = HIGH;
}
void loop () {
int ectb = digitalRead(ctb);
int ecth = digitalRead(cth);
int lum = analogRead(cpt);
Serial.print (" Luminiosite = ");
Serial.print (lum);
Serial.print (" contacthaut = ");
Serial.print (ecth);
Serial.print (" contactbas = ");
Serial.print (ectb);
if(lum > 250) {
digitalWrite(mh, HIGH);
digitalWrite(mb, LOW);
}
if (ectb == HIGH) {
digitalWrite(mb, HIGH);
}
if (lum < 250) {
digitalWrite(mh, LOW);
digitalWrite(mb, HIGH);
}
if(ecth == HIGH) {
digitalWrite(mh, HIGH);
}
}
Maintenant mon problème...
j'aimerai mettre en veille l'arduino, durant la journée et la nuit, pour limiter la consommation (le système fonctionnera sous un panneau solaire avec batterie). En fait, l'arduino est utilisé qu'a deux moments dans la journée ; le matin pour lever la trappe, et le soir pour la baisser.
Comment puis je mettre l'arduino en veille, le matin après le levage de la trappe, jusqu'au soir au moment ou la trappe doit redescendre ? Je ferais de même pour la nuit. Et comment l'adapter a mon programme.
Bonjour,
Bienvenue au club.
En faisant une recherche sur le forum, tu auras des informations car les sujets ont déjà été abordé.
Tant au niveau des commandes de trappes pour poulaillers que pour la mise en veille.
@+
Bonjour, merci pour vos réponses.
J'ai déjà chercher, sur le forum, et il y a une chose que je ne comprend pas : lorsque l'on parle "d'interruptions " pour sortir du mode veille, cela signifie qu'il faut appuyer sur un bouton pour sortir arduino du mode veille ?
Car en fait j'aimerais que l'arduino sorte automatiquement du mode veille, sans intervention de ma part.
Artouste:
Bonsoir
commander 4 relais pour un pont en H ça fait vraiment usine à gaz
Pourquoi dit tu ca ? C'est surdimensionné ? Ca consomme trop ?
Qu'utiliserait tu a la place des relais ?
BGLOlivier:
Bonjour, merci pour vos réponses.
J'ai déjà chercher, sur le forum, et il y a une chose que je ne comprend pas : lorsque l'on parle "d'interruptions " pour sortir du mode veille, cela signifie qu'il faut appuyer sur un bouton pour sortir arduino du mode veille ?
Car en fait j'aimerais que l'arduino sorte automatiquement du mode veille, sans intervention de ma part
Il va pas se lever tout seul... qui dit mise en veille dit sortie de veille... ton ordi portable ne sort pas du mode veille sans que tu le secoue un peu.
Si tu veux qu'il soit déclenché sur un top horaire il va te falloir un autre circuit qui va générer une interruption à l'heure prévue... donc un circuit de type horloge, capable de générer une interruption à un horaire prévu.
BGLOlivier:
J'ai déjà chercher, sur le forum, et il y a une chose que je ne comprend pas : lorsque l'on parle "d'interruptions " pour sortir du mode veille, cela signifie qu'il faut appuyer sur un bouton pour sortir arduino du mode veille ?
L'interruption n'est pas nécessairement générée une action mécanique sur un bouton.
Suivant le niveau de veille, l'interruption peut être générée par un timer interne de l'arduino ou par un changement d'état sur l'une de ses entrées. Le changement d'état peut être la conséquence d'un appui sur un bouton ou de l'activation de la sortie d'alarme d'une horloge temps réelle externe.
UniseV:
Il va pas se lever tout seul... qui dit mise en veille dit sortie de veille... ton ordi portable ne sort pas du mode veille sans que tu le secoue un peu.
Si tu veux qu'il soit déclenché sur un top horaire il va te falloir un autre circuit qui va générer une interruption à l'heure prévue... donc un circuit de type horloge, capable de générer une interruption à un horaire prévu.
Pas nécessairement.
J'utilise par exemple le watchdog pour endormir mon Arduino la nuit et le réveiller le matin.
Le watchdog génère une interruption au plus tard toutes les 8s, donc mon arduino se réveille pour un cycle de loop() toutes les 8s.
Au cours de ce cycle, je lis l'heure dans une horloge RTC et selon l'heure je réactive ou non le watchdog.
J'ai en plus une interruption matérielle sur INT0 qui réveille l'Arduino immédiatement en cas de détection de présence (front haut sur INT0).
Donc après vos remarques, j'ai installé un L298N à la place des 4 relais sur mon système. Avec l'arduino nano + le L298N, mon système consomme désormais environ 95mA.
Si je comprends bien, le watchdog permet de :
L'aruino s'endort pendant 8 secondes
l'arduino se réveille et fait la boucle
L'aruino s'endort pendant 8 secondes
l'arduino se réveille et fait la boucle
...
Cependant en cherchant sur internet, je trouve des codes très longs, et n'arrive pas à me repérer pour l'intégrer à mon programme.
patg_:
Pas nécessairement.
J'utilise par exemple le watchdog pour endormir mon Arduino la nuit et le réveiller le matin.
Le watchdog génère une interruption au plus tard toutes les 8s, donc mon arduino se réveille pour un cycle de loop() toutes les 8s.
Au cours de ce cycle, je lis l'heure dans une horloge RTC et selon l'heure je réactive ou non le watchdog.
J'ai en plus une interruption matérielle sur INT0 qui réveille l'Arduino immédiatement en cas de détection de présence (front haut sur INT0).
pourrais-tu m'envoyer ton programme s.t.p., pour essayer de l'adapter aux miens
Il existe aussi des temps réel RTC qui disposent d'une alarme configurable intégrée.
Cette alarme provoque une interruption sur une broche de l'arduino.
Dans ce cas l'Arduino dort toute la journée et toute la nuit, et ne se réveille que 2 fois par jour, juste le temps d'ouvrir ou fermer la trappe à poules et reconfigurer l'alarme suivante.
Je serais intéressé par savoir comment tu endors l'Arduino indéfiniment jusqu'à une interruption.
Je n'ai trouvé que le Watchdog et celui-ci ne peut endormir l'Arduino que 8s maximum.
Donc après vos remarques, j'ai installé un L298N à la place des 4 relais sur mon système. Avec l'arduino nano + le L298N, mon système consomme désormais environ 95mA.
Si je comprends bien, le watchdog permet de :
L'aruino s'endort pendant 8 secondes
l'arduino se réveille et fait la boucle
L'aruino s'endort pendant 8 secondes
l'arduino se réveille et fait la boucle
...
Cependant en cherchant sur internet, je trouve des codes très longs, et n'arrive pas à me repérer pour l'intégrer à mon programme.
pourrais-tu m'envoyer ton programme s.t.p., pour essayer de l'adapter aux miens
Merci pour l'aide
Extraits du code, tiré d'un des nombreux exemples trouvés en ligne, mais je ne me souviens plus duquel exactement:
//includes pour sleep mode
#include <avr/interrupt.h>
#include <avr/power.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
/*
* Endort l'AVR
*/
void goToSleep(){
#ifdef DEBUG_SERIAL
Serial.println("dodo!");
#endif
// clear various "reset" flags
MCUSR = 0;
// allow changes, disable reset
WDTCSR = _BV (WDCE) | _BV (WDE);
// set interrupt mode and an interval
WDTCSR = _BV (WDIE) | _BV (WDP3) | _BV (WDP0); // set WDIE, and 8 seconds delay
wdt_reset(); // pat the dog
// disable ADC
//ADCSRA = 0;
// Choose our preferred sleep mode:
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
// Set sleep enable (SE) bit:
sleep_enable();
// Put the device to sleep:
sleep_cpu();
// Upon waking up, sketch continues from this point.
sleep_disable();
}
// watchdog interrupt
ISR (WDT_vect)
{
wdt_disable(); // disable watchdog
//enable ADC
// ADCSRA |= (1<<ADEN);
}
//init détection de mouvement
attachInterrupt(INT1, motionDetected, RISING);
/*
* Gestionnaire d'interruption pour le détecteur de mouvement
*/
void motionDetected(){
lastDetectedMotion = millis();
sleepMode=0;
}
patg_:
Je serais intéressé par savoir comment tu endors l'Arduino indéfiniment jusqu'à une interruption.
Je n'ai trouvé que le Watchdog et celui-ci ne peut endormir l'Arduino que 8s maximum.
patg_:
Je serais intéressé par savoir comment tu endors l'Arduino indéfiniment jusqu'à une interruption.
Je n'ai trouvé que le Watchdog et celui-ci ne peut endormir l'Arduino que 8s maximum.
bonjour,
avec une bonne masse sur la tête pour l'endormir
un sceau d'eau pour le réveiller
suis dehors=======>>>>>>
pas pu m'en empêcher
comme dit plus haut, certains rtc on une fonction réveil sur une pin, le module bosse tout seul et si l'heure réveil est arrivée alors il va envoyer une trame "réveil"