Go Down

Topic: FIS für Motorrad (Read 22973 times) previous topic - next topic

Aceli

#90
Aug 11, 2018, 01:20 pm Last Edit: Aug 14, 2018, 01:57 pm by Aceli
Hallo

ich muss für die Sensoren dann wohl noch ein 3 kOhm besorgen.
finde aber leider nirgends einen mit den werten die du meinst.
höchstens einen mit 25 ppm.
aber da es bei mir ja nicht soooo genau sein muss ( keine komma stellen) denke sollte einer mit den 25 ppm und 0,1% reichen? oder evtl dann doch mit 1 %!?


Habe dann heute mal geschaut ob ich das soweit verstanden habe , und mal einen zweiten sensor eingefügt in den Sketch.
würde das so passen!?
Quote
#define MESSFUEHLER1 A0  // Messfühler1
#define MESSFUEHLER2 A1  // Messfühler2
#define EINZELMESSUNGEN1 25  // Das verändern der Zahl ändert auch die Anzahl der Einzelmessungen.
#define EINZELMESSUNGEN2 25
#define A_2 1.401592401e-03   // A-Koeffizient des Messfühlers
#define B_2 2.375252635e-04   // B-Koeffizient des Messfühlers
#define C_2 0.9880580930e-07  // C-Koeffizient des Messfühlers
#define A_3 1.401592401e-03   // A-Koeffizient des Messfühlers
#define B_3 2.375252635e-04   // B-Koeffizient des Messfühlers
#define C_3 0.9880580930e-07  // C-Koeffizient des Messfühlers
#define FESTWIDERSTAND_2 3000  // Widerstandswert des Serienfestwiderstandes des Messfühlers
#define FESTWIDERSTAND_3 3000 // Widerstandswert des Serienfestwiderstandes des Messfühlers
uint16_t SUM_EM_2[EINZELMESSUNGEN1];
uint16_t SUM_EM_3[EINZELMESSUNGEN2];
void setup(void) {
  Serial.begin(9600);
}
void loop(void) {
  uint8_t i;
  float DURCHSCHNITT_2;
  float R2_2, lnR2_2;
  float TEMP_2;
  float DURCHSCHNITT_3;
  float R2_3, lnR2_3;
  float TEMP_3;
// Hier werden die Einzelmessungen des Messfühlers vorgenommen.
// Zwischen den Messungen gibt es eine Wartezeit von 10 Millisekunden.
   
  for (i=0; i< EINZELMESSUNGEN1; i++) {
   SUM_EM_2 = analogRead(MESSFUEHLER1);
   delay(10);
   for (i=0; i< EINZELMESSUNGEN2; i++) {
   SUM_EM_3 = analogRead(MESSFUEHLER2);
   delay(10);
  }
// Berechnung des Durchschnittswertes aller Einzelmessungen des Messfühlers.
   
  DURCHSCHNITT_2 = 0;
  for (i=0; i< EINZELMESSUNGEN1; i++) {
     DURCHSCHNITT_2 += SUM_EM_2;
  DURCHSCHNITT_3 = 0;
  for (i=0; i< EINZELMESSUNGEN2; i++) {
     DURCHSCHNITT_3 += SUM_EM_3;
  }
  DURCHSCHNITT_2 /= EINZELMESSUNGEN1;
  DURCHSCHNITT_3 /= EINZELMESSUNGEN2;
// Berechnung der Temperatur mit Steinhart-Hart Gleichung
  R2_2 = FESTWIDERSTAND_2* (1023.0 / (float)DURCHSCHNITT_2 - 1.0);
  lnR2_2 = log(R2_2);
  TEMP_2 = (1.0 / (A_2 + B_2*lnR2_2 + C_2*lnR2_2*lnR2_2*lnR2_2));  // Steinhart-Hart Gleichung. T  = 1 / {A + B[ln(R)] + C[ln(R)]^3}
  TEMP_2 =  TEMP_2 - 273.15;
  R2_3 = FESTWIDERSTAND_3* (1023.0 / (float)DURCHSCHNITT_3 - 1.0);
  lnR2_3 = log(R2_3);
  TEMP_3 = (1.0 / (A_3 + B_3*lnR2_3 + C_3*lnR2_3*lnR2_3*lnR2_3));  // Steinhart-Hart Gleichung. T  = 1 / {A + B[ln(R)] + C[ln(R)]^3}
  TEMP_3 =  TEMP_3 - 273.15;
// Der nachfolgende Teil sendet die Daten zusätzlich über den seriellen Port.
  Serial.print("Temperatur:     ");
  Serial.print(TEMP_2);          // Hier wird der Temperaturwert des Messfühlers vom Arduino an den seriellen Port gesendet.
  Serial.println(" °C");
  Serial.println();
  Serial.print("Temperatur2:     ");
  Serial.print(TEMP_3);          // Hier wird der Temperaturwert des Messfühlers vom Arduino an den seriellen Port gesendet.
  Serial.println(" °C");
  Serial.println();
// Nach 5 Sekunden Wartezeit wird eine neue Messung der Temperaturen vorgenommen.
  delay(5000);
}

[/td][/tr][/table]

Aceli

#91
Aug 14, 2018, 01:58 pm Last Edit: Aug 14, 2018, 01:59 pm by Aceli
Moin

so bin gerade zuhause angekommen, wollte gleich mal das testen.
leider kommt dieses


Quote
sketch_aug06a:30: error: incompatible types in assignment of 'int' to 'uint16_t [25] {aka unsigned int [25]}'

   SUM_EM_2 = analogRead(MESSFUEHLER1);

            ^

sketch_aug06a:33: error: incompatible types in assignment of 'int' to 'uint16_t [25] {aka unsigned int [25]}'

   SUM_EM_3 = analogRead(MESSFUEHLER2);

            ^

sketch_aug06a:40: error: invalid use of non-lvalue array

     DURCHSCHNITT_2 += SUM_EM_2;

                    ^

sketch_aug06a:40: error: in evaluation of 'operator+=(float, uint16_t [25] {aka unsigned int [25]})'

sketch_aug06a:43: error: invalid use of non-lvalue array

     DURCHSCHNITT_3 += SUM_EM_3;

                    ^

sketch_aug06a:43: error: in evaluation of 'operator+=(float, uint16_t [25] {aka unsigned int [25]})'

sketch_aug06a:67: error: expected '}' at end of input

}

^

sketch_aug06a:67: error: expected '}' at end of input

exit status 1
incompatible types in assignment of 'int' to 'uint16_t [25] {aka unsigned int [25]}'
habt ihr evtl eine idee? probiere weiter


postmaster-ino

#92
Aug 14, 2018, 05:48 pm Last Edit: Aug 14, 2018, 06:59 pm by postmaster-ino
Hi

Du versuchst einen Messwert auf einen Zeiger zu packen.
Du möchtest SUM_EM_2[ i ] an dieser Stelle benutzen (SUM_EM_2 ist 'nur' der Zeiger auf den Anfang des Array SUM_EM_2[0...24])

Gleiches probierst Du mit den Durchschnitts-Variablen - Du versuchst, die Zeiger auf Deine Durchschnittswerte aufzuaddieren.
Denke, Du möchtest auch hier alle Einzelwerte zusammen rechnen und dann durch die Anzahl der Einzelwerte zu teilen.

Wenn Du [ i ] auch bei den Durchschnittswerten benutzt, bist Du schon auf dem richtigen Weg - hatte Da wohl einen Knoten im Hirn.

Und Dir fehlt wohl eine Klammer irgendwo.

Drück Mal STRG+T in der IDE und schaue, welche Klammern akut wie zusammen gehören - irgendwo fehlt Eine!
Am Ehesten dort, wo Du zuletzt was geändert hast.

Der Kompiler rechnet sich aus, welche Klammer zu Welcher gehört - Das muß nicht mit Deinen Gedanken überein stimmen ;)

Wenn Du mit dem Cursor auf eine Klammer gehst, wird Dir in der IDE die erkannte Gegen-Klammer gezeigt.

MfG

*edit*
[ i ] macht ohne Leerzeichen was gaaanz Anderes hier im Forum, als im Arduino ;)
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 ...

Aceli

okay besten dank.

klammer problem behoben... aber das andere verstehe ich noch nicht ganz....

wie kann ich das ändern?

und was genau meinst du mit, "Denke, Du möchtest auch hier alle Einzelwerte zusammen rechnen und dann durch die Anzahl der Einzelwerte zu teilen."

sind ja zwei eigenständige sensoren die unterschiedliche Werte anzeigen.

Aceli

#94
Aug 14, 2018, 09:13 pm Last Edit: Aug 14, 2018, 10:03 pm by Aceli
Dein edit muss ich mir dann nochmal genauer anschauen ..... glaub so ganz hab ich das noch nicht durch .

Weil der Sketch mit einem Messfühler doch normal funktioniert .... dachte ich hätte da nicht viel verändert

Quote
#define MESSFUEHLER1 A0  // Messfühler1
#define MESSFUEHLER2 A1  // Messfühler2
#define EINZELMESSUNGEN1 25  // Das verändern der Zahl ändert auch die Anzahl der Einzelmessungen.
#define EINZELMESSUNGEN2 25
#define A_2 1.401592401e-03   // A-Koeffizient des Messfühlers
#define B_2 2.375252635e-04   // B-Koeffizient des Messfühlers
#define C_2 0.9880580930e-07  // C-Koeffizient des Messfühlers
#define A_3 1.401592401e-03   // A-Koeffizient des Messfühlers
#define B_3 2.375252635e-04   // B-Koeffizient des Messfühlers
#define C_3 0.9880580930e-07  // C-Koeffizient des Messfühlers
#define FESTWIDERSTAND_2 3000  // Widerstandswert des Serienfestwiderstandes des Messfühlers
#define FESTWIDERSTAND_3 3000 // Widerstandswert des Serienfestwiderstandes des Messfühlers
uint16_t SUM_EM_2[EINZELMESSUNGEN1];
uint16_t SUM_EM_3[EINZELMESSUNGEN2];
void setup(void) {
  Serial.begin(9600);
}
void loop(void) {
  uint8_t i;
  float DURCHSCHNITT_2;
  float R2_2, lnR2_2;
  float TEMP_2;
  float DURCHSCHNITT_3;
  float R2_3, lnR2_3;
  float TEMP_3;
  // Hier werden die Einzelmessungen des Messfühlers vorgenommen.
  // Zwischen den Messungen gibt es eine Wartezeit von 10 Millisekunden.

  for (i = 0; i < EINZELMESSUNGEN1; i++) {
    SUM_EM_2 = analogRead(MESSFUEHLER1);
    delay(10);
    for (i = 0; i < EINZELMESSUNGEN2; i++)
      SUM_EM_3 = analogRead(MESSFUEHLER2);
      delay(10);
    }
    // Berechnung des Durchschnittswertes aller Einzelmessungen des Messfühlers.

    DURCHSCHNITT_2 = 0;
    for (i = 0; i < EINZELMESSUNGEN1; i++) {
      DURCHSCHNITT_2 += SUM_EM_2;
    }
      DURCHSCHNITT_3 = 0;
    for (i = 0; i < EINZELMESSUNGEN2; i++) {
      DURCHSCHNITT_3 += SUM_EM_3;
      }
      DURCHSCHNITT_2 /= EINZELMESSUNGEN1;
      DURCHSCHNITT_3 /= EINZELMESSUNGEN2;
      // Berechnung der Temperatur mit Steinhart-Hart Gleichung
      R2_2 = FESTWIDERSTAND_2 * (1023.0 / (float)DURCHSCHNITT_2 - 1.0);
      lnR2_2 = log(R2_2);
      TEMP_2 = (1.0 / (A_2 + B_2 * lnR2_2 + C_2 * lnR2_2 * lnR2_2 * lnR2_2)); // Steinhart-Hart Gleichung. T  = 1 / {A + B[ln(R)] + C[ln(R)]^3}
      TEMP_2 =  TEMP_2 - 273.15;
      R2_3 = FESTWIDERSTAND_3 * (1023.0 / (float)DURCHSCHNITT_3 - 1.0);
      lnR2_3 = log(R2_3);
      TEMP_3 = (1.0 / (A_3 + B_3 * lnR2_3 + C_3 * lnR2_3 * lnR2_3 * lnR2_3)); // Steinhart-Hart Gleichung. T  = 1 / {A + B[ln(R)] + C[ln(R)]^3}
      TEMP_3 =  TEMP_3 - 273.15;
      // Der nachfolgende Teil sendet die Daten zusätzlich über den seriellen Port.
      Serial.print("Temperatur:     ");
      Serial.print(TEMP_2);          // Hier wird der Temperaturwert des Messfühlers vom Arduino an den seriellen Port gesendet.
      Serial.println(" °C");
      Serial.println();
      Serial.print("Temperatur2:     ");
      Serial.print(TEMP_3);          // Hier wird der Temperaturwert des Messfühlers vom Arduino an den seriellen Port gesendet.
      Serial.println(" °C");
      Serial.println();
      // Nach 5 Sekunden Wartezeit wird eine neue Messung der Temperaturen vorgenommen.
      delay(5000);
    }
edit:
habs mir angeschaut und den fehler wohl gefunden.
nur leider wird aktuell doch nur ein Wert ausgespuckt.
Temperatur : 41,02 C
(dann leer Zeile)
Temperatur : 41,02 C

werde mich dann morgen wohl nochmal ransetzen

noiasca

a) verwende für Code code tags nicht quote tags

b)
bei
Code: [Select]

for (i = 0; i < EINZELMESSUNGEN1; i++) {
    SUM_EM_2 = analogRead(MESSFUEHLER1);
    delay(10);
    for (i = 0; i < EINZELMESSUNGEN2; i++)
      SUM_EM_3 = analogRead(MESSFUEHLER2);
      delay(10);
    }


ist die SUM_EM_3 Berechnung innerhalb der SUM_EM_2 Berechnung und wird daher 25 x 25 mal durchgeführt. Willst du das wirklich?
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Aceli

Okay also ausklammern und extra machen ?!!

Sehe gerade das es wohl mit Copy Paste da irgendwas nicht richtig will ....

postmaster-ino

Hi

Du musst Das so hinschreiben, wie Du Das machen willst.
Ich kann mir nur halbwegs zusammen reimen, was Dein Sketch machen soll, eben durch die Anweisungen, Die Du darin verteilt hast.

C&P hat jeder hier zu Anfang wohl 'programmiert' - aber man sollte sehen, daß man da recht schnell von weg kommt - also verstehen lernen, was Du Da 'programmiert hast'.
Dann kannst Du Dir auch selber helfen, da Du im Kopf 'durchgehen kannst', was in dem Sketch passiert.

Wird aber wohl werden.

MfG
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 ...

Aceli

Da hast du vollkommen recht .....

Meinte c&p von dem Sketch bei mir ( der lief ) zu dem im Forum ( den ich gepostet hatte )

Aber verstehen Versuch ich das schon .....

Habe es mittlerweile soweit , das zwei verschiedene Temperaturen angezeigt werden . Nur leider , wenn ich einen erwärme , geht die Temperatur runter :/ da muss ich noch mal schauen wo der Hund begraben ist

Aceli

Werte ändern sich nun in die richtige Richtung . Soweit so gut .

RTC ist angekommen . Das wird das nächste :)

Mein nextion Display lässt leider auf sich warten .

Aceli

RTC läuft und hat aktuelles Datum und Uhrzeit und hällt diese.

Hatte schon etwas getestet mit der Einbindung in den anderen Sketch . Leider erfolglos .

Hat jemand einen Ansatz ?! Oder Idee ?


Gruß

Aceli

#101
Aug 17, 2018, 06:35 pm Last Edit: Aug 17, 2018, 06:36 pm by Aceli
Die zwei Sensoren inkl DS18B20 laufen :)

Bisschen an den Einstellungen noch Pfeilen . Werte Stimmen noch nicht überein .

Kur den RTC einzubinden is schwieriger als ich dachte :/

postmaster-ino

Hi

Was für eine RTC?
Bei einer DS3231 sind's nur ein paar I2C-ABfragen und Du hast die Uhrzeit ausgelesen (also auch ohne Library)

MfG
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 ...

Aceli

Ja genau .
Ds3231.
Ah ja....

postmaster-ino

Hi

Schau Dir an, wie die Zusatz-Infos bei der RTC ausgelesen werden.
Dieser I2C-Scanner wurde hier im Forum vorgestellt.
Der dortige Quell-Link ist aber down.

Ich habe Den als 'I2C_dump_scanner' auf Platte.(mit eingefügtem Code >9000 Zeichen - also bitte dem Link folgen und dort die Abfragen zur Uhr abkupfern)

MfG
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 ...

Go Up