Problemes valeurs humidité + température prog final

commande moteur via valeur récupérées

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, j'ai un leger soucis concernant mes composants HCZ-J3 (A) et ma ln345, En effet je fait un systeme qui ouvre ou ferme un moteur selon la valeur de température enregistrée… pour chaque petit programe fait a part pour la températre ou l'humidité tout fonctionne mais j'ai décider de réunir mes 3 programmes en 1 (temp / humi et pilotage du moteur) mais quand j'ouvre ma fenetre pour voir les données récupérées j'ai ma valeur de température qui bug completement et mon humidité qui est constante voyez vous une erreur ? merci beaucoup !

(le moteur est un petit servo-moteur ceux fournis dans les starter kit arduino )

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <Servo.h>

Servo myservo;  

int posfermer = 0;    // variable du servo moteur

int posouvert = 110;

int putPin = A3; // humidity

int tempc = 0,tempf=0; // temperature variables

int samples[8]; // variables to make a better precision

int i;


int thermoPin = A5; // là où est branché le LM35

int tempC;  // température en degrés celcius

int tempK;  // conversion en Kelvin

int reading;  // lecture brute de l'entrée analogique (0 à 1024)



float humi = 0;

float prehum = 0;

float humconst = 0;

float truehum = 0;

float pretruehum = 0; 

long pretruehumconst = 0; 

long valb = 0;

void setup()

{

Serial.begin(9600); // start serial communication

myservo.attach(7);  

}


void loop()

{

{

  // mesure

  reading = analogRead(thermoPin);


  // conversion en celcius

  tempC = round(reading/2);


  // conversion en Kelvin

  tempK = tempC + 273;


}

if (tempC > 34)

{

    // in steps of 1 degree

    myservo.write(posouvert);              // ordonne au servo d'atteindre la position "pos"

    delay(15);                       // attendre 15 ms que le servo atteigne la position

}


else

{

    myservo.write(posfermer);              // ordonne au servo d'atteindre la position "pos"

    delay(15);                       // attendre 15 ms que le servo atteigne la position

}


for(i = 0;i<=7;i++)

{ 


valb = analogRead(putPin); // humidity calculation

prehum = (valb/5);

humconst = (0.16/0.0062);

humi = prehum - humconst;

pretruehumconst = 0.00216*tempc;

pretruehum = 1.0546-pretruehumconst;

truehum = humi/pretruehum ;

delay(500);

Serial.print ("Humidity: ");

Serial.print ((long)truehum);

Serial.println ("% ");

Serial.print(tempC); 

Serial.print("   Celsius           "); 

Serial.print(tempK); 

Serial.println("   Kelvin");


tempc = 0;

delay(500); // delay before loop

}

}

Édité par Arius

+0 -0

Hum il y a pas un soucis à la ligne 57 ? tu ouvres une accolade sans raison… Tu n'as pas oublié quelque chose ?

tu mets ta variable tempc à 0 à la fin de ton for alors que tu ne l'utilises jamais. Est ce que tu n'as pas confondu avec tempC ? De manière générale je te conseillerais d'éviter de nommer deux variables avec si peu de différences entre elles.

Édité par Guigz12

+0 -0

Salut,

j'aimerais également savoir pourquoi à la ligne 57 il y a une accolade d'ouverte ?

As tu essayé d'afficher les valeurs de reading et valb, pour voir s'ils ont des valeurs potables avant de passer dans tout ces calculs ?

Tu peux également t'assurer que ton round à la ligne 66 fait ce que tu veux (pas mal de gars sur les forums arduino ont leur round qui ne marche pas comme ils veulent :p ).

Et enfin, sans doute une question conne, est-ce que le Serial.print ((long)truehum); fonctionne correctement avec truehum déclaré en float ? J'ai jamais trop creusé l'affichage de float; mais on n'est pas censé préciser combien de chiffres après la virgule on veux afficher ? Un peu comme dans cet exemple là : Serial.println((float)(2.789),1); // This will print: “2.8”

Édité par Francky

+0 -0
Auteur du sujet

accolade de la ligne 57 revient a l'accolade de la ligne 74 j'ai penser a fermer pour que ce soit bien "parqué" poyur chaque programme et les valeur reading et valb sont des valeurs qui partent dans les 1000 la sonde de température est une résistance variable donc je peut avoir de 20000 as 50 :P

+0 -0

ok pour l'histoire de l'accolade…

Bon je viens de tester ton programme sur une arduino. J'ai pas tes capteurs, mais avec un potentiomètre branché sur les entrées analogiques, j'ai bien les valeurs de température et d'humidité qui varient. Quand tu dis :

j'ai ma valeur de température qui bug completement et mon humidité qui est constante

Tu peux détailler le problème ?

+0 -0
Auteur du sujet

Alors j'ai testé le montage Electronique fonctionne nickel avec ou sans ma sonde d'humidité ; quand je met des "//" devant la zone de programme d'humidité ( ligne 105 à 117) le programme fonctionne sans problème ma valeur de température m'affiche bien 20 degré ce qui est la température ambiante de la pièce et quand je rajoute la partie de l'humidité ma valeur est totalement random et le programme rame

+0 -0

le programme rame :euh:

Tiens au fait, pourquoi il y a cette boucle for à la ligne 100 ?

J'ai trouvé sur le net un programme similaire au tien (station météo) dans lequel la boucle for sert juste à faire une moyenne de temperature pour tempc. Le reste du programme (calcul d'humidité et affichage des valeurs) se passe dans la loop principale.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte