Afr data logger

Akut ein Problem?

Moderatoren: SqlMaster, T5owner, TripleT

Forumsregeln
Beachte bitte, je genauer Du dein Problem beschreibst, umso weniger Rückfragen wird es geben, bis Dir vielleicht jemand helfen kann. Vergiss nicht zuzufügen, welche Schritte zur Problemlösung Du bisher schon unternommen hast.
Benutzeravatar
Jogypilot
Beiträge: 78
Registriert: Mo 1. Jan 2018, 17:08
Fuhrpark: Mustang Coupe Bj. 65
Skoda Scala

Re: Afr data logger

Beitrag von Jogypilot »

Für den Anschluss vieler Sensoren wird der UNO nicht ausreichen, da der Flashspeicher zu klein ist.
Ich bekomme jetzt schon Warnmeldungen über knappen Speicher. CPU-Leistung ausreichend?
Benutzeravatar
Jogypilot
Beiträge: 78
Registriert: Mo 1. Jan 2018, 17:08
Fuhrpark: Mustang Coupe Bj. 65
Skoda Scala

Re: Afr data logger

Beitrag von Jogypilot »

Software

ACHTUNG: erst alles lesen, dann loslegen.

1.) Arduino IDE auf dem PC installieren

Batterie CR1220 in Data logger einsetzen

2.) Data logger mit USB-Kabel mit PC verbinden. Feststellen wie die USB-Schnittstelle heißt.

3.) IDE starten, im Menü 'Werkzeuge/Bord: Arduino UNO' einstellen; in 'Werkzeuge/Port' die ermittelte Schnittstelle einstellen.

4.) RTC (Uhr) initialisieren: Menü 'Werkzeuge/Bibliotheken verwalten' die RTClib installieren.
'Datei/Beispiele/RTClib' DS1307 öffnen.
Seriellen Monitor in der IDE öffnen und unten die Geschwindigkeit auf 57600 Baud einstellen (wie im sketch hinter Serial.begin steht)
Kompilieren und zügig hochladen, da die PC-Zeit vom Kompilieren als Ist-Zeit gesetzt wird. Zeit bleibt erhalten solange die Batterie drin ist.
Wenn alles OK ist, erscheint auf dem seriellen Monitor fortlaufen Datum und Uhrzeit.
Fehlermeldungen beziehen sich meistens auf fehlende Libraries.

5.) GPS testen:
Die Librarie TinyGPSPlus-1.0.2b.zip installieren (ich kann sie nicht hochladen, selber bei Google suchen): Menü 'Sketch/Bibliothek einbinden/.ZIP- Bibliothek einbinden
Menü 'Datei/Beispiele/TinyGPS++/DeviceExaple' öffnen.
Zeile 8: ... TXPin = 3 auf 5 ändern. ACHTUNG:: am Zeilenende immer auf das ; achten
Zeile 9: ...GPSBaud = 4800 auf 9600 ändern.
Seriellen Monitor auf 115200 Baud einstellen.
Kompilieren und hochladen. Jedes Hochladen eines neuen skatches überschreibt automatisch den vorherigen.
GPS Empfänge ans Fenster legen, im Raum funktioniert es nicht. Wenn alles richtig ist sollten nach 2-5 min. GPS Position und Datum auf dem seriellen Monitor erscheinen.
Fehlermöglichkeiten gibt es viele: falsche Geschwindigkeiten eingestellt oder die Datenkabel TX und RX vertauscht.
Noch ein Hinweis: es gibt im Web das Programm u-center von der Fa. u-blox, mit dem kann man am GPS Empfänger rumschrauben, z.B. die Übertragungsgeschwindigkeit ändern. Das sollte man aber nur benutzen wenn man genau weiß was man tut, sonst funktioniert der Empfänger gar nicht mehr.

6.) Jetzt wird's ernst. Die SD Karte einstecken, ohne funktioniert es nicht.
Die Datei AFR_GPS_Forum.ino dort speichern wo die Arduino IDE sie findet.
Sketch AFR_GPS_Forum.ino öffnen.
Seriellen Monitor auf 115200 Baud einstellen.
Kompilieren, Warnungen über geringen Speicherplatz können ignoriert werden.
Hochladen und warten was passiert.
Auf dem seriellen Monitor sollte eine Meldung über das Erstellen einer Datei erscheinen und die Kopfzeile der Tabelle
time; afr; kmph
Nicht vergessen, GPS Empfänger ans Fenster legen sonst passiert gar nichts.
Die Datenaufzeichnung beginnt erst, wenn ein gültiges GPS Signal und ein gültiger AFR Wert anliegt.
Wahrscheinlich ist der AFR Meter noch nicht angeschlossen und trotzdem erscheinen nach ein paar Minuten Daten. Sollten auf jeden Fall.
An dem offenen Anschluss entsteht im Arduino ein undefinierter Wert, der zufällig gültig ist. Also den AFR Wert noch nicht ernst nehmen.
Die angezeigte Zeit sind Millisekunden seit Start des DAta logger. Die Geschwindigkeit sollte nahe Null sein.
Wenn die Aufzeichnung läuft blinkt eine der zwei LED's neben dem Reset-Taster. Es wird alle 0,5 sec ein Messwert erfasst und nach 10 Stück (=5 sec.)
auf die Karte geschrieben und die LED blinkt.
Wenn's läuft, logger wieder vom USB trennen und die SD Karte kann entnommen werden. Bei Jedem Start entsteht eine neue AFRxx.CSV Datei.
Die kann man jetzt schon zum spielen und Auswertungstest benutzen.
Die Darstellung und Auswertung ist ein eigenes Kapitel und sollte jeder selber schaffen.

7.) ab ins Pony. Der JST Stecker ist jetzt hoffentlich an den richtigen Kabeln des AFR Meter angelötet und kann an den Datalogger gesteckt werden.
Der data logger sollte auf dem Armaturenbrett liegen, sonst wird es mit dem GPS Empfang schwierig.
Stromversorgung mit dem USB-Kabel mit USB-Lader in der 12V Buchse verbinden.
ACHTUNG: keine andere Stromquelle benutzen, sonst stimmen die AFR Werte nicht.
Warten bis die LED blinkt, dann läuft er.
Abfahrt

Viel Erfolg und Spaß beim Basteln

Jörg

AFR_GPS_forum.ino

Code: Alles auswählen

#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <RTClib.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
/*
   This sample code demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object.
   It requires the use of SoftwareSerial, and assumes that you have a
   57600-baud serial GPS device hooked up on pins 4(rx) and 5(tx).
*/

static const int RXPin = 4, TXPin = 5;
static const uint32_t GPSBaud = 9600;

// A simple data logger for the Arduino analog pins

// how many milliseconds between grabbing data and logging it. 1000 ms is once a second

#define LOG_INTERVAL  500 // mills between entries (reduce to take more/faster data)

// how many milliseconds before writing the logged data permanently to disk
// set it to the LOG_INTERVAL to write each time (safest)
// set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to 
// the last 10 reads if power is lost but it uses less power and is much faster!

#define SYNC_INTERVAL 10*LOG_INTERVAL // mills between calls to flush() - to write data to the card
uint32_t syncTime = 0; // time of last sync()


#define ECHO_TO_SERIAL   1 // echo data to serial port
#define WAIT_TO_START    0 // Wait for serial input in setup()

// the digital pins that connect to the LEDs
#define redLEDpin 2
#define greenLEDpin 3

// The analog pins that connect to the sensors
const int afrpin=A3;

unsigned long Time;
char timestamp[30];

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);


RTC_DS1307 RTC; // define the Real Time Clock object

// for the data logging shield, we use digital pin 10 for the SD cs line
const int chipSelect = 10;

// the logging file
File logfile;

void error(char *str)
{
  Serial.print("error: ");
  Serial.println(str);
  
  // red LED indicates error
  digitalWrite(redLEDpin, HIGH);

  while(1);
}

//------------------------------------------------------------------------------
// call back for file timestamps
void dateTime(uint16_t* date, uint16_t* time) {
 DateTime now = RTC.now();
// sprintf(timestamp, "%02d:%02d:%02d %2d/%2d/%2d \n", now.hour(),now.minute(),now.second(),now.month(),now.day(),now.year()-2000);
// Serial.println("yy");
// Serial.println(timestamp);
 // return date using FAT_DATE macro to format fields
 *date = FAT_DATE(now.year(), now.month(), now.day());

 // return time using FAT_TIME macro to format fields
 *time = FAT_TIME(now.hour()-2, now.minute(), now.second());
}
//------------------------------------------------------------------------------


void setup(void)
{
  Serial.begin(115200);
  Serial.println();
  ss.begin(GPSBaud);
    
  // use debugging LEDs
  pinMode(redLEDpin, OUTPUT);
  pinMode(greenLEDpin, OUTPUT);
  
#if WAIT_TO_START
  Serial.println("Type any character to start");
  while (!Serial.available());
#endif //WAIT_TO_START

 // connect to RTC
  Wire.begin();  
  if (!RTC.begin()) {
    logfile.println("RTC failed");
#if ECHO_TO_SERIAL
    Serial.println("RTC failed");
#endif  //ECHO_TO_SERIAL
  }

// set date time callback function
 SdFile::dateTimeCallback(dateTime);

  // initialize the SD card
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    error("Card failed, or not present");
  }
  Serial.println("card initialized.");
  
  // create a new file
  char filename[] = "AFR00.CSV";
  for (uint8_t i = 0; i < 100; i++) {
    filename[3] = i/10 + '0';
    filename[4] = i%10 + '0';
    if (! SD.exists(filename)) {
      // only open a new file if it doesn't exist
      logfile = SD.open(filename, FILE_WRITE); 
      break;  // leave the loop!
    }
  }
  
  if (! logfile) {
    error("couldnt create file");
  }
  
  Serial.print("Logging to: ");
  Serial.println(filename);

 logfile.println("time;  afr; kmph");
      
#if ECHO_TO_SERIAL
    Serial.println("time;  afr;  kmph");
#endif //ECHO_TO_SERIAL
 
// If you want to set the aref to something other than 5v
//  analogReference(EXTERNAL);
}
int afr = 0;
int afr_alt = 0;

void loop(void)

{
  //GPS auslesen
  while (ss.available() > 0)
    gps.encode(ss.read());
 
  analogRead(afrpin);
  int afr = analogRead(afrpin);
  //glaetten
  afr = (afr + afr_alt)/2;
  
  // fetch the time
  Time=millis()/100;
  
  // log time if afr and GPS is valid
  if (afr>102 && afr<921 && gps.location.isUpdated())
  {
      digitalWrite(greenLEDpin, HIGH);
      logfile.print('"');
      logfile.print(Time);
      logfile.print('"');

      #if ECHO_TO_SERIAL
        Serial.print('"');
        Serial.print(Time);
        Serial.print('"');
      #endif //ECHO_TO_SERIAL
  }
    
smartDelay(500);  

//Umrechnungsformeln
  double afr_Volt = 5.0 / 1023.0 * (float)afr;
  double afr_Wert = (2.3750 * afr_Volt)+7.3125;
  afr_alt = afr;
  
  if (afr>102 && afr<921 && gps.location.isUpdated())
  {
      logfile.print("; ");    
      logfile.print(afr_Wert);
      logfile.print("; ");
           
    #if ECHO_TO_SERIAL
      Serial.print(";    ");
      Serial.print(afr_Wert);
      Serial.print(";    ");      
    #endif //ECHO_TO_SERIAL
  }
  
if (afr>102 && afr<921 && gps.location.isUpdated())
  { 
    logfile.println(gps.speed.kmph(), 0);

    #if ECHO_TO_SERIAL
        Serial.print(gps.speed.kmph(), 0);
        Serial.println();
    #endif //ECHO_TO_SERIAL
  }  
  digitalWrite(greenLEDpin, LOW);

  // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card
  // which uses a bunch of power and takes time
  if ((millis() - syncTime) < SYNC_INTERVAL) return;
  syncTime = millis();
  
  // blink LED to show we are syncing data to the card & updating FAT!
  digitalWrite(redLEDpin, HIGH);
  logfile.flush();
  digitalWrite(redLEDpin, LOW);


  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
     Serial.println(F("No GPS data received: check wiring"));
     digitalWrite(greenLEDpin, LOW);
     digitalWrite(redLEDpin, LOW);
  }
   
}

// This custom version of delay() ensures that the gps object
// is being "fed".
static void smartDelay(unsigned long ms)
{
    unsigned long start = millis();
    do 
    {
        while (ss.available())
        gps.encode(ss.read());
    }   while (millis() - start < ms);
}
Benutzeravatar
Jogypilot
Beiträge: 78
Registriert: Mo 1. Jan 2018, 17:08
Fuhrpark: Mustang Coupe Bj. 65
Skoda Scala

Re: Afr data logger

Beitrag von Jogypilot »

Habe gerade bemerkt, dass im Programmcode etwas fehlt. Ist beim kopieren irgendwo verschwunden.
Werde ich korrigieren.

Gesendet von meinem SM-T510 mit Tapatalk
Benutzeravatar
Jogypilot
Beiträge: 78
Registriert: Mo 1. Jan 2018, 17:08
Fuhrpark: Mustang Coupe Bj. 65
Skoda Scala

Re: Afr data logger

Beitrag von Jogypilot »

Folgendes Problem: gestern Abend habe ich mir den Code mit Taptalk angesehen und da fehlen Teile.
Im Webbrowser ist er komplett. Also auf keinen Fall aus Taptalk kopieren.

Liebe Grüße Jörg
Benutzeravatar
f100
Beiträge: 262
Registriert: Di 27. Sep 2016, 20:48
Fuhrpark: Husqvarna Schaf 2WD
Stihl Fichtenmoped
31,32,50,55,66 Ford
31 Studebaker
47 Olds
70 Bird

Re: Afr data logger

Beitrag von f100 »

Gestern die letzten Teile bekommen, gleich fertig gelötet was sol ich sagen dank deiner super Anleitung sofort funktiuoniert :D

Danke, das einzige was ich noch gerne hätte ist ein unterdruck sensor falls du da eine Idee hättest

Gruss Peter
Benutzeravatar
Jogypilot
Beiträge: 78
Registriert: Mo 1. Jan 2018, 17:08
Fuhrpark: Mustang Coupe Bj. 65
Skoda Scala

Re: Afr data logger

Beitrag von Jogypilot »

Es freut mich, dass es funktioniert [emoji106].
Bei Vakuum müsste ich auch googeln.



Gesendet von meinem SM-A520F mit Tapatalk
Benutzeravatar
68GT500
Beiträge: 9553
Registriert: Do 13. Mär 2008, 20:37
Clubmitglied: Ja
Fuhrpark: - 64 Falcon Sprint
- 64 Falcon Squire
- 65 GT Convertible
- 65 K-Code Hardtop
- 66 T5 K-Code GT Convertible
- 68 GT 500
- 23 Tesla M3LR

Re: Afr data logger

Beitrag von 68GT500 »

f100 hat geschrieben:Gestern die letzten Teile bekommen, gleich fertig gelötet was sol ich sagen dank deiner super Anleitung sofort funktiuoniert :D

Danke, das einzige was ich noch gerne hätte ist ein unterdruck sensor falls du da eine Idee hättest

Gruss Peter
Hi Peter,

an meinem Shelby regelt ein Arduino die Unterdruckpumpe für Bremsunterstützung und Klima.

Nur 5 Teile notwendig:
- irgendein Arduino - habe einen Nano im Einsatz
- Ein MPX4250 Drucksensor - war halt da
- ein SSD1306 OLED Display - eine Anzeige ist immer sinnvoll
- Relay Board
- Buck converter - auf ca. 10V eingstellt

Kosten - keine €20.

Das Display ist nur zur Kontrolle da , kann nach der Kontrolle weg.
Der Code für das Display ist das einzige, was etwas komplexer ist.

Druck messen und in Abhängigkeit davon das Relais schalten ist ziemlich trivial.

Gerne poste ich den Code - falls Interesse.

mfg

Michael
IMG_20200922_112720.jpg
IMG_20200922_112720.jpg (35.58 KiB) 990 mal betrachtet
Kaum ist alles "Idioten-sicher" gemacht, schlägt die Evolution zu und liefert einen "besseren Idioten".
BildBildBild
Benutzeravatar
f100
Beiträge: 262
Registriert: Di 27. Sep 2016, 20:48
Fuhrpark: Husqvarna Schaf 2WD
Stihl Fichtenmoped
31,32,50,55,66 Ford
31 Studebaker
47 Olds
70 Bird

Re: Afr data logger

Beitrag von f100 »

Hallo Michael

danke meine Auto haben fast alle normale Nocken, und die ohne unterdruck haben keine servo/Klima :D

Gruss Peter
Benutzeravatar
68GT500
Beiträge: 9553
Registriert: Do 13. Mär 2008, 20:37
Clubmitglied: Ja
Fuhrpark: - 64 Falcon Sprint
- 64 Falcon Squire
- 65 GT Convertible
- 65 K-Code Hardtop
- 66 T5 K-Code GT Convertible
- 68 GT 500
- 23 Tesla M3LR

Re: Afr data logger

Beitrag von 68GT500 »

f100 hat geschrieben:Hallo Michael

danke meine Auto haben fast alle normale Nocken, und die ohne unterdruck haben keine servo/Klima :D

Gruss Peter

Hi Peter,

was soll denn der Sinn des Unterdruck Sensors sein ?

mfg

Michael
Kaum ist alles "Idioten-sicher" gemacht, schlägt die Evolution zu und liefert einen "besseren Idioten".
BildBildBild
Benutzeravatar
f100
Beiträge: 262
Registriert: Di 27. Sep 2016, 20:48
Fuhrpark: Husqvarna Schaf 2WD
Stihl Fichtenmoped
31,32,50,55,66 Ford
31 Studebaker
47 Olds
70 Bird

Re: Afr data logger

Beitrag von f100 »

hi Michael

würde gerne unterdruck vom Manifold mitloggen, wenn ich Vergaser eindüse fahr ich immer mit unterdruck anzeige
siehst wenns power valve aufgeht, wie AFR bei welchem HG

Peter
Antworten

Zurück zu „Technik“