Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

fischertechnik in General
Forumsregeln
Bitte beachte die Forumsregeln!
Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Bastelklausi » 29 Okt 2020, 11:45

Hallo zusammen,

Ich habe in der 433 MHz Funkfernsteuerung die ursprünglich verwendete Bibliothek RCSwitch durch die VirtualWire ersetzt:
#include <Wire.h> // Wire Bibliothek einbinden
#include <VirtualWire.h> // VirtualWire zum Senden einbinden

Die hat den großen Vorteil, dass man z.B. die Übertragungsgeschwindigkeit definieren kann:
vw_setup(600); // Drahtlose Schnittstelle, 600 Bits pro Sekunde
// Daten senden - Pin definieren
vw_set_tx_pin(TXPin);

Ich habe zum Testen 600 Baud genommen. Das klingt zwar langsam, ist aber völlig ausreichend, da nur ein paar Bytes übertragen werden. Je niedriger die Baudrate, desto robuster ist die Funkstrecke gegen Störungen, bzw. erhöht die nutzbare Reichweite.
Man kann zudem eine Datenstruktur anlegen, z.B. wie folgt:
typedef struct txData
{
int TX_ID;
int kommando;
int wert;
};
Wie man sieht, habe ich eine Adresse vorgesehen. Somit kann man mehrere Sender/Empfänger verwenden, in dem man beim Empfänger die TX_ID auswertet.
Das aussenden geht einfach, z.B. wie folgt (Servolenkung):
struct txData payload; // Sendedaten zusammenstellen
payload.TX_ID = TX_ID; // Adresse des Senders
payload.kommando = int('A'); // Kommando
payload.wert =int(steerangle); // Wert
vw_send((uint8_t *)&payload, sizeof(payload)); // Daten senden

Wie sieht es beim Empfänger aus. Hier die Initialisierung:
vw_setup(600); // Drahtlose Schnittstelle, 600 Bits pro Sekunde
vw_set_rx_pin(RX_PIN); // Daten empfangen an Pin
vw_rx_start(); // Start Datenempfang

Der eigentliche Empfang:
// Starte Datenempfang
vw_wait_rx_max(1000);
Der Wert in Klammern ist ein Timeout in ms. Die Auswertung:
// prüfen, ob Daten vorhanden
if (vw_get_message((uint8_t *)&RxData, &rxSize))
{

// prüfen, ob Sender und Empfänger-ID gleich sind
if (RxData.TX_ID == RX_ID){
// Integer-Werte der Sensordaten umwandeln
int k=RxData.kommando;
int w=RxData.wert;
usw.

Bislang habe ich den Empfang nur testweise mit einem Arduino Nano mit 433 MHz Empfänger und Ausgabe auf der seriellen Konsole. Das sieht sehr gut aus. Es gibt keine Werte von 0 zwischendrin. Die Übertragung scheint sehr stabil zu sein. Auch um drei Ecken mit 10 m Abstand gibt es keine Abbrüche.
Als Nächstes baue ich den Empfänger in den Flitzer ein und schau mal, was Motor und Servo machen. Dann gibt es von mir ein Update.

Liebe Grüße
Klaus

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Bastelklausi » 30 Okt 2020, 13:03

Guten Tag zusammen,

böse Überraschung: die VirtualWire Bibliothek verträgt sich NICHT mit der Servo Bibliothek. Es gab einen Compilerfehler und nach Recherche fand ich heraus, dass beide Bibliotheken den Timer 1 benutzen. Das gibt dann einen Konflikt und der Compiler bricht mit einer Fehlermeldung ab.

Zwar gibt es eine ServoTimer2 Bibliothek, die den Timer 2 benutzt und tatsächlich ist dann der Compilerfehler weg. Aber ACHTUNG!
Die ServoTimer2 Bibliothek verwendet nicht den Servowinkel als Parameter in der write-Funktion, sondern Mikrosekunden.

Auf diesen Pfad wollte ich mich nicht begeben. Daher habe ich schweren Herzens die VirtualWire dann doch durch RCSwitch ersetzt. Damit funktioniert dann der Flitzer. Da ich weiterhin im Empfang sporadisch 0-Werte empfange, habe ich eine Plausibilität für den Servowinkel eingebaut. Der Servo wird garantiert nur mit den Winkeln 60 bis 120 angesteuert. Ein Winkel von 0 könnte für den Servo nicht gut sein.

Dirk, wie sind deine Erfahrungen mit den Empfangswerten aus der RCSwitch?

Noch eine Merkwürdigkeit. Die Hupe lässt sich einschalten, geht aber nicht mehr aus und der Flitzer reagiert auf kein weiteres Kommando. Ich reagiere jetzt auf das 'H' Kommando mit Hupe einschalten und starte einen Timer. Im Programmablauf wird der Timer geprüft und nach Ablauf wird die Hupe abgestellt. Das klappt!

Als nächstes wird das Licht akiviert.

Bis demnächst mit besten Grüßen
Klaus

Benutzeravatar
Dirk Fox
ft:pedia-Herausgeber
Beiträge: 1832
Registriert: 01 Nov 2010, 00:49
Wohnort: Karlsruhe
Kontaktdaten:

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Dirk Fox » 30 Okt 2020, 19:58

Hallo Klaus,

habe Deinen Beitrag erst jetzt gelesen: Mit der VirtualWire-Bibliothek habe ich auch begonnen und bin auf dasselbe Problem mit dem Timer1 gestoßen, daher die Verwendung der RCSwitch-Bibliothek. Die Reichweite habe ich nicht systematisch getestet; das könnte ich einmal nachholen...

Den Hupe-Fehler muss ich versuchen nachzustellen.
Eigentlich sollte sie beim nächsten Betätigen des Joystick-Knopfes wieder ausgehen.

Beste Grüße,
Dirk

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Bastelklausi » 30 Okt 2020, 22:39

Hallo Dirk,

danke für deine Antwort.

Mit der Reichweite der Fernsteuerung bin ich zufrieden. In der Wohnung klappt es ausgezeichnet. Ich meinte eher, dass nach dem Kommandobuchstaben sporadisch 0 als Wert auftaucht und ob du das eventuell auch registriert hast.

Das mit der Hupe war schon merkwürdig. Ich hatte einige Textoutputs als Debug, leider ohne Hinweis. Nach Drücken der Hupentaste am Sender, nachdem ich mit dem Joystick Switch in den Haltmodus gegangen war, empfing ich 'H1' am Flitzer und die Hupe ging an. Ein weiteres Drücken der Hupentaste hätte ein 'H0' zur Folge gehabt und die Hupe ausschalten müssen. Der Flitzer hat aber keinen Empfang registriert. Nach erneutem Betätigen des Joystick Switch am Sender hätte sich der Flitzer wieder bewegen müssen. Da kam aber auch kein Empfang. Erst nach Reset des Flitzers ging alles wieder bis zu dem Punkt, an dem ich die Hupe auslöste. Ich hatte ein kleines Testprogramm geschrieben, nur zum Auslösen der Hupe und stoppen der Hupe. Das ging einwandfrei. Dann kam ich auf die Idee, mit Empfang des Kommandos 'H', egal wie der Wert dahinter ist, die Hupe auszulösen und einen Timer zu starten. In der Hauptschleife frage ich den Timer ab (mittels millis()) und wenn der abgelaufen ist, schalte ich die Hupe ab. Das klappt ausgezeichnet.

So, die Lampen gehen auch alle. Blinken klappt; Front/Rücklicht gehen automatisch je nach Helligkeit an oder aus. Der Rückfahrscheinwerfer geht bei Rückwärtsfahrt an und bei Vorwärtsfahrt oder Stillstand aus. Das Bremslicht steuere ich auch über einen Timer an, weil es nur kurz flackerte wenn ich die Geschwindigkeit verringere. Es bleibt Timer gesteuert 500 ms an. Sieht besser aus.

Testfahrten durch die Wohnung habe ich einige gemacht. Ist schon echt cool, vor Allem mit der Beleuchtung. Da ich den Encodermotor benutze, ist das Fahrzeug recht langsam, lässt sich dafür aber gut beherrschen.

Als Nächstes wird dann der Tacho eingebaut.

Es ist ein schönes und interessantes Modell, Dirk!

Allen ein schönes Wochenende
Klaus

Anbei Fotos vom Sender und Flitzer (mit Frontscheibe in klar)
IMG_Flitzer_Sender.jpg
IMG_Flitzer_Sender.jpg (124.07 KiB) 7339 mal betrachtet
IMG_Flitzer_Sender.jpg
IMG_Flitzer_Sender.jpg (124.07 KiB) 7339 mal betrachtet
Dateianhänge
IMG_Flitzer.jpg
IMG_Flitzer.jpg (134.25 KiB) 7339 mal betrachtet

Benutzeravatar
Dirk Fox
ft:pedia-Herausgeber
Beiträge: 1832
Registriert: 01 Nov 2010, 00:49
Wohnort: Karlsruhe
Kontaktdaten:

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Dirk Fox » 31 Okt 2020, 12:37

Hallo Klaus,

der Flitzer sieht super aus, vor allem mit den klaren Fensterscheiben! Davon hatte ich nur ein paar alte, trübe...
Und Deine Modifikationen sind klasse.

Das von Dir geschilderte Hupen-Problem schaue ich mir demnächst mal an. Aber Deine Lösung mit dem Timer ist ohnehin viel besser. Bin ich nicht drauf gekommen - und hätte ich gleich so machen sollen. Wenn ich darf, setze ich das als Tipp auf die Webseite (natürlich mit Quelle).

Auch die sporadischen "0"-en nach den Kommandos versuche ich mal zu reproduzieren; mir ist bei meinen Tests kein solcher Effekt aufgefallen.

Das Bremslicht lasse ich beim Einparkassistenten auch länger leuchten; das habe ich im Sketch allerdings erst nach Erscheinen des Buches ergänzt. Es sieht tatsächlich merkwürdig aus, wenn das Bremslicht nur Sekundenbruchteile "flackert". Das ist übrigens ein interessanter Punkt: Bei Elektroautos muss man die starke Bremswirkung des Motors mit einem (länger als die Bremsung selbst leuchtenden) Bremslicht signalisieren, obwohl der Fahrer vielleicht nur den Fuß vom Gaspedal genommen hat. An die Betätigung des Bremspedals - wie beim Verbrennungsmotor - darf man das Bremslicht nicht mehr koppeln... In die nächste Auflage des Buchs kommt ein entsprechender Hinweis :-)

Zum Motor: Der neuere (aktuelle) Encodermotor ist etwas stärker und kleiner untersetzt; den Encoder selbst brauchst Du ja auch nur für die Geschwindigkeitsbestimmung und das eigenständige Einparken. Die Fernsteuerung allein funktioniert auch mit dem "starken schwarzen" (XM) Motor.

Und noch ein Tipp zum Tacho: Da hat letzte Woche einer unserer holländischen Fans einen Bug in meinem Sketch entdeckt - der Encoder-Pin muss im "INPUT_PULLUP"-Mode angesteuert werden. Siehe "Corrigenda" auf der Buch-Webseite.

Viel Spaß weiterhin!
Ich jedenfalls freue mich über weitere Berichte,
herzlicher Gruß,
Dirk

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Bastelklausi » 01 Nov 2020, 19:33

Hallo Dirk,

danke für die "Blumen". Die klaren Scheiben sind optisch super.
Meine Hupen Lösung kannst du sehr gerne auf die Webseite setzen. Bin gespannt, ob du das Hupenproblem nachvollziehen kannst.

Die sporadischen Nullen hatte ich auch schon in einem anderen Projekt mit der RCSwitch. Ich habe im Garten eine LGB mit beleuchteten Häusern. Damit dass Licht nur im Dunkeln angeht, übernimmt ein Arduino die Lichtsteuerung. Mit einem 433 MHz Sender übertrage ich einige Messwerte an eine Empfangsstation in der Wohnung. Da hatte ich schon die sporadischen Nullen. Daher bin ich auf die Virtual Wire gewechselt und die Fehler waren weg. Aber da brauche ich ja auch kein Servo ;) Bin gespannt, ob du das nachvollziehen kannst.
Dein Hinweis zum Bremslicht bei E-Autos ist interessant. Da hatte ich mir bisher keine Gedanken zu gemacht.
Den Encoder Motor lasse ich im Modell, da ich ihn für den Tacho verwenden möchte. Besten Dank für deinen Tipp zu dem Encoder Pin.

