Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #15 on: May 29, 2011, 03:46:15 am » |
Hello tous On se retrouve avec une incohérence qui pourrait mettre en danger le moteur ???
Vui , jai eu a gérer ça il y a pas long, un relais supplémentaire (R/T) qui coupe l'alim (phase) avant les boutons, commandé par l'alim des autres relais : 2 diodes pour que dès qu'un des relais est en service => pas de jus sur les boutons. c'est priorité à l'Arduino dans ce cas. Ne pas oublier de prendre aussi des relais 2R/T pour pouvoir verrouiller la montée ou la descente (erreur de prog. possible) Esperant que ça te serve A plus tard
|
|
|
|
|
Logged
|
|
|
|
|
Pays de la betise
Offline
Sr. Member
Karma: 3
Posts: 407
|
 |
« Reply #16 on: May 29, 2011, 01:21:25 pm » |
à mon sens, il faut que l'arduino gère tout, ou bien rien. En clair, il faut supprimer la commande actuelle par bouton à accrochage, et la remplacer par 2 BP (ou même un seul) connecté à l'arduino, et les contacts de 2 relais pour commander la montée/descente du volet.
voir PJ pour un exemple de câblage.
Gromain
|
|
|
|
|
Logged
|
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..." projet domotique xPLDuinoIRC: freenode #xplduino
|
|
|
|
Belgique
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #17 on: May 29, 2011, 03:06:08 pm » |
il faut supprimer la commande actuelle par bouton à accrochage, et la remplacer par 2 BP oui c'est bien ce que je comptais faire juste mes 2 bp mon arduino 2 relais la photoresistance et basta ( ou peut-etre un moyen de communiquer avec mon phone par bluetooth ou wifi mais ça c'est pour une autres fois ..
|
|
|
|
|
Logged
|
arduino uno debian squeeze eee 1000H arduino 0022
|
|
|
|
Belgique
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #18 on: May 29, 2011, 03:56:56 pm » |
voici les derniere PETITE modif apporter //commande de volet
//definition des constantes const int buttonPin1 = 2; //boutton "montée" const int buttonPin2 = 3; //boutton "descente" const int ledPin1 = 13; // relay "Montéé" const int ledPin2 = 12; // relay "Descente" const int ledPin3 = 11; // led etat volet (on= up) (off= down)
//definition des variables int buttonState1 = 0; int buttonState2 = 0;
//definition des entree et sorties void setup(){ pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); }
void loop(){ if (buttonState1 == HIGH){ //determine le type de pression et sur quelle boutton action = monté_court; } else if (buttonState1 == HIGH){ action = monté_long; } else if(buttonState2 == HIGH){ action = descente_court; } else if (buttonState2 == HIGH){ action = descent_long; } switch (action){ case montécourt: digitalWrite(ledPin1, High);//le volet monte for (int i=0; i <= 23; i++){ //la led clignotte pendant 25 sec (durée de la montée) digitalWrite(ledPin3, HIGH); // set the LED on delay(500); // wait for 0,5 second digitalWrite(ledPin3, LOW); // set the LED off delay(500); // wait for 0,5 second } digitalWrite(ledPin1, LOW);//le moteur s'arrete digitalWrite(ledPin3, LOW);//la led d'etat rest alumé
case monté_long: digitalWrite(ledPin2, High);//le volet descent for (int i=0; i <= 23; i++){ //la led clignotte pendant 25 sec (durée de la descente) digitalWrite(ledPin3, HIGH); // set the LED on delay(500); // wait for 0,5 second digitalWrite(ledPin3, LOW); // set the LED off delay(500); // wait for 0,5 second } digitalWrite(ledPin2, LOW);//le volet s'arrete digitalWrite(ledPin3, LOW);//la led d'etat s'eteint default: //si il est X heure digitalWrite(ledPin1, HIGH);//le volet monte for (int i=0; i <= 23; i++){ //la led clignotte pendant 25 sec (durée de la montée) digitalWrite(ledPin3, HIGH); // set the LED on delay(500); // wait for 0,5 second digitalWrite(ledPin3, LOW); // set the LED off delay(500); // wait for 0,5 second } digitalWrite(ledPin1, LOW); //le moteur s'arrete
//si il est X heure digitalWrite(ledPin2, HIGH);//le volet descent for (int i=0; i <= 23; i++){ //la led clignotte pendant 25 sec (durée de la montée) digitalWrite(ledPin3, HIGH); // set the LED on delay(500); // wait for 0,5 second digitalWrite(ledPin3, LOW); // set the LED off delay(500); // wait for 0,5 second } digitalWrite(ledPin2, LOW); //le moteur s'arrete } }
je ne suis pas tres au point niveau programation! 
|
|
|
|
« Last Edit: May 29, 2011, 05:36:37 pm by supperdd »
|
Logged
|
arduino uno debian squeeze eee 1000H arduino 0022
|
|
|
|
0
Offline
God Member
Karma: 0
Posts: 761
Arduino rocks
|
 |
« Reply #19 on: May 29, 2011, 04:52:26 pm » |
Yep! //commande de volet
//definition des constantes const int buttonPin1 = 2; //boutton "montée" const int buttonPin2 = 3; //boutton "descente" const int ledPin1 = 13; // relay "Montéé" const int ledPin2 = 12; // relay "Descente" const int ledPin3 = 11; // led etat volet (on= up) (off= down)
//definition des variables int buttonState1 = 0; int buttonState2 = 0;
//definition des entree et sorties void setup(){ pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); }
void loop(){ //si bp1 est presser et que led d'etat est off digitalWrite(ledPin1, HIGH);//le volet monte Temporisation(); digitalWrite(ledPin1, LOW);//le moteur s'arrete digitalWrite(ledPin3, LOW);//la led d'etat rest alumé
//si bp2 est presser et que led d'etat est on digitalWrite(ledPin2, HIGH);//le volet descent Temporisation(); digitalWrite(ledPin2, LOW);//le volet s'arrete digitalWrite(ledPin3, LOW);//la led d'etat s'eteint
//si il est X heure digitalWrite(ledPin1, HIGH);//le volet monte Temporisation(); digitalWrite(ledPin1, LOW); //le moteur s'arrete
//si il est X heure digitalWrite(ledPin2, HIGH);//le volet descent Temporisation(); digitalWrite(ledPin2, LOW); //le moteur s'arrete
}
void Temporisation() { for (int i=0; i <= 23; i++){ //la led clignotte pendant 25 sec digitalWrite(ledPin3, HIGH); // set the LED on delay(500); // wait for 0,5 second digitalWrite(ledPin3, LOW); // set the LED off delay(500); // wait for 0,5 second } } @+ Zoroastre.
|
|
|
|
« Last Edit: May 29, 2011, 04:56:59 pm by zoroastre »
|
Logged
|
Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message 
|
|
|
|
Belgique
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #20 on: May 29, 2011, 05:41:43 pm » |
voila j'ai aporter tes modifs et j'ai rajouter quelques trucs je ne suis pas sùr que ça soit mieux mais je fait comme je crois !!! on verra bien  //commande de volet
//definition des constantes const int buttonPin1 = 2; //boutton "montée" const int buttonPin2 = 3; //boutton "descente" const int ledPin1 = 13; // relay "Montéé" const int ledPin2 = 12; // relay "Descente" const int ledPin3 = 11; // led etat volet (on= up) (off= down)
//definition des variables int buttonState1 = 0; int buttonState2 = 0;
//definition des entree et sorties void setup(){ pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); }
void loop(){ if (buttonState1 == HIGH){ //determine le type de pression et sur quelle boutton action = monté_court; } else if (buttonState1 == HIGH){ action = monté_long; } else if(buttonState2 == HIGH){ action = descente_court; } else if (buttonState2 == HIGH){ action = descent_long; } switch (action){ case montécourt: digitalWrite(ledPin1, High);//le volet monte Temporisation(); digitalWrite(ledPin1, LOW);//le moteur s'arrete digitalWrite(ledPin3, LOW);//la led d'etat rest alumé
case monté_long: digitalWrite(ledPin2, High);//le volet descent Temporisation(); digitalWrite(ledPin2, LOW);//le volet s'arrete digitalWrite(ledPin3, LOW);//la led d'etat s'eteint default: //si il est X heure digitalWrite(ledPin1, HIGH);//le volet monte Temporisation(); digitalWrite(ledPin1, LOW); //le moteur s'arrete
//si il est X heure digitalWrite(ledPin2, HIGH);//le volet descent Temporisation(); digitalWrite(ledPin2, LOW); //le moteur s'arrete } } void Temporisation() { for (int i=0; i <= 23; i++){ //la led clignotte pendant 25 sec digitalWrite(ledPin3, HIGH); // set the LED on delay(500); // wait for 0,5 second digitalWrite(ledPin3, LOW); // set the LED off delay(500); // wait for 0,5 second } }
|
|
|
|
|
Logged
|
arduino uno debian squeeze eee 1000H arduino 0022
|
|
|
|
Belgique
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #21 on: May 29, 2011, 05:48:25 pm » |
j'ai une question, comme il n'y a qu'une boucle (void loop) puis-je demander au µc de faire 2 chose a la fois ?? je m'explique pour l'ouverture/fermeture a heure donné il me faut une horloge ou un compteur de temps mais peut-il compter le temps et tester l'etat des entrée en meme temps ??? j'ai encore du mal avec ce genre de programation merci de votre patience
|
|
|
|
|
Logged
|
arduino uno debian squeeze eee 1000H arduino 0022
|
|
|
|
0
Offline
God Member
Karma: 0
Posts: 761
Arduino rocks
|
 |
« Reply #22 on: May 30, 2011, 12:55:03 am » |
Yep!
Le loop est la partie du programme qui sera séquentiellement scruté par le controlleur. On ne peut pas vraiment appeler cela une boucle, par contre le sous-programme "Temporisation" est une boucle, rien d'autre ne peut s'effectuer tant que l'itération du for n'est pas terminée (25 secondes). A part cela, tu peux implémenter d'autres fonctions sans problème. Il faudra cependant faire attention à la synthaxe, quelques erreurs ici et là.
@+
Zoroastre.
|
|
|
|
|
Logged
|
Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message 
|
|
|
|
Pays de la betise
Offline
Sr. Member
Karma: 3
Posts: 407
|
 |
« Reply #23 on: May 30, 2011, 01:55:04 am » |
la boucle for pour faire une tempo est à proscrire: ton programme est figé pendant l'éxécution de la boucle. Et ton volet incontrôlable (comment l'arrêter en cours ?)
Ce que je te conseille: 1. fais une routine qui te générera des impulsions tous les x millisecondes (ex: 100ms, 500ms, 1000s...) sous la forme de bit à 1 pour un cycle (utilises millis()). 2. lorsque que le bit_100_ms sera à 1, exécute une routine qui lira l'état des entrées et décidera s'il faut faire quelquechose (ouvrir/fermer) 3. lorsque que le bit_100_ms sera à 1, éxécute une routine qui contrôlera s'il est l'heure de faire quelquechose (ouvrir/fermer) 4. à chaque cycle (loop), execute une routine qui actionnera tel ou tel relais en fonction des actions à réaliser. 5. lorsque que le bit_500_ms sera à 1, exécute une routine qui contrôlera s'il faut allumer ou éteindre la led
etc. ainsi, tu exécuteras des taches séquentiellement, en évitant de monopoliser le µC pour rien.
Gromain
|
|
|
|
|
Logged
|
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..." projet domotique xPLDuinoIRC: freenode #xplduino
|
|
|
|
0
Offline
God Member
Karma: 0
Posts: 761
Arduino rocks
|
 |
« Reply #24 on: May 30, 2011, 01:46:20 pm » |
Yep!
Quelle est l'impacte d'une telle modification en terme de sécurité, pour les enfants par exemple ?
On remplace les interrupteurs par des boutons poussoirs, et on pilote le moteur via l'arduino et des relais. Si un obstacle vient à gener la fermeture, quelle est la garantie ou le phénomène qui stoppera le moteur et le mettera en sécurité ?
@+
Zoroastre.
|
|
|
|
|
Logged
|
Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message 
|
|
|
|
Pays de la betise
Offline
Sr. Member
Karma: 3
Posts: 407
|
 |
« Reply #25 on: May 30, 2011, 02:22:38 pm » |
Si un obstacle vient à gener la fermeture, quelle est la garantie ou le phénomène qui stoppera le moteur et le mettera en sécurité ? et bien si tu as bien programmé, tu n'as qu'à réappuyer sur un des boutons pour stopper la course du volet  Il n'y a pas plus ou moins de sécurité qu'avant. Chez moi, l'appui sur un des boutons pendant le mouvement du volet le stoppe instantanément. Gromain
|
|
|
|
« Last Edit: May 30, 2011, 03:22:48 pm by Gromain59 »
|
Logged
|
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..." projet domotique xPLDuinoIRC: freenode #xplduino
|
|
|
|
Belgique
Offline
Newbie
Karma: 0
Posts: 12
|
 |
« Reply #26 on: June 16, 2011, 07:45:48 am » |
salut tout le monde desolé de n'avoir pu repondre plus tôt (fort occuper) j'ai lu pas mal de tuto mais j'ai tjs du mal je ne vois pas comment je peux faire ce que tu decrit la quelle commande me conseille tu ?? Ce que je te conseille: 1. fais une routine qui te générera des impulsions tous les x millisecondes (ex: 100ms, 500ms, 1000s...) sous la forme de bit à 1 pour un cycle (utilises millis()). 2. lorsque que le bit_100_ms sera à 1, exécute une routine qui lira l'état des entrées et décidera s'il faut faire quelquechose (ouvrir/fermer) 3. lorsque que le bit_100_ms sera à 1, éxécute une routine qui contrôlera s'il est l'heure de faire quelquechose (ouvrir/fermer) 4. à chaque cycle (loop), execute une routine qui actionnera tel ou tel relais en fonction des actions à réaliser. 5. lorsque que le bit_500_ms sera à 1, exécute une routine qui contrôlera s'il faut allumer ou éteindre la led
merci pour votre interet
|
|
|
|
|
Logged
|
arduino uno debian squeeze eee 1000H arduino 0022
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #27 on: June 16, 2011, 09:40:15 am » |
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Pays de la betise
Offline
Sr. Member
Karma: 3
Posts: 407
|
 |
« Reply #28 on: June 16, 2011, 01:29:41 pm » |
aller, c'est mon soir de bontés  ci-dessous un exemple de code qui t'aidera sans doute à bien structurer ton code. C'est la structure type que j'emploie dans mes projets domotiques. /* * Gromain59 * xPLDuino * * Structure type: * - bit de cadencement * * - pre (màj des entrées) * - calcul * - post (màj des sorties) * */
//############################### GESTION PULSE ################################## long prevMillis1000=0; boolean pulse_1000=0; long prevMillis100=0; boolean pulse_100=0; long prevMillis500=0; boolean pulse_500=0;
void setup() { // initialize the serial communication: Serial.begin(115200);
Serial.println("exemple de gestion pulse");
}
// acquition de l'état des entrées, pre-calcul void pre() {
pulse(); // call pulse generation.
}
void scenario() {
// ici les calculs à réaliser
}
// mis à jour des memoires de sorties void post() {
if(pulse_1000){ Serial.println("déjà 1 seconde !"); }
if(pulse_500){ Serial.println("plus vite !"); }
if(pulse_100){ Serial.println("trop vite !"); }
}
void loop() {
pre(); // Call pre-traitement
scenario();
post(); // Call post-traitment
}
void pulse(){
pulse_1000=0;
if ((millis() - prevMillis1000) >= 1000 || (millis() - prevMillis1000) < 0){ prevMillis1000 = millis(); pulse_1000=1; }
pulse_100=0;
if ((millis() - prevMillis100) >= 100 || (millis() - prevMillis100) < 0){ prevMillis100 = millis(); pulse_100=1; } pulse_500=0;
if ((millis() - prevMillis500) >= 500 || (millis() - prevMillis500) < 0){ prevMillis500 = millis(); pulse_500=1; } }
Gromain
|
|
|
|
|
Logged
|
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..." projet domotique xPLDuinoIRC: freenode #xplduino
|
|
|
|
|