Komfortabler E-Motorprüfstand

puh ! seit langer Zeit bin ich mal wieder hier - da hat sich ja einiges an Ideen angesammelt!

Nachdem ich den Sommer über genügend Flieger gecrasht habe, kann's ja jetzt wieder in den Bastelkeller gehen. Ich habe mal all die kaputten Flieger beiseite geräumt - und da kommt tatsächlich diese schöne Projekt zum Vorschein.

Also in die Hände gespuckt und los gehts. Mittlerweile habe ich ein kleine Platine gemacht, für einen Nano, 3 Wägezellen-Verstärker, und einen 2-Kanal 16-bit A/D für die Spannungs- und Strom-Messung. Anschlüsse sind auch vorgesehen für eine I2C Anzeige, ein paar Taster und einen Drehzahlsensor. Das passt auch für die 3-Punkt Schwerpunktwaage. Die Strom-Messung kann mit einem Präzisions-Messwiderstand (wie auf dem Bild) oder mit einem Hall-Sensor erfolgen. Hall-Sensor hab ich noch nicht getestet.
Das Ergebnis kann man auf den Bildern sehen. Drehzahl- Strom-, Spannungs- und Standschub-Messung funktionieren (aber wie man auf dem Bild sieht, ist die Rundung bei der Leistungsanzeige nicht korrekt). Mit den Tastern kann man die Wägezellen auf Null setzen, die Anzahl der Pol-Paare für die Drehzahlmessung einstellen, sowie die Anzeige "einfrieren". Soweit schauts ganz passabel aus.
Es fehlen noch zwei wichtige Punkte: die Übertragung auf einen PC und die Drehmoment-Messung.
Letzteres ist in Planung und erfordert "nur" noch ein paar mechanische "Kleinigkeiten". Dann kann man an der Anzeige auch Drehmoment, mechanische Leistung und Wirkungsgrad ablesen.

VG Gerd

Anhang anzeigen 2061113Anhang anzeigen 2061114
 
Bilder

Bilder

20181218_183550.jpg20181218_183539_001.jpg
 
@stoschek: gefällt mir, was du da zusammengebaut hast. Hast du ein paar Daten von deiner oled-Anzeige? woher hast du die?

Die ESC-Ansteuerung per Arduino hab ich erst mal zurückgestellt. Dafür gibts die Servo-lib, die aber Hardware-Ressourcen (Timer, Interrupt) belegt. Die Drehzahlmessung kann da in die Quere kommen. Muss ich mir mal ansehen wie weit das zusammen auf einem Nano geht. Für mich ist es nicht so wichtig, aber interessieren tuts mich.

Die Strommessung mach ich derzeit mit Widerstand, geht aber thermisch nur bis 20A (30A kurzzeitig). Den Hall-Sensor hab ich noch nicht getestet. Hall-Sensoren gibts günstig bis 400A, meiner geht aber auch nur bis 31A, das reicht für meine (derzeitigen) Bedürfnisse. Vielleicht mach ich nochmal ein Board mit zwei Hall-Sensoren.
Habt ihr die Strom-Sensoren direkt am Arduino? wie stehts da mit der Genauigkeit?

@pudding: Die Wägezelle am Arduino zu betreiben ist kein großes Hexenwerk. Dafür gibts spezielle A/D-Umsetzer (HC711). Zwei (fast) beliebige Pins am Arduino und die entsprechende lib, sollte kein Problem sein.

VG, Gerd
 

Stoschek

User
Das Display habe ich irgendwo von ebay, ein 1.44" TFT 128X128 Pixel.
Die ESC-Ansteuerung läuft auf einem Nano, der Rest auf einem Mega, wegen mehr Speicherplatz. Für die Strommessung verwende ich einen INA 219, da gibt es fertig günstige Boards, bei denen man dann halt den Messwiderstand wechseln muss.
 
so, über Weihnachten wurde ein bisschen gebastelt. Die Drehmoment-Messeinrichtung ist im Entstehen. Siehe Bilder, provisorisch zusammengebaut.
Die breiteren, inneren Sperrholzteile sind feststehend. Dazwischen sitzt der Kraftaufnehmer. Mittels zweier Kugellager und einer M8 Gewindestange sind die äußeren, ovalen Sperrholzteile drehbar befestigt. An den vier noch offenen Bohrungen wird mittels kurzer M4-Stehbolzen dann noch die eigentliche Motorhalterung befestigt.
VG Gerd

20181230_185602.jpg20181230_185634.jpg20181230_185713.jpg
 
servus zusammen,
baue mir auch gerade einen Motorprüfstand, mit wägezellen. Hänge aber schon in der Luft. (bin ein blutiger Arduino-anfänger)
Arduino, HX711 und LCD Display 1602, alles verkabelt, im seriellen monitor sehe ich ergebnisse, auf dem Display kann ich text schreiben. die verkabelung müßte eigentlich in ordung sein.
mein problem ist, wie bringe ich das display dazu die werte anzuzeigen. irgendwie raffe ich es nicht. was muß ich da reinschreiben: < lcd.print("geht.garnet") >. die .INO habe ich aus den example vom HX711. Hänge mal mein Programm hier dran.
wäre nett wenn mir da wer weiterhelfen will.

//-------------------------------------------------------------------------------------
// HX711_ADC.h
// Arduino master library for HX711 24-Bit Analog-to-Digital Converter for Weigh Scales
// Olav Kallhovd sept2017
// Tested with : HX711 asian module on channel A and YZC-133 3kg load cell
// Tested with MCU : Arduino Nano, ESP8266
//-------------------------------------------------------------------------------------
// This is an example sketch on how to use this library
// Settling time (number of samples) and data filtering can be adjusted in the config.h file

#include <HX711_ADC.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

//HX711 constructor (dout pin, sck pin):
HX711_ADC LoadCell(4, 5);

const int eepromAdress = 0;

long t;

void setup() {

lcd.begin(16, 2);

float calValue; // calibration value
calValue = 4000; // uncomment this if you want to set this value in the sketch
#if defined(ESP8266)
//EEPROM.begin(512); // uncomment this if you use ESP8266 and want to fetch the value from eeprom
#endif
//EEPROM.get(eepromAdress, calValue); // uncomment this if you want to fetch the value from eeprom

Serial.begin(9600); delay(10);
Serial.println();
Serial.println("Starting...");
LoadCell.begin();
long stabilisingtime = 2000; // tare preciscion can be improved by adding a few seconds of stabilising time
LoadCell.start(stabilisingtime);
if(LoadCell.getTareTimeoutFlag()) {
Serial.println("Tare timeout, check MCU>HX711 wiring and pin designations");
}
else {
LoadCell.setCalFactor(calValue); // set calibration value (float)
Serial.println("Startup + tare is complete");
}
}
void loop() {

//update() should be called at least as often as HX711 sample rate; >10Hz@10SPS, >80Hz@80SPS
//use of delay in sketch will reduce effective sample rate (be carefull with use of delay() in the loop)
LoadCell.update();

//get smoothed value from data set
if (millis() > t + 250) {
float i = LoadCell.getData();
Serial.print("Load_cell output val: ");
Serial.println(i);
t = millis();
}

//receive from serial terminal
if (Serial.available() > 0) {
float i;
char inByte = Serial.read();
if (inByte == 't') LoadCell.tareNoDelay();
}

//check if last tare operation is complete
if (LoadCell.getTareStatus() == true)
{
Serial.println("Tare complete");
}
{
lcd.setCursor(1, 0);

lcd.print("geht.net"); //Beginn beim ersten Zeichen

lcd.setCursor(2, 1);

lcd.print("geht.garnet"); //Beginn beim ersten Zeichen
delay (2000); //Zwei Sekunden warten.
lcd.clear(); //Display löschen.
}

}
 

kalle123

User
Franz, wo ist der Code her?

Verhalten und NICHT FUNKTION kann ich bestätigen.

Hab das mal schnell zusammen gesteckt.

f4yg0tHl.png


Terminal läuft zumindest.

VDRQGEnl.png


Muss mich wohl korrigieren.

Das Programm wird wohl vom Terminal aus gesteuert.

Code:
//receive from serial terminal
  if (Serial.available() > 0) {
    float i;
    char inByte = Serial.read();
    if (inByte == 't') LoadCell.tareNoDelay();

Gibt mal im Terminal ein 't' ein (oben in die Kommando Zeile), dann sollte sich was tun ....

cu KH
 
Servus Kalle, Danke für deine Mühen.
Der code war bei der HX711 Bibliothek dabei. hätte ihn für das display ergänzt.
heute abend werde ich das mal probieren.

also beim serial monitor oben in der Befehlszeile ein t eingeben?

unklar ist mir was da reingehört, habe alles probiert, also ohne die " " natürlich: lcd.print("?geht.garnet?");


einen halbwegs fertigen Code habe ich nirgends gefunden, obwohl es eigentlich naheliegend wäre, dass der ganz schön verbreitet ist.
 

kalle123

User
Franz, du machst es einem nicht gerade leicht, zu helfen ;)

