Zum Inhalt springen

Open Source Prüfstandssoftware auf Basis von Arduino Mega und LabVIEW


chili023

Empfohlene Beiträge

Meine Plattine sitzt ja für die Klimamessung relativ ungünstig 30cm obern boden und wenns Blöd hergeht in der direkten Sonne,

habe mir jetzt als Backup, und weil meine Plattine für die Klimamessung total ungünstig liegt eine 2te Wetterstation gebaut.
besteht aus einem

 

1x Arduino Nano
1x BME280 Modul

1x LCD 16_2 Bildschirm

Stromversorgung über usb vom Rechner,
angezeigt wird
Temperatur
Feuchtigkeit
Druck

und der K-Faktor laut 70200

der Sketch ist so geschrieben dass sich Labview die Klimadaten auch direkt holen kann, muss man halt vorübergehend die entsprechende Schnittstelle einstellen...

den Sketch muss ich noch aufräumen dann kann ich den auch online stellen, wenn wer das nachbauen will:-)

nein das mit den Werten hohlen funktoiert doch nicht...
obwohl der arduino mit einem E schickt?
muss ich mir nichmal anschauen


 

DSC_0839.JPG

Bearbeitet von Werner Amort
Link zu diesem Kommentar
Auf anderen Seiten teilen

ja das LCD und der BME hängt an I2C...

momentan stehe ich echt aufm schlauch...

ich bekomme die Wetterdaten nicht in Labview...
muss ich mir nochmal ransetzten...

 

 

Wenns nur um die Wetterstation geht könnte man wohl einfach fürs Wetter eine andere Schnittstelle per Labview abfragen lassen, oder halt schnell selbst umschalten.
das denke ich ginge schon

fürs AFR...
denkst du es ist praktikabel 2 Schnittstellen Zeitgleich abzufragen?

keine ahnung ich kann das nicht abschätzen




 

Bearbeitet von Werner Amort
Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit zwei Schnittstellen hat Labview denke ich mal keine Probleme.

Ich möchte aber die Leistungsmessung so wenig wie möglich stören. Der Interne ADC ist doch eher langsam und ich will eigentliche keine Genauigkeit in der Leistungsmessung für die Lambdaauswertung opfern.

 

Für Manuelle Eingabe einfach im Reiter Klima auf Eingabe klicken.

 

Edit: ich würde die zweite (Lambda) schnittstelle auch nur alle 1000 rpm auswerten. Somit hätte der Nano Zeit sein ADC zu aktualisieren.

Bearbeitet von chili023
Link zu diesem Kommentar
Auf anderen Seiten teilen

ja genau bzw alle dot millis...

dann kannman im Tachomodus fahrn und hat immer alle 3 Uhren im visier

manuelle Eingabe klappt natürlich

 

ich wollte es aber nach möglichkeit direkt holen...

das klappt aber nur solange  bis ich meine LCD bibbio im Sketch aktiviere, obwohl das Klimeatelegramm auch dann noch ankommt...

im seriellen monitor

Ich verstehs grad net...

Bearbeitet von Werner Amort
Link zu diesem Kommentar
Auf anderen Seiten teilen

ja das hat aber nur solange funktioniert bis ich die LCD Library aktiviert habe...

ich hab das jetzt damit umschifft dass ich den LCD erst im Loop nach 2sekunden Starte.
zu dem Zeitpunkt ist die Klimaabfrage schon durch...
 

 String inputString = "";         // a string to hold incoming data
 boolean stringComplete = false;  // whether the string is complete
bool initial=true;
int p_cor = 0;              // Correction for BME280 Pressure Measurement in Pa
int t_cor = 0;
int h_cor = 0;

double Temp;
double P;
double Hum;
int Plcd;
float Kwert;
unsigned long millisekunden;

#include <stdint.h>
#include "SparkFunBME280.h"
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
#include <util/delay.h>


uint8_t grad[8]  = {B11100,B10100,B11100,B0000,B00000,B00000,B00000,B00000};



//Global sensor object
BME280 mySensor;
//----------LCD--------------
LiquidCrystal_I2C lcd(0x27,20,4); 




void setup() {
  // put your setup code here, to run once:
Serial.begin (115200);
  mySensor.settings.commInterface = I2C_MODE;
  mySensor.settings.I2CAddress = 0x76;
  mySensor.settings.runMode = 3; //Normal mode
  mySensor.settings.tStandby = 0;
  mySensor.settings.filter = 0;
  mySensor.settings.tempOverSample = 1;
  mySensor.settings.pressOverSample = 1;
  mySensor.settings.humidOverSample = 1;

    _delay_ms(10);
    mySensor.begin();
    _delay_ms(100);

                   

  lcd.createChar(0, grad); 

}

void loop() {
  // put your main code here, to run repeatedly:
 if (millis() > 2000 && initial==true ){
  lcd.init(); 
  lcd.createChar(0, grad);
  lcd.clear();
  lcd.backlight();
  initial = false;
 }
 
  
  Temp = mySensor.readTempC();
  Temp = Temp + t_cor;
  P = mySensor.readFloatPressure();
  P = P + p_cor;
  Hum = mySensor.readFloatHumidity();
  Hum = Hum + h_cor;




   if (Serial.available()>0) serialEvent();  

 if (stringComplete && inputString=="e" ){
      delay(10);

    mySensor.begin();
  delay(100);
    
 
    Serial.print(Temp, 1);
    Serial.print(";");
    Serial.print(P, 0);
    Serial.print(";");
    Serial.println(Hum, 1);
  stringComplete = false;

  



}

Kwert = (1013/(P/100))*pow(((273+Temp)/293),0.5);

Plcd = P/100;

if (millis() - millisekunden > 1000) {

  millisekunden = millis();

  lcd.setCursor(0,0);
         if ( Temp >0.00)
         {
          lcd.print(" ");
          }
          if ( Temp <10)
         {
          lcd.print(" ");
          }
  lcd.print(Temp,1);
  lcd.write(0);
  lcd.setCursor(8,0);
  if ( Plcd <1000)
         {
          lcd.print(" ");
          }
  lcd.print(Plcd); 
  lcd.print("mbar");     
  lcd.setCursor(0,1);
           if ( Hum <10)
         {
          lcd.print(" ");
          }
           if ( Hum <100)
         {
          lcd.print(" ");
          }
  lcd.print(Hum,1);  
  lcd.print("%"); 
  
  lcd.setCursor(9,1);
  lcd.print("K=");
  lcd.print(Kwert,3);      

}


}
void serialEvent() {
  while (Serial.available()) {
    
    char inChar = (char)Serial.read();
    if (inChar != '\n'){
      inputString = inChar;
      stringComplete = true;
    }
  }
}

das wäre mein aktueller Sketch...

wie gesagt, Klimabox besteht aus
I2C LCD 16_2 Display
ein I2C BME280 Modul
und einen Arduino Nano, oder Uno



 

Link zu diesem Kommentar
Auf anderen Seiten teilen

So gesehen könnte das wirklich ein Ansatz sein wie wir einen AFR Wert visualisiert bekommen...

der Mega Kümmert sich ausschließlich um die Leistungsmessung,  und AFR mach ein anderer Arduino an einem anderem Port?

meine Zweitklimabox tut jetzt übrigens,
man muss halt zwischenzeitlich die Schnittstelle umwählen.

desshalb aber das Display, dann sieht man ja wenn sich die Temperatur verändert hat und kann nachstellen, bzw sich die aktuellen Werte holen...

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 11 Stunden schrieb BugHardcore:

Nen 2. Com um die Klimadaten auszulesen (oder direkt den K-Faktor) sollte ein Kinderspiel sein.

 

 

evtl schafft es das Feature ja in ein zukünftiges Release:satisfied:

 

das wäre gewaltig

 

dassman für die Wetterdaten im Reiter eine andere Schnittstelle auswählen kann :-)

 

 

Diese Schnittstelle könnte im Anschluss dann auch AFR oder EGT Werte liefern.

 

Simple dyno hat das recht gut gelöst Finde ich 

da kannman die Ausgabe relativ frei einer Anzeige zuordnen und hinmapen.

 

Wobei was anderes als AFR evtl noch EGT brauchtman ja eh nicht...

 

mitloggen bei der Leistungsmessung fänd ich jetzt nichtmal unbedingt notwendig.

 

es wäre schon die Anzeige direkt auf dem Bildschirm goldwert....

 

 

 

Bearbeitet von Werner Amort
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 55 Minuten schrieb Werner Amort:

 

Wobei was anderes als AFR evtl noch EGT brauchtman ja eh nicht...

 

mitloggen bei der Leistungsmessung fänd ich jetzt nichtmal unbedingt notwendig.

 

es wäre schon die Anzeige direkt auf dem Bildschirm goldwert....

 

 

 

Das ist ein Punkt mit dem ich immer schon hadere. AFR und EGT mit in den Graphen aufzunehmen macht das ganze nur unübersichtlich und die Zusätzlichen Daten machen das Programm langsamer (wohl eher ein Problem mit alten Rechnern). Wirklich brauchen tut das als Kurve auch keiner.

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

genau!

eine Live anzeige im Tachomodus evtl auch während der Messung wäre für mich voll ausreichend...


bei einer Messung (aufreisen des Gashans ) ist doch eh nur AFR bei Peak aussagekräftig...
evtl könnte man den als einzelnen Wert aufm Diagramm vermerken...

für den Nadelbereich muss man im Tachomodus rumfahrn und die Werte deuten

da reich dann auch die Live anzeige, vorausgesetzt die Rolle ist schwer genug...

Bearbeitet von Werner Amort
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Hab heute ein bissl mit SimpleDnyo gespielt...screenshot.thumb.JPG.a732d1f7c2b172412a73f7ed5d8de44a.JPG

 

 


Simple Dyno visualisiert mir den AFR Wert anhand dem Eingang A5 vom Arduino...

 


Bin vorhin extra zur Rolle gelaufen, die 2 Programme stören sich nicht und können scheinbar nebeneinand laufen.
Die 2 Anzeigen von SimpleDyno bleiben praktischerweise immer im Vordergrund. So kann man normal mit Labview arbeiten und die Afr Anzeige bleibt im Vordergrund...



Mein Plan wäre jetzt

ein weiterer Arduino
eine Konstantspannungsquelle an Vref
meinen Kontroller mit 0-5 Ausgang an den Arduino
und den Sketch so umschreiben dass er sich beim AnalogRead an Vref orientiert...


Wenn die Hardware mal steht ist es dann ja ein leichtes den Arduino Sketch so umzuschreiben das Labview damit klarkommt...
 

Bearbeitet von Werner Amort
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Werner Amort:

ein weiterer Arduino
eine Konstantspannungsquelle an Vref
meinen Kontroller mit 0-5 Ausgang an den Arduino
und den Sketch so umschreiben dass er sich beim AnalogRead an Vref orientiert...
 

Ich hab mal (mit nem Controllino allerdings) damit rumgespielt.

2 Netzteile:

Eins an Vin und eins an A0. Mit dr Spannung an Vin über den ganzen Bereich gespielt, an A0 konstant die gleiche Spannung.

Der Eingang zeigte immer das gleiche...

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab mir jetzt mal einen Lt1021ccn8-5 als Referenzspannungsquelle geordert.

die kommt dann an einen Nano.
Versorgt wird der nano mit einenm kleinen StepDown Wandler
https://www.ebay.it/itm/Mini-360-Buck-DC-DC-Convertitore-Step-Down-Modulo-4-75-23V-to-1-17V/223053828240?ssPageName=STRK%3AMEBIDX%3AIT&amp;_trksid=p2057872.m2749.l2649

 

alles  zusammen kommt in meine Lambda Kontroller Tasche.

dann kann ich den Nano zur Visualisierung einfach an den PC anstöpseln.

so zumindest der Plan

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

https:trr//hackingmajenkoblog.wordpress.com/2016/02/01/making-accurate-adc-readings-on-the-arduino/

ich habe jetzt mal versucht den Sketch umzuschreiben,

Damit soll sich der Arduino an der internen Referenzspannung orientieren und die Ausgabe dementspechend korrigieren :-)

 

Zitat

// idee von https:trr//hackingmajenkoblog.wordpress.com/2016/02/01/making-accurate-adc-readings-on-the-arduino/

int vcc;
int A5read;
int A5cor;
int radcv;

long readVcc() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
//  result = 1125300L / result; // Back-calculate AVcc in mV
result = 1110000L / result; // Wert angepasst...
  return result;
}

void setup() {
  Serial.begin(9600);
}

void loop() {
vcc= ( readVcc() );
radcv= map(vcc,0,5000,0,1023);
A5read=analogRead(A5);
A5cor=map(A5read,0,1023,0,radcv);

  Serial.print ("0,0,0,0,0,0,0,0,0,");
  Serial.print (map(A5cor,0,1023,0,5000));
  Serial.print (",");
  Serial.println (A5cor);

  Serial.flush();
  delay(1);
}


scheint soweit zu funktionieren, und die Externe Referenzspannung würde entfallen

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...

Habe jetzt schon ein paar mal bei chili die Prüfstandssoftware testen müssen. Sehr geil was Ihr da auf die Beine gestellt habt! :cheers:

 

Mich stört allerdings noch, dass ich nach jedem Lauf neu Speichern nun Namen vergeben muss.

 

Mein Traum wäre eine halbe Automatisierung so wie ich immer messe. Nämlich drei Läufe direkt hintereinander ohne eine neue Datei speichern zu müssen:

- Einstellbare Temperatur (Kühlrippensensor oder Wassertemp) welche dem Fahrer ein "GO" sinalisiert

- Fahrer muss dann Hochbeschleunigen, Runterbremsen warten bis die Temperatur wieder i.O. ist.

Als Ausgabe dann als

Test1.1

Test1.2

Test1.3

Test1av (Mittelung)

 

Nur als Anregung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 30 Minuten schrieb Tim Ey:

Habe jetzt schon ein paar mal bei chili die Prüfstandssoftware testen müssen. Sehr geil was Ihr da auf die Beine gestellt habt! :cheers:

 

Mich stört allerdings noch, dass ich nach jedem Lauf neu Speichern nun Namen vergeben muss.

 

Mein Traum wäre eine halbe Automatisierung so wie ich immer messe. Nämlich drei Läufe direkt hintereinander ohne eine neue Datei speichern zu müssen:

 

Hallo

Dem würde ich mich gerne anschließen. Hab nun auch einiges getestet und bin auch sehr begeistert :cheers:aber das mit dem einzeln Speichern ist wirklich nicht optimal. Ich mache auch immer 3. Läufe nacheinander und da wäre es schön wenn diese zügig nacheinander ablaufen können.

Ein Bekannter hat auch einen eigenen Prüfstand gebaut inkl. Software und Wirbelstrombremse, dort gefällt mir der Messablauf sehr gut. Anfang läuft genau so ab mit Übersetzung und Klimadaten ausmessen und anschließend beginnt die Messung, sobald die Drehzahl wieder abfällt wird die Messung beendet und die Software bremst mittels Wirbelstrombremse Automatisch auf die Eingestellte Startdrehzahl, der zweite Lauf kann sofort gemacht werden, anschließend der Dritte. Am Ende werden alle drei Kurven sofort in einem Diagramm angezeigt und Automatisch mit Datum und Zeit abgespeichert. Das mit der Wirbelstrombremse ist natürlich Luxus aber denn Ablauf ansich finde ich optimal.

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja da schließe ich mich an.

 

Evlt könne man das mit einem zusätzlichen Button lösen.

 

Der speichern Button, wie gehabt.

Plus ein Zusätzlicher, welche mit dem letzten gewählten Dateinahmen abspeichert gefolgt von einer fortlaufenden Nummer...

 

oder so.wenn Labview soeine Funktion hergibt?
Dann müsste man an der Oberfläche nicht zuviel verändern...
aber wie gesagt keine Ahnung ob Labview die Option hergibt.

Bearbeitet von Werner Amort
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...

Hallo Leute,

hab mir im Sommer einen Prüfstand gebaut und verwendete zunächst SimpleDyno bis ich auf die LabView Software stoß.

Großes Lob hierfür, ist echt toll geworden!

 

SimpleDyno verwende ich zur Zeit für die Anzeige von Lufttemperatur, Luftdruck und Zündkerzentemperatur (AD8495 Breakout). Die Klimawerte geb ich immer manuell ein.

Will auf BME280 und, wenn implementiert, MAX31855 für die Zündkerzentemperatur umsteigen.

 

Habe nun nachdem ich den BME280 Sensor angeschlossen habe folgenden Fehler beim Upload des Sketches:

 

Zitat

Arduino: 1.8.7 (Windows Store 1.8.15.0) (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

MEGA_PSTfreq_BME280_v1:108:1: error: 'BME280' does not name a type

 BME280 mySensor;

 ^

C:\Users\hanne\Documents\DIYDYNO\LabVIEWDyno\v2.0.1\Arduino\MEGA_PSTfreq_BME280_v1\MEGA_PSTfreq_BME280_v1.ino: In function 'void BME280()':

MEGA_PSTfreq_BME280_v1:126:5: error: 'mySensor' was not declared in this scope

     mySensor.begin();

     ^

MEGA_PSTfreq_BME280_v1:131:3: error: 'mySensor' was not declared in this scope

   mySensor.readRegister(BME280_CHIP_ID_REG);

   ^

C:\Users\hanne\Documents\DIYDYNO\LabVIEWDyno\v2.0.1\Arduino\MEGA_PSTfreq_BME280_v1\MEGA_PSTfreq_BME280_v1.ino: In function 'void setup()':

MEGA_PSTfreq_BME280_v1:227:3: error: 'mySensor' was not declared in this scope

   mySensor.settings.commInterface = I2C_MODE;

   ^

Multiple libraries were found for "SparkFunBME280.h"
 Used: C:\Users\hanne\Documents\Arduino\libraries\SparkFun_BME280_Arduino_Library-master
 Not used: C:\Users\hanne\Documents\Arduino\libraries\SparkFun_BME280
 Not used: C:\Users\hanne\Documents\Arduino\libraries\SparkFun_BME280
 Not used: C:\Users\hanne\Documents\Arduino\libraries\SparkFun_BME280
 Not used: C:\Users\hanne\Documents\Arduino\libraries\SparkFun_BME280
exit status 1
'BME280' does not name a type

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
 

 

 

Dieser Fehler "BME280 does not name a type" kommt jedes mal.

Habe den Sensor schon entfernt und auch den Sketch neu von github downgeloaded.

 

Kann mir jemand helfen?

 

LG Hannes

 

 

edit: Nachdem ich die Libraries gelöscht und neu installiert habe kommt nur noch folgende Fehlermeldung:

 

Zitat

Arduino: 1.8.7 (Windows Store 1.8.15.0) (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

Build options changed, rebuilding all
MEGA_PSTfreq_BME280_v1:108:1: error: 'BME280' does not name a type

 BME280 mySensor;

 ^

C:\Users\hanne\Documents\DIYDYNO\LabVIEWDyno\v2.0.1\Arduino\MEGA_PSTfreq_BME280_v1\MEGA_PSTfreq_BME280_v1.ino: In function 'void BME280()':

MEGA_PSTfreq_BME280_v1:126:5: error: 'mySensor' was not declared in this scope

     mySensor.begin();

     ^

MEGA_PSTfreq_BME280_v1:131:3: error: 'mySensor' was not declared in this scope

   mySensor.readRegister(BME280_CHIP_ID_REG);

   ^

C:\Users\hanne\Documents\DIYDYNO\LabVIEWDyno\v2.0.1\Arduino\MEGA_PSTfreq_BME280_v1\MEGA_PSTfreq_BME280_v1.ino: In function 'void setup()':

MEGA_PSTfreq_BME280_v1:227:3: error: 'mySensor' was not declared in this scope

   mySensor.settings.commInterface = I2C_MODE;

   ^

exit status 1
'BME280' does not name a type

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
 

 

Bearbeitet von hanni-piston
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

danke für deine schnelle Antwort.

Die Libraries habe ich so wie es in der Dokumentation steht hinzugefügt. Würden die Fehlen, würde ja eine Fehlermeldung kommen das sie nicht gefunden werden.

Oder meinst du etwas anderes?

 

 

LabView funktioniert auch noch, ich kann aber keinen neuen Sketch auf das Arduino spielen, da immer die Fehlermeldung kommt.

 

LG Hannes

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
  • Wer ist Online   0 Benutzer

    • Keine registrierten Benutzer online.



×
×
  • Neu erstellen...

Wichtige Information