N-Spoor – deel 12 – Loc-besturing

In het eerste deel heb ik al uiteengezet hoe ik had bedacht de loc-jes om te bouwen zodat ze van afstand over WiFi te besturen zouden kunnen worden. Ik heb dat destijds getest, maar hier toen niet beschreven. Vandaar nu dan wel.

Nog even het principeschema erbij halen.

Het idee was om 12V via de wielen van de rails af te tappen en dit middels een converter om te zetten naar 3V voor een ESP-module die, bestuurd vanaf een webpagina, via WiFi de motor van de loc aanstuurt voor de volgende functies: de snelheid inclusief optrekken en afremmen d.m.v. PWM en voor- en achteruit rijden. Elke loc krijgt zo z’n eigen nieuwe elektronica en IP-adres en kan daardoor individueel aangestuurd worden.

Wemos D1 mini
Bare ESP12-E


Als ESP heb ik gekozen voor een Wemos D1 mini: een compacte WiFi-module (34mm x 26mm) die vanuit de Arduino-IDE te programmeren is. Nadere beschouwing leert dat het nog kleiner kan met de ESP12-E. Wanneer die stabiel blijkt zal ik daarmee verder gaan.
De omzetting van 12V van de rails naar 3V voor de ESP wordt gedaan door de Mini 360 DC-DC Buck converter (17mm x 11mm). Voor de H-brug voor de snelheidsregeling heb ik getest met een module met dubbele L9110 chip voor twee motoren (29mm x 23mm): door de schroef headers is de module nogal fors, maar de L9110 is ook als 8-pins DIL chip te koop en dat scheelt.

Mini 360 DC-DC Buck converter
Schema van de Mini 360
Motorsturingsmodule met 2x L9110
L9110 motorsturing schema
Pin out uit de datasheet

Mijn idee om een treintje over WiFi aan te sturen was niet uniek: ik vond via het Modelspoormagazine.be forum, de website van ene Dani, die e.e.a. al had gebouwd! Het daar gepresenteerde Arduino-sketch heb ik opgepakt en omgevormd naar de door mij gekozen hardware. Het programma maakt van de ESP een webserver en presenteert een webpagina waarop de richting en de snelheid van de locomotief op te geven. Zie hieronder als voorbeeld trein 3 met ip-adres 192.169.2.82. Regelbaar zijn: de snelheid van 10 tot 150 Km/u (in de software wordt dit vertaald naar een snelheid voor N-spoor), de richting (<<< of >>>). Ook kan de trein gestopt worden (snelheid wordt langzaam verminderd).

De software Loc_besturing_80_4.ino lijkt goed te werken. Maar nu moet de elektronica ingepast worden in het loc-je, of waarschijnlijk in een wagonnetje erachter. Eerst maar eens kijken hoe zo’n loc-je in elkaar steekt. Hiervoor heb ik indertijd speciaal een goedkoop en klein T3 loc-je gekocht.

Loc-je van bovenaf bezien …
… en in een schema gevat

De 12 volt van de rails gaat via een spoeltje en langs een condensator (10nF) direct naar het motortje. De spoel en de condensator zorgen voor ruisonderdrukking. Het is allemaal erg klein; de stroomvoorziening onderbreken en de hierboven genoemde onderdelen toevoegen is een heel gepriegel!

Loc-je: rechts de motor met aansluitingspunten

Al met al moet het als hieronder in schema is gezet aan elkaar geknoopt worden.

Gemodificeerde loc voor WiFi besturing

De Wemos module moet in tegenstelling tot wat ik eerder aannam niet met 3,3 Volt, maar extern met 5 Volt gevoed worden. Wanneer ik de bare ESP-12 ga gebruiken moet die wél van 3,3 Volt voorzien worden.

De software voor de Wemos deed toch niet wat ik wilde. Het kostte me veel tijd en moeite om te achterhalen wat er nou precies niet goed ging. De datasheet van de L9110 motor driver is erg summier en voor mij niet echt helder. Uiteindelijk loopt het nu wel goed. Hieronder een deel van de Arduino sketch waar de motorsturing goed verloopt.

void optrekken(int soll_snelheid){
    for (int i = ist_snelheid; i <= soll_snelheid; i=i+5) {
      
      if (rijrichting == 1) {   // vooruit
        analogWrite(A1, i); 
        analogWrite(A2, 0);
        Serial.println("Optrekken en vooruit rijden");
      }
      else                      // achteruit
      {
        analogWrite(A1, 0); 
        analogWrite(A2, i);
        Serial.println("Optrekken en achteruit rijden");   
      }
      Serial.print("i = ");
      Serial.println(i); 
      delay(100);
    }
    ist_snelheid = soll_snelheid;
}

Vooruit:

        analogWrite(A1, i); 
        analogWrite(A2, 0);

Achteruit:

        analogWrite(A1, 0); 
        analogWrite(A2, i);

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie gegevens worden verwerkt.