lecture de température via arduino(PRG type)

bonjours a tous , je suis en train de finaliser un projet de thermostat via arduino, et après pas mal de recherche sur le net, de boulot personnel, mon projet touche à sa fin.

Au cas où d'autre personne ferais quelque chose du même genre je partage mes base du code.

utilisation de sonde de type CTN sur un pont diviseur

partie initialisation

//////////////////////////////////// les entrées sorties ////////////////////////////////////
int SB=1;                                           // pin sonde température sol
int R1=11000;                                       // valeur de la resistance fixe du pont diviseur en ohm
//////////////////////////////////// gestion de la sonde  sol ////////////////////////////////////
int BR1=27275;                                      // Résistance de la sonde mesure 1
int BR2=13677;                                      // Résistance de la sonde mesure 2  
int BR3=721;                                        // Résistance de la sonde mesure 3
float BT1=4;                                        // température mesure 1
float BT2=19.5;                                     // température mesure 2   
float BT3=92.8;                                     // température mesure 3
float BR=0;                                         // variable résistance sonde de témpérature sol
float BRB=0;                                        // variable signal sonde intérieur
const int numReadingsB = 10 ;                       // Nombre de relevés pour la moyenne signal 
int readingsB [ numReadingsB ] ;                    // Variable lecture pour la sonde sol 
int indexB = 0 ;                                    // position dans la création de la moyenne 
int totalB = 0 ;                                    // Total en cours
int averageB = 0 ;                                  // La moyenne

R1 est la valeur de la résistance que vous aurez judicieusement choisis pour le couplage avec la CTN

BR1 et BT1 sont des valeurs déterminé lors d'expérimentation
BR2 et BT2 sont des valeurs déterminé lors d'expérimentation
BR3 et BT3 sont des valeurs déterminé lors d'expérimentation

const int numReadingsB = 10 ; est la nombre de valeur utilisé pour le lissage, 10 mesure est un bon compromis entre stabilité et réactivité.

partie void setup

for ( int thisReadingR = 0 ; thisReadingR < numReadingsR ; thisReadingR ++ ) 
readingsR [ thisReadingR ] = 0 ;

c'est la gestion du lissage par moyenne évolutive

partie void loop

//////////////////////////////////// calcul de moyenne de la sonde intérieur ////////////////////////////////////
totalR = totalR - readingsR [ indexR ] ;            
readingsR [ indexR ] = analogRead ( SR ) ;   // read from the sensor: 
totalR = totalR + readingsR [ indexR ] ;             // add the reading to the total:          
indexR = indexR + 1 ;                              // advance to the next position in the array: 
if ( indexR >= numReadingsR )                      // if we're at the end of the array... 
indexR = 0 ;                                      // ...wrap around to the beginning: 
averageR = totalR / numReadingsR ;                  // calculate the average:  
RRB=averageR;

//////////////////////////////////// calcul de la température intérieur via stein hart, pont diviseur et gestion des caractéres pour le processing ////////////////////////////////////
RR=((R1*RRB)/(1023-RRB));  
double RY1=1/(RT1+273.15);
double RY2=1/(RT2+273.15);
double RY3=1/(RT3+273.15);
double RL1=log(RR1);
double RL2=log(RR2);
double RL3=log(RR3);
double RV2=(RY2-RY1)/(RL2-RL1);
double RV3=(RY3-RY1)/(RL3-RL1);
double RC=((RV3-RV2)/((RL3-RL2))*((1/(RL1+RL2+RL3))));
double RB=RV2-(RC*((RL1*RL1)+(RL1*RL2)+(RL2*RL2)));
double RA=RY1-((RB+(RL1*RL1)*RC)*RL1);
double RT=((1/(RA+(RB*log(RR))+(RC*((log(RR))*(log(RR))*(log(RR))))))-275.5);

Tous le calcul via les équation de stein hart pour les ctn.
RT et la valeur de température final.
Attention dans le dernier calcul il y a la valeur 275.5, normalement c'est 273.5, mais j'ai une dérive de 2°

Merci de partager tes expériences.

C'est une partie d'un projet domotique ?

c'est mieux??

bon pour répondre à ta question, il s'agit de remplacer tous les thermostat (mal positionner et merdique).

Le but est de géré via processing la température de chaque piéces, gérer le jours nuits avec un abonnement tempo (affichage des compteurs, conso instantané..) et +++

C'est cool... ;D (ça reste entre nous)

Projet intéressant.

Tu vas commander quoi comme types de vannes ? et de quelle manière ?

Avec Processing tu comptes faire une interface graphique ?

ça fait beaucoup de questions... ;D

j'ai déja fait l'interface graphique pour la premiére partie, si je savais comment déposer une video je montrerai bien

Tu la mets sur Youtube et ensuite tu l'insères avec le 5ème bouton depuis la gauche lorsque tu écris ton message (au dessus du H sur fond jaune)

Bonsoir FP24V,

Je vais également démarrer un projet de thermostat / pièce (via Arduino Mega 2560 et DS1820) .

Pour être autonome en cas de pb de PC, j'intègre à l'Arduino les plages des températures programmées en fonction des jours de la semaine. Je cherche des idées d'algorithme, pas encore super claire dans ma tête.

Aurais-tu des infos à partager ?

Merci.
As-tu travaillé

désolé de donner seulement maintenant signe de vie.

alors voici la vidéo, merci pour l'astuce.

et kaffi, j'ai pas compris ce que tu voulais??

Bonsoir FP24V,

En fait, je suis en train d'écrire le programme de mon thermostat. J'aimerais avoir un max de souplesse. Chaque jour de la semaine doit pouvoir être programmé comme on l'entend (plage, températures basses et hautes...).
Je cherche comment organiser mon programme. Si tu voulais partager ton algorithme ou ton code, cela me donnerait des idées.

pas de soucis, mais mon code ne gére absolument pas le temps, mon systéme de chauffage ne me le permet pas.

Maintenant je vai voir si une idée me viens pour la gestion du temps.
tu veux piloter avec le therminal de l'arduino ou processing.

tu veux piloter avec le therminal de l'arduino ou processing.

Que veux-tu dire ?

Mon but : la carte Arduino lis la température de la pièce via un DS1820 et active ou pas un relais de chauffage. Le tout sur base de plages horaires programmées dans l'Arduino. A terme, raccordement au PC pour programmer les plages et récupérer les courbes de températures.

je m'explique plus.

quand tu va vouloir piloter ton thermostat, tu veux le aire avec le terminal de l'arduino ou bien avec une interface graphique comme processing?,

dans tous les cas il y a un prb que je ne sais pas résoudre, c'est lors d'une reconnexion l'arduino reboot, est perd les réglages volatiles

pour eviter le reboot regarde du coté de DTR et RTS ... utilise pySerial :wink:

@FP24V,
pilotage via un clavier et un afficheur LCD reliés à l'Arduino.
Concernant les réglages, il suffit de les sauvegarder en eeprom pour éviter les soucis.

pour eviter le reboot regarde du coté de DTR et RTS ... utilise pySeria

heu tu peux me guider un peu stp??

regarde cette page :

http://www.arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

merci beaucoup

merci beaucoup

pour kafifi,

l'utilisation un code binaire à transferer dans l'arduino du genre:
J1=1000000110000011100011
qui voudrait dire:
jour1,premier 1 inutile; à 0 heure temp basse; à 1h....

je développe un peu l'idée de base,

sur une interface graphique type processing,
1-tu va avoir jour1 et 24 boutons, éteint, température de ralentit, allumé température de plein gaz, cela va te donner un code binaire en 24 bit.
pour alléger tu le convertit en décimal, vue que chaque code binaire à son propre décimale, chaque combinaison est unique.

2- tu envoies tes décimale dans l'arduino

3- tu lui refait convertir ton décimale en binaire, mais là après moi je suis largué.

le but ce que l'arduino sache que quand il tombe sur un 1 lors de la lecture de la chaine il chauffe à 22° et que quand il est sur un zero il passe à 17°.

donc de tête et avec le peu de connaissance que j'ai je ferai ceci dans l'arduino:

après la réception de la chaîne de 7x24 caractères, tu lui fasse lire bit après bit cette chaine faite de 1 et de 0.

va y avoir du char, du for.
désolé de ne pas être plus précis, je débute, j'ai quelque principe logique, ma bite et mon couteau.