Kofferneigung im Fahrerhaus anzeigen

alles, was nicht in die übrigen Technik-Kategorien passt

Moderator: Moderatoren

Nachricht
Autor
Benutzeravatar
RobertH
süchtig
Beiträge: 852
Registriert: 2006-10-12 20:14:24
Wohnort: LOS<->MEI

Re: Kofferneigung im Fahrerhaus anzeigen

#61 Beitrag von RobertH » 2021-11-08 13:09:29

Ich hab sowas vor einer Weile auch mal mit dem MPU-6050 angefangen, dann aber aus Zeitmangel liegen lassen.
Ich hatte ein 128x64er Grafikdisplay auf dem ich eine Libelle dargestellt habe.
Hat auf dem Breadboard sogar funktioniert, aber als ich das Ganze dann in ein Gehäuse basteln wollte war grad mal wieder ein anderes Projekt wichtiger.

Viele Grüße
Robert

grijo
süchtig
Beiträge: 837
Registriert: 2007-01-22 17:33:29
Wohnort: Raum Esslingen

Re: Kofferneigung im Fahrerhaus anzeigen

#62 Beitrag von grijo » 2021-11-08 17:39:17

Hier gibt es etwas fertiges mit Bluetooth und App

https://www.wit-motion.com/6-axis/witmo ... h-2-0.html

Benutzeravatar
hugepanic
abgefahren
Beiträge: 2403
Registriert: 2018-06-24 20:13:55

Re: Kofferneigung im Fahrerhaus anzeigen

#63 Beitrag von hugepanic » 2021-11-10 20:37:53

so, hier nochmal die "fast" bauanleitung, für denjenigen der sich sowas selbst basteln will:

Einkaufsliste:
Arduno UNO (oder ein clon)
1602 display shield
MP-6050 Sensor
Kabel, je nach bedarf. Ich hab das ganze mit RJ-12 buchsen und 10m kabel verlegt.

Werkzeug:
-Lötkolben
-Multimeter
-PC mit Arduino IDE (und den Libraries für`s Shield installiert)


Anleitung:
-Stromversorgung für den Arduino beschreibe ich nicht, das ist bei jedem anders. Er akzeptiert alles zwischen 6 und 20V. Wer also 12V irgendwo rumliegen hat, kann das wunderbar verwenden.
-Das Display shield auf den Arduino aufsetzen
-Den Sensor mit dem Arduino verkabeln! Achtung: Durch das DisplayShield sind die origina-pins des arduino nichtmehr zu erreichen. Diese werden aber ans Shield durchgereicht, können also bequem am Shield angelötet werden
-Dann den Arduino mit dem PC verbinden und den code compilieren und hochladen
-Beim starten des scripts wird im Terminal des PC´s die Fehlerwerte des sensors ausgegeben. Diese sind in das script an markierter position einzugragen (GyroErrorX, GyroErrorY, GyroErrorZ, AccErrorX und AccErrorY)


Verkabelung:
Bild


Funktion:
Der Arduino zeigt die Neigung der PITCH achse im Display an. Mit drücken der "up" taste kann das ergebnis auch "genullt" werden. Hier kann jeder nach seinem einbau auch selbst einen fixen offset-wert eintragen! Das liegt an euch....

Viel Spaß


Code

Code: Alles auswählen

#include <Wire.h>
#include <LiquidCrystal.h>


const int MPU = 0x68; // MPU6050 I2C address
float AccX, AccY, AccZ;
float GyroX, GyroY, GyroZ;
float accAngleX, accAngleY, gyroAngleX, gyroAngleY, gyroAngleZ;
float roll, pitch, yaw;
float AccErrorX, AccErrorY, GyroErrorX, GyroErrorY, GyroErrorZ;
float elapsedTime, currentTime, previousTime;
int c = 0;

const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


int button = 0;
float angleoffset = 0;

int rest = 0;



byte p2[8] = {
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000
};

byte p4[8] = {
  0b11000,
  0b11000,
  0b11000,
  0b11000,
  0b11000,
  0b11000,
  0b11000,
  0b11000
};

byte p6[8] = {
  0b11100,
  0b11100,
  0b11100,
  0b11100,
  0b11100,
  0b11100,
  0b11100,
  0b11100
};

byte p8[8] = {
  0b11110,
  0b11110,
  0b11110,
  0b11110,
  0b11110,
  0b11110,
  0b11110,
  0b11110
};


byte p10[8] = {
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111
};

byte n2[8] = {
  0b00001,
  0b00001,
  0b00001,
  0b00001,
  0b00001,
  0b00001,
  0b00001,
  0b00001
};


byte n4[8] = {
  0b00011,
  0b00011,
  0b00011,
  0b00011,
  0b00011,
  0b00011,
  0b00011,
  0b00011
};

byte n6[8] = {
  0b00111,
  0b00111,
  0b00111,
  0b00111,
  0b00111,
  0b00111,
  0b00111,
  0b00111
};

byte n8[8] = {
  0b01111,
  0b01111,
  0b01111,
  0b01111,
  0b01111,
  0b01111,
  0b01111,
  0b01111
};



void setup() {
  Serial.begin(115200);
  Wire.begin();                      // Initialize comunication
  Wire.beginTransmission(MPU);       // Start communication with MPU6050 // MPU=0x68
  Wire.write(0x6B);                  // Talk to the register 6B
  Wire.write(0x00);                  // Make reset - place a 0 into the 6B register
  Wire.endTransmission(true);        //end the transmission

  // Call this function if you need to get the IMU error values for your module

  calculate_IMU_error();



  lcd.createChar(3, p10);



  delay(20);


  lcd.begin(16, 2);
  lcd.clear();

}

void loop() {
  button = analogRead(A0);


  get_angle();
  pitch = pitch - angleoffset;
  draw_angles2();



  // Print the values on the serial monitor
  /*
    Serial.print(roll);
    Serial.print("/");
    Serial.print(pitch);
    Serial.print("/");
    Serial.println(yaw);

  */

  Serial.println(button);

  if (button == 639) {
    get_angle();
    angleoffset = pitch;
  }

  delay(200);
}



void draw_angles2() {
  lcd.clear();

  rest = 10 * (pitch - int(pitch));


  if (rest <= -8) {
    lcd.createChar(4, n8);
  }
  else if (rest <= -6) {
    lcd.createChar(4, n6);
  }
  else if (rest <= -4) {
    lcd.createChar(4, n4);
  }
  else if (rest <= -2) {
    lcd.createChar(4, n2);   //n2
  }
  else if (rest <= 2) {
    lcd.createChar(4, p2);
  }
  else if (rest <= 4) {
    lcd.createChar(4, p4);
  }
  else if (rest <= 6) {
    lcd.createChar(4, p6);
  }
  else if (rest <= 8) {
    lcd.createChar(4, p8);
  }

  //delay(50);


  if (pitch < 0) {
    if (rest <= -2) {
      lcd.setCursor(7 + int(pitch), 0);
      lcd.write(4);
    }
    if (pitch < -1) {
      for (int i = 8 + int(pitch); i <= 7; i++) {
        lcd.setCursor(i, 0);
        lcd.write(3);
      }
    }
  }
  else {   //pitch >0

    if (rest >= 2) {
      lcd.setCursor(8 + int(pitch), 0);
      lcd.write(4);
    }
    if (pitch > 1) {
      for (int i = 8; i <= 7 + int(pitch); i++) {
        lcd.setCursor(i, 0
        lcd.write(3);
      }

    }

  }

  lcd.setCursor(0, 1);
  lcd.print("Angle: ");

  //  lcd.print(rest);

  if (pitch < 0) {
    lcd.setCursor(7, 1);
  }
  else {
    lcd.setCursor(8, 1);
  }
  lcd.print(0.1 * int(pitch * 10));
  //lcd.print(pitch);

}


void draw_angles() {
  lcd.clear();
  //  lcd.setCursor(0, 0);


  if (pitch < 0) {
    for (int i = 7 + int(pitch * 2); i <= 7; i++) {
      lcd.setCursor(i, 0);
      lcd.print("#");
    }
  }
  else {   //pitch >0
    for (int i = 7; i <= 7 + int(pitch * 2); i++) {
      lcd.setCursor(i, 0);
      lcd.print("#");
    }

  }

  lcd.setCursor(0, 1);
  lcd.print("Pitch: ");

  if (pitch < 0) {
    lcd.setCursor(7, 1);
  }
  else {
    lcd.setCursor(8, 1);
  }
  lcd.print(0.1 * int(pitch * 10));
  //lcd.print(pitch);

}


void print_angles() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Roll: ");
  lcd.setCursor(8, 0);
  lcd.print(roll);

  lcd.setCursor(0, 1);
  lcd.print("Pitch: ");
  lcd.setCursor(8, 1);
  lcd.print(pitch);
}

void get_angle() {


  // === Read acceleromter data === //
  Wire.beginTransmission(MPU);
  Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
  //For a range of +-2g, we need to divide the raw values by 16384, according to the datasheet
  AccX = (Wire.read() << 8 | Wire.read()) / 16384.0; // X-axis value
  AccY = (Wire.read() << 8 | Wire.read()) / 16384.0; // Y-axis value
  AccZ = (Wire.read() << 8 | Wire.read()) / 16384.0; // Z-axis value
  // Calculating Roll and Pitch from the accelerometer data
  accAngleX = (atan(AccY / sqrt(pow(AccX, 2) + pow(AccZ, 2))) * 180 / PI) - 3.09; // AccErrorX ~(0.58) See the calculate_IMU_error()custom function for more details
  accAngleY = (atan(-1 * AccX / sqrt(pow(AccY, 2) + pow(AccZ, 2))) * 180 / PI) - 3.9; // AccErrorY ~(-1.58)

  // === Read gyroscope data === //
  previousTime = currentTime;        // Previous time is stored before the actual time read
  currentTime = millis();            // Current time actual time read
  elapsedTime = (currentTime - previousTime) / 1000; // Divide by 1000 to get seconds
  Wire.beginTransmission(MPU);
  Wire.write(0x43); // Gyro data first register address 0x43
  Wire.endTransmission(false);
  Wire.requestFrom(MPU, 6, true); // Read 4 registers total, each axis value is stored in 2 registers
  GyroX = (Wire.read() << 8 | Wire.read()) / 131.0; // For a 250deg/s range we have to divide first the raw value by 131.0, according to the datasheet
  GyroY = (Wire.read() << 8 | Wire.read()) / 131.0;
  GyroZ = (Wire.read() << 8 | Wire.read()) / 131.0;
  // Correct the outputs with the calculated error values
  GyroX = GyroX + 3.1; // GyroErrorX ~(-0.56)
  GyroY = GyroY - .02; // GyroErrorY ~(2)
  GyroZ = GyroZ + 0.17; // GyroErrorZ ~ (-0.8)

  // Currently the raw values are in degrees per seconds, deg/s, so we need to multiply by sendonds (s) to get the angle in degrees
  gyroAngleX = gyroAngleX + GyroX * elapsedTime; // deg/s * s = deg
  gyroAngleY = gyroAngleY + GyroY * elapsedTime;
  yaw =  yaw + GyroZ * elapsedTime;

  // Complementary filter - combine acceleromter and gyro angle values
  //roll = 0.96 * gyroAngleX + 0.04 * accAngleX;
  //pitch = 0.96 * gyroAngleY + 0.04 * accAngleY;


  float cfac = .04;  // TEST ml
  //roll =  (1-cfac)* gyroAngleX + cfac * accAngleX;  //TEST ml
  //pitch = (1-cfac) * gyroAngleY + cfac * accAngleY;  //TEST ml


  roll =  accAngleX;
  pitch = accAngleY;
}

void calculate_IMU_error() {
  // We can call this funtion in the setup section to calculate the accelerometer and gyro data error. From here we will get the error values used in the above equations printed on the Serial Monitor.
  // Note that we should place the IMU flat in order to get the proper values, so that we then can the correct values
  // Read accelerometer values 200 times
  while (c < 200) {
    Wire.beginTransmission(MPU);
    Wire.write(0x3B);
    Wire.endTransmission(false);
    Wire.requestFrom(MPU, 6, true);
    AccX = (Wire.read() << 8 | Wire.read()) / 16384.0 ;
    AccY = (Wire.read() << 8 | Wire.read()) / 16384.0 ;
    AccZ = (Wire.read() << 8 | Wire.read()) / 16384.0 ;
    // Sum all readings
    AccErrorX = AccErrorX + ((atan((AccY) / sqrt(pow((AccX), 2) + pow((AccZ), 2))) * 180 / PI));
    AccErrorY = AccErrorY + ((atan(-1 * (AccX) / sqrt(pow((AccY), 2) + pow((AccZ), 2))) * 180 / PI));
    c++;
  }
  //Divide the sum by 200 to get the error value
  AccErrorX = AccErrorX / 200;
  AccErrorY = AccErrorY / 200;
  c = 0;
  // Read gyro values 200 times
  while (c < 200) {
    Wire.beginTransmission(MPU);
    Wire.write(0x43);
    Wire.endTransmission(false);
    Wire.requestFrom(MPU, 6, true);
    GyroX = Wire.read() << 8 | Wire.read();
    GyroY = Wire.read() << 8 | Wire.read();
    GyroZ = Wire.read() << 8 | Wire.read();
    // Sum all readings
    GyroErrorX = GyroErrorX + (GyroX / 131.0);
    GyroErrorY = GyroErrorY + (GyroY / 131.0);
    GyroErrorZ = GyroErrorZ + (GyroZ / 131.0);
    c++;
  }
  //Divide the sum by 200 to get the error value
  GyroErrorX = GyroErrorX / 200;
  GyroErrorY = GyroErrorY / 200;
  GyroErrorZ = GyroErrorZ / 200;
  // Print the error values on the Serial Monitor
  Serial.print("AccErrorX: ");
  Serial.println(AccErrorX);
  Serial.print("AccErrorY: ");
  Serial.println(AccErrorY);
  Serial.print("GyroErrorX: ");
  Serial.println(GyroErrorX);
  Serial.print("GyroErrorY: ");
  Serial.println(GyroErrorY);
  Serial.print("GyroErrorZ: ");
  Serial.println(GyroErrorZ);

  //delay(5000);
}

Benutzeravatar
Max1975
infiziert
Beiträge: 38
Registriert: 2018-05-29 19:14:15
Wohnort: Züri Oberland

Re: Kofferneigung im Fahrerhaus anzeigen

#64 Beitrag von Max1975 » 2021-11-11 11:21:48

Danke hugepanic,
das ist mal ne geile Anleitung.

Hast Du noch andere LKW-taugliche Arduino Projekte? Vielleicht brauchen wir einen eigenen Arduino Fred?

Grüsse,
Max
Bucher DURO 4x4 'Bruce'

Benutzeravatar
Wilmaaa
Forenteam
Beiträge: 19485
Registriert: 2006-10-02 9:50:27
Wohnort: 35519 Rockenberg
Kontaktdaten:

Re: Kofferneigung im Fahrerhaus anzeigen

#65 Beitrag von Wilmaaa » 2021-11-11 11:31:36

Max1975 hat geschrieben:
2021-11-11 11:21:48
Vielleicht brauchen wir einen eigenen Arduino Fred?
Du meinst sowas wie den hier?
viewtopic.php?f=34&t=94325
Ich hab einen Virus: den H-A-N-O-M-A-G-I-R-U-S
-----
"Frauen haben in der Küche nichts zu suchen. Sie müssen sich um die Schweine kümmern und den Traktor schmieren." (Charlotte MacLeod)
-----
"Das ist also ein Kleinbus und ein LKW in einem." (Mitarbeiterin über den 170er)

Benutzeravatar
advi
abgefahren
Beiträge: 3044
Registriert: 2009-10-29 0:09:01
Wohnort: Stuttgart-Flughafen

Re: Kofferneigung im Fahrerhaus anzeigen

#66 Beitrag von advi » 2021-11-11 13:56:03

Meine Lösung als bekennender Geradesteher

Eine Libelle in Fahrerhaus, die zeigt ganz zuverlässig an, ob Links - rechts im Wasser ist.
Eine Libelle am Koffer, die zeigt vorne - hinten im Wasser an

Dazu eine Wasserwaagen App - Handy liegt im Koffereingang und dann weiß ich alles ganz genau
Frank

Unserer heißt Alladin und ist ein MAN LE220 mit ausgebautem Kühlkoffer

Ausbau siehe http://www.allrad-lkw-gemeinschaft.de/p ... 35&t=55758

Wie viel Expeditionsmobil ist nötig - unsere kommende 3,5 to Lösung viewtopic.php?p=824020#p824020

Benutzeravatar
DaPo
abgefahren
Beiträge: 1775
Registriert: 2010-12-15 22:40:09
Wohnort: Bochum

Re: Kofferneigung im Fahrerhaus anzeigen

#67 Beitrag von DaPo » 2021-11-11 16:26:53

Hallo,

manche hängen auch ganz einfach kurz ein Lot in den Durchgang.
Habe ich gehört.
Grüße
DaPo (Daniel)

Benutzeravatar
Max1975
infiziert
Beiträge: 38
Registriert: 2018-05-29 19:14:15
Wohnort: Züri Oberland

Re: Kofferneigung im Fahrerhaus anzeigen

#68 Beitrag von Max1975 » 2021-11-11 18:45:24

Wilmaaa hat geschrieben:
2021-11-11 11:31:36
Max1975 hat geschrieben:
2021-11-11 11:21:48
Vielleicht brauchen wir einen eigenen Arduino Fred?
Du meinst sowas wie den hier?
viewtopic.php?f=34&t=94325
Danke Wilmaaa! Down the rabbit hole I go....
Bucher DURO 4x4 'Bruce'

Benutzeravatar
hugepanic
abgefahren
Beiträge: 2403
Registriert: 2018-06-24 20:13:55

Re: Kofferneigung im Fahrerhaus anzeigen

#69 Beitrag von hugepanic » 2021-11-11 21:27:32

Also Ihr Profis, es stand schon weiter oben, aber nochmal:
advi hat geschrieben:
2021-11-11 13:56:03
Eine Libelle in Fahrerhaus, die zeigt ganz zuverlässig an, ob Links - rechts im Wasser ist.
Eine Libelle am Koffer, die zeigt vorne - hinten im Wasser an
Dazu eine Wasserwaagen App - Handy liegt im Koffereingang und dann weiß ich alles ganz genau
DaPo hat geschrieben:
2021-11-11 16:26:53
Hallo,
manche hängen auch ganz einfach kurz ein Lot in den Durchgang.
Habe ich gehört.
Es gibt Fahrzeuge, bei denen ist und/oder
-Der Koffer während der Fahrt verschlossen von der Innenseite des Fahrerhauses --> ist bei mir so
-Der Koffer weiter weg, so das mein Instrumente nicht ablesen kann ---> DoKa, hab ich auch
-Der Koffer an einer anderen Stelle des (weichen!) Rahmens verschraubt, was sich dadurch zeigt, das man im Fahrerhaus NICHT die Neigung des Koffers messen kann --> ist wohl bei fast jedem hier so

Da wirds dann halt eng mit mechanischen Lösungen...

Ich hab in meiner Karre zwei von den 2-achs libellen. Eine im Fahrerhaus und eine im Koffer. Das klappt super! Ich stell die Karre nach der Vorderen Libelle ab grade, und kann den Fehler dann hinten ablesen! :angel:

Ist das alles ein Problem?? NEIN, trotzdem.....

Für mich war das jetzt zusammengerechnet ein abend bastelei und das ding läuft. Kosten bei mir: unter 10€! der sensor lag in der kiste und der Arduino mit display und stromversorgung ist direkt am Armaturenbrett verbaut!
Währe mir eine mechanische lösung lieber? Wahrscheinlich JA, die gibts aber nicht unter diesen umständen, oder ist hier noch nicht aufgetaucht.

Update zu meiner Lösung:
Ich hab festgestellt das der Sensor wohl noch falsch montiert ist. Wenn der Motor läuft vibriert der Sensor und die Anzeige eiert um 0.x° hin und her. Muß ich mir mal überlegen ob ich das mit Hard- oder Software repariere...oder ob das überhaupt relevant ist.
Vielleicht so wie früher: 3 lagen doppel-seitiges Klebeband unter den Sensor und fertig.

cruise-the-planet
Schlammschipper
Beiträge: 498
Registriert: 2018-03-01 17:36:02

Re: Kofferneigung im Fahrerhaus anzeigen

#70 Beitrag von cruise-the-planet » 2021-11-12 1:33:00

Wie hast du denn den Sensor wasserdicht verpackt? Gibts da auch noch Gehäuse dazu? Oder liegt der Sensor im geschützten Koffer drin?
Und der Arduino selbst mit dem Display, ist der auch in einem Gehäuse?

LG
Lukas

Benutzeravatar
hugepanic
abgefahren
Beiträge: 2403
Registriert: 2018-06-24 20:13:55

Re: Kofferneigung im Fahrerhaus anzeigen

#71 Beitrag von hugepanic » 2021-11-12 10:17:12

Der Sensor und der Arduino sitzen beide in einem gedruckten ABS-Gehäuse. Das gehäuse vom Tempomaten/Arduino im foto ist noch ein "vorserien" produkt. Das hab ich nochmal neu gemacht damit's nicht ganz so scheiße aussieht.
Wasserdicht ist da nix, weil beides im Innenraum verbaut ist.

Ich seh grad, ich muß den Fred vom tempomaten mal updaten mit dem aktuellen status und ein paar Bildern.

Am Tempomat ist übrigens ein "wasserdichter" sensor an der Kardanwelle verbaut! Der ist professionell mit Heißkleber zugeklebt, so das da hoffentlich nix passiert. Einbaulage ist aber so das nix in die öffnung reinfließen sollte.
mal sehen, das ding ist seit über einem Jahr verbaut, und bis jetzt zuverlässig.
Dateianhänge
WhatsApp Image 2021-11-12 at 09.12.50.jpeg
WhatsApp Image 2021-11-12 at 08.57.39.jpeg

Benutzeravatar
buntbaer2001
süchtig
Beiträge: 783
Registriert: 2019-02-08 16:49:18
Wohnort: Oberpfalz, LKr SAD

Re: Kofferneigung im Fahrerhaus anzeigen

#72 Beitrag von buntbaer2001 » 2021-11-12 10:57:19

w3llschmidt hat geschrieben:
2021-11-08 13:03:12
Kennt ihr?

https://github.com/spitzlbergerj/CaravanPi
Nö, kannte ich nicht. Danke dafür.
Wenn hier jemand eine Platinenbestellung bei JLCPCB organisiert bin ich dabei. SMD löten ist mit meinen Augen und zittrigen Händen nicht so das meine... :D
Bin ja immer zu haben für so Technikspielereien, daher auch nochmal mein Dank an hugepanic.

Grüße, Peter
Ausbau und mehr unter https://www.gietl.earth

They promised me Mars colonies. Instead I got Facebook. (Buzz Aldrin)

Oelwurm
Kampfschrauber
Beiträge: 577
Registriert: 2019-09-15 6:14:31

Re: Kofferneigung im Fahrerhaus anzeigen

#73 Beitrag von Oelwurm » 2021-11-15 21:59:23

Bin Immer wieder positiv erstaunt darüber, wie elektroaffine Bastler aus verschiedenen Disziplinen kleine Helferlein zusammenwürfeln können ! :unwuerdig: :rock: :unwuerdig: :wub:
Grüße Carsten

Plan: abgel.3,5t_containierbar_Schaltgetriebe_HA-Sperre_Leiterrahmen_Hubdach-Koffer_GKat-LPG (nice to have: gr.U-Plakette_Oldtimer_AU-frei_Kammer-Diesel_4x4_Frontlenker) und a weng autark-isch ;)

Antworten