Temperaturen messen ohne 1wire mit NTC

 

Im Rahmen des Umbaus meines Gasverbrauchsloggers bin ich von 1wire Sensoren wieder auf nicht lineare NTCs umgestiegen.

Die 1wire lib war zu groß für die Tinys auf die ich das Projekt nun verteile. Ich hätte nicht alles unter bekommen. Zunächst mache ich Versuche damit am Arduino.

Der Aufbau ist denkbar einfach:

 

Der Sensor hat einen Nennwiderstand von 2K. Das kann man dem Datenblatt entnehmen. Somit habe ich zwei 1K Widerstände in Reihe gesetzt um auf der anderen Seite den gleichen Wert zu bekommen. Zwischen den beiden geht es an den Analogpin 0.

Ich habe diesen einfachen Code zum testen genommen:

int ldrPin = A0;
int ldrWert = 0;
void setup() {
Serial.begin(9600);
}

void loop() {
ldrWert = analogRead(ldrPin);
Serial.println(ldrWert);
}

Damit bekommt man im Terminal einen Wert ausgegeben.

Der Analogpin gibt eine Breite von 0 bis 1023 aus. Wobei 0 genau 0V entsprechen und 1023 entsprechen 5V.

Da war auch schon die erste Falle. Ich dachte bei 3,3V würde 1023 für 3,3V stehen. Stimmt aber nicht. Bei 3,3V sind es 675. Das kann man einfach im Dreisatz umrechen wenn man eine andere Voltzahl als 5V hat.

Die Umrechnung des Messwertes nehme ich aus Platzgründen nicht auf dem Attiny vor. Ich schreibe den reinen Analog0 Wert auf die Karte und rechne es nachher am Laptop um.

8KB sind echt wenig wenn man ständig libs importieren muss.

 

 

4 Gedanken zu „Temperaturen messen ohne 1wire mit NTC

  1. Axel Werner

    Ah! Ein Bild sagt mehr als 1000 Worte. Hab dazu ein paar Fragen:
    1.
    Der Arduino braucht laut Website genau 5V. Kommen die aktuell über USB ?

    2.
    Wenn du 5V zur Verfügung hast, warum gibst du 3.3v auf den Spannungsteiler?

    3.
    Warum ist der AnalogPin „zwischen“ den beiden festen Widerständen und nicht zwischen NTC und den Widerständen angeschlossen? Damit könntest du direkt die Spannung am NTC messen. Also mit 3 Bauteilen hab ich das noch nie gesehen. immer nur NTC und in etwa gleichwertigen festwiderstand. Also 2K NTC, 2K Ohm. Darauf gibt man eine beliebige Spannung (5V problemlos) und misst z.B. per AnalogPin die Spannung am NTC (zwischen NTC und Vorwiderstand). Hierdurch bekommst du auch den größst möglichen Messbereich.

    4.
    Wenn du aus welchen Gründen auch immer nur einen Messbereich von 0-3.3V hast, dann kannst du auch eine geeignete Referenz-Spannung auf den Pin AREF geben. Das wirkt dann wie eine Messbereichsanpassung und dir stehen wieder die vollen 10 Bit ADC Resolution zur Verfügung. DANN ergeben auch 3.3V an einem AnalogPin auch tatsächlich einen AnalogRead von 1023. Hier steht das auch nochmal:

    http://www.instructables.com/answers/what-is-the-AREF-pin-on-the-arduino/
    http://www.adafruit.com/blog/2010/12/14/arduino-and-the-aref-pin/

    Antworten
  2. steffen Beitragsautor

    Das Bild war falsch, ich habe es jetzt korrigiert. Der Analogpin sitzt schon zwischen NTC und den Widerständen. Ich hatte keinen 2K also habe ich zwei 1K in Reihe geschaltet. Ich möchte meinen fertigen Logger nachher mit 3,3V betreiben. Ich werde dann noch Versuche machen wie die Werte dort reagieren.

    Antworten
    1. Thalhammer

      Wenn du den fertigen Logger mit 3,3V betreibst gibt es keine Probleme. Der Wert 1023 bezieht sich nicht fest auf 5V sondern normalerweise auf die Betriebsspannung Vcc. Diese ist beim Arduino 5V vom USB Anschluss. Deshalb entspricht hier der Wert 1023 = 5V.
      Bei deiner eigenen Schaltung ist diese aber niedriger und somit gilt 1023=3.3V.
      Verbindest du den NTC mit der Betriebsspannung des µC kannst du dir eine Korrektur im Programm sparen, da sie im Verhältnis immer gleich ist. Der Wert bei einer bestimmten Temperatur ist also immer gleich egal ob bei 5V oder 3.3V. Falls du Probleme mit der Größe des Programms hast, so würde ich dir empfehlen auf normales C(++) zu wechseln und die Arduino IDE in die Tonne zu treten, da diese einen enormen Overheap hat. Zudem lernt man so die Hardware deutlich besser kennen.

      Mit freundlichen Grüßen,
      Thalhammer

      Antworten
      1. steffen Beitragsautor

        Hallo Thalhammer!

        Danke! Mittlerweile bin ich auf den MSP430 von Texas Instruments umgestiegen. Dort programmiere ich in C und es ist der Hammer wie wenig Platz der Code dann braucht. Das Kennenlernen des Null und Eins Prinzips durch die Hardwarenahe Programmierung gefällt mir gut. Der MSP ist auch aus Energiebedarfsgründen eine gute Wahl. Ich will den Logger mit einem Akku betreiben der sich entweder durch Solar, oder Wind auflädt. Ich bin allerdings nicht sehr schnell im Verstehen der ganzen kryptischen Befehle, somit habe ich es bisher zunächst geschafft meinen eigenen Wecker zu bauen. Die Zeitmessung brauche ich ja auch für den Logger und den Wecker benutze ich nun auch im täglichen Einsatz. Bin auch etwas Stolz darauf.
        Hier ein Video als er noch auf dem Breadboard war bevor ich ihn mit Platine hergestellt habe.
        http://youtu.be/LuYmBTh4kXA
        Gruß, Steffen

        Antworten

Kommentar verfassen