Lok24
26.08.2020, 15:53

Editiert von
Lok24
27.08.2020, 08:42

+17Powered Up mit M5Stack Atom

Hallo zusammen,

heute möchte ich mal eine weitere Lösung für die bekannten Probleme mit Powered Up zeigen:

- kein Smartphone nötig
- Krokodil o.ä. lässt sich mit der FB regeln
- Zwei Motoren gegenläufig mit derselben Taste der FB
- Wenn es heute geht, geht es auch in 10 Jahren noch
- Plug and play (s.u.)

Das „Geheimnis“ ist ein kleiner Microprozessor, nur 3x3 Noppen groß.

Die Hardware

Es ist ein ESP32 „M5Stack ATOM Matrix“. Das Schöne daran: er hat oben eine 5x5 LED Matrix, und diese Fläche ist auch ein Taster.
Außerdem ist er genau 3x3 Noppen groß und grau ...

[image]



[image]



Das Testprogramm

Es handelt sich um ein c++ - Programm und nutzt die legoino-Bibliotheken von Cornelius Munz.
Ich habe das so gestaltet, dass der ATOM das Programm fest eingebaut hat, dennoch aber aus mehreren Optionen (Profilen) gewählt werden kann.



Die Idee

- Man überlegt sich eine Anwendung (z.B. FB mit Regelung für alle Motoren)
- Schreibt das Programm dazu (das gibt es als Beispiel auch zum Download)
- schreibt das fest in den Controller
- fertig

Ab dann macht dieser Prozessor nach dem Einschalten (1 sec) immer genau das und nur das.
(Bis jemand was neues reibschreibt, aber das muss man ja nicht….)

Dazu braucht er nur noch 5V, mehr nicht. Kein PC, kein SmartDevice, nichts von alledem. Vor allem: keine Ahnung was der überhaupt wie macht.

Und erweitert…

Im Video zeige ich wie man auch mehrere „Profile“ anlegen kann, also wie Remote und Hub agieren sollen, bei welchen Tastendrücken was wie passieren soll. Aber man könnte auch ein Profil „Haunted House“ oder „Karussell“ oder irgendwas anderes hinzufügen, in denselben Baustein.

Die Kosten

Die ATOM starten bei ca 6 $ beim Chinamann, der Matrix kostet da um 8$, meiner hat 16 € bei Bezug in D gekostet. Das war‘ schon.

In 10 Jahren …

… läuft das immer noch genauso, wenn nichts kaputtgeht (und man es sich verkneift, das LEGO Hub upzudaten….)

Für Entwickler

Man braucht
- die Arduino IDE
- die legoino-Bibliothek
- die ESP32-Bibliotheken
- einen PC

Das hat man in einer Viertelstunde zusammengesammelt, wenn man sich mittel bis wenig auskennt. Es gibt etliche Tutorials im Netz, da hab ich mein Weisheiten auch her. (habe aber länger gebraucht, da ich gar kein c++ kannte)

Plug and Play

Doch, schon.
Irgendwer (mit Ahnung)
- schreibt ein Programm („2 beliebige Motoren gegenläufig“)
- kauft den ATOM für x €
- schafft das Programm drauf (max. 5 Minuten Arbeit)
- und verkauft das Ganze für x +y € weiter

Der Empfänger steckt es an sein USB-Ladeteil, fertig.

Oder man hat in der Bekanntschaft jemanden der das kann. Wenn die Programme irgendwo vorliegen braucht man das nur zuammenzuklicken.

Ausblick

Was fehlt sind also Ideen, was man überhaupt programmieren kann und will und braucht, und Leute die des Ganzen mächtig sind.

Grüße

Werner

Ps:
Hier als Teaser mal das "Profil1", das ist schon sehr überschaubar....

void control1() {

int sstep = 10;
int sdelay = 400;
int vmax = 75;

if (FB.isLeftRemoteUpButtonPressed()) Speed = min(vmax, oldSpeed + sstep);
if (FB.isLeftRemoteDownButtonPressed()) Speed = max(vmax * -1, oldSpeed - sstep);
if (FB.isLeftRemoteStopButtonPressed()) Speed = 0;

if ( Speed != oldSpeed) {
TrainHub.setMotorSpeed(portA, Speed * 1);
TrainHub.setMotorSpeed(portB, Speed * -1);
oldSpeed = Speed;
disSpeed(Speed);
delay(sdelay);
}
}



Dirk1313 , RobbyRay , asper , hassel62 , cubo , MTM , Legoben4559 , aap134 , SuklaaTalvella , Ben® , Xris , Garbage Collector , tastenmann , freakwave , SirJoghurt , UncleTom , JuL gefällt das (17 Mitglieder)


8 vorhergehende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen Beitragsbaum

Lok24
28.08.2020, 10:41

Als Antwort auf den Beitrag von AdmiralStein

Re: Powered Up mit M5Stack Atom

Permalink

1000steine-Code

BBCode

HTML


AdmiralStein hat geschrieben:

PS: In den ATOM-Spezifikationen steht "IR: Infrarot-Übertragung". Das könnte rein theoretisch sogar die Steuerung von PF-Komponenten ermöglichen, wenn da jemand eine entsprechende Bibliothek schreiben würde? Nur mal so als Gedanke...

Ja. Aber das alles gibt es ja schon seit Jahren, ich habe hier ein Beispiel da steht

J.A. Korten for Railbricks
Library by Roland Wiersma
November 2012
#include <legopowerfunctions.h> // this imports the LEGO PF library
Beschreibungen gab es seinerzeit in Railbricks.

Oder aber : man steckt am ATOM hinten(!) einfach eine IR-Diode ein, die die Signale der PF-FB empfängt -> LEGO Drehregler!



Lok24
28.08.2020, 10:47

Als Antwort auf den Beitrag von Thomas52xxx

+2Re: Powered Up mit M5Stack Atom

Thomas52xxx hat geschrieben:

.....größere Ausführung[/link] (knapp 7x7) die zahlreiche Sensoren inkludiert hat und zudem über Lego-kompatible Noppena- und Technic-Pin-nschlüsse verfügt. Gibt es sicher auch anderswo günstiger.

Natürlich, beim Chinesen:
https://www.banggood.com/...E&cur_warehouse=CN

Das Ding hat keine LED-Matrix, sondern einen 320x240 TFT-LCD Bildschirm.....



tastenmann , hassel62 gefällt das


Lok24
28.08.2020, 18:55

Als Antwort auf den Beitrag von Lok24

Re: Powered Up mit M5Stack Atom

Hi,

Lok24 hat geschrieben:

Für "simple" Anwendungen bestimmt. Aber Du musst die Dinge programmiert bekommen. Legoino kennt m.E. kein "4-fach-Hub". Aber der Programmierer ist sehr aufgeschlossen - und schnell. Meine Anregung hatte er nach drei Stunden umgesetzt. Es mag auch andere Bibliotheken geben.

Doch, "technic" 4-fach Hub geht auch seit 3 Wochen...
Ich gehe jetzt nochmal das "Sensor"-Problem an, aber das kann bei mir liegen. Mal schauen.



Ruppie
28.08.2020, 20:56

Als Antwort auf den Beitrag von Lok24

Re: Powered Up mit M5Stack Atom

Lok24 hat geschrieben:

Hi,

Doch, "technic" 4-fach Hub geht auch seit 3 Wochen...



Das ging bereits wesentlich früher, man muss dazu lediglich mal aufmerksam die entsprechenden Punkte im Github verfolgen
Sagen wir so Cornelius ist etwas unorganisiert wenn es um die Zuordung der Funktionalitäten zu den Klassen der jeweiligen Hubs geht.

Das ist aber nicht schlimm: Mein Tip:

Nicht verwirren lassen, im Zweifel die konkreten Klassen für bestimmte Hubs Ignorieren, am besten die Basisklasse verwenden auf der die anderen Ableitungen aufbauen.



Lok24
29.08.2020, 11:22

Als Antwort auf den Beitrag von Ruppie

Editiert von
Lok24
29.08.2020, 11:29

Re: Powered Up mit M5Stack Atom

Hallo Marc,

vielen Dank für die Ergänzung.

Ruppie hat geschrieben:

Das ging bereits wesentlich früher, man muss dazu lediglich mal aufmerksam die entsprechenden Punkte im Github verfolgen
Ich weiß weder was die "entsprechenden Punkte" wären noch wie man in Github etwas verfolgt.

Ruppie hat geschrieben:
Nicht verwirren lassen, im Zweifel die konkreten Klassen für bestimmte Hubs Ignorieren, am besten die Basisklasse verwenden auf der die anderen Ableitungen aufbauen.
Ich weiß weder was Basisklassen sind noch was Ableitungen sind.

Eigentlich interessiert mich das auch alles nicht

Ich möchte nur ein funktionierendes Programm haben.
Da ich in dem Bereich aber völlig unterbelichtet bin hatte ich vor geraumer Zeit hier
https://www.1000steine.de...amp;id=442027#id442027
bereits um Hilfe gebeten, hat sich aber keiner erbarmt.

Egal, ich denke das Video zeigt ja die Idee, die wir beide schon länger diskutiert hatten:
Ein kleines $Irgendwas mit Gehäuse, Basisanzeigen und rudimentärer Bedienung, ganz ohne Elektronik-Bastelei.
Bezahlbar.

Grüße

Werner



Ruppie
29.08.2020, 14:41

Als Antwort auf den Beitrag von Lok24

Re: Powered Up mit M5Stack Atom

Tag Werner;


Die Bibliothek basiert auf dieser Javascript Library :
https://github.com/nathankellenicki/node-poweredup

Die Basisklasse der Bibliothek ist "nur" die Transformation der Javascript Lib in C++ gemäß:
"Lpf2Hub.h - Arduino base class for controlling Powered UP and Boost controllers"

Die Klasse Lpf2Hub beschreibt die Basisklasse welche alle Grundfunktionalitäten enthält, also die gemeinsame Grundmenge Gleicher Funktionen:

"BoostHub", "PoweredUpHub", "PoweredUpRemote sind Ableitungen davon = Stelle dir Zweige oder "Kinder " vor.
Ähnlich Kindern ergeb diese von dem Vater Eigenschaften haben aber anderen Eigenschaften.

Das war in der Vergangenheit Grund der Verwirrung;
Die Klasse "PoweredUpUp" verfügte eine ganze Zeit nicht über 4 Ports, die BoostHub Klasse wohl.
Man konnte aber auch die Boosthubklasse mit einem PoweredUp hub verwenden und bereits alle 4 Ports des Powered Up Hubs nutzen.



Daher mag es für den Begin praktisch sein die konkreten Klassen zu verwenden.
Für speziellere Anwendungen ist es aber ( meiner Meinung nach) besser die Klasse "Lpf2" zu verwenden.
Im Zweifel setzt man die Funktionalitäten in einer eigeen Klasse zusammen wie man diese benötigt.

Wie immer; Hier liegen eben die Grenzen im gerauch einer Lib von "jemanden".



Lok24
29.08.2020, 14:51

Als Antwort auf den Beitrag von Ruppie

Editiert von
Lok24
29.08.2020, 15:05

Re: Powered Up mit M5Stack Atom

Hi Marc,

vielen Dank für die ausführliche Antwort.

Ich habe leider kein Wort verstanden, was aber nicht an Dir liegt.
Es liegt eher daran, dass ich mich dafür Null interessiere (hatte ich auch schon geschrieben .

Das einzige was mir weiterhilft sind funktionierende Beispiele.
Dann gelingt es mir gelegentlich aus 2 Beispielen ein Programm zu machen.

Derzeit scheitert es an der Sensor-Erkennung, das habe ich aufgegeben (mangels Idee, wie Fehler zu suchen).


Grüße

Werner



Ruppie
29.08.2020, 16:08

Als Antwort auf den Beitrag von Lok24

+1Re: Powered Up mit M5Stack Atom

Lok24 hat geschrieben:

Hi Marc,

Derzeit scheitert es and der Sensor-Erkennung, das habe ich aufgegeben (mangels Idee, wie Fehler zu suchen).


Hallo Werner,

Ich habe mich schon eine Weile nicht mehr mit der legoino lib befasst, hole ich demnächst nach
Das Problem mit der Sensorerkennung und Auswertung über das LEGO Bluetooth Protokoll ist, das die Sensoren Ersteinmal zur Übertragung der Werte konfiguriert werden müssen.
In Teilen ist das bestimmt schon in der Lib drin, man kann da doch bestimmten "weg" fahren sofern ich mich erinnere, nicht nur "An" Aus.

Bezüglich Hilfe:
Neben Hilfe von Conelius bit du hier auch falsch: Such dir mal ein ESP32 Forum.
Zur Einarbeitung sehr empfohlen: https://randomnerdtutorials.com

Wie du schreibst: Im grunde ist das alles nicht für dich von Interesse dich mit den Grundlagen zu beschäftigen, ist in Ordnung.
Ich sage es mal so: So wirst du aber immer primär von den Arbeiten dritter sein. Wenn dir das Genügt, auch ok.

Wenn du den Grad der "Abhängigkeit von dritten minimieren wilst geht es eben nur in Eigenleistung.

Wie gesagt; deine Endscheidung




PS:
Tip wenn du es mehr selber erforschen willst:
https://infocenter.nordic...iffer_ble%2Fintro.html

Es gibt günstig einen USB Dongle wie da Beschrieben
https://www.mouser.de/Pro...wLWEAQYASABEgKIOfD_BwE

> Ich benutze sowas ähnliches

oder dies;

https://www.adafruit.com/product/2269
das geht auch
https://www.adafruit.com/product/2267


Der trick geht wie folgt:
Es gibt ein Wireshark Plugin damit kannst du mit den beschriebenen (funktionierte zuletzt bei mir jedoch nur mit Wireshark 3.07 nicht neuer).

Nun kann man den Datenverkehr, beispielsweise der " Powered Up App" oder Control +, oder eben FB und Zug Hub mitverfolgen.
Da sieht man dan beispielsweise genau diezeichenketten, welche du schon bei deinen PI projekten gesehen hast.

Insbesondere Interessant ist es sich die "Handshake" oder Startsequent zwischen Technic Hub und Beispielsweise Control+ einmal anzusehen.
Da stehen dann auch die Telegramme drin, welche die Sensoren für den Datentransfer zur App konfigurieren,
Du musst diese dann "nur" noch gemäß LEGO BLE Doku nachvollzihen.


Ich habe momentan wenig Zeit.
Ich habe mal "Schmierversuche gemacht" mit den unterschiedlichen Sensoren, wenn ich die noch finde schreibe ich mal kurz was dazu
PS:
Vielleicht hilft dir im dr. Bricks Forum oder bei Eurobricks auch nochmal jemand.



Thomas52xxx gefällt das


Lok24
29.08.2020, 16:27

Als Antwort auf den Beitrag von Ruppie

Editiert von
Lok24
29.08.2020, 16:31

Re: Powered Up mit M5Stack Atom

Hallo Marc,

Ruppie hat geschrieben:

Ich habe mich schon eine Weile nicht mehr mit der legoino lib befasst, hole ich demnächst nach
Das Problem mit der Sensorerkennung und Auswertung über das LEGO Bluetooth Protokoll ist, das die Sensoren Ersteinmal zur Übertragung der Werte konfiguriert werden müssen.

Wenn Du das sagst...
Es gibt bei legoino ein Beispiel, das funktioniert mal, mal nicht.

Ruppie hat geschrieben:
Wie du schreibst: Im grunde ist das alles nicht für dich von Interesse dich mit den Grundlagen zu beschäftigen, ist in Ordnung.
Ich sage es mal so: So wirst du aber immer primär von den Arbeiten dritter sein. Wenn dir das Genügt, auch ok.
Das bin ich bei meinem Fernseher auch, den kaufe ich fertig Laden.
Und, immer bedenken: ich habe derzeit gar keine Anwendung für sowas! Ich brauche das nicht.
Und wenn ich was programmieren will kann ich die LEGO App nehmen.

Ruppie hat geschrieben:
Ich habe momentan wenig Zeit. Vielleicht hilft dir im dr. Bricks Forum oder bei Eurobricks auch nochmal jemand.

Du könntest mir durchaus helfen, indem Du mir einfach die vier Progammzeilen für dieses "lpf2" hier postest.
Lauffähig, keine verbale Beschreibung. Dann würde ich das mal probieren.

Momentan sieht das so aus:

#include "PoweredUpHub.h"

PoweredUpHub TrainHub;
PoweredUpHub:: Port portA = PoweredUpHub:: Port::A;

TrainHub.init();



Ruppie
29.08.2020, 16:54

Als Antwort auf den Beitrag von Lok24

Powered Up - Hinweise zur Konfiguration und Abfrage der Sensoren der Ports und intern des HUB

Lok24 hat geschrieben:

Hi,

Ich gehe jetzt nochmal das "Sensor"-Problem an, aber das kann bei mir liegen. Mal schauen.



Empfehlung:
Schau dir mal die Doku zum LEGO Protokoll an: https://lego.github.io/le...ut-format-setup-single

Abschnitt 3.3 Message Type Definitions - PORT(s) related

Mit 0x41h konfigurierst du einen Port zur Übergabe eines einzelnen Sensorwertes
Mit 0x42 konfigurierst du einen Port zu Übergabe mehrere Sensorwerte, sofern verfügbar, Ein Motor kann etwa Speed und Winkel zurükgeben

0x45h, und 0x46h sind die entsprechenden Messagecodes für die Datentelegramme welche dann mit den Sensorwerten zurückgeschickt werden.

Es ist von der Konfiguration Abhängig, ob die Daten automastisch bei Wertänderung, oder nur auf Anforderung gesendet werden.
Die Konfiguration der Port sensoren ist immer eine Sequenz:
- Übertragung sperren
- Parametrieren
- freigeben


Ohne Garantie, habe ich mal bei mir etwas herumgespielt, eis aber nicht mehr wlcher stand das war , nur als Grobe Richtung in einer meiner Init Routinen:


Ohne Gewähr: Beispiel für Port D, kann Spuren von Unfug enthalten

#1 SendData[]={0x0a,0x00,0x41,0x03,0x01,0x10,0x00,0x00,0x01,0x00};
#2 SendData[]={0x08,0x00,0x42,0x03,0x01,0x00,0x10,0x20};
#3 SendData[]={0x05,0x00,0x42,0x01,0x02};
#4 SendData[]={0x0a,0x00,0x41,0x01,0x01,0x02,0x00,0x00,0x00,0x01};
#5 SendData[]={0x05,0x00,0x42,0x01,0x03};
#6 SendData[]={0x08,0x00,0x81,0x03,0x11,0x51,0x00,0x00};

Für Port A
#1 {0x0a,0x00,0x41,0x01,0x02,0x02,0x00,0x00,0x00,0x01};


Für "Andere Ports" hier Port "0x63"
SendData_17[]={0x0a,0x00,0x41,0x63,0x00,0x01,0x00,0x00,0x00,0x01};



Erinnerung: Info. welcher Port was macht ist hier beschrieben:https://www.eurobricks.com/forum/index.php?/forums/topic/162288-powered-up-a-tear-down/&page=23
Im unteren Bereich nach meinem Post insbesondere mal die Anmerkungen von AlecDGeneric und Mr Hobbles vom 12.02.
ansehen und die Links

Hoffe das hilft

Marc



43 nachfolgende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen

Gesamter Thread: