Inhoudsopgave:

Modeltrein WiFi-besturing met behulp van MQTT - Ajarnpa
Modeltrein WiFi-besturing met behulp van MQTT - Ajarnpa

Video: Modeltrein WiFi-besturing met behulp van MQTT - Ajarnpa

Video: Modeltrein WiFi-besturing met behulp van MQTT - Ajarnpa
Video: Dingtian DT-R008 многоканальное умное реле с ethernet и wi-fi - обзор и интеграция в Home Assistant 2024, November
Anonim
Modeltrein WiFi-besturing met behulp van MQTT
Modeltrein WiFi-besturing met behulp van MQTT

Met een oud TT-treinmodelsysteem had ik een idee hoe ik de locomotieven afzonderlijk kon besturen.

Met dit in gedachten ging ik een stap verder en ontdekte wat er nodig is om niet alleen de treinen te besturen, maar ook om wat aanvullende informatie over de hele lay-out te hebben en iets anders te bedienen (lampen, spoorwissels…)

Zo is het wifi-gestuurde modeltreinsysteem geboren.

Stap 1: Werkingsprincipes

Werkingsprincipes
Werkingsprincipes

Het belangrijkste principe is om elk element afzonderlijk te besturen, hetzij vanuit een enkele controller, hetzij vanuit meerdere besturingsbronnen. Dit vereist inherent een gemeenschappelijke fysieke laag - het meest duidelijk WiFi - en een gemeenschappelijk communicatieprotocol, MQTT.

Het centrale element is de MQTT Broker. Elk aangesloten apparaat (trein, sensor, uitgang…) mag alleen communiceren via de Makelaar en kan alleen data ontvangen van de Makelaar.

Het hart van het apparaat is een op ESP8266 gebaseerde WiFi-controller, terwijl de MQTT-broker op een Raspberry pi draait.

In eerste instantie wordt de wifi-dekking verzorgd door een wifi-router en alles is draadloos aangesloten.

Er zijn 4 soorten apparaten:

- Treincontroller: heeft 2 digitale ingangen, 1 digitale uitgang, 2 PWM-uitgangen (voor het aansturen van 2 individuele DC-motoren), - Sensorcontroller: heeft 7 digitale ingangen (voor ingangsschakelaars, optosensoren…), - Uitgangscontroller: heeft 8 digitale uitgangen (voor spoorwissels…), - WiFi-afstandsbediening: heeft 1 incrementele encoderingang, 1 digitale ingang (om treinen op afstand te besturen).

Het systeem kan ook werken vanuit Node-Red (vanaf tablet, pc of smartphone…).

Stap 2: MQTT-gegevensuitwisseling en configuratie

MQTT-gegevensuitwisseling en configuratie
MQTT-gegevensuitwisseling en configuratie

Op basis van het MQTT-protocol abonneert elk apparaat zich in eerste instantie op een bepaald onderwerp en kan het publiceren naar een ander onderwerp. Dit is de basis van de communicatie van het treinverkeersnet.

Deze communicatieverhalen worden geplaatst via JSON-geformatteerde berichten, om kort en menselijk leesbaar te zijn.

Kijkend vanuit een verder perspectief: het netwerk heeft een wifi-router met een eigen SSID (netwerknaam) en een wachtwoord. Elk apparaat moet deze 2 kennen om toegang te krijgen tot het wifi-netwerk. De MQTT-broker maakt ook deel uit van dit netwerk, dus om het MQTT-protocol te kunnen gebruiken, moet elk apparaat het IP-adres van de broker kennen. En tot slot heeft elk apparaat zijn eigen onderwerp voor het abonneren en het publiceren van berichten.

In de praktijk gebruikt een bepaalde afstandsbediening hetzelfde onderwerp om berichten te publiceren waarop een bepaalde trein is geabonneerd.

Stap 3: Treincontroller

trein controller
trein controller

Om een speelgoedtrein te besturen, hebben we in principe 3 dingen nodig: een voeding, een WiFi-controller en elektronica voor de motorbestuurder.

De stroomvoorziening is afhankelijk van het daadwerkelijke gebruiksplan: in het geval van LEGO is dit de Power Functions accubak, in het geval van een "oldschool" TT of H0 treinstel is dit de 12V stroomvoorziening van het spoor.

De WiFi-controller is een Wemos D1 mini (ESP8266 gebaseerd) controller.

De elektronica van de motorbesturing is een op TB6612 gebaseerde module.

De treindienstleider heeft 2 afzonderlijk aangestuurde PWM-uitgangen. Eigenlijk wordt de ene gebruikt voor motorbesturing en de andere voor lichtsignalering. Heeft 2 ingangen voor op reedcontact gebaseerde detectie en één digitale uitgang.

De controller accepteert JSON-berichten via WiFi en MQTT-protocol.

SPD1 bestuurt de motor, bijvoorbeeld: {"SPD1": -204} bericht wordt gebruikt om de motor achteruit te bewegen met 80% vermogen (de maximale snelheidswaarde is -255).

SPD2 regelt de intensiteit van het "richtinggevoelige" LED-licht: {"SPD2": -255} bericht laat de (achteruit) LED op volle kracht schijnen.

OUT1 regelt de status van de digitale uitgang: {"OUT1": 1} schakelt de uitgang in.

Als de status van een ingang verandert, stuurt de controller een bericht overeenkomstig: {"IN1": 1}

Als de controller een geldig bericht ontvangt, voert hij dit uit en geeft hij feedback aan de makelaar. De feedback is het daadwerkelijk uitgevoerde commando. Bijvoorbeeld: als de broker {"SPD1": 280} verzendt, draait de motor op vol vermogen, maar het terugkoppelingsbericht is: {"SPD1": 255}

Stap 4: LEGO Treincontrole

LEGO Treincontrole
LEGO Treincontrole

In het geval van een LEGO-trein zijn de schema's een beetje anders.

De stroom komt rechtstreeks uit de accubak.

Er is behoefte aan een mini step-down converter om 3,5 V te leveren voor het op ESP8266 gebaseerde Lolin-bord.

De verbindingen zijn gemaakt met een LEGO 8886 verlengdraad, doormidden gesneden.

Stap 5: Afstandsbediening

Afstandsbediening
Afstandsbediening

De verkeersleider publiceert alleen berichten naar de trein (gedefinieerd door de BCD-schakelaar).

Door aan de encoder te draaien, verzendt de afstandsbediening {"SPD1": "+"} of {"SPD1": "-"} berichten.

Wanneer de trein dit bericht van het "incrementele type" ontvangt, verandert de PWM-uitgangswaarde met 51 of -51.

Zo kan de afstandsbediening de snelheid van de trein in 5 stappen (elke richting) wijzigen.

Als u op de incrementele encoder drukt, wordt {"SPD1": 0} verzonden.

Stap 6: Sensorcontroller

Sensorcontroller
Sensorcontroller

De zogenaamde sensorcontroller meet de toestanden van zijn ingangen en publiceert die waarde als een van deze verandert.

Bijvoorbeeld: {"IN1": 0, "IN6": 1} in dit voorbeeld zijn 2 ingangen tegelijkertijd van status veranderd.

Stap 7: Uitgangscontroller

Uitgangscontroller
Uitgangscontroller

De uitgangscontroller heeft 8 digitale uitgangen, die zijn aangesloten op een op ULN2803-gebaseerde module.

Het ontvangt berichten via zijn geabonneerde onderwerp.

Bijvoorbeeld het bericht {"OUT4": 1, "OUT7": 1} zet de 4. en de 7. digitale uitgang aan.

Stap 8: Raspberry Pi en WiFi-router

Ik had een gebruikte wifi-router van TP-Link, dus deze gebruikte ik als Access Point.

De MQTT-makelaar is een Raspberry Pi waarop Mosquitto is geïnstalleerd.

Ik gebruik het standaard Raspbian-besturingssysteem met MQTT geïnstalleerd met:

sudo apt-get install mug mug-clients python-mosquitto

De TP-Link-router moet worden geconfigureerd om een adresreservering voor de Raspberry te hebben, dus na elke herstart heeft de Pi hetzelfde IP-adres en kan elk apparaat er verbinding mee maken.

En dat is het!

Stap 9: Voltooide controllers

Afgewerkte controllers
Afgewerkte controllers
Afgewerkte controllers
Afgewerkte controllers

Hier zijn de voltooide controllers.

De TT-schaal loko heeft zo'n klein formaat dat een Lolin-bord versmald (geknipt) moest worden om klein genoeg te zijn om in de trein te passen.

De gecompileerde binaire bestanden kunnen worden gedownload. Om veiligheidsredenen is de bin-extensie vervangen door txt.

Aanbevolen: