Utiliser un microcontrôleur Micro:bit pour mesurer une température

1. Le montage

schéma Cette fois-ci, on va récupérer une tension.

2. Etude physique

schema électrique

U = (R+Rctn).i et Uctn =Rctn.i d'où Uctn = U. Rctn / (R+Rctn)
Uctn . (R+Rctn) = U . Rctn
Uctn . R + Uctn . Rctn = U . Rctn
Uctn . R = U . Rctn - Uctn . Rctn
Uctn . R = (U - Uctn ). Rctn

La conversion analogique numérique sur 10 bits : $2^{10}$=1024 donne

U N
3.3 1024

Il vient Uctn = 3,3.Nctn /1024
3,3 . Nctn / 1024 . R = (3,3 - 3,3 . Nctn / 1024 . R ). Rctn
soit en divisant par 3,3 et en multipliant par 1024
Nctn. R = (1024 -Nctn . R ). Rctn

\begin{align} \fbox{Rctn =$ \frac {Nctn . R}{1024-Nctn}$} \end{align}

3. Mesures

T(°C) U $_{ctn}$ (V)
0 2,54
10 2,20
20 1,84
30 1,47
40 1,14
50 0,85
60 0,63

4. Simulation dans Python

In [9]:
from math import log as ln


A = 0.0009131577435290704 # coefficients Steinhart-Hart de la thermistance de 47k

B = 0.0002144210475986645 # doc technique ou calcul à partir de 3 mesures

C = 1.0773792283999106e-07
Rserie=47000

def calcule_Temperature(Nmes) :
  Resistance = Nmes*Rserie/(1024-Nmes)
  Temp = ln(Resistance) # sauver le log de la résistance mesurée
  Temp = 1 / (A + (B * Temp) + (C * Temp * Temp * Temp));
  Temp = Temp - 273.15; # Kelvin -> Celsius
  return Temp;


N =int(input("N mesuré ?")) #entre 0 et 1023
T=calcule_Temperature(N)
print('T =' f' {T: .0f}'' °C') #fstring à partir de python 3.7 
N mesuré ?456
T =  30 °C

5. Code Microbit

Ne pas exécuter ce code en dehors d'un micro:bit!!!

In [ ]:
from microbit import *

from math import log as ln

#----- VARIABLES ---------------------------------------------

Rserie = 47000 # valeur Résistance entre A0 et GND

# caractérisation de la thermistance de 47k
A = 0.0009131577435290704 # coefficients Steinhart-Hart de la thermistance de 47k
B = 0.0002144210475986645 # doc technique ou calcul à partir de 3 mesures
C = 1.0773792283999106e-07

#---calcul de la température avec la relation de Steinhart-Hart----
def Thermistor(Nmes) :
  Resistance = Nmes*Rserie/(1024-Nmes)
  Temp = ln(Resistance); # sauver le log de la résistance mesurée
  Temp = 1 / (A + (B * Temp) + (C * Temp * Temp * Temp))
  Temp = Temp - 273.15  # Kelvin -> Celsius
  return Temp



#--------------- BOUCLE PRINCIPALE -----------------------------

while True:
    lecture=pin2.read_analog() # Lecture de la valeur de la CTN
    print(lecture)
    Celsius = Thermistor(lecture) # Conversion de la valeur lue en température
    print(str(round(Celsius)) + '  C')
    display.show("T="+str(round(Celsius))+" C", delay=500, loop=True, wait=False)
    sleep(1000);

6. Le montage linéarisé

Le montage linéarisé

7.La simulation python

In [10]:
from math import log as ln
Rserie=47000
# modélisation de la courbe T=f(Req)= a* Req +b 
a = -0.00309
b =84.8

def calcule_Temperature(Nmes) :
  Resistance = Nmes*Rserie/(1024-Nmes)
  Temp = a*Resistance+b
  return Temp;


N =int(input("N mesuré ?")) #entre 0 et 1023
T=calcule_Temperature(N)
print('T =' f' {T: .0f}'' °C') #fstring à partir de python 3.7 
N mesuré ?279
T =  30 °C

8.Le code Micro:bit

Ne pas exécuter ce code en dehors d'un micro:bit!!!

In [ ]:
from microbit import *



#----- VARIABLES ---------------------------------------------

Rserie = 47000 # valeur Résistance entre A0 et GND

# modélisation de la courbe T=f(Req)= a* Req +b 
a = -0.00309
b =84.8

#---calcul de la température -----------------------------------
def Thermistor(Nmes) :
  Resistance = Nmes*Rserie/(1024-Nmes)
  Temp =a*Resistance+b
  return Temp



#--------------- BOUCLE PRINCIPALE -----------------------------

while True:
    lecture=pin2.read_analog() # Lecture de la valeur de la CTN
    print(lecture)
    Celsius = Thermistor(lecture) # Conversion de la valeur lue en température
    print(str(round(Celsius)) + '  C')
    display.show("T="+str(round(Celsius))+" C", delay=500, loop=True, wait=False)
    sleep(1000);