Aller au contenu


Photo

Projet domotique et tuto N°1

Domotique ESP8266 DS18B20 LCD 2004A

6 réponses à ce sujet

#1 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 519 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 28 janvier 2021 - 07:51

Bonjour, pendant cette triste période ou les entreprises perdent des contrats et les rangs de Pôle Emploi gonfle comme les chiffres du Covid, je me suis dit : « tiens, si je faisais un truc pour la maison ».
Alors, je me suis acheter 2, 3 bricole et hop au travail.

Je me demandais si cela pouvait intéresser quelques membres du forum et pourquoi pas améliorer ce qui est déjà fait. (le temps pour moi de transformer cela en Tuto)

Objectif :

  • mesuré la température dans différentes pièces avec plusieurs sondes.
  • l’affichage doit pouvoir se lire sur LCD, Tablette ou téléphone Via une appli MIP APP INVENTOR et sur le moniteur série de l’IDE Arduino.
  • recevoir une alarme si un seuil ou valeur pré programmer est atteinte.
  • Option : la lecture voire paramétrage des températures sur un site web genre sur ESP8266 .
  • Option : une page pour pouvoir gérer plusieurs actionneurs (Lampe, Relais, etc. …) depuis un ESP8266.

 

Matériel :

  • Sonde DS18B20 (jusque 15)
  • Module Bluetooth HC-05
  • Arduino NANO
  • ESP8266 (Option pour le moment ca viendra plus tard si le sujet intérresse)
  • 1 résistance de 4.7k
  • Un écran LCD 2004A (20 caractères, 4 lignes)
  • Une alim 5V

J'attend votre retour.

IMG_20210128_1918561.jpg

 

 


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 28 janvier 2021 - 07:54

Pourquoi choisir une nano + un espe8266 quand tu peux directement utiliser un nodemcu ou équivalent qui intègre déjà le wifi ? 

En tout cas super projet et bonne continuation pour la suite! =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 Ludovic Dille

Ludovic Dille

    Habitué

  • Membres
  • PipPip
  • 185 messages
  • Gender:Male
  • Location:Belgique
  • Interests:Robotique, électronique, embarqué, informatique, ...

Posté 28 janvier 2021 - 08:00

Hello !

Le bluetooth c'est pour relier les sondes ?
Et pourquoi pas avoir un RPI qui vient logger les données (pour pouvoir avoir des graphes d'évolution)



#4 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 519 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 28 janvier 2021 - 09:36

@Mike: j'ai eu quelques problemes avec la doc sur l'I2C sur l'ESP ou j'arrivais a rien, je me suis dit que je verrais ca plus tard. Donc, oui ca peut revenir sur le sujet.

@Ludo: le Bluetooth simplemement pour commencer par un truc simple pour certains novices qui cherche a apprendre.

 

Demain, je posterais un peu plus de schémas et des infos/explications et des bouts de code. :)


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#5 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 519 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 29 janvier 2021 - 04:06

Alors commençons par le début : pourquoi ce projet ?

 

Simplement pour trouver d’autres façons ludique pour aider les débutants à comprendre comment faire une « station domotique maison » de plusieurs façons. Sur internet, j’ai vu beaucoup de tuto, de vidéo qui en fait n’apporte rien de bon car soit c’est faux ce qu’ils racontent, soit ça fonctionne pas comme il faudrait. Alors pour combler ce tout et n’importe quoi, je vais essayer de lancer un sujet avec de vrais explications depuis le début pour que ça soit compréhensible par n’importe qui. (pilou, ça va pas être de tout repos) 😫😆

 

Je vais aussi poster quelques liens vers des tutos de personnes qui savent de quoi ils parlent et qui méritent d’être cité, car je trouve leurs vidéos remarquables.

 

Bon stop à l’intro qui saoul  et passons à la suite du programme.

 

Le choix du matériel et leurs caractéristiques.

  • L’afficheur : Mon choix n’est pas arrêter sur tel ou tel type d’afficheur, en effet le mode de fonctionnement est pareil et en modifiant très peu de paramètres vous arriverez au même résultat.
    Donc, je vous propose le model LCD 1602A et le model LCD 2004A.
    Le LCD 1602A c’est un afficheur 16 caractères sur 2 lignes.

ecran-lcd-420.jpg (ici le LCD 2004)

 

Le LCD 2004A c’est un afficheur 20 caractères sur 4 lignes.
Pour simplifier la programmation ET le cablage, j’ai choisi de piloter l’afficheur que vous aurez choisi parmi les deux modèles en « I2C ». 🙄🙄🙄 "Kesako?" Pour faire simple, c'est un mode de communication Série, j'y reviendrais.

 

Donc, 1 afficheur LCD 2 ou 4 lignes avec 16 à 20 caractères.

IMG_20210129_115305.jpg

 

Le controleur I2C pour le LCD: (à souder sur le LCD).

IMG_20210129_114904.jpg

 

 

  • Le microcontrôleur : Ici, j’ai choisi simplement pour l’encombrement très réduit une Arduino NANO. Bon, ça se passe de commentaires pour le moment.

clone-arduino-nano.jpg

  • La sonde DS18B20 : La ou LES sondes que j’ai choisi peuvent aller jusqu’à 15 sondes et avec une longueur maximale de 30m de câble (que vous faites vous-même, en effet les sondes sont livrées avec un câble de 1m a 3m en général). Le tout brancher sur 1 seul fil de communication série. (Voir images ci-dessous)

IMG_20210129_143955.jpg

  • Module Bluetooth HC-05 : Ce module vous permet de communiquer par Bluetooth avec votre téléphone, votre tablette, votre PC….
    Mon choix a été de commencer par un truc simple comme celui-ci.

module-bluetooth-hc-05.jpg

  • Un module d’alimentation 5V : Bon pas besoin d’explications là ? J

IMG_20210129_120432.jpg

 

 

Bon, le tour du matériel est fait (je vous ai pas mis le fil et la breadboard hein..)   :Alvarin_07:

 

La partie SCHEMA:

Comme le disait un vieil ami : les images parlent mieux que les mots. Donc voici le schéma qui vous servira.

schema 2.png

 

Bon commençons par les sondes, j’ai ai pris 2 mais vous verrez que vous pouvez monter jusque 15.

Une sonde se présente avec 3 fils, 1 noir (GND, 1 Rouge (VCC) et 1 Jaune (le bus Data : One-Wire )

DS18B20.jpg

Comme sur le schéma, vous devez raccorder toutes les sondes au même endroit ET avec une résistance de 4.7K entre le fil rouge +5V (VCC) et le fils jaune (Data).

Le fils jaune (Data) doit être raccorder sur l’Arduino Nano sur la pin D5.

 

L'écran LCD 2004 en I2C: (Rappel, vous avez souder le module I2C sur le LCD).

 

Noir sur GND

Rouge sur +5V

Le SDA sur la pin A4 de l’Arduino

Le SCL sur la pin A5 de l’Arduino, en effet ses 2 pins sont le ports Série I2C de la Nano.

 

Bien voila un Bon début.

Le module HC-05 attendra son tour plus tard.

 

Bon il nous manque quoi maintenant ?

Ah oui un bout de programme pour commencer a faire voir bouger les choses.

/*
 *
 *  Exemple de programme pour lire plusieurs capteurs DS18B20 sur un même bus 1-Wire.
 *  
 *  I2C du LCD : SDA sur A4   et SCL sur A5
*/

/* Librairie pour le bus 1-Wire */
#include <OneWire.h>
// Librairie pour afficheur LCD en I2C
#include <LiquidCrystal_I2C.h> 
// Configuration du LCD
LiquidCrystal_I2C lcd(0x27,20,4); // ici le 0x27 c'est l'adresse pour la puce PCF8574t
 
/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 5;  // pin D5 de la NANO/UNO   

/* Code de retour de la fonction getTemperature() */
enum DS18B20_RCODES {
  READ_OK,
  NO_SENSOR_FOUND,
  INVALID_ADDRESS,
  INVALID_SENSOR
};


/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_ONEWIRE);
 
/**
 * Fonction de lecture de la température via un capteur DS18B20.
 */
byte getTemperature(float *temperature, byte reset_search) {
  byte data[9], addr[8];
  // data[] : Données lues depuis le scratchpad
  // addr[] : Adresse du module 1-Wire détecté
  
  /* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */
  if (reset_search) {
    ds.reset_search();
  }
 
  /* Recherche le prochain capteur 1-Wire disponible */
  if (!ds.search(addr)) {
    // Pas de capteur
    return NO_SENSOR_FOUND;
  }
  
  /* Vérifie que l'adresse a été correctement reçue */
  if (OneWire::crc8(addr, 7) != addr[7]) {
    // Adresse invalide
    return INVALID_ADDRESS;
  }
 
  /* Vérifie qu'il s'agit bien d'un DS18B20 */
  if (addr[0] != 0x28) {
    // Mauvais type de capteur
    return INVALID_SENSOR;
  }
 
  /* Reset le bus 1-Wire et sélectionne le capteur */
  ds.reset();
  ds.select(addr);
  
  /* Lance une prise de mesure de température et attend la fin de la mesure */
  ds.write(0x44, 1);
  delay(800);
  
  /* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);
 
 /* Lecture du scratchpad */
  for (byte i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
   
  /* Calcul de la température en degré Celsius */
  *temperature = (int16_t) ((data[1] << 8) | data[0]) * 0.0625; 
  
  // Pas d'erreur
  return READ_OK;
}
 
 
/** Fonction setup() **/
void setup() {
  // init du sérial pour le LCD 20*4
  lcd.init();

  // Affichage du message de debut
  lcd.backlight();
  lcd.home();
  lcd.setCursor(0,0); // colonne 0, ligne 0
  // Petit méssage de démarrage :) 
  lcd.print("TUTO   avec  MESURES"); // texte ligne 0
  lcd.setCursor(0,1); // colonne 0, ligne 1
  lcd.print("  DE  TEMPERATURES  "); // texte ligne 1
  lcd.setCursor(0,2); // colonne 0, ligne 2
  lcd.print("  By  MELMET  for   "); // texte ligne 2
  lcd.setCursor(0,3); // colonne 0, ligne 3
  lcd.print("  Robot-Maker.com   "); // texte ligne 3
  delay(3000); // tempo de 3 secondes
  lcd.clear(); // efface l'ecran
  
  /* Initialisation des ports série */
  Serial.begin(115200);

}
 
 
/** Fonction loop() **/
void loop() {

  float temperature[2];
   
  /* Lit les températures des sondes */
  if (getTemperature(&temperature[0], true) != READ_OK) {
    Serial.println(F("Erreur de lecture du capteur 1"));
    return;
  }
  if (getTemperature(&temperature[1], false) != READ_OK) {
    Serial.println(F("Erreur de lecture du capteur 2"));
    return;
  }
// si vous avez 3 sonde
//  if (getTemperature(&temperature[2], false) != READ_OK) {
//    Serial.println(F("Erreur de lecture du capteur 3"));
//    return;
//  }
   
  // Affiche les températures sur le LCD
  lcd.setCursor(0,0); //
  lcd.print("Sonde 1: ");
  lcd.print(temperature[0], 2);
  lcd.write((char)223);
  lcd.setCursor(0,2);
  lcd.print("Sonde 2: ");
  lcd.print(temperature[1], 2);
  lcd.write((char)223);
  lcd.setCursor(0,1);
  lcd.print(" By MELMET");
  lcd.setCursor(0,3);
  lcd.print("www.robot-maker.com ");
  
 
  // Affiche les température sur le Moniteur Serie de l'IDE
  Serial.print(F("Temperatures : "));
  Serial.println("");
  Serial.println("Sonde 1: ");
  Serial.print(temperature[0],2); // le [0], 2) signifie [numéro de sonde], nb de décimal à afficher)
  Serial.print((" C"));
  Serial.println("");
  Serial.println("Sonde 2 : ");
  Serial.print(temperature[1],2); // le [1], 2) signifie [numéro de sonde], nb de décimal à afficher)
  Serial.print(" C");
  Serial.println("");
//  Serial.print(temperature[2], 2);  // recopier cette partie de code pour chaque sonde et ajuster la valeur entre [x], 2)
//  Serial.println('C');
// Seriel.println("");
}

Bon, voila un bon début je pense.

Vous n'avez plus qu'a brancher l'alim sur le montage et regarder le resultat (pour infos, vous pouvez modifier le message d'intro :Koshechka_08:)

J'attend vos retours, remarques, autres façons de faire....

 

La suite, prochainement.

 

Enjoy :lazy:
 

 


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#6 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 29 janvier 2021 - 09:00

Si tu veux te simplifier la vie, ce Shield, Shield nano (robot-maker.com), te permettra d'éviter le Breadbord et de simplifier les connexions.

Pour l'afficheur, un OLED, peut-être, pour éviter l'adaptateur I2C, écran OLED (robot-maker.com)



#7 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 519 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 29 janvier 2021 - 09:23

Pour le shield, je veux faire rentré tout le matos dans un petit boitier... a voir

Pour ton Oled, il reste plus chers que mon LDC et oublie pas que je perds un peu plus la supervision de mes super yeux :) Me faut un Ecran plus gros qu'une piéce de 2€ :P

je souhaite que le boitier se fixe ou pose dans un endroit discret ou sur un meuble.

La suite te t'en diras plus sur la version final. :)

 

Au programme suivant:
Configuration d'un HC-05 et Premiere étude de notre application sur tel ou tablette avec un logiciel gratuit:  MIP APP INVENTOR.


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:




Répondre à ce sujet



  



0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users