readadc10 sur batterie avec TMP36

guitoon41

New Member
Bonjour à tous, voila tout est à peut prêt dans le titre, J'aimerai connaitre la température via un TMP36.
Je sais qu'il faut convertir la valeur du readadc10 en volte (et déjà là sur le web il y as plusieurs formule différente, donc je ne sais pas laquelle prendre!)

Ensuite d'après le site Adafruit, la formule pour convertir les milivolte en température la formule serait :
Temp in °C = [(Vout in mV) - 500] / 10

Si cette formule est bonne, je ne sais pas comment récupérer la tension ADC puisque la tension de référence peut changer (alimentation batterie, 4.2V).

Merci d'avance.
 

MGU

Senior Member
Bonjour à tous, voila tout est à peut prêt dans le titre, J'aimerai connaitre la température via un TMP36.
Je sais qu'il faut convertir la valeur du readadc10 en volte (et déjà là sur le web il y as plusieurs formule différente, donc je ne sais pas laquelle prendre!)

Ensuite d'après le site Adafruit, la formule pour convertir les milivolte en température la formule serait :
Temp in °C = [(Vout in mV) - 500] / 10

Si cette formule est bonne, je ne sais pas comment récupérer la tension ADC puisque la tension de référence peut changer (alimentation batterie, 4.2V).

Merci d'avance.
Bonjour,

Il faut calibrer l'ADC, avec ce capteur, 2,048 v semble la bonne valeur:
voir ADCconfig et VFRsetup
Ex pour les LM35 et 335:

http://electromag1.wifeo.com/meesure-de-temperature-par-sonde-lm35-et-lm335.php

MM
 

guitoon41

New Member
Cool, c'est exactement se que je cherché. J'avais vu sur le forum "ADCconfig et VFRsetup" mais je comprend bien mieux le principe avec l'exemple sur le site.
Merci.
 

guitoon41

New Member
Oups, pardon, je comprend bien le principe de la référence interne, mais je ne vois pas la formule pour transformer la valeur ADC en milivolte ?

EDIT: Suffi de multiplier par la tension de reference car "ADC 10 bits divise la tension d'alimentation en 1024 paliers"
 
Last edited:

MGU

Senior Member
Oups, pardon, je comprend bien le principe de la référence interne, mais je ne vois pas la formule pour transformer la valeur ADC en milivolte ?

EDIT: Suffi de multiplier par la tension de reference car "ADC 10 bits divise la tension d'alimentation en 1024 paliers"
Bonjour,

readadc10 donne une résolution de 2mV, de 0 à 2,048v.
La valeur en mV est la valeur de l'adc10 multipliée par deux, plus astucieux d'additionner deux mesures consécutives

Il faut maintenant appliquer la formule de transformation tension -> température.
Le picaxe ne connait que des nombres entiers positifs, faut bricoler un peu

MM
 
Last edited:

guitoon41

New Member
Bonjour,

readadc10 donne une résolution de 2mV, de 0 à 2,048v.
La valeur en mV est la valeur de l'adc10 multipliée par deux, plus astucieux d'additionner deux mesures consécutives

Il faut maintenant appliquer la formule de transformation tension -> température.
Le picaxe ne connait que des nombres entiers positifs, faut bricoler un peu

MM
Je pense que c'est pas trop mal :

Code:
fvrsetup FVR2048		; set FVR as 2.048V to prepare for TMP36 Temprature read
adcconfig %011 			; set ADC Vref+ = 2.048, 0V Vref-

symbol TMP36 = C.1
symbol val36 = w1
symbol negat = w2

main:
	
	' Si 1 = valeur negative.
	negat = 0
	
	' Lecture de la valeur ADC.	
	readadc10 TMP36, val36
	
	
	' Si la valeur est plus PETITE  que ""(250 * 2) - 500 / 10"" = ZERO
	' En dessous 0 picaxe retire la valeur à 65536, on fait donc la difference.
	if val36 < 250 then
		let val36 = val36 * 2
		let val36 = val36 - 500
		let val36 = 65535 - val36 + 1 ' + 1 car 65535 max.
		let val36 = val36 / 10
		
		negat = 1
			
	' Valeur positive
	else
		let val36 = val36 * 2
		let val36 = val36 - 500 / 10
		
	end if
	
	
	
	debug
	
	goto main
