Kfz Uhr Projekt

Hallo zusammen,

ich habe ein neues Arduino Projekt und möchte es gerne vorstellen.

In meinem Kfz (92'er Nissan Primera GT) werkelt eine Digitaluhr die nur im 12std. Format läuft, was mich schon lange nervt. Da ist mir der Arduino mit seinen Möglichkeiten ins Auge gesprungen :slight_smile:

Flugs die LCD Anzeige gemessen und Platz für ein 1,3" Oled Display 128x64 gefunden. Die Display's ausgetauscht und die neue I2C Zuleitung in das Cockpit Gehäuse geführt. Da Ich ein blutiger Anfänger bin habe ich etwas gebraucht bis mein erster sketch "zusammen" war :slight_smile:

Das die Uhrzeit korrekt und präzise Angezeigt wird nutze ich ein RTC 3231, da der Arduino nur ab Zündstellung mit Spannung versorgt wird. Die Stromversorgung habe ich mit einem DC DC Wandler LM2560 realisiert der die Ausgangs-
Spannung sehr gut hält (Eingang 10-14,8V) und mit 5V (max 3A) den Arduino und alle Verbraucher direkt versorgt.

Im Zuge des Projekt's ergänzte ich die Anzeige um folgendes:

Temperaturen:

  • Motoröl, wird mit einem Max 6675 Modul ermittelt
  • Aussen, wird mit dem Sensor 18B20 gemessen
  • Innen, über I2C Infrarot Sensor gemessen (Demarkt GY-906)

Die Batterie Spannung wird über den VCCMax25V ermittelt.

Für den Betrieb nutze ich ein 2560 Mega, wollte zuerst den Nano nutzen, der Sketch ist leider zu gross.....

Flugs noch Gehäuse für den Mega, und die Sensoren entworfen und gedruckt (3D), jetzt muss ich's noch einbauen.

Ja, sieht gut aus.

Und funktioniert es auch bei der Fahrt ohne jeden Stress?

Franz

Hi

Sieht sehr edel aus, Glückwunsch!

MfG

Edit
Meiner Meinung nach solltest Du Dein Projekt auch hier einstellen:
Zeigt her eure geilen Projekte !
(war schon auf Seite 5 abgestürzt)

Sehr schick! Daumen hoch...

SG

Ich wünsche viel Erfolg beim Einbau!

Und hoffe, dass Dir nicht noch die im Auto oft „schmutzige“ Energieversorgung ans Bein pinkelt.

Gruß

Gregor

Sehr schön -Glückwunsch.
Nun stellt sich mir die Frage, ob man das nicht doch mit einem Nano machen könnte.
Willst du deinen Sketch hier einstellen?

Swissler:
Für den Betrieb nutze ich ein 2560 Mega, wollte zuerst den Nano nutzen, der Sketch ist leider zu gross.....

Hausknecht:
Nun stellt sich mir die Frage, ob man das nicht doch mit einem Nano machen könnte.

Durch geschickte Wahl der Bibliothek kann man bei der Fontdefinition sparen. Aber auch innerhalb eines Programms gibt es möglicherweise Sparpotential.

Alternativ gibt es den "geschrumpften" Mega 2560 PRO.

Paßt das Programm in einen Nano, paßt es auch in einen Pro Mini. Da wird noch ein Adapter benötigt.

Hallo zusammen,

danke für die Tip's und Kommentare. Der Einbau folgt erst noch, somit der "Härtetest" auch.

Das Einbinden der Photos habe ich jetzt auch rausgefunden, danke.... :slight_smile:

Die "schmutzige" Energieversorgung soltte kein Problem sein, der LM2560 bringt eine stabile Spannung, die mittels Spindeltrimmer eingestellt wird. im Bereich von 7-15V Vin stehen 5V an, was hoffentlich reicht. Vom Sensor an bis zum Mega sind geschirmte Kabel dran, sollte auch kein Thema sein.

am Sketch kann mann sicher noch viel verbessern, wie gesagt ist der zusammen geschustert, aber er Funktionert.... :slight_smile:

der Sketch:

#include <Adafruit_MLX90614.h> //Infrarot Thermofühler Library
#include <RtcDS3231.h> //RTC Library
#include <max6675.h> //Thermofühler Library Max6675
#include <DallasTemperature.h>
#include <Wire.h> 
#include <OneWire.h>
RtcDS3231<TwoWire> Rtc(Wire); //RTC 3231, I2C Adresse 0x68 Zeit/ 0x57 interner Thermistor

#include "U8glib.h" //Oled Library
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK //Oled Treiber I2C Adresse 0x3C

  char str[10]; //u8g
  char datestring[20]; //RTC3231
 
// Thermofühler Innen Temperatur (Infrarot) MLX90614 
  Adafruit_MLX90614 mlx = Adafruit_MLX90614(); //Infrarot Thermofühler SDA,SCL I2C Adresse 0x5A

// Thermofühler Aussen Temperatur DS18B20 
  #define ONE_WIRE_BUS 7
  OneWire oneWire(ONE_WIRE_BUS);
  DallasTemperature sensors(&oneWire);

//Thermofühler für die Oel Temperatur Max6675
  int thermoDO = 10;                                            
  int thermoCS = 9;
  int thermoCLK = 8;
  MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

  const float scalefactor = 0.066;//Scalefactor für WCS1700

//Spannung Sensor VCC<25V für die Fahrzeugspannung in Volt 
  int analogInput = A4;
  float vout = 0.0;
  float vin = 0.0;
  float R1 = 30000.0; //  
  float R2 = 7500.0; // 
  int value = 0;
  
void setup ()
{
//Oled, einmalige Ausgabe beim Start
  u8g.firstPage();  
  do {
  u8g.setFont(u8g_font_helvR14);
  u8g.drawStr( 30, 15,"NISSAN");
  u8g.drawStr(34, 55,"GT 4x4");
  u8g.setFont(u8g_font_helvR12);
  u8g.drawStr(36, 34,"Primera ");
 }while( u8g.nextPage() );
  delay(3000); 
  
  //RTC 3231
  RtcDateTime now = Rtc.GetDateTime(); 
  printDateTime(now);
  pinMode(analogInput, INPUT); //Sensor VCC<25V Spannung Eingang definieren
  mlx.begin(); //Infrarot Thermo Messung beginnen
  Rtc.Begin(); //RTC3132 Messung beginnen
  sensors.begin(); //DS18B20 Aussen Thermistor Messung beginnen
} 
//RTC Definition Zeitanzeige
  #define countof(a) (sizeof(a) / sizeof(a[0]))
  void printDateTime(const RtcDateTime& dt)
{ snprintf_P(datestring, 
  countof(datestring),
  PSTR("%02u:%02u"),
  dt.Hour(),
  dt.Minute());

}
void loop ()
 { 

//DS188B20
  sensors.requestTemperatures();
//Spannung Sensor
  value = analogRead(analogInput);
  vout = (value * 5.0) / 1024.0; // see text
  vin = vout / (R2/(R1+R2)); 

  
//Oled, wiederholende Ausgabe Zeit, Innen/Aussen und Oel Temperatur, Bordspannung (Kfz) 
  u8g.firstPage();  
  do {
  u8g.setFont(u8g_font_fur17r);
  u8g.drawStr( 35, 22,datestring);
  u8g.drawFrame(0,0,28,30);
  u8g.drawFrame(100,0,28,30);
  u8g.drawFrame(0,33,62,22);
  u8g.drawFrame(66,33,62,22);
  u8g.setFont(u8g_font_profont12);
  u8g.drawStr( 8, 12,"IN");
  u8g.setPrintPos(6, 25);                 // set position
  u8g.println(mlx.readObjectTempC(), 0);
  u8g.drawStr( 19, 25,"\260");
  u8g.drawStr( 106, 12,"OUT");
  u8g.drawStr( 106, 25, dtostrf(sensors.getTempCByIndex(0), 2, 0, str));
  u8g.drawStr( 119, 25,"\260");
  u8g.setFont(u8g_font_profont15);
  u8g.drawStr( 75, 49,"Oil");
  u8g.drawStr( 106, 49, dtostrf(thermocouple.readCelsius(), 2, 0, str));
  u8g.drawStr( 119, 49,"\260");
  u8g.drawStr( 6, 49, dtostrf(vin, 2, 1, str));
  u8g.drawStr( 40, 49,"V");
 }while( u8g.nextPage() );
}

Die grösse ist nicht so tragend, aber je kleiner umso feiner.

die Zutaten:

Sieht echt schick aus!

im Bereich von 7-15V Vin stehen 5V an

Du wirst im realen Betrieb mehr als deutliche Spannungsspitzen haben - bin gespannt, ob das gutgeht bei Dir. Berichte bitte!

Ach ja, den Sketch in Code-Tags wäre auch fein.

wie mache ich das "code Tags"?

Oben links das Symbol < / >

#include <Adafruit_MLX90614.h> //Infrarot Thermofühler Library
#include <RtcDS3231.h> //RTC Library
#include <max6675.h> //Thermofühler Library Max6675
#include <DallasTemperature.h>
#include <Wire.h>
#include <OneWire.h>
RtcDS3231<TwoWire> Rtc(Wire); //RTC 3231, I2C Adresse 0x57 Zeit/ 0x68 Thermistor

#include "U8glib.h" //Oled Library
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK //Oled Treiber I2C Adresse 0x3C

char str[10]; //u8g
char datestring[20]; //RTC3231

// Thermofühler Innen Temperatur (Infrarot) MLX90614
Adafruit_MLX90614 mlx = Adafruit_MLX90614(); //Infrarot Thermofühler SDA,SCL I2C Adresse 0x5A

// Thermofühler Aussen Temperatur DS18B20
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//Thermofühler für die Oel Temperatur Max6675
int thermoDO = 4;                                           
int thermoCS = 3;
int thermoCLK = 2;
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

const float scalefactor = 0.066;//Scalefactor für WCS1700

//Spannung Sensor VCC<25V für die Fahrzeugspannung in Volt
int analogInput = A4;
float vout = 0.0;
float vin = 0.0;
float R1 = 30000.0; // 
float R2 = 7500.0; //
int value = 0;

void setup ()
{
pinMode(analogInput, INPUT); //Sensor VCC<25V Spannung Eingang definieren
mlx.begin(); //Infrarot Thermo Messung beginnen
Rtc.Begin(); //RTC3132 Messung beginnen
sensors.begin(); //DS18B20 Aussen Thermistor Messung beginnen
//RTC 3231
RtcDateTime now = Rtc.GetDateTime();
printDateTime(now);
//DS188B20
sensors.requestTemperatures();
//Spannung Sensor
value = analogRead(analogInput);
vout = (value * 5.0) / 1024.0; // see text
vin = vout / (R2/(R1+R2));   
}
//RTC Definition Zeitanzeige
#define countof(a) (sizeof(a) / sizeof(a[0]))
void printDateTime(const RtcDateTime& dt)
{ snprintf_P(datestring,
countof(datestring),
PSTR("%02u:%02u"),
dt.Hour(),
dt.Minute());
//Oled, einmalige Ausgabe beim Start
u8g.firstPage(); 
do {
u8g.setFont(u8g_font_helvR14);
u8g.drawStr( 30, 15,"NISSAN");
u8g.drawStr(34, 55,"GT 4x4");
u8g.setFont(u8g_font_helvR12);
u8g.drawStr(36, 34,"Primera ");
}while( u8g.nextPage() );
delay(3000);
}
void loop ()
{
//Oled, wiederholende Ausgabe Zeit, Innen/Aussen und Oel Temperatur, Bordspannung (Kfz)
u8g.firstPage(); 
do {
u8g.setFont(u8g_font_fur17r);
u8g.drawStr( 35, 22,datestring);
u8g.drawFrame(0,0,28,30);
u8g.drawFrame(100,0,28,30);
u8g.drawFrame(0,33,62,22);
u8g.drawFrame(66,33,62,22);
u8g.setFont(u8g_font_profont12);
u8g.drawStr( 8, 12,"IN");
u8g.setPrintPos(6, 25);                 // set position
u8g.println(mlx.readObjectTempC(), 0);
u8g.drawStr( 19, 25,"\260");
u8g.drawStr( 106, 12,"OUT");
u8g.drawStr( 106, 25, dtostrf(sensors.getTempCByIndex(0), 2, 0, str));
u8g.drawStr( 119, 25,"\260");
u8g.setFont(u8g_font_profont15);
u8g.drawStr( 75, 49,"Oil");
u8g.drawStr( 106, 49, dtostrf(thermocouple.readCelsius(), 2, 0, str));
u8g.drawStr( 119, 49,"\260");
u8g.drawStr( 6, 49, dtostrf(vin, 2, 1, str));
u8g.drawStr( 40, 49,"V");
}while( u8g.nextPage() );
}

Swissler:
....
Die "schmutzige" Energieversorgung soltte kein Problem sein, der LM2560 bringt eine stabile Spannung, die mittels Spindeltrimmer eingestellt wird. im Bereich von 7-15V Vin stehen 5V an, was hoffentlich reicht. Vom Sensor an bis zum Mega sind geschirmte Kabel dran, sollte auch kein Thema sein.
.....

Du wirst dich wundern. Setze eine Filter (Drossel und Kondensatoren) davor, gibt es fertig zu kaufen.

Ich werde gerne Berichten wenn es in Betrieb ist, ob es genug Stabil läuft :slight_smile:

Hübsches Resultat, habe das auch so für mein Auto umgesetzt. Es lief ca. 1-2 Jahre, dann ist mir der DS18B20 hopps gegangen. Da werde ich mich wohl die Tage ransetzen müssen, möchte direkt am Sensor einen kleinen Kondensator zwischen Vcc und GND sowie je eine Z-Diode von GND nach Vcc und Data setzen.

DerLehmi:
Oben links das Symbol < / >

Man sollte dazu sagen, dass man im Editor kein Menü sieht, wenn man zitiert. Erst ein Klick auf "Preview" bringt das Menü zum Vorschein.
MfG

Sieht schön aus :slight_smile:

Soweit so gut,
im Testaufbau ist der Mega 4 Tage durchgelaufen, ohne zu hängen oder sonstige Probleme.

DerLehmi:
Hübsches Resultat, habe das auch so für mein Auto umgesetzt. Es lief ca. 1-2 Jahre, dann ist mir der DS18B20 hopps gegangen. Da werde ich mich wohl die Tage ransetzen müssen, möchte direkt am Sensor einen kleinen Kondensator zwischen Vcc und GND sowie je eine Z-Diode von GND nach Vcc und Data setzen.

Ist der DS18B20 wegen Spannungs-Spitzen hops gegangen? Hab jetzt den Aufbau soweit das er Eingebaut werden kann, hoffe ich schaffe es diese Woche noch....

Ist der DS18B20 wegen Spannungs-Spitzen hops gegangen?

-->Ich gehe mal stark davon aus. Dabei habe ich schon darauf geachtet, das Kabel nicht an der Zündanlage vorbeizuführen.

Ist der Lüfter nicht etwas übertrieben?^^

Würde noch schauen, dass Du eine Akku-Knopfzelle in der RTC drin hast, die werden oft mit einer Batterie ausgeliefert

DerLehmi:
-->Ich gehe mal stark davon aus. Dabei habe ich schon darauf geachtet, das Kabel nicht an der Zündanlage vorbeizuführen.

Ich habe ein Kondensator in den 5V Strang gesetzt, vielleicht bringt das schon was, die Kabel verlege ich möglichst nicht Parallel zum bestehenden Kabelbaum, und ja, weit weg von der Zündung.....

DerLehmi:
--> Ist der Lüfter nicht etwas übertrieben?^^

Ja, ist übertrieben.....der ist so leise, hab ich noch rumliegen, statt weg zu schmeißen.... :slight_smile:

DerLehmi:
Würde noch schauen, dass Du eine Akku-Knopfzelle in der RTC drin hast, die werden oft mit einer Batterie ausgeliefert

Gestern extra noch besorgt, hab auch festgestellt das die lieben Chinesen ne Ladespannung an die Batterie legen !
Trotzdem danke für den Tip :slight_smile: