RC Car Radlastwaage & Rollenprüfstand

Hallo zusammen,

Ich habe vor ein paar Tagen so eine Radlastwaage gesehen und mir direkt gedacht das will ich auch haben und so etwas lässt sich doch mit Sicherheit schön mit einem arduino nachbauen.

Nun es fängt aber leider damit an dass ich noch nie Gewichts Sensoren verwendet habe.

ich habe mir nun bei Amazon schon ein paar angeschaut aber ich kann mich nicht entscheiden und kenne mich damit noch nicht aus.

was würdet ihr für welche verwenden?

Diese bräuchte ich 4 mal. das gute wäre es ist ein Sensor und ein HX711. Der Nachteil ist für mich jedoch der preis... bei 4 stück sind es 55,88€

Bei diesen bin ich mir nicht ganz sicher ob ich die einzelnen Sensoren dann auswerten kann oder würde hier, da nur ein HX711 dabei ist, das gesamt Gewicht ausgewertet?

Daher würde ich noch die dazu kaufen und würde somit auf 14,98€ kommen was dem Budget für mein Projekt absolut entgegen kommen würde.

Das wäre die Waage an sich.

Und dann kam eine weitere Idee....

Ich habe mir vorgestellt eine schöne Plattform zu bauen wo die Gewichts Sensoren schön integriert sind.

Wenn ich dann aber schon eine Plattform plane und baue dann möchte ich aber auch noch mehr haben.
Ob es wirklich Sinnvoll ist weis ich ehrlich gesagt nicht. Aber man kann es ja mal probieren und schauen :slight_smile:
Einen Rollenprüfstand der Geschwindigkeit und das Drehmoment misst.

Hat dazu zufällig jemand eine Idee?

ich dachte es mir vielleicht so dass jeweils 2 rollen (vorne und hinten) in der Plattform integriert sind. An jeweils einer rolle einen Hallsensor z.b. dann weis ich schon einmal wie schnell sich die Rolle drehen würde.

Aber wie Kann ich dann diese Geschwindigkeit so umrechnen so dass ich die theoretische Geschwindigkeit des Fahrzeugs weis?

Aber wie messe ich das Drehmoment?

Was gibt es da für eine Möglichkeit?

Ich würde mich sehr über ideen und vorschläge und eure antworten freuen :slight_smile:

LG

Mit einer Bremse und einer Drehmoment Waage.

Tja...
Wie wäre es mit dem Rollenumfang
Der Anzahl Impulse pro Umdrehung
Und natürlich der Anzahl Impulse pro Zeiteinheit

Natürlich musst du den Gegenwind auch noch mit wegbremsen.
cw Wert

Danke für deine Antwort!

Okay also das habe ich falsch beschrieben... Ich hätte schreiben sollen die theoretische geschwindigkeit... Ich kann ja nicht auch noch einen windkanal draus machen :rofl::see_no_evil:
Obwohl :face_with_monocle: bei den formel fahrzeugen die ich habe.... hmmmmmm dann würde man ja auch die luftsrömung sichtbar machen können :see_no_evil: aber ich denke das geht jetz vorerst mal ein wenig zu weit.....

also ich bremse die rolle mit einer bestimmten kraft und die drehmoment waage misst wieviel kraft das fahrzeug braucht um die rolle zu drehen?
Was wäre dann dafür ein guter ansatz?

Warum nicht?

Eine Waage/Kraftmesser brauchst du ja sowiso.
Dann noch ein Gebläse dazu, auch für die Kühlung des Antriebsstrangs und der Bremse

Eigentlich misst man die Kraft, mit der sich die Bremse abstützt.

Üblich sind Wasser- oder Stromwirbelbremsen.

Im Grunde brauchst Du vier Sachen (pro Rad): Gewichtsensor, Drehzahlsensor, variable Bremse und Drehmomentsensor. Pro Rad würde ich die Rolle, die und den Drehzahlsensor in einem kleinen Kasten montieren. Dieser wird durch den Gewichtsensor unterstützt. Ein weiterer Gewichtssensor wird als Kraftsensor benutzt und misst die Kraft, die dieser Kasten gegen die Fahrtrichtung ausübt. Als Bremse würde ich als ersten Versuch einen kleinen Elektromotor nehmen.
Wenn ich mich nicht klar ausgedrückt habe, frag gerne nach.

Hmm das ist ein anderer Ansatz.

Ich dachte eher so:

pro Rad ein Gewichts Sensor.

2 durchgehende rollen für jeweils vorne und hinten. Davon jeweils eine freilaufende Rolle und eine an der die Messung stattfindet.

Also so wie auf der sehr groben "Skizze". DIe "systeme" getrennt halten.

So würde ich mir 2 Gewichts Sensoren für das Drehmoment sparen oder?
Und ich glaube (also in meinem Verständnis) ist es so doch besser wegen dem differenzial. Auf der „Straße“ ist es ja auch eine durchgehende Fläche und nicht unterschiedliche oder getrennte Untergründe…. Ganz grob gesagt.

Beim Rollenprüfstand werden die Rollen gebremst, um z.B. den Luftwiderstand in Abhängigkeit von der Geschwindigkeit zu simulieren. Die Geschwindigkeit ergibt sich aus der Drehzahl der Rollen. Die Kraft, mit der sich die Bremsen abstützen, ergibt dann das Drehmoment.

Wägezellen brauchst Du für jedes Rad, und mindestens 2 HX711 mit je 2 Kanälen.

Gute Idee! Dann koppelst Du die Rollen so, daß alle Räder gleich schnell drehen. Dann eine Bremse, ein Kraftaufnehmer und ein Drehzahlmesser.