Plus qu'a envoyer la valeur sur un mini 3x 7segment.
 

MGU

Senior Member
Je pense que c'est pas trop mal :
Plus qu'a envoyer la valeur sur un mini 3x 7segment.
Mouai...As tu fait le calcul ligne à ligne pour voir le résultat?

En fait, la mesure sera probablement instable, et l'erreur de mesure sera multipliée par deux.
En ajoutant deux mesures successives, on moyenne sur deux mesures (c'est déjà ça) et on augmente la résolution.

Deux cas :
La valeur est >= 500, c'est une température positive, on enlève 500 pour avoir la température.
La valeur est < 500, c'est une t° négative
En calculant 500- valeur lue, on a la valeur absolue de cette température, il faut ajouter un "-" devant l'affichage.

Enfin, c'est ce que j'aurais essayé de faire...

Pour l'affichage, il y a des 4 chiffres TM1637, c'est une autre histoire:

http://electromag1.wifeo.com/afficheurs-pilotes-par-tm1637.php

MM
 

guitoon41

New Member
Mouai...As tu fait le calcul ligne à ligne pour voir le résultat?

En fait, la mesure sera probablement instable, et l'erreur de mesure sera multipliée par deux.
En ajoutant deux mesures successives, on moyenne sur deux mesures (c'est déjà ça) et on augmente la résolution.

Deux cas :
La valeur est >= 500, c'est une température positive, on enlève 500 pour avoir la température.
La valeur est < 500, c'est une t° négative
En calculant 500- valeur lue, on a la valeur absolue de cette température, il faut ajouter un "-" devant l'affichage.

Enfin, c'est ce que j'aurais essayé de faire...

Pour l'affichage, il y a des 4 chiffres TM1637, c'est une autre histoire:

http://electromag1.wifeo.com/afficheurs-pilotes-par-tm1637.php

MM
Ca fonctionne bien mais c'est vrai que ta formule est bien moins chiante. Je n'y avais pas pensé d'inverser ""valeurADC - 500"" en ""500 - valeurADC""
Se qui est bien plus simple, du coup j'utilise cette méthode.

Pour se qui est de faire 2 fois d’affilés readadc10 je ne comprend pas pourquoi la valeur changerai en 10ms et donc en faire une moyenne.
 

MGU

Senior Member
Pour se qui est de faire 2 fois d&#8217;affilés readadc10 je ne comprend pas pourquoi la valeur changerai en 10ms et donc en faire une moyenne.
Je ne connais pas ces capteurs, mais pour les LM35 et LM335, la mesure est bruitée (as tu essayé ton capteur?) et donc, deux mesures consécutives ne sont pas forcement identiques, on peut ajouter une pause de qques centaines de ms entre les deux. Ou faire 10 mesures et diviser par 5 pour, a voir...
Mais il est peut être super stable.

MM
 

guitoon41

New Member
Je ne connais pas ces capteurs, mais pour les LM35 et LM335, la mesure est bruitée (as tu essayé ton capteur?) et donc, deux mesures consécutives ne sont pas forcement identiques, on peut ajouter une pause de qques centaines de ms entre les deux. Ou faire 10 mesures et diviser par 5 pour, a voir...
Mais il est peut être super stable.

MM
Oui pour le TMP36, il y a peut être un tolérance de +/- 2° comparé au LM35 +/- 0.5° mais aucun souci de "bruit". la valeur reste fixe entre plusieurs ADC.
Merci pour ton aide.
 

MGU

Senior Member
Oui pour le TMP36, il y a peut être un tolérance de +/- 2° comparé au LM35 +/- 0.5° mais aucun souci de "bruit". la valeur reste fixe entre plusieurs ADC.
Merci pour ton aide.
Tout dépend aussi de la résolution choisie, si tu divises par 10 comme dans la formule pour ne garder que les degrés entiers, tu ne vois pas les variations.

MM
 

BESQUEUT

Senior Member
Tout dépend aussi de la résolution choisie, si tu divises par 10 comme dans la formule pour ne garder que les degrés entiers, tu ne vois pas les variations.

MM
En tout cas pas tant que par chance la température courante n'est pas proche d'un entier...
 
Top