35in1 Sensor Kit - Heißleiter Temperatur Sensoren - AZ-Delivery

Das Set enthält zwei solcher Module. Beide Module benutzen den gleichen Heißleiter. Eines davon hat aber zusätzlich einen Komparator der abhängig von der Potentiometer-Einstellung bei einer bestimmten Temperatur den Digital Ausgang auf Null legt. Amm Analog Ausgang steht praktisch das gleiche Signal wie beim einfachen Sensor zur Verfügung.

Einfacher Sensor

Sensor mit Komparator



Kennlinie

Der NTC ist ein Widerstand der bei Erwärmung den Widerstandswert senkt. Um mit dem NTC Temperaturen zu messen und nicht nur bei einer bestimmten Temperatur zu schalten, braucht man die Kennlinie. Das Diagramm zeigt den Widerstandswert in kOhm (blau) und den (1024 – Ausgangswert) gelesen mit analogRead (rot);


Man sieht durch den verwendeten Spannungsteiler ist die Ausgangsspannung stückweise Linear.

Ermittlung einer Korrekturkurve:

Mit einer einfachen Schaltung können wir versuchen eine Korrekturkurve zu ermitteln. Dazu verwenden wir den einfachen Heißleiter-Sensor und den DS18B20 als Referenz. Wir verbinden die mittleren Pins beider Module mit +5V am Arduino und die – Pins beider Module mit GND. Den S-Pin des NTC-Moduls verbinden wir mit A0 und den S-Pin des DS18B20 Moduls mit D2. Damit wir eine möglichst gleiche Temperatur für beide Sensoren bekommen verbinden wir diese wie das folgende Bild zeigt.



Nun laden wir das folgende Programm auf den Arduino. Und verbinden den Pin 8 am Arduino mit Ground um die Ausgabe zu unterbinden.

/* Dieses Programm ermittelt die Korrekturkurve für einen NTC
* Heißleiter und testet sie anschließend
* Als Referenz wird ein Sensor vom Typ DS18B20 benutzt
*/

#include <OneWire.h>
#include <DallasTemperature.h>

//Anschlüsse
const byte ds18b20 = 2; //referenz sensor
const byte sensor = 0; //zu eichender Sensor
const byte ausgabe = 8; // Eingang um die Ausgabe zu unterdrücken.
const byte led = 13; //messled

//instanzen für Referenz sensor DS18B20
OneWire oneWire(ds18b20);
DallasTemperature sensoren(&oneWire);
DeviceAddress adr;

//zum Speichern der korrekturdaten erzeugen wir eine eigene Klasse
class Korr {
   public:
     int minval; //Anfangswert der Gültigkeit
    int maxval; //Endwert der Gültigkeit
    float faktor; //Korrekturfaktor
    float delta; //relativer Offset

     float temperatur(int val) {
       float temp = float(val) * faktor + delta;
       return temp;
    }
};

//globale Variablen
Korr kurve [20]; //Array mit Korrekturwerten
byte anzahl = 0; //Anzahl der vorhandenen Korrekturwerte

byte messung = 1;
float soll = 0; //aktueller Sollwert
int sens = 0; //aktueller Sensorwert

float soll_alt = 0; //letzter Sollwert
float sens_alt = 0; //letzter Sensorwert



void setup() {
   //seielle schnittstelle starten
   Serial.begin(115200);
   //Referenzsensor vorbereiten
   sensoren.begin();
   sensoren.getAddress(adr, 0);
   // Auflöung auf 10 bit;
   sensoren.setResolution(adr, 10);
   //output für led
  pinMode(led, OUTPUT);
  pinMode(ausgabe, INPUT_PULLUP);
  messung = 1; //wir sind im mess modus
   //einmal Messung für die Startwerte
  Serial.println("Starte Analyse");
  messwerte();
   soll_alt = soll;
   sens_alt = sens;
}

//funktion zum Lesen der Messwerte
void messwerte(){
   //Referenzwert anfordern
   sensoren.requestTemperatures();
   //und vom Prüfling lesen
   //da die Spannung mit zunehmender Temperatur abnimmt
   //kehren wir den Wert um indem wir ihn vom Maximalwert abziehen
  sens = 1024-analogRead(sensor);
   //Referenzwert lesen
  soll = sensoren.getTempC(adr);
}


void loop() {
   //zustand anzeigen
   digitalWrite(led,messung);
   //werte ermitteln
   messwerte();
   if (messung) {
   //wir prüfen ob wir einen bestimmten Unterschied erreicht haben
   //Teilabschnitt alle 5 °C
   if ((soll-soll_alt) >= 5) {
    Serial.print("Berechnung für ");
     Serial.print(soll);
     Serial.println(" °C");
     kurve[anzahl].minval = sens_alt;
     kurve[anzahl].maxval = sens;
     float faktor = (soll-soll_alt)/float(sens-sens_alt);
    kurve[anzahl].faktor = faktor;
     kurve[anzahl].delta = soll - (sens * faktor);
     soll_alt = soll;
     sens_alt = sens;
     anzahl++;
   }
   if (soll > 50) {
     messung = 0;
     Serial.println("Analyse abgeschlossen");
     for (byte i = 0; i<anzahl; i++) {
       Serial.print(kurve[i].minval);
       Serial.print(" - ");
       Serial.print(kurve[i].maxval);
       Serial.print(" - ");
       Serial.print(kurve[i].faktor);
       Serial.print(" - ");
       Serial.println(kurve[i].delta);
    }
   delay(5000);
  }
} else {
   byte i = 0;
   if (sens > kurve[0].minval) {
     while ((sens > kurve[i].maxval) && (i<anzahl)) i++;
  }
   if (digitalRead(ausgabe)==1)
   {
      /* Zur Überprüfung der Funktion hilfreich
     Serial.print("Gefunden: Min = ");
     Serial.print(kurve[i].minval);
     Serial.print(" Max= ");
     Serial.print(kurve[i].maxval);
     Serial.print(" Fakt= ");
     Serial.print(kurve[i].faktor);
     Serial.print(" Delta= ");
     Serial.print(kurve[i].delta);
     Serial.print(" Fühler= ");
     Serial.println(sens);
     */

     float ist = kurve[i].temperatur(sens);
    Serial.print("Messwerte: Soll = ");
     Serial.print(soll);
    Serial.print(" Ist= ");
     Serial.print(ist);
     Serial.print(" Abweichung= ");
     Serial.println(soll-ist);
   }
   delay(1000);
  }
}

Nach dem Start ist das Programm im Analyse Modus, das heißt immer wenn die Temperatur um 5 °C angestiegen ist wird die Steigung und der Offset berechnet und in einer Tabelle gespeichert. Dies geschieht solange bis die Temperatur 50 °C übersteigt.

Die Temperaturänderung erreicht man am einfachsten mit einem Föhn. Man muss aber darauf achten, dass die Erwärmung nicht zu rasch erfolgt, da die beiden Sensoren eine unterschiedliche Trägheit haben.

Wenn eine Temperatur von 50 °C erreicht wurde, erhält man am seriellen Monitor den Inhalt der Korrekturkurve angezeigt. Ab jetzt können Sollwert, Istwert und Abweichung angezeigt werden. Da die Anzeige unterdrückt wurde (Pin 8) damit man die Ergebnisse der Analyse betrachten kann, ist es notwendig den Pin 8 von GND zu trennen.

Bei meinen Versuchen war ich mit dem Ergebnis nicht zufrieden. Eventuell war die Temperaturänderung während der Analyse zu rasch.

Viel Spaß beim experimentieren.

ProduktvorstellungenSensoren

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery