Navigation

  1. Realisierung
    1. Entwicklung
    2. Entwurf
    3. Fertigung
  2. Funktion der Platine
    1. Abgleich der Messwerte
  3. Das Programm
    1. Allgemeines
    2. Projekteinrichtung
    3. Aufbau der DLL
    4. Anwendung der Methoden in Funktionen
    5. Anwendung der Funktionen im Quelltext
  4. Die Datenbank
  5. Messwerte aus der Datenbank
  6. Fehlersuche / Beseitigung

nach oben

zurück auf Berel.net
Berel-am-Ries.de

Temperaturfühler



Aufgabenstellung

Unser Ziel ist es ein Temperaturmessgerät zu konstruieren, mit dem man analoge Temperaturwerte auf dem Computer darstellen kann.
Die Problematik dabei ist, die naturbezogenen Messwerte in digitale, für den PC lesbare, Signale umzuwandeln.
Außerdem müssen die Spannungswerte so verstärkt werden, dass das Signal über ein USB-Board an den Rechner übertragen werden kann.

1. Realisierung

Unser Konzept basiert auf der Entwicklung, dem Entwurf und der Fertigung einer Schaltung, die temperaturabhängige Spannungswerte über das USB-Board auf den Rechner überträgt.
Dort werden die Daten mithilfe eines von uns konzipierten Programmes für den Benutzer übersichtlich dargestellt.
Sowie auf einer mit dem programmbezogenen dynamischen Webseite präsentiert.
Das folgende Blockschaltbild zeigt unsere Grundüberlegungen und deren realisierbare Struktur:

Blockschaltbild


1.a Entwicklung

Durch das Blockschaltbild erhalten wir eine ungefähre Herangehensweise durch die wir die Problematik lösen können.
Damit wir einen Schaltplan entwerfen können müssen wir einige Teilstrukturen entwickeln. Ausgangspunkt ist ein temperaturabhängiger Widerstand mit dem wir die Spannung in einem Schaltkreis beeinflussen können.
Um eine Spannungsdifferenz zu erzeugen müssen wir zwei Widerstände in Reihe schalten. Den somit erhaltenen Spannungsteiler nehmen wir als Basiswert, um ihn mit einem zweiten Spannungsteiler, erzeugt durch den temperaturabhängigen Widerstand, vergleichen zu können. Die zwei Spannungen werden mithilfe eines Operationsverstärkers subtrahiert und verstärkt. So ergibt sich eine Differenzspannung die sich abhängig zur Temperatur verändert.
Diese Überlegungen führten uns zum Entwurf unseres Schaltplans, den wir mit sPlan 6 entwarfen.

1.b Entwurf

sPlan Zeichnung

A1 = Spannungsteiler aus Temperaturfühler und Widerstand
B1 = Spannungsteiler aus Potentiometer und Widerstand
A2 = Normaler OP-Eingang
B2 = Negierter OP-Eingang
UR = A2-B2 = Differenzspannung als Ausgangswert



Vorbereitungen
Zuerst suchten wir einen geeigneten Temperaturfühler. Hier hatten wir die Wahl zwischen dem hochwertigen PT1000 und dem preiswerten KTY10, für den wir uns letztendlich entschieden haben.


Name Preis Messbereich Ausgabe Sonstiges
Messumformer-Modul für PT1000 27,01 € 0 - +160 °C als Spannung: 0-10 V Dreileiteranschluss
TEMPERATUR-SENSOR KTY10-7=KTY81-222(NXP) 1,16 € -50 - +150 °C Grundwiderstand: (R25) 2030 Ω Toleranz: ± 1%


Der KTY10 ist nicht von so qualitativ hochwertig wie der PT1000, dafür ist er um ein vielfaches günstiger. Außerdem ist er für unsere Zwecke vollkommen ausreichend, da er Temperaturen zwischen -50° und +150° Celsius aushält. Dabei hat er nur eine geringe Toleranz. (Preis-Leistungsverhältnis stimmt)

Nach dem Schaltplan fertigten wir ein Platinen Layout mit Sprint Layout an.

Das Platinen Layout
Klicken zum Downloaden

1.c Fertigung

Durch die Erstellung des Layouts kamen für unsere Schaltung folgende Bauelemente in Frage:

1x KTY81 Temperaturfühler (KTY10) 1,16€
4x 10kΩ Widerstand (R1-R4) 0,10€
2x 120kΩ Widerstand (R5-R6) 0,09€
1x 2,5kΩ Potentiometer (P1) 0,27€
4x Buchsen (Rot, Blau, Schwarz, Gelb) (ABr, ABb, ABs, ABg) 1,32€
1x Platine (55mm x 50mm) 0,40€
1x Operationsverstärker LM3582 (OP1) 0,26€

Bauteile auf der Platine Die fertige Platine



2. Funktion der Platine

Nach Fertigstellung der Platine überprüften wir sämtliche Lötstellen und Übergänge auf ihre Funktion. Außerdem machten wir einen Abgleich zwischen dem Ausgangsspannungswert und der Temperatur (10°=2V).

2.a Abgleich der Messwerte

Um den Abgleich durchführen zu können schließen wir die Platine an eine Spannungsquelle und ein Messgerät an.

Der Messaufbau
Klicken zum Vergrößern

Um die am Ausgang erhaltene Differenzspannung bewerten zu können müssen wir sie in Bezug zur aktuellen Temperatur setzen. Hierbei dient uns ein Abgleich beider erzeugter Spannungen. Mittels des Drehtrimmers P1 lässt sich die Spannung regulieren.
Ein Abgleich ist dann vollzogen wenn folgende Bedingung erfüllt ist:

-A2 + B2 = 0V
A2 = B2


Spannung -A2 und +B2 müssen zusammen 0V ergeben!
Hat man den Abgleich vollzogen ergibt sich nun für jeden veränderten Temperaturwert ein diesbezüglicher Spannungswert.

3. Das Programm

3.1 Allgemeines

Die Problematik digitale Werte auszulesen, entsprechend zu konvertieren und visuell darzustellen, wird mit unserem Programm „Cyber-Thermal Converter 2011“ gelöst.

Jetzt das Programm herunterladen

Für die Erstellung dieser Software benutzten wir den „C++ Builder 2010“ von der Firma Embarcadero. Diese RAD-Umgebung erleichterte uns die Herstellung unseres Programms aufgrund des vordefinierten Klassensystems. Für das Auslesen binärer Werte benutzen wir das K8055D USB-Board der Firma Velleman, welches als Schnittstelle zwischen der Software und externen Schaltungen/ Geräten fungiert.

Das USB-Board stellt eine Reihe von analogen/digitalen Ein-und Ausgängen zur Verfügung, wobei wir die zwei analogen Eingänge A1 und A2 (siehe Board-Beschriftung) benötigen. [Hinweis: Die Benutzung anderer Ein- und Ausgänge, innerhalb der Software, dienen lediglich der optischen Aufbereitung]

Die mitgelieferte K8055D_C.DLL stellt einige Methoden bereit um Daten auszulesen bzw. einzulesen. Sie stellt die direkte Verbindung zwischen dem Gerätetreiber des Boards und dem Programm dar.

3.2 Erstellung einer VCL-Anwendung

Für die Erstellung einer VCL-Anwendung unter dem C++ Builder 2010 müssen folgende Schritte beachtet werden:
  1. Neues Projekt erstellen
  2. "k8055d_c.lib" kopieren in den Projektordner
  3. "K8055D_C.h" kopieren in den Projektordner
  4. "K8055D_C-DLL" kopieren in den Ordner der exe-Datei (meist Debug Ordner)
  5. #include "K8055D_C.h" eintragen
  6. Projekt -> Dem Projekt hinzufügen "k8055d_c.lib"

3.3 Methodenstrukturen der mitgelieferten DLL

Die nun folgenden Methoden wurden primär eingesetzt um die o.g. Problematik zu lösen:

FUNCTION long __stdcall OpenDevice(long CardAddress)

FUNCTION long __stdcall ReadAnalogChannel(long Channel)

FUNCTION __stdcall CloseDevice()

3.4 Anwendung der Methoden in Funktionen

Die Problematik wird unter der Verwendung der beschriebenen Methoden wie folgt realisiert.

Die neuen Funktionen:



HINWEIS: Die einzelnen Funktionen sind eine Teilmenge einer komplexen Programmstruktur und somit nur innerhalb des gesamten Quellcodes anzuwenden.

3.5 Anwendung der Funktionen im Quelltext


Verbindung mit dem USB-Board

Wert auslesen, durchschnittswert errechnen und Spannung/Temperatur berechnen

Die Berechnung der Temperatur erfolgt durch die in dem Benutzerkonto angegebene Funktion. Diese wird aus den gespeicherten Strings in den Datentyp double konvertiert und anschließend als Koeffizienten einer quadratischen Funktion abgebildet. Somit kann man seine individuelle Funktion bestimmen.
Mögliche Funktionen sind:

Die o.g. Methoden und Funktionen werden in der Hauptfunktion und somit wichtigsten Funktion aufgerufen und definieren den konvertierungs-visuallisierungsvorgang des Temperaturwertes.

Hauptfunktion „Temperaturmessung“

Der blaue Bereich enthält die Funktionen die notwendig sind um einen Spannungs bzw. Temperaturwert zu erhalten.
Im gelben Bereich werden die nun ermittelten Spannungs- und Temperaturwerte gerundet und in einen String konvertiert um später angezeigt zu werden.
Der Rote Bereich ist zuständig um die Temperatur im Temperaturmessgerät anzuzeigen und graphisch darzustellen.

4. Die Datenbank

Zuerst ein wichtiger Hinweis:
Da die Datenbank von einem MySQL-Server verwaltet wird benötigt man für den Zugriff einen sogennanten "ODBC-Konnektor". Diesen kann man sich kostenlos auf der Seite von MySQL herunterladen.
Die Datenbank besteht aus einer Tabelle, die sich aus drei Datenfelder zusammenstellt. Der PS (Primärschlüssel) als fortlaufende Nummer,
das Datenfeld Datum, in dem das Datum des Datensatzes gespeichert wird und zuletzt noch der Temperaturwert im Feld Temperatur.

Die Daten werden über den SQL-Befehl "INSERT INTO" vom Programm aus in die Datenbank gespeichert.
Als Parameter wird NULL, TIMESTAMP(), Temperaturwert angegeben. Der Primärschlüssel muss nicht definiert werden, daher NULL.
Der Befehl TIMESTAMP() speichert das aktuelle Datum (inklusive Uhrzeit) und der Temperaturwert ist der umgerechnete Rückgabewert der Platine.

Die Ausgabe über PHP gestaltet sich als recht simpel, da der Befehl dem des C++-Programmes ähnelt. Nur muss man jetzt statt INSERT INTO eine Abfrage erstellen.
Diese sieht dann folgendermaßen aus: SELECT Datum, Temperatur FROM Ritchie_Stolla ORDER BY PS
Die Abfrage bewirkt, dass die Werte des Datums und der Temperatur, geordnet nach dem fortlaufendem Primärschlüssel, aus der Tabelle "Ritchie_Stolla" ausgelesen werden.

5. Messwerte aus der Datenbank



DatumTemperatur
2011-03-13 17:06:221.2
2011-03-14 21:12:4321.012
2011-03-15 00:16:2736,4545239784614
2011-03-18 14:55:1533,0041614592714
2011-03-18 14:55:1633,0041614592714
2011-03-18 14:55:1733,0041614592714
2011-03-18 14:55:1833,0041614592714
2011-03-18 14:55:1933,0041614592714
2011-03-18 14:55:2033,0041614592714
2011-03-18 14:55:2133,0041614592714
2011-03-18 14:55:2233,0041614592714
2011-03-18 14:55:2333,0041614592714
2011-03-18 14:55:2433,0041614592714
2011-03-18 14:55:2633,0041614592714
2011-03-18 14:55:2733,0041614592714
2011-03-18 14:55:2833,0041614592714
2011-03-18 14:55:2933,0041614592714
2011-03-18 14:55:3033,0041614592714
2011-03-18 14:55:3133,0041614592714
2011-03-18 14:55:3233,0041614592714
2011-03-18 14:55:3333,0041614592714
2011-03-18 14:55:3433,0041614592714
2011-03-18 14:55:3533,0041614592714
2011-11-25 01:22:55-0,019608


6. Fehlersuche / Beseitigung

Im Laufe unseres Messungsprozesses sind wir auf eine Problematik aufmerksam geworden. Bei den Messungen stellte sich heraus, dass die Werte linear von dem erwarteten Ergebnis abwichen.
Da die Widerstandskombination für die Verstärkung sehr ungerade war, beschlossen wir die kleine Abweichung in dem Programm auszugleichen.
Das nächste Problem war ein Fehler im Layout der Platine, der bewirkte, dass eine negative Ausgangsspannung ausgegeben wurde. (Die Schaltpläne oben sind korrigiert!)
Als Lösung mussten wir die beiden Widerstände R3 und R4 überkreuz anlöten, sodass die Eingänge des OP's vertauscht werden.

Eine große Behinderung des Projektes war außerdem ein neues System auf den Schulrechner, welches die Rechte der Schüler deutlich einschränkt.
So funktionierte der C++-Builder 4, zum Erstellen des Programms und Xampp zum Erstellen und Testen der Website und Datenbank nicht richtig!
Deshalb mussten wir die Programmierung zu Hause beziehungsweise auf Privaten Rechner durchführen.




© by Fabrice Stolla & Kevin Ritchie