| |
| |
| 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 |
| |