BTW wie hältst Du das Auto auf den Rollen?

So,
nun habe ich ein wenig gebastelt und herum probiert :slight_smile:
Ich habe jetzt eine waage und ich kann die spur in grad messen. Naja für die spur muss ich die werte für die potis zwar noch ein wenig genauer nachbessern aber ich bin recht gut zurecht gekommen bis jetzt.

Jetzt habe ich aber ein problem.
Ich weiß nicht warum mein Tara knopf nicht funktioniert.
Kann mir bitte jemand sagen warum?

Lg

#include "U8glib.h"
#include <Wire.h>
#include "HX711.h"

U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE);

int estado_botao = 0;
int pot1 = A0;
int pot1_wert = 0;
int pot2 = A1;
int pot2_wert = 0;

#define  tara  14
#define botao 13
#define DOUT1  2
#define CLK1  3
#define DOUT2  4
#define CLK2  5
#define DOUT3  6
#define CLK3  7
#define DOUT4  8
#define CLK4  9

HX711 scale1(DOUT1, CLK1);
HX711 scale2(DOUT2, CLK2);
HX711 scale3(DOUT3, CLK3);
HX711 scale4(DOUT4, CLK4);

float calibration_factor = 2230;
float units1;
float units2;
float units3;
float units4;
float gesamt;
float front;
float heck;




void draw1()
{
  u8g.setFont(u8g_font_timB14);
  u8g.setPrintPos(35, 30);
  u8g.print("RC Car");
  u8g.setPrintPos(15, 50);
  u8g.print("setup-system");
}

void draw2()
{
  u8g.setFont(u8g_font_timB14);
  u8g.setPrintPos(35, 15);
  u8g.print("Waage");
  u8g.setFont(u8g_font_fixed_v0);

  u8g.setPrintPos(2, 8);
  u8g.print("VR");
  u8g.setPrintPos(2, 18);
  u8g.print(units3);

  u8g.setPrintPos(45, 27);
  u8g.print("Gesamt");
  u8g.setPrintPos(52, 37);
  u8g.print(gesamt);

  u8g.setPrintPos(110, 8);
  u8g.print("HR");
  u8g.setPrintPos(110, 18);
  u8g.print(units2);

  u8g.setPrintPos(2, 32);
  u8g.print("Front");
  u8g.setPrintPos(2, 42);
  u8g.print(front);

  u8g.setPrintPos(105, 32);
  u8g.print("Heck");
  u8g.setPrintPos(110, 42);
  u8g.print(heck);

  u8g.setPrintPos(2, 53);
  u8g.print("VL");
  u8g.setPrintPos(2, 63);
  u8g.print(units4);

  u8g.setPrintPos(110, 53);
  u8g.print("HL");
  u8g.setPrintPos(110, 63);
  u8g.print(units1);
}

void draw3()
{
  u8g.setFont(u8g_font_timB14);
  u8g.setPrintPos(45, 15);
  u8g.print("Spur");

  u8g.setFont(u8g_font_fixed_v0);
  u8g.setPrintPos(10, 30);
  u8g.print("Links:");
  u8g.setPrintPos(85, 30);
  u8g.print("Rechts:");
  u8g.setPrintPos(20, 45);
  u8g.print(pot1_wert);
  u8g.setPrintPos(100, 45);
  u8g.print(pot2_wert);
}


void setup(void) {

  pinMode(tara, INPUT_PULLUP);
  pinMode(15, OUTPUT);
  pinMode(botao, INPUT_PULLUP);


  scale1.set_scale(calibration_factor);
  scale2.set_scale(calibration_factor);
  scale3.set_scale(calibration_factor);
  scale4.set_scale(calibration_factor); //Adjust to this calibration factor
  scale1.tare();
  scale2.tare();
  scale3.tare();
  scale4.tare();

}

void loop(void) {

  boolean valor_botao = digitalRead(13);

  pot1_wert = analogRead(pot1);
  pot1_wert = map(pot1_wert, 0, 1023, 0, 300);
  pot2_wert = analogRead(pot2);
  pot2_wert = map(pot2_wert, 0, 1023, 0, 300);
  front = (units3 + units4);
  heck = (units1 + units2);
  gesamt = (units1 + units2 + units3 + units4);

  if (valor_botao != 1)
  {
    while (digitalRead(13) != 1)
    {
      delay(10);
    }
    estado_botao++;
    estado_botao %= 3;
  }
  if (pot1_wert == pot2_wert)
  {
    digitalWrite(15, HIGH);
  }
  else {
    digitalWrite(15, LOW);
  }


  u8g.firstPage();
  do {
    if (estado_botao == 0)
    {
      draw1();
    }
    if (estado_botao == 1)
    {
      draw2();
    }
    if (estado_botao == 2)
    {
      draw3();
    }
  }
  while ( u8g.nextPage() );

  units1 = scale1.get_units(), 5;
  if (units1 < 0)
  {
    units1 = 0.00;
  }
  units2 = scale2.get_units(), 5;
  if (units1 < 0)
  {
    units2 = 0.00;
  }
  units3 = scale3.get_units(), 5;
  if (units3 < 0)
  {
    units3 = 0.00;
  }
  units4 = scale4.get_units(), 5;
  if (units1 < 0)
  {
    units4 = 0.00;
  }


  if (tara == HIGH)
  {
    scale1.tare();  //Reset the scale to zero
    scale2.tare();
    scale3.tare();
    scale4.tare();
  }


  delay(10);
}