Note
Bonjour et bienvenue dans la communauté SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez plus profondément dans l’univers du Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi nous rejoindre ?
Assistance d’experts : Résolvez les problèmes après-vente et surmontez les défis techniques avec l’aide de notre communauté et de notre équipe.
Apprenez & Partagez : Échangez des conseils et des tutoriels pour améliorer vos compétences.
Aperçus exclusifs : Profitez d’un accès anticipé aux annonces de nouveaux produits et à des avant-premières.
Réductions spéciales : Bénéficiez de remises exclusives sur nos derniers produits.
Promotions festives et concours : Participez à des concours et à des promotions spéciales.
👉 Prêt à explorer et à créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !
2.2.2 Thermistance (MCP3008)
Note
Selon la version de votre kit, identifiez si vous disposez du ADC0834 ou du MCP3008 et suivez la section correspondante.
Introduction
Tout comme la photorésistance peut détecter la lumière, la thermistance est un dispositif électronique sensible à la température qui peut être utilisée pour réaliser des fonctions de contrôle thermique, telles que la création d’une alarme de surchauffe.
Composants requis
Dans ce projet, nous avons besoin des composants suivants :
Schéma de câblage
Nom sur la T-Board |
physique |
WiringPi |
BCM |
|---|---|---|---|
SPICE0 |
pin24 |
10 |
8 |
SPIMOSI |
pin19 |
12 |
10 |
SPIMISO |
pin21 |
13 |
9 |
SPISCLK |
pin23 |
14 |
11 |
Procédures expérimentales
Étape 1 : Construire le circuit.
Étape 2 : Accéder au dossier contenant le code.
cd ~/davinci-kit-for-raspberry-pi/nodejs/
Étape 3 : Exécuter le code.
sudo node thermistor-2.js
Lorsque le code est exécuté, la thermistance détecte la température ambiante qui sera affichée à l’écran après le calcul effectué par le programme.
Code
const mcpadc = require('mcp-spi-adc');
// Ouvrir le canal 0 du MCP3008 (CH0), entrée analogique depuis le pont diviseur avec la thermistance
const adc = mcpadc.openMcp3008(0, { speedHz: 1350000 }, (err) => {
if (err) {
console.error('Impossible d’ouvrir le canal MCP3008 :', err);
process.exit(1);
}
console.log('Canal thermistance du MCP3008 ouvert.');
setInterval(() => {
adc.read((err, reading) => {
if (err) {
console.error('Erreur de lecture ADC :', err);
return;
}
const adcValue = reading.value; // Flottant : 0.0–1.0
const raw = Math.round(adcValue * 1023); // Valeur entière sur 10 bits
const Vr = 3.3 * raw / 1023; // Conversion en tension (hypothèse : Vref = 3,3V)
const R0 = 10000; // Résistance fixe : 10kΩ
const B = 3950; // Constante B
const Rt = R0 * Vr / (3.3 - Vr); // Résistance de la thermistance
const tempK = 1 / ((Math.log(Rt / R0) / B) + (1 / (273.15 + 25))); // Température en Kelvin
const tempC = tempK - 273.15; // Celsius
const tempF = tempC * 1.8 + 32; // Fahrenheit
console.log(`Celsius : ${tempC.toFixed(2)} °C | Fahrenheit : ${tempF.toFixed(2)} °F`);
});
}, 1000);
});
Explication du code
setInterval(() => {
adc.read((err, reading) => {
...
});
}, 1000);
Met en place une boucle qui lit la valeur sur le canal 0 du MCP3008 toutes les 1000 millisecondes (1 seconde). La fonction read renvoie une valeur analogique comprise entre 0.0 et 1.0.
const raw = Math.round(reading.value * 1023);
Convertit la valeur normalisée en virgule flottante en une valeur entière sur 10 bits (plage 0–1023).
const Vr = 3.3 * raw / 1023;
Calcule la tension aux bornes de la thermistance (Vr) à partir de la lecture ADC. Suppose que la tension de référence du MCP3008 est de 3,3 V.
const Rt = R0 * Vr / (3.3 - Vr);
Utilise la formule du pont diviseur pour calculer la résistance de la thermistance Rt, où R0 est une résistance fixe (10 kΩ) en série.
const tempK = 1 / ((Math.log(Rt / R0) / B) + (1 / (273.15 + 25)));
Applique l’équation du paramètre B (forme simplifiée de l’équation de Steinhart-Hart) pour estimer la température en Kelvin.
const tempC = tempK - 273.15;
const tempF = tempC * 1.8 + 32;
Convertit la température de Kelvin en Celsius puis en Fahrenheit.
console.log(`Celsius : ${tempC.toFixed(2)} °C | Fahrenheit : ${tempF.toFixed(2)} °F`);
Affiche à l’écran les valeurs en degrés Celsius et Fahrenheit avec deux décimales de précision.