.. note::
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
- **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!
.. _2.2.2_c:
2.2.2 Thermistor
======================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
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
----------
Genauso wie der Fotowiderstand Licht erfassen kann, ist ein Thermistor ein temperaturempfindliches elektronisches Bauelement, das zur Umsetzung von Temperatursteuerungsfunktionen verwendet werden kann, wie beispielsweise für einen Hitzemelder.
Benötigte Komponenten
------------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten.
.. image:: ../img/list_2.2.2_thermistor.png
Es ist definitiv praktisch, ein komplettes Set zu kaufen, hier ist der Link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Name
- ARTIKEL IN DIESEM KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Sie können diese auch separat über die folgenden Links kaufen.
.. list-table::
:widths: 30 20
:header-rows: 1
* - KOMPONENTENBESCHREIBUNG
- KAUF-LINK
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_thermistor`
- |link_thermistor_buy|
* - :ref:`cpn_adc0834`
- \-
Schaltplan
---------------------
.. image:: ../img/image323.png
.. image:: ../img/image324.png
Experimentelle Verfahren
----------------------------
**Schritt 1:** Schalten Sie den Schaltkreis.
.. image:: ../img/image202.png
**Schritt 2:** Navigieren Sie zum Ordner des Codes.
.. raw:: html
.. code-block::
cd ~/raphael-kit/c/2.2.2/
**Schritt 3:** Kompilieren Sie den Code.
.. raw:: html
.. code-block::
gcc 2.2.2_Thermistor.c -lwiringPi -lm
.. note::
-lm dient zum Laden der Mathematik-Bibliothek. Nicht weglassen, sonst gibt es einen Fehler.
**Schritt 4:** Führen Sie die ausführbare Datei aus.
.. raw:: html
.. code-block::
sudo ./a.out
Nachdem der Code ausgeführt wurde, erfasst der Thermistor die Umgebungstemperatur, die nach Abschluss der Programmberechnung auf dem Bildschirm angezeigt wird.
.. note::
Wenn es nach dem Ausführen nicht funktioniert oder die Fehlermeldung "wiringPi.h: Datei oder Verzeichnis nicht gefunden" angezeigt wird, beziehen Sie sich bitte auf :ref:`install_wiringpi`.
**Code**
.. code-block:: c
#include
#include
#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define ADC_CS 0
#define ADC_CLK 1
#define ADC_DIO 2
uchar get_ADC_Result(uint channel)
{
uchar i;
uchar dat1=0, dat2=0;
int sel = channel > 1 & 1;
int odd = channel & 1;
digitalWrite(ADC_CLK, 1);
delayMicroseconds(2);
digitalWrite(ADC_CLK, 0);
delayMicroseconds(2);
pinMode(ADC_DIO, OUTPUT);
digitalWrite(ADC_CS, 0);
// Start bit
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
//Single End mode
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
// ODD
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,odd); delayMicroseconds(2);
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
//Select
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,sel); delayMicroseconds(2);
digitalWrite(ADC_CLK,1);
delayMicroseconds(2);
digitalWrite(ADC_CLK,0);
delayMicroseconds(2);
for(i=0;i<8;i++)
{
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,0); delayMicroseconds(2);
pinMode(ADC_DIO, INPUT);
dat1=dat1<<1 | digitalRead(ADC_DIO);
}
for(i=0;i<8;i++)
{
dat2 = dat2 | ((uchar)(digitalRead(ADC_DIO))<
Es gibt eine C-Numerik-Bibliothek, die eine Reihe von Funktionen deklariert, um gängige mathematische Operationen und Transformationen durchzuführen.
.. code-block:: c
analogVal = get_ADC_Result(0);
Diese Funktion dient dazu, den Wert des Thermistors zu lesen.
.. code-block:: c
Vr = 5 * (double)(analogVal) / 255;
Rt = 10000 * (double)(Vr) / (5 - (double)(Vr));
temp = 1 / (((log(Rt/10000)) / 3950)+(1 / (273.15 + 25)));
cel = temp - 273.15;
Fah = cel * 1.8 +32;
printf("Celsius: %.2f C Fahrenheit: %.2f F\n", cel, Fah);
Diese Berechnungen wandeln die Thermistorwerte in Celsiuswerte um.
.. code-block:: c
Vr = 5 * (double)(analogVal) / 255;
Rt = 10000 * (double)(Vr) / (5 - (double)(Vr));
Diese beiden Codezeilen berechnen die Spannungsverteilung anhand des gelesenen Analogwerts, um Rt (Widerstand des Thermistors) zu erhalten.
.. code-block:: c
temp = 1 / (((log(Rt/10000)) / 3950)+(1 / (273.15 + 25)));
Dieser Code bezieht sich darauf, Rt in die Formel
**T\ K\ =1/(ln(R\ T/R\ N)/B+1/T\ N)** einzufügen, um die Kelvin-Temperatur zu erhalten.
.. code-block:: c
temp = temp - 273.15;
Umwandlung der Kelvin-Temperatur in Grad Celsius.
.. code-block:: c
Fah = cel * 1.8 +32;
Umwandlung von Grad Celsius in Fahrenheit.
.. code-block:: c
printf("Celsius: %.2f C Fahrenheit: %.2f F\n", cel, Fah);
Anzeige von Grad Celsius, Grad Fahrenheit und deren Einheiten.
Phänomen-Bild
------------------
.. image:: ../img/image203.jpeg