MicroPython-Hack-TMP36

De MCHobby - Wiki
Révision datée du 20 février 2016 à 19:11 par Admin (discussion | contributions) (Contenu remplacé par « {{MicroPython-Hack-Prepare-NAV}} {{MicroPython-Hack-TMP36-core}} {{MicroPython-Hack-MCH-TRAILER}} »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Ce que nous faisons

Quel sera le prochain phénomène que nous allons mesurer avec notre PyBoard ?

La température. Pour y arriver, nous allons utiliser un circuit intégré plutôt compliqué caché sous un conditionnement identique au transistor P2N2222AG.

Il a trois broches et il est facile à utiliser.

  • la masse,
  • le signal,
  • +5 volts

TMP36-pinout.jpg
Crédit: AdaFruit Industries www.adafruit.com

Le senseur produit 10 millivolts par degré centigrade sur la broche signal (Il y a une compensation/offset de 500mV pour permettre la mesure de températures inférieures à 0°C).

Par ex : 25° C = 750 mV, 0° C = 500mV.

Pour convertir la valeur digitale en degrés, nous allons utiliser quelque-unes des capacités mathématiques de notre PyBoard.

Ensuite, pour voir la température nous allons afficher le résultat à l'aide de la fonction print(), vous aurez donc besoin d'une connexion terminal ou REPL comme appris dans le tutoriel "L'invite REPL".

Voir l'invite REPL

Une petite note complémentaire, ce montage affiche l'information de température via connexion série disponible sur le port USB de la PyBoard.

Il sera nécessaire de maîtriser L'invite REPL pour voir le résultat de vos mesures de températures.

MicroPython-Hack-REPL-Python-exemple.jpg

Comment mesurer la température

Comment calculer la température Il faut donc convertir la tension analogique en degré. Comme le TMP36 permet de mesurer des température négatives, le 0 degré Celsius est placé à une offset de 500 milliVolts. Ainsi, toute mesure inférieur à 500 mv correspondra à une température négative.

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

La formule est la suivante pour le TMP36:

Temp en °C = ( Tension_de_sortie_en_milliVolts - 500) / 10

Donc, si la tension de sortie est de 1 Volts, la température correspondante est de
(1000 - 500)/10

Soit 50 degrés Celcius.

si vous utilisez un LM35 ou similaire, la température se calcule comme suit (utiliser la ligne 'a' sur le graphique):

Temp en °C = ( Tension_de_sortie_en_millivolts) / 10

Le montage

Le matériel nécessaire

PYBX-FILS.png
PYBX-TMP36.png

TMP36 - senseur de température
x1

ARDX-10nF.png

Capacité 10nF (ou 0.01µF)
x1

 

Tous ces éléments sont disponibles sur shop.mchobby.be.

Schéma

MicroPython-Hack-TMP36-schema.png

Capa de 10nF

Sur le schéma ci-dessus, vous pouvez constater que nous utilisons une capacité de 10 nF (0.01µF).

Cette dernière permet de déparasiter le signal produit par le senseur TMP36.

En effet, le signal peut contenir des parasites (donc des micro-surtension) qui 'altère' forcement la tension lue par le convertisseur analogique/digital du PyBoard.

Ces parasites proviennent souvent de la source d'alimentation. Par exemple, les port USB des ordinateurs sont connu pour être une grande source de parasite (de "bruit") sur l'alimentation. Si vous avez branché votre PyBoard sur le port USB de votre ordinateur alors il est fortement recommandé d'utiliser cette capacité.

Montage

MicroPython-Hack-TMP36-montage.jpg
Made with - réalisé avec - Fritzing fritzing.org

Le code

Le programme suivant lit la valeur retournée par le convertisseur analogique/digital (entre 0 et 4096).

Cette valeur est transformée en tension.

Puis la tension convertie en température.

tmp36 = pyb.ADC( 'X19' )
lecture = tmp36.read()
tension = (lecture * 3.3) / 4095
temperature = (tension - 0.5) * 100
print( 'température = %s °C' % temperature )

Cela ne fonctionne pas?

Voici 3 choses à essayer.

Rien ne semble se passer?

Ce programme ne présente pas de signe extérieur de son fonctionnement. Pour voir les résultats, vous devez utiliser le mode REPL de votre PyBoard (voir instructions ci-dessus)

L'affichage est incohérent

Les données mesurées varient fortement... et ne sont pas stable!

C'est un cas typique de parasitage, il faut alors placer une capacité de 10nF.

Utilisez aussi des fils aussi court que possible et torsadé dès que cela est possible.

La température ne change pas

Essayez de pincer le senseur entre vos doigts pour le chauffer un peu ou essayez de le refroidir avec un sac à glaçons.

Faire encore mieux

Afficher la tension

L'affichage de la température ne concerne bien entendu que le senseur de température.

Dans le cadre d'autres projets, vous pourriez être intéressé de connaître la tension sur la broche analogique.

Voici une petite version du programme qui permet d'afficher la tension active sur une broche analogique

# déclare la broche analogique
tmp36 = pyb.ADC( 'X19' )

# Lit la broche analogique adc_pin et retourne la tension actuelle
def get_voltage( adc_obj ):
    valeur = adc_obj.read()
    return (valeur * 3.3) / 4095
    
print( 'Tension sur %s = %s volts' % (tmp36, get_voltage(tmp36) ) )

Dans cette version du programme:

  • Nous créons un objet ADC sur la broche X19 que nous stockons dans la variable tmp36
  • Nous avons déclaré une fonction get_voltage() qui récupère la valeur sur un objet ADC passé en référence.
  • Le tout est affiché avec un instruction print() en utilisant le tuple de valeurs (tmp36, get_voltage(tmp36) . Le premier paramètre est l'objet tmp36 et le deuxième le résultat de la fonction get_voltage().

Note: Le tuple en python est une structure super pratique et très simple à employer. L'un de vos meilleurs amis dans le monde Python.

Voici un exemple de résultat obtenu avec ce code:

Tension sur <ADC on X19 channel=10> = 0.7164102 volts

Afficher la température en degré Fahrenheit

Encore une fois, cela ne requière qu'une simple modification mathématique.

Nous utilisons la formule suivante pour passer de degrés C ---> degrés Fh :

( F = C * 1.8) + 32 )

Ajouter la ligne suivante...

temperatureF= (temperature*1.8) + 32

Notre petit programme est donc légèrement adapté et ressemble maintenant à ceci:

tmp36 = pyb.ADC( 'X19' )
lecture = tmp36.read()
tension = (lecture * 3.3) / 4095
# temperature Celsius
temperature = (tension - 0.5) * 100
# Celsius vers Farhenheit
temperatureF= (temperature*1.8) + 32
print( 'température = %s °F' % temperatureF )

Plus, plus et encore plus

Savez-vous qu'il est possible de relever la tension directement sur à l'aide d'un multimètre?

Nous avons un autre tutoriel sur le TMP36 (pour Arduino) dans lequel nous avons décris le test d'un TMP36 à l'aide d'un multimètre... cela se passe ici.

TMP36-test.jpg
Crédit: AdaFruit Industries www.adafruit.com

Internet



Composé par Meurisse D. pour MCHobby.be - Translated by Meurisse D. for MCHobby.be

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.