Ich hab hier alleine vier HX711 Libs. Und wenn ich anfange, zu suchen, werden es sicher noch mehr.

kNpxl08l.png




cu KH
 
sorry, das habe ich falsch verstanden, dass du den originalcode wolltest.

muß ich allerdings zuhause nachschauen wo der genau drin ist. Glaube es ist in HX711_ADC-Master, in examples, messure?,
Dateiname ist : Read_1x_load_cell.ino
an dem habe ich nichts verändert, nur unten den text für das displayauslesen ergänzt. (und natürlich das #include...)

oder stelle ich mir das zu einfach vor?
habe gedacht, irgendwie muß doch ein Messergebnis rauskommen, das in den serialmonitor geschrieben wird und das müßte man doch auch auf das LCDdisplay schreiben können.

danke schonmal für deine geduld.
 

kalle123

User
Franz. Glaube eher das ist

Code:
HX711_ADC/examples/Read_1x_load_cell/

So, ich könnte jetzt das Original und deine 'gebastelte' Version in Editoren gegenüberstellen und schauen, was du da gemacht hast.

Aber das kannst du selber auch.

Und dann fang doch mal hiermit an.

https://www.arduino.cc/en/Reference/LiquidCrystal

Beispiele einfach mal durch arbeiten.

Nur eine Bemerkung noch.

Nimm doch statt LCD1602 das LCD1602 I2C. Geht genau so gut und hast weniger Strippen.
Dann aber mit einer anderen Lib. :)

Gruß KH
 

kalle123

User
So Franz, ich hab hier nochmal schnell aufgebaut.

Aber mit LCD1602 I2C. :D

rDUJluyl.png


Hab den Code aus Examples genommen und folgenden Zeilen eingefügt.

14 - 16, 28 - 32 und 69 - 71. Schau mal rein.

Spuckt mir die Messwerte aus. Diese 't' dient nur zur Nullung.

cu KH
 

Anhänge

  • Read_1x_load_cell.ino.txt
    2,7 KB · Aufrufe: 154
Danke kalle,
LCD1602 I2C habe ich nicht zur hand.
habe deine Zeilen in meinen code eingefügt, es geht.
umgekehrt, dass ich mein LCD in deinen code eingefüge, habe ich nicht geschafft.
ein richtiger programmierer werde ich wohl nie werden.
immer auf hilfe angewiesen.
also, danke, tag gerettet.
 

kalle123

User
Franz,

die Interfaces gibt es auch hier

https://www.ebay.de/itm/I2C-IIC-Serielle-Schnittstelle-Modul-Interface-fur-LCD-Display-1602-TWI-3340/163491329753?hash=item2610d7b6d9:g:J-wAAOSw8OFcP-4S

In China kosten die ein paar Cent, nur muss du da halt 3 Wochen warten.

So, zum Programmieren. Ich hab auch keine große Ahnung, nur du musst halt dran bleiben und mit der Zeit wird es besser. Glaub mir.

Ich hab den Code aus Examples genommen und meine Zusätze übersichtlich und nachvollziehbar dort eingefügt
(Zeilen 14 - 16, 28 - 32 und 69 - 71)

Ich hab mit Multiwii angefangen, dann kam openXsensor und inzwischen kann ich kleiner Sachen selber programmieren.

Franz, die Beschäftigung mit Arduino lohnt!!

Irgendwann sieht es dann bei dir auch so aus :D

Grüße KH
 

Anhänge

  • DSCF1681.jpg
    DSCF1681.jpg
    107,3 KB · Aufrufe: 73
soweit funktioniert alles. der amperemeter ist etwas retro, aber er lag sowieso nur rum.
den motorhalter muß ich auch noch ändern, klappluftschrauben schlagen am mast an.
lcdisplay habe ich auch schon einen schwung bestellt, ist sicher nicht das letzte arduinoprojekt.
habe schon ein paar arduinosachen gemacht. schrittmotor für den teilapparat, sehr bequem beim zahnradfräsen und eine useless box.
danke nochmal für die geduldige hilfe.
190426071604_2346.jpg
 
Ansicht hell / dunkel umschalten
Oben Unten