Sujet : Arduino Xap

Bonsoir,
Alors voilà je vous présente mon projet, je suis en cours de construction d'une maison. Je possède à peu près entre 15 et 20 points d'éclairage dans la maison.
Actuellement j'ai un arduino méga 2560, un shield ethernet et une carte velleman http://www.velleman.eu/distributor/prod … ?id=345892.

- Sur la carte velleman il y aura de branché les points d'éclairage.
- Sur la carte arduino - en entrées il y aura de raccordé tous les boutons poussoir de la maison ( permettra d'allumer les points d'éclairage avec scénario sur un bouton poussoir de sortie où on pourrait éteindre toute la maison)
                                - en sorties il y aura de raccordé toutes les entrées de la carte velleman qui permettra de commander les relais.
- Le shield ethernet  permettra d'envoyer les informations en xap à homeseer avec une adresse IP.

Le problème c'est que je ne suis pas très bon en programmation, je ne sais pas par où commencer donc j'aurais besoin d'aide pour faire aboutir mon projet.
Merci d'avance, Laurent.

2

Re : Arduino Xap

Bonsoir,

Le code principal va ressembler à ça :

void setup()
{
   // déclaration de toutes les pattes des entrées
   pinMode(10,INPUT);
   pinMode(11,INPUT);
   pinMode(12,INPUT);
   // etc.. en changeant 10, 11, 12 par les vrais numéros

   // déclaration de toutes les pattes des sorties
   pinMode(30,OUTPUT);
   pinMode(31,OUTPUT);
   /// etc... en changeant 30,31 par les vrais numéros
}

void loop()
{
   // un bouton simple
   if (digitalRead(10) == HIGH)
   {
        digitalWrite(30,HIGH);
   } else {
        digitalWrite(30,LOW);
   }

   // etc.. pour chaque bouton individuel

   // un bouton "sortie"
   if (digitalRead(29) == HIGH) 
   {
       digitalWrite(30,LOW);
       digitalWrite(31,LOW);
       // etc... pour toutes les pattes de sortie
   }

   // un délai pour ne pas consommer trop mais laisser un temps de réaction suffisamment court pour ne pas s'en apercevoir
   delay(100); // 100 millisecondes.

}

Voilà qui devrait déjà te permettre d'avoir déjà les interrupteurs qui déclenchent les lampes et le scénario de sortie. Tu devrais pouvoir le compléter en faisant des copier/coller du code.

Pour la connection à Homeseer, il faudra voir plus tard. Perso je ne connais pas.

Au fait, comment connectes-tu tes interrupteurs à l'Arduino ? La tension est bien de 5 volts ?

3

Re : Arduino Xap

Tiens xAP smile Je pensais que c'était un truc totalement mort et utilisé que par quelques farfelus en manque d'exotisme !!

Il se trouve que je m'en sers actuellement dans le cadre d'un projet de recherche en collaboration avec les labos de Telecom Brest et Delta-Dore entre autres.

4

Re : Arduino Xap

Bonsoir,
Julien:
Pour les boutons poussoir je les raccorderai entre le gnd et un pin comme ça quand j'envoie une impulsion j'allume, je renvoie une autre impulsion ça éteint.
Ça marcherais comme ça avec le code que tu m'as donné ?

Eric:

Pourrais tu m'aider à faire évoluer mon projet pour les xap ?

Merçi à vous Laurent

5

Re : Arduino Xap

Pourrais tu m'aider à faire évoluer mon projet pour les xap ?

Si je peux, je le ferai. Que veux-tu savoir en particulier ?

6

Re : Arduino Xap

Bonjour,

Non ça ne marchera pas tel quel : il faut mettre une résistance de tirage (ou pull-up) entre le 5 volts et la pin afin qu'il y ait un potentiel haut quand l'interrupteur est ouvert, et un potentiel bas lorsque l'interrupteur est fermé.

7

Re : Arduino Xap

Bonsoir, désolé d'avoir mis du temps à vous répondre j'ai fait quelque recherches sur le net avant.
Alors j'ai réussi à trouver un sketch qui fonctionnerait pour moi, mais je n'arrive pas à mettre tous mes boutons poussoir !!! Pourriez vous m'aider

int led=49;
int bp=48;
int etat=0;
boolean mem_etat_led=false;
boolean mem_front_bp=false;

void setup ()
{
pinMode (bp,INPUT);
pinMode (led,OUTPUT);
digitalWrite (bp,HIGH); // permet d'activer la résistance de pull-up interne 
Serial.begin(9600);
}
void loop()
{
etat=digitalRead(bp);

if (etat && !mem_etat_led && !mem_front_bp) {
  digitalWrite (led,HIGH);
  mem_etat_led=true;
  mem_front_bp=true;  //memorisation appuie sur bp
  Serial.println("on");
}
else if(etat && mem_etat_led && !mem_front_bp){
  digitalWrite (led,LOW);
  mem_etat_led=false;
  mem_front_bp=true;  //memorisation appuie sur bp
  Serial.println("off");
}

if (!etat) {
  mem_front_bp=false;  //raz memoire sur relachement du bp
}

delay(10); // pour filtrer les rebonds du contact si besoin

}

Eric en fait je voudrais pouvoir voir l'état et commander mes lampes en xap par le biais de homeseer, pourrais tu m'aider ?

Merci d'avance Laurent

8

Re : Arduino Xap

Bonsoir,

Euh, j'ai dû louper l'épisode où tu as testé le code qu'on t'a proposé et où tu nous expliques ce qui ne marchait pas avec smile et où tu expliques la raison pour laquelle tu es allé chercher un code aussi compliqué et où tu l'as trouvé smile

Ce code est utilisé pour un bouton va-et-vient, alors que je pense que tu as de simples interrupteurs ON-OFF où il faut réappuyer une seconde fois pour changer d'état.

a+
Julien.

9

Re : Arduino Xap

Je ne connais pas particulièrement Homeseer si ce n'est de nom.

S'il agit comme gateway xAP pour les devices qu'il gère, alors il devrait suffire de lui envoyer les messages xAP correspondant aux actions souhaitées. Le format des messages définis par les application profiles de base est détaillé sur le site xAP (http://www.xapautomation.org/index.php? … n_protocol).

Pour savoir comment discuter avec Homeseer (TCP, UDP, port,...) se référer à sa documentation qui doit certainement expliciter cela.

Eric

10

Re : Arduino Xap

Bonsoir,
Oui j'ai testé ton code, alors le problème c'est quand j’appuie sur mon bouton ça éteint mon relais quand je relâche mon bouton ça le rallume.

Moi ce que je voudrais quand j’appuie sur mon bouton poussoir ça allume mon relais, je r appuie sur mon bouton ça éteint mon relais !!!

C'est pour ça que j'ai pensé à chercher un bout de code sur le net !!!! pour essayer de nous avancer un peu !!!

Merci d'avance Laurent

11

Re : Arduino Xap

J'ai un peu de mal à comprendre ce que Homeseer vient faire là-dedans au final si c'est la carte Velleman qui gère les relais.

Normalement c'est le rôle de Homeseer, via les interfaces appropriées au réseau de devices (Z-Wave, X10,...). Donc il sert à quoi ici ?

12

Re : Arduino Xap

Parce que je ne suis pas intéressé par le z-wave,x10 système par courant porteur ou à ondes pas top pour moi!!! je suis sur une habitation neuve donc tous mes câbles reviennent au tableau, c'est donc pour ça que je voulais passer par un arduino !!!!

Laurent

13

Re : Arduino Xap

laurent33 a écrit:

Bonsoir,
quand j’appuie sur mon bouton ça éteint mon relais quand je relâche mon bouton ça le rallume.

Super, c'est l'information qui manquait, on ne pouvait pas le deviner et il était important de le vérifier.

Donc il faut bien un mécanisme de bascule. Deux solutions : une électronique et une logicielle. Tu es parti sur la solution logicielle, c'est effectivement tout à fait possible avec le code que tu as trouvé.

14

Re : Arduino Xap

Je suis désolé j'avais oublié de le marquer !!! Par contre j'aurais voulu savoir comment il faut que je fasse pour rajouter des boutons poussoir et des relais aux codes que j'ai trouvé !!!


Merci Laurent

15

Re : Arduino Xap

Il suffit de déclarer un tableau d'autant de lampes et d'interrupteurs à gérer et de faire une boucle sur un curseur de ce tableau :

// nombre de lampes
const int nombre = 7;

// déclaration des lampes (pattes en sortie)
int lampes[nombre] = {
  10,11,12,13,18,19,20};

// déclaration des lampes (pattes en entrée)
int boutons[nombre] = {
  31,32,33,40,41,42,43};
  
// interrupteur global
int special = 25;

// déclaration de la mémoire d'état (allumé ou éteint)
boolean mem_etat_lampe[nombre];
boolean mem_front_bouton[nombre];

boolean mem_etat_special;
boolean mem_front_special;

/**
 * Configuration initiale
 */
void setup ()
{
  // mettre les boutons en entrée et les lampes en sortie
  for (int i = 0; i < nombre; i++) {
    pinMode (boutons[i],INPUT);
    // activer la résistance de pull-up interne 
    digitalWrite (boutons[i],HIGH); 
    pinMode (lampes[i],OUTPUT);
  }
  // plus le bouton spécial pour tout éteindre
  pinMode(special,INPUT);
  digitalWrite(special,HIGH);  
}

/**
 * Boucle infinie
 */
void loop()
{
  // gérer tous les boutons
  for (int i=0; i<nombre; i++) 
  {
    // lecture du bouton
    int etat = digitalRead(boutons[i]);

    // poussé et lampe éteinte et nouvelle action
    if (etat && !mem_etat_lampe[i] && !mem_front_bouton[i]) {
      // allumer la lampe (relais)
      digitalWrite(lampes[i],HIGH);
      // mémoriser que la lampe est allumée
      mem_etat_lampe[i]=true;
      // mémoriser qu'on vient de prendre en compte l'action
      mem_front_bouton[i]=true;
    }
    // poussé et lampe allumée et nouvelle action
    else if(etat && mem_etat_lampe[i] && !mem_front_bouton[i]) {
      // éteindre la lampe (relais)
      digitalWrite(lampes[i],LOW);
      // mémoriser que la lampe est éteinte
      mem_etat_lampe[i]=false;
      // mémoriser qu'on vient de prendre en compte l'action      
      mem_front_bouton[i]=true; 
    }

    // si le bouton est relâché, on a terminé le travail et on s'endort jusqu'au prochain "front" (appui sur le bouton)
    if (!etat) {
      // remise à zéro de l'action
      mem_front_bouton[i]=false; 
    }    
  }

  // on surveille les interrupteurs dix fois par seconde
  delay(100);

}

J'ai juste déclaré le bouton "spécial", je te laisse trouver le code dans la boucle "loop" pour le gérer.

16 Dernière modification par laurent33 (06-08-2011 22:10)

Re : Arduino Xap

Bon je viens d’essayer ton code ça marche super bien un grand merci à toi !!!

Il me reste plus qu'a faire le bouton spécial et le faire fonctionner en xap !!!!

Petite question j'ai mon shield Ethernet le wiznet qui sent le chaud c'est normal ? Pourtant je l'alimente en 9volts depuis mon arduino 

Merci Laurent

17

Re : Arduino Xap

laurent33 a écrit:

Bon je viens d’essayer ton code ça marche super bien


Super !

Vérifie les tensions avec un multimètre.

Je ne comprends pas "je l'alimente en 9 volts" : normalement tu branches le shield sur l'Arduino et toutes les pattes se retrouvent sur l'étage Ethernet shield. Tu n'as pas mis de câble 9 volts en plus ? Car sinon, tu as peut être confondu avec la sortie 9 volts du "Power over Ethernet", un module qui permet de fournir 9 volts à partir du câble Ethernet.

++

18

Re : Arduino Xap

Bonsoir,
Alors voilà encore une fois je me suis mal expliqué, j'ai mis une photo pour vous montrer le problème !!!
Quand je le branche en 9 volts ou en usb c'est toujours le même le problème ça chauffe j'ai du mal à comprendre pourquoi !!!!

Je suis aussi en train de chercher la commande pour le bouton spécial !!!

http://img10.imageshack.us/img10/3499/arduinob.jpg


Merci d'avance Laurent