|
|
Inhalt: |
|
Motivation bzw. Hintergrund |
USB-Experimente mit C++ |
Lego Roboter (Lego Mindstorms & Co.) Übersicht |
|
|
Programmatisch sind C und eingeschränkt auch C++ meine Ursprünge, wenn es um Computersprachen geht. Dabei muss ich klar sagen, |
daß ich kein Programmierer war und bin! Die hier vorgestellten Codebeispiele entstammen Alltagsproblemen und sind unser Ansatz |
diese programmatisch zu lösen. C bzw. C++ nutze ich heute eigentlich nicht mehr, einzige Ausnahme bildet hier die IDE von RobotC (zu der |
IDE später mehr), die ich zum Programmieren unserer älteren Lego Roboter einsetze. Wie auch bei den anderen hier vorgestellten |
Programmierseiten verzichte ich bewusst auf eine umfangreiche Einführung, da ich der Ansicht bin, dass andere Seiten bzw. Autoren das |
deutlich besser können und i. d. R. auch mehr Hintergrundwissen als ich vermitteln. Um meine Projekte/Problemstellungen nachvollziehen |
zu können, möchte ich an dieser Stelle jedoch kurz skizzieren, wie ich arbeite und daher das allseits bekannte "Hallo Welt" auch in |
C++ demonstrieren. |
|
Während die unten aufgeführten Codebeispiele älter sind und auch vor allem mit anderen Visual Studio Versionen entstanden sind, erfolgt |
das Beispiel mit der sogenannten Community Version, von Visual Studio 2019. Inzwischen ist auch diese Version überholt, weshalb ich mir |
Links zur aktuellen Edition des Microsoft Visual Studio spare. Das nachfolgend beschriebene Beispiel ist jedoch sicher auch mit einer |
aktuellen Visual Studio Version nachvollziehbar. |
|
|
|
Hat man dann alles richtig gemacht - da der gesamte Code automatisch erzeugt wird, sollte das auf alle Fälle funktionieren - bekommt man |
dann das ausführbare Programm präsentiert: |
|
|
|
Wie bereits an anderer Stelle auf diesen Seiten beschrieben, benutze ich Programmiersprachen idealerweise plattformübergreifend. Die |
Sprachen müssen für mich zumindest auf einem Windows und einem Linuxsystem funktionieren. Wenn man sich nun nachfolgenden |
Screenshot ansieht, wird auch klar, weshalb C bzw. C++ für mich nicht mehr "ideal" ist. Auf einem Windowssystem benötigt man für |
Alltagsprobleme gleich eine IDE, während man auf einem Linuxsystem den Quellcode einfach kompalieren kann und zum Ergebnis kommt. |
|
|
|
|
Problemstellung: |
|
Als ich vor sehr langer Zeit stolzer Besitzer einer Lacrosse-Wetterstation war, die ich unter anderem auch dafür nutzen wollte, die ge- |
messenen Temperaturwerte, Niederschlagsmengen und den Luftdruck digital aufzuzeichnen, musste ich feststellen, dass ein solches |
Vorhaben sehr schnell in ein "Projekt" ausarten kann. Über mehrere Jahre hinweg hatte ich immer wieder Versuche unternommen, das |
Gerät auszulesen und kaufte z. B. auch einen Seriell-USB-Adapter. Leider blieb der Erfolg aus. |
|
Nach einigen Jahren bin ich dann, eher durch Zufall, beim Franzis Verlag über das Set "Experimente mit USB" gestolpert und war zunächst |
wieder ein wenig entäuscht, da die Sprache in der die Beispiele behandelt wurden, Visual Basic anstelle von C oder C++ (ersteres war auf |
Linux/Unix Servern nicht verfügbar) war. Mit dem enthaltenen USB-Adapter FTD2323R fand ich aber auf der Herstellerseite endlich sowohl |
geeignete Bibliotheken, wie auch Programmierbeispiele in C. |
|
Testaufbau bzw. Start der Experimente: |
|
Zur Entwicklung mit C++ verwendete ich das Microsoft C++ 2010 Express Studio (ich wollte erst mal mit Windwos herumexperimentieren). |
Der Treiber für den FTD2XX USB-Adapter findet man hier und auf der Chipherstellerseite findet man auch Dokumentationen, die aber |
mit Vorsicht zu verwenden sind, da die ersten Beispiele bei mir nicht funktioniert hatten. |
|
Mein erstes Programm: |
|
|
|
Nach dem Debuggen und kompallieren liefert das Programm dann folgende Informationen: |
|
|
|
LED Tests: |
|
Es ist zwar ein wenig mühsam sich durch die Dokumentation zu wühlen, aber sogar ich habe mich durchgewurstelt. Ich habe dann, |
ebenso wie in der Dokumentation von Franzis, versucht einfach mal eine LED auf das angeschlossenen Board zu stecken (siehe auch |
nachfolgende Bilder, dabei +-Arm der LED in den mit 5V beschrifteten Sockel stecken) und D4 überbrücken wie ebenfalls auf dem Bild |
zu sehen ist. Dann habe ich ein kleines kommandozeilenorientiertes Programm geschrieben und ich kann sagen es funktioniert😀. |
|
Hier der Code: |
|
|
|
Und hier schließlich das Programm und die Auswirkungen auf die LED: |
|
|
|
|
|
|
|
Fazit: |
|
Heute gibt es für Wetterstationen, wie auch für viele anderen Geräte oft auch das zugehörige USB Kabel, sowie oft auch die passende |
Software, um die Daten auszulesen. Aus diesem Grund sind solche Basteleien eigentlich nicht mehr notwendig, sie wurden darum von mir |
auch nicht weiterverfolgt. Auf der anderen Seite habe ich beim herumexperimentieren einiges gelernt, so dass der Aufwand sich letztlich für |
mich gelohnt hat. |
|
Wer sich im übrigen dafür interessiert, wie ich heute Wetterinformationen "einsammele" der schaut am besten auf meinen Pythonseiten |
vorbei. |
|
|
Hintergrundinformationen und vorhandene Roboter: |
|
Meine Familie und ich haben über die Jahre inzwischen drei unterschiedliche Lego Roboter, den Lego Mindstorms NTX, den Lego |
Mindstorms EV3, sowie den Lego Boost erworben. Die ersten beiden habe ich angeschafft, da ich eigentlich meiner ersten Tochter, |
zu dem Zeitpunkt war Sie glaub ich so etwa 5 Jahre alt 😉, ein wenig Programmieren beibringen wollte. Insbesondere beim |
Lego NXT war ich dann aber ziemlich frustriert, als ich die mitgelieferte "Programmieroberfläche" in Augenschein genommen |
hatte. Nach ein wenig Recherche habe ich festgestellt, daß ein US Unternehmen eine IDE für Lernroboter anbietet, die zwar in der |
Einzellizenz ca. 100 EUR kostet, sich aber an C orientiert und damit auch die auch bei anderen Programmmiersprachen üblichen |
Kontrollstrukturen bietet. Nach einigen Jahren "Einsatz" kann ich inzwischen sagen, daß zumindest für uns die Basteleien |
mit den ersten beiden Robotern eher etwas für den technisch versierteren Papa sind, da man hier einfach erstmal "dranbleiben" |
muss. Den größten Lernerfolg, bei zugleich geringstem Preis bietet m. E. der Lego Boost, zumal sowohl die Bauanleitung wie auch |
die "Programmieroberfläche" auf einem Tablet als App verfügbar sind. Damit hat meine neunjährige Tochter innerhalb nur weniger |
Minuten Ihren ersten Robotor gebaut und auch die ersten Kommandos ausgeführt. |
|
Lego Mindstorms NXT: |
|
Zunächst ein paar Worte zur verbauten Technik. Wie auf dem deutschsprachigen Wikipedia zu lesen, unterscheiden sich die Mindstorms- |
Versionen RIS 1.0, 1.5 und 2.0 hardwareseitig nur wenig. In Version 1.0 hat die "RCX"-Einheit eine Buchse für eine externe Stromver- |
sorgung, die in den späteren Versionen eingespart wurde; mit Version 2.0 wurde der Infrarot-Sender("Tower"), der an den Computer |
angeschlossen wird, von einer seriellen Schnittstelle auf einen USB-Anschluss umgestellt. Auch die Software der älteren Versionen |
kann durch ein Update auf den neuesten Stand aktualisiert werden. |
|
Der programmierbare Legostein RCX, so Wikipedia weiter, besitzt einen Renesas-H8/300-Mikrocontroller als CPU. Er wird programmiert, |
indem ein, in einer der diversen Programmiersprachen geschriebenes Programm, vom PC zur CPU des RCX mit Hilfe einer IR-Schnittstelle |
heruntergeladen wird. Nachdem das Programm gestartet worden ist, kann der mit einem RCX gebaute Mindstormsroboter völlig autonom |
handeln und auf äußere sowie innere Ereignisse reagieren, entsprechend den Programmieranweisungen. Des Weiteren können |
zwei oder mehr RCX miteinander über die IR-Schnittstelle reagieren, was Wettbewerbe (z.B. die World Robot Olympiad) und |
Kooperationen ermöglicht. Der RCX besitzt drei Motorausgänge sowie drei Sensoreingänge. Die Leistungssteuerung der Motorausgänge |
erfolgt über Pulsweitenmodulation. |
|
Hier nun aber mein erstes Programmbeispiel, welches dafür sorgt, dass der Roboter sich vor einem Hindernis abdreht. |
|
|
|
Gerne würde ich an dieser Stelle den Roboter noch in Aktion zeigen, allerdings muss ich hierzu nochmal im HTML Coding nachsehen, |
wie das mit der Darstellung von Videos läft. Bis dahin hier mal ein Bild unseres NXT. |
|
|
|
Lego Mindstorms EV3: |
|
Auch für die Beschreibung des EV3, möchte ich Wikipedia zitieren, die folgende damals neuen Merkmale des Roboters beschreiben:
|
|
- neuer Brick: |
- ARM 9 Prozessor (TI Sitara AM1808 core 300 MHz) |
- 16 MB Flash-Speicher |
- mit einer SD-Karte erweiterbar (Micro SD bis 16 GB) |
- 64 MB Arbeitsspeicher |
- ein auf Linux basierendes Betriebssystem |
- Unterstützung eines USB-Host-Mode und Anschluss von WLAN-Dongles |
- Bluetooth 2.1 |
- ein größeres Matrix-Display (178 × 128 Pixel) |
- mehr Tasten (4 Richtungs-, 1 Auswahltaste, 6. Taste) |
- Anschlussbuchsen für 4 Sensoren und 4 Motoren (NXT: 3 Motoren) |
- neuer Brick: IR-Beacon für das Zusammenspiel mit dem Infrarot-Sensor |
|
Nachfolgend ein Bild unseres EV3: |
|
|
|
Idee eines Herantastens an Programmieraufgaben: |
|
Wie bereits geschildert, habe ich die Roboter eigentlich gekauft um meine Kinder spielerisch an die Welt der Roboter und auch ans |
Programmieren heranzuführen. Dabei kam mir die Idee, dass ich mit unserer ältesten Tochter einfach mal den EV3 entlang eines erdachten |
Parcours laufen lasse (man kann diesen via App remote steuern) und wir die Zeit stoppen wie lange er für die einzelnen Teile des |
Parcours benötigen würde. Hintergrundgedanke war, dass wir dies dann gemeinsam programmatisch umsetzen. |
|
Abschließend sei auch an dieser Stelle auf meine Pythonseiten verwiesen, da es seit geraumer Zeit eine Möglichkeit gibt, die Roboter |
mittels eines Micropythonclones zu programmieren. |
|
↑ zurück zum Beginn der Seite |
|