Go Down

Topic: realisation porte automatique (Read 5958 times) previous topic - next topic

Jean & Jean-Baptiste

merci pour cette (longue) réponse  .
j'ai encore du mal avec tout sa .
en faite il suffirait de pouvoir modifier une variable de l'arduino grâce a mon portable en 3g mais comment ? :
envoyer un ordre directement du portable vers l'arduino ou du portable a un serveur qui lui envoi a son tour l'ordre vers l'arduino ?

help

sinon dans la deuxième partie de mon programme l'arduino doit pouvoir envoyer un email ?

j'essaie de trouver des exemples tout prêt pour pouvoir l'adapter par la suite mais je trouve pas vraiment :-/
?
avez vous un exemple pour moi ?

Jean & Jean-Baptiste

Alors je penche plutôt vers cette solution :
Quote
arduino (serveur) <-> client php|serveur php<-> navigateur (client)
(+) idem solution 1, tout en limitant le traffic entre arduino et client php
(-) mise en place.


en gros mon arduino doit être capable de recevoir juste 2 ordre (allumer le pc ou ouvrir la porte et allumer les lumières) et d'envoyer un mail en cas d'erreur.
j'aurais vraiment besoin d'aide . au moin un exemple coté arduino et coté serveur php, comme sa aprés je pourrais continuer mon programme tranquillement

merci d'avance

Jean-François

Voici un sujet qui traite de ça (15 pages  XD) :

http://arduino.cc/forum/index.php/topic,60035.0.html
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean & Jean-Baptiste

A propos dans mon programme il y a une partie qui est sensé écrire une variable sois quand l'état d'un bouton a changer ou sois au bout de 10 secondes :


