PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : outdoor I



Seiten : 1 [2] 3

inka
29.12.2019, 16:24
Die MAx-Geschwindigkeit, wie ich schon mal erwähnt habe, erreichst Du glaub ich nur im Full-Step-Mode.
Den Step-Mode musst Du dann bei allen Motoren gleichzeitig ändern. Sonst drehen die ja unterschiedlich schnell.
Es ging mir primär um das drehmoment, das wird im microstepp auch geringer. Und die idee mit jedem motor extra war schon etwas "überkandidelt" wie schon meine grossmutter zu sagen pflegte :-)...
Allerdings scheint mir die möglichkeit beim lauf des motors hin und her schalten zu können - gegeben? Wenn man bei der umschaltung variablen wie "StepsPerRotation" und ähnliches anpasst, oder?

Moppi
29.12.2019, 17:45
Allerdings scheint mir die möglichkeit beim lauf des motors hin und her schalten zu können - gegeben?

Ich habe das ausprobiert, da hat es so nicht funktioniert, wie man sich das vorstellt. Genau weiß ich es nicht mehr, ist schon paar Wochen her. Aber ich meine, bei mir hat der Stepper kurz angehalten, nachdem ich den Modus gewechselt habe.


MfG

inka
30.12.2019, 18:55
ich habe jetzt auch einen test gemacht, ich kann kein stoppen des stepper im video sehen...

(https://youtu.be/2idyEs3677M)https://youtu.be/2idyEs3677M

hier der testcode



// DIR und STEP pins definieren

#define dirPin_HR 4 //8
#define stepPin_HR 5 //9

//enable pins definieren

#define enbl_HR 43

//resett pin definieren
#define PIN2RESET 10

//steps pro umdrehung definieren:
#define stepsPerRevolution 200 //1600

#define microstep_pin_S1 42
#define microstep_pin_S2 44
#define microstep_pin_S3 46


uint8_t taste = 0;

uint8_t s_vor = 0;
uint8_t s_rueck = 0;
uint8_t s_stop = 0;
uint8_t s_parken = 0;


void setup()
{

//pins als output:

pinMode(dirPin_HR, OUTPUT);
pinMode(stepPin_HR, OUTPUT);
pinMode(enbl_HR, OUTPUT);

//resett pin zustand definieren
pinMode(PIN2RESET, INPUT);

//stepper full step
digitalWrite (microstep_pin_S1, LOW);
digitalWrite (microstep_pin_S2, LOW);
digitalWrite (microstep_pin_S3, LOW);


Serial.begin(115200);
Serial1.begin(115200);
Serial.println("code----- /home/georg/Arduino/outdoor_robo/stepper/test_ein_stepper/ohne_lib/outdoor_FB_switch_richtung_stop_HR_bluetooth_1");

Serial.println("bluetooth übertragung!");

//enable pins deaktivieren:

digitalWrite(enbl_HR, LOW);

//resett pin aktivieren
digitalWrite(PIN2RESET, HIGH);
}


void loop()
{
if (Serial1.available())
{
taste = Serial1.read();
Serial.println(taste);

tasten_abfrage();
}


richtung_abfrage();
}

/************************************************** *********/
void richtung_abfrage(void)
{
if (s_vor == 1) vorwaerts();
if (s_rueck == 1) rueckwaerts();
if (s_stop == 1) alle_stepper_stop();
if (s_parken == 1) parken();
}

/************************************************** *********/
void tasten_abfrage(void)
{
switch (taste)
{


case 116:// fahre vor - FB quer smartphone
{

vorwaerts();
break;
}

case 115:// fahre rückwärts - FB quer smartphone
{

rueckwaerts();
break;
}

case 49: //alle stepper stop - FB quer smartphone
{

alle_stepper_stop();
break;
}

case 51: //parken - FB quer smartphone
{

parken();
break;
}

case 53: //half step - FB quer smartphone
{

half_step();
break;
}

case 118: //quarter step - FB quer smartphone
{

quarter_step();
break;
}

case 98: //eight step - FB quer smartphone
{

eight_step();
break;
}

}

}

/************************************************** *********/

void full_stepp (void)
{
digitalWrite (microstep_pin_S1, LOW);
digitalWrite (microstep_pin_S2, LOW);
digitalWrite (microstep_pin_S3, LOW);
}

void half_step (void)
{
digitalWrite (microstep_pin_S1, HIGH);
digitalWrite (microstep_pin_S2, LOW);
digitalWrite (microstep_pin_S3, LOW);
}

void quarter_step (void)
{
digitalWrite (microstep_pin_S1, LOW);
digitalWrite (microstep_pin_S2, HIGH);
digitalWrite (microstep_pin_S3, LOW);
}

void eight_step (void)
{
digitalWrite (microstep_pin_S1, HIGH);
digitalWrite (microstep_pin_S2, HIGH);
digitalWrite (microstep_pin_S3, LOW);
}

void sixteen_step (void)
{
digitalWrite (microstep_pin_S1, HIGH);
digitalWrite (microstep_pin_S2, HIGH);
digitalWrite (microstep_pin_S3, HIGH);
}


void parken(void)
{
//enable pins deaktivieren

digitalWrite(enbl_HR, LOW);

s_vor = 0;
s_rueck = 0;
s_stop = 0;
s_parken = 1;
}

void alle_stepper_stop(void)
{
//enable pins deaktivieren

digitalWrite(enbl_HR, HIGH);

s_vor = 0;
s_rueck = 0;
s_stop = 1;
s_parken = 0;

// reboot();
}

/************************************************** *********/
void vorwaerts(void)
{
if (s_vor == 0)
{
// enable pins aktivieren:

digitalWrite(enbl_HR, HIGH);

//richtung bestimmen

digitalWrite(dirPin_HR, HIGH);

s_vor = 1;
s_rueck = 0;
s_stop = 0;
s_parken = 0;
}
else {

digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(500);

digitalWrite(stepPin_HR, LOW);
delayMicroseconds(500);
}
}
/************************************************** ********/
void rueckwaerts(void)
{
if (s_rueck == 0)
{
// enable pins aktivieren:

digitalWrite(enbl_HR, HIGH);

//richtung bestimmen

digitalWrite(dirPin_HR, LOW);

s_vor = 0;
s_rueck = 1;
s_stop = 0;
s_parken = 0;
}
else {

digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(500);

digitalWrite(stepPin_HR, LOW);
delayMicroseconds(500);
}
}

/************************************************** *********/


/*
void links_drehen(void) //mit beschleunigung und sound
{
//enable pins aktivieren
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);

//richtung bestimmen
digitalWrite(dirPin_VL, HIGH);
digitalWrite(dirPin_HL, HIGH);
digitalWrite(dirPin_VR, HIGH);
digitalWrite(dirPin_HR, HIGH);

//"j = 2000": der Anfangswert für das Delay in Microsekunden

for (int i = 0, j = 2000; i < stepsPerRevolution; i++)
{
//"j > 500": der Endwert für das Delay in Microsekunden - bestimmt auch die Endgeschwindigkeit (mindestens 250 bis 300)

if (j > 300) j--;
//"z < 3": wieviele Schritte mit dem eingstellten Delay "j" gemacht werden sollen, bevor es reduziert wird

for (int z = 0; z < 3 && i < stepsPerRevolution; z++)
{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(j);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(j);
i++;
}
}
}
*/
/************************************************** *********/

Rabenauge
30.12.2019, 23:31
Ich habs mit nem Viertel Geschwindigkeit angeschaut, und sehe auch nix stoppen.
Nebenbei: was ist das für ein hübsches Rad da?

inka
31.12.2019, 10:53
@rabenauge:

diese räder sind es:
https://de.aliexpress.com/item/4000112851873.html?spm=a2g0s.9042311.0.0.27424c4db 6T18j

sind allerdings ziemlich weich. Du hast doch mal geschrieben man könnte die ausstopfen? Kann man da einfach die reifen abziehen, mit roher gewalt?

edit:
die sind tatsächlich mit je 12 M2 schrauben pro seite verschraubt!

Rabenauge
31.12.2019, 12:51
Laut Beschreibung sind das Bedlock-Felgen.
Wenn du die Ringe abschraubst, kannst du die Reifen einfach abnehmen.
Dann schneidest du dir passende Schaumstoff-Streifen zurecht, legst die in die Reifen, und baust alles wieder zusammen.
Mach die Enden des Schaumstoffs (da wo sie sich dann berühren) am besten schräg, dann merkst du die Stelle nachher gar nicht.
Je nachdem, wie hart oder weich die Einlage ist, kannst du den "Luftdruck" beeinflussen, oder auch, indem du mehr oder weniger rein stopfst.

Moppi
02.01.2020, 15:28
Ich habs mit nem Viertel Geschwindigkeit angeschaut, und sehe auch nix stoppen.

Ich meine, das hatte bei mir was mit der Geschwindigkeit zu tun, weswegen das nicht so ging, wie ich wollte. Daher war natürlich die Reaktion, das selbst auszuprobieren, die Richtige.


MfG

inka
05.01.2020, 12:23
ich habe die verdrahtung so geändert, dass die microstepp-pins der steppertreiber über den arduino auch später erreichbar sind - wer weiss wofür man das noch braucht :-)

der


// DIR und STEP pins definieren
#define dirPin_VL 6 //2
#define stepPin_VL 7 //3
#define dirPin_HL 8 //4
#define stepPin_HL 9 //5
#define dirPin_VR 2 //6
#define stepPin_VR 3 //7
#define dirPin_HR 4 //8
#define stepPin_HR 5 //9

//enable pins definieren
#define enbl_VL 40
#define enbl_HL 42
#define enbl_VR 41
#define enbl_HR 43

//resett pin definieren
#define PIN2RESET 10

//steps pro umdrehung definieren:
#define stepsPerRevolution 200 //1600

#define microstep_pin_S1 34
#define microstep_pin_S2 36
#define microstep_pin_S3 38

uint8_t taste = 0;

uint8_t s_vor = 0;
uint8_t s_rueck = 0;
uint8_t s_links = 0;
uint8_t s_rechts = 0;
uint8_t s_stop = 0;
uint8_t s_parken = 0;


void setup()
{

//pins als output:
pinMode(dirPin_VL, OUTPUT);
pinMode(stepPin_VL, OUTPUT);
pinMode(enbl_VL, OUTPUT);
pinMode(dirPin_HL, OUTPUT);
pinMode(stepPin_HL, OUTPUT);
pinMode(enbl_HL, OUTPUT);
pinMode(dirPin_VR, OUTPUT);
pinMode(stepPin_VR, OUTPUT);
pinMode(enbl_VR, OUTPUT);
pinMode(dirPin_HR, OUTPUT);
pinMode(stepPin_HR, OUTPUT);
pinMode(enbl_HR, OUTPUT);

//resett pin zustand definieren
pinMode(PIN2RESET, INPUT);

Serial.begin(115200);
Serial1.begin(115200);
Serial.println("code----- /home/georg/Arduino/outdoor_robo/stepper/test_vier_stepper/ohne_lib/outdoor_FB_switch_richtung_stop_full_half_quarter_ step_delay_bl");

Serial.println("bluetooth übertragung!");

//enable pins deaktivieren:
digitalWrite(enbl_VL, LOW);
digitalWrite(enbl_HL, LOW);
digitalWrite(enbl_VR, LOW);
digitalWrite(enbl_HR, LOW);

//resett pin aktivieren
digitalWrite(PIN2RESET, HIGH);
}


void loop()
{
if (Serial1.available())
{
taste = Serial1.read();
Serial.println(taste);
// taste_neu = taste;
tasten_abfrage();
}


richtung_abfrage();
}

/************************************************** *********/
void richtung_abfrage(void)
{
if (s_rechts == 1) rechts_drehen();
if (s_links == 1) links_drehen();
if (s_vor == 1) vorwaerts();
if (s_rueck == 1) rueckwaerts();
if (s_stop == 1) alle_stepper_stop();
if (s_parken ==1) parken();
}

/************************************************** *********/
void tasten_abfrage(void)
{
switch (taste)
{

case 116:// fahre vor - FB quer smartphone
{

vorwaerts();
break;
}

case 115:// fahre rückwärts - FB quer smartphone
{

rueckwaerts();
break;
}

case 100:// rotate rechts - FB quer smartphone
{
rechts_drehen();
break;
}

case 97:// rotate links - FB quer smartphone
{

links_drehen();
break;
}

case 49: //alle stepper stop - FB quer smartphone
{

alle_stepper_stop();
break;
}

case 51: //parken - FB quer smartphone
{

parken();
break;
}

case 52: //full step - FB quer smartphone
{

full_step();
break;
}

case 53: //half step - FB quer smartphone
{

half_step();
break;
}

case 118: //quarter step - FB quer smartphone
{

quarter_step();
break;
}

case 98: //eight step - FB quer smartphone
{

eight_step();
break;
}

}

}


/************************************************** *********/

void full_step (void)
{
digitalWrite (microstep_pin_S1, LOW);
digitalWrite (microstep_pin_S2, LOW);
digitalWrite (microstep_pin_S3, LOW);
}

void half_step (void)
{
digitalWrite (microstep_pin_S1, HIGH);
digitalWrite (microstep_pin_S2, LOW);
digitalWrite (microstep_pin_S3, LOW);
}

void quarter_step (void)
{
digitalWrite (microstep_pin_S1, LOW);
digitalWrite (microstep_pin_S2, HIGH);
digitalWrite (microstep_pin_S3, LOW);
}

void eight_step (void)
{
digitalWrite (microstep_pin_S1, HIGH);
digitalWrite (microstep_pin_S2, HIGH);
digitalWrite (microstep_pin_S3, LOW);
}

void sixteen_step (void)
{
digitalWrite (microstep_pin_S1, HIGH);
digitalWrite (microstep_pin_S2, HIGH);
digitalWrite (microstep_pin_S3, HIGH);
}


/************************************************** *********/

void parken(void)
{
//enable pins deaktivieren
digitalWrite(enbl_VL, LOW);
digitalWrite(enbl_HL, LOW);
digitalWrite(enbl_VR, LOW);
digitalWrite(enbl_HR, LOW);

s_vor = 0;
s_rueck = 0;
s_links = 0;
s_rechts = 0;
s_stop = 0;
s_parken = 1;
}

void alle_stepper_stop(void)
{
//enable pins deaktivieren
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);

s_vor = 0;
s_rueck = 0;
s_links = 0;
s_rechts = 0;
s_stop = 1;
s_parken = 0;

// reboot();
}

/************************************************** *********/
void vorwaerts(void)
{
if(s_vor == 0)
{
// enable pins aktivieren:
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);

//richtung bestimmen
digitalWrite(dirPin_VL, LOW);
digitalWrite(dirPin_HL, LOW);
digitalWrite(dirPin_VR, HIGH);
digitalWrite(dirPin_HR, HIGH);

s_vor = 1;
s_rueck = 0;
s_links = 0;
s_rechts = 0;
s_stop = 0;
s_parken = 0;
}
else{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(1000);
}
}
/************************************************** ********/
void rueckwaerts(void)
{
if(s_rueck == 0)
{
// enable pins aktivieren:
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);

//richtung bestimmen
digitalWrite(dirPin_VL, HIGH);
digitalWrite(dirPin_HL, HIGH);
digitalWrite(dirPin_VR, LOW);
digitalWrite(dirPin_HR, LOW);

s_vor = 0;
s_rueck = 1;
s_links = 0;
s_rechts = 0;
s_stop = 0;
s_parken = 0;
}
else{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(1000);
}
}

/************************************************** *********/
void rechts_drehen(void)
{
if(s_rechts == 0)
{
// enable pins aktivieren
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);

//richtung bestimmen
digitalWrite(dirPin_VL, LOW);
digitalWrite(dirPin_HL, LOW);
digitalWrite(dirPin_VR, LOW);
digitalWrite(dirPin_HR, LOW);

s_vor = 0;
s_rueck = 0;
s_links = 0;
s_rechts = 1;
s_stop = 0;
s_parken = 0;
}
else{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(1000);
}
}
/************************************************** ********/

void links_drehen(void)
{
if(s_links == 0)
{
//enable pins aktivieren
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);

//richtung bestimmen
digitalWrite(dirPin_VL, HIGH);
digitalWrite(dirPin_HL, HIGH);
digitalWrite(dirPin_VR, HIGH);
digitalWrite(dirPin_HR, HIGH);

s_vor = 0;
s_rueck = 0;
s_links = 1;
s_rechts = 0;
s_stop = 0;
s_parken = 0;
}
else{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(1000);
}
}

/*
void links_drehen(void) //mit beschleunigung und sound
{
//enable pins aktivieren
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);

//richtung bestimmen
digitalWrite(dirPin_VL, HIGH);
digitalWrite(dirPin_HL, HIGH);
digitalWrite(dirPin_VR, HIGH);
digitalWrite(dirPin_HR, HIGH);

//"j = 2000": der Anfangswert für das Delay in Microsekunden

for (int i = 0, j = 2000; i < stepsPerRevolution; i++)
{
//"j > 500": der Endwert für das Delay in Microsekunden - bestimmt auch die Endgeschwindigkeit (mindestens 250 bis 300)

if (j > 300) j--;
//"z < 3": wieviele Schritte mit dem eingstellten Delay "j" gemacht werden sollen, bevor es reduziert wird

for (int z = 0; z < 3 && i < stepsPerRevolution; z++)
{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(j);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(j);
i++;
}
}
}
*/
/************************************************** *********/
void reboot()
{
pinMode(PIN2RESET, OUTPUT);
digitalWrite(PIN2RESET, LOW);
delay(100);
}
/************************************************** *********/

/************************************************** **********/

ist dafür gedacht, für mich den zusammenhang zwischen drehmoment, geschwindigkeit, den drei microstepps - modi und den delays beim steppercode zu testen. Für die microstepps habe ich die digitalen arduino pins 34, 36 und 38 verwendet. Da sind alle vier stepper zusammengeschaltet. Ein getrenntes schalten jedes einzelnen steppers schien nicht angebracht...

Gleich zu anfang ein "seltsames" verhalten:

bei 4 motoren ein komisches "stottern" bei der verwendung der microstepping pins. Bei entfernen eines der vier stepper (egal welches) ist das stottern weg. Hängt das mit den 5V an den digitalen pins zusammen? Liefern die pinns nicht genug spannung, bzw. strom?

EDIT:
ich habe die microstep-pins aufgeteilt auf links und rechts - das war's noch nicht, es lag daran dass diese pins nicht als output definiert waren...
jetzt kann ich weiter testen...

inka
09.01.2020, 12:05
bei der erweiterung der funktionen der smartphone fernbedienung musste ich langwierig testen, was das smartphone sendet und was der arduino im switch / case nun in der lage ist zu empfangen:




zeichen abfrage switch case /
zeichen gesendet smartphone






49
1


51
3


52
4


53
5


54
6


55
7


56
8


57
9


97
a


100
d


109
m


110
n


111
o


112
p


113
q


114
r


115
s


116
t


117
u


118
v


119
w


120
x




kennt jemand solch eine zuordnung? Oder ist es einfach von dem app-entwickler willkürlich so festgelegt worden?

Searcher
09.01.2020, 12:28
... kennt jemand solch eine zuordnung? ...

Zuordnung ist in der ASCII Tabelle festgelegt. Dezimalcode zu ASCII Zeichen: https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange #ASCII-Tabelle

Gruß
Searcher

inka
09.01.2020, 13:49
danke Searcher, hätte es mir eigentlich denken können...

liegt der grund für die verwendung der ASCII zeichen und der anschliessenden "übersetzung" ins dezimale beim smartphone oder arduino? Bei der FB am smartphone handelt sich ja nicht um eine strandardtastatur, die ist frei definierbar...

Klebwax
09.01.2020, 14:15
liegt der grund für die verwendung der ASCII zeichen und der anschliessenden "übersetzung" ins dezimale ...

Da wird nichts übersetzt. Statt "case 49:" kannst du auch schreiben "case 0x31", dann ist es hex oder "case '1': dann ist es ASCII. Natürlich geht auch "case 0b00110001:", wenn du lieber binäre Zahlen verwendest. Ist alles das Gleiche.

MfG Klebwax

Searcher
09.01.2020, 14:36
liegt der grund für die verwendung der ASCII zeichen und der anschliessenden "übersetzung" ins dezimale beim smartphone oder arduino? Bei der FB am smartphone handelt sich ja nicht um eine strandardtastatur, die ist frei definierbar...

Liegt beim Smartphone. Über eine Funktion wird das eingegebene Zeichen in eine Zahl nach der ASCII Tabelle codiert und verschickt; egal welche Tastatur verwendet wird. Wird nicht die ASCII Tabelle verwendet, muß der Empfänger wissen, welcher Code verwendet wird bzw. wie er das Zeichen darstellen soll.

Es werden nur Zahlen von der FB versendet und keine Buchstaben. Sender und Empfänger müssen sich verständigt haben, welcher Code verwendet wird, um sich zu verstehen. Die Zahl kommt im Arduino über die serielle Schnittstelle rein und Dein switch-case kann sie dann auswerten. Über die entsprechende Funktion im Arduino, die die ASCII Tabelle verwendet, kannst Du die Zahlen wieder in die eingetippten Buchstaben übersetzen.

Selbst wie die Zahl selbst übertragen wird, ist zwischen Sender und Enpfänger vereinbart. Eine Folge von elektrischen Impulsen, die als Nullen und Einsen interpretiert wird. Eine binäre Zahl, die hexadezimal, oktal, dezimal und was auch immer dargestellt werden kann. In Deinem Arduino Programm nutzt Du im "case" die dezimale Darstellung. Du könntest auch jede andere Zahlensystemdarstellung nutzen, solange die Programmiersprache das zuläßt und der Wert der Zahl äquivalent ist.

Gruß
Searcher

inka
17.01.2020, 18:44
die wartezeit (andere räder) nutzend, habe ich in der verdrahtung der stromversorgung und des akkuladens aufgeräumt. Zugegeben, man muss genauer hinschauen, auch deshalb, weil viele der kabel schwarz sind...
34711 34712
ich bin auf jeden fall froh, dass es ohne probleme funtioniert hat...

Rabenauge
17.01.2020, 21:02
Ich seh da kaum nen Unterschied, ehrlich gesagt.
Wenn du nicht flechten willst: ein paar kleine Kabelbinderchen könnten Wunder bewirken.

Moppi
17.01.2020, 21:27
Inka, auf dem Bild sieht das links oben alles so auf kleinen Raum gequetscht aus. Absicht oder hat sich so ergeben?
Das ist da ziemlich viel Kabelgewusel, kommst Du noch einwandfrei überall dran?
Die zusammengehörigen Kabel etwas bündeln, wäre vielleicht nicht schlecht, falls das auf dem wenigen Platz sinnvoll möglich ist.
Ich würde mal gerne die ganze Kiste von oben sehen. Auch wenn noch nicht viel drin ist.
Hast Du schon einen Plan, wo Du welche Baugruppen hinsetzen willst?

MfG

inka
18.01.2020, 11:07
es ist eine der typischen situation während der entwicklung bei meinen sachen, ein provisorium wird durch die "endgültige" ausführung ersetzt. Die stromversorgung des roboters war inzwischen geklärt, auch das laden des akku, so soll es auch bleiben. Deshalb habe ich die provisorischen, gesteckten verbindungen nun richtig verdrahtet. Das meiste spielt sich auf und unter der platine mit dem step-down konverter ab:
34714

die ursprünglichen akkuanschlüsse 34715 und unzählige adapter wurden durch die schraubklemmen auf der platine ersetzt, die internen verbindungen auf der platine sind auch fest verlötet, ein klemmenpaar ist für den solarpanel vorgesehen, gesteckt werden nur noch stromversorgung für die motoren und den arduino.

Die obere linke ecke beinhaltet die akkuladebuchse und einen ladeschalter. Durch den akku bedingt muss der akkuschalter beim laden auf ON stehen, deshalb wollte ich zum stationärem laden den rest der elektronik abschalten.
34716 34717
Von aussen ist auch ein voltmeter zu erkennen, den wollte ich später durch die spannungsüberwachung per arduino ersetzen, weiss aber noch nicht so genau, wie das geht :-)

Moppi
18.01.2020, 11:47
Von aussen ist auch ein voltmeter zu erkennen, den wollte ich später durch die spannungsüberwachung per arduino ersetzen, weiss aber noch nicht so genau, wie das geht :-)

Mit einem Spannungsteiler, zum Beispiel, wie wir das hier anscheinend alle machen. Den Mittelabgriff an einem Analog-In (ADC0, ADC1 ....) anschließen. Der Rest passiert in der Software.
Hier ist ein Beispiel: https://praxistipps.chip.de/arduino-voltmeter-bauen-so-gehts_101299



MfG

Rabenauge
18.01.2020, 12:57
Genau so mache ich das auch immer.
Das wird, mit Widerständen in Bastlerqualität (Toleranz), nich aufs hundertstel Volt genau, aber um nen Akku zu überwachen, reicht es.

Aber was anderes: ich sehe da ein Allseitenrad- willst du die Dinger wirklich draussen benutzen?
Würde mich mal interessieren, wie _das_ funktioniert...nach meinem Verständnis müssten die schon auf sehr kurzem Rasen ziemlich versagen.

inka
18.01.2020, 13:18
Aber was anderes: ich sehe da ein Allseitenrad- willst du die Dinger wirklich draussen benutzen?
Würde mich mal interessieren, wie _das_ funktioniert...nach meinem Verständnis müssten die schon auf sehr kurzem Rasen ziemlich versagen.

die, die jetzt drauf sind habe ich zeitweise von einem anderen, kleineren fahrgestell "kanibalisiert". Warte noch auf grössere, die schwimmen noch irgendwo im indischen ocean... Sind dann welche mit schräg stehenden rollen, bei 4 rädern gehen die, die jetzt drauf sind für die seitwärtsbewegung garnicht...
Melde mich dann mit einem video, wenns soweit ist...

inka
22.01.2020, 15:12
hallo Moppi,
Du wolltest doch mal einen blick von oben in die kiste werfen :-)

34754
stand jetzt, 22.01.2020 15:00

und das war drinnen (akku, arduino und die powerplatine nicht mit auf dem bild):

34753

nach dem motto (alles neu macht der mai - eigentlich der januar)
so oder in etwa so soll es dann aussehen:

34755
mit weniger strippen und damit weniger fehleranfällig...
die box wird auch neu, heller, da sieht man besser was und wie drinnen ist :-)

Moppi
22.01.2020, 15:25
Ja, da war schon einiges, mit vielen Kabeln verbaut. Das größe Problem ist das Kreuz- und Querlaufen von Kabeln.
Wenn die gut verlegt sind, findet man sich einfach besser durch.

Schon erstaunlich, was an Kabeln so zusammen kommt.


MfG

Rabenauge
22.01.2020, 23:36
Also, wenn du keine outdoortauglichen Allseitenräder auftun kannst (hab ich noch keine gesehen), dann wirst du ein Problem haben: das Ding wird mit ner Panzerlenkung _nicht_ vernünftig lenkbar sein.
Dafür ist a) der Radstand zu gross (Hebelverhältnisse) und b) das Gewicht zu hoch.

Drinnen würd es gehen, da könnte man einfach Reifen mit wenig Grip nehmen, aber draussen brauchst du genau den.
Und der kämpft dann gegen die Lenkung, und hat das Hebelgesetz auf seiner Seite.

inka
23.01.2020, 17:38
ich bin immer noch optimistisch :-)
der radabstand in fahrtrichtung ist 290mm, der quer dazu 320. Ein ähnliches verhältnis (145 / 180) hatte ich schon mal, auch allseitenräder und die kleinen steppermotoren (28BYJ-4) - und es ging... Klar nicht im tiefsten wald, Pirna ist ja nicht Erzgebirge :-)

Mit Panzerlenkung meinst Du auf der stelle drehen, denke ich...

Das gewicht? Ich baue ja nun um, weniger verdrahtung - ist es ein vorschlag? :-)

Rabenauge
23.01.2020, 22:12
Nö-ich meine mit Panzerlenkung alles, was nur über unterschiedliche Drehzahlen beider Seiten läuft.
Das kommt im Grunde aufs Selbe raus, rein mechanisch: die Räder müssen gegen ihren eigenen Seitenhalt kämpfen....das funktioniert so _nie_ wirklich gut, die einzigen Fahrzeuge,die das machen, sind die kleinen Bobcats- und die haben, eben aus dem Grund, die Räder sehr eng beisammen.
Und das Lenkverhalten der Dinger ist gruselig, um es nett auszudrücken.

Natürlich kommts drauf an: grosse Bögen gehn leichter als auf der Stelle drehen.
An wirklich Freiland-tauglichen Allseitenrädern wäre ich mal höchst interessiert, aber ich meine: mindestens Rasen (kein Golfplatz).
Da kenne ich keine, die das könnten, jedenfalls in unseren üblichen Grössen (sagen wir einfach, bis ca. 10cm Durchmesser).
Bin mal gespannt....

Moppi
29.01.2020, 13:41
Wie ist der aktuelle Stand?


MfG

inka
29.01.2020, 14:11
noch der alte, nach der demontage ist die kiste noch leer, weil

a) nicht klar ist wie dieses motherboard (https://www.amazon.de/gp/product/B07D11YR6N/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1) für die motortreiber mit dem arduino mega 2560 zusammenspielt und AZ-delivery nicht in der lage ist fragen zu beantworten...

b) ich mir die zeit mit dem saismart vertreibe :-)

Moppi
29.01.2020, 14:22
Das Board ist für Arduino UNO R3.
Das wird auf den Arduino draufgesteckt.
Von oben dann sind alle Anschlüsse vorhanden, für 4 Schrittmotortreiber. Bezeichnet sind die mit: X, Y, Z und A.
Auf der linken Seite sind jeweils die Pins für STEP (blaue) und DIR (gelb).

Das ist auf eine CNC-Fräse ausgelegt. Drum sind Pins vorhanden für End-Stops etc. Da muss man nur mal messen, welche Pins oben auf der Platine wo genau hin führen, auch, auf welchen Pin unten auf der Platine. Die Pin-Bezeichnungen der A4988 kennt man doch. Muss man raussuchen und aufschreiben. Dann kann man das verkabeln.

Auf dieser Seite gibt es dazu genauere Informationen. Dort ist auch ein UNO bezeichnet, welche Signale des Shields auf welchen Pin am UNO gehen.
https://blog.protoneer.co.nz/arduino-cnc-shield/

Nur bedingt geeignet, wie es aussieht. Da kannst Du auch selber eine Platine Löten, EURo-Format wird wohl passen. Sockelleisten drauf löten, für die A4988, Kondensatoren drauf löten und Stiftleisten drauf löten, für Dupont-Stecker. Wenn Du es passend machst, kannst Du es auf den MEGA drauf stecken.



MfG

inka
29.01.2020, 14:40
Das Board ist für Arduino UNO R3. Das wird auf den Arduino draufgesteckt. Von oben dann sind alle Anschlüsse vorhanden, für 4 Schrittmotortreiber. Bezeichnet sind die mit: X, Y, Z und A. Auf der linken Seite sind jeweils die Pins für STEP (blaue) und DIR (gelb).

Das ist auf eine CNC-Fräse ausgelegt. Drum sind Pins vorhanden für End-Stops etc. Da muss man nur mal messen, welche Pins oben auf der Platine wo genau hin führen, auch, auf welchen Pin unten auf der Platine. Die Pin-Bezeichnungen der A4988 kennt man doch. Muss man raussuchen und aufschreiben. Dann kann man das verkabeln.
das ist schon alles klar...

alle shields, die ich bisher hatte, die für den UNO berstimmt waren, liessen sich auch mit dem mega betreiben. Ob das hier auch so ist - das wollte ich eigentlich vom lieferanten bestätigt wissen - denke nur an das fliegensterben am anfang mit den motortreibern. Die bleiben aber die antwort schuldig...

Wenn ich das board auf den mega draufstecke - mechanisch passt es in die buchsen am arduino - die 5V spannug liegt dann auch an den entsprechenden anschlüssen für die 4 treiber auch an, auch die 12V für die stepper. Allerdings funktioniert z.b. das US modul nicht. ZUm einen, weil die pins die ich verwendet habe offensichtlich von dem motherboard beklegt sind und andere gehen eben nicht - weil digital...

Jetzt ist die frage, ob ich nun einen UNO nehme und eben keine freien pins mehr hab und noch einen controler brauch, oder es mit dem mega doch geht. Da bich ich mir noch nicht mit mir einig :-)

