ArduinoIDE/ftduino

Community-Firmware (cfw), Selbstbaucontroller (TX-Pi, ftduino, usw.), usw.
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
herbert1
Beiträge: 12
Registriert: 16 Okt 2019, 15:34

ArduinoIDE/ftduino

Beitrag von herbert1 » 16 Okt 2019, 16:14

Hallo zusammen,
ich baue das Hochregallager 9V und möchte es mit dem ftduino ansteuern.
Nun möchte ich den Zähler des ft Encodermotors auslesen und mir zusätzlich den Wert auf auf dem seriellen Monitor ansehen.
Der Wert so je nach Drehrichtung der Motors vorwärts oder rüchwärts Zählen, also so wie eine Achse. Die Positionen würde ich
dann über einen Vergleich anfahren.
Ist für mich aber alles neu. Habe mit dem Beispielprogramm "MotorBrake" schon probiert, aber bekomme es aber nicht hin.
Hat evt. jemand einen Programmcode für mich?

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

Re: ArduinoIDE/ftduino

Beitrag von MasterOfGizmo » 17 Okt 2019, 11:23

Die Encoder der fischertechnik-Motoren liefern keine Richtungsinformation. Daher ist es prinzipiell kaum möglich, die Position über mehrere Bewegungen zu verfolgen und daher führt die ftDuino-Bibliothek auch keinen entsprechenden Wert mit.

Wenn der Motor immer aus eigener Kraft bewegt wird (also außen z.B. niemand mit der Hand am Motor dreht), dann kann man ggf. davon ausgehen, dass er sich in die Richtung dreht, in der er auch gerade angetrieben wird. Dann kann man die Zählerwerte im Sketch passenbd addieren und subtrahieren. Aber völlig automatisch geht das mit den Encodern der ft-Motoren nicht.

Ein Beispiel-Sketch für das Hochregallager wird bei der ftDuino-Installation unter Beispiele/Ftduino/HighLevelRack mitgeliefert.
Zuletzt geändert von MasterOfGizmo am 17 Okt 2019, 11:29, insgesamt 1-mal geändert.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

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

Re: ArduinoIDE/ftduino

Beitrag von MasterOfGizmo » 17 Okt 2019, 11:28

Man muss übrigens auch aufpassen, dass man den Zähler bei stehendem Motor nicht auswertet. Ein weiterer Nebeneffekt der simplen ft-Encoder ist nämlich, dass bei einer ungünstigen Motorstellung "zwischen zwei Schritten" haufenweise fälschliche Impulse vom Motor erzeugt werden können. Es gibt sogar 24V-Motoren von ft mit "richtigen" Encodern, die solche Probleme nicht haben. Aber die haben dann einen zusätzlichen zweiten Encoderausgang und sind leider nicht Bestandteil der normalen Baukästen.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Karl
Beiträge: 2212
Registriert: 24 Sep 2016, 17:28

Re: ArduinoIDE/ftduino

Beitrag von Karl » 17 Okt 2019, 13:23

Viele asiatische Getriebemotore haben einen Encoder "on board".
Vorschlag: Motor mit Getriebe wegschmeissen und irgendwie den Encoder
für Fischertechnik passend machen. Haben sogar Richtungserkennung.
Letztendlich viel billiger als Industrielösungen.
https://ecksteinimg.de/Datasheet/MO0107 ... blatt1.pdf
Nehme an, höhere Auflösung pro Umdrehung durch diametral magnetisierte Ring-
oder Rundmagnete.
Alte "Computermäuse ja, die mit der Kugel unten, hatten optische Encoder
mit Richtungserkennung. Meist sogar deren zwei und waren relativ preisgünstig.
Habe allerdings solch ein "Human-Interface" schon lange nicht mehr gesehen.

Nachtrag:
Ähnliches haben die Faulhaber- oder Maxxon- Motore angebaut. Geber sind nicht von Faulhaber selbst.
Gibt es von der Herstellerfirma auch als Teilesatz für entsprechend selbst konstruierte
Mechaniken. Leider weiß ich den Hersteller und die Preise nicht mehr.
Habe mal ein bischen geguugelt:
So sah erinnerungsmäßg der Teilesatz aus. Ob von Megatron oder nicht, ???
https://www.pressebox.de/pressemitteilu ... xid/911446
Könnnte sein, diesen Teilesatz als fertiges Modul zum Anbau statt mit 500 Imp/U mit 1024 Imp/U :
https://www.megatron.de/produkte/optisc ... r-spm.html
Allerdings u. a. mit 6mm, sollte kein Problem darstellen.

herbert1
Beiträge: 12
Registriert: 16 Okt 2019, 15:34

Re: ArduinoIDE/ftduino

Beitrag von herbert1 » 17 Okt 2019, 18:32

Danke Euch erst Mal.
Ich bin in der SPS Programmierung und verwende die Industriedrehgeber für schnelle Zäherkarten von
Siemens und Beckhoff. Nun möchte ich mich privat mit der ArduinoIDE etwas beschäftigen.
Das Beispielprogramm HighLevelRack ist viel zu kompliziert für mich und deshalb probierte ich die MotorBrake.
Dort werden die Zählimpulse bei gebremsten und ungebremsen Motor ausgegeben.
Wollte nun das Programm so anpassen, das bei Linkslauf der Zähler aufwärts und bei Rechtslauf abwärts zählt
und ich dann immer die Position habe.
Soll den Wert auch im seriellen Monitor anzeigen. Bekomme ich aber nicht hin und wäre für ein Beispiel dankbar.

P.S.
Hätte auch gern mit RoboPro angefangen und bin auch an "ftduino und RoboPro" von "fishfriend" sehr interessiert.

Benutzeravatar
fishfriend
Beiträge: 1808
Registriert: 26 Nov 2010, 11:45

Re: ArduinoIDE/ftduino

Beitrag von fishfriend » 17 Okt 2019, 18:52

Hallo...
Die Geber verhalten sich scheinbar ähnlich wie alten Maussensoren.

Ich kenne da noch Geber, die eine Strichscheibe haben und über Profibus die Position ausgeben.
Bei anderen kann man zusätzlich über einen Taster die Nullposition festlegen.
Der Vorteil ist die Nullposition die immer gleich ist. Es gibt da keine Verschiebung oder vergessene Schritte.

Mit freundlichen Grüßen
fishfriend
Holger Howey

PS Ja das Projekt geht noch weiter.
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro

herbert1
Beiträge: 12
Registriert: 16 Okt 2019, 15:34

Re: ArduinoIDE/ftduino

Beitrag von herbert1 » 22 Okt 2019, 13:13

Mit diesem Programmcode kann ich die Nachlaufimpulse des bremsenden Motors auslesen.
Aber wie kann ich die komplett gefahrene Strecke auslesen?
Kann evt. jemand für mich den Programmcode ergänzen?

------------------------------------------------------------------------------------------
//TXT-Encodermotor an M4 für drei volle Umdrehungen starten
ftduino.motor_counter(Ftduino::M4, Ftduino::LEFT, Ftduino::MAX, 190);
// warten bis der Motor stoppt
while(ftduino.motor_counter_active(Ftduino::M4));
// etwas länger warten, um dem Motor Zeit zum Nachlaufen zu geben
delay(500);
// Zählerstand ausgeben
Serial.println(ftduino.counter_get(Ftduino::C4));
----------------------------------------------------------------------------------------------

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

Re: ArduinoIDE/ftduino

Beitrag von MasterOfGizmo » 26 Okt 2019, 16:40

herbert1 hat geschrieben:
22 Okt 2019, 13:13
Mit diesem Programmcode kann ich die Nachlaufimpulse des bremsenden Motors auslesen.
Aber wie kann ich die komplett gefahrene Strecke auslesen?
Die Gesamtstrecke ist 190 + Nachlaufimpulse. Tatsächlich setzt die ftDuino-Bibliothek den Zähler bei Start auf -190 und stoppt den Motor, wenn der Zähler 0 passiert. Und das wo er dann tatsächlich stehen bleibt zzgl. der gefahrenen 190 ist die Gesamtstrecke.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

herbert1
Beiträge: 12
Registriert: 16 Okt 2019, 15:34

Re: ArduinoIDE/ftduino

Beitrag von herbert1 » 27 Okt 2019, 10:18

Danke für die Antwort.
Ich komme mit dem auslesen des Encoders nicht klar.
Ich möchte gern wenn der Motor läuft den Encoderwert lesen und dann in einer Variablen speichern,
am seriellen Monitor ausgeben und beim nächsten Motorlauf den Wert dazu addieren.
Komme aber mit dem Programmcode nicht klar.
Bekomme auch die Fehlermeldung (Mehrere Bibliotheken wurden für "FtduinoSimple.h" gefunden).
Kannst Du den Programmcode für mich mal korrigieren?

// ftduino.init();

bool M1_faehrt = false;
int x_move;
int x_pos = 0;

void setup() {
// Die Setup-Funktion wird einmal bei Start des Systems ausgeführt
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);

// diee Bitrate ist im Falle des ftDuino bedeutungslos
Serial.begin(9200); // seriellen Port öffnen
while(!Serial);

//ftDuino-Timer, Interrupts etc starten
//ftduino.init();
}
void loop() {

if (ftduino.input_get(Ftduino::I1)){

M1_faehrt = true;
Serial.println("M1 An ...");
// Motor starten
ftduino.motor_set(Ftduino::M1, Ftduino::LEFT);
// interne rote LED einschalten
digitalWrite(LED_BUILTIN, true);
}
else {
ftduino.motor_set(Ftduino::M1, Ftduino::OFF);
// interne rote LED einschalten
digitalWrite(LED_BUILTIN, false);
M1_faehrt = false;
}

if (M1_faehrt){
ftduino.counter_set_mode(Ftduino::C1, Ftduino::C_EDGE_RISING);
ftduino.counter_clear(Ftduino::C1);

x_move = ftduino.counter_get(Ftduino::C1);
Serial.println (x_move);

// aktualisiere aktuelle X-Position
if(x_move > 0) x_pos += x_moved;
if(x_move < 0) x_pos -= x_moved;
}

}

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

Re: ArduinoIDE/ftduino

Beitrag von MasterOfGizmo » 30 Okt 2019, 13:40

So übersetzt er's. Ob's auch irgendwas sinnvolles tut habe ich nicht probiert.

Es macht aber wenig Sinn, Programme zu schreiben und von anderen debuggen zu lassen. Genau das ist die Fähigkeit, die man lernen muss. Das ist wie beim Autofahren. Da nützt es einem auch wenig, wenn man den Fahrlehrer fragt, ob er einen nicht bitte mal eben ans Ziel fahren kann.

Code: Alles auswählen

#include <Ftduino.h>

// ftduino.init();

bool M1_faehrt = false;
int x_move;
int x_pos = 0;

void setup() {
// Die Setup-Funktion wird einmal bei Start des Systems ausgeführt
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);

// diee Bitrate ist im Falle des ftDuino bedeutungslos
Serial.begin(9200); // seriellen Port öffnen
while(!Serial);

//ftDuino-Timer, Interrupts etc starten
//ftduino.init();
}
void loop() {

if (ftduino.input_get(Ftduino::I1)){

M1_faehrt = true;
Serial.println("M1 An ...");
// Motor starten
ftduino.motor_set(Ftduino::M1, Ftduino::LEFT, Ftduino::MAX);
// interne rote LED einschalten
digitalWrite(LED_BUILTIN, true);
}
else {
ftduino.motor_set(Ftduino::M1, Ftduino::OFF, Ftduino::MAX);
// interne rote LED einschalten
digitalWrite(LED_BUILTIN, false);
M1_faehrt = false;
}

if (M1_faehrt){
ftduino.counter_set_mode(Ftduino::C1, Ftduino::C_EDGE_RISING);
ftduino.counter_clear(Ftduino::C1);

x_move = ftduino.counter_get(Ftduino::C1);
Serial.println (x_move);

// aktualisiere aktuelle X-Position
if(x_move > 0) x_pos += x_move;
if(x_move < 0) x_pos -= x_move;
}

}
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

herbert1
Beiträge: 12
Registriert: 16 Okt 2019, 15:34

Re: ArduinoIDE/ftduino

Beitrag von herbert1 » 31 Okt 2019, 16:49

Vielen Dank für Deine Hilfe.

Antworten