Quote
if (bp_escalier_Etat == LOW){
    Serial.println("allumage lumiere");
    digitalWrite (relay_light,LOW);
    Serial.println("attente 5 secondes");
    delay (5000);
    Serial.println("ouverture verrou");
    digitalWrite (relay_open,LOW);
    delay (800);
    digitalWrite (relay_open,HIGH);

(attendre 10 secondes ou (mémé si les 10 secondes n'ont pas été écouler) si le bouton c'est déclencher et réenclencher)


partie_programme = 3 // variable a exécuter



merci d'avance et bonne soirée =)

Jean & Jean-Baptiste

j'ai une petite idée mais j'aurais besoin d'aide pour intégrer sa: http://arduino.cc/en/Tutorial/ButtonStateChange
dans sa:
Quote
if (bp_escalier_Etat == LOW){
    Serial.println("allumage lumiere");
    digitalWrite (relay_light,LOW);
    Serial.println("attente 5 secondes");
    delay (5000);
    Serial.println("ouverture verrou");
    digitalWrite (relay_open,LOW);
    delay (800);
    digitalWrite (relay_open,HIGH);
    do {
      delay (5000);
      partie_programme = 2;
    }
    while


(si le bouton est passer de high a low et de nouveau a high)








      digitalWrite (relay_light,HIGH);
      partie_programme = 2;
    }

Jean & Jean-Baptiste

Quote
else if (partie_programme == 1) {
  bp_porte_Etat = digitalRead (bp_porte);
  bp_escalier_Etat = digitalRead (bp_escalier);
 
   if (bp_escalier_Etat == LOW){
     
  fdc_porte_Etat = digitalRead (fdc_porte);
 
     if (compteur_bouton == 0){
      Serial.println("allumage lumiere");
      digitalWrite (relay_light,LOW);
      Serial.println("attente 5 secondes");
      delay (5000);
      Serial.println("ouverture verrou");
      digitalWrite (relay_open,LOW);
      delay (800);
      digitalWrite (relay_open,HIGH);
      compteur_bouton = 1;     
    }
    else if (compteur_bouton == 1){
      if (bp_escalier_Etat == HIGH) {
      compteur_bouton++;}
    }
   
     dernier_Etat_bouton = bp_escalier_Etat;
     
   if (compteur_bouton % 2 == 0) { 
     delay (5000);
      partie_programme = 2;
    }
    while (compteur_bouton == 0){
    digitalWrite (relay_light,HIGH);
      partie_programme = 2;
    }
   

j'essaie d'avancer mais je ne trouve vraiment pas
le problème que j'ai c'est qu'il faudrait qu'au bout de tant et tant de secondes le programme interrompt  l'action en cour mais si j'ai bien compris un delay met une pause dans le programme ?

Jean & Jean-Baptiste

en faite mon bute est de faire une action pendant 20 secondes et en faire une autre au bout de ces 20 secondes

Jean-François



fait un mix entre ces deux pages :

http://arduino.cc/en/Reference/Millis

http://www.siteduzero.com/tutoriel-3-14136-maitrisez-le-temps.html
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Bonsoir,

ici, un exemple de gestion du temps qui collerait bien à ce que tu souhaites faire.
Il n'y a qu'à ajouter des compteurs que tu écrémenteras à chaque "pulse", comparer la valeur du compteur par rapport au temps que tu souhaites à chaque cycle, et faire l'action le cas échéant. Ça évite de neutraliser le code avec des delay()

Gromain
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Jean & Jean-Baptiste

bonsoir
j'ai du mal a comprendre j'ai essayer de faire un mix entre 2 exemples et sa donne sa :
Quote
else if (partie_programme == 1) {
  bp_porte_Etat = digitalRead (bp_porte);
  bp_escalier_Etat = digitalRead (bp_escalier);
 
   if (bp_escalier_Etat == LOW){
     fdc_porte_Etat = digitalRead (fdc_porte);
     
     
     unsigned long currentMillis = millis();
     if(currentMillis - previousMillis > interval) {
     previousMillis = currentMillis;
     }
     
     
     if (saut_partie_0 == 0){
     Serial.println("allumage lumiere");
     digitalWrite (relay_light,LOW);
     Serial.println("attente 5 secondes");
     delay (5000);
     Serial.println("ouverture verrou");
     digitalWrite (relay_open,LOW);
     delay (800);
     digitalWrite (relay_open,HIGH);
     saut_partie_0 = 1;     
     }
     if (bp_escalier_Etat != dernier_Etat_bouton) {
      if (bp_escalier_Etat == LOW) {
      compteur_bouton++;
    }
    else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off");
    }
   
     dernier_Etat_bouton = bp_escalier_Etat;
     if (currentMillis != interval){
     
      if (compteur_bouton % 2 == 0) { 
     delay (5000);
     digitalWrite (relay_light,HIGH);
      partie_programme = 2;
    }
    else if (currentMillis == interval){
    digitalWrite (relay_light,HIGH);
      partie_programme = 2;
    }
   }
  }

     }
    }
else if (partie_programme == 2) {
   Serial.println("partie fermeture");
   
   
}

mais malheureusement cela ne fonctionne pas

Jean & Jean-Baptiste

merci pour ton aide précieuse gromain (dsl pour ma réponse tardive mais je n'est pas l'occasion de prendre le temps pour la programmation tout les jours)

alors le code ci dessous fonctionne a merveille
Quote
if (bp_escalier_Etat == LOW){
     Serial.println("bp enfoncer");
     label_1:
     Serial.print("compteur_1:  ");
     Serial.println(compteur_1, DEC);

  if (compteur_1 != 20) {
     Serial.println("1");
   
    pulse_1000=0;
     Serial.println("pulse0");
   
    if ((millis() - prevMillis1000) >= 1000 || (millis() - prevMillis1000) < 0){
      prevMillis1000 = millis();
      pulse_1000=1;
      Serial.println("pulse 1");
    }
    if (pulse_1000 == 1) {
      compteur_1++;
    }
   
 
 
 
 
 
 
   
    goto label_1;

  }
  else if (compteur_1 == 20) {
    partie_programme = 2;
  }
}


Maintenant mon problème est de pouvoir aller sur la partie_programme 2  en fonction de l'ouverture de la porte .
pour cela j'ai rajouter un microrupteur dans mon montage .
En faite il faudrait que le programme modifie une valeur quand le microrupteur est passer de l'état HIGH à l'état LOW puis de nouveau a l'état HIGH.
j'ai vu ceci http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ExempleButtonStateChange mais je ne suis pas sur que cette exemple est le plus adapter pour mon usage .
pourriez vous m'éclairer svp .
merci d'avance

Jean

Go Up