Outils pour utilisateurs

Outils du site


raspberry_pi:tmp36_temperature

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

raspberry_pi:tmp36_temperature [11/01/2015 01:54] (Version actuelle)
sky99 créée
Ligne 1: Ligne 1:
 +====== Mesure de la température via une sonde TMP36 connectée au MCP3008 ======
 +Nous allons utiliser une sonde analogique de température TMP36 pour mesurer la température du milieu ambiant autour du capteur. Ceux ci sont capables de donner la température avec une précision de plus ou moins 1°C à 25°C, et plus ou moins 2°C entre -40°C et 125°C.
  
 +Ce capteur peut être alimenté entre 2.7 et 5.5V, et consomme moins de 50µA en fonctionnement,​ et 0.5µA en veille((Spécifications officielles constructeur (datasheet) - PDF, englais : [[http://​www.analog.com/​static/​imported-files/​data_sheets/​TMP35_36_37.pdf]])).
 +
 +Nous utiliserons la version au format TO-92, avec 3 broches.
 +
 +===== Prérequis =====
 +Nous aurons besoin d'un Raspberry Pi (A, A+, B, B+) configuré, ainsi que d'une breadboard, de câbles, d'une puce MCP3008 et d'un TMP36. Il faudra avoir déjà interfacé le Raspberry Pi et le MCP3008 comme nous l'​avons vu dans le [[raspberry_pi:​mcp3008_lecture_analogique|tutoriel sur l'​utilisation d'un MCP3008 pour ajouter des entrées analogiques]].
 +
 +===== Montage =====
 +[[ https://​learn.adafruit.com/​tmp36-temperature-sensor|{{ https://​learn.adafruit.com/​system/​assets/​assets/​000/​000/​471/​medium800/​temperature_tmp36pinout.gif?​400 | photo du TMP36}}]]
 +Si vous tenez la sonde comme sur la photo (pattes vers le bas, coté plat face à vous), la patte de gauche devra être connectée au 3.3V du Raspberry, la patte de droite à la masse, et la patte centrale sur l'une des entrées analogique du MCP3008.
 +
 +===== Code Python =====
 +Le code en python s'​appuie sur le code utilisé pour lire les entrées analogiques du MCP3008 :
 +<file python readTempTMP36.py>​
 +#​!/​usr/​bin/​env python
 +import time
 +import os
 +import RPi.GPIO as GPIO
 +
 +GPIO.setmode(GPIO.BCM)
 +GPIO.setwarnings(False)
 +#fonction lisant les donnees SPI de la puce MCP3008, parmi 8 entrees, de 0 a 7
 +def readadc(adcnum,​ clockpin, mosipin, misopin, cspin):
 +     if ((adcnum > 7) or (adcnum < 0)):
 +     return -1
 +     GPIO.output(cspin,​ True)
 +     GPIO.output(clockpin,​ False) ​ # start clock low
 +     GPIO.output(cspin,​ False) # bring CS low
 +
 +     commandout = adcnum
 +     commandout |= 0x18  # start bit + single-ended bit
 +     commandout <<= 3    # we only need to send 5 bits here
 +     for i in range(5):
 +     if (commandout & 0x80):
 +     GPIO.output(mosipin,​ True)
 +     else:  ​
 +     GPIO.output(mosipin,​ False)
 +     commandout <<= 1
 +     GPIO.output(clockpin,​ True)
 +     GPIO.output(clockpin,​ False)
 +
 +     adcout = 0
 +     # read in one empty bit, one null bit and 10 ADC bits
 +     for i in range(12):
 +     GPIO.output(clockpin,​ True)
 +     GPIO.output(clockpin,​ False)
 +     adcout <<= 1
 +     if (GPIO.input(misopin)):​
 +     adcout |= 0x1
 +
 +     GPIO.output(cspin,​ True)
 + 
 +     adcout /= 2    # first bit is '​null'​ so drop it
 +     return adcout
 +
 +# ces numeros de pins GPIO doivent etre modifies pour correspondre aux broches utilisees.
 +SPICLK = 18
 +SPIMISO = 23
 +SPIMOSI = 24
 +SPICS = 25
 +
 +# definition de l'​interface SPI
 +GPIO.setup(SPIMOSI,​ GPIO.OUT)
 +GPIO.setup(SPIMISO,​ GPIO.IN)
 +GPIO.setup(SPICLK,​ GPIO.OUT)
 +GPIO.setup(SPICS,​ GPIO.OUT)
 +
 +#definition du ADC utilise (broche du MCP3008)
 +adcnum = 0
 +while True:
 +# Lecture de la valeur brute du capteur
 +read_adc0 = readadc(adcnum,​ SPICLK, SPIMOSI, SPIMISO, SPICS)
 +# conversion de la valeur brute lue en milivolts = ADC * ( 3300 / 1024 )
 +millivolts = read_adc0 * ( 3300.0 / 1024.0)
 +bias=0;
 +
 +# 10 mv per degree
 +temp_C = ((millivolts - 100.0) / 10.0) - 40.0+ bias
 +# convert celsius to fahrenheit
 +temp_F = ( temp_C * 9.0 / 5.0 ) + 32
 +
 +print "​valeurs lues : "
 +print "​\tvaleur brute : %s" % read_adc0
 +print "​\ttension : %s millivolts"​ % millivolts
 +print "​\ttemperature : %s C" % temp_C
 +print "​\ttemperature : %s F" % temp_F
 +time.sleep(1)
 +</​file>​
 +
 +===== Conclusion =====
 +Ce capteur simple, économique,​ et facile à utiliser consomme extrêmement peu de courant, et permet facilement d'​obtenir une mesure approximative de la température. Il n'est pas d'une très grande précision, et est sensible à la qualité de l'​alimentation électrique. Il est toutefois parfaitement adapté pour de nombreux montages ou l'on souhaite mesurer une température à plus ou moins 2°C.
 +
 +Pour des mesures plus précises, on se tournera vers un capteur plus complexe, un peu plus cher, mais bien plus stable et avec une meilleure résolution : [[raspberry_pi:​ds18b20_temperature_sonde_numerique|la sonde de température numérique DS18B20]]
 +
 +
 +[[raspberry_pi:​tutoriels|Retour à la liste des tutoriels]]
 +
 +[[raspberry_pi:​|Retour à la l'​accueil de la section]]
raspberry_pi/tmp36_temperature.txt · Dernière modification: 11/01/2015 01:54 par sky99