Go Down

Topic: Kfz Uhr Projekt (Read 2125 times) previous topic - next topic

Swissler

Jan 06, 2019, 01:06 am Last Edit: Jan 06, 2019, 01:13 pm by Swissler
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  :)

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  :)

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.



Franz54

Ja, sieht gut aus.

Und funktioniert es auch bei der Fahrt ohne jeden Stress?

Franz

postmaster-ino

#2
Jan 06, 2019, 01:31 am Last Edit: Jan 06, 2019, 02:15 pm by postmaster-ino
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)
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Sehr schick! Daumen hoch...

SG

gregorss

Ich wünsche viel Erfolg beim Einbau!

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

Gruß

Gregor
„Ich glaube, ich leg' mich noch mal hin", sagte das Bit.

Hausknecht

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?
___________________________________________________
Grüße Hans

agmue

Für den Betrieb nutze ich ein 2560 Mega, wollte zuerst den Nano nutzen, der Sketch ist leider zu gross.....
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.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Swissler

#7
Jan 06, 2019, 01:31 pm Last Edit: Jan 10, 2019, 04:01 pm by Swissler
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.... :-)


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.... :-)





der Sketch:

Code: [Select]
#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:




Klaus_ww

Sieht echt schick aus!

Quote
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.
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

Swissler

wie mache ich das "code Tags"?

Klaus_ww

Oben links das Symbol < / >
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

Franz54

Code: [Select]
#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() );
}

HotSystems

....
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.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Swissler

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

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.

Go Up