Projet de domotique Arduino

Bonjour a tous,

Je suis débutant en domotique et je souhaiterais réaliser un projet de domotique dans une pièce de ma maison qui gerera l'éclairage et les volets roulants de cette pièce.

Voici deux tableaux qui montrent comment j'aimerais gérer l'éclairage et les volets:

Le premier sur l'éclairage.J'aimerais avoir 3 boutons poussoirs.
*Le premier pour mettre l'éclairage sur OFF
*Le second pour mettre l'éclairage sur ON
*Le troisième pour mettre l'éclairage sur AUTO
http://www.hostingpics.net/viewer.php?id=786856lumire.png

Le second sur les volets.J'aimerais que:
*quand une personne est détectée dans la pièce, le système passe en mode manuel et peut donc être commandé avec une tellecomande
*quand personne n'est détecté dans la pièce, le système passe en mode auto et gère l'ouverture et la fermeture grâce aux capteurs de luminosité et de température
http://www.hostingpics.net/viewer.php?id=644532voletsroulants.png

J'ai pensé aux éléments suivants pour réaliser le projet:
carte arduino uno: http://mchobby.be/PrestaShop/product.php?id_product=10
capteur de lumière: http://www.frduino.com/module/dfr0026.html#BtnAddCart ou http://boutique.semageek.com/fr/73-ldr-photorésistance.html
capteur de température: http://boutique.semageek.com/fr/112-capteur-de-température-tmp36.html

J'ai plusieurs questions:
J'aimerais savoir si le matériel est bon ou sinon le matériel a acheter pour réaliser ce projet?
j'aimerais avoir de l'aide sur la marche a suivre ainsi que sur le code car j'ai quelques problèmes avec ArduBlock?

Merci d'avance

Première chose, poster dans la bonne rubrique.

Sujet déplacé.

Merci je croyais que c'était la bonne rubrique.

Bonjour,

jajprt:
J'aimerais savoir si le matériel est bon ou sinon le matériel a acheter pour réaliser ce projet?

Il te manque un capteur de présence non ?
Un capteur infrarouge devrait faire l'affaire.

Sinon pour le reste c'est pas mal.
Juste une petite remarque : pour le capteur de température un DS18B20 ou un LM35 serait bien plus simple à utiliser :wink:

jajprt:
j'aimerais avoir de l'aide sur la marche a suivre ainsi que sur le code car j'ai quelques problèmes avec ArduBlock?

Oublie ArduBlock, ce logiciel est bien pour faire des programmes extrêmement simple mais pas plus.
Or dans ton cas il faudra faire un algorithme pour le mode auto.
Regarde sur le site du zero la syntaxe du langage C :wink:

Bonjour,
Merci de vos réponses. J'ai fais ma liste de matériel et j'aimerais savoir si je pouvais me lancer dans la commande sans pour autant m'être renseigné sur la marche a suivre. J'aimerais juste savoir si tout les matériaux sont compatibles entre eux et est-ce qu'ils me permettront de réaliser mon projet?

Matériel
Arduino UNO : http://www.frduino.com/microcontroleur/dfr0216.html
Capteur de proximité : http://mchobby.be/PrestaShop/product.php?id_product=61
Capteur de lumière : http://www.frduino.com/module/dfr0026.html#BtnAddCart
Capteur de température : http://mchobby.be/PrestaShop/product.php?id_product=59
Clavier boutons : http://www.frduino.com/module/dfr0075.html#BtnAddCart
3 relais : http://www.frduino.com/module/dfr0017.html

J'aimerais aussi savoir si à la place des petits boutons je pouvais utiliser des interrupteurs classiques? MERCI.

Si tu prend des modules prend aussi les câbles et la carte de connexion :wink:
http://www.frduino.com/cable-et-fil/fit0011.html
http://www.frduino.com/carte-d-extension/dfr0088.html

Pour les interrupteurs tu peut utiliser des interrupteurs classique à condition de leurs mettre une résistance de tirage (10K c'est pas mal).

Merci de ton aide :slight_smile:

Bonjour,
J'ai reçu le matériel hier.
Voici les photos:

tout le matériel (finalement je ne me servirais pas du petit interrupteur car je vais recevoir le volet avec son interrupteur)

L'Arduino UNO,Le shield ethernet et la carte de connexion.

J'ai du surelever la carte de connexion car alle touchait le port ethernet

Les relais

Le capteur de température DS18B20

Le capteur de présence PIR

Le capteur de luminosité DFR0026

J'ai réussi a cabler les capteurs et a faire des petits programmes pour les faire réagir mais j'ai un probleme pour faire le programme final de mon projet.

J'ai trois questions
*La première est est-ce que quelqu'un aurait un programme adapté a mon projet ou meme plusieurs programmes que je pourrais modifier pour n'en faire qu'un, sinon est ce que quelqu'un pourrait m'aider a le réaliser?
*La seconde est est-ce je peux brancher tous les capteurs sur les sorties DIGITAL ou je dois utiliser les sorties ANALOG?
*La troisième est a quoi va me servir la carte de connexion et est ce que je pourrais m'en dispenser?

je vous met les schémas pour ma réalisation

Ce premier est un tableau qui représente ce que j'aimerais faire avec l'arduino

Ce second est un schéma de cablage (il manque le capteur de température qui sera sur la borne 2,Le capteur de présence sur la borne 3,Le capteur de luminosité sur la borne 4.

Merci d'avance et n'hésitez pas a me poser des questions si vous ne comprenez pas.

Mon sketch utilise certains de tes éléments mais sur mega car il n'y avait pas assez de place sur le uno.

http://arduino.cc/forum/index.php/topic,82555.0.html

Bonjour,
Pour quelqu'un qui ne connaît pas le C, ton projet est a la foi assez simple (en terme de capteurs/actionneurs) et lourd en terme de nombre de paramètre. Je te conseil donc de faire d'abord un programme par fonction voulue. Ça va te permettre de debugguer sans t'arracher les cheveux. Ensuite tu les réunira en un seul à grand coups violents de copier/coller.

jajprt:
*La seconde est est-ce je peux brancher tous les capteurs sur les sorties DIGITAL ou je dois utiliser les sorties ANALOG?
[...]
il manque le capteur de température qui sera sur la borne 2,Le capteur de présence sur la borne 3,Le capteur de luminosité sur la borne 4.

Les "entrées" DIGITALES sont prévues pour des signaux "tout ou rien" (je schématise) et les analogiques pour des signaux à valeur variable. Donc les digitales vont lire des bits, et les analogiques vont mesurer des tensions. C'est très important ! Il faut savoir comment communiquent tes capteurs.
Donc à priori :
Capteur PIR - digital
Température - digital
Luminosité - analogique

Donc la luminosité DOIT être câblée sur un analogique.
Si tu manque de pin digitaux, les analogiques peuvent fonctionner en digital (pas l'inverse).

Bonjour,
Merci de votre aide.
J'ai réalisé le programme mais comme prévu il y a des erreurs.
je vous le met en espérant que vous puissiez m'aider

#define PIR 12 //PIR sur sortie 2
#define TEMP 11 //cAPTEUR DE TEMP sur sortie 11
#define RELAISUN 10 //relais1 sur sortie 10 <<relais lumiere>>
#define RELAISDEUX 9 //relais2 sur sortie 9 <<relais montée volet>>
#define RELAISTROIS 8 //relais3 sur sortie 8 <<relais descente volet>>
#define INTEUN 7 //inte1 sur sortie 7
#define INTEDEUX 6 //inte2 sur sortie 6
#define INTETROIS 5 //inte3 sur sortie 5
#define INTEQUATRE 4 //inte4 sur sortie 4
int val = 0;            // état du capteur
int pirState = LOW; // précédent état du capteur
int relaisunState = HIGH; //précadent état du relais1
int relaisdeuxState = HIGH; //précadent état du relias2
int relaistroisState = HIGH; //précédent état du relais3
int inteun = HIGH; //précédent état de l'inte1
int intedeux = HIGH; //précédent état de l'inte2
int intetrois = HIGH; //précédent état de l'inte3
int intequatre = HIGH; //précédent état de l'inte4
void setup()
{
  pinMode(PIR, INPUT); //PIR est une entrée
  pinMode(TEMP, INPUT); //TEMP est une entrée
  pinMode(RELAISUN, OUTPUT); //RELAISUN est une sortie
  pinMode(RELAISDEUX, OUTPUT); //RELAISDEUX est une sortie
  pinMode(RELAISTROIS, OUTPUT); //RELAISTROIS est une sortie
  pinMode(INTEUN, INPUT); //INTEUN est une entrée
  pinMode(INTEDEUX, INPUT); //INTEDEUX est une entrée
  pinMode(INTETROIS, INPUT); //INTETROIS est une entrée
  pinMode(INTEQUATRE, INPUT); //INTEQUATRE est une entrée
  Serial.begin(9600);
}

void loop()  //Boucle
{
  Serial.println(digitalRead(PIR));
  valpir = digitalRead(PIR);
  Serial.println(digitalRead(TEMP));
  valtemp= digitalRead(TEMP);
  vallum=analogRead(0);   //capteur de lum sur analog 0
  Serial.println(vallum,DEC);//print the value to serial        
  delay(100);
  
  if(digitalRead(INTEUN) == LOW);          // si l'interrupteur1 est sur >>>>>>>>>>>>>>>>>>>>>>>> AUTO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  {
    if(pirState == LOW);      // si il y a une présence
    {
      if((vallum,DEC) > 800);   //si la lumière est faible donc > a 800
      {
      digitalWrite(RELAISUN, LOW); //on allume la lumière donc relais1
      digitalWrite(RELAISDEUX, HIGH); //on desactive le relais de montée du volet
      digitalWrite(RELAISTROIS, LOW); //on active le relais de descente du volet
      }
    } 
      else
      {
       digitalWrite(RELAISDEUX, LOW); //on active le relais de montée du volet
       digitalWrite(RELAISTROIS, HIGH); //on desactive le relais de descente du volet
       digitalWrite(RELAISUN, HIGH); //on éteint la lumière
      }
    else //au sinon
    {
     digitalWrite(RELAISUN, HIGH); //on éteint la lumière
    }
      if((vallum,DEC) > 800);   //si la lumière est faible donc > a 800
      {
        digitalWrite(RELAISTROIS, LOW); //on active le relais de descente du volet
        digitalWrite(RELAISDEUX, HIGH); //on desactive le relais de montée du volet
      }
      else
        if((valtemp,DEC) < 25); //si la température est < a 25°C
        {
          digitalWrite(RELAISDEUX, LOW); //on active le relais de montée du volet
          digitalWrite(RELAISTROIS, HIGH); //on desactive le relais de descente du volet
        }
        else  //au sinon
        { 
           digitalWrite(RELAISDEUX, HIGH); //on desactive le relais de montée du volet
           digitalWrite(RELAISTROIS, LOW); //on active le relais de descente du volet
        }
    }
  else         // si l'interrupteur1 est sur >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> MANU <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  {
    if(digitalRead(INTEDEUX) == LOW) //si l'interrupteur2 est actionne 
    {
      digitalWrite(RELAISUN, LOW); //on allume la lumière
     }
     else
     {
      digitalWrite(RELAISUN, HIGH); //on éteind la lumière 
     }
     if(digitalRead(INTETROIS) == LOW) //si l'interrupteur3 poussoir qui commande la montée du volet est actionne 
     {
       digitalWrite(RELAISDEUX, LOW); //on active le relais de montée du volet
       digitalWrite(RELAISTROIS, HIGH); //on desactive le relais de descente du volet
     }
     if(digitalRead(INTEQUATRE) == LOW) //si l'interrupteur4 poussoir qui commande la descente du volet est actionne 
     {
       digitalWrite(RELAISDEUX, HIGH); //on desactive le relais de montée du volet
       digitalWrite(RELAISTROIS, LOW); //on active le relais de descente du volet
     } 
  }
}

Si tu nous mettais les erreurs de compilation, ça aiderait !

Voici les erreurs que j'ai:

sketch_may22a.ino: In function 'void loop()':
sketch_may22a:36: error: 'valpir' was not declared in this scope
sketch_may22a:38: error: 'valtemp' was not declared in this scope
sketch_may22a:39: error: 'vallum' was not declared in this scope
sketch_may22a:54: error: 'else' without a previous 'if'
sketch_may22a:60: error: 'else' without a previous 'if'
sketch_may22a:69: error: 'else' without a previous 'if'
sketch_may22a:75: error: 'else' without a previous 'if'
sketch_may22a:81: error: 'else' without a previous 'if'

PS:si quelqu'un aurait le temps de regarder si le programme est juste par rapport a mon projet se serait sympa

Merci

jajprt:
Voici les erreurs que j'ai:

sketch_may22a.ino: In function 'void loop()':
sketch_may22a:36: error: 'valpir' was not declared in this scope
sketch_may22a:38: error: 'valtemp' was not declared in this scope
sketch_may22a:39: error: 'vallum' was not declared in this scope
sketch_may22a:54: error: 'else' without a previous 'if'
sketch_may22a:60: error: 'else' without a previous 'if'
sketch_may22a:69: error: 'else' without a previous 'if'
sketch_may22a:75: error: 'else' without a previous 'if'
sketch_may22a:81: error: 'else' without a previous 'if'

PS:si quelqu'un aurait le temps de regarder si le programme est juste par rapport a mon projet se serait sympa

Merci

Les 3 variables ne sont pas déclarées. Faire une déclaration globale en début de programme ou si tu préfères laisser leur déclaration dans loop, déclares le type devant la première utilisation des variables.

Pour les erreurs sur les else il ne faut pas terminer les lignes de if avec un point virgule

  if(digitalRead(INTEUN) == LOW);   <----- erreur
  {
    if(pirState == LOW);      <----- erreur
    {
      if((vallum,DEC) > 800);     <----- erreur
      {

Le point virgule à la fin de la ligne fait croire au compilateur que le if est terminé et qu'il n'y a plus de code associé à ce if

  if(digitalRead(INTEUN) == LOW) 
  {
    if(pirState == LOW)      // si il y a une présence
    {
      if((vallum,DEC) > 800)   //si la lumière est faible donc > a 800
      {

Bonjour merci de votre aide, j'ai corrigé le programme mais j'ai encore quelques erreurs.

Nouveau programme:

#define PIR 12 //PIR sur sortie 2
#define TEMP 11 //cAPTEUR DE TEMP sur sortie 11
#define RELAISUN 10 //relais1 sur sortie 10 <>
#define RELAISDEUX 9 //relais2 sur sortie 9 <<relais montée volet>>
#define RELAISTROIS 8 //relais3 sur sortie 8 <>
#define INTEUN 7 //inte1 sur sortie 7
#define INTEDEUX 6 //inte2 sur sortie 6
#define INTETROIS 5 //inte3 sur sortie 5
#define INTEQUATRE 4 //inte4 sur sortie 4
int val = 0; // état du capteur
int valpir = 0;
int valtemp = 0;
int vallum = 0;
int pirState = LOW; // précédent état du capteur
int relaisunState = HIGH; //précadent état du relais1
int relaisdeuxState = HIGH; //précadent état du relias2
int relaistroisState = HIGH; //précédent état du relais3
int inteun = HIGH; //précédent état de l'inte1
int intedeux = HIGH; //précédent état de l'inte2
int intetrois = HIGH; //précédent état de l'inte3
int intequatre = HIGH; //précédent état de l'inte4
void setup()
{
pinMode(PIR, INPUT); //PIR est une entrée
pinMode(TEMP, INPUT); //TEMP est une entrée
pinMode(RELAISUN, OUTPUT); //RELAISUN est une sortie
pinMode(RELAISDEUX, OUTPUT); //RELAISDEUX est une sortie
pinMode(RELAISTROIS, OUTPUT); //RELAISTROIS est une sortie
pinMode(INTEUN, INPUT); //INTEUN est une entrée
pinMode(INTEDEUX, INPUT); //INTEDEUX est une entrée
pinMode(INTETROIS, INPUT); //INTETROIS est une entrée
pinMode(INTEQUATRE, INPUT); //INTEQUATRE est une entrée
Serial.begin(9600);
}

void loop() //Boucle
{
Serial.println(digitalRead(PIR));
valpir = digitalRead(PIR);
Serial.println(digitalRead(TEMP));
valtemp= digitalRead(TEMP);
vallum=analogRead(0); //capteur de lum sur analog 0
Serial.println(vallum,DEC);//print the value to serial
delay(100);

if(digitalRead(INTEUN) == LOW) // si l'interrupteur1 est sur >>>>>>>>>>>>>>>>>>>>>>>> AUTO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
if(pirState == LOW) // si il y a une présence
{
if((vallum,DEC) > 800) //si la lumière est faible donc > a 800
{
digitalWrite(RELAISUN, LOW); //on allume la lumière donc relais1
digitalWrite(RELAISDEUX, HIGH); //on desactive le relais de montée du volet
digitalWrite(RELAISTROIS, LOW); //on active le relais de descente du volet
}
}
else
{
digitalWrite(RELAISDEUX, LOW); //on active le relais de montée du volet
digitalWrite(RELAISTROIS, HIGH); //on desactive le relais de descente du volet
digitalWrite(RELAISUN, HIGH); //on éteint la lumière
}
else //au sinon
{
digitalWrite(RELAISUN, HIGH); //on éteint la lumière
}
if((vallum,DEC) > 800) //si la lumière est faible donc > a 800
{
digitalWrite(RELAISTROIS, LOW); //on active le relais de descente du volet
digitalWrite(RELAISDEUX, HIGH); //on desactive le relais de montée du volet
}
else
if((valtemp,DEC) < 25) //si la température est < a 25°C
{
digitalWrite(RELAISDEUX, LOW); //on active le relais de montée du volet
digitalWrite(RELAISTROIS, HIGH); //on desactive le relais de descente du volet
}
else //au sinon
{
digitalWrite(RELAISDEUX, HIGH); //on desactive le relais de montée du volet
digitalWrite(RELAISTROIS, LOW); //on active le relais de descente du volet
}
}
else // si l'interrupteur1 est sur >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> MANU <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
if(digitalRead(INTEDEUX) == LOW) //si l'interrupteur2 est actionne
{
digitalWrite(RELAISUN, LOW); //on allume la lumière
}
else
{
digitalWrite(RELAISUN, HIGH); //on éteind la lumière
}
if(digitalRead(INTETROIS) == LOW) //si l'interrupteur3 poussoir qui commande la montée du volet est actionne
{
digitalWrite(RELAISDEUX, LOW); //on active le relais de montée du volet
digitalWrite(RELAISTROIS, HIGH); //on desactive le relais de descente du volet
}
if(digitalRead(INTEQUATRE) == LOW) //si l'interrupteur4 poussoir qui commande la descente du volet est actionne
{
digitalWrite(RELAISDEUX, HIGH); //on desactive le relais de montée du volet
digitalWrite(RELAISTROIS, LOW); //on active le relais de descente du volet
}
}
}

Erreurs:

programme final 1.ino: In function 'void loop()':
programme final 1.ino:65: error: expected `}' before 'else'
programme final 1.ino: At global scope:
programme final 1.ino:86: error: expected unqualified-id before 'else'

Merci