Rabenauge
29.01.2020, 17:12
Warum nicht das RAMPS-Board (https://reprap.org/wiki/RAMPS_1.4)?
Das geht auf nen Mega...und ist gut dokumentiert.

inka
29.01.2020, 17:57
gute frage Sly,
weil ich es nicht gefunden habe...
sieht gut aus, die anschlüsse des mega sind aber alle durch das board abgedeckt. Kennst Du Dich mit dem board aus?

Rabenauge
30.01.2020, 00:54
Nicht wirklich- ich hab ein MKS-Board im Drucker, das passt besser zu meinen Anforderungen.
Rausgeführt sein müssen aber die meisten Anschlüsse trotzdem: das Ding ist nämlich auch ne Steuerung für 3D-Drucker- und muss demnach Anschlüsse für die ganzen Sensoren haben.
Und die sind meistens einfach nur auf der Erweiterung durchgeschleift- man kann die also so ansprechen, als wär das Board gar nicht dazwischen.
Einige laufen aber wohl auch mit 12V, da müssten irgendwelche Treiber drauf sein, für Lüfter usw.

Moppi
30.01.2020, 09:23
Ich denke, es gibt keine passgenaue Lösung, wenn man mit solchen Boards arbeiten möchte. Es muss eines sein, das gerade auf meine Hardwareanforderungen passt. Sobald das nicht der Fall ist, wird es kompliziert.

Zwar ist es nicht so schön, viele Kabel verlegen zu müssen, aber eine individuelle Lösung verlangt wohl nach so etwas.

Zu Anfang habe ich immer neue Gehäuse gedruckt, wenn etwas daran fehlte. Mittlerweile habe ich mich mit mir geeinigt, leere Gehäuse zu drucken, die nur Aussparungen (Kabeldurchführung etc.) haben. Dann Drucke ich für jedes Board, ob es ein Nano, ein nodeMCU oder was anderes ist, ein eigenes kleines Gehäuse, wo das rein passt (die Erstellung geht meist sehr schnell, da nicht viel dran ist, i.R. nur ein Quader, wo Aussparungen herausgeschnitten werden). Damit spare ich Druckaufwand und bin frei in der Positionierung, innerhalb des großen Gehäuses. Erst war es nur eine Idee, aber inzwischen greife ich, weil es praktisch ist, immer mehr auf diverse Kabelhalter zurück.

Es ist praktisch von so etwas immer eine Hand voll herumliegen zu haben:


https://www.roboternetz.de/community/attachment.php?attachmentid=34780&d=1580371688


Also schaue ich, wo die Gehäuse für die Boards platziert werden könnten/müssten, nehme Sekundenkleber (oder anderen, wenn das Festwerden länger Zeit hat) und klebe die also an. Ich war zwar nie ein Freund von Verklebungen, aber bei PLA-Teilen geht das wirklich gut und hält. Wenn ich dann die Kabel verlege, gucke ich, ob Kabelpaare dauerhaft so liegen bleibt, wenn ja nehme ich Kabelbinder. Wenn Kabel vielleicht nochmal anders verlegt werden müssen, nehme ich Klippse, um sie zusammen zu halten. Wenn zusammengebundene oder zusammengeklippste Kabel dann einen Platz haben, wo sie liegen bleiben sollen, suche ich mir aus dem Haufen Klippse und Führungen etwas passendes heraus, klebe das mit Sekundenkleber irgendwo dran, wo es praktisch ist und hänge dort mein Kabel ein. Damit bekommt alles eine Ordnung und lässt sich gut verlegen.

Selbst kleine Verteilungen baue ich nach o.g. Schema ein:


https://www.roboternetz.de/community/attachment.php?attachmentid=34781&d=1580373496



Ein angeklebtes Minigehäuse mit eingesteckter Miniplatine. Da schraube ich nichts mehr an. Zur Not kann die Miniplatine auch eingeklebt werden. Hält i.R. aber auch so gut.


MfG

inka
30.01.2020, 14:45
eine gute idee. Die erste umstellung war zum drucken als solchem hin, dazu hat es erstmal einen 3D drucker gebraucht, der zweite schritt ist nur konsequent. Ich denke durch die eingeklebten teile könnte auch gewisse versteifung der gehäuse erreicht werden - bei dünneren wanddicken...
Womit klebst Du das? 2 komponenten kleber? Also UHU plus schnellfest, oder sowas ähnliches?

Die RAMPS platine habe ich inzwischen bestellt, die doku im netz ist wirklich gut, die kiste füllt sich inzwischen wieder :-)
34782

Moppi
30.01.2020, 17:22
Ich habe Pattex Kraftkleber transparent probiert, das hat funktioniert und Pattex Sekundenkleber (rote Minituben).
Ich habe einmal 2-Komponentenkleber verwendet, dass hat lange gedauert (mehrere Tage), bis die Masse mal fest war - kann ich nicht empfehlen.

Sieht nach Weichplastik aus, was Du als Wanne genommen hast. Da kannst Du schlecht was ankleben.


PS:
Mein nodeMCU nervt. Das mit den Pins funktioniert nicht, wie ich will. Jetzt muss ich mich über den NANO hermachen, der hat Pins genug und Kommunikation per ser. Schnittstelle herstellen. Kann ich wieder alle Sensoren umstecken und das ganze Programmkonzept ändern, was aber sowieso fällig war - der erste Test mit dem Linienfolger hat mich geläutert; so kann ich nicht weitermachen.



MfG

inka
30.01.2020, 17:37
Ich habe Pattex Kraftkleber transparent probiert, das hat funktioniert und Pattex Sekundenkleber (rote Minituben).
Ich habe einmal 2-Komponentenkleber verwendet, dass hat lange gedauert (mehrere Tage), bis die Masse mal fest war - kann ich nicht empfehlen.
genau umgekehrte erfahrungen: patex hält nicht, uhu plus schnellfest nach 5 minuten richtig hart.


Sieht nach Weichplastik aus, was Du als Wanne genommen hast. Da kannst Du schlecht was ankleben. Nee da geht kein kleben, das war mir klar, aber in der grösse bekommst Du nix anderes mit dem gewicht. Besonders glücklich bin ich mit dem material nicht...



Mein nodeMCU nervt. Das mit den Pins funktioniert nicht, wie ich will. Jetzt muss ich mich über den NANO hermachen, der hat Pins genug und Kommunikation per ser. Schnittstelle herstellen. Kann ich wieder alle Sensoren umstecken und das ganze Programmkonzept ändern, was aber sowieso fällig war - der erste Test mit dem Linienfolger hat mich geläutert; so kann ich nicht weitermachen. Ist mir auch schon so gegangen... Die besten erfahrungen habe ich eigentlich mit dem mega gemacht - wenn man den platz für hat, das ist ja bei Deinem schwierig :-)

oberallgeier
30.01.2020, 19:46
.. Ich habe einmal 2-Komponentenkleber verwendet, dass hat lange gedauert (mehrere Tage), bis die Masse mal fest war - kann ich nicht empfehlen ..
.. genau umgekehrte erfahrungen: patex hält nicht, uhu plus schnellfest nach 5 minuten richtig hart ..Das meiste - vorzugsweise Metall - klebe ich mit 2K "UHU PLUS ENDFEST 300". Härten bei 180°C - wenn möglich. Klebt mit sehr hoher Festigkeit. UHU PLUS SCHNELLFEST kenne ich nur mit recht bescheidener Festigkeit. Ansonsten Klebstoff entsprechend der zu verbindenden Werkstoffe.

Kunststoff auf Kunststoff ist aber ne Wissenschaft für sich - Material der einen und der anderen Seite bedingen den Klebwerkstoff bzw. das KLebverfahren. Manches klebt garnicht oder nur mit Primer, anderes hält kaum.

Wenn ich nicht hohe Klebefestigkeit benötige, ist für mich in vielen Fällen Heißkleber DIE Wahl. Der ist ziemlich unkompliziert , aber leider eben auch heiß.

Moppi
30.01.2020, 20:11
Ich habe versucht, eine meiner verklebten Sachen wieder raus zu holen. Wollte das gegen ein neues Teil austauschen. Habe dann mit einer Zange an den Wänden gezogen. Das Teil habe ich nicht rausbekommen, dafür die 2.5mm starke Wand zerbröselt. :)


MfG

Rabenauge
30.01.2020, 23:52
Ich nem beim XPlorer (und so manchen anderen Basteleien) grundsätzlich Sekundenkleber.
Wahlweise als Gel oder flüssig- und _immer_ die billigen.

Beides hält zuverlässigst, aber: der bindet mit PLA _niemals_ sofort ab. Das ist dann eher sowas wie 10-Minuten-Kleber.
Hat aber den Vorteil, dass man zum Ausrichten etwas Zeit hat.
Wenn man nur hier und da nen Tropfen benutzt, kriegt man die Teile auch vorsichtig wieder auseinander gehebelt-Sekundenkleber wird so spröde, dass er eher bricht als PLA.
So hefte ich immer alles erstmal, und wenns dann wirklich halten soll, geb ich ringsrum noch ne Naht Gel- das kriegt man dann nur noch mit ner Flex wieder auseinander.
Damit kleb ich beispielsweise auch Muttern ein, oder so- mit Metall/Pla-Verklebungen funktionierts genauso.

Was auch tadellos funktioniert: Epoxydharz. In meinem Fall (jeder andere tuts aber auch) der Pattex Kraft-Mix (den gabs grad um die Ecke, normal halt ich von Pattex nicht viel). Damit hab ich nun schon einige gedruckte Flöten absolut solide und luftdicht verklebt.
Hält wie der Teufel- und füllt Spalten halt besser als dünnflüssiger Sekundenkleb.

Tip für Moppi: wenn Zweikomponentenkleber nicht fest wird, dann liegts am falschen Mischungsverhältnis.
Bei Epoxy _ausnahmslos_ daran.
Ansonsten wird das Zeug _immer_ fest.
Allerdings braucht _richtiges_ Epoxydharz zum aushärten tatsächlich mindestens 24 Stunden, wenn man nich tempert (das beschleunigt die Sache enorm), das, was man so im Baumarkt bekommt, sind meist irgendwie gepanschte Harze, die zwar nicht mehr die Festigkeit erreichen, die Epoxy _könnte_, aber dafür schneller aushärten.
Mit richtigem Epoxy kann man ne Abschleppöse an nen Panzer einfach ankleben, hehe.
Pures Harz hat ausserdem die verwirrende Eigenschaft, nach der Topfzeit (dreiviertel Stunde..) erstmal zu gelieren, da denkt man, es fängt an, fest zu werden, aber dem ist nicht so-es wird danach noch mal flüssiger.
Das Zeug muss man, bis es wirklich ausgehärtet ist, behandeln wie ein rohes Ei- drum gibts auch immer mehr gepanschte Mischungen zu kaufen, die sind einfacher zu handhaben.

Zu der Weichplastik-Kiste: Heisskleber geht.
Notfalls vorher noch bisschen anrauhen.
Am besten, einfach nen Boden aus _irgendwas_ klebbarem reinmontieren, und dann, wie oben beschrieben, weiter.
Den Boden könnte man auch rein schrauben (ne Sperrholz-Platte z.B.).

inka
01.02.2020, 16:29
ein schritt weiter, das helle gehäuse füllt sich
34793 3479434792
die RAMPS platine müsste nächste woche kommen, dann kann ich auch die stepper verdrahten. Bin gespannt ob das betreiben der motoren wieder ganz anders sein wird...

Rabenauge
02.02.2020, 12:46
Die Nema 17 müsstest du einfach nur anstecken.
Das funktioniert eigentlich bei jedem 3D-Drucker-Mainboard.

Wenn du rausfinden willst, wie die ganze Geschichte angesteuert wird, empfehle ich dir, mal in die "Standard"-Firmware für 3D-Drucker zu gucken (Marlin), da sind auch Pinouts für alle möglichen Boards definiert, du siehst, welche Ausgänge du wofür benutzen könntest, usw.

Und: schön gemacht, mit dem Display!
Ich liebe diese blauen Dinger.

Moppi
02.02.2020, 12:48
Das Display-Gehäuse sieht gar nicht so schlecht aus. Nur teils etwas Unterextrusion im Druckbild zu erkennen.
Auf jeden Fall interessant, mit An - / Aus-Schalter.


MfG

inka
02.02.2020, 15:44
Das Display-Gehäuse sieht gar nicht so schlecht aus. Nur teils etwas Unterextrusion im Druckbild zu erkennen.
Auf jeden Fall interessant, mit An - / Aus-Schalter.
der schalter ist dazu da die ganze elektronik im roboter beim laden abzuschalten, der akku ist intern so verschaltet, dass der an/aus schalter des akkus an sein muss, damit geladen wird.



Wenn du rausfinden willst, wie die ganze Geschichte angesteuert wird, empfehle ich dir, mal in die "Standard"-Firmware für 3D-Drucker zu gucken (Marlin), da sind auch Pinouts für alle möglichen Boards definiert, du siehst, welche Ausgänge du wofür benutzen könntest, usw.
danke für den tipp, schaue ich mir an...


Und: schön gemacht, mit dem Display! Ich liebe diese blauen Dinger.
ich auch:-), ansapruchslos, gut programmierbar, auch die ablesbarkeit ist ok...

Rabenauge
02.02.2020, 16:53
Die blauen Dinger haben einfach irgendwie nen Charme.
Obwohl ich viel lieber mit nem Nextion spiele (das kann einfach um Welten mehr)- ab und zu muss es ein blaues LCD sein, hehe.

inka
02.02.2020, 17:23
Wenn du rausfinden willst, wie die ganze Geschichte angesteuert wird, empfehle ich dir, mal in die "Standard"-Firmware für 3D-Drucker zu gucken (Marlin), da sind auch Pinouts für alle möglichen Boards definiert, du siehst, welche Ausgänge du wofür benutzen könntest, usw.

pinouts als bilder oder ähnliches? Oder ist es irgendwo in den vielen files versteckt? Ich muss ja z.b. wissen an welchem arduino-pin der EN-pin des X-stepsticks liegt und sowas...

Rabenauge
02.02.2020, 21:04
Das ist in den Dateien drin.
Das sind etliche Tabs, wenn du Marlin in der Arduino-IDE öffnest.
Normalerweise aktiviert man dort die Optionen, die man braucht, je nachdem,w as man wirklich im Drucker verwendet- alles andere wird auskommentiert.
So kann man sich sein Marlin für genau diesen Drucker konfigurieren.

inka
04.02.2020, 16:53
Das ist in den Dateien drin.
Das sind etliche Tabs, wenn du Marlin in der Arduino-IDE öffnest.
Normalerweise aktiviert man dort die Optionen, die man braucht, je nachdem,was man wirklich im Drucker verwendet- alles andere wird auskommentiert.
So kann man sich sein Marlin für genau diesen Drucker konfigurieren.
für das konfigurieren eines 3d-druckers mag es funktionieren, aber:
- ich sehe nur drei tabs: konfiguration, konfiguration-adv und version. Geöffnet habe ich in der IDE den Marlin.ino sketch, der in der zip datei drin war...
ich versuch hier mal die datei mit den pinns für den mega hier hochzuladen. 34795.

- da stehen jede menge pinns und deren belegung drin, allerdings bin ich beim durchmessen des boards (ohne was dran) beim EN-pin X auf den kontakt 24 gekommen und nicht 61
- damit könnte ich - zwar sehr verunsichert, aber immerhin - was anfangen, der versuch mal die zuordnung für den DIR pin X habe ich einfach keine zuordnung zu den pins gefunden, die zum mega gehen
- es waren auch kein jumper oder sowas gesetzt

Ich glaube das ist nicht der weg, den ich gehen kann. Gibts da noch was anderes an unterlagen?
EDIT:
ich hab jetzt noch was gefunden, das werde ich noch ausprobieren:
34796

Rabenauge
04.02.2020, 20:11
Ähm- du hast Marlin2 oder?
Da wurde wohl mehr umorganisiert, als ich dachte.
Ich fahr die 1.1.9, da hast du mehrere Dutzend Tabs.
Die 2er Version hab ich mir noch nie angesehen, weil ich die aufm 8bit-Board eher nicht brauche.

inka
06.02.2020, 15:36
Ähm- du hast Marlin2 oder? Da wurde wohl mehr umorganisiert, als ich dachte.
ja, ich habe die 2.0 runtergeladen. Ist aber nicht weiter schlimm dass ich da nichts gefunden habe, mit der bereits geposteten pinbelegung zwischen dem mega und der ramps platine ist es bereits gut gelaufen, ein stepper - als test - tut bereits :-)
34797
also ein kleiner schritt wieder vorwärts, jetzt muss ich die leitungen zu den steppern anpassen und einbauen...

Rabenauge
06.02.2020, 23:35
..diese Leitungen gibts auch fertig in allen möglichen Längen zu kaufen.
Wollts nur erwähnen (im 3D-Drucker-Zubehör).

Aber schön, dass es soweit schon mal funktioniert.
Ich müsst meinen XP2 nun auch endlich mal neu verkabeln.....aber immer dieses schreckliche Arbeiten zwischendurch, da kommt man zu nix..

inka
07.02.2020, 15:44
..diese Leitungen gibts auch fertig in allen möglichen Längen zu kaufen. Wollts nur erwähnen (im 3D-Drucker-Zubehör).
ich hab inzwischen richtige routine in anfertigung von dupont wire's. Im kontakt anlöten (wenig lot, eigentlich nur angeheftet, aber kontaktiert) und dann mit einer gebogenen spitzzange die lappen am kontakt zudrücken. geht inzwischen ganz fix :-)


Aber schön, dass es soweit schon mal funktioniert. ich glaube der umbau hat sich gelohnt:
34799 34800
nochmals danke für den tipp mit der RAMPS platine - der war goldwert :-)



Ich müsst meinen XP2 nun auch endlich mal neu verkabeln.....aber immer dieses schreckliche Arbeiten zwischendurch, da kommt man zu nix.. musst halt noch bissl warten bis zur rente - aber nur vorteile hat's nicht...

Klebwax
07.02.2020, 16:14
ich hab inzwischen richtige routine in anfertigung von dupont wire's. Im kontakt anlöten (wenig lot, eigentlich nur angeheftet, aber kontaktiert) und dann mit einer gebogenen spitzzange die lappen am kontakt zudrücken. geht inzwischen ganz fix :-)

Verlötete Litzen, insbesondere dünne, brechen mir zu oft am Rand der Lötstelle. Seitdem bei Ali oder eBay die Crimpzangen nicht mehr so teuer sind, hab ich mir eine zugelegt. Ebenfalls eine für 6,3mm Flachstecker. Damit mache ich, wenn es nichts fertiges gibt, meine Kabel selber. Dazu dann noch doppelreihige Stiftleisten mit Buchsen zum Aufquetschen auf Flachkabel. Solange man nichts abgeschirmtes braucht, kriegt man damit eigentlich alles hin.

MfG Klebwax

inka
07.02.2020, 17:04
Verlötete Litzen, insbesondere dünne, brechen mir zu oft am Rand der Lötstelle. Seitdem bei Ali oder eBay die Crimpzangen nicht mehr so teuer sind, hab ich mir eine zugelegt.
die gelöteten litzen in den dupont kontakten brechen deshalb nicht ab, weil sie durch die lappen am kontakt (die zusammengedrückt werden) zugentlastet sind... Auch ich habe nun in china eine crimp/abisolier/quetsch zange bestellt, mal sehen wie das damit geht...

Moppi
07.02.2020, 17:57
Was für Litze nimmst Du für diese kleinen Stecker?

MfG

inka
07.02.2020, 18:40
jetzt habe ich z.b. die stepperkabel gekürzt und damit bestückt

Moppi
07.02.2020, 18:52
Also keine extra gekauft für diese Zwecke?

MfG

inka
07.02.2020, 19:53
wie meinst Du das jetzt?
Für die dupont Kontakte habe ich schon litzen zwischen AWG 30 und 22 genommen. Bei 30 war es schwierig die Lappen so weit zusammen zu bekommen dass sie auch als zugentlastung was taugen, auch hielt es in der schwarzen Hülse nicht so gut, bei 22 musste ich etwas von der Isolation etwas abschneiden, damit es in die Hülse passt...⁴

Rabenauge
07.02.2020, 20:01
Bei Servokabeln mach ich das schon lange so: erst verlöten, dann die Zugentlastung drum biegen- entschieden besser als nur gecrimpt.
Ich wüsste nicht, wann ich mal nen Ausfall an so einem Servo hatte.
Will man in nem schnellen RC-Modell auch nich haben.....
Aber eigentlich nur dort- ansonsten löt ich möglichst alles (DuPont kann ich nich leiden, das hatten wir aber schon).

@inka: wegen dem Gold, musst mir halt mal Bescheid geben, ob du die angemessene Menge noch in deinem Auto transportieren kannst, oder ich mal mitm Anderthalbtonner runter kommen soll.
Kriegen wir schon hin...:)
Und du hast natürlich recht.
Altersrente hin oder her, das Problem ist: die müsste man -in angemessener Höhe- so mit 30 kriegen, wenn man noch fit ist.
Was soll man mit 70 damit, da verbringt man die meiste Zeit in Wartezimmern diverser Ärzte- das geht mitm Krankenschein genauso...

Klebwax
07.02.2020, 20:54
Bei Servokabeln mach ich das schon lange so: erst verlöten, dann die Zugentlastung drum biegen- entschieden besser als nur gecrimpt.

Das sehe ich nicht so. Sowohl die Zugentlastung als auch die Crimpung wird nicht "rumgebogen", sondern die Zungen werden durch das Kabel gestochen. Hier mal ein Bild zwar nicht von mir, aber meine Kontakte sehen ähnlich aus

34801

Wenn man es richtig macht, geht das nur mit Zerstörung des Kabels wieder ab. Es gibt professionell genügend Bereiche, in den gelötete Stecker nicht zulässig sind. Und wenn man sich Kabel konfektionieren lässt, sind die nie gelötet. Früher haben Crimpwerkzeuge gerne einige 100€ gekostet, da habe ich auch schon mal gelötet, wenn ich keinen Zugriff auf eine Zange hatte. Heute ist das aber kein Problem mehr.

Ich verwende 0,14 Litze von der Rolle für solche Dupont Stecker. Manchmal auch ein aufgespleistes Flachkabel. Für Flachstecker nehme ich 0,75 bis 2,5, manchmal auch 4mm², wie es für Lautsprecher verwendet wird.

MfG Klebwax

Rabenauge
08.02.2020, 00:20
Viele meiner Modell-Kollegen hatten schon unerklärliche Abstürze wegen "Fernsteuer-Versagen", haben RC-Cars aus dem selben Grund in Mauern oder Bordsteine gerammt....ich hatte in den ganzen Jahren _keinen einzigen_ derartigen Ausfall.
Und fast nie war eine Ursache zu finden-Funkausfall auf weniger als 200m kann man, bei einer vernünftigen RC-Anlage, völlig ausschliessen.
Früher mal waren Servokabel, von etwas hochpreisigen Anbietern, übrigens auch gelötet- inzwischen macht das keiner mehr.

Das Problem ist allerdings weniger das abgehen, sondern viel mehr die Tatsache, dass in fertig konfektionierten Kabel aus China oftmalls grottigste Litze verwendet wird- ich hatte schon Gerümpel, wo die lediglich billiger Eisendraht war.
Gecrimptes kann halt oxidieren, verlötetes nich...an meinem 3D-Drucker die Originalverkabelng war so sorgfältig "gecrimpt", dass mir ein Kabel abgefackelt ist- weil der Übergangswiderstand zu hoch war.
Das wird bei nem ordentlich gelöteten niemals passieren.

Moppi
08.02.2020, 06:48
Löten mit Zugentlastung (die auch das Abknicken des Kabels direkt an der Lötstelle verhindert), halte ich auch für besser. Bei Ministeckern ist das u.U. nicht möglich, bei zu dicken Kabeln auch nicht. Aber das mag jeder nach Erfahrung tun, wie er möchte. Ich verwende immer die fertigen Kabel mit diesen Dupont-Steckern. Leider leiern die Stecker meist schnell aus und sitzen wackelig.


MfG

Klebwax
08.02.2020, 09:54
Gecrimptes kann halt oxidieren, verlötetes nich...

Ich will deine Erfahrungen nicht anzweifeln, und du magst mit deinem Verfahren gut leben können. In der Industrie wird das aber anders gesehen. In vielen Bereichen sind Lötverbindungen nicht zulässig, aus verschiedensten Gründen, z.B Oxidation. Ohne aufwendige Reinigung ist nicht auszuschließen, das chemisch aggressive Reste von Flußmittel an bzw in der Lötstelle verbleiben. Es gibt auch reichlich Normen dazu.


Die Crimpverbindung entsteht durch das exakte Verpressen des Leiter- und Kontaktmaterials. Dabei werden die Metalle an der Pressstelle kalt verschweißt, was zu einer gasdichten Verbindung führt. Weder flüssige noch gasförmige Medien können unter normaler atmosphärischer Umgebung in den Crimp eindringen, was u. a. die Oxidation zwischen den verpressten Einzeldrähten verhindert. Die mechanischen und elektrischen Anforderungen an eine solche Verbindung sind in der Norm IEC 60352-2 definiert.

Was aber auch richtig ist, eine Lötverbindung ist besser als eine unsachgemäß ausgeführte Crimpung. Das aber im Hobbybereich selbst hinzukriegen, ist bei den inzwischen überschaubaren Preisen der Crimpzangen möglich. Ne Flachzange kommt aber bei den zu verwendenden Werkzeugen nicht vor.


Leider leiern die Stecker meist schnell aus und sitzen wackelig.

Viele dieser Kontakte sind für 10 Steckzyklen spezifiziert. Gute (teure?) halten möglicherweise trotzdem länger durch.

MfG Klebwax

oberallgeier
08.02.2020, 10:07
.. Gecrimptes kann halt oxidieren, verlötetes nich .. 3D-Drucker die Originalverkabelng .. ein Kabel abgefackelt ..
.. In der Industrie wird das aber anders gesehen. In vielen Bereichen sind Lötverbindungen nicht zulässig, aus verschiedensten Gründen, z.B Oxidation ..Ganz meiner Meinung. Früher, als Anfänger, hatte ich nur gelötet. Nach einigen Kabelbrüchen am Lötende und mühseligem Flachzangengecrimpe hatte ich mir die erste Crimpzange gekauft. Mein Vorbild war vor allem mein Auto - die Batterieanschlüsse an der Bordeinspeisung sind gekrimpt. Da laufen bis zu drei- vierhundert Ampere drüber, Wasser, Dampf(-strahler) - auch Säuredampf, Schmutz, Frost und Hitze - und das hält jahrelang.

inka
08.02.2020, 11:38
Kabel mit diesen Dupont-Steckern. Leider leiern die Stecker meist schnell aus und sitzen wackelig. man kann die metalischen viereckigen hülsen auch mal vorsichtig (mit einer pinsette z.b.) etwas zudrücken - dann halten sie auf den stiften wieder besser. Habe ich eben wieder gemacht - den kontakt in die pinsette rein und an den spitzen zusammendrücken, so hat man mehr gefühl beim zusammendrücken...

Moppi
08.02.2020, 12:26
Ich hab den Dreh noch nicht raus, wie man die Hülsen runter bekommt.

MfG

- - - Aktualisiert - - -

Mit einem Stecker habe ich es nun hinbekommen, die feinen Nasen sind sehr instabil und nicht dafür gedacht, zurückgebogen zu werden.

inka
08.02.2020, 12:51
mit der spitze eines (kleinen!) teppichmessers seitlich eingreifen und sachte rausbiegen, dabei mit der dritten hand an der litze ziehen :-)

inka
08.02.2020, 16:23
nun wieder zu RAMPS, MEGA und den steppersticks und steppern. Ich hab folgendes phänomen (es wäre auch verwunderlich, wenn alles auf anhieb klappen würde):

Ich verwende die steckplätze X, Y, E0 und E1 auf dem RAMPS board, es funktionieren die plätze Y und E0. Bei X tut sich nichts (motor dreht nicht, ist stromlos) bei E1 blockiert der stepper. An den zuleitungen und den steppern liegt es nicht, auch sind alle vier A4988 ok (mehrmals gewechselt und untereinander getauscht). Die verbindung der pins (EN, STEP, DIR) zum MEGA habe ich durchgemessen, ist ok. Betreiben versuche ich es mit diesem



#include "Arduino.h"

//LCD
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// DIR und STEP pins definieren
#define dirPin_VL 28
#define stepPin_VL 26
#define dirPin_HL 55
#define stepPin_HL 54
#define dirPin_VR 34
#define stepPin_VR 36
#define dirPin_HR 61
#define stepPin_HR 60

//definiere steps pro umdrehung:
#define stepsPerRevolution 200

//definiere enable pins:
#define enbl_VL 24
#define enbl_HL 38
#define enbl_VR 30
#define enbl_HR 56


void setup()
{
//LCD
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.setBacklight(HIGH);
lcd.print("vier stepper o.L.");
lcd.setCursor(0, 1);
lcd.print("basic example_1");
delay(2000);
lcd.clear();

//pins als output:
pinMode(dirPin_VL, OUTPUT);
pinMode(stepPin_VL, OUTPUT);
pinMode(enbl_VL, OUTPUT);
pinMode(dirPin_HL, OUTPUT);
pinMode(stepPin_HL, OUTPUT);
pinMode(enbl_HL, OUTPUT);
pinMode(dirPin_VR, OUTPUT);
pinMode(stepPin_VR, OUTPUT);
pinMode(enbl_VR, OUTPUT);
pinMode(dirPin_HR, OUTPUT);
pinMode(stepPin_HR, OUTPUT);
pinMode(enbl_HR, OUTPUT);

Serial.begin(115200);

// deaktiviere enable pins:
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);
}

void loop()
{

// aktiviere enable pins:
digitalWrite(enbl_VL, LOW);
digitalWrite(enbl_HL, LOW);
digitalWrite(enbl_VR, LOW);
digitalWrite(enbl_HR, LOW);


// drehe alle vier stepper langsam vorwaerts fünf mal herum:
//set dir pinns vorwarts
digitalWrite(dirPin_VL, LOW);
digitalWrite(dirPin_HL, LOW);
digitalWrite(dirPin_VR, HIGH);
digitalWrite(dirPin_HR, HIGH);

for (int i = 0; i < 5 * stepsPerRevolution; i++)
{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(2000);
}
delay(1000);

// drehe alle vier stepper langsam rückwärts fünf mal herum:
//set dir pinns vorwarts
digitalWrite(dirPin_VL, HIGH);
digitalWrite(dirPin_HL, HIGH);
digitalWrite(dirPin_VR, LOW);
digitalWrite(dirPin_HR, LOW);

for (int i = 0; i < 5 * stepsPerRevolution; i++)
{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(2000);
}
delay(1000);

}


EDIT: die spannungen bei X und E1, also Vmot und Vdd sind da...
woran kann das mit X und E1 denn liegen?

Moppi
08.02.2020, 17:05
Hallo Inka,

mein Vorschlag wie folgt.

Zuerst musst Du sicher gehen, dass alles funktioniert. Das kannst Du so machen:

Alle Verbindungen vom Arduino zu den A4988 durchmessen. Indem Du jeden Pin einzeln auf HIGH und LOW setzt, so etwas wie ein Blink-Sketch. Dann am A4988, mit einem Multimeter, die Spannung an den Pins messen.
Für dieses Vorgehen schreibst Du Dir einen kleinen Sketch und spielst den - und nur den - extra auf den Arduino auf.
So stellst Du eben fest, ob Du die richtigen Pins ansteuerst, ob bei der Ansteuerung der Pins auch die Signale dort an den Treibern ankommen, wo sie ankommen sollen.

Wenn das dann funktioniert, Pin-Vertauschungen und evtl. Doppelbelegungen ausgeschlossen sind, dann kann man die Pin-Nummern nochmal in Deinem "großen" Sketch nachprüfen. Wenn das dann auch alles seine Richtigkeit hat, kann man sich an die Programmlogik machen, dann muss dort der Fehler liegen.

MfG

Klebwax
08.02.2020, 18:11
Alle Verbindungen vom Arduino zu den A4988 durchmessen. Indem Du jeden Pin einzeln auf HIGH und LOW setzt, so etwas wie ein Blink-Sketch. Dann am A4988, mit einem Multimeter, die Spannung an den Pins messen.

Ich nehme für solche Messungen ein Scope. Da kann man das Signal auch schnell (Millisekunden) toggeln lassen und sich die Flanken ansehen. Gleichzeitig kann man auf die danebenliegenden Pins bzw Leiterbahnen gehen und schauen, ob da das Signal fälschlicherweise auch auftaucht. So findet man sowohl Unterbrechungen als auch Kurzschlüsse.

MfG Klebwax

inka
09.02.2020, 14:51
Zuerst musst Du sicher gehen, dass alles funktioniert. Das kannst Du so machen:
Alle Verbindungen vom Arduino zu den A4988 durchmessen. Indem Du jeden Pin einzeln auf HIGH und LOW setzt, so etwas wie ein Blink-Sketch. Dann am A4988, mit einem Multimeter, die Spannung an den Pins messen.
Für dieses Vorgehen schreibst Du Dir einen kleinen Sketch und spielst den - und nur den - extra auf den Arduino auf.
So stellst Du eben fest, ob Du die richtigen Pins ansteuerst, ob bei der Ansteuerung der Pins auch die Signale dort an den Treibern ankommen, wo sie ankommen sollen.
habe folgenden sketch geladen:



#include "Arduino.h"


//LCD
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);


// DIR und STEP pins definieren
#define dirPin_VL 28
#define stepPin_VL 26
#define dirPin_HL 55
#define stepPin_HL 54
#define dirPin_VR 34
#define stepPin_VR 36
#define dirPin_HR 61
#define stepPin_HR 60

//definiere steps pro umdrehung:
#define stepsPerRevolution 200

//definiere enable pins:
#define enbl_VL 24
#define enbl_HL 38
#define enbl_VR 30
#define enbl_HR 56


void setup()
{
//LCD
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.setBacklight(HIGH);
lcd.print("vier stepper o.L.");
lcd.setCursor(0, 1);
lcd.print("test RAMPS pins");
delay(2000);
lcd.clear();

//pins als output:
pinMode(dirPin_VL, OUTPUT);
pinMode(stepPin_VL, OUTPUT);
pinMode(enbl_VL, OUTPUT);
pinMode(dirPin_HL, OUTPUT);
pinMode(stepPin_HL, OUTPUT);
pinMode(enbl_HL, OUTPUT);
pinMode(dirPin_VR, OUTPUT);
pinMode(stepPin_VR, OUTPUT);
pinMode(enbl_VR, OUTPUT);
pinMode(dirPin_HR, OUTPUT);
pinMode(stepPin_HR, OUTPUT);
pinMode(enbl_HR, OUTPUT);

Serial.begin(115200);


Serial.print("code---- /home/georg/Arduino/outdoor_robo/box_hell_ramps_1_4/stepper/vier_stepper/test_der_rams_pins_1");
}

void loop()

{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("5 sec HIGH");



//set dir pinns HIGH
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);

digitalWrite(dirPin_VL, HIGH);
digitalWrite(dirPin_HL, HIGH);
digitalWrite(dirPin_VR, HIGH);
digitalWrite(dirPin_HR, HIGH);

digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delay(5000);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("5 sec LOW");



//set dir pinns LOW
digitalWrite(enbl_VL, LOW);
digitalWrite(enbl_HL, LOW);
digitalWrite(enbl_VR, LOW);
digitalWrite(enbl_HR, LOW);

digitalWrite(dirPin_VL, LOW);
digitalWrite(dirPin_HL, LOW);
digitalWrite(dirPin_VR, LOW);
digitalWrite(dirPin_HR, LOW);


digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delay(5000);
}

da wird bei den pins EN, DIR und STEP alle 5 sekunden von HIGH auf LOW gewechselt. Die Stepper Y und E0 ohne befund, die zustände wechseln wie programmiert, bei X bleibt EN dauernd auf HIGH, STEP und DIR wechseln zwischen HIGH und LOW, bei E1 wechselt EN zwische HIGH und LOW, STEP bleibt dauernd bei LOW und DIR ist dauernd bei 1V...

Annahme bei dem zustand, dass es eher ein problem des MEGA als der RAMPS platine ist, erwies sich als richtig, MEGA ausgewechselt - alles geht... :-)

Frage: was mache ich mit dem alten MEGA? Eigentlich schrott, oder? Wer soll sich da merken welche pinns da kaputt sind und wer weiss was sonst noch im argen liegt...

Moppi
09.02.2020, 14:57
Wo hast Du denn diesen nicht funktionierenden Mega her? War das noch ein Alter, den Du hattest? Wenn die Pins nicht tun, was sie tun sollen und das nicht nur einer ist, kannst Du den wohl entsorgen. Aufbewahren bringt nichts, ärgerst Dich immer wieder mit herum!


MfG

inka
09.02.2020, 15:07
da bei mir nichts vor überraschungen sicher ist, habe ich immer ein paar MEGA's aus china (bestand momentan sieben eingebaut, die man auch kanibalisieren könnte) und zwei in reserve... :-)

Klebwax
09.02.2020, 16:50
Frage: was mache ich mit dem alten MEGA? Eigentlich schrott, oder?

Du weißt nicht, was wirklich alles defekt ist. Du siehst nur ein Symptom, den Pin. Also weg damit. Wie bekommt man eigentlich einen Prozessor kaputt? Den letzten hab ich komplett gehimmelt, als ich auf dem einen Kanal meines Netzteils sorgfältig 3,3V mit Strombegrenzung eingestellt, das CPU-Board aber an den Kanal mit 16V angeschlossen habe. Da ich mir beim Auslöten nicht viel Mühe gebe, kann ich den sowieso nur wegwerfen.

MfG Klebwax

inka
14.02.2020, 12:01
nach dem tausch des MEGA bin ich jetzt auf dem entwicklungsstand vor dem umbau auf die version mit der RAMPS-platine, das fahren mit IR-fernbedienung wie auch mit dem smartphone funktioniert soweit...
Mit der verdrahtung bin ich (fast) zufrieden, die motorzuleitungen muss ich noch ein bischen ordentlicher verlegen, da warte ich aber noch auf die crimpzange aus china...
34812

was mir nicht gefält, ist das anfahren der schrittmotoren, ist mir zu rucklig, habe dazu ein kurzes video (https://youtu.be/E716L-TQLfE) gedreht. Im ersten part startet der motor rückwärts, direkt, ohne irgendwelchen zusatcode. Da ruckelts wie immer. Nach dem stop starte ich den motor vorwärts, mit einer zusatzbeschleunigung funktion. Da wird ein array eingelesen an der stelle der statischen delays in der ansteurungsroutine für die stepper. Hab vieles über die S-funktion" gelesen, habe die arraytabelle in zwei teile zerlegt, eine für die anfahrt, eine fürs abbremsen. Ob ich die für's abbremsen brauche, weiss ich noch nicht...
Was mir nun noch kopfzerbrechen bereitet ist der ruckler zwischen den anfahrbeschleunigungsroutine (die wäre an sich ok) und dem übergang zur normalen vorwärtsbewegung.
Nun der code, der hauptteil, da sind gleich am anfang auch die arrays fürs anfahren und abbremsen:


//LCD
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int sinus_rauf [] =
{ 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9,
10, 11, 12, 14, 15, 16, 18, 20, 21, 23, 25, 27, 29 ,31, 33, 35,
37, 39, 42, 44, 46, 49, 51, 54, 56, 59, 62, 64, 67, 70, 73, 76,
78, 81, 84, 87, 90, 93, 96, 99,102,105,108,111,115,118,121,124,

127,130,133,136,139,143,146,149,152,155,158,161,16 4,167,170,173,
176,178,181,184,187,190,192,195,198,200,203,205,20 8,210,212,215,
217,219,221,223,225,227,229,231,233,234,236,238,23 9,240,242,243,
244,245,247,248,249,249,250,251,252,252,253,253,25 3,254,254,254,
}; //128

int sinus_runter [] =
{
254,254,254,254,253,253,253,252,252,251,250,249,24 9,248,247,245,
244,243,242,240,239,238,236,234,233,231,229,227,22 5,223,221,219,
217,215,212,210,208,205,203,200,198,195,192,190,18 7,184,181,178,
176,173,170,167,164,161,158,155,152,149,146,143,13 9,136,133,130,

127,124,121,118,115,111,108,105,102, 99, 96, 93, 90, 87, 84, 81,
78, 76, 73, 70, 67, 64, 62, 59, 56, 54, 51, 49, 46, 44, 42, 39,
37, 35, 33, 31, 29, 27, 25, 23, 21, 20, 18, 16, 15, 14, 12, 11,
10, 9, 7, 6, 5, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0
}; //128


//resett pin definieren
#define PIN2RESET 10

// DIR und STEP pins definieren
#define dirPin_VL 28
#define stepPin_VL 26
#define dirPin_HL 55
#define stepPin_HL 54
#define dirPin_VR 34
#define stepPin_VR 36
#define dirPin_HR 61
#define stepPin_HR 60

//definiere enable pins:
#define enbl_VL 24
#define enbl_HL 38
#define enbl_VR 30
#define enbl_HR 56


//steps pro umdrehung definieren:
#define stepsPerRevolution 200 //1600



uint8_t taste = 0;

uint8_t s_vor = 0;
uint8_t s_rueck = 0;
uint8_t s_links = 0;
uint8_t s_rechts = 0;
uint8_t s_stop = 0;
uint8_t s_parken = 0;

uint16_t step_delay = 2000;


void setup()
{

//LCD
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.setBacklight(HIGH);
lcd.print("outdoor FB switch");
lcd.setCursor(0, 1);
lcd.print("smartphone 1");
delay(2000);
lcd.clear();

//pins als output:
pinMode(dirPin_VL, OUTPUT);
pinMode(stepPin_VL, OUTPUT);
pinMode(enbl_VL, OUTPUT);
pinMode(dirPin_HL, OUTPUT);
pinMode(stepPin_HL, OUTPUT);
pinMode(enbl_HL, OUTPUT);
pinMode(dirPin_VR, OUTPUT);
pinMode(stepPin_VR, OUTPUT);
pinMode(enbl_VR, OUTPUT);
pinMode(dirPin_HR, OUTPUT);
pinMode(stepPin_HR, OUTPUT);
pinMode(enbl_HR, OUTPUT);

// deaktiviere enable pins:
digitalWrite(enbl_VL, HIGH);
digitalWrite(enbl_HL, HIGH);
digitalWrite(enbl_VR, HIGH);
digitalWrite(enbl_HR, HIGH);


Serial1.begin(115200);
Serial.begin(115200);


//resett pin zustand definieren
pinMode(PIN2RESET, INPUT);


//resett pin aktivieren
digitalWrite(PIN2RESET, HIGH);

}


void loop()
{
if (Serial1.available())
{
taste = Serial1.read();
Serial.println(taste);
// taste_neu = taste;
delay(50);
tasten_abfrage();
}


richtung_abfrage();
}

/************************************************** *********/
void richtung_abfrage(void)
{
if (s_rechts == 1) rechts_drehen();
if (s_links == 1) links_drehen();
if (s_vor == 1) vorwaerts();
if (s_rueck == 1) rueckwaerts();
if (s_stop == 1) alle_stepper_stop();
if (s_parken == 1) parken();
}

/************************************************** *********/
void tasten_abfrage(void)
{
switch (taste)
{

case 116:// fahre vor - FB smartphone "t"
{
// beschleunigen();
vorwaerts();
break;
}

case 115:// fahre rückwärts - FB smartphone "s"
{

rueckwaerts();
break;
}

case 100:// rotate rechts - FB smartphone "d"
{
rechts_drehen();
break;
}

case 97:// rotate links - FB smartphone "a"
{

links_drehen();
break;
}

case 49: //alle stepper stop - FB smartphone "1"
{

alle_stepper_stop();
break;
}

case 51: //parken - FB smartphone "3"
{

parken();
break;
}

}

}
/************************************************** *********/
void reboot()
{
pinMode(PIN2RESET, OUTPUT);
digitalWrite(PIN2RESET, LOW);
delay(100);
}
/************************************************** **********/


hier ist die funktion für vorwärtsfahren:


void vorwaerts(void)
{
if (s_vor == 0)
{
// enable pins aktivieren:
digitalWrite(enbl_VL, LOW);
digitalWrite(enbl_HL, LOW);
digitalWrite(enbl_VR, LOW);
digitalWrite(enbl_HR, LOW);

//richtung bestimmen
digitalWrite(dirPin_VL, LOW);
digitalWrite(dirPin_HL, LOW);
digitalWrite(dirPin_VR, HIGH);
digitalWrite(dirPin_HR, HIGH);

for (int i = 0; i < 127; i++)
{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(1750 + sinus_rauf[i]);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(1750 + sinus_rauf[i]);
}
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(step_delay);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(step_delay);

s_vor = 1;
s_rueck = 0;
s_links = 0;
s_rechts = 0;
s_stop = 0;
s_parken = 0;
}
else
{
digitalWrite(stepPin_VL, HIGH);
digitalWrite(stepPin_HL, HIGH);
digitalWrite(stepPin_VR, HIGH);
digitalWrite(stepPin_HR, HIGH);
delayMicroseconds(step_delay);
digitalWrite(stepPin_VL, LOW);
digitalWrite(stepPin_HL, LOW);
digitalWrite(stepPin_VR, LOW);
digitalWrite(stepPin_HR, LOW);
delayMicroseconds(step_delay);
}
}



wie bekomme ich den ruckler beim vorwärtsfahren weg? Hab schon alles mögliche versucht, bisher leider ohne erfolg :-(

inka
16.02.2020, 17:50
Verlötete Litzen, insbesondere dünne, brechen mir zu oft am Rand der Lötstelle. Seitdem bei Ali oder eBay die Crimpzangen nicht mehr so teuer sind, hab ich mir eine zugelegt. Ebenfalls eine für 6,3mm Flachstecker. Damit mache ich, wenn es nichts fertiges gibt, meine Kabel selber. Dazu dann noch doppelreihige Stiftleisten mit Buchsen zum Aufquetschen auf Flachkabel. Solange man nichts abgeschirmtes braucht, kriegt man damit eigentlich alles hin.

MfG Klebwax
Habe heute den nachmittag an der neuen crimpzange verbracht. Die ersten 3 kontakte waren nix, dann ging es etwas besser und nach 10 kontakten habe sich sogar eine gewisse routine eingestellt, dann wusste ich wann ich was wie nutzen muss. Es ist im prinzip einfacher als das verlöten der dupont kontakte, auch wenn's doch fummelige arbeit ist. Die zugentlastung ist definitiv besser, die litzen halten besser in der hülse, die qualität der verbindung selbst - das wird sich zeigen. Ich jedenfalls mache mein dupontkabel in zukunft mit der crimpzange...

Klebwax
16.02.2020, 18:58
Die ersten 3 kontakte waren nix, dann ging es etwas besser und nach 10 kontakten habe sich sogar eine gewisse routine eingestellt, dann wusste ich wann ich was wie nutzen muss.

Da hab ich am Anfang sicher mehr für die Tonne gekrimpt.

MfG Klebwax

inka
16.02.2020, 19:56
naja, einiges vom Nachmittag ist für crimp- tutorials auf YouTube draufgegangen, deshalb habe ich wohl nicht so viel geschrottet...

Manf
17.02.2020, 08:51
Wenn schon so ausführlich von der Crimpzange gesprochen wird, bin ich neugierig um welche es sich handelt. Ich habe vor kurzem mit einigen zu tun gehabt, für 10, 20 und 45 € um zu sehen, mit welcher man am besten die JIS Crimpzange für 350€ ersetzen oder irgendwie umgehen kann.

inka
17.02.2020, 11:02
also viel erfahrung damit habe ich ja nicht:
zuerst hatte ich diese zange (https://www.ebay.de/itm/Abisolierzange-Automatische-Crimpzange-Kabel-Abisolierer-Werkzeug-0-2-6mm-DE/183906064543?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649):

34817

die war insofern ungeeignet, weil das crimpen rein nach gefühl stattfindet - oder ich hab die "automatisierte" crimpfunktion nicht gefunden
die zweite zange (https://www.amazon.de/gp/product/B07DXHS3Y3/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1):

34818
kostet das doppelte der ersten, aber auch nur 15€. Ist nur zum crimpen, hat aber eine "ratsche", die ein halten zwischendurch und das richten der litze zum kontakt möglich macht, das hatte die erste nicht. Man kann - in grenzen - mit einem stellring das mass einstellen auf das die crimpung der reinen kupferlitze stattfinden soll. Ist mir aber auch nicht 100%tig gelungen. Das "vorformen" der lappen der zufgentlastung geht gut. Nacharbeit an der crimpstelle ist aber auch hier notwendig - die quetschung des kupfers etwas nachdrücken, die quetschung der isolierung etwas "richten", damit es besser in die hülse passt. Es ist aber insgesamt einfacher als das löten. Und qualitativ besser...

Manf
17.02.2020, 11:29
Danke für die Information, ich bin ungefähr hier angekommen https://www.youtube.com/watch?v=jHfYzrSF4pY und hatte bis dahin schon mit Spitzzangen einzelne Kontakte gecrimpt was sicher auf die Dauer keinen Sinn macht.
Ich staune nur über die Preise der Originalwerkzeuge.
https://www.google.de/search?sxsrf=ACYBGNQN0kYP0CnQ5MpX5oP_PB-N6bm7TA%3A1581935277558&source=hp&ei=rWpKXrGfII6kUsTRlugB&q=JST+WC-160+Crimpzange%2C+JST-Kontakte&oq=JST+WC-160+Crimpzange%2C+JST-Kontakte&gs_l=psy-ab.12...15948.15948..17058...2.0..0.148.148.0j1... ...0....2j1..gws-wiz.b40WJKmwtIE&ved=0ahUKEwjxqZmSsNjnAhUOkhQKHcSoBR0Q4dUDCAs

inka
17.02.2020, 11:58
ja, das ist wahnsin, man wird aber kaum in die verlegenheit kommen auszuprobieren inwiefern so ein preis gerechtfertigt ist. Ich fand dieses tutorial (https://www.youtube.com/watch?v=-u1t7Cdf6RE) recht gut - auch fehler, bzw. probleme werden dort dargestellt...

Klebwax
17.02.2020, 12:40
Ist nur zum crimpen, hat aber eine "ratsche", die ein halten zwischendurch und das richten der litze zum kontakt möglich macht, das hatte die erste nicht.

Die primäre Funktion der Ratsche ist, daß man keine Crimpung mit zu geringem Druck machen kann. Man muß immer bis zu Ende durchdrücken, bevor man die Zange wieder öffnen kann. Und wieweit man durchdrücken muß, kann man manchmal einstellen. Das ist bei "Originalzangen" eher selten, da gibt es Vorgaben für den Pressdruck. Die Crimpung muß am Ende gasdicht sein.


Nacharbeit an der crimpstelle ist aber auch hier notwendig - die quetschung des kupfers etwas nachdrücken, die quetschung der isolierung etwas "richten", damit es besser in die hülse passt. Es ist aber insgesamt einfacher als das löten. Und qualitativ besser...

Das darf nicht sein. Wenn das nötig ist, passen Pressmatrix und Kontakt nicht wirklich zusammen. Jeder Kontakthersteller kocht da sein eigenes Süppchen. Um da auf der sicheren Seite zu sein, verwenden Profis die Zangen, die ihm der Kontakthersteller anbietet. Und das kostet.

Das Problem für den Bastler ist, daß er den Hersteller seines Kontaktes nicht wirklich kennt. Selbst wenn der Name eines Herstellers genannt wird, kann man nicht sicher sein, ob der Kontakt wirklich daher kommt. Man muß also experimentieren. Da aber die billigen Zangen kaum 10% der professionellen kosten, kann sich das lohnen.

MfG Klebwax

inka
17.02.2020, 13:26
beide einwände sind sicher ok, also die gasdichtheit und keine nacharbeit / nachdrücken, allerdings würde ich schon zwischen hobby und professioneller anwendung unterscheiden wollen - allein "gasdicht", nichts für ungut, aber das klingt nach "für die ewigkeit" - ich baue meine roboter für jetzt, da ist eine relativ günstige, schnelle und einigermassen sichere verbindung für mich völlig ausreichend - in ein paar monaten, höchstens jahren sind die rooby's höchstens noch was für die glasvitrine - wenn überhaupt...

EDIT: hab jetzt sowas wie eine glasvitrine :-)
34851

auch beim outdoor gehts jetzt weiter, die grösseren räder sind da und auch endlich mit stabilen druckteilen an den steppern befestigt
34852

inka
02.03.2020, 16:37
die richtigen räder sind endlich da, die steuerung damit ist - hauptsächlich beim drehen - noch ungewohnt, das vor- und zurück unproblematisch, beim seitlichen schieben so, wie ich es schon kenne. Habe ein video hier (https://youtu.be/OeQ2q402n_4) hochgeladen. Bin selbst überrascht über die "lebendigkeit" der bewegungen. Hätte ich so nicht erwartet...
ein solarpanel ist - zumindest mechanisch - eingebaut, erstmal fest, unter der durchsichtigen abdeckung. Elektrisch habe ich es noch nicht angeschlossen, weil es als 12V beschrieben (https://www.ebay.de/itm/Solarpanel-Solarmodul-12V-5-5W-Solarzelle-Solar-Poly-Polykristallin-Batterieclip/402011446419?_trkparms=aid%3D111001%26algo%3DREC.S EED%26ao%3D1%26asc%3D20160727114228%26meid%3D224a7 4e19a1341d4bdfbe20d3da061da%26pid%3D100290%26rk%3D 1%26rkt%3D4%26sd%3D402011446419%26itm%3D4020114464 19%26pmt%3D1%26noa%3D1%26pg%3D2060778&_trksid=p2060778.c100290.m3507) und verkauft wurde, aber 19V in der einbausituation liefert...

Klebwax
02.03.2020, 19:19
weil es als 12V beschrieben und verkauft wurde, aber 19V in der einbausituation liefert...

Nun 12V heißt, sie soll einen 12V Bleiakku laden. Dazu brauchts rund 14V. Und 19V ist die Leerlaufspannung. Zusammen mit der eingebauten Diode, die das Entladen des Akkus im Dunkeln verhindert, kommen dann beim Laden so die 14V zusammen. Belaste die Zelle mal und miss Spannung und Strom. Da ist's ganz schnell vorbei mit den 19V.

MfG Klebwax

Rabenauge
03.03.2020, 08:32
Die Bewegungen sehen ziemlich cool aus.
Wieviel Schub liefern diese Räder ?

Ich meine, Steigungen usw....kann der damit überhaupt ernsthafte Steigungen hoch fahren?

inka
03.03.2020, 15:43
bei 25° ist er am oberen ende der rampe nach dem stopp zurückgerutscht:

https://www.youtube.com/watch?v=u-sE3guYhXE

bei 20° normal rauf und runtergefahren:

https://www.youtube.com/watch?v=t8sk6ldp5fI

das waren noch andere räder, mit kunststoffrollen, die schwarzen räder haben gummirollen, müsste also noch ein bischen besser werden.

inka
10.03.2020, 17:24
hat gut geklappt:
34476

ein drehteller (ich glaub von fondue), 10 minuten drehen und das wars...

Um ein video aufzunehmen hat die dritte hand gefehlt...


hat doch nicht so gut geklappt.... :-(
Schon eine weile habe ich mich gewundert, dass das filament so locker auf der trommel sitzt. Nach ein paar druckabbrüchen, weil das filament offensichtlich nicht weiter transportiert wurde, habe ich mir die trommel genauer angeschaut:
34892
ich weiss nicht was zu den brüchen geführt hat, ob die tatsache, dass das filament vom grössten durchmesser der originalspule auf den kleinsten durchmesser der anderen spule gezwängt wurde, oder die qualität des filament selbst. Vielleicht wird das original filament sogar im warmen zustand auf die rollen gewickelt?

021aet04
10.03.2020, 18:46
Das ist vermutlich PLA. Das Problem habe ich auch immer wieder. Habe das auch schon gehabt das es auf der originalen Spule gebrochen ist. Das passiert, soweit ich weiß, wenn das Material älter wird.

Aus diesem Grund bin ich froh das mein Creality einen Filamentsensor hat.

MfG Hannes

Rabenauge
10.03.2020, 21:03
Hehe-sowas hab ich auch noch nicht gesehen.Meins wird, nach längerer Lagerzeit, auch etwas spröde-aber dass es schon auf de rRolle zerfällt, hatte ich noch nie.
Ich hab welches hier, was schon länger als ein Jahr rumliegt (zwar in der Plastiktüte, aber die offen) drucken kann ich das immernoch ohne weiteres..

Moppi
12.03.2020, 07:32
Das gibt es wohl öfters, bin auch schon mehrmals darüber gestolpert, wo User das in den 3D-Drucker-Foren schrieben. Ich selbst habe auch Filament auch noch nie so lange gelagert, dass es irgendwann in mehrere Teile zerbrochen wäre. Man kann ja dann kleinere Mengen kaufen. Umgewickelt habe ich aber auch noch nie, ich stelle einfach die großen Rollen neben den Drucker.

MfG

inka
19.03.2020, 17:45
ich bin auch etwas weitergekommen, die SR04 sensoren sind - beweglich - am rahmen angebracht, zu sehen hier (https://youtu.be/aGmr5jWnVZY) ...

Rabenauge
19.03.2020, 21:36
Sieht cool aus, wie der sich den Weg frei schielt...:)

inka
24.03.2020, 11:04
hab es unüberlegter weise in ein bereits erledigtes thema gepostet, hier , wohin es eigentlich hingehört, noch einmal zusammengefasst...
----------------------------------------------------------------------------------------------------------------------------------------------------------------


Ich mach alles in Zeitscheiben: es läuft ein simpler Timer (nach dem Beispielprogramm BlinkWithoutDelay), der mir, beispielsweise, jede Sekunde einen Tick gibt. Diese Ticks werden gezählt, so lange, wie ich halt Aufgaben zu vergeben habe, und bei jeder Tick-Zahl wird eine Aufgabe erledigt.
Danach wird der Tick-Zähler zurückgesetzt, und der ganze Zyklus geht von vorne los.
Auf diese Weise schafft so ein kleiner Arduino erstaunlich viel.....es ist z.B. vollkommen unnötig, den Akku alle paar Millisekunden abzufragen, im XPlorer mache ich das nur alle 20 Sekunden, das genügt völlig, und ich hab 19 Sekunden, auf die ich andere Aufgaben verteilen kann.
Diesen Timer kann man beliebig langsam (oder schnell, der könnte auch Zehntelsekunden oder hundertstel) ticken lassen, so kann man z.B. auch sicherstellen, dass US-Sensoren sich nie gegenseitig in die Quere kommen (Echos abklingen lassen) usw.
Unglaublich einfach und unglaublich flexibel.
Da steht natürlich in Wirklichkeit noch bisschen Kleinkram drin (man sollte sicherstellen, dass der Arduino beim "Lies Akkustand-Tick" nicht 152x den Akku ausliest, usw. aber das Prinzip ist ganz einfach.
Hi Sly,
ich lerne neue sachen (auch simple timer :-) ) gerne aus der kombination von beschreibung und beispiel und der "blink without delay" code ist nun ein zu simples beispiel. Würde Dir das was ausmachen hier Deinen code öffentlich zu machen? Eine PM geht natürlich auch, aber vielleicht gibt's noch andere die lernen wollen? :-)

wäre super, dann könnte ich endlich meine loop für den outdoor fertigschreiben ohne ständig verzweifeln zu müssen...

antwort zusammengebastelt:
-----------------------------------------
Aber gern doch.
Hier mal ein paar Auszüge aus dem Code des XPlorer1, da wird das auch so gehandhabt.

Zuerst bauen wir und nen Timner zusammen, der anhand von den millis() bei Bedarf "Ticks" erzeugt:




void timer() //***************** mehrere Sekundenticks erzeugen **********************************
{

unsigned long aktuelleMillis = millis();

if (aktuelleMillis - vergangeneMillis >= interval) // Sekunde um
{
vergangeneMillis = aktuelleMillis;
halbeTick ++; // 500ms sind um
if(halbeTick>2) // hier ist eine volle Sekunde vorbei
{
halbeTick=1; // wechselt alle halbe Sekunde
sekundenTick++; // wechselt jede volle Sekunde
gemachtFlag=0; // Aufgabe-erledigt-Flag zurücksetzen
}
if(sekundenTick==5) // mehr brauchen wir nicht
{
sekundenTick=0;
}

}
}







Der hier erzeugt jede halbe Sekunde nen Tick, und zusätzlich zählt er die Sekunden jedesmal bis fünf hoch.
Im Grunde ein umgeschriebenes "blink_without_delay"...
Im Hauptprogramm muss dieser Timer natürlich auch "hin und wieder" aufgerufen werden (immer, wenn Zeit ist), das Stück Code ist tatsächlich das _komplette_ Hauptprogramm:



void loop()
{
timer();
manageLichter();
sekundenAufgaben(); // je nachdem, was der Timer grade hat...
delay(2); // Zeit lassen für Anfragen vom NodeMCU
}



Im Unterprogramm "sekundenAufgaben" wird nun aufgedröselt, je nachdem, welchen Wert der Timer gerade hat:





void sekundenAufgaben()
{
if((sekundenTick==0)&&(gemachtFlag==0)) //wenns nicht schon erledigt wurde...
{
messeAkku();
}

if((sekundenTick==1)&&(gemachtFlag==0))
{
berechneLichtstaerke();
gemachtFlag=1;
}
}





Die gewünschten Intervalle (in denen der Timer halt "tickt") stellt man dann einfach mit passenden Konstanten ein:


unsigned long vergangeneMillis = 0; // hier der letzte Tick
const long interval = 500; // Intervall, 500 Millisekunden


Die Variable "gemachtFlag" verhindert, dass die jeweilige Aufgabe innerhalb des einen Intervalls ...zigmal erledigt wird- nur wenn die auch 0 ist, wird die Aufgabe abgearbeitet, und nachdem sie erledigt wurde, wird das Flag auf 1 gesetzt.

Im Code zum XP2 hab ich inzwischen fünf oder sechs solche Flags-der hat einiges mehr zu tun, hehe.
Der zählt aber auch die Sekunden bis 20 hoch....das Beispiel ist in alle möglichen Richtungen anpassbar, man kann den Timer schneller oder langsamer ticken lassen, man kann ihn weiter oder weniger weit hochzählen lassen, ganz wie man es gerade braucht.
Das ist natürlich keine Atomuhr- da der nur abgefragt wird, wenn keine anderen Aufgaben zu erledigen sind (hier z.B. kommt noch das manageLichter() dazwischen), geht er nicht supergenau, aber wen jucken Abweichungen von nen paar Millisekunden denn- meistens ist das Wurst.

Falls du noch Fragen dazu hast- frag einfach.
---------------------------------------------------------------------

mache ich, muss es mir erstmal genauer anschauen....
gleich die erste frage:
und das ist jetzt wirklich so, dass die in der loop aufgerufenen task's laufen, unabhängig davon, wie lange sie dauern, während die loop weiter abgearbeitet wird?

Rabenauge
24.03.2020, 13:05
Echtes Multitasking funktioniert mit nem Single-Core nicht.
Meine Lösung dürfte aber ein ziemlich guter Kompromiss sein, weil alles zeitkritische in separaten Tasks "am Stück" erledigt werden kann. Insofern lautet die halbe Antwort: ja.
Es ist egal, wie lange ein einzelner Task braucht.

Danach hat loop() wieder die Kontrolle-die läuft inzwischen _nicht_ weiter!
Die Schaltuhr aber schon....
timer() wird ja _nur_ in loop() aufgerufen, wenn also irgendein anderer Task läuft (und mal länger dauert) dann nicht.
Dadurch ist es auch möglich, dass mal Ereignisse überhaupt nicht ausgeführt werden (weil die Schaltuhr schon drüber gerasselt ist in der Zwischenzeit).

Aber bei vielem ist das egal: ein Akku stirbt nicht, wenn er mal erst nach 40 Sekunden abgefragt wird, statt alle 20.
PWM läuft auch, wenn sie einmal gestartet ist, weiter (das ist schon sowas wie Multitasking), also geht das meistens so schon.

HaWe
24.03.2020, 16:04
Echtes Multitasking funktioniert mit nem Single-Core nicht.

Man muss zwischen Multitasking und Multithreading unterscheiden, oft wird das nicht scharf getrennt.
Auf kleinen MCUs ist es Multithreading (time slice scheduling, round-robin), und hier stimmt das so nicht mit Single- vs. Multicores: der Due (M3 SAM) ist z.B. ein Singlecore, der mit der Scheduler Lib recht gutes kooperatives Multithreading kann, dieselbe Lib läuft auch z.B. mit einem M0/Zero (SAMD).
Auch die neuen SAMD M4 (ebenfalls Singlecores) beherrschen laut Arduino Multithreading.
Die Scheduler Lib wurde zwischenzeitlich auch für AVRs portiert, erfordert aber deutich mehr Justierungen für das Speichermanagement.
Hier werden vom Thread Scheduler jedem Thread je eine eigene Zeitscheibe zugeteilt, und bei Wechsel zur nächsten alle Variablen und Register gesichert - ist er wieder dran, werden alle wieder zurückgelesen und dort weitergemacht, wo vorher aufgehört wurde.

Doch auf Multicores läuft es deutlich besser, wie z.B. auf dem ESP32: der kann sogar preemptives Multithreading (ähnlich POSIX pthread und C++ std::thread), wobei jeder seiner beiden Cores genau so time-slice scheduling macht mit sehr vielen Parallel-Threads wie ein Singlecore - grundsätzlich nicht anders, aber hier können eben z.B. 20 Threads auf 2 "Schultern" verteilt werden.

inka
26.03.2020, 18:23
Echtes Multitasking funktioniert mit nem Single-Core nicht. Meine Lösung dürfte aber ein ziemlich guter Kompromiss sein, weil alles zeitkritische in separaten Tasks "am Stück" erledigt werden kann. Insofern lautet die halbe Antwort: ja.
Es ist egal, wie lange ein einzelner Task braucht.


bei der umstellung vom FB betrieb auf selbständiges fahren gibts probleme. Und zwar fährt der roboter "abschnittsweise", also stotternd. Der verursacher sind die aufrufe für die entfernungsmessung, ohne die pingabfragen fährt der ganz ok... Die frequenz des "stotterns" ist abhängig von der grösse des ping-intervalls...
---------------------------------------------------------------
@rabenauge: Kann ich solche programmabschnitte mit dem "timer-system" kombinieren, oder muss ich völlig umdenken? Es müsste z.b. noch die bewegung des servos dazukommen..., da geht ja richtung kontinuierliche bewegung wahrscheinlich garnix...
Wie fragst Du die US module ab? nach der lib, oder anders?
---------------------------------------------------------------
das hier ist der haupt-fahrt-code welches aus der loop() aufgerufen wird:



void alle_motoren_vorwaerts_hindernis(void)
{
currentMillis = millis();
dauer_fahrt = 200;
if (currentMillis - previousMillis > dauer_fahrt)
{
if (start_ping_rechts || start_ping_links == true)
{
aktuelle_ping_millis = millis();
if (aktuelle_ping_millis - vergangene_ping_millis > interval_ping)
{
vergangene_ping_millis = aktuelle_ping_millis;
ping_distanz_rechts();
ping_distanz_links();
}
}
//servo_und_ping();

if (hindernis_rechts == true)
{
ausweichen_hindernis_rechts();
hindernis_rechts = false;
}
if (hindernis_links == true)
{
ausweichen_hindernis_links();
hindernis_links = false;
}
else
{
hindernis_rechts = false;
hindernis_links = false;
Serial.println("alle motoren vorwaerts_hindernis");

vorwaerts();
}
}
}



vor dem start frage ich noch die US-module ab, der roboter soll ja nicht nach vorne anfahren, wenn er vor einer wand steht, die abfrage ist "entprellt", damit es nicht mehrere ergebnisse gibt, es wird für rechts und links abgefragt:



void hindernis_vorh_rechts_entprellt(void)
{
if (start_ping_rechts == false)


aktuelle_ping_millis = millis();
if (aktuelle_ping_millis - vergangene_ping_millis > interval_ping)
{
vergangene_ping_millis = aktuelle_ping_millis;
ping_distanz_rechts();
}

if (uS_rechts != NO_ECHO)
{
if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 0)
{
hindernis_rechts = true;
mehrfach_zaehler_rechts = 1;
}
else if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 1)
{
mehrfach_zaehler_rechts = 0;
}
}
else
{
if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 1)
{
hindernis_rechts = false;
mehrfach_zaehler_rechts = 0;
}
else if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 0)
{
mehrfach_zaehler_rechts = 1;
}
}
}



die eigentliche entfernung wird hiermit gemessen, auch wieder für rechts und links ausgelegt:


void ping_distanz_rechts(void)
{
uS_rechts = sonar_rechts.ping();

Serial1.print("Ping: ");
Serial1.print(uS_rechts / US_ROUNDTRIP_CM);
Serial1.println(" cm");
Serial.print("Ping: ");
Serial.print(uS_rechts / US_ROUNDTRIP_CM);
Serial.println(" cm");

delay(100); // hinzugefügt am 30.1.17 wg. doppelausweichen
start_ping_rechts = true;
}
die ganzen prints habe ich auch schon mal auskommentiert, es ändert nichts an meinem problem...

Rabenauge
26.03.2020, 23:53
Ich benutze keine Bibliothek für das bisschen Ultraschall- das kann man zu Fuss auch machen:

void pingVorne()// ******************** Vorn nach Hindernissen suchen **************************************
{
delay(100); // ggf, alte Echos abklingen lassen, die halbe Zeit reicht auch
digitalWrite(triggerVorne, LOW);
delayMicroseconds(2);
digitalWrite(triggerVorne, HIGH); //Trigger Impuls 10 µs
delayMicroseconds(10);
digitalWrite(triggerVorne, LOW); //Messung starten
long laufZeit = pulseIn(echoVorne, HIGH,maxEntfernung); // Echo-Zeit messen, aber nicht zu lange warten
float messung=laufZeit/ 58.2; //Laufzeit in cm umrechnen
entfernungVorne = ((entfernungVorneAlt*0.2)+(messung*0.8)); // Ergebnis glätten
if(entfernungVorne==0) // das gibts nicht, also muss die Bahn frei sein
{
entfernungVorne=120;
}
entfernungVorneAlt=entfernungVorne;
Serial.print("Vorne: ");
Serial.print(entfernungVorne);
Serial.println(" cm");
}

Wie steuerst du deine Motoren an- mit PWM?
Die läuft nämlich weiter, auch wenn in der Zwischenzeit andere Dinge erledigt werden.
Wenn du an einen Pin PWM(soundso) schickst, läuft die dort so lange, bis was anderes gesagt wird...

Ebenso Servo-Impulse- du kannst einem Servo ne Soll-Position senden, und schon andere Dinge tun, bevor es die erreicht-das funktioniert.
Man muss aber aufpassen: die Servo-Bibliothek verträgt sich nich unbedingt mit jeder anderen- beispielsweise gibt es Probleme mit programmierbaren LED's..das hängt mit den Timern zusammen.

In meinem (unfertigen) Test-Unterprogramm läuft das so ab:
-es wird vorn und hinten "gepingt"
-anhand der zurückgelieferten Distanzen wird die mögliche Geschwindigkeit festgelegt (je näher Hindernis, desto langsamer), und dann wird der berechnete Wert für die Geschwindigkeit ans eigetliche Fahrprogramm übergeben, also ungefähr so:

SpeedVorgabe=255;
fahreGeradeaus(); // das ist das eigentliche Fahrprogramm

Das Fahrprogramm nutzt dann diese Speed-Vorgabe als "Sollwert"- regelt aber nach Bedarf da noch selber dran herum.
Anschliessend schickt es die berechneten PWM-Werte an den Motortreiber.
Da sich die PWM nicht ändert (bis sie, beim nächsten Aufruf des Fahrprogrammes ggf, geändert _wird), fährt der locker und flüssig vor sich hin...
Hier gehts von vorne los:
Hauptprogramm ruft
Test-Unterprogramm, das ruft
Ping-Unterprogramm, berechnet anhand dessen Antwort die Soll-Geschwindigkeit, und schickt die zum
Fahrprogramm
und so weiter.

Das Ganze läuft _nicht_ über die Timer-Funktion einige Beiträge weiter oben, aber der läuft trotzdem im Hintergrund (wird im Hauptprogramm bei jedem Zyklus aufgerufen), der löst dann Zusatzaufgaben aus wie ab und an den Akku-Füllstand überprüfen usw.

Du kannst das ausprobieren: schick mal eine PWM an irgendeinen geeigneten Pin (an den du _irgendwas_ hängst, was dir auch anzeigt, dass die PWM weiter läuft, es geht schon mit ner LED+Vorwiderstand), und lass den Rechner danach mit delay(1000) einfach warten.
Du wirst sehen: das delay() beeinflusst die PWM _nicht!
Genauso kannst du in der Zeit irgendwelche Sensoren abfragen oder so- das juckt die PWM nicht, die läuft und läuft...

Moppi
27.03.2020, 14:20
Ja, das mit PWM ist wohl die einzige Möglichkeit, einen sauberen Gleichlauf der Stepper hinzubekommen.

Ansonsten ist doch ein ESP32 vorhanden: https://www.elektormagazine.de/magazine/elektor-138/56969

Sind immer dieselben Probleme, unter Nutzung nur einer CPU.


Für die Steuerung des Fahrgestells kann auch ein Arduino NANO verwendet werden. Kommandos kann dem per serieller Schnittstelle schicken (oder andere, die frei sind). Ultraschall und andere Sachen können mit dem ESP32 oder dem MEGA parallel zum NANO abgearbeitet werden.



MfG

inka
27.03.2020, 15:54
danke erstmal, das braucht ein bischen...

ein "zwischen"problem:

- der timer läuft, da werden die sekundenaufgaben aufgerufen, in denen die pingroutine:


if ((sekunden_tick == 1) && (gemacht_ping_links_flag == 0))
{
ping_distanz_links();

Serial.print("Ping: ");
Serial.print(uS_links / US_ROUNDTRIP_CM);
Serial.println(" cm");
}

gestartet wird.

in der pingroutine


void ping_distanz_links(void)
{
uS_links = sonar_links.ping();

gemacht_ping_links_flag = 1;
start_ping_links = true;
}

wird aber das pingergebnis trotz des ping-flags auf 1 "100mal" ausgedruckt. Wieso? Wo muss die flagänderung denn hin? In der loop wird sie ja zuerst auf "0" gesetzt, dann in den sekundenaufgaben abgefragt und letztendlich in der pingroutine wieder auf 1 gesetzt...

Klebwax
27.03.2020, 19:10
Echtes Multitasking funktioniert mit nem Single-Core nicht.

Das ist natürlich Unsinn. Das klassische Multitasking System UNIX wurde auf und für eine PDP8 bzw PDP11 geschrieben. Und das waren Single-Core CPUs. Linux wurde zuerst auf einem 386 gebaut, ebenfalls Single Core. Und das erste preemptive Windows, Windows NT, lief auch auf einem Single Core.


Ja, das mit PWM ist wohl die einzige Möglichkeit, einen sauberen Gleichlauf der Stepper hinzubekommen.

Sicher nicht. Du hast ja schon mal mit AccelStepper() rumgespielt. Die kann das. Ebenso wie alle 3D-Drucker oder Lasergravierer mit grbl. Aus der Doku zu AccelStepper:


You can have multiple simultaneous steppers, all moving at different speeds and accelerations, provided you call their run() functions at frequent enough intervals.

Die Arduino SW ist ja Open Source. Man kann also sowohl in die PWM Library als auch in AccelStepper reinschauen und sehen, wie das da gemacht wird.


Sind immer dieselben Probleme, unter Nutzung nur einer CPU.

Dazu benutzt man Interrupte. Dafür sind sie da. Oder man macht es kooperativ, wie AccelStepper es mit seiner run()-Funktion tut.

MfG Klebwax

HaWe
27.03.2020, 19:26
Dazu benutzt man Interrupte. Dafür sind sie da.
MfG Klebwax
oder man verwendet wie ich grundsätzlich Multithreading, per Due Scheduler, pthread oder std::thread samt mutexes und thread-prios.

Rabenauge
27.03.2020, 20:04
Hm- wo setzt du das Flag wieder auf 0?
Wahrscheinlich liegt dort der Hase im Peffer....

Klebwax
27.03.2020, 20:13
per Due Scheduler,

Ist am Ende auch nur ein Timer Interrupt. Wenns mal etwas komplizierter wird, muß da doch selber ran. Da kann man den Umgang mit Timer und Interrupt gleich selbst lernen. It's not rocket science

MfG Klebwax

Moppi
27.03.2020, 20:30
Du hast ja schon mal mit AccelStepper() rumgespielt.

Nein, wann soll ich das gemacht haben?
Allerdings ist Rabenauges Einwand mit dem PWM ja nicht verkehrt. Wenn es so funktioniert, wärs eine umkomplizierte Lösung.




MfG

HaWe
27.03.2020, 20:34
Ist am Ende auch nur ein Timer Interrupt. Wenns mal etwas komplizierter wird, muß da doch selber ran. Da kann man den Umgang mit Timer und Interrupt gleich selbst lernen. It's not rocket science

MfG Klebwax

warum das Rad neu erfinden, wenn es erprobte, stabile und bewährte Libs gibt, die die Problematik handeln können? Ich programmiere ja auch in UNIX/LINUX das Multithreading nicht selber, sondern nutze die bewährten POSIX und std Libs, gleiches gilt für die entsprechenden Libs fürs ESP RTOS und den ebenfalls bewährten Due Scheduler.

Klebwax
28.03.2020, 00:46
Nein, wann soll ich das gemacht haben?

Sorry, bezog sich nicht auf dich sondern inka, weiter vorne im Thread.


Allerdings ist Rabenauges Einwand mit dem PWM ja nicht verkehrt. Wenn es so funktioniert, wärs eine umkomplizierte Lösung.

Warum sollte zum Ansteuern von Schrittmotoren eine Funktion für DC-Motoren mit PWM besser geeignet sein, als eine (AccelStepp), die extra für Schrittmotore geschrieben wurde?


warum das Rad neu erfinden, wenn es erprobte, stabile und bewährte Libs gibt, die die Problematik handeln können?

Wenn sie alle Probleme lösen, ist es ja gut. Ich sehs noch nicht

MfG Klebwax

Moppi
28.03.2020, 06:55
Warum sollte zum Ansteuern von Schrittmotoren eine Funktion für DC-Motoren mit PWM besser geeignet sein, als eine (AccelStepp), die extra für Schrittmotore geschrieben wurde?


Ich kenne AccelStepp nicht. Damals kam die Frage auf, was in der Lib passiert, weil es Probleme bei der Ansteuerung der Stepper gab. Inka hatte doch glaub ich diese Lib eingesetzt?
Wenn die die Probleme auch löst, ist es doch schön und gut. Dennoch, wenn ich mir den Code von Inka angesehen habe, denke ich auch, dass PWM eine unkomplizierte Lösung ist. Warum, hatte Rabenauge bereits beschrieben, dem gab eigentlich nichts hinzuzufügen, Versuch ist es wert, vielleicht löst es bereits das Problem.

MfG

HaWe
28.03.2020, 10:00
Wenn sie alle Probleme lösen, ist es ja gut. Ich sehs noch nicht

MfG Klebwax
ich sehe vor allem nicht, dass hier selbstgestrickte Methoden auch nur annähernd die Probleme lösen, die von den MT Libs (Scheduler, C/POSIX, C++/std::thread, UNIX, RTOS) längst beherrscht werden.

Klebwax
28.03.2020, 12:02
Ich kenne AccelStepp nicht. Damals kam die Frage auf, was in der Lib passiert, weil es Probleme bei der Ansteuerung der Stepper gab. Inka hatte doch glaub ich diese Lib eingesetzt?
Ich kannte die Library auch nicht und habe daraufhin mal die Dokumentation und den Source gelesen. Da kann man sehr gut erkennen, wie das da gelöst ist.


Wenn die die Probleme auch löst, ist es doch schön und gut. Dennoch, wenn ich mir den Code von Inka angesehen habe, denke ich auch, dass PWM eine unkomplizierte Lösung ist. Warum, hatte Rabenauge bereits beschrieben, dem gab eigentlich nichts hinzuzufügen, Versuch ist es wert, vielleicht löst es bereits das Problem.

Da braucht man nicht viel zu probieren. Es reicht einfach zu überlegen, wie man mit analogWrite() die Pulsfrequenz, auf die es ja beim Stepper ankommt, und nicht die Pulsebreite oder den Dutycycle einstellt. Ich hab auch davon den Source gelesen. Das basiert auf der PWM Hardware des Prozessors. Damit ist einerseits klar, daß die PWM-Hardware weiterläuft, und andererseits daß sie zur Ausgabe von unterschiedlichen Frequenzen ungeeignet ist.

In beiden Fällen ist aber der wesentliche Teil der Software ein-zwei Dutzend Zeilen lang. Das mit einem Rad zu vergleichen, das man nicht neu erfinden will, ist schon etwas schräg.

MfG Klebwax

inka
28.03.2020, 13:40
Hm- wo setzt du das Flag wieder auf 0?
Wahrscheinlich liegt dort der Hase im Peffer....


wahrscheinlich...

mit dem einsatz von timer(), sekundenaufgaben() und meiner entprellten ping-abfrage


void hindernis_vorh_rechts_entprellt(void)
{
if (start_ping_rechts == false)


aktuelle_ping_millis = millis();
if (aktuelle_ping_millis - vergangene_ping_millis > interval_ping)
{
vergangene_ping_millis = aktuelle_ping_millis;
ping_distanz_rechts();
}

if (uS_rechts != NO_ECHO)
{
if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 0)
{
hindernis_rechts = true;
mehrfach_zaehler_rechts = 1;
}
else if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 1)
{
mehrfach_zaehler_rechts = 0;
}
}
else
{
if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 1)
{
hindernis_rechts = false;
mehrfach_zaehler_rechts = 0;
}
else if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 0)
{
mehrfach_zaehler_rechts = 1;
}
}
}

läuft das jetzt:
der roboter fährt vorwärts und misst im sekundenintervall mal links und dann wieder rechts die entfernung. Die stepper laufen noch ein bischen "rauh" aber das ist sicher ein anderes problem...
zu der (meiner) verwendung von der AccelStepper und auch anderen libraries - ich versuche nicht das alles zu verstehen, sondern passe für meine zwecke die beispiele an, in der hoffnung, dass ich es beim nächsten mal immer noch weiss :-) , klappt leider nicht immer...

Insofern mein dank an alle, die sich immer wieder die mühe machen auf meine fragen einzugehen, wobei hinweise auf andere hardware oder software (welche ausser arduino auch immer) wenig bis garnicht hilfreich sind...

und jetzt gehts mit dem servo-sweep weiter :-)

Rabenauge
28.03.2020, 17:36
Wenn du dieses Flag in der selben Sekunde zurückstellst, in der die Aufgabe erledigt werden soll, wird die die ganze Sekunde über endlos oft erledigt, ist doch klar.

Der Ablauf sollte so sein:
- der Sekundenzeiger springt auf "erledigeDas"
-die Aufgabe wird erledigt, das Flag auf 1 gesetzt
-der Sekundenzeiger springt auf die nächste Sekunde- und hier wird das Flag wieder auf 0 gestellt, damit es bei der nächsten "erledigeDas"-Sekunde wieder greifen kann.

Du musst bedenken, dass der Timer ...zigmal pro Sekunde aufgerufen wird- wenn er also in der gleichen Sekunde das Flag wieder auf 0 stellt, klappt das nich.

inka
28.03.2020, 18:04
Wenn du dieses Flag in der selben Sekunde zurückstellst, in der die Aufgabe erledigt werden soll, wird die die ganze Sekunde über endlos oft erledigt, ist doch klar.
Der Ablauf sollte so sein:
- der Sekundenzeiger springt auf "erledigeDas"
-die Aufgabe wird erledigt, das Flag auf 1 gesetzt
-der Sekundenzeiger springt auf die nächste Sekunde- und hier wird das Flag wieder auf 0 gestellt, damit es bei der nächsten "erledigeDas"-Sekunde wieder greifen kann.

Du musst bedenken, dass der Timer ...zigmal pro Sekunde aufgerufen wird- wenn er also in der gleichen Sekunde das Flag wieder auf 0 stellt, klappt das nich.


so ganz genau weiss ich ja wirklich nicht (beim weiterschreiben habe ich begriffen was da abläuft) warum das jetzt funktioniert :-), es tut's aber - und - ich hab ja für jedes ereignis was über die sekundenaufgaben läuft ja ein eigenes flag...

Mit dem flag alleine hat es ja vorher schon funktioniert, allerdings mit dem nachteil des 100fachen aufrufs und auch des 100fachen drucks des wertes. Das ist nun mit der entprellten ping variante weg...

Ich hab jetzt die ersten versuche mit dem servo-sweep hinter mir. Das hier:

void servo_sweep (void)
{
gemacht_servo_sweep_flag = 1;

for (pos = 0; pos < 100; pos += 1)
{
myservo.write(pos);
delay(50);
}
for (pos = 100; pos >= 0; pos -= 1)
{
myservo.write(pos);
delay(50);
}
} funktioniert natürlich nicht, das blockiert die stepper. Aber das hier:


myservo.write(30); funktioniert schon, und auch mit dem gesetzten flag für den sweep. Möglichrweise wird der sweep-task ja auch 100x schnell hintereinander aufgerufen, das macht aber nix, weil ja der servo schon in der position ist, bzw. dorthin unterwegs...

Ich denke ich könnte auch mehrere solche timer benutzen, oder? z.b. mit unterschiedlichen intervallen...

Rabenauge
28.03.2020, 20:06
Würde gehen.
Aber eigentlich reicht einer-als "Tick" nimmst du halt die kürzesten Intervalle, die du brauchst.
Und die zählst du einfach hoch, um auf längere zu kommen....
Das hier ist der Timer vom XP2- der tickt jede Sekunde, zählt die aber auch hoch, so dass ich Intervalle von bis zu 20 Sekunden habe.
So hab ich einmal den Sekunden-Takt (tick, tack, tick, tack) , aber eben auch nen 20-Sekunden-Takt (den man auch noch unterteilen könnte, wenn man will).
mit intervallTimer=500 könnte man den auch jede halbe Sekunde ticken lassen, ganz wie man will.
Du musst einfach nur den "kleinsten gemeinsamen Nenner" finden, und den dann als Basis benutzen.



void timer() // ******************************** Bord-Schaltuhr ****************************************
{
unsigned long aktuelleMillis = millis(); // Millisekunden auf den aktuellen Wert stellen

if (aktuelleMillis - vorherigeMillis >= intervallTimer) // immer wenn 1000 Millisekunden um sind
{
akkuMessFlag=0; //alle gemacht-Flags zurücksetzen
serialFlag=0;
lichtMessFlag=0;
vorherigeMillis = aktuelleMillis;
if(sekundeTick==0) // Sekunde-Tick wechselt jede Sekunde zwischen 0 und 1
{
sekundeTick=1;


}
else
{
sekundeTick=0;
}
if(timerTick<20) // Timer-Tick zählt hoch bis 20, und fängt dann wieder bei 0 an
{
timerTick++;
}
else
{
timerTick=0;

}

}
}

inka
30.03.2020, 13:22
hallo Rabenauge,
ich wollte mal ausprobieren ob Deine pingversion schneller ist als die mit der ping-lib...

Ich benutze keine Bibliothek für das bisschen Ultraschall- das kann man zu Fuss auch machen:

void pingVorne()// ******************** Vorn nach Hindernissen suchen **************************************
{
delay(100); // ggf, alte Echos abklingen lassen, die halbe Zeit reicht auch
digitalWrite(triggerVorne, LOW);
delayMicroseconds(2);
digitalWrite(triggerVorne, HIGH); //Trigger Impuls 10 µs
delayMicroseconds(10);
digitalWrite(triggerVorne, LOW); //Messung starten
long laufZeit = pulseIn(echoVorne, HIGH,maxEntfernung); // Echo-Zeit messen, aber nicht zu lange warten
float messung=laufZeit/ 58.2; //Laufzeit in cm umrechnen
entfernungVorne = ((entfernungVorneAlt*0.2)+(messung*0.8)); // Ergebnis glätten
if(entfernungVorne==0) // das gibts nicht, also muss die Bahn frei sein
{
entfernungVorne=120;
}
entfernungVorneAlt=entfernungVorne;
Serial.print("Vorne: ");
Serial.print(entfernungVorne);
Serial.println(" cm");
}

habe es an meine hardwareverhältnisse angepasst, das sieht dann so aus:



#include "Arduino.h"


#define TRIGGER_PIN_RECHTS 2
#define ECHO_PIN_RECHTS 3
#define MAX_DISTANCE_RECHTS 200 //400

uint16_t distanz_rechts;
uint16_t distanz_rechts_alt;

void setup()
{
Serial.begin(115200);

}

void loop()
{
ping_rechts();

}


void ping_rechts()// ******************** rechts nach hindernissen suchen **************************************
{
delay(100); // ggf, alte Echos abklingen lassen, die halbe Zeit reicht auch
digitalWrite(TRIGGER_PIN_RECHTS, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN_RECHTS, HIGH); //Trigger Impuls 10 µs
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN_RECHTS, LOW); //Messung starten
long lauf_zeit = pulseIn(ECHO_PIN_RECHTS, HIGH, MAX_DISTANCE_RECHTS); // Echo-Zeit messen, aber nicht zu lange warten
float messung = lauf_zeit / 58.2; //Laufzeit in cm umrechnen
distanz_rechts = ((distanz_rechts_alt * 0.2) + (messung * 0.8)); // Ergebnis glätten
if (distanz_rechts == 0) // das gibts nicht, also muss die Bahn frei sein
{
distanz_rechts = 120;
}
distanz_rechts_alt = distanz_rechts;
Serial.print("distanz rechts: ");
Serial.print(distanz_rechts);
Serial.println(" cm");
}



die printausgabe ist: 120 / 24 / 4 und das wiederholt sich....

inka
30.03.2020, 16:05
habe unter den beispielen in der ping-lib etwas durchaus interessantes gefunden. Ein beispiel für drei sensoren, macht einen recht einfachen eindruck:


#include <NewPing.h>

#define SONAR_NUM 3 // Number of sensors.
#define MAX_DISTANCE 200 // Maximum distance (in cm) to ping.

NewPing sonar[SONAR_NUM] = { // Sensor object array.
NewPing(2, 3, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping.
NewPing(4, 5, MAX_DISTANCE),
NewPing(8, 9, MAX_DISTANCE)
};

void setup() {
Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}

void loop() {
for (uint8_t i = 0; i < SONAR_NUM; i++) { // Loop through each sensor and display results.
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
Serial.print(i);
Serial.print(" = ");
Serial.print(sonar[i].ping_cm());
Serial.print(" cm ");
}
Serial.println();
}

Rabenauge
30.03.2020, 22:18
Hm- wenns funktioniert....ich hatte mal bei anderer Gelegenheit die NewPing probiert, war aber keineswegs von begeistert.
Aber ich weiss nicht mehr genau, was war....

Mein Code ist _nicht_ auf Speed optimert: du kannst z.B. das anfängliche delay noch deutlich runtersetzen (musst du mal rechnen, wie weit die Dinger maximal kommen können, dann kommst du mit der Schallgeschwindigkeit auf den Wert, den du evtl brauchst)- oder du lässt es ganz weg- im Freien wirst du eher keine solchen wilden Echos haben.
Die Ansteuerung muss so-laut Datenblatt.
Man könnte versuchen, den Triger auch kürzer anzusteuern- vielleicht klappts, vieleicht nicht.
Auch die maxDistance kann man an die konkreten Anforderungen anpassen, wenn man die verkürzt, spart man auch Zeit, da pulseIn() blockierend ist (das wartet einfach bis entweder das Timeout abgelaufen ist oder was rein kommt).

Den letzten Rest kann man bei der Umrechnung rausholen, indem man auf die Fliesskomma-Berechnung verzichtet, und das so umbaut, dass die nicht mehr nötig ist.

Moppi
31.03.2020, 07:28
Guten Morgen,

welche Abfragezeit wird denn benötigt, wie schnell wird das Ergebnis benötigt, wie sicher soll es sein? Danach sollte sich dann die Sensor-Auswahl richten. So einen US-Wandler kann man nur in bestimmten Intervallen abfragen, nicht unendlich schnell. Beim SRF05 habe ich eine Angabe von min. 50ms im Netz gefunden, als Zeit zwischen den einzelnen Messungen. An anderer Stelle ist die Rede von 65ms.


MfG

inka
31.03.2020, 10:07
welche Abfragezeit wird denn benötigt, wie schnell wird das Ergebnis benötigt, wie sicher soll es sein? Danach sollte sich dann die Sensor-Auswahl richten. So einen US-Wandler kann man nur in bestimmten Intervallen abfragen, nicht unendlich schnell. Beim SRF05 habe ich eine Angabe von min. 50ms im Netz gefunden, als Zeit zwischen den einzelnen Messungen. An anderer Stelle ist die Rede von 65ms.

das sind alles fragen mit denen ich mich bis dato nicht beschäftigen musste. Weder bei den gelben DC-getriebemotoren (weil PWM) noch bei den kleineren schrittmotoren mit ihren ansteuerungsmodulen. Es lief einfach in der standareinstellung, man musste nur einstellen unterhalb welcher entfernung der arduino einschreiten musste...

die 3sensor geschichte von newping verbessert das verhalten bei den NEMA steppern etwas, trotzdem sind aussetzer der stepper spürbar (und hörbar). Vielleicht muss ich die pulseIn besser "verteilen", die sensoren zwar mit der 3sensor einstellung aber einzeln abfragen. Mal sehen...


Mein Code ist _nicht_ auf Speed optimert: du kannst z.B. das anfängliche delay noch deutlich runtersetzen (musst du mal rechnen, wie weit die Dinger maximal kommen können, dann kommst du mit der Schallgeschwindigkeit auf den Wert, den du evtl brauchst)- oder du lässt es ganz weg- im Freien wirst du eher keine solchen wilden Echos haben.
das war klar, allerdings hatte ich den eindruck, dass die von mir abgeänderte version gar nicht ging, weil sich die drei werte ständig wiederholt haben, egal wie gross die entfernung des hindernisses zum sensor war :-(

Moppi
31.03.2020, 11:48
Mit dem pulseIn() ist es wie mit dem delay(). Das kannst Du auch zu Fuß machen (pulseIn ist einfacher zu handhaben).

Brainstorming (keine Ahnung ob das schon 100% so richtig wäre, bloß wegen der Vorgehensweise):

1. Auf der ECHO-Leitung auf High warten.
2. micros() - Mikrosekunden auslesen.
3. Auf der ECHO-Leitung auf High warten.
4. micros() - Mikrosekunden auslesen.
5. Den ersten vom zweiten Mikros-Wert subtrahieren.

Wenn der Code schnell genug durchläuft (also genügend Durchläufe pro Sekunde schafft) sollten auch diese dann so ermittelten Werte gut genug sein. Voraussetzung ist natürlich, dass keine andere Stelle im Code Hänger verursacht.

Wegen den Steppern nochmal:

Ich will nicht dazu verleiten, andere Hardware einzusetzen. Aber die Steuerung der einzelnen Schritte geschieht doch im Mikrosekundenbereich. Sobald es dort, z.B. über eine halbe Millisekunde (oder weniger), zu Verzögerungen - zwischen den einzelnen Schritten - kommt, merkst Du das u.U., eben daran, dass es nicht gleichmäßig läuft. Deshalb würde ich die Motoren unabhängig steuern.
Wenn ich an einem NANO (z.B.) vier Pins zur Steuerung der Motoren festlege, kann ich mit HIGH oder LOW, auf jedem der Pins, einen Motor aus- oder einschalten. Der NANO muss nur diese vier Leitungen überwachen und würde in loop() einfach nur die Stepper bedienen, damit laufen die dann absolut gleichmäßig. Es würde auch ein 328P in Minimalbeschaltung ausreichen: Quartz und 2 Kondensatoren.

Ob Softwarelösungen per AccelStepper-Lib oder was auch immer da genau so gute Ergebnisse liefern, dazu vermag ich kein Urteil abzugeben, weil ich das noch nicht benutzt habe. Wäre auszuprobieren.
Kommt drauf an, wieviel Software auf den MEGA bzw. den ESP32 zum Laufen kommen soll, wenn da mehrmals irgendwie Interrupts ausgelöst werden, um 3 oder 4 verschiedene Dinge zu steuern, könnten die ISRs sich auch gegenseitig in die Quere kommen. Wenn das Projekt etwas ausladender wird, kommt da sicher mehr als nur 4 Stepper ansteuern und zwei US-Wandler bedienen zusammen. Und zu anderen (Multithreading / Multitasking) hat HaWe auch schon viel geschrieben. Das würde ich mir dann auch mal anschauen.

Muss am Ende jeder selber wissen, wie er es macht.


MfG

inka
31.03.2020, 12:30
Mit dem pulseIn() ist es wie mit dem delay(). Das kannst Du auch zu Fuß machen (pulseIn ist einfacher zu handhaben).
pulseIn einfacher zu handeln als delay, oder ist es anders gemeint?


Wegen den Steppern nochmal:

Ich will nicht dazu verleiten, andere Hardware einzusetzen. Aber die Steuerung der einzelnen Schritte geschieht doch im Mikrosekundenbereich. Sobald es dort, z.B. über eine halbe Millisekunde (oder weniger), zu Verzögerungen - zwischen den einzelnen Schritten - kommt, merkst Du das u.U., eben daran, dass es nicht gleichmäßig läuft. Deshalb würde ich die Motoren unabhängig steuern.
wenn - und es würde das wirklich vereinfachen - würde ich den MEGA für die motoren nehmen, schon wegen der gut gelösten aufnahme der vier steppersteuermodule auf dem RAMPS. Und evtl. ergibt sich später ja noch etwas was die stepper nicht stört und auf dem MEGA laufen könnte...



Kommt drauf an, wieviel Software auf den MEGA bzw. den ESP32 zum Laufen kommen soll, wenn da mehrmals irgendwie Interrupts ausgelöst werden, um 3 oder 4 verschiedene Dinge zu steuern, könnten die ISRs sich auch gegenseitig in die Quere kommen. Wenn das Projekt etwas ausladender wird, kommt da sicher mehr als nur 4 Stepper ansteuern und zwei US-Wandler bedienen zusammen. Und zu anderen (Multithreading / Multitasking) hat HaWe auch schon viel geschrieben. Das würde ich mir dann auch mal anschauen. und das ergibt sich nach und nach, da sind meine vorstellungen nicht ganz so präzise ausgeprägt...
Manchmal ist auch der weg das ziel :-)

Moppi
31.03.2020, 14:33
pulseIn einfacher zu handeln als delay, oder ist es anders gemeint?

pulseIn ist einfacher, als wenn Du das zu Fuß, Schritt für Schritt, selbst erledigst, so ist das gemeint.
Bloß pulseIn blockiert eben.

MfG


PS: von AccellStepper abgesehen. Du kannst natürlich auch selber eine ISR programmieren, die die Logiklevel für die Schritte der 4 Motoren setzt.
Ich hatte als Beispiel für die Rollosteuerung den Timer#1 vom 328P verwendet, um die Uhrzeit fortzuzählen. Kompliziert war das nicht.
Das funktioniert eigentlich gut. Auf dem MEGA2560 müsste so was ja auch funktionieren.

Rabenauge
31.03.2020, 14:43
PulseIn läuft so ab:

pulseIn(); // warten ob an dem Pin was passiert, im Normalfall (kein Timeout eingestellt) maximal ne volle Sekunde (wie delay(1000)).
Die Zeit wird kürzer, wenn innerhalb der Sekunde das Echo eintrifft.
Dann ist das Warten beendet.

Aber man _kann_ eben auch ein Timeout angeben- damit kann man die Verzögerung auf das Nötigste beschränken (der Ping braucht nur bis zum Hindernis und zurück).
Das kann man anhand der gewünschten Entfernung problemlos berechnen.

Zu Fuss würd ich es nicht machen, ausser, man kann für den Echo-Eingang nen Interrupt-Pin benutzen. Sonst riskiert man, das Echo zu verpassen, weil der Controller grade was anderes macht.

inka
05.04.2020, 13:54
ich habe mich jetzt ein paar tage mit den steppern, dem timing derselben, den unterbrechungen im ablauf durch das pingen nach hindernissen und ähnlichem zeug beschäftigt. Und bin zu dem resultat gekommen, dass ich aus einem vermeintlichen manko nun eine tugend mache :-)

Der roboter war ja von anfang an eher zu einem "gemächlichen" vorgehen und einem eher überlegten agieren konzipiert, nicht zu einem flitzer, bei dem es auf sekundenbruchteile ankommt bevor es kracht. Folgenden ablauf dachte ich mir werde ich anpeilen:

- er schaut ob es in fahrtrichtung ein hindernis gibt, stellt fest wie weit die strecke hindernisfrei ist und fährt in normaler geschwindigkeit los

- nach ca 2/3 der strecke, also ca in 1,5 metern schaltet er runter oder bleibt vielleicht sogar stehen und pingt noch einmal (ohne dass es zu problemen mit den unterbrechungen kommt) und in unterschiedlichen richtungen (evtl. dreht er sich auch um seine achse) und je nach ergebnis bzw. je nach den aufgaben fährt er weiter oder macht anderes...

- das andere kann bestehen aus position über gyro messen, akkuspannung messen und per IR evtl. eine ladestation anpeilen, luftfeuchte messen, temperatur messen usw, usw, usw...

- und je nach aufgabenstellung gehts dann weiter...

Trotz dieses relativ selbständigen vorgehens werde ich auf einen zugriff von aussen nicht verzichten wollen, nun kommt Rabenauges fernbedienung ins spiel...

Rabenauge
05.04.2020, 18:55
Schnell fahren wird mit _den_ Antrieben sowieso nix- weder mit den Steppern (denke ich, meine Erfahrung mit den Dingern beschränkt sich bisher allerdings auf 3D-Drucker), aber auf keinen Fall mit solchen Rädern.
Dafür sind die auch gar nicht konzipiert...

Du hast halt zwei Flaschenhälse da: zum einen die ohnehin nicht superschnellen US-Sensoren (geht schon, aber es gibt einfach flotteres), und dann noch das Schwenken- Servos sind für nen Mikrocontroller, so was _richtig_ lahmes.
Insofern halte ich deine geplante Strategie nicht für die schlechteste...wenn es partout nicht geht, die Stepper normal weiterlaufen zu lassen, während andere Dinge getan werden.

Wobei das bestimmt möglich ist: mein Drucker schafft es ja auch, während die Motoren laufen, z.B. das Display zu aktualisieren oder die Temperatur zu überwachen.

inka
06.04.2020, 12:17
Schnell fahren wird mit _den_ Antrieben sowieso nix- weder mit den Steppern (denke ich, meine Erfahrung mit den Dingern beschränkt sich bisher allerdings auf 3D-Drucker), aber auf keinen Fall mit solchen Rädern.
Dafür sind die auch gar nicht konzipiert... geschwindigkeit ist auch relativ. in dem video auf youtube (https://youtu.be/RlBlxOTrYzI) sieht man mehr oder weniger deutlich die vier geschwindigkeiten die sich momentan (jetzt vom smartphone) auch während der fahrt bei allen bewegungsarten schalten lassen...


Du hast halt zwei Flaschenhälse da: zum einen die ohnehin nicht superschnellen US-Sensoren (geht schon, aber es gibt einfach flotteres), und dann noch das Schwenken- Servos sind für nen Mikrocontroller, so was _richtig_ lahmes.
Insofern halte ich deine geplante Strategie nicht für die schlechteste...wenn es partout nicht geht, die Stepper normal weiterlaufen zu lassen, während andere Dinge getan werden. die servobewegung hat keinerlei einfluss auf den lauf der stepper...


Wobei das bestimmt möglich ist: mein Drucker schafft es ja auch, während die Motoren laufen, z.B. das Display zu aktualisieren oder die Temperatur zu überwachen. wenn man an die software käme liesse sich das evtl. auch rausfinden, wobel die NEMA's laufen ja beim drucker sowieso lamgsammer und es wird auch weniger kraft gebraucht, deshalb sind die auch so viel leiser als bei mir...
btw. das druckraumvolumen bei meinem drucker ist 100x100x100mm...

Rabenauge
06.04.2020, 15:56
btw. das druckraumvolumen bei meinem drucker ist 100x100x100mm...

Ooook.
Das ist dann ja ein winziges Druckerchen.
Aber für vieles ja auch ausreichend...ich druck eigentlich viel mehr Kleinzeug, was deiner auch könnte, als Sachen, wo ich den grossen (naja-ich hätt gerne mehr) Bauraum wirklich brauche.
Der Prusa Slicer hat übrigens ne Funktion eingebaut, um zu grosse Objekte passend aufteilen zu können.

Und du hast recht: so langsam ist dein Teil ja bei Vollgas gar nicht mal-vermutlich die schnellste Ikea-Box überhaupt?

Dass die Stepper im Drucker langsamer laufen bezweifle ich aber: ich kann durchaus mit 200mm/s fahren. Drucken kann man mit dem Tempo nicht, aber Leerfahrten...und wenn ich da mal deinen Raddurchmesser schätze, und dann den meiner Riemenscheiben dagegen, denke ich, der Drucker wär sogar schneller als dein Roboter.

An die Firmware _kannst_ du doch ran: nimm einfach ne ältere Marlin auseinander- das ist alles schön in einzelne Dateien (allerdings sehr viele...) verpackt, quelloffen.
Kannst du alles schön in die Arduino-IDE laden.
Allerdings-da durchzublicken.....:shock:

inka
06.04.2020, 16:24
Das ist dann ja ein winziges Druckerchen. Aber für vieles ja auch ausreichend...ich druck eigentlich viel mehr Kleinzeug, was deiner auch könnte, als Sachen, wo ich den grossen (naja-ich hätt gerne mehr) Bauraum wirklich brauche.
das ist er
34934 für mich völlig ausreichend, läuft nach anfangsproblemen (die aber mehr mit meinem nicht vorhandenwem wissen als mit dem drucker selbst was zu tun hatten) völlig problem- und anspruchslos...


Der Prusa Slicer hat übrigens ne Funktion eingebaut, um zu grosse Objekte passend aufteilen zu können.
da wären nähere infos interessant, wie gesagt für grössere sachen... Läuft der slicer unter linux und ohne Prusa drucker?


Und du hast recht: so langsam ist dein Teil ja bei Vollgas gar nicht mal-vermutlich die schnellste Ikea-Box überhaupt? sehe ich auch so. Vielleicht sollte ich den thread umbenennen :-)

Aber meine überlegungen darüber, was nach meinen vorstellungen notwendig ist und was nicht, hat auch was mit früher zu tun, als ich noch für geld entwickelt und konstruiert habe:
kennst du die 80/20 regel? Für 80% der funktionalität eines neuen gerätes brauchst du 20% der entwicklungszeit (und der kosten), für die restlichen 20% der funktion die übrigen 80% der ressourcen... und vernünfigertweise verzichtet man dann auf den aufwand...



An die Firmware _kannst_ du doch ran: nimm einfach ne ältere Marlin auseinander- das ist alles schön in einzelne Dateien (allerdings sehr viele...) verpackt, quelloffen.
Kannst du alles schön in die Arduino-IDE laden.
Allerdings-da durchzublicken.....:shock: ich glaube das brauche ich nicht, ansonsten siehe oben...

Moppi
06.04.2020, 18:23
Schnell fahren wird mit _den_ Antrieben sowieso nix- weder mit den Steppern (denke ich, meine Erfahrung mit den Dingern beschränkt sich bisher allerdings auf 3D-Drucker), aber auf keinen Fall mit solchen Rädern.
Dafür sind die auch gar nicht konzipiert...

Die Stepper im 3D-Drucker machen beispielsweise beim Extruder schon mal 80mm/s, beim Zurückziehen des Filaments. Das entspricht etwa 160U/min, wenn das Ritzel ca. 10mm Durchmesser hat. Korrigiere mich, falls ich falsch liege!
Je nach Kraft und Raddurchmesser sind da theoretisch, mit einem NEMA17 (andere NEMAs hatte ich nie, aber ich denke die werden alle gleich schnell drehen), bis einige Kilometer pro Stunde möglich.


MfG

Rabenauge
06.04.2020, 19:17
Ja, es gibt den Prusa Slicer als App-Image auch für Linux.
Läuft super- die aktuelle Version ist mir neulich _einmal_ abgeschmiert, aber die ist auch noch brandneu, und das war auch bei einem Versuch, den man evtl. nicht machen sollte....
Da er noch etliche Features mehr hat (richtig geil ist die variable Schichtdicke!), inzwischen mein absoluter Liebling.

Und klar läuft der mit beliebigen Druckern- du musst halt ggf. nur dein Maschinenprofil erstellen-viele sind aber schon dabei.
Allerdings dein kleiner Exot da- weiss ich nicht....

Übrigens: läuft der mit Mignonzellen ? Wär praktisch, dann könnte man den im Rucksack, beim Wandern dabeihaben, und der kann derweil bisselwas basteln.
Ich find den süss.

inka
07.04.2020, 13:27
Und klar läuft der mit beliebigen Druckern- du musst halt ggf. nur dein Maschinenprofil erstellen-viele sind aber schon dabei. Allerdings dein kleiner Exot da- weiss ich nicht.... mal schauen, bis jetzt war's ja nicht nötig, ich hatte nix so grosses zu drucken...


Übrigens: läuft der mit Mignonzellen ? Wär praktisch, dann könnte man den im Rucksack, beim Wandern dabeihaben, und der kann derweil bisselwas basteln. Ich find den süss.
also ich weiss nicht wie lange die paar armen mignozellen so durchhalten würden :p, aber der drucker hat auch kein fest eingebautes netzteil, sondern ein laptopnetzteil (oder sowas) mit 12V, allerdings mit 6A...

btw: durch das setzten und abfragen einer zusätzlich flag-variablen ist es mir nun gelungen, dass er wirklich nur einmal den ping abfeuert und nicht zwei dutzendmal, somit ist die verzögerung kaum noch spürbar....
-----------------------------------------------------------
Jetzt kann ich anfangen mich um die kommunikation zu kümmern, deshalb die frage:
von meinem TT-lok-projekt habe ich noch diesen ESP32 (https://www.ebay.de/itm/162716855489), frage an die spezialisten - ist der für sowas (WiFi, BT, I2C abfrage vom gyro und kommunikation mit dem atmega 2560) brauchbar, oder eher nicht? Wenn nein, was bräuchte ich dann?

Rabenauge
07.04.2020, 17:24
Wifi und I2C gleichzeitig hatte ich mit nem ESP(kein 32 allerdings, sondern der ältere) auch schonmal gemacht, mit einigen Tricks (zusätzliche Busy-Leitung) hatte das gut funktioniert (war im XPlorer 1).

Aber hast du nicht das RAMPS-Board im Roboter?
Da steckt doch ein Mega 2560 im Unterdeck...der kann, dank endlos vieler Schnittstellen auch ganz problemlos noch ein HC 05/06-BT-Modul mit ansteuern-und ein paar andere Kleinigkeiten.
Wenn du aber den ESP für die Funk-Geschichten nutzen willst-wüsste ich nicht, was dagegen spräche. Aber ich würd die interne Kommunikation vielleicht eher seriell (der Mega hat davon drei) machen, als per I2C (die I2C hat schon so ihre kleinen Tücken).

Moppi
07.04.2020, 17:58
Wenn schon ein Mega da ist, würde ich vielleicht auch schauen, ob ich damit alles erledigen kann, bloß WiFi hat der nicht. Dafür gibts min. ein WiFi-Shield. Inkl. SD-Karten-Slot. Aber es ist ja ein ESP32 da. Gut, wenn der schon da ist, kann man den benutzen, aber nur für WiFi ist der ja vielleicht etwas überdimensioniert (das wäre so, als würde ich einen 7.5-Tonner einplanen, um meine Einkaufstasche vom REWE nachhause zu fahren) - da würde es auch ein ESP-12E tun oder was noch einfacheres, die könnte man dann ja auch per Schnittstelle, die frei ist, verbinden. Diese "esp8266-ESP-01S-Arduino" Teile sind niedlich und bestimmt dafür ausreichend:
https://www.amazon.de/AZDelivery-esp8266-ESP-01S-Arduino-Raspberry/dp/B01LK83TX0/ref=sr_1_3?dchild=1&keywords=Arduino+arduino+wifi+WiFi+Shield


MfG

inka
08.04.2020, 11:36
Wenn schon ein Mega da ist, würde ich vielleicht auch schauen, ob ich damit alles erledigen kann, bloß WiFi hat der nicht. Dafür gibts min. ein WiFi-Shield. Inkl. SD-Karten-Slot. Aber es ist ja ein ESP32 da. Gut, wenn der schon da ist, kann man den benutzen, aber nur für WiFi ist der ja vielleicht etwas überdimensioniert (das wäre so, als würde ich einen 7.5-Tonner einplanen, um meine Einkaufstasche vom REWE nachhause zu fahren) - da würde es auch ein ESP-12E tun oder was noch einfacheres, die könnte man dann ja auch per Schnittstelle, die frei ist, verbinden. Diese "esp8266-ESP-01S-Arduino" Teile sind niedlich und bestimmt dafür ausreichend:
https://www.amazon.de/AZDelivery-esp8266-ESP-01S-Arduino-Raspberry/dp/B01LK83TX0/ref=sr_1_3?dchild=1&keywords=Arduino+arduino+wifi+WiFi+Shield MfG

ich habe beide, den ESP32 und den ESP-01S, den habe ich mal gleich zu anfang der IoT ära mal gekauft, allerdings war der umgang damit - zumindest hatte ich damals den eindruck - recht kompliziert. Da der WiFi-fähiger controler aber nicht nur die kommunikation nach aussen machen soll, sondern auch noch anderes (werde diesmal tatsächlich eine aufgabenliste für die beiden controler schreiben :-)) - tendiere ich schon zu dem 7,5-tonner :-)



Wifi und I2C gleichzeitig hatte ich mit nem ESP(kein 32 allerdings, sondern der ältere) auch schonmal gemacht, mit einigen Tricks (zusätzliche Busy-Leitung) hatte das gut funktioniert (war im XPlorer 1). ich weiss noch garnicht sicher welcher controle nun was genau erledigen soll, deshalb nun die liste..


Aber hast du nicht das RAMPS-Board im Roboter?
Da steckt doch ein Mega 2560 im Unterdeck...der kann, dank endlos vieler Schnittstellen auch ganz problemlos noch ein HC 05/06-BT-Modul mit ansteuern-und ein paar andere Kleinigkeiten. hatt er, an einer hängt schon ein HC05, die "null" ist ja fürs flashen belegt, bleibt noch eine. Der mega 2560 war ja von anfang an drin, als ein fürs fahren zuständiger controler, deshalb hat es ja auch so gut mit der RAMPS idee gepasst :-)


Wenn du aber den ESP für die Funk-Geschichten nutzen willst-wüsste ich nicht, was dagegen spräche. Aber ich würd die interne Kommunikation vielleicht eher seriell (der Mega hat davon drei) machen, als per I2C (die I2C hat schon so ihre kleinen Tücken). Ok, dann wird es der ESP32, der für die kommunikation zuständig wird...

Jetzt muss ich aber erstmal die beiden codeteile (fernbedienung und selbständiges fahren) zusammenbinden...

Moppi
08.04.2020, 15:24
Wenn schon ein ESP32, dann - um Himmels Willen - schau Dir doch bitte, das Ding mit den zwei CPUs an! Ich habe nochmal einen Link gesucht:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/esp32-nutzung-beider-cpu-kerne-fuer-eigene-projekte. Dass das Teil einen vernünftigen Einsatz erfährt.

MfG

inka
08.04.2020, 16:32
Wenn schon ein ESP32, dann - um Himmels Willen - schau Dir doch bitte, das Ding mit den zwei CPUs an! Ich habe nochmal einen Link gesucht:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/esp32-nutzung-beider-cpu-kerne-fuer-eigene-projekte. Dass das Teil einen vernünftigen Einsatz erfährt MfG

hallo Moppi,
es gibt immer gründe für das was man tut :-) , gibt es einen grund dafür links als code zu schicken? Also einfacher macht es's nicht :-( - und selbst wenn ich es rauskopiere und im webbrowser einfüge, komme ich auf eine seite von Ez-delivery, irgendein blog, den ich nicht verstehe...

inka
10.04.2020, 11:13
habe jetzt mal die funktionen auf die beiden controler ein bischen aufgedröselt, ist sicher nicht vollständig, mal der erster stand...

34941

gibt es eigentlich eine möglichkeit pdf dokumente / tabellen anders zu posten?

Moppi
10.04.2020, 12:10
gibt es einen grund dafür links als code zu schicken?

Ja, weil manche Links von der Forensoftware umgestrickt werden und nicht mehr funktionieren. Daher müsste man jeden Link, nachdem der Beitrag geschrieben ist, ausprobieren und bei Nichtfunktionieren den Beitrag nachträglich editieren.

Und ja, richtig, Du landest auf einem Blog, aus dem hervor geht, dass der ESP32 2 CPUs hat und was man damit machen kann. Einen ähnlichen Link, von einer anderen Seite, hatte ich schon mal hier reingestellt, da ging es um dasselbe Thema, müsste hier im Thread ein paar Seiten zurück stehen.


gibt es eigentlich eine möglichkeit pdf dokumente / tabellen anders zu posten?
In ein ZIP-File einpacken und anhängen.
Oder Du schreibst Deine Tabelle in einem normalen Texteditor, wo alle Zeichen gleich breit sind, anschließend hier einfügen als Code ;)
Oder Du erstellst mit dem Editor vom Forum eine Tabelle.

MfG

inka
10.04.2020, 14:15
Ja, weil manche Links von der Forensoftware umgestrickt werden und nicht mehr funktionieren. Daher müsste man jeden Link, nachdem der Beitrag geschrieben ist, ausprobieren und bei Nichtfunktionieren den Beitrag nachträglich editieren. man kann es auch unter "erweitert" oder in der "vorschau" testen ob der link funktioniert, also noch vor dem abschicken des beitrages...


Und ja, richtig, Du landest auf einem Blog, aus dem hervor geht, dass der ESP32 2 CPUs hat und was man damit machen kann. Einen ähnlichen Link, von einer anderen Seite, hatte ich schon mal hier reingestellt, da ging es um dasselbe Thema, müsste hier im Thread ein paar Seiten zurück stehen. Ach das meinst Du, ok, ist ja ganz nett, dass der ESP zwei CPU's hat, das würde - zumindest für mich - das ganze aber nicht einfacher machen, eher umgekehrt :-)

Moppi
10.04.2020, 18:49
man kann es auch unter "erweitert" oder in der "vorschau" testen ob der link funktioniert, also noch vor dem abschicken des beitrages...

https://www.conrad.de/de/p/draeger-kombinationsfilter-1140-a2b2e2k2-hg-p3-r-d-6738797-1-st-2201512.html

Also in der Vorschau funktioniert der Link.

Bloß nicht, sobald der Beitrag abgeschickt wurde, wenn er dann erneut vom System ausgegeben wird, wird er verfälscht.
Inka, es wäre toll, wenn Du in Zukunft ausprobierst, was Du behauptest und nicht anderen die Arbeit überläßt, bzw. dass andere sich hinstellen und das Gegenteil beweisen. ;)


das ganze aber nicht einfacher machen, eher umgekehrt

Dann würde ich Hardware kaufen, die meinen Ansprüchen entspricht. Sich eine Mehrkernhardware zuzulegen und sich nie damit auseinanderzusetzen, die sinnvoll zu nutzen muss man erst mal verstehen lernen.

MfG

inka
10.04.2020, 19:03
seltsam, dass meine links alle funktionieren. wahrscheinlich liegt es daran, dass ich keine conrad-links verschicke. und du kannst ruhig davon ausgehen, dass ich dinge überprüfe bevor ich was behaupte...
btw. den ESP hatte ich schon, wg. Wifi...

Rabenauge
10.04.2020, 21:36
Das mit den Conrad-Links ist nichts neues..aber wer kauft da auch, hehe.
Die meisten anderen funktionieren- ich setze ja auch hin und wieder einen....

Hab mir dein Dokument mal angesehen....du willst BT _und_ Wifi nutzen?
Auch, wenn mir nicht ganz klar ist, warum beides- wieso nimmst du dann nicht einfach nen RasPi?
Schon der ZeroW hat beides an Bord...und kostet nun wirklich nicht die Welt (um die 15 Mäuse).

Linux kennst du ja eh schon (sehr hilfreich, wenn man mit RasPi's spielt)...den Mega kannst du trotzdem die Steuerung der Antriebe machen lassen. Das können die besser als ein Pi, zumindest, wenn man den mit Python programmiert.
Ne Kamera könntest du dann auch ganz einfach noch an Bord holen...

inka
11.04.2020, 10:27
Hab mir dein Dokument mal angesehen....du willst BT _und_ Wifi nutzen?
Auch, wenn mir nicht ganz klar ist, warum beides- wieso nimmst du dann nicht einfach nen RasPi?
Schon der ZeroW hat beides an Bord...und kostet nun wirklich nicht die Welt (um die 15 Mäuse). Ich bin nicht sicher was und wann sinnvoll ist, wollte mir beide möglichkeiten offen halten...
Und - ich hatte den eindruck, dass es hier von manchem als zu viel des guten gesehen wird wenn man schon den ESP nimmt und den nicht in allen belangen nutzt :-) - und den RasPi? Ein overshoot ohne gleichen, oder? Einen hätte ich ja auch bereits
34942
habe ich mir 2012 mal gekauft, nur ein bischen damit rumgespielt, also nicht richtig warm geworden damit. Wahrscheinlich schon total veraltet...


Linux kennst du ja eh schon (sehr hilfreich, wenn man mit RasPi's spielt)...den Mega kannst du trotzdem die Steuerung der Antriebe machen lassen. Das können die besser als ein Pi, zumindest, wenn man den mit Python programmiert. Das ist aber kein muss mit python?


Ne Kamera könntest du dann auch ganz einfach noch an Bord holen...
das ist allerdings ein argument. Also nach ZeroW suchen? Oder doch was anderes?

morob
11.04.2020, 11:44
ob du den zero nimmst oder den alten rpi ist das gleiche, beide haben nur 1 cpu und beide haben wahrscheinlich 512mb, eventeull hat der alte auch nur 256mb, was bei kamera nutzung dann nur noch 128mb sind.

inka
14.04.2020, 15:36
ob du den zero nimmst oder den alten rpi ist das gleiche, beide haben nur 1 cpu und beide haben wahrscheinlich 512mb, eventeull hat der alte auch nur 256mb, was bei kamera nutzung dann nur noch 128mb sind.

ich habe jetzt einen zeroW bestellt :-), es dauer ein paar tage bis der kommt...

Das zusammenfügen der zwei codeteile hat gut funktioniert, muss noch die eingestellten entfernungen ausgiebig testen. Den mittleren vorderen US-sensor wollte ich nach "schräg-unten" ausrichten und so mögliche "negative hindernisse" im boden messen zu können. Bin gespannt ob und wie das funktioniert :-( - gottseidank funktioniert nun die fernbedienung, die ich im notfall als bremse einsetzen kann...

Frage: hat schon jemand versucht von einem HC SR04 einen ping zu schicken und den von einem anderen SR04 zu empfangen?

Rabenauge
14.04.2020, 17:49
Hatte ich mal versucht- erfolglos.
Aber sehr viel Mühe hatte ich mir bei dem Experiment auch nicht gegeben...
Bin nicht ganz sicher, aber ich glaube, die Dinger gehn nur dann überhaupt auf Empfang, wenn sie vorher gesendet hatten.

Du willst also Bodenabsätze per Ultraschall finden- da bin ich mal sehr gespannt. Meiner Meinung nach geht das schon-wenn der Sensor steil genug nach unten schaut- ab etwa 45° dürfts aus sein.

Zum RasPi: tu dir bitte nen Gefallen, und benutze _nicht_ das neueste Raspian. Gut möglich, dass es auf den 4ern brauchbar läuft- auf den 3ern eher erbärmlich- und aufm Zero auch.
Jessie läuft sehr gut.

Und nein, natürlich muss man nen Pi nicht mit Python quälen, das geht auch in C- nur dann _richtig_ C- und nicht das, was wir von den Arduinos kennen.
Allerdings: für Python gibt es halt die meisten Bibliotheken...leider.

Ich bin da auch noch hin-und hergerissen: einerseits ist Python genauso ein Blödsinn wie Java: ich brauche nen schnelleren Rechner, damit ich den dann mit nem Bytecode-Interpreter ordentlich ausbremsen kann- andererseits kriegt man in Python schneller was fertig (wobei die Programmiersprache irgendwas von Kindergarten hat, so richtig Spass dran hab ich nicht).

morob
14.04.2020, 19:33
rpi, jessie wird kaum noch unterstützt, stretch ist besser und auch stabil, mit dem rpi4 gebe ich dir recht, wenn möglich nimm einen rpi3

inka
17.04.2020, 10:31
so,
nun habe ich ein paar tage codemässig gebastelt...
Es stellt sich immer deutlicher raus, dass die beiden aktivitäten - fahren und auf hindernisse zu achten - nur unbefriedigend mit einem controler (mega 2560) durchzuführen und nur mit unbefriedigenden qualität von beiden ergebnissen zu schaffen ist. Entweder ist das fahren zu ruckelig und auch zu laut, oder die hindernisserkennung sehr unbefriedigend... Und auch das blinde vorwärtsfahren um anschließend anzuhalten und zu messen ist nicht schön. Man muss auch auf plötzlich auftauchende hindernisse reagieren können...
Würde bedeuten, dass man z.b. für die US-ortung von hindernissen einen nano zusätzlich einsetzt. Platzmässig sicher kein problem :-) , zwei probleme (ich habe mich an die umschreibung herausforderung immer noch nicht so richtig gewöhnt) sehe ich:

- das flashen habe ich bisher mit einer USB verbindung von aussen zum mega gelöst, das wird nun bei zwei, später mit dem zeroW sogar drei controlern und drei USB anschlüssen zu umständlich und zu unübersichtlich. Ich muss ja nicht über USB gehen, ich könnte auch die TX/RX0 pins auch direkt nutzen. Frage hierzu: kann man mit einem drehencoder (nur als beispiel) die TX/RX signale zum jeweils zuständigen controler durchschalten? Oder andere idee?

- die kommunikation zwischen den cotrolern über I2C ist ein neues gebiet für mich (bisher war es nur der mega und das LCD display), aber es ist nicht das erste neue gebiet :-)

morob
17.04.2020, 11:01
früher gab es sowas mal für serielle schnittstellen :D

ich werde das problem anders lösen, ich werde die microcontroller an den raspberry pi anschliessen und dann bei notwendigkeit von da programmieren. ich kommuniziere ja zwischen rpi und mc.

inka
17.04.2020, 11:48
früher gab es sowas mal für serielle schnittstellen :D
genau :-)


ich werde das problem anders lösen, ich werde die microcontroller an den raspberry pi anschliessen und dann bei notwendigkeit von da programmieren. ich kommuniziere ja zwischen rpi und mc.
heisst: ich schreibe den sketch über WLAN von meinem PC aus auf dem raspberry pi (wo die arduino IDE installiert ist) und übertrage es dann auf den jeweiligen mc?

morob
17.04.2020, 13:18
es gibt eine angepasste version auf der kommndozeile für arduino für den rpi.

inka
17.04.2020, 15:09
das erinnert so bischen an die RP6 zeiten (so 2010), wo das ganze kompilieren und flashen von der Kommandozeile aus erfolgte 🤨 - fand ich persönlich nicht so toll...

- - - Aktualisiert - - -

würde sich für die umschaltung der RX/TX paare so etwas (https://de.aliexpress.com/item/32960597779.html?spm=a2g0s.9042311.0.0.11b14c4dHnB GOa) eignen?

Klebwax
17.04.2020, 19:35
so,
nun habe ich ein paar tage codemässig gebastelt...
Es stellt sich immer deutlicher raus, dass die beiden aktivitäten - fahren und auf hindernisse zu achten - nur unbefriedigend mit einem controler (mega 2560) durchzuführen und nur mit unbefriedigenden qualität von beiden ergebnissen zu schaffen ist.

Das sehe ich ganz anders. Auch wenn ich kein AVR-Fan bin, ist der Mega2560 schon ziemlich kräftig. Nur mal so zum Vergleich, obwohl die "MIPS" nicht so wirklich vergleichbar sind: für den Mega werden 16 MIPS angegeben, für den ersten PC mit 8088 0,75 MIPS und für die ersten 386 2,15 MIPS (und da lief schonmal Windows drauf). Um deine Aufgaben zu schaffen hat der Mega ausreichend MIPS und eine Menge eingebaute Hardware zur Unterstützung.

Ich versuche mal ein Konzept zu skizzieren, wie das IMHO machbar ist. Es bietet sich an, mit den Steppern anzufangen. Wenn ich mich richtig erinnere, taktest du mit 4ms, wenn es mal etwas schneller sein soll, könnten es auch 2ms sein. Ich würde also einen Timerinterrupt mit ca. 2ms aufsetzen. Von diesem werden unabhängig von der Mainloop die Motoren bedient. Gleichzeitig werden alle Schalter und Kontakte eingelesen und entprellt. (Auf dem Arduino gibt es das eigentlich schon, dort werden z.B. die Millis bearbeitet, es wird aber vor dem User versteckt, mit ein Grund, daß ich kein Arduino-Fan bin).

Nun zu den US-Sensoren. Eigentlich sind sie ein schlechtes Design. Als sie mal erfunden wurden, waren sie reine Hardware bestehend aus Treiber, OP-Amps und Komparator. Die echte Auswertung musste der µC machen. Soweit war das in Ordnung. Der neueste Schaltplan, den ich gesehen habe, hat aber einen eigenen Prozessor drauf, der das eigentlich erledigen könnte. Um aber mit den alten Teilen kompatibel zu sein, erzeugt der die gleichen Signale wie sie. Aber auch dafür hat der Mega Unterstützung, den Input-Capture. Damit kann man das zeitliche Eintreten einer Taktflanke automatisch aufzeichnen, ohne den Prozessor zu blockieren. Es gibt davon mehrere Einheiten, damit kann man auch mehrere Sensoren, möglicherweise abwechselnd, laufen lassen.

Die Kommunikation lässt man ebenfalls aus ihren Interrupten laufen und kann sich in der Mainloop mit der Routenplanung beschäftigen oder PI auf hunderttausend Stellen ausrechnen.

Die Vorstellung, daß das Aufteilen der Aufgaben auf mehrere Prozessoren einem das Leben erleichtert, ist trügerisch. Am Ende ist der Aufwand, die µCs zu überwachen und zu synchronisieren und dabei kein Ereignis zu verpassen größer, als alles mit einem zu erledigen.

MfG Klebwax

morob
17.04.2020, 20:32
also bei mir läuft das nach eva prinzip, kommunikation kommt noch vor dem a also ein evka :D
praxis erfahrung in 2 wochen auf dem 2560, mit 6 x hsr04, mal schauen.

Rabenauge
17.04.2020, 22:01
Du kannst auch noch anders vorgehen (hab ich auch schon gemacht): den Arduino direkt vom Pi aus mit der Arduino-IDE programmieren.
Das funktioniert einwandfrei, auch wenn complilieren ein _bisschen_ länger dauert, als gewohnt.
Selbst ohne ein Display am Pi geht das: ich benutze (aus Bequemlichkeit) einfach VNC- somit kann ich gemütlich am Laptop sitzen, und via WLAN auf dem Pi die IDE starten, und so bedienen als liefe sie auf dem Laptop.

Holomino
18.04.2020, 11:50
Das sehe ich ganz anders. Auch wenn ich kein AVR-Fan bin, ist der Mega2560 schon ziemlich kräftig. Nur mal so zum Vergleich, obwohl die "MIPS" nicht so wirklich vergleichbar sind: für den Mega werden 16 MIPS angegeben, für den ersten PC mit 8088 0,75 MIPS und für die ersten 386 2,15 MIPS (und da lief schonmal Windows drauf). Um deine Aufgaben zu schaffen hat der Mega ausreichend MIPS und eine Menge eingebaute Hardware zur Unterstützung.

Ack.
Kann irgendwie nicht sein, dass 64000 Befehlszyklen (4ms) und 6 Timer für diese Aufgabe nicht reichen.

inka
18.04.2020, 12:08
Das sehe ich ganz anders. Auch wenn ich kein AVR-Fan bin, ist der Mega2560 schon ziemlich kräftig. Nur mal so zum Vergleich, obwohl die "MIPS" nicht so wirklich vergleichbar sind: für den Mega werden 16 MIPS angegeben, für den ersten PC mit 8088 0,75 MIPS und für die ersten 386 2,15 MIPS (und da lief schonmal Windows drauf). Um deine Aufgaben zu schaffen hat der Mega ausreichend MIPS und eine Menge eingebaute Hardware zur Unterstützung. ich glaube meine probleme beruhen nicht auf der ungenügenden rechenpower des mega2560, sondern am nicht funktionierendem timing der abläufe "fahren" und "orten"...


Ich versuche mal ein Konzept zu skizzieren, wie das IMHO machbar ist. Es bietet sich an, mit den Steppern anzufangen. Wenn ich mich richtig erinnere, taktest du mit 4ms, wenn es mal etwas schneller sein soll, könnten es auch 2ms sein. Ich würde also einen Timerinterrupt mit ca. 2ms aufsetzen. Von diesem werden unabhängig von der Mainloop die Motoren bedient. Gleichzeitig werden alle Schalter und Kontakte eingelesen und entprellt. leuchtet absolut ein, ich hatte (und habe teilweise immer noch) schwierigkeiten die kontrolle der stepper allein so zu machen, dass es einigermassen läuft, anfangs ohne eine lib, dann mit der accelstepper lib und zuletzt mit einem mix von beidem. Stepper allein würden nun laufen, im prinzip so, wie ich es wollte...
Ich bin dann, was die weitergehenden funktionen der roboters betrifft, einem anderen konzept gefolgt, der von Rabenauge beschrieben wurde:

Ich verwende einen timer:


void timer()
{
aktuelle_timer_millis = millis();

if (aktuelle_timer_millis - vergangene_timer_millis >= interval_timer) // halbe sekunde um
{
vergangene_timer_millis = aktuelle_timer_millis;
halbe_tick ++; // 500ms sind um

if (halbe_tick > 2) // hier ist eine volle Sekunde vorbei
{
halbe_tick = 1; // wechselt alle halbe Sekunde
sekunden_tick++;// wechselt jede volle Sekunde

Serial.println(sekunden_tick);

}
if (sekunden_tick >= 11) // mehr brauchen wir nicht
{
sekunden_tick = 0;

}

}
}
und "sekundenaufgaben"


void sekunden_aufgaben()
{
if (sekunden_tick == 1)
{
// spannung_messung_gemacht = 0;
}

if ((sekunden_tick == 2) && (spannung_messung_gemacht == 0))
{
// spannung_messen_chip();
// spannung_messen_3();
}

if (sekunden_tick == 3)
{
ping_zwei_sensoren_gemacht = 0;
// myservo.write(35);
}

if ((sekunden_tick == 4) && (ping_zwei_sensoren_gemacht == 0))
{
sonar_2_sensoren ();
start_1();
}
if (sekunden_tick == 5)
{

}
if (sekunden_tick == 6)
{
ping_zwei_sensoren_gemacht = 0;
// myservo.write(70);
}

if ((sekunden_tick == 7) && (ping_zwei_sensoren_gemacht == 0))
{
sonar_2_sensoren ();
start_1();
}

if (sekunden_tick == 8)
{
// hindernis_vorh_mitte_entprellt();
}

if (sekunden_tick == 9)
{
ping_zwei_sensoren_gemacht = 0;
// myservo.write(0);
}

if ((sekunden_tick == 10) && (ping_zwei_sensoren_gemacht == 0))
{
sonar_2_sensoren ();
start_1();
}

if (sekunden_tick == 11)
{

}
}
die beide in der loop() laufen...


Nun zu den US-Sensoren. Eigentlich sind sie ein schlechtes Design. Als sie mal erfunden wurden, waren sie reine Hardware bestehend aus Treiber, OP-Amps und Komparator. Die echte Auswertung musste der µC machen. Soweit war das in Ordnung. Der neueste Schaltplan, den ich gesehen habe, hat aber einen eigenen Prozessor drauf, der das eigentlich erledigen könnte. Um aber mit den alten Teilen kompatibel zu sein, erzeugt der die gleichen Signale wie sie. Aber auch dafür hat der Mega Unterstützung, den Input-Capture. Damit kann man das zeitliche Eintreten einer Taktflanke automatisch aufzeichnen, ohne den Prozessor zu blockieren. Es gibt davon mehrere Einheiten, damit kann man auch mehrere Sensoren, möglicherweise abwechselnd, laufen lassen. auch die habe ich schon verwendet, ohne dass sich die stepper (allerdings eine andere art stepper als die NEMA17 und die customstepper lib) sich mit irgendetwas anderem ins gehege gekommen wären....



Die Vorstellung, daß das Aufteilen der Aufgaben auf mehrere Prozessoren einem das Leben erleichtert, ist trügerisch. Am Ende ist der Aufwand, die µCs zu überwachen und zu synchronisieren und dabei kein Ereignis zu verpassen größer, als alles mit einem zu erledigen. bei der verwendung der timerfunktion und der sekundenaufgaben dachte ich es wäre (natürlich durch zwei controler und I2C etwas verkompliziert) relativ einfach ein paar werte von einem mc zu generieren (die ortungsabstände) um sie vom anderen controler zu lesen und auszuwerten...

Was die ISR's betrifft, bin ich trotz mehrere kurze anläufe immer wieder davor zurückgeschreckt, wenn sich nur eine andere (vielleicht auch nur vermeintlich einfachere) methode der lösung angeboten habe...

inka
19.04.2020, 11:27
Ich versuche mal ein Konzept zu skizzieren, wie das IMHO machbar ist. Es bietet sich an, mit den Steppern anzufangen. Wenn ich mich richtig erinnere, taktest du mit 4ms, wenn es mal etwas schneller sein soll, könnten es auch 2ms sein. Ich würde also einen Timerinterrupt mit ca. 2ms aufsetzen. Von diesem werden unabhängig von der Mainloop die Motoren bedient. Gleichzeitig werden alle Schalter und Kontakte eingelesen und entprellt.
ich möchte mein letztes statement etwas ergänzen:
natürlich weiss ich um die vorteile der ISR routinen, habe auch versucht mich in die problematik in verschiedenen tutorials und anderen webseiten einzulesen, bin dabei aber nicht wirklich weitergekommen :-( ...
Es wäre vielleicht ein versuch wert, wenn jemand mit mir zusammen versuchen würde, die problematik schritt für schritt durchzuarbeiten, an codebeispielen, fragen und erklärungen...
Insofern sollte mein letzte äusserung hier im thread keine rigorose ablehnung in richtung ISR sein. Den thread würde das sicher bereichern...

Rabenauge
19.04.2020, 12:03
Gab es da nicht diese TimerOne (oder so ähnlich)-Bibliothek für derartiges?
Bisher komme ich im XP2 glänzend ohne solche Interrupts aus, ich benutze lediglich für die Odometer welche (PinChange).

Moppi
19.04.2020, 12:29
Es gibt viele Links zu einfachen Abhandlungen, für Einsteiger in Arduino. Man muss sich dann tatsächlich auch mal damit auseinandersetzen und das ausprobieren und durcharbeiten. Zum Beispiel diesen Inhalt hier: http://diwo.bq.com/de/interrupts-mit-arduino-benutzen/
Auf DIWO ist es ein sehr anschauliches Beispiel, das jeder ausprobieren kann. Einfacher gehts eigentlich nicht mehr. Dort steht genau, was, warum und wo.

Die ISR muss verankert werden. Eine Erklärung, im Detail, gibts hier, für attachInterrupt: https://www.arduino.cc/reference/de/language/functions/external-interrupts/attachinterrupt/


MfG

Klebwax
19.04.2020, 13:41
natürlich weiss ich um die vorteile der ISR routinen,
Es geht nicht um Vorteile. Es geht eigentlich nicht anders. Beispiel Stepper: wenn du ihn mit 1kHz (1ms) taktest, musst du dich (oder eher der µC) alle Millisekunde um ihn kümmern. Kein anderer Programmteil darf dich länger als eine knappe Millisekunde davon ablenken. In der AccelStepper wird das so gemacht und in der Beschreibung heisst das dann so:


The run() function must be called frequently until the motor is in the desired position, after which time run() will do nothing.

Und hier nachmal etwas zu "called frequently":


The fastest motor speed that can be reliably supported is about 4000 steps per second at a clock frequency of 16 MHz on Arduino such as Uno etc.

4000 Schritte heißt 250µs pro Schritt. Wenn der Stepper so schnell laufen soll, darf in loop() nichts gemacht werden, was länger als diese 250µs dauert. Mit Sicherheit darf also kein "dummer" US-Sensor ausgelesen oder ein delay() verwendet werden. Aber auch jede andere Funktion Funktion ist problematisch. Und weil ich gerade die AccelStepper Doku offen habe:


Calling setAcceleration() is expensive, since it requires a square root to be calculated.

Hier wird darauf hingewiesen, daß schon das Berechnen der Quadratwurzel zeitlich ein Problem ist. Das wird man zwar nicht oft machen, so daß es einem menschlichen Beobachter nicht auffällt, für die Stepper stellt aber schon die einmalige Benutzung ein Problem dar. Es gibt natürlich handgefeilte Systeme, die mit diesen Bedingungen leben können wie 3D Drucker oder CNC-Systeme mit grbl. Da kann man dann nachträglich kaum noch etwas hinzufügen.

Nun kann man natürlich sagen, für deinen Outdoor muß alles nicht so schnell gehen. Das ist sicher richtig, verschleiert aber das grundsätzliche Problem. Wenn jetzt zu den Steppern, US-Sensoren noch weitere wie Lidar und GPS etc. hinzukommen und weitere Aufgaben wie die Kommunikation mit z.B. einer Fernbedienung, Telemetrie usw. zu erledigen sind, ist es wieder da.

Die Lösung, die üblich ist und für die Unterstützung in die µC eingebaut sind heißt Interrupt. Alle anderen Konzepte, wie z.B. bei den Transputern haben sich nicht durchgesetzt. Die "alten" Prozessoren wie Z80 oder 8088 brauchten noch einen externen Baustein zur Unterstützung, den fand man auf fast jedem Prozessorboard.


habe auch versucht mich in die problematik in verschiedenen tutorials und anderen webseiten einzulesen, bin dabei aber nicht wirklich weitergekommen :-( ...
Es wäre vielleicht ein versuch wert, wenn jemand mit mir zusammen versuchen würde, die problematik schritt für schritt durchzuarbeiten, an codebeispielen, fragen und erklärungen...
Insofern sollte mein letzte äusserung hier im thread keine rigorose ablehnung in richtung ISR sein. Den thread würde das sicher bereichern...

Die Idee finde ich gut. Nur kann ich mit Codebeispielen schlecht dienen. Ich habe keine AVR und keine Arduinos sonder PIC, vorzugsweise PIC24 und programmiere die in C. Das Konzept "Interrupt" ist zwar auf allen gleich, aber in C kommt es nicht vor. Um es trotzdem aus C nutzen zu können, hat da jeder Compiler seine Sonderlocken gestrikt. Die erledigen zwar alle das Gleiche, aber mit unterschiedlichen Formulierungen. So kann ich also keine fehlerfreien Beispiele für einen Arduino liefern, da ich sie nicht testen kann. Das betrifft aber eigentlich nur zwei-drei Zeilen am Anfang des Handlers. Im übrigen kann ich aber meinen Beitrag zum Einsatz von Interrupten liefern. Es ist am Ende nicht wirklich kompliziert.

MfG Klebwax

inka
20.04.2020, 15:15
ich habe mir die ideen und vorschläge angeschaut und versucht sie nachzuvollziehen. Das ergebnis sieht so aus:


hinzu:
#include <TimerOne.h>

im setup hinzu:
Timer1.initialize(4000);
Timer1.attachInterrupt(stepper_isr);

in loop entfällt:
stepper_VL.run();
stepper_HL.run();
stepper_VR.run();
stepper_HR.run();

isr funktion hinzu:
void stepper_isr(void)
{
stepper_VL.run();
stepper_HL.run();
stepper_VR.run();
stepper_HR.run();
}

und es funktioniert :-) meine furcht vor den ISR's war wohl übertrieben :-) - natürlich habe ich den einfachsten weg gewählt, die idee mit der lib (danke Rabenauge) und die ausführlichen beschreibungen des geschehens bei der verwendung von der accelstepper lib (danke Klebwachs) haben mir sehr geholfen. Ich habe ganz sicher nicht die ganze tiefe der ISR-problematik damit erfasst, nur ein bischen an der oberfläche gekratzt, für den moment ist mein problem des stotternden antriebs gelöst und ich kann mich anderen kleinigkeiten wieder zuwenden...

danke nochmals :-)

inka
28.04.2020, 17:56
hallo,
letzter stand heute - trockenlauf (https://youtu.be/I6N06ia9nlA) für die horizontale und vertikale hindernis-erkennung - die verfizierung in "echt" folgt in den nächsten tagen...

inka
11.05.2020, 12:03
hab mir anregungen geholt beim Rabenauge und hier (https://howtomechatronics.com/projects/arduino-mecanum-wheels-robot/)

heute habe ich die 5 PCB's bekommen, für insgesamt 12€, das teuerste war das porto, 10€
35000

also ich mache weiter - ein grösserer umbau steht an...
möchte jemand eine von den 4 übrigen platinen? (gegen porto)...

inka
12.05.2020, 16:12
so sieht die bestückte platine aus (noch ohne steppertreiber)
35001

das hier alle unbestückten pinns det atmega ausgeführt sind ist super, bei der RAMPS platine musste ich die mühsam anlöten. War ja auch nicht für meine anwendung gedacht, sondern für einen 3D drucker, so gesehen war das auch ok...

Rabenauge
13.05.2020, 12:14
Wenn du das Ding fertig hast, erzähl gerne mal etwas darüber.
So für "überübernächstes..." schwirrt mir da eine Sache im Kopf rum, die auch zwei bis drei solche Stepper bekommen sollte.
Von daher wären Erfahrungen mit dem Ding, zum nachschlagen (momentan komm ich zu überhaupt nix, ausser ein bisschen an nem RC-Car basteln) allemal interessant.

Sisor
13.05.2020, 17:38
Wenn du das Ding fertig hast, erzähl gerne mal etwas darüber.
So für "überübernächstes..." schwirrt mir da eine Sache im Kopf rum, die auch zwei bis drei solche Stepper bekommen sollte.
Von daher wären Erfahrungen mit dem Ding, zum nachschlagen (momentan komm ich zu überhaupt nix, ausser ein bisschen an nem RC-Car basteln) allemal interessant.
+1 :pray::pray::pray:

inka
13.05.2020, 18:08
Wenn du das Ding fertig hast, erzähl gerne mal etwas darüber.
fertig ist das ding noch 100jahre nicht, aber ein bischen was kann ich schon sagen:

35002 35003
zum vergleich die RAMPS platine und die neue, von How_to_mechatronics.
- den spannungswandler links von der platine braucht man nicht, da nutze ich nur noch die stützpunkte, der fliegt also demnächst auch raus
- die platine hat genügend 12 und 5V anschlusspins, auch für zusätzlich hardware
- der anschluss für das HC05 modul ist etwas zu eng an die steppertreiber platziert, aber er ist immerhin da und funktioniert
- die platine ist jetzt mit den 8825 steppertreiberrn bestückt. das bedeutet, dass die stepper besser ziehen, brauchen aber auch mehr strom
- an der gemeinsammen zuleitung der 12V zu platine sieht man schon, dass dickere leitungen notwendig werden

Frage - gibt es sowas (dickere vorgefertigte kabel) für die NEMA17?

- die stepper laufen leiser, die software muss ich aber noch an meine bedürfnisse anpassen. Auch die app am smartphone
- es gibt auch noch software die mit dem NRF 24L01 modul (es gibt auch dafür einen steckplatz) läuft, konnte ich noch nicht ausprobieren...

Rabenauge
14.05.2020, 08:06
Die DRV8825 hab ich im Drucker- bin sehr zufrieden damit.
Es gibt zwar inzwischen deutlich leisere, aber die ziehn auch nicht so viel...

Warum brauchst du dickere Kabel?
Haben die 3D-Drucker auch nicht...
Wichtig ist, dass die Stromzufuhr (zur Platine) ausreichend dimensioniert ist.

Klebwax
14.05.2020, 09:17
- die platine ist jetzt mit den 8825 steppertreiberrn bestückt. das bedeutet, dass die stepper besser ziehen, brauchen aber auch mehr strom


Das verstehe ich nicht ganz. Sowohl der A4988 als auch der DRV8825 regelt den Strom für den Stepper. Mit dem Poti auf dem Modul wird der Strom passend zum Motor eingestellt. Warum sollte also der Strom mit dem 8825 anders sein als mit dem 4988?

MfG Klebwax

inka
14.05.2020, 13:30
Das verstehe ich nicht ganz. Sowohl der A4988 als auch der DRV8825 regelt den Strom für den Stepper. Mit dem Poti auf dem Modul wird der Strom passend zum Motor eingestellt. Warum sollte also der Strom mit dem 8825 anders sein als mit dem 4988?

MfG Klebwax

so ganz verstehe ich es auch nicht. Schon mit den 4988 wurden die zuleitungen zu der platine (einfache jumperwire, querschnitt 0,05mm²) zu warm (und weich), wurden dann verdoppelt, dann ging es.
Mit den 8825 waren auch die doppelten jumperwire zu wenig und ich habe dann litze aus einem 220V kabel genommen (querschnitt 0.8mm²), das war dann ok.

Die zuleitungen zu den motoren (original zu den steppern gehörig - querschnitt 0,13mm²) waren mit den 4988 ok, mit den 8825 wurden sie auch (meiner meinung nach) zu warm....

In allen fällen waren die potis auf den treibern so eingestellt, dass sich die stepper etwas mehr als "gerade so" drehten... Es ist wohl aber auch so, dass die stepper mit den originalzuleitungen in einem 3d-drucker eine ganz andere last (nämlich fast keine) zu bewegen haben, das sind hier immerhin fast 3kg...

Klebwax
14.05.2020, 19:51
Nun, Drähte mit 0,0xmm² sind höchstens als Signalleitungen zu gebrauchen. Jede Versorgung sollte stärker sein, sonst hat man einen merkbaren Spannungsabfall. Ich benutze 0,22 Schaltlitze (hab gerade noch mal auf der Rolle nachgelesen) oder für Motore 0,5 oder mehr, so 2*0,75 Lautsprecherlitze. Wenn es so an die 5-10A kommt, hab ich auch 2*2,5 oder 2*4,0 aus der Car-Hifi Ecke. Auch die Leitungen von alten Computernetzteilen benutze ich gerne.



In allen fällen waren die potis auf den treibern so eingestellt, dass sich die stepper etwas mehr als "gerade so" drehten... Es ist wohl aber auch so, dass die stepper mit den originalzuleitungen in einem 3d-drucker eine ganz andere last (nämlich fast keine) zu bewegen haben, das sind hier immerhin fast 3kg...

Das reicht als Einstellung nicht ganz. Wenn deine Betriebsspannung im Vergleich zur Nennspannung des Motors zu niedrig ist, kann die Stromregelung nicht arbeiten. Es fließt immer der Maximalstrom durch die Spulen, den der Motor bei dieser Betriebsspannung und der gegebenen Drehzahl so ziehen kann. Wenn man den Strom nicht auf dem Scope ansehen kann und dabei den Chopper bemerkt, gibt es noch eine andere Möglichkeit das zu überprüfen. Erhöht man die Betriebsspannung, darf sich das Verhalten des Motors nicht verändern. Dann regelt der Chopper und hält den Spulenstrom konstant. Gleichzeitig sollte der Betriebsstrom sinken, da die Leistung konstant bleibt. So als Anhaltswert: die Betriebsspannung sollte so das zwei, eher drei bis fünffache der Motornennspannung betragen. Dann hat der Chopper Luft zum Regeln und man erreicht ein hohes Drehmoment.

MfG Klebwax

inka
15.05.2020, 14:22
Das reicht als Einstellung nicht ganz. Wenn deine Betriebsspannung im Vergleich zur Nennspannung des Motors zu niedrig ist, kann die Stromregelung nicht arbeiten. Es fließt immer der Maximalstrom durch die Spulen, den der Motor bei dieser Betriebsspannung und der gegebenen Drehzahl so ziehen kann. Wenn man den Strom nicht auf dem Scope ansehen kann und dabei den Chopper bemerkt, gibt es noch eine andere Möglichkeit das zu überprüfen. Erhöht man die Betriebsspannung, darf sich das Verhalten des Motors nicht verändern. Dann regelt der Chopper und hält den Spulenstrom konstant. Gleichzeitig sollte der Betriebsstrom sinken, da die Leistung konstant bleibt. So als Anhaltswert: die Betriebsspannung sollte so das zwei, eher drei bis fünffache der Motornennspannung betragen. Dann hat der Chopper Luft zum Regeln und man erreicht ein hohes Drehmoment.
ich hab jetzt mal die daten zum NEMA 17 hier:

----------------------------------------------
Schrittwinkel 1,8°
Schritte pro Umdrehung 200
Nennsstrom 1,7A/Phase
Nennspannung 3,7V
Haltemoment 4000g*cm
Rastmoment 220g*cm
Rotorträgheit 54g*cm2
Spulenwiderstand 2,0 Ohm/Phase
Gewicht 240g
Motorlänge (L Max) 40mm
Wellendurchmesser 5mm
--------------------------------------------
Der akkuspannung (also die betriebsspannung) kann je nach ladung zwischen 9 und 12V schwanken, würde heissen (schlimmstenfalls 3,7Vx2,4), die minimalen voraussetzung für das funktionieren der stromregler wäre also gegeben....
Das mit der erhöhung der betriebsspannung - wie soll ich das mit nur einem akku machen? Step-up zwischenschalten?

Ich glaub ich hab schon erwähnt, dass ich einen HM203 im regal stehen hab, net anzusehen, viel gemacht hab ich damit noch nicht. Wie müsste ich den strom damit an dem stepper messen?


EDIT: auf der platine für die steppertreiber ist ein spannungsteiler vorgesehen mit dem man die akkuspannung messen kann, die man dann entweder per seriellen monitor oder auf das LCD display ausgeben kann. Könnte man etwas ähnliches für die strommessung machen und die werte auch so ausgeben?

Klebwax
15.05.2020, 17:53
Der akkuspannung (also die betriebsspannung) kann je nach ladung zwischen 9 und 12V schwanken, würde heissen (schlimmstenfalls 3,7Vx2,4), die minimalen voraussetzung für das funktionieren der stromregler wäre also gegeben....
Das mit der erhöhung der betriebsspannung - wie soll ich das mit nur einem akku machen? Step-up zwischenschalten?

Auf keinen Fall. Das fängt mit dem Wirkungsgrad an. Wenn du Glück hast, bekommst zu bei einem Step-Up im praktischen Betrieb 70-80% Wirkungsgrad hin. Da kannst du auch gleich ne Akkuzelle mehr nehmen, kommt auf das Gleiche raus. Außerdem sind Regler für Motoren problematisch, da die Ströme stark variieren und sich beim Schiebebetrieb sogar umkehren können. Aber so schlecht sieht das bei dir nicht aus, ich würds so lassen.



Ich glaub ich hab schon erwähnt, dass ich einen HM203 im regal stehen hab, net anzusehen, viel gemacht hab ich damit noch nicht. Wie müsste ich den strom damit an dem stepper messen?

Kann ich nicht wirklich nachvollziehen, das Scope ist das erste was ich einschalte, wenn ich an einer Schaltung arbeite, meisst noch vor dem Lötkolben. Mindestens mal ein Blick auf die Versorgung und auch alle Signale ansehen. In fast jedem Datenblatt findet man Timingdiagramme, die muß man in der eigenen Schaltung nachvollziehen können.

Strom kann man mit einem Scope nicht messen, nur Spannung. Man muß den Strom durch einen (Shunt)Widerstand leiten und die Spannung über ihm messen. Dies macht der DRV auch so, die entsprechenden Widerstände sind also da.

35016

Im Schaltbild von Pololu sind es R2 und R3. Die gehen von ISENA/B nach Masse und darüber solltest du einen dem Strom proportionale Spannung messen können.

Du könntest auch so 1Ω in den Anschluß einer der Spulen einschleifen und daran die Spannung messen. Aber Vorsicht, der Masseclip des Scopes ist geerdet, deine Schaltung muß also Massefrei sein. Ein Anschluß an einen Rechner darf es nicht geben. Ich hab beides nicht gemacht, daher "sollte". Ich habe eine Stromzange, die klemme ich einfach um ein Kabel und kann galvanisch getrennt Strom messen.

Hätte ich die nicht, würde ich an die Shunts auf dem Modul gehen. Ein Stück Schaltdraht an den Widerstand löten und daran die Tastspitze. Das Ganze dann am Labornetzteil mit unterschiedlichen Betriebsspannungen und unterschiedlichen Stepraten. Dabei den Motor mit der Hand abbremsen, um zu sehen ob er Schritte verliert. Da kann man auch fühlen, wie sich das auf die Temperatur von Treiber, Motor und Kabel auswirkt. Die meissten Steppern, die ich so habe, sind irgendwo ausgebaut und ich habe keine Daten. Aber mit ein wenig experimentieren hab ich schnell rausgefunden, mit welcher Mindestspannung und welchem Maximalstrom man sie betreiben kann.

MfG Klebwax

inka
16.05.2020, 15:18
ich hab jetzt noch etwas zur einstellung der stromsteuerung (https://www.3dware.ch/Blog/Nema-Schrittmotor-Schrittstreiber-einstellen-De.htm) gefunden. danach wird die spannung zwischen masse und dem rotor des steuerpoti gemessen und am poti nach dieser formel berechnet und eingestellt:

Bei DRV8825
einzustellende spannung = nennstrom für zwei phasen x 0.7 / 2 V = (2x1.7) x 0.7 /2V = 3.4x0,7/2 = 1,19V

so habe ich es jetzt gemacht, scheint ok zu sein, mal sehen wie warm die stepper und die zuleitungen werden wenn es eine weile läuft...

EDIT: bei der einstellung wird das ganze nur über den USB anschluss des arduino versorgt, alles andere ist abgeklemmt...

inka
26.05.2020, 17:06
zwei dinge gibts es zu berichten:

- die ENB pins sind bei der platine nicht herausgeführt, warum auch immer, das habe ich nachgeholt, will ja schliesslich auch mal die stepper abschalten können

-zweitens:

Die primäre Funktion der Ratsche ist, daß man keine Crimpung mit zu geringem Druck machen kann. Man muß immer bis zu Ende durchdrücken, bevor man die Zange wieder öffnen kann. Und wieweit man durchdrücken muß, kann man manchmal einstellen. Das ist bei "Originalzangen" eher selten, da gibt es Vorgaben für den Pressdruck. Die Crimpung muß am Ende gasdicht sein.
ich habe die gasdichtheit für meine - amateurhafte - basteleien in frage gestellt. Die damit einhergehende qualität der verbindung ist aber auch für den amateurbereich unabdingbar, zumindest immer dann, wenn grössere ströme fliessen. Sonst sieht es so aus:

35038

bin also reumütig zum löten zurückgekehrt, bei der anzahl der verbindungen die ich insgesamt machen muss, krieg ich die erfahrung fürs anständige crimpen nicht zusammen :-(

Klebwax
26.05.2020, 20:17
- die ENB pins sind bei der platine nicht herausgeführt, warum auch immer, das habe ich nachgeholt, will ja schliesslich auch mal die stepper abschalten können

Kann ich nicht wirklich nachvollziehen. Wenn du die fertigen Module nimmst, ob DRV oder den A4988, ist Enable auf Pin 8. Hier ist ein Link, unten ist dort der Schaltplan (https://www.pololu.com/product/2133). Und das funktioniert bei mir auch. Oder hast du was eigenes?




ich habe die gasdichtheit für meine - amateurhafte - basteleien in frage gestellt. Die damit einhergehende qualität der verbindung ist aber auch für den amateurbereich unabdingbar, zumindest immer dann, wenn grössere ströme fliessen.

Das kann aber auch daran liegen, daß diese Pfostenverbinder für größere Ströme nicht gebaut sind. Bei mir rangieren die, ohne jetzt extra nachzulesen, im Bereich bis max. 1A, kurzzeitig auch mal drüber. Eigentlich sind sie für Datenleitungen. Wenn ich über Pfostenstecker mehr fließen lassen muß, z.B. weil ich Flachkabel verwende, dann schalte ich zwei oder mehr Kontakte parallel. Das Kabel wird dann etwas breiter, der Stecker braucht mehr Kontakte, aber ich habe nur ein Kabel. Für die Versorgung von Antriebsmotoren, wenn es nicht gerade ein Spielzeug oder ein PC-Lüfter ist, würde ich sie nie in Betracht ziehen. Ich verwende da gerne 6,3 mm Flachstecker wie im Auto. Die Steckerfahnen kosten fast nichts und lassen sich gut im eigen Layout unterbringen. Die Steckhülsen gibt es in tausend Varianten für ziemlich jeden Kabelquerschnitt. Dazu gibt es schon lange ganz billige Crimpzangen. Ich hab auch noch eine Sammlung von Kabeln aus Haushaltsgeräten wie Waschmaschinen mit einem oder zwei fertigen Kontakten. Die haben günstige Querschnitte und man spart sich die eine oder andere Crimpung. Wenn alles nicht passt, nutze ich Schraubklemmen.

35039

MfG Klebwax

Was mir gerade noch so einfällt:

Mit den 8825 waren auch die doppelten jumperwire zu wenig und ich habe dann litze aus einem 220V kabel genommen (querschnitt 0.8mm²), das war dann ok.

Wie hast du denn die Litzen überhaupt in die kleinen Kontakte bekommen? Das Kabel passt mit seiner Isolierung doch nicht wirklich in den Stecker. 0,8² ist dafür viel zu dick.

inka
27.05.2020, 11:25
Kann ich nicht wirklich nachvollziehen. Wenn du die fertigen Module nimmst, ob DRV oder den A4988, ist Enable auf Pin 8. Hier ist ein Link, unten ist dort der Schaltplan (https://www.pololu.com/product/2133). Und das funktioniert bei mir auch. Oder hast du was eigenes?
das sind normale DRV8825, die haben natürlich alle pins, allerdings werden die ENB pins auf der aufnahmeplatine nicht zum controler weitergeleitet, der von "HowToMechatronics" , der die platine entworfen hat, hat sich wahrscheinlich gedacht, dass er sie nicht braucht (sind wohl von haus aus immer auf HIGH)



Das kann aber auch daran liegen, daß diese Pfostenverbinder für größere Ströme nicht gebaut sind. Bei mir rangieren die, ohne jetzt extra nachzulesen, im Bereich bis max. 1A, kurzzeitig auch mal drüber. Eigentlich sind sie für Datenleitungen. die flachbandkabel zwischen den NEMA17 und den 8825 sind wohl auch keine "starkstromkabel" und es sind auch die dupont stifte (oder beim stepper sogar noch dünner). Beim 3d-drucker reicht das wohl auch...




Wie hast du denn die Litzen überhaupt in die kleinen Kontakte bekommen? Das Kabel passt mit seiner Isolierung doch nicht wirklich in den Stecker. 0,8² ist dafür viel zu dick. so:
35040 35041

inka
30.05.2020, 13:20
das habe ich auch nicht vor dem kauf der leiterplatte bedacht: die microstep pins waren auch nicht herausgeführt, liess sich aber beheben:
35049

so kann ich die verschiedenen microstep einstellungen per software - ohne gross jumper setzen die müssen - testen...

auch die neuen kühlkörper sind inzwischen da:
35050

inka
07.06.2020, 18:04
die installation von raspbian stretch auf dem zero hat funktioniert, auch die installation der arduino IDE (version 2:1.0.5) klappte. Der code lässt sich per wifi, also vom stationärem PC aus auf dem zero kompilieren und auch auf den outdoor über ein usb kabel hochladen :-)
35058
Eine bearbeitung über die gleiche verbindungsstrecke halte ich für schwierig, wenn nicht unmöglich, die auflösung ist wirklich gering und das handling der IDE über tastatur und maus am PC lässt einige wünsche unerfüllt, das war aber auch nicht das ziel...
Die geänderten dateien können auf einem anderen weg (wifi) zum zero übertragen werden und dann auf den mega geflasht werden...

35059
hier noch einmal mein universal-test-board mit dem zero...

Eine frage beschäftigt mich noch: Es wird evtl. mehr als nur den mega an microcontrolern auf dem outdoor geben. Ich kann dann keine USB kabel zum falshen umstecken, dann wäre ja auch der zero überflüssig :-)

wie mache ich das mit dem flashen auf jeweils einen anderen empfänger?
- die im USB kabel zuständigen leitungen sind ja nur zwei...
- weil die microcontroler ja auch auf einem anderem weg mit strom versorgt werden...
- eine gemeinsame leitung und die andere über unterschiedliche pins eines der microcontroler "schaltbar"?

Rabenauge
07.06.2020, 20:03
Wie machst du das mit dem "fern-Compilieren"?
Greifst du über VNC auf den Bildschirm des Raspi zu?
Dann lässt sich das Problem mit der Auflösung ganz einfach beheben, imdem du dem Raspi nen grösseren Bildschirm einstellst.
So hab ich das bei den Zeros auch gemacht...funktioniert einwandfrei.

Das andere Problem: evtl. nen USB-Verteiler benutzen?
Dann müsstest du doch in der IDE auswählen können, welcher USB-Port "bearbeitet" werden soll.

inka
08.06.2020, 16:55
Wie machst du das mit dem "fern-Compilieren"?
Greifst du über VNC auf den Bildschirm des Raspi zu?
Dann lässt sich das Problem mit der Auflösung ganz einfach beheben, imdem du dem Raspi nen grösseren Bildschirm einstellst.
So hab ich das bei den Zeros auch gemacht...funktioniert einwandfrei.
ja (VNC) und ja, die auflösung 800x600 reicht schon mal zum einigermassen arbeiten :-)


Das andere Problem: evtl. nen USB-Verteiler benutzen?
Dann müsstest du doch in der IDE auswählen können, welcher USB-Port "bearbeitet" werden soll.
das geht leider nicht. Ich habe einen USB verteiler an die USB microbuchse angeschlossen (also NICHT an die wo noch PWR mit dransteht) und es erscheint auch bei mehreren angeschlossenen controlern nur die ttyUSB0, also die zuerst angechlossene schnittstelle...

Jetzt läuft sogar die version 1.8.12 auf dem zero, also die gleiche, wie ich sie sonst auch verwende, allerdings - wie schon erwartet :-( - mit hindernissen. Sie startet immer nur einmal. Erst wenn ich den bei der initialisierung erzeugten ordner ".arduino15" lösche, startet sie wieder, allerdings inklusive der gesamten initialisierung, die einstellungen sind also weg :-(

ganz matt kann ich mich noch daran erinnern, dass bei der installation der hinweis darauf kam, dass irgendein symlink nicht hat angelegt werden können - kann das die ursache sein?

Rabenauge
08.06.2020, 22:41
Das klingt nach nen Link-Problem, ja.
Hast du die Installation mit Root-Rechten ausgeführt?

Das mit dem Hub muss eigentlich funktionieren-es gibt sogar extra welche für den Zero, siehe hier z.B.: https://www.raspberry-pi-geek.de/ausgaben/rpg/2017/04/aktiver-usb-hub-fuer-den-raspi-zero/
Aber möglich wärs, dass die Geräte beim erstenmal nicht automatisch erkannt werden.

Im übrigen kann der Pi auch noch grössere Bildschirme.

inka
09.06.2020, 16:48
Das klingt nach nen Link-Problem, ja.
Hast du die Installation mit Root-Rechten ausgeführt?
ja, auch


pi:

Adding desktop shortcut, menu item and file associations for Arduino IDE...
rm: das Entfernen von '/usr/local/bin/arduino' ist nicht möglich: Keine Berechtigung
Removing symlink failed. Hope that's OK. If not then rerun as root with sudo.

rm: das Entfernen von '/usr/local/bin/arduino' ist nicht möglich: Keine Berechtigung
Removing symlink failed. Hope that's OK. If not then rerun as root with sudo.

ln: die symbolische Verknüpfung '/usr/local/bin/arduino' konnte nicht angelegt werden: Die Datei existiert bereits
Adding symlink failed. Hope that's OK. If not then rerun as root with sudo.
done!
----------------------
sudo:

pi@raspberrypi:~ $ cd Arduino
pi@raspberrypi:~/Arduino $ cd IDE
pi@raspberrypi:~/Arduino/IDE $ cd arduino-1.8.12
pi@raspberrypi:~/Arduino/IDE/arduino-1.8.12 $ sudo sh install.sh
Adding desktop shortcut, menu item and file associations for Arduino IDE...

touch: '/root/.local/share/applications/mimeapps.list' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
/usr/bin/xdg-mime: 803: /usr/bin/xdg-mime: cannot create /root/.local/share/applications/mimeapps.list.new: Directory nonexistent

done!
----------------------




Das mit dem Hub muss eigentlich funktionieren-es gibt sogar extra welche für den Zero, siehe hier z.B.: https://www.raspberry-pi-geek.de/ausgaben/rpg/2017/04/aktiver-usb-hub-fuer-den-raspi-zero/
Aber möglich wärs, dass die Geräte beim erstenmal nicht automatisch erkannt werden. das lag am defekten controler :-(


Im übrigen kann der Pi auch noch grössere Bildschirme. ja, aber dann verdeckt das fenster alles andere... :-(

Rabenauge
09.06.2020, 20:48
*ächz
Zwei Stunden stochern im Nebel, aber:Ich habs geschafft.

Auf einem meiner Zeros läuft nun die Arduino 1.8.9.

Was hab ich gemacht:
Zuerst mal in der Konsole den Dateimanager mit Root-Rechten gestartet:


sudo pcmanfm

Dann einen Sketchordner in /home/pi angelegt, meiner heisst Sketchbuch.
Nun hab ich mir in der Konsole root-rechte besorgt:

sudo su

Und dann:

cd ~
wget https://downloads.arduino.cc/arduino-1.8.9-linuxarm.tar.xz
tar -xvf arduino-1.8.9-linuxarm.tar.xz
cd arduino-1.8.9
sudo ./install.sh

Die Fehlermeldungen kommen trotzdem, aber das ist egal (das scheint eher unwichtiges Zeug zu sein, da wird von Sachen gefaselt, die nich gelöscht werden können, weil sie gar nicht existieren-wen juckts).
Ggf. musst du noch die Verknüpfung bearbeiten, indem du sie auf deine arduino in /home/pi/arduino-1.8.9 zeigen lässt.

Bei mir funktionierts, hab auch probehalber mal nen Uno bespielt- läuft.

inka
10.06.2020, 13:53
ok, Rabenauge, danke für deine mühe :-)

die IDE startet aber nur unter root als user, oder?

EDIT: es ist jetzt so, dass ich das raspberry-menü um den eintrag "sudo arduino" ergänzen kann. Dann startet die 1.8.9, die nach deinem "muster" installiert wurde. So weit so gut, allerdings kann diese version dann nicht auf die seriellen schnittstellen zugreifen, die der arme user "pi" da einstöpselt :-)

Rabenauge
10.06.2020, 18:15
Nein, meine startet ganz normal- eben noch mal probiert (und der Pi war seit der Bastelei gestern stromlos, der hat sich also auch nix gemerkt).
Probehalber eben noch mal den Uno angestöpselt und geflasht...geht einwandfrei.

Kontrollier mal folgendes: deine IDE liegt in /home/pi(pi nur, wenn du den Standardnamen nicht geändert hast, ansosten den), und auch wichtig:
Der Eintrag der .desktop-Datei.
Ich häng dir nen Screenshot an, wie der bei mir aussieht.
Da siehst du auch: da wird nix mit sudo aufgerufen.

Ach, was ich gestern vergessen hatte: du musst natürlich in der IDE unter Einstellungen dann auch den vorher angelegten Sketchbuch-Ordner (der sollte auch unter /home/pi liegen) noch einstellen.

inka
11.06.2020, 12:13
cd ~
wget https://downloads.arduino.cc/arduino-1.8.9-linuxarm.tar.xz
tar -xvf arduino-1.8.9-linuxarm.tar.xz
cd arduino-1.8.9
sudo ./install.sh
Bei mir funktionierts, hab auch probehalber mal nen Uno bespielt- läuft.

bei mir - nach der anpassung des sketchbook pfades - auch. Ich habe bei der letzten installation das cd ~ am anfang weggelassen, vermutlich war das des guten zu viel - der zero hat dann auch im root verzeichnis installiert...
aber jetzt läufts, nochmals danke...

Rabenauge
11.06.2020, 20:46
Super, wenns geklappt hat.
Nun besorgst du dir noch VNC fürs Tablet und dann kannst du dich unten an die Elbe setzen, und mal schnell Firmware für deinen Bot schreiben, und gleich testen, hehe.
Das war bei mir übrigens der Hauptgrund, das mal zu machen (gemacht hatte ich es jetzt wegen deinen Problemen, aber irgendwann hätt ich das sowieso, mein Zero soll ja im XP2 landen), ich hab einfach keine Lust, draussen dauernd den Laptop mitzuschleppen.
Oft muss man ja nur irgendwelche Parameter anpassen, dann geht das mit dem workflow ohne weiteres, wenn man ne gescheite Tastatur fürs Pad hat.
Und auch noch komplett kabellos.

inka
12.06.2020, 10:21
das kabellose hat mich schon immer gereizt. Das erste projekt war die induktive ladestation für den RP6 (das war schon vor fast 10 jahre), die habe ich dann für alle anderen - mit - verwendet...
VNC für android habe ich schon, allerdings auf dem smartphone, zugriff auf den zero ist möglich, allerdings ist die anzeige auf dem smartphone schon mickrig. Ich glaube da würde sich schon eine kombination aus VNC, webserver und smartphone/tablet besser machen. So wie auf den ESP32 z.b.
Wäre sowas auf dem zero möglich?

Rabenauge
12.06.2020, 10:45
Webserver?
Versteh ich nicht..wozu den?

Du meinst sowas, oder?
https://www.elektronik-kompendium.de/sites/raspberry-pi/2002171.htm

Stimmt natürlich: das Handy ist da eher unbrauchbar, aber mitm Tablet geht es eigentlich ganz gut.
Seitenlange Codes würd ich damit auch nicht tippen wollen, aber um mal irgendwelche Parameter zu ändern, oder ne vorher auf den Pi gelegte, andere Firmware-Version aufzuspielen, reichts.

inka
13.06.2020, 11:14
ich weiss selbst nicht wohin die reise gehen soll :-)
für die code-korrekturen bzw. ein leichtes kabelloses "nachsteuern" und neues flashen unterwegs reicht ja die VNC verbindung. Eine fernbedienung - so wie Du sie machst - reicht zum steuern im grunde genommen auch. Was ähnliches versuche ich über die anbindung des smartphones zu erreichen. Bei mir muss die FB nicht ganz so rutschfest in den händen sitzen und auch nicht so schnell sein...
Beides ist aber entweder zu kompliziert im handling, oder zu unflexibel, würdest Du mir da zustimmen?
Die technik ist eigentlich schon so weit, dass der bot (als vorstufe) auch geschriebene und gesendete sequenzen verstehen und ausführen können sollte, oder? So nach dem motto: "drehe um 275 grad nach rechts und sende alle 2 sekunden ein bild"...
Das tut der bot auch eigentlich schon jetzt, ich muss den satz aber unter dem code "1" verstecken und kann ihn "unterwegs" nicht beliebig ändern...
Und dann - als stufe zwei - das ganze als gesprochene befehle :-) Zukunftsmusik?

edit: hab noch vergessen auf deine Frage nach dem Grund für einen Webserver einzugehen. Im freien hab ich ja mein gewohntes homenetzwerk nicht, brauch dann also ein anderes, welches ich vom Smartphone oder Tablet anwählen kann. Internetzugriff habe und brauche ich dann nicht. Das geht ja nur mit einem Webserver, oder?

Rabenauge
16.06.2020, 07:51
Eine Smartphone-Steuerung hatte der XP1.
Da war ja ein NodeMCU drin.
Vernünftig steuern hatte damit allerdings nicht funktioniert- ich bin es einfach von meinen RC-Modellen anders gewohnt.
Das ist mit richtigen Sticks einfach ne ganz andere Welt...versuch mal, ein Hindernis, bei dem du präzise anfahren musst, mit ner Touchscreen-Steuerung zu überwinden....da hast du deinen Spass.

Du kannst doch den Pi als AP konfigurieren, draussen.
Was aber mühsam ist: ihn dazu zu bringen, daheim (wo er das WLAN erreichen kann), dann automatisch das zu benutzen, und nur in den AP-Mode zu gehn, wenn das WLAN nicht verfügbar ist.
Ich glaub, am sinnvollsten ist es da einfach nen Taster oder Schalter am Bot zu verbauen...der kann beim Start abgefragt werden.

inka
08.07.2020, 12:25
der neue akku ist da, hat (laut hersteller) 12V, 20.000mAh und kann 5A liefern...

Allerdings ist der neue akku grösser, past zwar noch rein, der EIN/AUS schalter ist aber so angebracht, dass er beim geschlossenem gehäuse nicht mehr von ausserhalb des fahrzeugs bedienbar ist. Da dieser schalter aber z.b. auch beim laden AN sein muss, ist es eigentlich kein problem, für das eigentliche EIN/AUS schalten des roboters ist ohnehin noch ein anderer kippschalter vorgesehen...
Wenn der integrierte akkuschalter an ist, leuchtet eine 3mm LED und - das vermute ich - ist auch die integrierte ladeelektronik bereits an. Frage an die fachleute:
Kann ich irgendwie messen wieviel die LED und die ladeelektronik im ruhezustand, also wenn weder geladen, noch gefahren wird, an strom verbraucht? Zugängflich sind zerstörungsfrei nur die beiden 5mm buchsen...

Moppi
08.07.2020, 14:25
Die kleinen SMD-LEDs verbauchen 4 bis 8mA, habe ich letztens mal beim DC/DC-Wandler ausprobiert (eine rote LED war dort mit ~4.5mA dabei). Was natürlich für Ruhezustand schon ganz ordentlich ist, in Betracht dessen, dass man selbst den Mikrokontroller in den Sleep-Mode versetzt, damit der möglichst nicht mA, sondern nur µA verbraucht.

MfG

inka
08.07.2020, 15:09
da mir keine bessere idee gekommen ist, führe ich jetzt an beiden ausgängen mit digitalen voltmetern (zwei stellen hinter'm komma) eine langzeitmessung der spannung durch. So 24 stunden lang. Mal sehen was dabei rauskommt...

Rabenauge
09.07.2020, 18:13
Was für ein Akku ist denn das?
Würde mich mal interessieren....

inka
09.07.2020, 18:32
https://www.ebay.de/itm/20000mAh-DC12-6V-5A-Akku-Batterien-Wiederaufladbare-Lithium-mit-Stecker/202983632897?hash=item2f42c47001:g:92UAAOSw6wdesnH l

Rabenauge
10.07.2020, 09:48
Die Beschreibung hat wohl mal wieder Pippi Langstrumpf verfasst.
Laut Rezension hat der nich mal annähernd die 20 000mAh...und ist ein ganz normaler LiPo.
Was mich aber wundert ist, der Schreiber der Rezension sagt, der liefert nich mal 5A- das schafft in so ner Grösse eigentlich jeder LiPo spielend.
Sei also vorsichtig mit dem Ding.

Zum Vergleich bei sowas bemühe ich gerne Stefans LipoShop- bei LiPo's hat nämlich die Grösse ein direktes Verhältnis zur Kapazität.
Von der Grösse deines Blocks her wärs möglich, dass der 20 000mAh hat- aber dann nicht bei 12V, sondern bei 3.7V.
Das machen die Chinesen gerne: die addieren einfach mal die Zellen-Kapazitäten, und schreiben die dann drauf.
Du hast dann also ungefähr ein Drittel...was von der Grösse her hinkommen könnte.
Hoffentlich ist da wenigstens ein Balancer eingebaut- das Ladegerät kann keinen haben, mit nem zweipoligen Anschluss.
Sicherheitshalber würde ich unbedingt die Spannung überwachen- nenLithium-Akku kann man genau _einmal_ zu tief entladen.
Steht denn was in der Beschreibung, ob der wenigstens irgendwie geschützt ist?

Wie gesagt: Vorsicht mit dem Ding!

inka
10.07.2020, 10:41
Was mich aber wundert ist, der Schreiber der Rezension sagt, der liefert nich mal 5A- das schafft in so ner Grösse eigentlich jeder LiPo spielend.
ich hatte einen anderen vorher, in der beschreibung stand 12V 2,4A, habe nicht drauf geachtet - die versorgung des fahrzeugs brach sofort nach dem einschalten zusammen, bei dem mit angegebenen 5A passiert es nicht.


Von der Grösse deines Blocks her wärs möglich, dass der 20 000mAh hat- aber dann nicht bei 12V, sondern bei 3.7V. 12V, 5A, die 20000mah, da muss sich erweisen wieviel das wirklich ist


Hoffentlich ist da wenigstens ein Balancer eingebaut- das Ladegerät kann keinen haben, mit nem zweipoligen Anschluss.
35159 das war bei dem mit 12V, 15000mah und 3A drin...


Sicherheitshalber würde ich unbedingt die Spannung überwachen- nenLithium-Akku kann man genau _einmal_ zu tief entladen.
Steht denn was in der Beschreibung, ob der wenigstens irgendwie geschützt ist?
35158

Moppi
10.07.2020, 11:36
@rabenauge

Auf dem Akkuaufkleber steht zwar "Polymer", scheint aber nach dem Ladegerät und dem Aufbau ein Li-Ion zu sein. Einen LiPo mit Schalter habe ich noch nicht gesehen.

Mich irritiert das Bild von Inka von dem 15000mAh-Akku:
35159
Eine Zelle hat dann 4V ? und 15000mAh? Oder sind a mehr als diese 3 drin gewesen?

MfG

inka
10.07.2020, 12:05
so wie es auf dem foto zu sehen ist...

EDIT:

Auf dem Akkuaufkleber steht zwar "Polymer", scheint aber nach dem Ladegerät und dem Aufbau ein Li-Ion zu sein. Einen LiPo mit Schalter habe ich noch nicht gesehen.
auf dem original aufkleber steht nichts mehr von polymer...
35160

Moppi
11.07.2020, 08:55
auf dem original aufkleber steht nichts mehr von polymer...


Dann ist es ja gut, auf dem Bild vom eBay-Link steht es so.

Ich würde jetzt untersuchen, ob der Akku wirklich voll mit Zellen ist. Das müsste man beim Anheben etwa bemerken, ob eine Seite leichter ist oder schwerer. Gegen das Licht oder mit einer starken Lampe dahinter wird man bestimmt nicht durchgucken können. Ich will aber nicht noch mal damit anfangen, was mit dem Akku sein könnte.


führe ich jetzt an beiden ausgängen mit digitalen voltmetern (zwei stellen hinter'm komma) eine langzeitmessung der spannung durch

Wie sieht es damit aus jetzt? Bist Du schlauer?

MfG

inka
11.07.2020, 09:15
führe ich jetzt an beiden ausgängen mit digitalen voltmetern (zwei stellen hinter'm komma) eine langzeitmessung der spannung durch

Wie sieht es damit aus jetzt? Bist Du schlauer?


jain...

https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSPimQcJqwejHA371G7SHONjm0U5YX XxG6PTg&usqp=CAU

solche voltmeter hatte ich drangeklemmt, an de output- und lade- ausgang. Bei dauernd messenden voltmetern war der spannungsabfall ca. 0,35V in 24 stunden, bei einer messung am anfang und nach 24h waren es ca. 0,15V. Die volmeter ziehen einen strom von 12mA. Im regelfall wäre es also ein spannungsverlust von 0,15V in 24h, rein gefühlsmässig würde ich sagen damit kann ich leben. Das fahrzeug bekommt eine dauer-solarzellen-ladung, die müsste weitaus mehr liefern als zum ausgleichen notwendig wäre...
Und eine spannungsüberwachung kommt ohnehin auch hin...

inka
12.07.2020, 13:45
nächstes thema - einbau und verwendung des zero-pi:
35161
platzmässig (hier erstmal nur "reingelegt") passt es und auch die funktion ist ok. Installiert ist raspbian stretch, die arduino IDE läuft ganz normal (version 1.8.12) und die files lassen sich compilieren und auch flashen (danke noch einmal rabenauge!). Dauert natürlich etwas länger, editieren auf dem smartphone geht aber nicht wirklich...

Der USB adapter
35162
sollte die möglichkeit offenhalten über eine direkte USB verbindung von aussen (der winkelstecker oben) und über den zero zu flashen. Bei beiden angeschlossenen computern (also der PC und der zero) geht das nicht, die IDE (weder auf dem PC noch auf dem zero) findet den USB-port nicht. Würde bedeuten, dass ich eine der datenverbindungen und die Vcc zwischen dem mega und dem zero schaltbar machen müsste...

Das brachte mich auf die idee das zu erweitern, alo zwei ausrüstungsalternativen über die smartphone FB schaltbar zu machen
- outdoor (zero, gyro, US-sensoren, ....)
- dock (stepper, mega 2560, ....)
ich würde dann eine 5V steckleiste, über einen extra steup-up 12V/5V direkt an den akku angeschlossen (also nicht über den 5V teil an der steppertreiber steuerung) einbauen. Schaltbar über die smartphone app und ein 5V/2 kanal relais. Das relais muss alerdimngs nur 12V schalten können und eine überschaubare leistung. Frage ist - muss es ein relais sein? Andererseits möcht ich da nicht mit transistoren und ähnlichem anfangen...
Aber ideen sind willkommen :-)

inka
02.08.2020, 14:06
den einbau des zero muss ich etwas zurückstellen :-(

habe nämlich wieder einmal - eigentlich war das von anfang an DIE schwachstelle - durch umbauarbeiten an der spannungsversorgung die vier steppersticks offensichtlich gegrillt...

möchte nun für die weitere entwicklung auf DC-getriebemotoren umsteigen, diese kombination

- treiber: beispiel (https://www.ebay.de/i/183741052718?chn=ps&norover=1&mkevt=1&mkrid=707-134425-41852-0&mkcid=2&itemid=183741052718&targetid=896427593016&device=c&mktype=pla&googleloc=9068360&poi=&campaignid=10203814986&mkgroupid=101937416117&rlsatarget=pla-896427593016&abcId=1145992&merchantid=114067759&gclid=Cj0KCQjwyJn5BRDrARIsADZ9ykEFHiTUQUxxJW-sPyAtJq04E4qK3RCzBPyAtNiJZwFqeBVTOguxsXQaAuDAEALw_ wcB)

- DC-motoren beispiel (https://www.reichelt.de/getriebemotor-39-6-mm-75-1-12-v-dc-gm39-6-75-12v-p159644.html)

scheint mir erfolgversprechend zu sein....

das gehäuse / rahmen, die omni-move räder, die 12V stromversorgung soll bleiben, als mc möchte ich nach wie vor den atmega 2560 verwenden...


was haltet ihr von der neuen antriebskombination? Andere ideen?

morob
02.08.2020, 20:49
ich habe mir mal das datenblatt angesehen und kann daraus nicht feststellen, welcher strom beim blockieren auftritt

ansonsten arbeite ich bei einem roboter mit einer ähnlichen kombi

Manf
02.08.2020, 22:12
ich habe mir mal das datenblatt angesehen und kann daraus nicht feststellen, welcher strom beim blockieren auftritt

https://www.micromotors.eu/en/gear-motors/series-rh158/

Aus der Datentabelle für die RH158.12.75 kann man den Strom bei Nennlast entnehmen. 680 mA
Die Stromzunahme bei einer Drehzahländerung von Leerlauf 81 Upm auf 55 Upm bei Nennlast beträgt ca. 680-140mA = 540mA.
Bei einer Drehzahländerung von 81 auf 0 Upm käme man dann auf etwa 1,8A (falls das weiterhilft).

inka
03.08.2020, 12:49
https://www.micromotors.eu/en/gear-motors/series-rh158/

Aus der Datentabelle für die RH158.12.75 kann man den Strom bei Nennlast entnehmen. 680 mA
Die Stromzunahme bei einer Drehzahländerung von Leerlauf 81 Upm auf 55 Upm bei Nennlast beträgt ca. 680-140mA = 540mA.
Bei einer Drehzahländerung von 81 auf 0 Upm käme man dann auf etwa 1,8A (falls das weiterhilft).

insofern dass das treibermodul maximal 1.4A liefern kann ist die info schon hilfreich... Es müsste also das blockieren irgendwie sensiert werden. Über die stromstärke?

Ich habe hier aber noch was gefunden link (https://www.amazon.de/Sharplace-Ersatz-Getriebemotor-Drehmoment-12-24/dp/B073D15MJV/ref=psdc_2076813031_t1_B07WT22RNK?th=1) und aus den spärlichen technischen daten:
-----
Betriebsspannung DC 6, 12, 24 V.
Maximales Drehmoment:0,9 kg/cm.
Maximale Stromstärke:1,2 Ampere.
-----

Manf
03.08.2020, 18:27
Maximale Stromstärke das Motors bedeutet wohl, mehr sollte er nicht aufnehmen damit er nicht zu heiß wird. Das wären nach den Daten aus der Tabelle 1,2A bei ca.8V am ohmschen Widerstand grob 10W. Wobei er je nach Isolation beim Einbau mehr oder weniger auf Dauer vertragen wird.

Der Treiber IC liefert nach Datenblatt 1,2A Dauerstrom für 1 Kanal, bei 2 Kanälen sind es noch 0,9A.
https://toshiba.semicon-storage.com/eu/semiconductor/product/motor-driver-ics/brushed-dc-motor-driver-ics/detail.TB6612FNG.html
Im rechten Bild dargestellt bei 25°C Umgebungstemperatur und "IC only" das heißt ohne Kühlkörper.
Der aufgebaute Treiber hat sicher schon etwas mehr Kühlfläche vielleicht wie im linken Bild dargestellt. Ein zusätzlicher aufgesetzter Kühlkörper wird sicher noch helfen.


35175

Je nach Einsatz wird die eine oder andere Komponente auch an die Grenze gehen. Ganz abwegig ist die Auslegung sicher nicht wenn man bedenkt dass der Motor mit 680mA Nennstrom angegeben ist. Wenn dauerhaft Blockierung oder deutliche Überschreitung der Nennlast abzusehen ist kann man die Auslegung sicher auch verstärken.

Klebwax
03.08.2020, 22:50
ich habe mir mal das datenblatt angesehen und kann daraus nicht feststellen, welcher strom beim blockieren auftritt

Den kann man durch Sanftanlauf mit PWM gut unter Kontrolle bringen. Oder man nimmt gleich Treiber mit einer Strombegrenzung (https://www.ebay.de/sch/i.html?_from=R40&_trksid=p2047675.m570.l1313.TR2.TRC1.A0.H0.Xdrv887 1.TRS0&_nkw=drv8871&_sacat=0).

Mir kommen aber die ca. 8W als Nennleistung in bisschen wenig vor. Ich würde eher Motoren aus dieser Reihe (https://www.ebay.de/itm/V-TEC-DC-Motor-Turbine-Getriebemotor-Single-Dual-Welle-6V-12V-24V-6-260-RPM-/272304978808?var=&hash=item3f66a43b78:m:mq5eb4Wezl6Xl7YJonNdQHw) in Betracht ziehen. Damit fährt mein Prototyp ganz brauchbar.

351773517835179

Es sind die 24V Typen, erkennbar an den schwarzen Motoren. Als Akku dient ein Pack für Akkuschrauber, gabs mal beim Discounter als Restposten. Ist im Prinzip aber auch nur ein 5S mit 18V Nennspannung, 21V Ladeschlußspannung und eingebautem BMS. Mit einem Recom Schaltregler mach ich die 3,3V für den µC daraus. Die Motortreiber sind Module mit einem DRV8871 für kleines Geld von Ebay oder Ali. Ich hab da mal einen Ziegelstein mit drauf gepackt, macht ihm nichts aus. Für Outdoor hat er nur zu glatte und eigentlich auch zu kleine Räder. Auf nassem Gras bleibt er sicher am nächsten Grasbüschel hängen.

MfG Klebwax

morob
04.08.2020, 09:53
was heißt ganz braucbar?

ist das 10mm alu profil?

inka
04.08.2020, 11:58
ist das 10mm alu profil?

sieht genauso aus wie meine schwarzen profile... Makerbeam, schätze ich, gab es die schon 2012?

ich weiss nicht ob ich da einen fehler gemacht habe, ich konnte einfach nicht widestehen :-) und habe die encoder motoren (https://www.amazon.de/gp/product/B07VGT44KG/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1) - passend eigentlich zu meiner restlichen hardware:
- 12V akku
- adafruit motortreiber (chinaclone)
und das restliche zeug halt...

bestellt, 7,70€ pro motor schien mir unschlagbar. In drei wochen sind sie da....

Klebwax
04.08.2020, 12:19
was heißt ganz braucbar?

ist das 10mm alu profil?

Die Höchstgeschwindigkeit hab ich nicht gemessen, ernsthafte Tests an Steigungen hab ich auch nicht gemacht. Vom Gefühl würd ich sagen, die Räder rutschen weg, bevor die Motoren schlapp machen. Einen Wheelie schafft er auch nicht und bei einem Linienfolger Wettbewerb würde er wohl eher den Letzten machen. Schneller als ein Staubsaugerroboter oder ein Mäher ist er aber schon.

Das ist Makerbeam 10mm. Der Vorgänger sah noch so aus

35181
Die Breite des Körpers ist 100mm, da kann man Platinen im Standardmass der Chinesen direkt mit Abstandshaltern montieren. Die Länge ist eher zufällig, es sind einfach 300mm Profile. Am Vorgänger hab ich gelernt, daß 4 fest montierte Räder schlecht sind. Ein Antriebsrad hat immer durchgedreht, trotz der schweren Bleiakkus. Geradeausfahren war eigentlich nicht möglich. Mit 3 Rädern geht das aber ganz gut.

MfG Klebwax


gab es die schon 2012

Die Uhr in der Kamera ist nicht gestellt, war ich zu faul zu

morob
04.08.2020, 20:39
ich habe ein größeres teil in der plaung mit diesen 2x motoren mit 200mm rädern, allseitenrad als drittes rad.
https://www.conrad.de/de/p/modelcraft-rb350050-22723r-hochleistungsgetriebemotor-12-v-50-1-233132.html

@klebewax, hast du mal ein mechanischen test gemacht was die 10mm teile aushalten, ich würde da mindestens 15kg brauchen.

inka
05.08.2020, 12:09
ich habe ein größeres teil in der plaung mit diesen 2x motoren mit 200mm rädern, allseitenrad als drittes rad.
https://www.conrad.de/de/p/modelcraft-rb350050-22723r-hochleistungsgetriebemotor-12-v-50-1-233132.html

@klebewax, hast du mal ein mechanischen test gemacht was die 10mm teile aushalten, ich würde da mindestens 15kg brauchen.


- der link funktioniert leider nicht...

- was für einen mechanischen test für die profile meinst du?

morob
05.08.2020, 12:44
bei conrad.de, nach Modelcraft RB350050-22723R Hochleistungsgetriebemotor 12 V 50:1

ja für die profile, ich überlege gerade von sperrholz und leisten weg zu gehen :)

inka
05.08.2020, 14:54
also ich finde die sehr stabil. müsstest sagen was und wie ich messen sollte. habe gerade so mal eines der 300mm Profile versucht zu biegen, geschätzt 10kg in die Mitte gelegt, keine durchbiegung. hat makerbeam keine Werte auf der Webseite?

morob
05.08.2020, 15:06
leider nicht oder ich muss meine brille putzen.

inka
05.08.2020, 16:28
also ich hab jetzt auch nichts gefunden, aber wenn du von holzleisten und sperrholzplatten auf makerbeam umsteigst, kann es nur besser werden :-)
abgesehen davon wäre es vielleicht von vorteil wenn man das nötige kleinmaterial (wie die nutensteine z.b.) nicht in "apotheken" wie in diesem falle amazon sondern bei makerbeam für drei user bestellen könnte - ich wäre dabei...

oberallgeier
05.08.2020, 16:30
also ich finde die sehr stabil. müsstest sagen was und wie ich messen sollte. habe gerade so mal eines der 300mm Profile versucht zu biegen ..Der archie hat (s)ein Fahrgestell und den "Körper" bzw. ne Art Wirbelsäule (https://www.heise-gruppe.de/imgs/74/1/5/0/6/8/2/7/Tichy_Roboter-c428c0668682ece1.jpeg) bis zum "Hals" aus 30-mm Boschprofilen (klick) (https://www.myaluprofil.de/aluminiumprofil-30x30-nut-8-b-typ.html?language=de). Davor war das alles aus Alu-U-Profilen und das war eine recht wabbelige Angelegenheit. Die Boschprofile sind s..mäßig stabil, verwindungssteif und haben diese praktischen Nuten zum Festklemmen von allerlei Dingen - auch anderen Profilleisten. Seit Jahren ist das - in verschiedenen Abmessungen - weit verbreitet für industrielle Aufbauten die irgendeine Art Rahmen benötigen.

inka
05.08.2020, 16:48
nebenbei, es war bei mir kein zufallsfund, ich kenne die profile aus meinem früheren Berufsleben...

morob
05.08.2020, 18:07
ich halte 30x30 für ziemlich heftig, aber ich kenne ja archie, der hat schon eine bewegungsdynamic.

20x20 wäre auch noch denkbar bei mir wenn das teil wirklich 30kg wird.

Klebwax
05.08.2020, 19:59
ich habe ein größeres teil in der plaung mit diesen 2x motoren mit 200mm rädern, allseitenrad als drittes rad.
https://www.conrad.de/de/p/modelcraft-rb350050-22723r-hochleistungsgetriebemotor-12-v-50-1-233132.html

@klebewax, hast du mal ein mechanischen test gemacht was die 10mm teile aushalten, ich würde da mindestens 15kg brauchen.

Nein, ich habe keine Tests gemacht.

Für dein Gewicht würde ich sie nicht einsetzen, ebenso meine Motore nicht. Ich will das mal so begründen. Ich bin kein Mechaniker, kein Konstrukteur. Ich baue auch nicht nach einem Plan sondern ändere ständig was. Mein Korpus wird von Eckwürfeln zusammengehalten. Das geht schön einfach. Am Ende hängt aber alles an einer M3 Schraube. Und von denen hab ich in meinem Leben schon so einige abgerissen, ebenso Gewinde in Alu. Ein Konstrukteur hätte einen kompletten Plan, wüsste wo er Knotenbleche oder Streben setzen müsste, um das Ganze stabil und steif genug hin zu bekommen.

So eine Vorstellung von der Last, die das Chassis im Normalfall aushalten sollte, wäre ein Fall aus 2-3cm Höhe, was so bei einer Fahrt über eine Schwelle vorkommt. Beim Bauen und Experimentieren kann das auch schon mal härter werden. Ich denke das kann man mit 10mm Profilen, Streben und Knotenblechen hinbekommen, wenn man einen wirklichen Plan hat, ist aber nicht meine Baustelle. Die Motore sind bei mir an Edelstahlblechen (war grad da), die an vier Stellen ans Chassis geschraubt sind, montiert, haben aber rumgeschwabbelt. Habe dann die Bleche etwas abgekantet und es reicht mir gerade so. Bei 15kg (10 1,5l Wasserflaschen) haut das so aber nicht mehr hin.

Meine Motore haben ein selbstsperrendes Schneckengetriebe. Wenn der Motor hält geht die ganze Bremsenergie in das (winzige) Ritzel und die Schnecke. Die Zahnräder laufen auf 2mm Achsen, die Motorachse hat 3-4mm. Wie lange die das bei einem Fahrzeuggewicht von 15kg mitmachen, wenn das Teil Schrittgeschwindigkeit oder mehr hat? Ein Stirnradgetriebe wäre die bessere Wahl. Und zum Motor selbst: das was das Fahrzeug vorwärts bringt ist am Ende die Leistung, die PS. Ich halte 10 oder zweimal 10W für zu wenig. Vor allem, wenn man sich das Getriebe nicht maßschneidern lassen kann und ein Schaltgetriebe nicht will. Um bei niedriger Drehzahl, beim Anfahren genügend Leistung zur Verfügung zu haben braucht man schon außreichend Spitzenleistung. Mit weniger als zweimal 40-50W würde ich nicht planen, das ist so die Kategorie Schweibenwischermotor. Modellbaumotore mit 3-4mm Motorachse wären mir zu klein.

Allseitenräder sind für mich Spielzeug. Ich hab ein paar und auch damit rumgespielt, gefallen haben sie mir nicht. Auf rauem Untergrund halte ich sie für unbrauchbar. Da setzt sich schnell ein Krümel, ein Grashalm, irgendwo fest und eine Rolle dreht sich nicht mehr. Auf wirklich glattem Boden ist das auch nicht besser, Grip haben die nicht. Dann ist das nicht besser als eine Kufe.

Das sind alles aber meine ganz persönlichen Einschätzungen.

MfG Klebwax

morob
05.08.2020, 20:52
danke klebewax, das ist eine sachliche meinung.

dann wohl eher doch 30x30mm² :D

@inka, du siehst das thema ist nicht einfach :)

Rabenauge
06.08.2020, 07:48
Nein, ich habe keine Tests gemacht.

Mit weniger als zweimal 40-50W würde ich nicht planen, das ist so die Kategorie Schweibenwischermotor. Modellbaumotore mit 3-4mm Motorachse wären mir zu klein.


Das sind alles aber meine ganz persönlichen Einschätzungen.

MfG Klebwax

Da unterschätzt du diese "Modellbau-Motoren" aber ein wenig, mein Lieber.
Ein 540er Mabuchi oder Johnson (die sind nahezu identisch) liefert bei 7.4V irgendwas zwischen 70 und 100W.
Von denen gibts auch Ausführungen mit weniger Wicklungen, die bis zu 160W liefern...
Oder aber mit mehr Wicklungen, für mehr Drehmoment.
Das sind die mit 35mm Durchmesser- die gibts auch mit Vorsatzgetriebe und in Ausführungen von 6V und 12V.
Diese Vorsatzgetriebe (abgewinkelt oder auch als Inline-Ausführung zu haben, sowie in diversen Untersetzungen) kann man auch einzeln kaufen- diese Motoren haben alle die selben Montagebohrungen, man kann sich also passende Antriebe zusammenstellen.

Ich hab sogar solche Motoren im Einsatz, die 280W liefern- das sind dann allerdings Brushless-Motoren.
Auch dort würden die Vorsatzgetriebe passen.

oberallgeier
06.08.2020, 09:10
.. Das sind die mit 35mm Durchmesser- die gibts auch mit Vorsatzgetriebe und in Ausführungen von 6V und 12V ..Zwei Teile vergleichbarer Spezifikation laufen in meinem archie (https://dl.dropbox.com/s/qrkjqiubdlifgyz/Motor-aus-R5-konfiguratiion-xls.jpg?dl=0). Maximale Stromaufnahme 5 A bei 12 V - nach Spezifikation, mit Getriebe und Encode, dann Ømax ca. 37 mm - siehe Link/Ausschnitt aus meiner Dokumentation. Genau dieser Typ läuft bei mir aber nicht wirklich geräuschlos.

inka
06.08.2020, 14:25
Ein Konstrukteur hätte einen kompletten Plan, wüsste wo er Knotenbleche oder Streben setzen müsste, um das Ganze stabil und steif genug hin zu bekommen.
kein in stein gegossenen kompletten plan, aber ein bischen gefühl dafür, was eine m4 oder M3 wohl aushält. Ich habe schon immer die maschienbauer einerseits um ihr wissen beneidet, andererseits war ich froh drum, nicht alles rechnen zu müssen - eine M4 war schon fast immer überdimensioniert...


Allseitenräder sind für mich Spielzeug. Ich hab ein paar und auch damit rumgespielt, gefallen haben sie mir nicht. Auf rauem Untergrund halte ich sie für unbrauchbar. Da setzt sich schnell ein Krümel, ein Grashalm, irgendwo fest und eine Rolle dreht sich nicht mehr. Auf wirklich glattem Boden ist das auch nicht besser, Grip haben die nicht. Dann ist das nicht besser als eine Kufe.
das sehe ich etwas anders, hatte inzwischen 3 roboter damit, an einem sogar einen direkten vergleich mit normalen rädern, hatte schon welche mit glatten rollen, da würde ich dir recht geben, die gummirollen an den chinesischen rädern sind da schon anders. Wie die empfindlichkeit auf'm rasen ist, mag ich (noch) nicht beurteilen... Faszinierend ist nach wie vor die bewegungsfreiheut für ein fahrzeug mit omniwheels...


@inka, du siehst das thema ist nicht einfach :)
ganz sicher nicht. Aber es macht spass...
Auch wenn man mal falsch liegt und mittendrin auf andere motoren umsteigen muss. Manchmal ist auch der weg das ziel :-)

Klebwax
06.08.2020, 14:51
Da unterschätzt du diese "Modellbau-Motoren" aber ein wenig, mein Lieber.
Ein 540er Mabuchi oder Johnson (die sind nahezu identisch) liefert bei 7.4V irgendwas zwischen 70 und 100W.
Von denen gibts auch Ausführungen mit weniger Wicklungen, die bis zu 160W liefern...

Die holen ihre Leistung aus sehr hohen Drehzahlen. Das mag für eine Luftschraube gerade noch passen, für den Antrieb eines Fahrzeugs ist das eher schlecht. Man braucht eine sehr hohe Untersetzung mit vielen Stufen, die die Abtriebsleistung reduziert. Im Umfeld solcher Motore hab ich genügend Zahnräder und Ritzel gesehen, die einen Zahnarzt dringend nötig hatten.


Ich hab sogar solche Motoren im Einsatz, die 280W liefern- das sind dann allerdings Brushless-Motoren.
Auch dort würden die Vorsatzgetriebe passen.

Dann solltest du auch verraten, wie du ein passendes Ritzel auf die Motorwelle bekommst und wie lange ein solches Getriebe das aushält. Und die 280W sind genau genommen sicher nicht die Abgabeleistung sondern die (von dir gemessene) Aufnahmeleistung unter Last im Dauerbetrieb.

Und bevor jetzt RC-Cars ins Feld kommen, ich würde das nur akzeptieren, wenn man damit unfallfrei rückwärts einparken kann. Das entspricht in etwa dem Anfahren einer Ladestation.


Maximale Stromaufnahme 5 A bei 12 V - nach Spezifikation, mit Getriebe und Encode, dann Ømax ca. 37 mm - siehe Link/Ausschnitt aus meiner Dokumentation. Genau dieser Typ läuft bei mir aber nicht wirklich geräuschlos.

Wie ich lese 5A Stall-Current. Das ist für die Auslegung der Elektronik sicher von Bedeutung, die Wellenleistung ist aber Null. In diesem Zustand ist der Motor nicht mehr als ein 60W Lötkolben und wird sicher über kurz oder lang abbrennen. Und wenn eine Mechanik Geräusche macht, heißt das für mich eigentlich immer, da ist Überlast im Spiel.

Eine besondere Eigenschaft von Elektromotoren ist, daß man sie gnadenlos Überlasten kann, solange die Mechanik das aushält und die Temperatur nicht zu hoch wird. Wenn der Einsatz das zulässt kann man also mit relativ kleinen Motoren viel erreichen. Zum Testen meiner Rolladensteuerung habe ich einen Rohrmotor auf dem Tisch aufgebaut. Oben auf dem Datenblatt steht ein beeindruckendes Drehmoment, so ein Rolladen einer Terrassentür ist ja auch schwer. Nachdem der ein paarmal (ohne Rolladen) gelaufen ist, fiel mir auf, daß er kochend heiß war. Das war aber normal. Der Antrieb ist so konstruiert, daß er zwei-dreimal am Tag für eine Minute läuft. Dann hält er Jahrzehnte durch. 10 Minuten Dauerbetrieb und er ist hinüber.

MfG Klebwax

Rabenauge
07.08.2020, 13:02
Richtig-ich setze die in Modellautos ein, und zwar in diversen.
Für Flugmodelle sind vor allem die Bürstenmotoren längst überholt.
Natürlich sind die bei weitem schneller als der gewöhnliche Eigenbau-Roboter, aber das ist nichts, was man mit ner passenden Untersetzung nicht in den Griff bekäme-wie gesagt: die Inline-Getriebe bieten sich da ja an.
Motorritzel montieren ist sehr einfach: die haben alle ne abgeflachte Welle (wenn einer die mal nicht hätte, könnt man kurz mitm Drehmel ran), und dann wird das Ritzel kurzerand mit ner Madenschraube fixiert.
Die Ritzel gibts in allen möglichen Grössen (ich hab zwischen 16 und 27 Zähnen im Einsatz) und auch mit unterschiedlichen Modulen.
Und ja: das hält-sowohl in nem Buggy, der so _richtig_ getreten wird, als auch in nem Glattbahner (die zwei haben beide diesen BL-Motor drin), der auch ziemlich rangenommen wird- da benutze ich nicht mal Schraubensicherung.

Feinfühlig anfahren geht dennoch, wobei das wiederum mit den Bürstenmotoren besser klappt (es gibt aber auch BL-Ssteme, bei denen im Motor Sensoren verbaut sind, die können das dann genauso gut)- einparken ist also kein Probem.
Die RC-Crawler (die teilweise nicht mal Schrittempo fahren können) benutzen diese Motoren im übrigen auch, und oft dann welche mit mehr als 50 Windungen (bis 80 kenne ich)- die drehn nicht mal mehr 10 000 bei 7.4V. Dafür haben die abartige Drehmomente....
Diese Crawler rangieren ohne weiteres millimetergenau.
Also nix mit "holen sie aus der Drehzahl"- die Palette ist so gross, dass man da immer was finden kann.
Und die haben alle die selbe Welle- da gibts Ritzel ohne Ende für.

Was meine BL-Motoren angeht: nein, ich hab das nich gemessen, es ist die Hersteller-Angabe der _Abgabeleistung_.
Da ein halbwegs vernünftig angepasster BL-Motor durchaus im Wirkungsgrad oberhalb 80% liegt (wenn nicht, verglüht er recht zuverlässig und schnell), und ich weiss, was meine Regler können, passt das schon so ungefähr.

Klebwax
07.08.2020, 18:49
Also nix mit "holen sie aus der Drehzahl"-

Da wollen wir mal die Physik nicht vergessen, mein Bester. Die Leistung ist nun mal proportional zu "Drehmoment mal Drehzahl". Das maximale Drehmoment eines 6-8 mm großen Ritzels eines Mabuchi ist überschaubar. Da bricht man einen Zahn schon mit einem kleinen Schraubenzieher raus. Um an dieser Stelle des Getriebestranges 280W (zum Vergleich ein Pedelec bringt auch einen dicken Menschen mit 250W auf 25km/h, ist halt 1/3 PS) zu übertragen, braucht man halt eine hohe Drehzahl. Und ich hab noch keinen Motor gehabt, bei dem das Motorritzel mit ner Made festgemacht war. Die waren alle aufgepresst oder aufgeschrumpft. Die bekommt man nur ab, indem man das Ritzel zerstört oder mit ner Flamme erwärmt und einen Abzieher einsetzt.

Die echte Wellenleistung zu messen ist nicht leicht, das ist mir klar. Aber die elektrische Leistung eines " RC-Crawlers" zu messen sollte doch möglich sein. Dann kann man mal abschätzen, ob die 280W real sind oder ob sie in die Kategorie PMPO eines Gethoblasters fallen.

MfG Klebwax

Rabenauge
08.08.2020, 00:42
Es ist im 1:10er Automodellbau völlig üblich, Motorritzel mit Madenschrauben fest zu machen....ich kenns gar nicht anders (und treib das schon, na sagen wir, an die 30 Jahre).

Da brichst du auch nix mit nem Schraubenzieherchen raus, ganz sicher nicht. Diese Motorritzel bestehn mindestens aus Messing, gewöhnlich aber Stahl.
Aber ich red hier nicht viel....du kannst selber mal nachlesen, was die Hersteller so angeben (und so einigermassen glaub ich denen dann schon),
Beispielsweise hier:
https://www.absima.shop/pp/absima-elektro-motor-thrust-b-spec-21t.htm?shop=absima&SessionId=&a=article&ProdNr=2310076&t=19114&c=19131&p=19131
Da sind auch noch welche-auch Langsamläufer:
https://www.carson-modelsport.com/de/produkte/carson-modelsport/zubehoer/brushed-brushless-motoren-esc/truck-puller-motor-venom-500906043/
Du findest beliebig viele weitere Beispiele zu.
Und das sind _nur_ Bürstenmotoren-Brushless geht es noch ganz anders zu Werke (die sind halt einfach viel effektiver).

piggituX
11.08.2020, 22:40
hi,

da gebe ich Rabenauge schon ganz recht, madenschrauben sind gang und gebe im RC Modellbau.... Bürstenmotoren sind die besten bei Crawlern wegen dem zarten genauen anfahren und abbremsen.

und Geschwindigkeit und Motoren und Leistung

https://traxxas.com/products/models/electric/xo-1-tsm
https://traxxas.com/products/landing/x-maxx/

bzgl. Motoren bin ich bei meinem Rasenroboterumbau auf Dunkermotoren gestossen, der ältere Landroid den ich mir gekauft hatte , hat diese verbaut brauchen aber auch 24V

TyP: BG42X15

als motortreiber habe ich mir solche liefern lassen

https://www.banggood.com/Brushless-DC-Motor-Drive-Board-20A-12V-36V-500W-DC-Brushless-Motor-Controller-With-Hall-Driver-Module-p-1548334.html

35189

Klebwax
12.08.2020, 18:56
da gebe ich Rabenauge schon ganz recht, madenschrauben sind gang und gebe im RC Modellbau....

Das Modellbauer das so machen hab ich nicht bezweifelt. Was ich bezweifelt habe (und immer noch tue) ist, daß man zuverlässig einige hundert Watt über eine 3-4mm starke Achse und eine Made übertragen kann. Die Ausnahme sind Luftschrauben, die mit der erforderlichen hohen Drehzahl etwas anfangen können und gleichzeitig die Kühlung für den Motor liefern.

Und bei allen genannten Beispielen habe ich auch noch keines gesehen, daß mich da widerlegt.


Also nix mit "holen sie aus der Drehzahl"

Und dann präsentierst du Motore mit 20 bis 37 Tausend Touren Leerlaufdrehzahl und einen mit 6500 RpM als Langsamläufer. Interessanterweise wird bei dem 6500 RpM Motor keine Leistung angegeben (und bei allen keine Kennlinien).Typische Elektromotore (außer Modellmotore) drehen 3000 bis 5000 RpM, Langsamläufer wenige Hundert Touren, Nabenmotoren in Pedelecs noch viel weniger. Der Motor von piggituX mit seinen 3630 RpM passt da genau in das Bild (und ich möchte wetten, daß das Motorritzel nicht mit einer Made befestigt ist).

Daß man mit großer Untersetzung langsam fahren kann, ist unbestritten. Ein Porsche kann auch in einer 30-Zone fahren. Sein Motor wird aber dabei nur einen Bruchteil seiner Nennleistung geschweige denn seiner Maximalleistung liefern. Trotzdem kann es dabei passieren, daß er Probleme mit der Kühlung bekommt. Gleiches gilt für einen 150W Motor in einem Crawler. Ich hab daher nach einer Messung gefragt, nicht weil ich den Herstellerangaben bei der Maximalen Leistung nicht traue, sondern weil ich davon ausgehe daß der Motor sie in diesem Betriebszustand nicht liefert und auch nicht muß.

Und nochmal zurück zu einem Fahrzeug mit 15kg und mehr.


Ich halte 10 oder zweimal 10W für zu wenig. Vor allem, wenn man sich das Getriebe nicht maßschneidern lassen kann und ein Schaltgetriebe nicht will. Um bei niedriger Drehzahl, beim Anfahren genügend Leistung zur Verfügung zu haben braucht man schon außreichend Spitzenleistung. Mit weniger als zweimal 40-50W würde ich nicht planen, das ist so die Kategorie Schweibenwischermotor. Modellbaumotore mit 3-4mm Motorachse wären mir zu klein.

Meine Einschätzung hat sich da nicht geändert. Der Motor von piggituX könnte passen. Er ist mit einer Nennleistung von ca. 40W angegeben. Das Getriebe hat ein maximales Drehmoment von 600 Ncm, das sind die Grenzen bei so kleinen Zahnrädern und Wellen. Bei Rädern mit 20cm Durchmesser bleiben dann am Radumfang noch 60N (ca 6kg) übrig. Das reicht dann nicht mehr, ein 15kg Fahrzeug senkrecht anzuheben, ohne daß das Getriebe zerstört wird, ganz unabhängig von der Motorleistung. Das wird natürlich auch nicht vorkommen, aber ein Hindernis mit 2-3 Zentimeter Höhe, eine Schwelle, zu überfahren könnte problematisch werden.

MfG Klebwax

morob
14.08.2020, 09:48
ich liebäugle auch mit modellautos im masstab 1:10 oder 1:8. die frage ist was kann zusätzlich draufgepackt werden?
teensy 4 ist kein problem, aber wie sieht es mit einem rpi4 und seiner energieversorgung aus, ca 15ah/h macht schon etwas gewicht bei 2 stunden. dann kommen noch die guten kühlkörper oder alu-körper wegen der wärme.

HaWe
14.08.2020, 12:09
ich liebäugle auch mit modellautos im masstab 1:10 oder 1:8. die frage ist was kann zusätzlich draufgepackt werden?
teensy 4 ist kein problem, aber wie sieht es mit einem rpi4 und seiner energieversorgung aus, ca 15ah/h macht schon etwas gewicht bei 2 stunden. dann kommen noch die guten kühlkörper oder alu-körper wegen der wärme.

das geht ja dann doch wieder in diese Richtung: https://www.roboternetz.de/community/threads/73437-Leistungsf%C3%A4higerer-Nachfolger-f%C3%BCr-RP6
was allerdings die Batterien angeht: da wird ein Raspi vs. ARM Cortex/ESP32 nicht so extrem viel Unterschied machen im Verhältnis zu den anderen Verbrauchern (Motoren, Bildschirm und der ganze Rest)

morob
14.08.2020, 12:50
ich arbeite headless oder soll man den monitor als gesicht verwenden? :D

die stromversorgung sehe ich bei einem rpi4/3 schon als problem.

HaWe
14.08.2020, 13:04
ich arbeite headless oder soll man den monitor als gesicht verwenden? :D

die stromversorgung sehe ich bei einem rpi4/3 schon als problem.


Ich arbeite immer mit einem TFT oder HDMI-Display und GUI-APIs:
TFT+TS für Arduinos (2,8-3,5", Adafruit Libs) oder Raspis mit TS oder Mauspad (7-13", qt5), aber man kann die Display-Funktion ja auch umschalten:
von Daten-Monitor und Dashboard auf Gesicht, gar keine schlechte Idee 8)

Im Normalbetrieb braucht ein Pi nicht mehr als 5V*1A =ca. 5W, Motoren mit z.B. jeweils 12V*4A=ca. 50W aber schon ein -zigfaches.
Wenn ein Pi mehr verbraucht, liegt es überwiegend an Zusatz-Verbrauchern an den USB-Ports.

morob
14.08.2020, 13:51
Im Normalbetrieb braucht ein Pi nicht mehr als 5V*1A =ca. 5W, Motoren mit z.B. jeweils 12V*4A=ca. 50W aber schon ein -zigfaches.
Wenn ein Pi mehr verbraucht, liegt es überwiegend an Zusatz-Verbrauchern an den USB-Ports.


ich würde den rpi immer einer zusätzlichen stromversorgung anschliessen, die ströme am motor wären mir zu instabil, der rpi ist da etwas empfindlichen.

HaWe
14.08.2020, 14:15
ich würde den rpi immer einer zusätzlichen stromversorgung anschliessen, die ströme am motor wären mir zu instabil, der rpi ist da etwas empfindlichen.
Ich mache das bei mobilen Robots über eine StromPi-2 USV, die über den DC-Eingang (12V-Hauptbatterie, theoretisch max bis 60V) dann den Raspi versorgt und über ihre Kondensatoren puffert. Als Zusatz ist noch eine Powerbank angeschlossen, die über den StromPi automatisch nachgeladen wird und ansonsten den Raspi zusätzlich puffert.

inka
14.08.2020, 17:19
nach dem switch zu DC-encodermotoren (quasi ein salto rückwärts, denn die hatte ich ja schon) fange ich nicht ganz am punkt "0" an, die modularität zahlt sich nun aus, es dauert aber trotzdem noch ne weile, es gibt eine menge neu zu drucken, hier der ursprünglicher haltewinkel des NEMA17 und die neue halterung des DC-motors:
35190

alle 4 motoren laufen schon, gibt aber noch jede menge zum anpassen, neu machen, testen...


ich würde den rpi immer einer zusätzlichen stromversorgung anschliessen, die ströme am motor wären mir zu instabil, der rpi ist da etwas empfindlichen.
ich denke, das macht immer sinn, auch bei arduino...


Ich mache das bei mobilen Robots über eine StromPi-2 USV, die über den DC-Eingang (12V-Hauptbatterie, theoretisch max bis 60V) dann den Raspi versorgt und über ihre Kondensatoren puffert. Als Zusatz ist noch eine Powerbank angeschlossen, die über den StromPi automatisch nachgeladen wird und ansonsten den Raspi zusätzlich puffert.

was meinst Du mit "StromPi-2 USV"? gäbe es da evtl. auch was zu sehen von den mobilen robots?

- - - Aktualisiert - - -

hier noch zwei bilder zu der motorbefestigung:
35191 35192

man kann auch die (gedruckten) adapter zwischen dem omniwheel und dem DC-motor sehen, da sind auch M4 madenschrauben drin, allerdings 3 am umfang...

morob
14.08.2020, 17:57
was meinst Du mit "StromPi-2 USV"? gäbe es da evtl. auch was zu sehen von den mobilen robots?


das ist eine usv für rpi als hat aufsteckbar, mit diversen stromeingängen.

HaWe
14.08.2020, 19:50
https://joy-it.net/de/products/RB-StromPi2
ich verwende als externe Spannungsquelle allerdings stärkere 12V NiMH Accupacks, mehrere davon parallel geschaltet, die versorgen zusätzlich auch den ganzen Rest, also auch die Motoren. Dabei gibt es dann auch keinen Spannungs-Abfall/Einbruch im Betrieb.

piggituX
14.08.2020, 22:48
nach dem switch zu DC-encodermotoren (quasi ein salto rückwärts, denn die hatte ich ja schon) fange ich nicht ganz am punkt "0" an, die modularität zahlt sich nun aus, es dauert aber trotzdem noch ne weile, es gibt eine menge neu zu drucken, hier der ursprünglicher haltewinkel des NEMA17 und die neue halterung des DC-motors:
35190

man kann auch die (gedruckten) adapter zwischen dem omniwheel und dem DC-motor sehen, da sind auch M4 madenschrauben drin, allerdings 3 am umfang...

Sehe ich das richtig, das die madenschrauben den Motor halten sollen ? ich persönlich würde das in Metall ausführen. standen da nicht 15kg im Raum ?

@morob ich mag crawler modelle, wegen der bodenfreiheit

http://piggitux.ignorelist.com:8085/IMG_6920.jpg (http://piggitux.ignorelist.com:8085/IMG_6921.jpg)
http://piggitux.ignorelist.com:8085/IMG_6921.jpg
http://piggitux.ignorelist.com:8085/IMG_6922.jpg (http://piggitux.ignorelist.com:8085/IMG_6921.jpg)


auch ne coole Seite mit vielen Infos ;-) ich lese dort gerne

https://custom-build-robots.com/

inka
15.08.2020, 09:52
Sehe ich das richtig, das die madenschrauben den Motor halten sollen ? ich persönlich würde das in Metall ausführen. standen da nicht 15kg im Raum ?
ja, die sollen den motor halten. Alu wäre eine gute idee, mit gewindeeinsätzen (helicoil) für die madenschrauben. Aber woher nehmen? Wer kann sowas schon fertigen? Für die DC-motoren werden nur einfache winkel mit zwei befestigungsschrauben (M3!) angeboten, da ist der gedruckte winkel stabiler. Der motor wird auf einer länge von ca. 10mm geführt und wie gesagt mit drei madenschrauben in helicoils gehalten...

Gewicht? 15 kg waren nie geplant, im moment bin ich bei 2,8kg, alles, oder fast alles an elektronik ist schon on board, also wenn ich auf 3,5kg kommen sollte ist das schon viel...

Rabenauge
15.08.2020, 11:17
Hm-warum benutzt du nicht die Befestigungsmöglichkeit an der Front?
Ich hab das beim XP² so gemacht:
35193

Der Motor (samt Getriebe) sitzt stramm in der Hülse.

35194
Von aussen kommen da zwei normale M3-Schrauben rein, die ihn gegen rausrutschen und verdrehen sichern.
Die werden einfach in die Gewinde geschraubt, die alle diese Motoren (und auch die Vorsatzgetriebe, ich kenn jedenfalls keines, was die nicht hat) an der Front haben.

Oder brauchst du unbedingt die gesamte Wellenlänge?

inka
15.08.2020, 11:31
Hm-warum benutzt du nicht die Befestigungsmöglichkeit an der Front? Der Motor (samt Getriebe) sitzt stramm in der Hülse.

Von aussen kommen da zwei normale M3-Schrauben rein, die ihn gegen rausrutschen und verdrehen sichern.
Die werden einfach in die Gewinde geschraubt, die alle diese Motoren (und auch die Vorsatzgetriebe, ich kenn jedenfalls keines, was die nicht hat) an der Front haben.

Oder brauchst du unbedingt die gesamte Wellenlänge?
die befestigung ist ähnlich, halt durch "passung" im kunststoff und position durch die madenschrauben. Die wellenlänge ist 8mm insgesamt, die brauche ich schon...

ich bin sowieso etwas skeptisch wegen der 4mm welle, zu den 100mm rädern schon etwas mickrig :-(

piggituX
15.08.2020, 13:55
ok dann hab ich das mit 15kg aus dem Zusammenhang gerissen, aber du klemmst mit den Madenschrauben die Motoren oder ? ... haben die nicht vorne auch Gewinde ? deswegen meine Frage. wegen Festigkeit und der Verwindung beim Anfahren.

klingt vielleicht was laienhaft, aber ich habe nie studiert ;-)

morob
15.08.2020, 21:46
@morob ich mag crawler modelle, wegen der bodenfreiheit

http://piggitux.ignorelist.com:8085/IMG_6920.jpg (http://piggitux.ignorelist.com:8085/IMG_6921.jpg)
http://piggitux.ignorelist.com:8085/IMG_6921.jpg
http://piggitux.ignorelist.com:8085/IMG_6922.jpg (http://piggitux.ignorelist.com:8085/IMG_6921.jpg)


auch ne coole Seite mit vielen Infos ;-) ich lese dort gerne

https://custom-build-robots.com/

ich auch, ich bin dabei das in wasserdichte dosen zu verpacken, wegen ausseneinsatz. manchmal sind sie mir zu langsam, aber sie kommen fast überall hoch.
die seite lesen ich schon eine ganze weile, aber sogut sie angefangen hat, ..., meine meinung.

inka
16.08.2020, 14:25
ok dann hab ich das mit 15kg aus dem Zusammenhang gerissen, aber du klemmst mit den Madenschrauben die Motoren oder ? ... haben die nicht vorne auch Gewinde ? deswegen meine Frage. wegen Festigkeit und der Verwindung beim Anfahren.

klingt vielleicht was laienhaft, aber ich habe nie studiert ;-)

wieso laienhaft? der motor wird schon beim anfahren durch den hebelarm am rad belastet, es ist halt ein zusammenspiel zwischen verschiedenen dingen. Aber ich denke bei 4 motoren und einem maximalen gewicht von 4kg müsste die "saugende" passung zwischen dem motor und haltewinkel ok sein und den motor gut halten können. Da "eiert's" an anderen stellen zwischen der 4mm welle, dem adapter und rad mehr :-(

Ich hab jetzt ein bischen mal rumprobiert mit den DC-motoren, bin nicht sicher die richtige übersetzung ausgesucht zu haben. Weiss jemand ob diese vorsatzgetriebe auch einzeln zu bekommen sind? Ist z.b. der aussendurchmesser des motors irgendein standard bei modellbaumotoren?