PID Ball
ArchivLaTeXLinksLiteraturMechanikNewsSoftware

inv_Pendel 
rot_Pendel 
ewiges Pendel 
Links 
PID Ball 
Magnet 
Wetter1 
Wetter2 
WLAN 
[Home][Mechanik][PID Ball]

Eine Kugel auf einer Platte balancieren

balancierende Kugel auf resistiven Touchscreen siehe:

https://create.arduino.cc/projecthub/davidhamor/ball-and-plate-c48027

Unter dem Stichwort "Ball and Plate PID Control " findet man im Internet und auf YouTube eine Reihe von Aufbauten, bei der ein Ball oder eine  Stahlkugel auf einer kardanisch aufgehängten Platte balanciert wird. Die Position der Kugel wird dabei über einen resisitiven Touchscreen erfasst. Die Platte wird über Servomotoren oder Schrittmotoren in ihrer Lage gesteuert. In vielen Beispielen wird der Arudino Mega als Controller benutzt. In diesem Zusammenhang wird auch der Aufbau einer Stewart Platform erläutert, eine Ebene die in 6 Freiheitsgraden bewegt  werden kann (x, y, z und die drei Rotationsachsen).  z.B. Arduino Controlled Rotary Stewart Platform  In der Linksammlung finden sich weitere Aufbaubeispiele, teilweise sehr detailiert wie hier z.B.: http://www.instructables.com/id/3DOF-Ball-on-Plate-Using-Closed-Loop-Stepper-Motor/

Der folgende Aufbau orientiert sich an dem oben dargestellten Beispiel mit zwei Servomotoren. Alles wird auf einer Grundplatte aus ALU 200x250x3mm befestigt. Der Touchscreen wird von einer kleineren, quadratischen ALU Platte 130x130x2mm getragen. Unter der Platte befindet sich mittig ein Kardangelenk. Das Gelenk wird von einem 100x30x30 mm ALU Profil gestützt. Die zwei Servomotoren sind auf der Grundplatte um 90 Grad versetzt montiert. Über je eine 100mm lange M3-Gewindestange, zwei Kugelgelenken  und einem Blechwinkel kann die ALU Platte in der x- bzw. y- Achse geschwenkt werden.  

Jede Servoachse wird von einem eigenen PID Regelkreis gesteuert. Es wird die PID Library für den Arduino genutzt. Die Auswertung der Touchscreen-koordinaten wir über die gleichnamige Arduino Bibliothek realisiert. Für den resistiven 4wire Touchscreen sind mehrere Größen handelsüblich: 7", 8" 10.2", 15.1" wobei der Preis entsprechend ansteigend ist. Die beiden Servomotoren müssen aus einem separaten 5Volt / 1A Netzteil gespeist werden. Dazu kann der für die Breadboardversorgung bekannte Spannungswandler MB102 zum Einsatz kommen.

Bei der Inbetriebnahme sind einige Dinge zu beachten. Zunächst sollte man den korrekten Innenwiderstand des Touchscreen in x-Richtung mit einem Vielfachmesser / Ohmmeter ausmessen. Bei einem 10.2" Modell sind es 505 Ohm. Bei kleineren Modellen ist der Widerstand entsprechend niedriger (300 Ohm). Dieser Wert muss am Programmanfang korrekt eingetragen werden:

#define Rx 505  //  Widerstandswert in Ohm vom Touchscreen in X-Richtung gemessen

TouchScreen ts = TouchScreen(XP, YP, XM, YM, Rx);

Im zweiten Schritt testet man die korrekte Funktion des Touchscreen und ermittelt die minimalen und maximalen x- bwz. y-Koordinaten mit dem Testprogramm calibrate.ino .  Bei laufendem Programm werden die x- und y- Koordinaten auf dem seriellen Monitor ausgegeben, während man mit einer Stahlkugel langsam die Ränder des Touchscreen abrollt. Die so ermittelten Werte werden in das  Programm eingetragen:

// Koordinaten Touchscreen

TSPoint p;

double xmin = 65.0;

double xmax = 950.0;

double   xm = (xmax - xmin)/2.0;  // x-Mitte vom Touchscreen

double xLength = 266.0;   // Breite vom Touchscreen in mm bei 10.2"

double ymin = 110.0;

double ymax = 915.0;

double   ym = (ymax - ymin)/2.0;  // y-Mitte vom Touchscreen

double yLength = 161.0;  // Höhe vom Touchscreen in mm bei 10.1"

Das Testprogramm setzt die Servomotoren in der Setup Routine auf 90 Grad Position. Die Servohebel sollten dann waagerecht stehen, so wie im Bild oben dargestellt. Die M3 Gewindestangen sind nun soweit in die Kugelgelenke zu schrauben, dass der Touchscreen möglichst waagerecht in x- und y- Richtung steht. Dazu muss evtl. gleichzeitig das Kardangelenk in der Höhe justiert werden. Es ist auf einem Innenwinkel 30 B-Typ Nut 8 am ALU Profil befestigt und kann so in der Höhe verschoben werden.

Nun müssen wir noch die korrekte Drehrichtung der Servos in Bezug auf die PID Regler prüfen. Als Startsollwert ist der Mittelpunkt der Platte vorgegeben. Wenn wir mit dem Finger die Platte nun rechts vom Mittelpunkt berühren muss der Servo die Platte zur linken Seite hin abkippen. Tut er genau das Gegenteil müssen wir die PID Controller im Reserve-Mode initialisieren (siehe Kommentar im Programm). Analog muss sich die Platte bei Berührung oberhalb des Mittelpunktes in die entgegengesetzte Richtung bewegen. Im Programm müssen die Kommentarzeichen entsprechend geändert werden.

// PID myPIDX(&InputX, &OutputX, &SetpointX, Kpx, Kix, Kdx, DIRECT);

PID myPIDX(&InputX, &OutputX, &SetpointX, Kpx, Kix, Kdx, REVERSE);    // Arbeitsrichtung vom X-Controller entgegengesetzt

PID myPIDY(&InputY, &OutputY, &SetpointY, Kpy, Kiy, Kdy, DIRECT);

//PID myPIDY(&InputY, &OutputY, &SetpointY, Kpy, Kiy, Kdy, REVERS);  // Arbeitsrichtung vom Y-Controller entgegengesetz

Die verwendete Kugel darf nicht zu leicht sein, da der Touchscreen einen gewissen Druckpunkt zur korrekten Arbeitsweise benötigt. Eine Stahlkugel mit 20mm Durchmesser (ca.30g) war die untere Grenze. Besser funktioniert es mit einer 25mm Kugel (50g). Bei den Servomotoren rate ich von Billigprodukten (ebay 3.50 €) ab. Das unten gezeigte Modell für 17.-€ ist qualitativ sehr gut.

Programmcode: PID_Ball3.ino

Arduino PID Libray PID_v1

Arduino Servo Bibliothek

Arduino 4wire-Touchscreen Bibliothek

Stückliste:

Arduino MEGA 2560 R3

2 x  DS3218 RC Servo  mit Servohebel

 

4 x Kugelgelenk M3 mit Absatz

20 x Gewindestange 100 x 3mm

10.2" 4 wire Touchscreen

Nut6-Winkel zur Befestingung der Servos auf der Grundplatte

5mm x 4mm Wellenkupplung flexibel Kardan

 

ALU Profil 30 B-Typ Nut8

20 x Gewindestange 100 x 3mm

Breadboard Power Supply MB102 3.3V / 5V für Arduino Netzteil

[Home][Archiv][LaTeX][Links][Literatur][Mechanik][News][Software]

Copyright (c) 2004, Ingmar Rubin, Alle Rechte vorbehalten.

loesungen@matheraetsel.de