Klingeltrafo


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Thermometer mit analogem Ausgang

In dem Versuch werden wir ein Thermometer bauen, das gleich drei Aufgaben erfüllen muss. Seine Hauptaufgabe besteht natürlich vor allem darin, die Temperatur zu messen und sie anzuzeigen. Des weiterem soll es möglich sein, die gemessenen Temperaturwerte zu speichern, um sie zu späterem Zeitpunkt abzurufen und auszuwerten. Seine letzte Aufgabe soll darin bestehen, den aktuellen Temperaturwert in Form eines äquivalenten analogen Signals für diverse Steuerungszwecke zur Verfügung zu stellen.
Die Hauptkomponenten der Schaltung:

Mikrocontroller Arduino

Die meiste Arbeit wird von Arduino Uno erledigt. Der Mikrocontroller muss sich gleichzeitig um die Werte des Temperatursensors kümmern, die Umrechnung, die Ausgabe auf der 7-Segmentanzeige, Datenspeicherung und schließlich um den analogen Ausgang.

Alles über Arduino

SD Card Shield

Datenspeicherung-Shield

Die Temperaturwerte werden auf einer SD-Speicherkarte festgehalten. Diese Aufgabe übernimmt in der Schaltung ein SD Card Shield. In dem Arduino-Programm (Sketch) müssen wir lediglich bestimmen, welche Daten und zu welchem Zeitpunkt gespeichert werden sollen.

Ein Versuch mit SD Card Shield

Temperatursensor

Wasserdichtes Temperatursensor

Als Temperatursensor kommt ein Fühler, der aus einem alten Inkbird-Gerät ausgebaut wurde, zum Einsatz. Ein Versuch mit dem Sensor ist hier zu finden:

10kOhm NTC

Anzeige

Anzeige

Das Anzeigen der aktuellen Temperatur übernimmt eine 7-Segmentanzeige, der der Anzeigetreiber TM1637 vorgeschaltet wurde. Der Treiber und die Anzeige zusammen mit einigen elektronischen Komponenten bilden ein Modul, das von Arduino gesteuert wird.

Anzeige

Spannungsregler

Spannungsregler

L78L12. Ein Spannungsregler ist in dieser Schaltung nicht zwingend notwendig. Der Bauteil soll hier lediglich dafür sorgen, dass bei falscher Einstellung der Versorgungsspannung am Netzteil Arduino & Co. nicht gleich kaputt gehen. Grundsätzlich wäre eine Spannungsversorgung von 12VDC ausreichend.

Spannungsregler 78xx-Reihe


Operationsverstärker LM358

OPV

Die integrierte Schaltung LM358 besteht aus zwei unabhängig arbeitenden Operationsverstärkern. Der Bauteil verfügt über acht Anschlüsse. Zwei von ihnen (Pin 4: V-, Pin 8: V+) sind für Spannungsversorgung vorgesehen. Die Pins 1,2,3 beziehen sich auf den ersten, die Pins 5,6,7 auf den zweiten Operationsverstärker. Jeder Operationsverstärker hat zwei Eingänge und einen Ausgang.

OPV Pinbelegung

Pinbelegung

Der LM358 wird oft als Signalverstärker verwendet. Der Baustein kann allerdings durch entsprechende externe Verschaltung für viele andere Aufgaben eingesetzt werden. Er kann als Komparator fungieren, Signalwandler, Impedanzwandler oder Oszillator. LM358P ist ähnlich wie NE555 sehr populär und vielen Schaltung vorzufinden. Er kann in einem Spannungsbereich von 3 bis 30 V arbeiten.

Pin-Ansicht



Der Schaltplan

Der Schaltplan

Der Schaltplan

Die Testschaltung

Die Testschaltung kann man schnell auf einem Steckbrett aufbauen. In diesem Fall werden die Bauteile auf einem Prototyp-Shield zusammengelötet. Solche leere Shields für Arduino kann man günstig in diversen Ausführungen im Handel erwerben. Der Vorteil dieser Lösung ist die Wiederverwendbarkeit der Schaltung.

Shield unbestückt

Arduino Shield unbestückt

Shield bestückt

Shield bestückt

Komplette Schaltung

Komplette Testschaltung mit allen Komponenten.

Das Programm (Sketch)

// *******************************************************************************************
// Temperaturmessung mit NTC
// Speicherung der Messwerte
// Analoges Signal 0-10V
// Arduino UNO, IDE 1.8.16
// *******************************************************************************************

#include <TM1637Display.h>                                  // Anzeige Bibliothek
#include <SPI.h>                                            // SPI Bibliothek
#include <SD.h>                                             // SD Bibliothek

#define CLK 6                                               // Pin 6 Anzeige
#define DIO 7                                               // Pin 7 Anzeige

TM1637Display display(CLK, DIO);

int chipSelect = 4;
int R = 9980;                                               // Spannungsteiler, fester Widerstand
float Rn = 10110;                                           // Widerstand gemessen in Ohm bei Tn
float Tn = 23;                                              // Bezugstemperatur (Rn)
float B = 3398;                                             // Thermistorkonstante B (errechnet)
int Taster_Start = 8;                                       // Datenaufzeichnug start
int PWM_Ausgang = 9;
int Anzeige_LED = 10;                                       // Pin 8, Status LED
int Zaehler;                                                // Nummer der aktuellen Messungen

void setup() {
  
    display.setBrightness(10);                              // Display Helligkeit
    display.clear();        
    pinMode (Taster_Start, INPUT_PULLUP);
    pinMode (Anzeige_LED, OUTPUT);
    Zaehler = -1;                                           // Startwert für Messungen 
    if (!SD.begin(chipSelect)) {                            // SD-Karte initialisieren
        digitalWrite (Anzeige_LED, HIGH);                   // LED An (nach der Einschaltung) = Karten-Fehler 
    while (1);
    }
    digitalWrite (Anzeige_LED, LOW);                        // LED Aus (nach der Einschaltung) = Karte OK
}

void loop() {                                               // Ablaufprogramm
                         
    float Analog_Wert = (float)analogRead (A0);             // analogen Wert A0 auslesen   
                
    float U_ntc = (5.0 * Analog_Wert) / 1023;               // Start der Temperatur-Berechnung
    float R_ntc = (U_ntc * Rn) / (5.0 - U_ntc);             
    float A1 = log(R_ntc / Rn) / B;
    float A2 = A1 + 1 / (Tn + 273.15);
    float T = (1 / A2) - 273.15;                            // T = Berechnete Temperatur in °C

    display.showNumberDecEx(T, 0b00000000, false, 4, 4);    // Anzeige der Temperatur auf der 7-Segmentanzeige

                                                            // PWM Ausgabe
    float PWM_Wert = T * 255 / 100;                         // Bezogen auf Bereich 0 bis 100°C                    
    byte PWM_Ausgabewert = byte(PWM_Wert);                  // Vorbereitung der Ausgabe
    analogWrite(PWM_Ausgang, PWM_Ausgabewert);              // PWM Signal über PIN 9 ausgeben

    if (digitalRead (Taster_Start) == LOW) {                // Daten-Aufzeichnung starten
        digitalWrite (Anzeige_LED, HIGH);                   // LED an während der Aufzeichnug
    }                                                       // LED aus = Aufzeichnung abgeschlossen

    if (digitalRead (Anzeige_LED) == HIGH) {                // Aufzeichnung läuft
        Zaehler++;                                          // Nummer der Aufzeichnung inkrementieren
        String Temperatur_Daten = "";                       // Datensatz vorbereiten
        Temperatur_Daten += String(Zaehler);                // Messung Nummer
        Temperatur_Daten += ",";                            // Komma
        Temperatur_Daten += String(T);                      // Temperatur

        File dataFile = SD.open("datalog.txt", FILE_WRITE); // Daten auf Speicherkarte schreiben
        if (dataFile) {
            dataFile.println(Temperatur_Daten);             // Daten schreiben
            dataFile.close();
        }
        if (Zaehler > 498) {                                // Maximal 500 Datensätze
            Zaehler = -1;                                   // Zähler zurücksetzen
            digitalWrite (Anzeige_LED, LOW);                // Speicherung abgeschlossen, LED aus
        }
    }
    delay(1000);                                            // Messung und Speicherung 1 mal pro Sekunde
}
// *******************************************************************************************       
   

Kalibrierung

Nachdem die Schaltung zusammengestellt und das Programm geladen wurde, kann die Schaltung kalibriert werden. Dazu wird ein externes Thermometer benötigt, das uns die Bezugstemperatur liefert. Der Abgleich wird mit dem Potenziometer R1 durchgeführt. Er ist so einzustellen, dass beide Thermometer gleiche Temperaturwerte anzeigen. In diesem Fall liegt der Wert des Potenziometers bei ca. 11,8 kOhm. Damit ist unsere Thermometer-Schaltung zum ersten Test bereit. Das Thermometer wird jetzt bei diversen Temperaturen geprüft. Gleichzeitig wird bei jeder Messung die Spannung am analogen Ausgang gemessen.

Thermometertest

Der erste Test

Für den ersten Test kann z.B. ein Kochtopf mit Wasser verwendet werden. Mal mit Eiswürfeln, mal mit Tauchsieb wird die Wassertemperatur verändert und mit beiden Thermometern gemessen. Bei diesem Test zeigte sich, dass unser selbst gemachtes Thermometer ziemlich genau das anzeigt, was das externe Thermometer „vorschreibt“. Bei dem analogen Signal gab es Abweichungen, die bei 0,1V lagen. Die Ergebnisse:

Temperaturdiagramm

Temperaturdiagramm.

Auf der Grafik kann man sehen, dass die mit unserem Thermometer gemessenen Temperaturwerte mit denen des externen Thermometers (Achse X) übereinstimmen. Auch der Verlauf der Spannungslinie ist zufriedenstellend und verspricht gute Ergebnisse bei folgenden Versuchen. Das Thermometer werden wir bei weiteren Experimenten mit Frequenzumrichtern oder SPS verwenden.

Funktionalität

Nach Anlegen der Versorgungsspannung beginnt das Thermometer sofort mit der Temperaturmessung. Am Arduino Pin 5V ist der R1-R2-Spannungsteiler angeschlossen. R2 steht für die NTC-Messsonde. Bei Temperaturänderung ändert sich sein Widerstand und folglich auch die Spannung, die am analogen Eingang A0 ausgelesen wird. Anhand dieses Wertes berechnet Arduino die aktuelle Temperatur und zeigt sie auf dem Display an. Entsprechend der Temperatur wird am Pin 9 des Arduino ein PWM-Signal generiert. Mithilfe des Widerstandes R3 und des Kondensators C1 wird das Signal geglättet und steht an Verbindungsstelle der beiden Komponenten als analoges Signal zur Verfügung. In der Form kann das Signal maximal 5V erreichen.
An dieser Stelle kommt der Operationsverstärker LM358P zum Einsatz. Das Signal wird mit einem Verstärkungsfaktor von 2 verdoppelt. Die Verstärkung wird mit den Widerständen R5 und R6 eingestellt.
Mit dem Taster S1 wird die Speicherung der Daten gestartet. In dem Beispiel werden 500 Werte abgespeichert. Es erfolgt eine Speicherung pro Sekunde.

Kurzvideo

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz