Domotique projet personnel

Projet domotique de la maison

Le contrôle de la maison se fera par un système autonome mais accessible par internet.

Il existe divers produits sur le marché, en particulier des systèmes microcontrolés comme l'ARDUINO et le RASPBERRY
bien adaptés pour la domotique.

Premier projet:   LE CONTROLE DU CHAUFFAGE CENTRALE

    Les capteurs
  • mesure de la température du circuit d'eau chaude de la chaudière.
  • mesure de la pression du circuit d'eau.
  • mesure de la température extérieure.
    Les actionneurs
  • mise en route et contrôle du brûleur de la chaudière.
  • contrôle du circulateur.
  • contrôle de la pression du circuit d'eau par une électrovanne.
    Les contrôles et Alarmes
  • de la température du circuit d'eau.
  • de la pression du circuit d'eau.
  • commande par clavier.
  • affichage des informations et mesures sur écran LCD.
    Options futures
  • Ajout du module horloge.
  • Contrôle accès chaufferie.

Présentation de l'ARDUINO:   Carte basée sur le microcontroleur ATmega 328

Le microcontrôleur possède 14 entrées/sorties digitales
et 6 entrées analogiques.
Certaines de ces broches ont une fonction spéciale
comme RX/TX - SDA SCL (I2C) - PWM.
L'ATmega328P a 32K Bytes de mémoire flash,
1K Bytes de EEPROM et 2K Bytes de SRAM.

Brochage de la carte UNO

Environement de la chaudière

La chaudière est bien evidement alimentée par du 220-230V, ce qui veut dire: le thermostat y compris.
Pour le montage, je me sers du relais du thermostat d'ambiance qui sera branché sur la platine ARDUINO (entrée digitale D3) comme un bouton poussoir (cf schéma à droit). La commande du brûleur et du circulateur se fera avec une platine relais commandée par l'ARDUINO (sortie digitale D11 et D12).

Le module va mesurer le température du circuit d'eau, mettre en route le brûleur et le circulateur.
On peut modifier le valeur de la température de l'eau.
Données prises en compte:
la valeur de la température de l'eau , et durées de fonctionnement du brûleur et du circulateur.
Elles seront mémorisées, puis transmises sur le reseau pour les afficher sous forme d'histogramme.
Elle pourront aussi servir de base de calcul de consommation en fioul.

La sonde de température est un capteur DS18B20 résistant aux liquides. Ce capteur de température du fabricant Dallas, communique via un bus 1-Wire (du même fabricant) et possède une précision de 12 bits sur une plage de -55°C à +125°C.
    Repérage des connecteurs de la sonde:
  • fil rouge: alim. +5V
  • fil vert: masse GND
  • fil jaune: Data DQ

La sonde sera connectée à l'entrée digitale D2 de la carte arduino.

Les différents modules sont reliés:

    Module Arduino uno:
  • est placé en dessous de l'afficahge
  • fil de connection USB (blue) sort du côté gauche
    Module Affichage LCD:
  • LCD 16x2 caractères avec keypad intégré
  • reçoit les fils connecteurs des relais et de la platine d'essai
    Module Relais:
  • 2 Relais 10A 250VAC
  • 4 fils (VCC, GND, IN1 et IN2) sont connectés directement sur la carte arduino (VCC,GND,D11 et D12)
    Platine d'essai:
  • face arrière autocollante
  • 2 Bornier à vis pour connecter les fils de la sonde de température, 3 fils (VCC, GND et Data) connectés sur la carte arduino (VCC, GND et D3)
  • une résistance de 4,7k entre le +5v (fil rouge) et data (fil orange)

Programmation du module

Extrait du programme.

#include <OneWire.h>
#include <LiquidCrystal.h>
#define DS18B20 0x28// Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 2// Broche utilisée pour le bus 1-Wire
const int RELAIS_BRULEUR = 11;// Broche utilisée pour Relais command Brûleur
OneWire ds (BROCHE_ONEWIRE);// création de l'objet OneWire ds
LiquidCrystal lcd (8,9,4,5,6,7);
boolean getTemperature (float *temp)
{
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
byte data[9], addr[8];// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire detecté
if (!ds.search (addr))
{
// Recherche un module 1-Wire
ds.reset_search ( );// Réinitialise la recherche de module
return false;// Retourne une erreur
}
if (OneWire::crc8 (addr, 7) != addr[7])// Vérifie que l'adresse a été correctement reçue
return false;// Si le message est corrompuon retourne une erreur
if (addr[0] != DS18B20)// Vérifie qu'il s'agit bien d'un DS18B20
return false;// Si ce n'est pas le cas on retrouve une erruer
ds.reset ( );// On reset le bus 1-Wire
ds.select (addr);// On selectionne le DS18B20
ds.write (0x44, 1);// On lance une prise de mesure de température
delay (800);// Et on attend la fin de la mesure
ds.reset ( );// On reset le bus 1-Wire
ds.select (addr);// On selectionne le DS18B20
ds.write (0xBE);// On envoie une demande de lecture du scratchpad
for (byte i = 0; i < 9; i++)// On lit le scratchpad
data[i] = ds.read ( );// Et on stock les octets reçus
*temp = ((data[1] << 8) | data[0]) * 0.0625;// Calcul de la température en degré celsius
return true;// Pas d'erreur
}
String txt_brl_on,txt_brl_off;
void setup ( )
{
Serial.begin (9600);// Initialisation du port série
lcd.begin (16,2);
lcd.clear ( );
pinMode (RELAIS_BRULEUR, OUTPUT);
txt_brl_on = "Demarrage Bruleur ";
txt_brl_off = "Arret Bruleur ";
}
void loop ( )
{
float temp;
if (getTemperature (&temp))
{
// Lit la température ambiante à ~1Hz
Serial.print ("Temperature : ");// Affiche la température
Serial.print (temp);
Serial.write (176);// caractère °
Serial.write ('C');
Serial.println ( );
lcd.setCursor (0, 0);//Positionnement du curseur
lcd.print ("Degres : ");
lcd.setCursor (9, 0);
lcd.print (temp);//Affichage de la température
lcd.setCursor (13, 0);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor (14, 0);
lcd.print ("C");//En degrés Celsuis
if (temp > 45)
{
digitalWrite (RELAIS_BRULEUR,HIGH);
lcd.setCursor (0,1);
lcd.print ("Arret Bruleur ");
}
else if (temp < 30)
{
digitalWrite (RELAIS_BRULEUR,LOW);
lcd.setCursor (0,1);
txt_brl_on = ScrollTxt (txt_brl_on);
lcd.print (txt_brl_on);
}
}
}
String ScrollTxt(String txt)
{
return txt.substring (1,txt.length ( )) + txt.substring (0,1);
}
3.144.124.232 Envoyer un mail