Projekt Auto startet: Abgastemperaturanzeige

Hi Leute,

in meinem letzten Thread Ladedruckanzeige ins Auto übertragen gab es ja eine rege Beteiligung und ich hatte darin explizit erklärt worum es mir geht und welche Werte ich im Auto auslesen möchte. Bevor jetzt einige wieder CAN Bus auslesen schreien: Nein mein Auto ist gefühlt uralt und hat keinen CAN Bus (steht alles im alten Thread).

Starten will ich mit der Abgastemperaturanzeige.

Folgendes habe ich bereits besorgt:

  • Arduino Uno
  • MAX31855 als Verstärker
  • Thermoelement Typ K

Ich habe mir von Adafruit auch schon einmal die Libary heruntergeladen und installiert. Danach habe ich den MAX31855 angeschlossen und mit den Beispielsketch von Adafruit hochgeladen. Siehe da, der Serielle Port gibt die Werte an. Aktuell Raumtemperatur und den Feuerzeugtest habe ich bereits bis 200°C erfolgreich getestet.

So sieht der Sketch von Adafruit aus.

#include <SPI.h>
#include "Adafruit_MAX31855.h"

// Default connection is using software SPI, but comment and uncomment one of
// the two examples below to switch between software SPI and hardware SPI:

// Example creating a thermocouple instance with software SPI on any three
// digital IO pins.
#define MAXDO   3
#define MAXCS   4
#define MAXCLK  5

// initialize the Thermocouple
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);

// Example creating a thermocouple instance with hardware SPI (Uno/Mega only)
// on a given CS pin.
//#define MAXCS   10
//Adafruit_MAX31855 thermocouple(MAXCS);

#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
   #define Serial SerialUSB
#endif

void setup() {
  #ifndef ESP8266
    while (!Serial);     // will pause Zero, Leonardo, etc until serial console opens
  #endif
  
  Serial.begin(9600);
  
  Serial.println("MAX31855 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {
  // basic readout test, just print the current temp
   Serial.print("Internal Temp = ");
   Serial.println(thermocouple.readInternal());

   double c = thermocouple.readCelsius();
   if (isnan(c)) {
     Serial.println("Something wrong with thermocouple!");
   } else {
     Serial.print("C = "); 
     Serial.println(c);
   }
   //Serial.print("F = ");
   //Serial.println(thermocouple.readFarenheit());
 
   delay(1000);
}

Jetzt habe ich ein paar Fragen:

  • Was ist denn eine Software / Hardware SPI?
  • Der Sketch wirft immer abwechselnd “Internal Temp = xx” und eine “C = xx” aus. Die “C = xx” funktioniert tadellos. Aber wozu ist denn die Internal Temp da?

Gruß

Irfan

ps. off topic Frage: Kann ich hier Personen markieren, damit sie aufmerksam auf meinen Thread werden? Möchte die netten User vom vorherigen Post aufmerksam machen.

  • Was ist denn eine Software / Hardware SPI?

Das eine ist in Software geschrieben, und das andere findest du im Datenblatt des Prozessors.

Aber wozu ist denn die Internal Temp da?

Wikipedia sagt dir wie Thermoelemente funktionieren.
Und dann lernst du auch sofort, warum der Messumformer auch einen Temperatursensor eingebaut hat.

ps. off topic Frage: Kann ich hier Personen markieren, damit sie aufmerksam auf meinen Thread werden? Möchte die netten User vom vorherigen Post aufmerksam machen.

Bitte nicht mit mir.
Da reagiere ich nicht unbedingt nett drauf.

combie:
DWikipedia sagt dir wie Thermoelemente funktionieren.
Und dann lernst du auch sofort, warum der Messumformer auch einen Temperatursensor eingebaut hat./quote]

Danke combie, ich habe mir alles durchgelegen und verstanden. Ich wusste nicht, dass Thermoelemente Temperaturdifferenzen messen. Jetzt ist mir natürlich klar, wieso die "Internal Temp" ausgegeben wird.

Der nächste Schritt wird wohl sein, das ganze auf einem LCD Display auszugeben. Da schaue ich mal wie ich das heute Abend hin bekomme.

Bei der TFT- Anzeige kann ich helfen. Nutzt du die UTFT Lib?

Ich nutze die ganz normale Libary die bereits im Arduino hinterlegt ist. Das ist nicht die UTFT oder?

<LiquidCrystal.h>

Welche Vorteile hat denn die UTFT Libary?

Hätte aber auch kein Problem eine weitere Libary hinzuzufügen. Ich bin sowieso entzückt davon, was so eine Libary alles bietet. Mit dem MAX31855 war das wirklich ein Kinderspiel.

schau mal bei Youtube- da gibt es schöne Demo- Videos

LiquidCrystal ist für einfache 16x2 oder 20x4 Displays.

Da steht aber auch nirgedwo was von TFT

Ich habe ein ganz normales 16x2 und 20x4 LCD Display.

Oh, irgendwie hatte ich gedacht du wolltest ein 2,8" TFT verwenden- mein Fehler...

Erst mal zum Laufen bekommen, bevor ich anfange vielleicht alles aufzuhübschen :slight_smile:

Kurze Frage noch: Mein Arduino hat ja nur 1x 5V Ausgang. Den nutze ich jetzt aber für den MAX31855. Wie soll ich das LCD Display anschließen? Welche Stromquelle verwendet ihr dafür?

Wenn es für 5V gedacht kannst du da auch ran- der Strombedarf ist nicht so hoch...

Einen MAX31855 würde ich eher an 3.3V anschliessen.

Wenn du ein Modul mit 5 -> 3.3 Regler hast, braucht das aber auch kaum Strom.
Beim LCD ist die Hintergrundbeleuchtung das einzige, was ein paar mA schluckt.

Oder geht es drum, 2 Drähte an einen Pin anzuschliessen ?

Ich habe die MAX31855 folgendermaßen angeschlossen:

VIN an 5V Arduino
3Vo an 3,3V Arduino
GND an GND Arduino
DO an Arduino Digital Pin 3
CD an Arduino Digital Pin 4
CLK an Arduino Digital Pin 5

ist das nicht korrekt?

3Vo an 3,3V Arduino

würde ich weglassen ...

Wieso? Kannst du mir das bitte erklären, damit ich das verstehe?

Das Ding hat einen eigenen Regler an Board.
Also entweder den 5V anschließen, oder den 3,3V.

Viele Regler mögen überhaupt keinen Rückwärtsstrom....
Und du willst keinen Rauch auf dem Board sehen.

Ok combie, vielen Dank. Das ist ja praktisch, dann kann ich den über 3,3 V laufen lassen und meine LCD Anzeige über 5V. Ein Problem weniger :smiley:

Hi Leute,

habe jetzt länger nichts von mir hören lassen, da ich viel Arbeiten musste und es war mal wieder ein Calibra Treffen. Da gibt es vorher immer viel zu schrauben :smiley:

Ich bin mittlerweile vom 2x16 auf 4x16 LCD Display umgestiegen und habe die Abgastemperaturanzeige durch den Sketch von Adafruit zum laufen gebracht.

Jetzt habe ich allerdings ein kleines Problem. Die Int. Temp wird angezeigt, welche ich ja nicht benötige. Das kann ich vom Sketch entfernen. Die Sensortemperatur C= wird ebenfalls angezeigt, jedoch blinkt die. Wieso eigentlich? Die Int. Temp blinkt nicht. Und die letzte Frage: Was ist das für ein Wert in der letzten Zeile?

Anbei mein Sketch:

#include <SPI.h>
#include <Wire.h>
#include “Adafruit_MAX31855.h”
#include <LiquidCrystal.h>

// Example creating a thermocouple instance with software SPI on any three
// digital IO pins.
#define MAXDO 10
#define MAXCS 9
#define MAXCLK 8

// Initialize the Thermocouple
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
#define Serial SerialUSB
#endif

void setup() {
#ifndef ESP8266
while (!Serial); // will pause Zero, Leonardo, etc until serial console opens
#endif
Serial.begin(9600);
// set up the LCD’s number of columns and rows:
lcd.begin(16, 4);

lcd.clear();
lcd.print(“MAX31855 test”);
// wait for MAX chip to stabilize
delay(500);
}

void loop() {
// basic readout test, just print the current temp
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Int. Temp = ");
lcd.println(thermocouple.readInternal());
Serial.print("Int. Temp = ");
Serial.println(thermocouple.readInternal());

double c = thermocouple.readCelsius();
lcd.setCursor(0, 1);
if (isnan(c))
{
lcd.print(“T/C Problem”);
}
else
{
lcd.print("C = “);
lcd.print(c);
lcd.print(” ");
Serial.print(“Thermocouple Temp = *”);
Serial.println(c);
}

delay(1000);
}

Hi Leute,

ich habe die if Funktion raus geschmissen und noch mal laufen lassen. Trotzdem blinkt die Temperaturangabe C= woran kann es denn noch liegen? Eventuell an der double Funktion? Die habe ich mal mit float ersetzt, trotzdem blinkt C=

Habt ihr einen Tipp für mich?

Gruß

Irfan

lcd.println

...ist generell Mist.
Auf lcd sollte man keine SteuerZeichen wie newline ausgeben, höchstens selbstdefinierte Zeichen.