Raspberry Pi - Module Thermocouple MAX6675

Un capteur de température numérique ordinaire ne survivra pas s'il est plongé dans un four de céramique, placé sur la panne d'un fer à souder ou dans l'échappement d'un moteur en marche. Pour ce genre de tâches, les makers utilisent plutôt un thermocouple, associé à une petite puce de conversion appelée MAX6675. Ce tutoriel explique comment en câbler un à un Raspberry Pi et le lire depuis Python. En détail, nous allons apprendre :

Matériel Requis

1×Raspberry Pi 5
1×MAX6675 Thermocouple Module
1×Plaque d'essai
1×Fils de connexion
1×Recommandé: Shield à bornier à vis pour Raspberry Pi
1×Recommandé: Kit plaque de base prototypage et plaque d'essai pour Raspberry Pi

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

Qu'est-ce Qu'un Thermocouple ?

Un thermocouple est simplement constitué de deux fils de métaux différents, reliés ensemble à une extrémité. Cette jonction, appelée soudure chaude, génère une minuscule tension qui monte et descend avec la température. Comme il ne s'agit que de deux morceaux de fil et de rien d'autre qui puisse fondre ou griller, un thermocouple peut être placé dans des endroits où un capteur normal ne survivrait jamais. La variété la plus courante est la sonde de type K (fils de Chromel et d'Alumel), prévue pour environ -328°F jusqu'à +2300°F.

À Propos du Module Thermocouple MAX6675

La minuscule tension produite par un thermocouple est bien trop faible et bruitée pour qu'un microcontrôleur la lise directement : c'est le rôle du MAX6675. Le module associe la puce MAX6675 à un bornier à vis pour la sonde : une petite carte breakout portant la puce, quelques composants de support et un bornier à 2 broches, ainsi qu'une sonde de type K d'environ 18 pouces (45 cm) qui y est câblée (fil rouge sur la borne "+", fil bleu sur la borne "-"). La sonde elle-même n'est prévue que pour 0-80°C, même si le module peut numériser des mesures sur une plage bien plus large, gardez donc cette limite à l'esprit lorsque vous choisissez où la placer.

Brochage du module thermocouple MAX6675

Caractéristiques principales :

  • Tension de fonctionnement : 3,0V à 5,5V
  • Plage mesurable : 0°C à 1024°C (la sonde fournie n'est prévue que jusqu'à 80°C)
  • Précision : ±3°C
  • Résolution : environ 0,25°C

Le module expose 5 broches :

  • Broche VCC : entrée d'alimentation, 3,0V à 5,5V.
  • Broche GND : masse.
  • Broche SCK : horloge série, pilotée par le Raspberry Pi.
  • Broche CS : sélection de puce (chip select), mise à LOW pour demander au module d'envoyer une mesure.
  • Broche SO : sortie de données série, c'est la seule ligne de données de la puce ; il n'y a pas de broche d'entrée de données puisque le MAX6675 n'a rien à configurer.

Schéma de Câblage

Schéma de câblage Raspberry Pi module thermocouple MAX6675

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Pour simplifier et organiser votre montage de câblage, nous recommandons l'utilisation d'un shield à bornier à vis pour Raspberry Pi. Ce shield assure des connexions plus sûres et mieux gérées, comme illustré ci-dessous :

Shield à bornier à vis pour Raspberry Pi
Broche MAX6675 Broche Raspberry Pi
VCC 3.3V (Broche 1)
GND GND (Broche 6)
SCK GPIO25 (Broche 22)
CS GPIO8 (Broche 24)
SO GPIO7 (Broche 26)

※ Note:

Câblez VCC sur la broche 3,3V du Raspberry Pi, et non sur la broche 5V. Les GPIO du Raspberry Pi ne tolèrent pas le 5V, et le MAX6675 fonctionne très bien en 3,3V, il n'y a donc aucune raison de prendre ce risque.

Code Raspberry Pi

# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-max6675-thermocouple-module import RPi.GPIO as GPIO import time # GPIO pins wired to the MAX6675 module SCK_PIN = 25 # Serial clock, Raspberry Pi drives this CS_PIN = 8 # Chip select, active LOW to start a reading SO_PIN = 7 # Serial data out from the module (there is no MOSI, the chip is read-only) # Setup GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(SCK_PIN, GPIO.OUT) GPIO.setup(CS_PIN, GPIO.OUT) GPIO.setup(SO_PIN, GPIO.IN) # Keep the module idle until we are ready to read from it GPIO.output(CS_PIN, GPIO.HIGH) GPIO.output(SCK_PIN, GPIO.LOW) def read_celsius(): # Pull CS LOW to tell the MAX6675 to start a conversion/output cycle GPIO.output(CS_PIN, GPIO.LOW) raw_value = 0 for i in range(16): # The MAX6675 shifts out one bit of the 16-bit word on every clock pulse, MSB first GPIO.output(SCK_PIN, GPIO.HIGH) raw_value <<= 1 if GPIO.input(SO_PIN): raw_value |= 1 GPIO.output(SCK_PIN, GPIO.LOW) # Release the module GPIO.output(CS_PIN, GPIO.HIGH) # Bit D2 is the fault flag, it is set to 1 when no thermocouple is connected if raw_value & 0x4: return None # Bits D14:D3 hold the 12-bit temperature reading, each step is 0.25°C return (raw_value >> 3) * 0.25 try: while True: celsius = read_celsius() if celsius is None: print("No thermocouple attached, check the probe wiring") else: fahrenheit = celsius * 9 / 5 + 32 print(f"Temperature: {celsius:.2f}°C ~ {fahrenheit:.2f}°F") time.sleep(1) except KeyboardInterrupt: print("\nExiting...") finally: GPIO.cleanup()

Étapes Rapides

  • Assurez-vous que Raspbian ou tout autre système d'exploitation compatible avec le Raspberry Pi est installé sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à Internet si vous devez installer des bibliothèques.
  • Si c'est la première fois que vous utilisez le Raspberry Pi, consultez Installation du logiciel - Raspberry Pi.
  • Connectez votre PC au Raspberry Pi via SSH à l'aide du client SSH intégré sous Linux et macOS ou de PuTTY sous Windows. Consultez comment connecter votre PC au Raspberry Pi via SSH.
  • Assurez-vous que la bibliothèque RPi.GPIO est installée. Sinon, installez-la à l'aide de la commande suivante :
sudo apt-get update sudo apt-get install python3-rpi.gpio

Il n'y a pas de bibliothèque de pilote séparée à installer pour le MAX6675 lui-même, car l'interface de la puce est assez simple pour être pilotée directement depuis RPi.GPIO, sans overlay SPI ni paquet tiers.

  • Créez un fichier de script Python max6675_thermocouple.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-max6675-thermocouple-module import RPi.GPIO as GPIO import time # GPIO pins wired to the MAX6675 module SCK_PIN = 25 # Serial clock, Raspberry Pi drives this CS_PIN = 8 # Chip select, active LOW to start a reading SO_PIN = 7 # Serial data out from the module (there is no MOSI, the chip is read-only) # Setup GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(SCK_PIN, GPIO.OUT) GPIO.setup(CS_PIN, GPIO.OUT) GPIO.setup(SO_PIN, GPIO.IN) # Keep the module idle until we are ready to read from it GPIO.output(CS_PIN, GPIO.HIGH) GPIO.output(SCK_PIN, GPIO.LOW) def read_celsius(): # Pull CS LOW to tell the MAX6675 to start a conversion/output cycle GPIO.output(CS_PIN, GPIO.LOW) raw_value = 0 for i in range(16): # The MAX6675 shifts out one bit of the 16-bit word on every clock pulse, MSB first GPIO.output(SCK_PIN, GPIO.HIGH) raw_value <<= 1 if GPIO.input(SO_PIN): raw_value |= 1 GPIO.output(SCK_PIN, GPIO.LOW) # Release the module GPIO.output(CS_PIN, GPIO.HIGH) # Bit D2 is the fault flag, it is set to 1 when no thermocouple is connected if raw_value & 0x4: return None # Bits D14:D3 hold the 12-bit temperature reading, each step is 0.25°C return (raw_value >> 3) * 0.25 try: while True: celsius = read_celsius() if celsius is None: print("No thermocouple attached, check the probe wiring") else: fahrenheit = celsius * 9 / 5 + 32 print(f"Temperature: {celsius:.2f}°C ~ {fahrenheit:.2f}°F") time.sleep(1) except KeyboardInterrupt: print("\nExiting...") finally: GPIO.cleanup()
  • Enregistrez le fichier et exécutez le script Python en lançant la commande suivante dans le terminal :
python3 max6675_thermocouple.py
  • Laissez la pointe de la sonde à l'air libre pendant quelques secondes, puis plongez-la dans une tasse d'eau chaude.
  • Regardez les mesures augmenter dans le terminal.
PuTTY - Raspberry Pi
Temperature: 23.75°C ~ 74.75°F Temperature: 24.00°C ~ 75.20°F Temperature: 24.00°C ~ 75.20°F Temperature: 31.50°C ~ 88.70°F Temperature: 45.25°C ~ 113.45°F Temperature: 58.00°C ~ 136.40°F Temperature: 66.75°C ~ 152.15°F Temperature: 69.50°C ~ 157.10°F Temperature: 69.75°C ~ 157.55°F
  • Débranchez la sonde du bornier et exécutez à nouveau le script : vous devriez voir le message d'erreur au lieu d'une mesure :
PuTTY - Raspberry Pi
No thermocouple attached, check the probe wiring No thermocouple attached, check the probe wiring No thermocouple attached, check the probe wiring

Le script s'exécute dans une boucle infinie jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.

Explication du Code

Le MAX6675 n'a pas de bibliothèque à appeler ici, car toute son interface n'est qu'un registre à décalage cadencé par une horloge ; le script communique donc directement avec lui via les GPIO :

  • SCK_PIN, CS_PIN et SO_PIN sont configurées avec GPIO.setup(), les deux premières en sorties puisque le Raspberry Pi les pilote, et SO_PIN en entrée puisque c'est la seule broche par laquelle le module répond.
  • read_celsius() met CS_PIN à LOW pour réveiller le module, puis fait basculer SCK_PIN 16 fois. À chaque impulsion, elle lit SO_PIN et décale ce bit dans raw_value, bit de poids fort en premier, ce qui correspond à la façon dont le MAX6675 transmet son mot de 16 bits.
  • Une fois les 16 bits reçus, CS_PIN repasse à HIGH pour libérer le module.
  • Le bit D2 de ce mot (vérifié avec raw_value & 0x4) est un indicateur d'erreur : s'il est à 1, la sonde n'est pas connectée et la fonction renvoie None au lieu d'une mesure erronée.
  • Sinon, les bits D14 à D3 contiennent la valeur réelle sur 12 bits ; décaler raw_value de 3 vers la droite et multiplier par 0,25 la convertit en degrés Celsius, qui sont ensuite également convertis en Fahrenheit pour l'affichage.

Vidéo

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !