asper
30.09.2016, 18:20

Als Antwort auf den Beitrag von Lok24

+1Re: SBrick, Arduino und Raspberry

Hallo,

Diesen Thread habe ich bisher verpasst.

Lok24 hat geschrieben:


Ich möchte lediglich die von LEGO vorgegebene IR-Steuerung durch BT ersetzen. Dazu benötige ich einen kleinen BT-Empfänger mit Motor-Treiber wie z.B SBrick und einen Sender, der das SBrick-Protokoll via BT sendet. Ein anderer Ansatz. Nein, kein Smartphone oder Tablet.


Genau das war mein Ansatz und das habe ich mit dem Raspberry PI und den SBricks erreicht. An den Zügen musste ich nur den IR Empfänger durch den SBrick ersetzen. Da es von SBrick nur die Doku und kein SDK gab, habe ich mir das selbst geschrieben. Ich habe hier nicht von 0 an angefangen sondern auf Code aus dem SBrick Forum aufgesetzt.

Was ich jetzt habe ist ein Modul für die Programmiersprache python und eines für die Programmiersprache javascript. Im wesentlichen funktionieren beide ungefähr so:

Zug1 = SBricks ['123456789']
Zug2 = SBricks ['ABCDEFGHI']
Zug1.move (1, 255)
Zug2.move (3, -150)
Zug1.move (1,0)

Das ist nicht der genaue Syntax aber zeigt die Idee dahinter. Die "Namen" sind in den SBricks einprogrammiert und weltweit(?) eindeutig. Man bekommt ein SBrick "Objekt" mit der eindeutigen ID und kann damit die Funktionen aufrufen. Das erste Argument bei move ist der Kanal, also an welchem der Stecker der Motor steckt, der zweite ist die Geschwindigkeit von -255..0..+255. Es gibt auch eine Funktion "blink" mit der man die LED blinken lassen kann, um herauszufinden, welcher SBrick in welchem Zug steckt.

Das ganze funktioniert auf jedem Rechner mit Linux und Bluetooth 4.0. Entwickelt und getestet habe ich das auf meinem normalen PC, kurz vor Ende ist das dann auf den Raspberry PI gewandert - ohne Anpassungen.

Eine großartige Verzögerung beim Stoppen von zwei Zügen konnte ich nicht feststellen. In einem der Züge habe ich auch zwei Motoren am SBrick angeschlossen, so dass ich immer zwei move() Befehle hintereinander schicken muss. Aber auch hier kann ich keinen Versatz bemerken.

Die Rückmeldung mit den Reed Schaltern ist dann mit einer der Bibliotheken geschehen, von denen es reichlich für den Raspberry PI gibt. Einen der digitalen Eingänge auszulesen ist sehr einfach und gut dokumentiert. Ob das auch analog geht? Dann hätte man mit einem Poti im Prinzip so was ähnliches wie einen klassischen Modellbahntrafo. (Diesen manuellen Modus habe ich während der Ausstellung in Schierling vermisst. Da werde ich definitiv weitermachen. Zur Zeit existiert ein rudimentäres Webinterface, mit dam man im Prinzip mit dem Smartphone alles steuern kann. Aber dann muss ich ja vor Ort mein eigenes WLAN aufbauen...)

Werner, ist das so ungefähr das, was Du machen möchtest? Bei diesem Ansatz müsstest Du Dich auf den Raspberry PI und Linux einlassen. python ist recht einfach zu lernen und hierfür gibt es massenhaft Beispiele. javascript sieht ein wenig mehr wie C(++) aus, die ganzen Bibliotheken arbeiten aber "asynchron", d.h. man reagiert nur auf eingehende Ereignise. Wenn Du eine fertige Software suchst, die man nur "konfigurieren" muss, habe ich leider keine Lösung. Unter Linux ist der Zugriff auf Bluetooth relativ einfach. Unter Windows scheint's nicht ganz so problemlos zu gehen. Viele der Bibliotheken gibt es nur für Linux oder die Windows-Version ist relativ ungepflegt und kann nicht alles.

Die python Programme rufen Linuxtools im Hintergrund auf (über die Kommandozeile). Das in C oder C++ nachzubauen ist machbar. Das aufwendige ist hier immer der Hintergrundprozess, der ständig mit dem SBrick kommuniziert. Ein Feature der SBRicks ist ein eingebauter Watchdog, wen man nicht immer wieder das letzte Kommando wiederholt, bleibt der Zug stehen. Das kann man wohl ausschalten, ich habe das aber als Sicherheitsfeature benutzt: Wenn man das Programm abbricht, bleiben alle Züge stehen.

Für feststehende Anlagen wie Weichen und Schranken werde ich in Zukunft auf Arduino oder ESP8266 setzen. Das ist deutlich billiger. Für Züge sind die mir zu groß - wenn man keine eigene Hardware entwickeln will und die Standard-Boards einsetzt. Die Kommunikation mit dem Raspberry PI als Zentrale sollte einfach umzusetzen sein.

(Für Interessenten, der Javascript Code liegt auf github, den python Code müsste ich raussuchen)


flickr


Xymion gefällt das


Gesamter Thread: