Spark-Core-TMP36

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


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.

Mesurer la température

Jusqu'ici nous avons appris comment envoyer des commandes personnalisée à note Core et comment contrôler la matériel.

Mais comment lire des données sur notre Core?

Dans cet exemple, nous allons brancher un senseur de température TMP36sur le Core et lire des valeurs via Internet (avec un navigateur Internet).

Contrairement à l'envoi de commande, la valeur sera lisible en utilisant une simple requête WEB (de type GET).

Introduction au TMP36

Un senseur de température Analogique est vraiment facile à expliquer, c'est une puce qui vous informe sur la température ambiante actuelle!

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

Ces senseur utilisent la technologie des états solides (wikipédia) pour déterminer la température. Donc, il n'utilise pas de mercure (comme les vieux thermomètres), bilames (comme certains thermomètres ou thermomètre pour four), ni de thermistance (résistance qui varie avec la température). A la place, il utilise la caractéristique qui dit que "la tension aux bornes d'une diode augmente dans des proportions connues lorsque la température augmente". Techniquement, il s'agit de la chute de tnsion entre la base et l'émetteur - le Vbe - d'un transistor.

En amplifiant cette tension avec grande précision, il est facile de générer un signal analogique qui est directement proportionnel à la température. Il y a bien eu quelques améliorations sur la technique utilisée mais c'est essentiellement la technique utilisée pour mesurer la température.

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

Parce qu'ils ne contiennent pas de "parties mécaniques", ces senseurs sont précis, ne s'usent pas, n'ont pas besoin d'être calibrés, fonctionne dans de nombreuses conditions environnementales, et restent cohérent entre la "partie senseur" et l'interface de lecture.

Le meilleur reste pour la fin, ils sont abordables et très faciles à utiliser.

Quelques informations

Ces données concernent le senseur de température disponible sur le WebShop de MCHobby, le senseur analogique TMP36 (-40 to 150C).

Il est très semblable au LM35/TMP35 (sortie en degrés Celsius) et LM34/TMP34 (sortie en degrés Farenheit). La raison pour laquelle nous utilisons des TMP36 au lieu des 35 ou 34, c'est parce que les TMP36 dispose d'une très large plage de mesure et qu'il ne nécessite pas d'alimentation négative pour lire les températures inférieures à 0.

Sinon, les fonctionnalités reste principalement les mêmes.

  • Taille: boitier TO-92 à 3 broches (similaire à un transistor)
  • Prix: ~2.50 eur disponible chez MCHobby
  • Gamme de température: -40°C a 150°C / -40°F a 302°F
  • Tension de sortie: 0.1V (-40°C) à 2.0V (150°C) mais la précision diminue après 125°C
  • Tension d'alimentation: 2.7V a 5.5V
  • Courant de charge: 0.05 mA
  • Fiche technique

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

Tester le senseur

Tester le senseur est vraiment simple mais vous aurez besoin d'un bloc de piles (ou d'une alimentation).

Connecter une alimentation de 2.7 à 5.5V (2-4 piles AA fonctionnent bien) de façon à ce que la masse (GND) soit connecté sur la broche 3 (pin 3, celle de droite), et l'alimentation sur la broche 1 (pin 1, celle de gauche)

Raccordez ensuite un multimètre (en position mesure de tension continue) entre la masse (GND) et la broche 2 restée libre (pin 2, au milieu).

Si vous avez un TMP36 et que la température de la pièce avoisine 25°C, la tension lue devrait être environ 0.75 volts. Notez que si vous utilisez un LM35, la tension devrait être de 0.25V

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

Le senseur indique que la température est de 26.3°C (ou 79.3°F)

Vous pouvez modifier la tension de sortie en pressant la partir en plastique du senseur entre vos doigts, vous allez constater que la tension monte en même temps que la température.

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

Avec mes doigts sur le senseur, pour le chauffer un peu, la température lue est maintenant de 29.7°C (85.5°F)

Vous pouvez aussi toucher le senseur avec un cube de glace, de préférence sur la partie en plastique pour ne pas mettre d'eau dans le circuit électrique. Vous allez constater que la tension diminue en même temps que la température chute.

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

J'ai pressé un cube de glace contre le senseur pour faire descendre la température jusqu'à 18.6°C (65.5°F)

Montage

Montage typique

Spark.IO-Core-TMP36-00.jpg
Crédit: Particle.IO www.particle.io

Le TMP36 est un senseur de température très facile à trouver. Il s'agit d'un périphérique analogique (la tension en sortie du senseur dépend de la température). Ce senseur est également inclus dans le Spark Core Maker Kit!

Vous pouvez télécharger la fiche technique ici.

Montage avec Filtrage

Spark.IO-Core-TMP36-01a.jpg
Crédit: Particle.IO www.particle.io

Si vous prêtez attention au plan de montage, vous noterez que le senseur est alimenté à l'aide de la broche 3.3V* à la place de la sortie standard 3.3V. C'est parce que la sortie 3.3V* offre une tension filtrée (via un filtre LC), idéal pour les application analogique comme celle-ci.

Si les mesures que vous obtenez sont inconsistantes (ou paraissent parasitées), ajoutez une capacité céramique de 0.01µF (10nF) entre l'entrée analogique (A7 dans ce cas) et la masse/GND.

Le senseur devrait idéalement se trouver à une certaine distance du Core afin de ne pas être affecté par les dissipations de chaleur du Core.

Le code

Voici le code proposé par Spark que nous avons traduit pour faciliter la compréhension.

Notez que ce montage utilise le deuxième schéma de raccordement (lecture sur la broche analogique A7 et filtrage).

// -----------------
// Lecture de la température
// -----------------

// Créer une variable qui pour stocker la valeur
// de la température
double temperature = 0.0;

void setup()
{
  // Enregistrer la variable sur Spark Cloud
  Spark.variable("temperature", &temperature, DOUBLE);

  // Active la broche A0 comme entrée (broche
  // sur laquelle le senseur de température est connecté)
  pinMode(A0, INPUT);
}

void loop()
{
  int reading = 0;
  double voltage = 0.0;

  // Lire continuellement la valeur du senseur. De sorte que
  // lorsque nous faisons un appel sur l'API pour lire la valeur
  // nous obtenons la dernière valeur disponible.
  reading = analogRead(A0);

  // La lecture analogique retourne une valeur entre 0 et 4095
  // pour une tension entre 0 et 3.3V.
  // Calculer la tension correspondante 
  voltage = (reading * 3.3) / 4095;

  // Calculer la valeur de la température (formule pour un TMP36)
  // et stocker la valeur dans notre variable statique 'temperature'
  temperature = (voltage - 0.5) * 100;
}

Faire un appel API

L'appel d'API ressemble à ceci

GET /v1/devices/{DEVICE_ID}/temperature

Appel d'API avec CURL

Voici un exemple de requête Curl, Core_ID est 0123456789abcdef et un Access Token 123412341234.

Notre tuto sur la LED internet explique comment identifier votre CORE_ID et votre ACCESS TOKEN.

curl -G https://api.spark.io/v1/devices/0123456789abcdef/temperature -d access_token=123412341234

Le -G de la commande curl indique que nous voulons utiliser une requête de type GET.

Ce qui produit un résultat comparable à celui-ci:

{
  "cmd": "VarReturn",
  "name": "temperature",
  "result": 23.413919413919405,
  "coreInfo": {
    "last_app": "",
    "last_heard": "2014-12-08T11:55:38.292Z",
    "connected": true,
    "deviceID": "0123456789abcdef"
  }
}

Appel d'API avec navigateur

Cette fois-ci, il sera facile d'utiliser votre navigateur favoris pour faire un appel d'API et obtenir le contenu d'une variable.

Dans le cas présent, il s'agit d'une requête de type GET, ce que fait exactement votre navigateur internet lorsque vous visitez un site internet.

Ouvrez donc votre navigateur favori et saisissez:

https://api.spark.io/v1/devices/54fyyyyyyyyyyyyyyyyyyy67/temperature?access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8

Cet exemple ci utilise le Spark Core de MCHobby... raison pour laquelle le CORE ID et l'ACCESS TOKEN sont différents

Les petits curieux : Découvrir l'API de votre Core

Soyons un peu plus curieux et désobéissons! En poursuivant nos investigations, nous avons découvert comment énumérer l'interface disponible sur un Core.

Pour la petite histoire, avant d'opter pour l'utilisation d'un montage avec filtrage (cfr début de ce tutoriel), j'ai essayé de comprendre pourquoi mon Core prétendait qu'il faisait -20°C dans mon salon!

J'ai donc modifié le programme pour publier toutes les variables du programme sur l'API Spark Cloud et c'est là qu'on apprend des choses intéressantes.

Le code

Le code ci-dessous déclare toutes les variables utilisées par le programme... variables que je publie sur l'API Spark Cloud.

// -----------------
// Lecture de la température
//    version des petits curieux.
// -----------------

// Créer une variable qui pour stocker la valeur
// de la température
double temperature = 0.0;
double voltage = 0.0;
int reading = 0;

void setup()
{
  // Enregistrer la variable sur Spark Cloud
  Spark.variable("temperature", &temperature, DOUBLE);
  Spark.variable("voltage", &voltage, DOUBLE );
  Spark.variable("reading", &reading, INT );
  // Active la broche A7 comme entrée (broche
  // sur laquelle le senseur de température est connecté)
  pinMode(A0, INPUT);
}

void loop()
{
  reading = 0;
  voltage = 0.0;

  // Lire continuellement la valeur du senseur. De sorte que
  // lorsque nous faison un appel sur l'API pour lire la valeur
  // nous obtenons la dernière valeur disponible.
  reading = analogRead(A0);

  // La lecture analogique retourne une valeur entre 0 et 4095
  // pour une tension entre 0 et 3.3V.
  // Calculer la tension correspondante 
  voltage = (reading * 3.3) / 4095;

  // Calculer la valeur de la température (formule pour un TMP36)
  // et stocker la valeur dans notre variable statique 'temperature'
  temperature = (voltage - 0.5) * 100;
}

Lecture des valeurs

Pour lire les différentes valeurs, nous pouvons utiliser les trois requêtes CURL suivantes:

curl -G https://api.spark.io/v1/devices/54yyyyyyyyyyyyyyyyyyy67/temperature -d access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8

Ce qui offre le résultat suivant:

 {
  "cmd": "VarReturn",
  "name": "temperature",
  "result": 23.413919413919405,
  "coreInfo": {
    "last_app": "",
    "last_heard": "2014-12-08T11:55:38.292Z",
    "connected": true,
    "deviceID": "54yyyyyyyyyyyyyyyyyyy67"
  }
}

Il est également possible de lire les autres variables avec les requêtes CURL suivantes:

curl -G https://api.spark.io/v1/devices/54yyyyyyyyyyyyyyyyyyy67/voltage -d access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8
curl -G https://api.spark.io/v1/devices/54yyyyyyyyyyyyyyyyyyy67/reading -d access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8

Désobéissons: énumérer l'API

Vous vous doutez certainement que votre programme Spark publie les éléments de votre interface sur Spark Cloud.

C'est en faisant preuve de curiosité que j'ai remarqué qu'il était possible de consulter l'interface disponible en faisant une requête CURL sur le Core (sans préciser l'API).

curl -G https://api.spark.io/v1/devices/54yyyyyyyyyyyyyyyyyyy67 -d access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8

Ce qui produit un résultat contenant une énumération de l'interface disponible sur votre Core.

{
  "id": "54yyyyyyyyyyyyyyyyyyy67",
  "name": "mch-demo",
  "connected": true,
  "variables": {
    "temperature": "double",
    "voltage": "double",
    "reading": "int32"
  },
  "functions": [],
  "cc3000_patch_version": "1.29"

Comme vous pouvez le contaster, nous obtenons beaucoup d'informations utiles:

  • id: Identification de votre Core. Superflux à la base mais peut grandement faciliter l'écriture de votre code.
  • name: Le nom que vous avez donné à votre Core. En utilisant une nomenclature adéquate, vous pourriez identifier
  • connected: permet de savoir si votre Core est actuellement connecté sur Spark Cloud.
  • variables: contient les entrées (et type) correspondant aux variables d'API déclarées dans notre programme avec Spark.variable()
  • functions: contient les entrées correspondant aux fonctions d'API déclarées dans votre programme avec Spark.function()

Source: Particle Core Examples créé par Particle.IO.

Traduction (et augmentation de contenu) réalisée par Meurisse D pour MCHobby.be - Translated (and enhanced) by Meurisse D. for MCHobby.be

Traduit avec l'autorisation de Particle.IO - Translated with the permission from Particle.IO - Particle.IO

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.

Source: docs.spark.io/examples/#measuring-the-temperature