Bemerkung

Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie tiefer in Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten ein.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugriff auf neue Produktankündigungen und exklusive Einblicke.

  • Spezielle Rabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Giveaways: Nehmen Sie an Verlosungen und Feiertagsaktionen teil.

👉 Bereit, mit uns zu forschen und zu kreieren? Klicken Sie auf [hier] und treten Sie noch heute bei!

2.2.2 Thermistor (MCP3008)

Bemerkung

../_images/mcp3008_and_adc0834.jpg

Abhängig von Ihrer Kit-Version identifizieren Sie bitte, ob Sie ADC0834 oder MCP3008 haben, und fahren Sie mit dem entsprechenden Abschnitt fort.

Einführung

Genau wie ein Fotowiderstand Licht erkennen kann, ist ein Thermistor ein temperaturabhängiges elektronisches Bauelement, das für Temperaturregelungsfunktionen wie z. B. einen Hitzewarnmelder verwendet werden kann.

Benötigte Komponenten

In diesem Projekt benötigen wir die folgenden Komponenten:

../_images/list2_2.2.2_thermistor.png

Es ist definitiv bequem, ein komplettes Kit zu kaufen. Hier ist der Link:

Name

ELEMENTE IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können die Komponenten auch einzeln über die folgenden Links kaufen:

KOMPONENTENBESCHREIBUNG

KAUFLINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Widerstand

KAUFEN

Thermistor

KAUFEN

MCP3008

-

Schaltplan

T-Board Name

Physikalisch

WiringPi

BCM

SPICE0

Pin 24

10

8

SPIMOSI

Pin 19

12

10

SPIMISO

Pin 21

13

9

SPISCLK

Pin 23

14

11

../_images/schematic_2.2.2_thermistor_mcp3008.png

Experimentelle Verfahren

Schritt 1: Bauen Sie die Schaltung auf.

../_images/2.2.2_Thermistor_bb.png

Schritt 2: Wechseln Sie in den Code-Ordner.

cd ~/raphael-kit/nodejs/

Schritt 3: Führen Sie den Code aus.

sudo node thermistor-2.js

Sobald der Code ausgeführt wird, erkennt der Thermistor die Umgebungstemperatur, die nach der Berechnung des Programms auf dem Bildschirm ausgegeben wird.

Code

const mcpadc = require('mcp-spi-adc');

// Öffne MCP3008-Kanal 0 (CH0), analoger Eingang vom Thermistor-Spannungsteiler
const adc = mcpadc.openMcp3008(0, { speedHz: 1350000 }, (err) => {
  if (err) {
    console.error('Fehler beim Öffnen des MCP3008-Kanals:', err);
    process.exit(1);
  }

  console.log('MCP3008-Thermistor-Kanal geöffnet.');

  setInterval(() => {
    adc.read((err, reading) => {
      if (err) {
        console.error('ADC-Lesefehler:', err);
        return;
      }

      const adcValue = reading.value; // Float: 0.0–1.0
      const raw = Math.round(adcValue * 1023); // 10-Bit-Integerwert

      const Vr = 3.3 * raw / 1023; // Spannung (bei 3,3 V Referenz)
      const R0 = 10000;            // Festwiderstand: 10kΩ
      const B = 3950;              // B-Konstante
      const Rt = R0 * Vr / (3.3 - Vr); // Thermistorwiderstand

      const tempK = 1 / ((Math.log(Rt / R0) / B) + (1 / (273.15 + 25))); // 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);
});

Code-Erklärung

setInterval(() => {
  adc.read((err, reading) => {
    ...
  });
}, 1000);

Richtet eine Schleife ein, die alle 1000 Millisekunden (1 Sekunde) vom MCP3008-Kanal 0 liest. Die Funktion read gibt einen analogen Wert zwischen 0,0 und 1,0 zurück.

const raw = Math.round(reading.value * 1023);

Wandelt den normalisierten Float-ADC-Wert in einen rohen 10-Bit-Integerwert (Bereich 0–1023) um.

const Vr = 3.3 * raw / 1023;

Berechnet die Spannung am Thermistor (Vr) anhand des ADC-Wertes. Es wird eine Referenzspannung des MCP3008 von 3,3 V angenommen.

const Rt = R0 * Vr / (3.3 - Vr);

Verwendet die Spannungsteilerformel, um den Thermistorwiderstand Rt zu berechnen, wobei R0 ein 10kΩ-Festwiderstand in Reihe ist.

const tempK = 1 / ((Math.log(Rt / R0) / B) + (1 / (273.15 + 25)));

Wendet die B-Parameter-Gleichung (eine vereinfachte Form der Steinhart-Hart-Gleichung) an, um die Temperatur in Kelvin zu berechnen.

const tempC = tempK - 273.15;
const tempF = tempC * 1.8 + 32;

Wandelt die Temperatur von Kelvin in Celsius und anschließend in Fahrenheit um.

console.log(`Celsius: ${tempC.toFixed(2)} °C  |  Fahrenheit: ${tempF.toFixed(2)} °F`);

Gibt sowohl die Celsius- als auch die Fahrenheit-Temperatur mit zwei Dezimalstellen Genauigkeit in der Konsole aus.