Energie-
Verbrauch
Bewegungs-
melder
ioBroker-DHT22
ioBroker-
Laufschrift
ioBroker LED-
Thermometer
ioBroker-OLED
ioBroker
Multi-OLEDs
ioBroker
Mini-Mülltonne
Ball on Plate
Sonstige
Basteleien
Ball on Plate (Kugel-Balancer) |
https://youtu.be/jxyczrEdQm0 Hinweis: Die leichten Schwankungen des Touchscreens in y-Richtung werden durch ein geringes Spiel des Kardangelenkes (s.u.) verursacht. |
Hier geht es um eine mechanische Spielerei, einen "Kugel-Balancierer", neudeutsch auch "Ball on Plate" genannt. Es ist ein Nachbau der auf diesen beiden Webseiten PID Ball und Ball and Plate vorgestellten Balancier-Platten. Das Grundprinzip: Ein auf einem Kardangelenk montierter Touchscreen misst die Position einer Stahlkugel in x- und y-Richtung. Diese Koordinaten werden an einen Arduino-Nano übergeben, der seinerseits die Koordinaten in Drehwinkel für 2 Servomotoren umrechnet. Die Drehwinkel der beiden Servos werden über 2 Software-PID-Regler kontinuierlich nachgesteuert, bis die Kugel still an ihrer Position liegt. Diese kontinuierliche Nachregelung ist erforderlich, da sonst die Kugel wegrollen und von der Platte fallen würde. Es können aber auch softwaremäßig andere Positionen angesteuert werden, bzw. ganze Positionsfolgen erzeugt werden, so daß die Kugel z.B. kreisförmig bewegt werden kann. Damit die Kugel entspr. beschleunigt, bzw. abgebremst wird, sind die beiden PID-Regler (x,y) notwendig. Kurze Entfernungen zwischen 2 Positionen brauchen nur eine geringe Beschleunigung, bzw. geringes Abbremsen, während gößere Distanzen höhere Beschleunigung, bzw. stärkeres Abbremsen erfordern. |
![]() |
Mein Nachbau besteht aus einem 8" resistivem Touchscreen (4 Wire = 4 Anschlußdrähte), der zentral auf einer mittels 3D-Drucker ausgedruckten Platte mit doppelseitigem Klebeband fixiert ist. Die Platte ist auf ein Kardangelenk geschraubt. Der untere Teil des Kardangelenkes wiederum ist auf einer 8 mm Gewindestange (eine dünnere hätte es wahrscheinlich auch getan) befestigt. Diese ganze Konstruktion ist auf einem höhenverstellbaren Winkel befestigt (ebenfalls 3D-Druck), damit sie genau waagerecht nivelliert werden kann. Bewegt wird die Platte, bzw. der Touchscreen von 2 rechtwinklig zueinander ausgerichteten Servomotoren. Über zwei 20 mm Servoarme werden zwei 3 mm Gewindestangen (ca. 10 cm lang) gesteuert. Die Gewindestangen sind mit jeweils 2 Kugelgelenken (3mm, Firma Dubro) an den Servoarmen, bzw. an der Platte befestigt. ![]() ![]() ![]() ![]() Servoarme und Halterungen für die Servos wurden ebenfalls mit dem 3D-Drucker ausgedruckt. Die komplette Konstruktion ist auf ein Leimholzbrett (19 x 14 x 1,8 cm) geschraubt. Detailansicht Kardan- und Kugelgelenk ![]() Zur besseren Demonstration der Kugelposition/Kugelbewegung habe ich noch einen schwarzen "Stern" mit 9 Stck. roten 2mm LEDs gedruckt. Dieser Stern ist direkt unter dem durchsichtigen Touchscreen montiert und die LEDs zeigen die aktuelle, bzw. die nächste Position der Kugel an. So kann man die Bewegungsabläufe, bzw. Animationen besser erkennen. Etwas problematisch war die Kabelzuführung zu den 9 LEDs, da insgesamt 10 Leitungen (9 x Anode, 1x GND) notwendig waren. Letzendlich habe ich die LEDs mit Drähten aus Kupferlackdraht (0.25 mm) mit dem Arduino verbunden. Insgesamt werden also 14 Leitungen (4 x Touchscreen, 10 x LEDs) am Befestigungsswinkel herunter zum Arduino geführt. Detailansicht "LED-Stern" ![]() Praxis-Erfahrung: Erste Versuche wurden mit einer 25 mm Stahlkugel (ca. 64 Gramm) durchgeführt. Dabei gab es aber immer wieder Ruckler, bzw. Aussetzer in den Animationen. Der Touchscreen braucht wohl mehr Druck, um zuverlässig die Kugelpositionen zu erkennen. Mit einer 30 mm Stahlkugel ( ca. 110 Gramm) funktionierte es dann einwandfrei. ![]() Software: Zum Arduino-Sketch ist zu sagen, daß sämtliche Parameter nur für diese Konstruktion gültig sind und teilw. mit "Try & Error" ermittelt wurden. Bei z.B. anderer Touchscreen-Größe müssen i.d.R. alle! Parameter angepasst werden. Auch wenn der Touchscreen die gleiche Größe haben sollte, sind wahrscheinlich andere Parameter zu verwenden, da z.B. der Wert für Rx ein anderer sein sollte. Die mechanische Konstruktion hat ebenfalls Einfluß auf die Parameter! Arduino-Sketch Ball_on_Plate.ino ![]() |