Version afficheur 128X64
Aujourd’hui, je vous propose la réalisation d'un thermostat a affichage digital utilisant 1 a 10 sondes ds18B20. Cette réalisation servira pour la régulation des diverses température du graveur Laser. Rien n'interdit de l'utiliser pour la gestion du chauffage ou pour avoir plusieurs indications de température.
Le schéma est assez simple, j'utilise un afficheur 128x64 avec la librairie GLCD a télécharger ici
L'avantage de l'afficheur 128x64 est qu'on peut mettre des petits dessins, un fichier java permettant de générer un fichier .h a partir d'une image est joint dans la librairie, je vous montrerai un peu plus loin comment l'utiliser.
Le schéma
Le schéma est assez simple, afin de pouvoir câbler de cette manière, j'ai du modifier l'ordre des broches dans la librairie. Sinon le câblage est éparpillé sur la UNO. L'afficheur est piloté par un K01008 mais d'autres afficheurs peuvent être utilisés avec la même librairie.
Dans le schéma j'ai oublié de donner la valeur de la résistance se trouvant sur les sondes, il s'agit d'une 4K7.
Le code
#include <glcd.h>
#include <OneWire.h>#include <DallasTemperature.h>
#define ONE_WIRE_BUS_PIN A5 // raccordement des sondes sur la broche A6
OneWire oneWire(ONE_WIRE_BUS_PIN);
DallasTemperature sensors(&oneWire);
DeviceAddress Probe01 = {
0x28, 0x7F, 0x47, 0xFC, 0x04, 0x00, 0x00, 0xE7 };
DeviceAddress Probe02 = {
0x28, 0x59, 0x92, 0xFC, 0x04, 0x00, 0x00, 0x6F };
DeviceAddress Probe03 = {
0x28, 0x59, 0x92, 0xFC, 0x04, 0x00, 0x00, 0x6F };
// Les adresses des sondes peuvent être trouvées grace a un petit programme arduino
#include "fonts/Arial14.h"
#include "fonts/SystemFont5x7.h"
#include "bitmaps/JhIcon.h"
#include "fonts/Arial_bold_14.h"
#include "fonts/Corsiva_12.h"
#include "fonts/Verdana_digits_24.h"
#include "fonts/fixednums7x15.h"
#include "fonts/fixednums8x16.h"
#include "fonts/fixednums15x31.h"
//#include "bitmaps/thermo.h" // image a remplacer, dans la librairie il y a un fichier java permettant de convertir de petites images.
#if DISPLAY_HEIGHT < 64
#error ks0108 example requires a display at least 64 pixels tall
#endif
#if DISPLAY_WIDTH < 128
#error ks0108 example requires a display at least 128 pixels wide
#endif
//unsigned long startMillis;
//unsigned int loops = 0;
//unsigned int iter = 0;
int R1 = A0; // relai 1
int R2 = A1;//relai 2
int R3 = A2; //relai 3
int value_T1 = 0;
int value_T2 = 0;
int value_T3 = 0;
int consT1 = 23; // consigne de température T1
int consT2 = 24;
int consT3 = 25;
void setup(){
sensors.setResolution(Probe01,10);
sensors.setResolution(Probe02, 10);
GLCD.Init(NON_INVERTED); // initialisation de l'afficheur en fond clair pour un fond sombre, il suffit d'enlever le NON_
GLCD.ClearScreen();
pinMode (R1,OUTPUT);
pinMode (R2,OUTPUT);
pinMode (R3,OUTPUT);
}
void loop(){
GLCD.SelectFont(SystemFont5x7);
GLCD.GotoXY(2, 2);
GLCD.DrawRoundRect(0,0,127,63, 5, BLACK);
sensors.requestTemperatures();
GLCD.GotoXY(22, 24);
GLCD.SelectFont(Corsiva_12);
GLCD.Puts("Temp 1 "); // texte affiché a modifier selon vos envies
printTemperature(Probe01);
GLCD.GotoXY(22, 36);
GLCD.Puts("Temp 2 ");
printTemperature(Probe02);
delay(1000);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00)
{
GLCD.Puts("Erreur "); message d'erreur si une des sondes est déconnectée
}
else
{
GLCD.PrintNumber(tempC);
GLCD.Puts("C ");
}
//xxxxxxxxxxxxxxxxxx temperaturexxxxxxxxxxxxxxx
int temp1 = sensors.getTempC(Probe01); // déclaration des température associée a la sonde
int temp2 = sensors.getTempC(Probe02);
int temp3 = sensors.getTempC(Probe03);
{
digitalWrite (R2,HIGH);
}
if ((temp1) >= consT1 + 1)
// formule a adapter suivant les besoins, ici on dit : si la température de la sonde 1 est égale ou supérieur a la consigne consT1 + 1°, on commande le relais sinon on l'éteint
// cela veut dire que si on donne une consigne de 20°, a 21° le relai s'enclenche et a 19.9° il s'éteint{
digitalWrite (R1,HIGH); // allumage relai 1
}
else
{
digitalWrite (R1,LOW);
}
if ((temp2) >= consT2 + 1)
{
digitalWrite (R2,HIGH);
}
else
{
digitalWrite (R2,LOW);
}
if ((temp3) >= consT3 + 1)
{
digitalWrite (R3,HIGH);
}
else
{
digitalWrite (R3,LOW);
}
}
Version 4x20 lignes
Sur ce schéma, il y a un afficheur 2x16 lignes, cela conviens aussi il suffit de faire les bonnes déclarations dans le sketch. Le câblage entre le 2x16 et le 4x20 lignes est identique.
Le code
#include <OneWire.h>
#include <DallasTemperature.h>#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd (5,6,4,3,2,1);
#define ONE_WIRE_BUS 15
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Probe01 = { 0x28, 0x13, 0x2A, 0xA8, 0x04, 0x00, 0x00, 0x72 };
DeviceAddress Probe02 = { 0x28, 0x71, 0x17, 0xA8, 0x04, 0x00, 0x00, 0xB7 };
DeviceAddress Probe03 = { 0x28, 0x35, 0x98, 0xFC, 0x04, 0x00, 0x00, 0x6C };
void setup() {
sensors.begin();
sensors.setResolution(Probe01, 10);
sensors.setResolution(Probe02, 10);
sensors.setResolution(Probe03, 10);
lcd.begin (20,4);
delay (10);
lcd.clear ();
delay (10);
lcd.setCursor (3,1);
lcd.print ("Fraiseuse CNC");
lcd.setCursor (2,2);
lcd.print ("BY JOJO BRICOLO");
delay(4000);
lcd.clear ();
delay (10);
}
void loop() {
//lcd.clear ();
//delay (10);
sensors.requestTemperatures();
lcd.setCursor(0,3); //Start at character 0 on line 0
lcd.print("X");
displayTemperature(Probe01);
lcd.setCursor(7,3); //Start at character 0 on line 1
lcd.print("Y");
displayTemperature(Probe02);
lcd.setCursor(14,3); //Start at character 0 on line 2
lcd.print("Z");
displayTemperature(Probe03);
delay(1000);
}
void displayTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) // Measurement failed or no device found
{
lcd.print("Erreur");
}
else
{
//lcd.print("C=");
lcd.print(tempC);
}
}
Le sketch pour trouver l'adresse des DS 18B20
N'hésitez pas a me contacter.
Bonjour je souhaiterais échanger avec vous via mail, est ce possible ?
RépondreSupprimertactac77@gmail.com
Oui c'est possible, je viens de vous envoyer un mail afin que vous ayez mon adresse.
RépondreSupprimerSinon c'est:
heim.joel68@gmail.com
A bientôt
Salut Fred!
SupprimerMerci pour ton message, c'est super sympa
Je te souhaite de bonnes fêtes
A++
Jojo
bonjour,
RépondreSupprimerje désire piloter une vanne motorisée ouverture /fermeture en fonction d'une température demandée pour mitiger de l'eau chaude, pouvez vous m'aider
merci à vous
mon adresse mail est: francois.constant@brutele.be
Bonjour,
RépondreSupprimerJe peux vous aider, mais il me faut plus d'éléments. Je vous contact donc par mail.
Bonjour
SupprimerVotre schéma m’intéresse beaucoup. Pour refroidir un capteur ccd de camera (QHY8)
Bonjour,
SupprimerJ'ai répondu a votre mail, il me faut simplement quelques jours car j'ai d'autres demandes d'aide!!!
Cordialement
Jojo
Bonsoir,
RépondreSupprimerJ'ai un arduino Ethernet et 4 sondes DS18B20 branchées sur un seul pin. J'arrive à lire la t° d'1 seule sonde par le câble Ethernet. Pouvez vous m'aider à les lire toutes Merci
Bonjour,
RépondreSupprimerSans voir votre programme, je ne peux pas vous dire d’où viens l'erreur. Visualisez vous toutes les sonde via le moniteur série?
Vous pouvez m'envoyer votre sketch via le formulaire de contact je pourrais le vérifier et éventuellement le corriger.
Cordialement
Jojo
Merci pour votre programme cela marche bien
RépondreSupprimerLe circuit électrique ce comporte bien
http://www.webastro.net/forum/showthread.php?t=122119
J'ai été voir votre sujet, belle réalisation
SupprimerA bientôt
Jojo
Bonjour Jojo,
RépondreSupprimerJ'ai acheté un afficheur GLCD et une sonde de température DS18D20,montée sur circuit imprimé!
je voudrais afficher la température sur mon afficheur, j'ai donc pris votre code et j'ai laissé juste un seul capteur, mais hélas ça ne marche pas!
j'arrive pourtant à afficher HELLO où je veux sur l'écran.
la deuxième question je cherche des pistes pour faire défiler un texte sur mon GLCD...
Ouvert sur vos propositions.
merci d'avance.
Bonjour
RépondreSupprimerSuper tous se que vous faite
Une question a combien reviendrez le cout pour faire un thermostat qui pourez gerer un rack pour serpent avec 8 tapis chauffant chaleur et hygro
+ un imcubateur ou la comme le rack chaleur avec un cable chauffant humidité avec un thermoplongeur et air ext int le tout connecté et controlable par smartphone et pc
Cordialemment Cédric
Bonjour
RépondreSupprimerSuper tous se que vous faite
Une question a combien reviendrez le cout pour faire un thermostat qui pourez gerer un rack pour serpent avec 8 tapis chauffant chaleur et hygro
+ un imcubateur ou la comme le rack chaleur avec un cable chauffant humidité avec un thermoplongeur et air ext int le tout connecté et controlable par smartphone et pc
Cordialemment Cédric
Bonjour,
SupprimerMerci pour le compliment,
Il faudrait me donner plus d’éléments sur le fonctionnement
- gestion de l'hygrométrie (bac a eau avec thermoplongeur, pompe...?)
- Fonctionnement de l'incubateur
- Principe de la ventilation (hygrométrie, température?)
A++
Jojo
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimerCe commentaire a été supprimé par l'auteur.
RépondreSupprimerCe commentaire a été supprimé par l'auteur.
RépondreSupprimerBonjour mr Joël j'espère que tout va bien chez vous !!.
RépondreSupprimerAu premier je veux te remercier pour vos efforts incroyables qui nous a aider beaucoup dans ce domaine d'électronique etc...
J'ai fais un thermostat controlé(température et humidité) par une carte arduino + DHT22, j'ai ajouté un réglage des consignes de température et humidité avec des boutons poussoirs et ça marche bien. le problème c'est quand le courant est coupée de la carte arduino, les consignes sont perdues. C'est pour ça je veux les stocker dans l'EEPROM de l'arduino. Pouvez vous m'aider à modifier mon code!! merci d'avance monsieur et j'attends d'une réponse favorable.
voilà mon email : adybissam94@gmail.com
merçi encore une fois ^^
Bonjour mr Joël j'espère que tout va bien chez vous !!.
RépondreSupprimerAu premier je veux te remercier pour vos efforts incroyables qui nous a aider beaucoup dans ce domaine d'électronique etc...
J'ai fais un thermostat controlé(température et humidité) par une carte arduino + DHT22, j'ai ajouté un réglage des consignes de température et humidité avec des boutons poussoirs et ça marche bien. le problème c'est quand le courant est coupée de la carte arduino, les consignes sont perdues. C'est pour ça je veux les stocker dans l'EEPROM de l'arduino. Pouvez vous m'aider à modifier mon code!! merci d'avance monsieur et j'attends d'une réponse favorable.
voilà mon email : adybissam94@gmail.com
merçi encore une fois ^^
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimerBonjour,
RépondreSupprimerle tuto est vraiment super!
Cependant serait il possible de faire un tuto sur une conception plus poussé pour la gestion d'un chauffage bois?
L'idée serai d'enclencher un 1er circulateur lorsque que la température de l'eau atteint 40° puis d’enclencher le circulateur des radiateurs lorsque l'eau atteint 63° le tout
coupler à la régulation d'une vanne 3 voies motorise.
Ont pourrait aussi ajouter une fonction qui permet d'enclencher les circulateurs lors pendant quelques minutes lorsque ceci ne sont plus en fonction depuis plus de 7 jour pour évité qu'ils se grippe.
Pensez vous que cela et faisable ?
Bonjour,
SupprimerOui c'est faisable par contre je ne peux pas faire un tuto pour toutes les demandes, je ne ferai plus que ça lol
Contactez moi par le biais du formulaire de contact et on en reparle
Bonsoir, j'ai réalisé un chauffage au sol avec une cuisinière au bois et pellet couplée à une chaudière au mazout avec un ballon tampon de 500L, le tous réguler avec un arduino mega (1vanne 4 voies,5 vanne 3 voies,3 circulateurs)
SupprimerSi cela t'intéresse je peux te fournir tous les schémas,programme et la doc de ma réalisation.
Phil
parphil@gmx.fr
salut c'est un poussoir qui est relié au lcd si oui c'est un contact no ou nf?
RépondreSupprimermerci
Salut,
SupprimerCe n'est pas un bouton mais un potentiomètre pour le réglage du contraste de l'afficheur
ok merci je vais regarder a tout ca
RépondreSupprimermerci
salut aurais tu un lien pour l'ecran 128x64.
RépondreSupprimerJe suis nul en code aurais tu un lien qui permettent d'apprendre les bases? Je suis dans le meme cas que la personne au dessus je veux faire pour controler une chaudiere bois mais je dois considerablement modifié ton tuto deja en utilisant un shield reseau pour pouvoir controler via le smartphone. Je controle deja un arduino pour les portes de garage via jeedom
Bonjour,
RépondreSupprimerSuperbe travail.
Quel longueur et type de câble peut on mettre pour les sondes de température.
Merci
Bonne continuation
Bonjour,
SupprimerMerci!
Pour des grandes longueur, j'utilise un simple câble blindé. J'ai réussi a faire fonctionne une sonde a 20 mètres.Se sont des sondes numériques donc pas d’influence liées au câble.
bonjour super vos tuto je suis nul en programmation
RépondreSupprimeres que on peux afficher la température demandée et modifié
selle ci avec des bouton poussoir sur l’ecrans 128x64
un grand merci pour votre aide
Bonjour,
RépondreSupprimerMerci!
Oui c'est réalisable, le seul hic est que la sonde de température demande un délai mini de 750ms pour rafraichissement de la mesure, cela veut dire que lors de l'appui sur un bouton la valeur ne s'incrémente pas instantanément.
cela ne serai pas un problème pour moi savais vous m'aidé
Supprimerencore un grand merci
pas de renonce
RépondreSupprimerJe ne répond pas forcement tout de suite, accessoirement j'ai un emploi! Et j'ai répondu a votre question en vous disant que c'est possible avec quelques soucis.
SupprimerJe sais vous aider mais que voulez vous?
bonjour comme je vous l'ai Ecrit avoir en plus de l' affichage existent l’affichage de les températures demandée
Supprimeret pour voir changer selle ci a laide de bouton poussoir
en vous remercient
une bonne et heureuse année a vous un peux a l'avance je ne serai pas la a 00h
Supprimerbonjour j'essai de réaliser un thermostat pour un chauffage clim reversible, mais ma sonde est "folle" problème de tension qui chute. pouvez vous m'aider?
RépondreSupprimer