Buch und Kasten machen tatsächlich viel Spaß und weitere Berichte werden folgen.
Liebe Grüße
Klaus

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von MasterOfGizmo » 02 Nov 2020, 18:29

Ein kurzes Störsignal auf der Funkverbindung wird vom UART als Startbit erkannt. Wenn danach keine weitere Störung erfolgt und das Funksignal wieder "Ruhepegel" hat, dann werden acht Nullbits und ein neuntes Stoppbit erkannt. Das ganze ergibt dann ein gültiges Nullbyte.

Edit: Ihr sendet gar nicht mit dem UART .... dann vergesst meinen unqualifizierten Kommentar bitte. Tatsächlich scheint VirtualWire aber ein aufwändigeres Protokoll zu implementieren, was die höhere Robustheit erklärt
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Bastelklausi » 03 Nov 2020, 00:14

Hallo MasterOfGizmo,

kein Problem ;)
Ich vermute, dass VirtualWire eine Art Prüfsumme über die Daten ausrechnet und an die Daten anhängt. Der Empfänger berechnet die Prüfsumme über die empfangenen Daten und vergleicht sie mit der empfangenen Prüfsumme. Wenn die Prüfsummen nicht übereinstimmen, wird die empfangene Nachricht verworfen. Auf diese Weise werden Funkstörungen ausgeblendet. Bei Verwendung von RCSwitch müsste man das selber programmieren. Wie gesagt, nur eine Vermutung.

Viele Grüße
Klaus

Pirx
Beiträge: 56
Registriert: 01 Nov 2010, 10:01

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Pirx » 03 Nov 2020, 22:05

Hallo,

passt zwar nicht zum aktuellen Verlauf, aber zur Überschrift.

Hat schon jemand den Plotter in Betrieb? Habe ihn soeben gebaut, funktioniert auch so weit, nur die Position des Motor der horizontalen Achse ist nicht besonders stabil. Nach einiger Zeit dreht er sich, aber nimmt nicht mehr das große Zahnrad mit. Das ist nicht weiter schlimm, kann man sicher verstärken.
Was mich aber doch wundert ist, dass die Motoren so heiß werden. Man kann sie gerade noch anfassen, will sie aber nicht lange festhalten. Habe sie noch nicht gemessen, tippe mal auf 60°.

Ist das normal oder habe ich etwas übersehen? Ich habe das originale Adafruit Motorshield, das ich mit einem separaten Netzteil mit 12 V betreiben. Die Achsen sind beide super leichtgängig.

Viele Grüße
Pirx

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Bastelklausi » 13 Nov 2020, 17:37

Hallo zusammen,

mit dem Plotter habe ich noch nicht begonnen. Ich werde aber deine Erfahrungen im Hinterkopf behalten, Pirx, und berichten.

Ich hatte den Tacho im Flitzer eingebaut. Der funktioniert sehr gut, aber nur mit der Korrektur, die Dirk auf seiner Website veröffentlich hat:

pinMode(EncoderIRQPin, INPUT_PULLUP);

Statt Momentan- und Durchschnittsgeschwindigkeit per Taster umzuschalten (ist halt nicht so einfach bei laufendem Fahrzeug :lol: ) habe ich einfach eine zeitgesteuerte Umschaltung programmiert (Interval auf 100 ms reduziert):

Vor der loop:
#define Interval 100 // Länge des Messintervalls in ms
int displayvi = 50; // 50 mal Interval für die Anzeigenumschaltung

In der Loop:
if (displayvi > 0) displayvi--; // Counter runterzählen
else displayvi = 50; // Counter rücksetzen
if (displayvi > 20) display.showNumberDec(int(vi)); // Ausgabe Momentangeschwindigkeit auf LED-Display
else if (displayvi > 0) display.showNumberDec(int(va)); // Ausgabe Durchschnittsgeschwindigkeit auf LED-Display

Der Tacho zeigt dann ca. 3 s die Momentan- und 2 s die Durchschnittsgeschwindigkeit an.

Eleganter wäre ein zusätzlicher Taster auf dem Funksender, der das Kommando "T" wie Tacho sendet und auf der Empfängerseite wird das ausgewertet und die Anzeige umgeschaltet.

Schöne Grüße
Klaus

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Bastelklausi » 22 Nov 2020, 18:17

Guten Abend zusammen,

ich bin mal wieder einen kleinen Schritt weiter gekommen mit dem Flitzer. Habe halt noch viele andere "Projekte" ;)

Im RC-Sender habe ich einen zweiten Taster eingebaut und bei Druck auf diesen wird das Kommando "T" gesendet.
Das Flitzer Programm reagiert auf dieses "T" durch Ein-/Ausschalten des Tempomaten. Als Tempo wird ein Wert vorgegeben und ausschließlich vorwärts gefahren ( ich kenne kein Fahrzeug, das per Tempomat rückwärts fährt ;) ) .
Bei den ersten Tests habe ich ein Prellen beobachtet, mehrfaches Empfangen des "T" Kommandos; obwohl ich im Sender eigentlich eine Entprellung programmiert habe ( while (!digitalRead(...)) ).
Daher akzeptiere ich im Flitzer Programm das "T" Kommando nur nach Ablauf einer Zeitspanne von 1 s. Mit der millis() Funktion geht das prima ohne die delay() Funktion.:

Im Switch..Case Konstrukt zur Auswertung der RC Kommandos:
case 'T':
if (tempoblock == 0) {
tempodelay = millis();
tempoblock = 1;
if (tempomat == 0) {
tempomat = 1;
Backward = false;
Motor->setSpeed(TEMPOMATSpeed); Motor->run(FORWARD);
}
else {
tempomat = 0;
Backward = false;
Motor->setSpeed(0); Motor->run(FORWARD);
}
}
break;

Zeitliches "entprellen":
if ((millis() - tempodelay > TEMPO) && (tempoblock == 1)) tempoblock = 0;

Ist schon cool, per Tastendruck den Tempomaten ein-/ausschalten zu können. Als Nächstes käme die Erweiterung mit Abstandsmessung.

Beste Grüße
Klaus

Benutzeravatar
Dirk Fox
ft:pedia-Herausgeber
Beiträge: 1832
Registriert: 01 Nov 2010, 00:49
Wohnort: Karlsruhe
Kontaktdaten:

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Dirk Fox » 26 Dez 2020, 14:28

Hallo zusammen,

Arnoud van Delden hat den Flitzer mit einem PS2-Gamepad ausgestattet (siehe die Buch-Webseite und den Beitrag von Arnoud in der ft:pedia 4/2020).

Das ist eine geniale Fernsteuerung: Das Gamepad hat 16 Tasten (von denen acht auch auf "Druck" analog ausgewertet werden können, wenn auch nicht sehr zuverlässig) und zwei Joysticks - sowie einen Rückkanal: Zwei Vibrationsmotoren können z.B. vom "Spurverlasswarner" aktiviert oder beim Bremsen eingeschaltet werden. Sehr hohe Verbindungszuverlässigkeit (2,4 GHz-Band) und unfassbar viele Steuerungsmöglichkeiten (je nach gedrückter Tastenkombination können die Joysticks verschiedenste Motoren steuern).

Wer den Flitzer schon (oder noch) aufgebaut hat: Für unter 20 Euro gibt es die kabellosen PS2-Gamepads im Netz (habe gerade den von CSL getestet, funktioniert perfekt). Höchster Spielspaß ist damit garantiert...

Herzliche Grüße,
Dirk

Speerwerfer
Beiträge: 126
Registriert: 01 Apr 2018, 09:32
Wohnort: Oldenburger Münsterland

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Speerwerfer » 28 Dez 2020, 19:12

Hallo Dirk,

Vielen Dank für den Tipp. Das ist ne coole Sache. Und man bekommt einen Clone des Controllers auch für um die 10 Euro bei eBay. Ich habe mir mal einen bestellt und werde berichten ...

VG
Martin
VG
Martin

Speerwerfer
Beiträge: 126
Registriert: 01 Apr 2018, 09:32
Wohnort: Oldenburger Münsterland

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Speerwerfer » 06 Jan 2021, 21:43

So, heute war der Controller in der Post. Und was soll ich sagen: er funktioniert am Arduino :D

Ich habe diesen hier für gute 10 Euro gekauft: ebay.de

Das einzige was noch nicht klappt: Das Feedback per Vibration. Der Controler hat einen Vibrationsmotor verbaut, aber von der PS2X Lib wird der nicht erkannt - aber ich schaue mal nach, ob da noch was geht. Mir fehlt das Feedback im Moment nicht.

Das ist eine richtig coole Fernsteuerung!!!
VG
Martin

Benutzeravatar
Dirk Fox
ft:pedia-Herausgeber
Beiträge: 1832
Registriert: 01 Nov 2010, 00:49
Wohnort: Karlsruhe
Kontaktdaten:

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Dirk Fox » 07 Jan 2021, 00:26

Hallo Martin,
Speerwerfer hat geschrieben:
06 Jan 2021, 21:43
Das einzige was noch nicht klappt: Das Feedback per Vibration.
bei meinem PS2-Controller musste ich im Setup() die Vibration erst aktivieren mit
ps2x.enableRumble();
Vielleicht hilft das auch bei Dir?

Beste Grüße und viel Spaß damit,
Dirk

jona2004
Beiträge: 149
Registriert: 10 Jun 2011, 22:30

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von jona2004 » 23 Jan 2021, 19:02

Hallo,
Es gibt ja mehrere Threads zu dem Buch und dem Baukasten, wenn dieses Subthema irgendwo anders besser aufgehoben ist, bitte verschieben.
M.E. gibt es bei einigen Delta-Roboter Scripts Fehler oder zumindestens Unschönheiten. Es handelt sich um die verschiedenen Such- und Linearisierungsunterprogramme. Als Beispiel:

Code: Alles auswählen

void R_zu_phi() { 
  for (byte i = 0; i < 3; i++) {
    byte j = 0;
    while ( (R[i] > R_lin[i][j]) && (j < 16) ) j++;
    phi[i] = (phi_lin[j] - phi_lin[j-1]) / (R_lin[i][j] - R_lin[i][j-1])
              * ( R[i] - R_lin[i][j-1] ) + phi_lin[j-1];
  }
}
Zwecks besserer Lesbarkeit habe ich die äussere Schleife über die 3 Achsen und den entsprechenden index i entfernt.

Code: Alles auswählen

byte j = 0;
while (R > R_lin[j] && j < 16)
	j++;
phi = (phi_lin[j] - phi_lin[j-1])/(R_lin[j]) - R_lin[j-1]) * (R - R_lin[j-1]) + phi_lin[j-1];
Die Felder phi_lin[], R_lin[] haben 18 Einträge d.h. die Indices laufen von 0 ...17.
In der abweisenden while Schleife wird der erste Tabellenwert gesucht, der grösser als R ist.
Problem 1: Wenn R kleiner als der erste Tabellenwert[0] ist wird mit j=0 in die folgende Berechnung gegangen und auf das Feld[j-1 = -1] zugegriffen. Das geht i.A. nicht gut.
Problem 2: das letzte intervall (16, 17) wird nicht ausgenutzt da, wegen j < 16 die Schleife spätestens mit j = 16 verlassen wird und damit der maximale Index=17 nicht in der Berechnung vorkommt.
Vorschlag meinerseits:

Code: Alles auswählen

byte j = 1;	// Problem #1: falls R < phi_lin[0] ist kommt es zu einer extrapolation links vom ersten Wert.- sollte harmlos sein
while (R_lin[j] < R && j < 17) // Problem #2: "17" Hier wird auch das letzte Intervall ausgenutzt. (Ersten Vergleich rumgedreht, m.E. lesbarer)
	j++;
phi = (phi_lin[j] - phi_lin[j-1])/(R_lin[j]) - R_lin[j-1]) * (R - R_lin[j-1]) + phi_lin[j-1]; //unverändert
Ich habe heute nochmal die Skripte frisch vn der Webseite geholt
PS: Aus Spass baue ich die Skripte mit RoboPro auf dem TX/TXT nach. Geht ganz gut.
Des ist spannend dem DeltaRoboter zuzuschauen. Die Hardware muss etwas mit Liebe behandelt werden um gute Ergebnisse zu erzielen.

Grüße Joachim

Benutzeravatar
geometer
Beiträge: 595
Registriert: 28 Jan 2011, 12:24
Wohnort: Bochum
Kontaktdaten:

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von geometer » 24 Jan 2021, 10:53

Hallo Joachim,

jona2004 hat geschrieben:
23 Jan 2021, 19:02
Es ist spannend dem DeltaRoboter zuzuschauen.
das freut uns!

Vielen Dank für Deine Fehlermeldung. Wie Du im Prinzip schon geschrieben hast, taucht der Fehler in den zwei Umwandlungsroutinen

widerstand_winkel() und winkel_widerstand()

auf. Die beiden Spiele-Anwendungen "Solitaire" und "Tic-Tac-Toe" sind also gar nicht betroffen.

Der Fehler betrifft die Abschnitte ab "Kinematik: Wo ist die Hand?" Wie Du im Prinzip schon selbst geschrieben hast, besitzt der Fehler auch dort so gut wie keine praktische Relevanz, weil die Delta-Hand sich in realen Problemen eigentlich nicht in den extremen Bereichen der Arbeitsfläche befindet. Der reine Anwender wird davon also eher nichts bemerken. Umso besser, dass Du mitgedacht hast!

"Unschön" ist daher wohl das richtige Wort. Unschön ist vor allem, dass theoretisch auf einen Feldwert mit negativem Index zugegriffen werden könnte, wenn auch nur lesend.

Wir werden den Fehler natürlich auf der Internetseite korrigieren.
Die Hardware muss etwas mit Liebe behandelt werden um gute Ergebnisse zu erzielen.
Kannst Du das etwas konkretisieren? Das könnte für Verbesserungen hilfreich sein. Ich selbst hatte auf mehreren Ausstellungen so gut wie keine Probleme. Einmal musste ich nach dem Transport die Positionsdaten der Mulden neu einmessen und irgendwann zwischendurch musste ich ein U-Getriebe auswechseln. Das hätte ich bei den vielen tausend harten Richtungswechseln aber eigentlich häufiger erwartet.

Viele Grüße

Thomas

Benutzeravatar
geometer
Beiträge: 595
Registriert: 28 Jan 2011, 12:24
Wohnort: Bochum
Kontaktdaten:

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von geometer » 24 Jan 2021, 11:12

Hallo Joachim,

wenn Du uns die RoboPro-Programme zur Verfügung stellst, werden wir sie gerne auf die Internetseite setzen. Evtl. wäre das auch etwas für einen ft:pedia-Beitrag, nehme ich an.

Viele Grüße

Thomas

jona2004
Beiträge: 149
Registriert: 10 Jun 2011, 22:30

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von jona2004 » 24 Jan 2021, 17:48

Hallo Thomas,
Danke fuer die ausführliche Antwort.
Zu der Suchfunktion (while Schleife) habe ich noch eine Frage. Das 18te Element wird ja laut Buch dadurch ermittelt, dass der Arm bis zum oberen Anschlag hochgezogen wird. Man kann jetzt der Argumentation wie beim ersten Eintrag [0] folgen, dass dieser Wert auf jeden Fall ausserhalb des möglichen Bereichs liegt. Dann würde aber die Schleife auch ohne "j < 16" verlassen. Das 18te element [17] wird nie gebraucht.
Also kann man es auch weglassen, muss dann aber j <16 in der Schleife lassen.
Sorry das ist sicher etwas "picky". Wollte nur sicher gehen, dass ich nichts verpasse.
Da habe ich auch noch einen kleinen Verbesserungsvorschlag: Wäre es möglich auf das Messpapier auch die x-y Koordinaten zu drucken?

Zu Thema "liebevoll".
Da die Hebel recht gross sind, muss man den Aufbau genau ausrichten und wie auch beschrieben besonders die Schulter steif machen.
Deshalb habe ich noch was dazugebaut oder verändert.
1 - Am Schultergelenk den Winkelstein 10x15x15 gegenüber dem Motor Durch einen V-Stein 15x15x15 ersetzt. Dieser ist wesentlich steifer.
Auf der Motorseite geht das leider nicht.
2 - Die beiden senkrechten Winkelträger 120 mit einer i-strebe 45 und 4 Riegeln verbunden. Da hat sich bei mir schonmal was verschoben.
3 - Ich hatte die langen Potis im Bausatz. Die Verbindung BS7.5 mit der Bauplatte 30x30 ist recht rutschig. Auf der Innenseite haben ich dann noch einen Anschlag von oben her mit 2x BS7.5 plus Bauplatte 30x15x5 1 Zapfen und einen Verbinder 15 gebaut. Die Platte 30x30 lässt sich leider schlecht rechts und links einbauen. Damit kann ich sie aber wenigstens an den Anschlag schieben. Auf der Aussenseite ist mir wegen des Motors noch nichts eingefallen um die Platte komplett einzuklemmen.
4 - Oben habe ich den Effekt, dass die Mitte (60°, 3 Nuten) leicht durchhängt und auch etwas federt. Das Kippmoment wird ja auch nur von den Rundbögen und den Zapfen vom BS15 abgefangen. Ich habe also noch 3 Speichen eingezogen bestehend aus jeweils:
2x Winkelstein 60° zwei Zapfen. Die Zapfen werden in die Nuten der bestehenden Speichen soweit eingeschoben, dass die beiden anderen Zapfen 15mm auseinanderstehen. Dazwischen werden die 3x BS30 als Speiche eingeschoben. In den BS15 am Aussenrand habe ich zu Anfang einen BS5 geschoben, Und einen zweiten BS5 ganz zum Schluss zwischen BS30 und BS5 gesetzt. Das ist etwas fummelig, aber wenn alles sauber ausgerichtet ist, wird die Struktur deutlich steifer.

Zum 3ten Thema Robopro.
Die Programme kann ich gerne, wenn sie denn fertig sind, zu Verfügung stellen.
Ich arbeite "unten" hoch. Als wichtigste Teile sind "Teach-in" und "gehe_zu" fertig. Teach-in benutzt die RoboPro Liste mit 3 Einträgen, die in einen .cvs File gespeichert werden.
Diese köennen dann auch wieder mit 3 Threads (1er je Motor) abgespielt werden.
Als nächstes steht die gehe_xyz an. Die Arithmetik muss ich noch debuggen. Sowas ist recht zäh in Robopro.
Als naechste Schritte stehen dann das Ausmessen der Potis an.
Auch überlege ich ob ich statt des Nunchuk, die IR Fernsteuerung, die man sehr schön aus Robopro abfragen kann, nutzen könnte.
"Reines ft" also.
Leider habe ich nur am Wochenende etwas Zeit.

Grüße Joachim

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Modelle aus Baukasten und Buch Fischertechnik-Roboter mit Arduino

Beitrag von Bastelklausi » 04 Feb 2021, 17:55

Hallo zusammen,

nach dem Flitzer habe ich mich dem Plotter zugewandt. Der mechanische Aufbau ist fertig. Die Schrittmotoren sind angeschlossen. Hier ist es wichtig, auf Dirks Webseite in die Corrigenda zu schauen. Die Verdrahtung der Schrittmotoren mit dem Adafruit Motor Shield ist im Buch nicht korrekt. Die Verdrahtung in den Corrigenda ist richtig und funktioniert. Die Endlagentaster und der Starttaster sind auch schon angeschlossen.

Bislang habe ich nur das Programm "Bestimmung Plotbereich" aufgespielt. Damit kann man prima testen, ob die Schrittmotoren richtig angesteuert werden und ob die Endlagentaster ihre Funktion erfüllen.

Was mich erstaunt hat, ist das Gewicht der Schrittmotoren. Ich habe die Motoren aus der ersten Auflage des Baukastens zum Buch. Nach meinem Eindruck ist eine zusätzliche Stabilisierung der Mechanik notwendig.
Stabilisierung Schrittmotor
Stabilisierung Schrittmotor
IMG_Plotter_Stabi.jpg (162.7 KiB) 5853 mal betrachtet
Was mich auch erstaunt hat, ist der Strombedarf. Als Spannungsquelle nutze ich den FT Akku (8,4 V, 1800 mAh). Etwas naiv hatte ich anfangs zwei kurze Verbindungskabel aus einem Arduino Starterset verwendet. Diese Kabel haben zwei praktische Spitzen, die man schön einfach in die Motor Shield Terminals einstecken und festschrauben kann. Am anderen Ende kommt dann ein FT Stecker dran. Die wurden innerhalb von Sekunden glühend heiß! Zwei Drähte, die sich berührten, verschmolzen mit ihren Isolierungen miteinander. Ich habe dann die beiden Drähte entsorgt und wesentlich dickere genommen (stammen von meiner LGB-Anlage und können schon ein paar Ampere vertragen).

In einem Post von Pirx ist die Rede davon, dass die Schrittmotoren sehr heiß werden. Bei meinen bisher eher kurzen Versuchen zum Plotbereich habe ich schon bemerkt, dass sie warm werden. Ich werde es beobachten...

Als Nächstes werden der Card Reader angeschlossen und das Servo justiert.

Beste Grüße
Klaus

Antworten