Författare Ämne: LocoNet på Arduino - att koda en "Multi-dongel"  (läst 1226 gånger)

AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
LocoNet på Arduino - att koda en "Multi-dongel"
« skrivet: tis 26 mar 2019, 14:38:34 »
En spinoff på tidigare tråd på Modulsyd. https://www.modulsyd.se/forum_3.2.1/viewtopic.php?f=30&t=3826
Denna tråd har en systertråd på Modulsyd, men väljer att posta även här då kunskapen om LocoNet och Arduino inte är begränsad till det forumet, även om tillämpningen är för modulkörning.

Idén är sprungen ur att jag körde två motorvagnar på Dreamtrack i Grimslöv, och såg potentialen i att få till kul trafikspel om multen skulle dela på sig längs vägen och gå åt olika håll och slås ihop på vägen tillbaka. Mer om det finns på Modulsyd.


Behovsspecifikation
- Behovet är att kunna köra två eller fler lok/motorvagnar som en mult
- Multen ska enkelt och med få minimala instruktioner kunna brytas och loken därefter köras separat
- Två eller flera lok/motorvagnar ska enkelt köras som en mult från att tidigare körts separat.


Lösningsidéer
- Loken kan köras med Advance Consist via CV19 och när multen behöver brytas så sätts CV19 till 0 för åtminstone ett av loken
- Två körhandtag används för att att köra loken på varsin lokadress
- En körkontroll används som kan hantera styra två lokadresser simultant
- En hårdvara med mjukvara sätts i ett Loconet-uttag som replikerar kommandon från en specifik adress till en annan


Vald lösning
En hårdvara med mjukvara sätts i ett Loconet-uttag och replikerar kommandon från en specifik adress till en annan

Mer utförlig behovsspec:
  • När Loconetkommandon skickas till en specifik lokadress ska dessa kommandon replikeras på en annan address
  • Initialt kan både källadress och replika-adress vara hårdkodade.
  • [-] En framtida version kan ha konfigurerbara adresser, antingen genom fysisk knapp eller genom dispatch av adress liknande metoden för att skicka en adress från en UT4'a till en FREDI

  • Hårdvaran ska vara LocoNet-kompatibel
  • Lösningen ska ge så liten ökad belastning på LocoNet, centralenhet och DCC som möjligt.
  • Funktioner replikeras rakt av.
  • [-]Om exv. F2 aktiveras för käll-adressen ska F2 aktiveras på replika-adressen.
    [-]Ingen kontroll av replika-adressens funktioner görs
    [-]Ingen funktionalitet för scenarion eller beroende lokadresserna sinsemellan krävs.

  • Ingen specifik programmering för denna lösning av respektive lokdekoder ska behövas
  • När Multi-dongeln inte längre används ska loken/motorvagnarna kunna köras enskilt på respektive adress. (Käll- eller replikaadress kan i sig vara en Advance Consist, men det pårverkar inte funktionaliteten för Mulit-dongeln)
Teknisk lösning
Hårdvara
En paneldekoder från MGP har valts som hårdvara. Anledningen till valet av hårdvara var att det var lättillgängligt och enklaste vägen för att få hårdvara för arudino och LocoNet ihop.

Mjukvara
- LocoNet-biblioteket "Model Railroading for Arduino" används.
- Arduino IDE används för kodutveckling.


Det är självklart uppskattat med input och kommentarer kring ovanstående.
« Senast ändrad: tis 26 mar 2019, 14:46:46 av AlexEhn »

AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #1 skrivet: tis 26 mar 2019, 14:43:15 »
Citat från: daniel post_id=39844 time=1553081176 user_id=56
Citat från: AlexanderEhn post_id=39840 time=1553075513 user_id=430
Kan någon vänlig själ vägleda mig i hur kommunikationen funkar mellan Loconet och arduinon? Eller innehåller ett "LocoNet-kort" även logiken och översättning från LocoNet till Arduino? Och inte bara hårdvaran?

Dokumentet LocoNet Personal Edition beskriver protokollet på LocoNet. Dokumentet är inte helt enkelt att förstå, men vi är några som programmerar mot LocoNet på forumet och som kan hjälpa dig.

LocoNet-centralen har ett antal "slots". Varje slot har ett antal bytes av data som anger status, lokadress, m.m. För att styra ett lok börjar man med att fråga vilken slot som har den aktuella lokadressen med kommandot OPC_LOCO_ADR. Kommandot har fyra bytes:
Byte 0: 0xBF
Byte 1: (adress / 128) & 127
Byte 2: adress & 127
Byte 3: Checksumma (denna räknas ut av biblioteket som du använder, se inlägget från LLJ)

Som svar får du SLOT DATA READ (OPC_SL_RD_DATA), 10 bytes.
Byte 0: 0xE7
Byte 1: 0x0E
Byte 3: Slot-nummer
Övriga bytes har olika data, t ex lokets hastighet.

Sedan styr du lokets hastighet med OPC_LOCO_SPD och lokets riktning med OPC_LOCO_DIRF.

Citat från: AlexanderEhn post_id=39931 time=1553557975 user_id=430
Citat från: PerEklund post_id=39842 time=1553079257 user_id=84
Här finns mer info runt Arduino och LocoNet
https://mrrwa.org/loconet-interface/



Jag har svårt att hitta någon dokumentation på LocoNet-biblioteket.
Exemplena finns, men det hade vart gött med en lista på alla objekt och metoder.

Någon som vet om det finns?



Jag har läst "LocoNet personal edition" parallellt med att jag har tittat på exemplena i Aruinobiblioteket, men det är svårt att se sambanden.
Det hade underlättat med en dokumentation som beskriver vilka objekt och metoder i biblioteket motsvarar vad i LocoNet.

Någon här som vet om/var det finns bättre dokumentation av Arduinobiblioteket.

LLJ

  • Veteran
  • *****
  • Antal inlägg: 4.629
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #2 skrivet: tis 26 mar 2019, 15:15:05 »
Ganska dumt att ha parallella trådar om samma sak i två olika forum. Håll dig till ett forum och samla alla kommentarer och info där.

/Lars

Lasp

  • Användare
  • ***
  • Antal inlägg: 198
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #3 skrivet: tis 26 mar 2019, 16:55:50 »
Tack för inlägget AlexEhn. Nej det är bra att kunskap om Arduino, ESP, RaspberryPi, MQTT samt slik sprids.
Det vore väldigt bra om man kunde ordna en fysisk träff och bara visa upp lite prototyper och ha ett grundläggande snack om protokollvägar och revisioner.
Jag vet att det finns fler forum, både för Modelljärnvägar, små racerbilar och Elektronik. Men nu finns chansen att samla detta här, eller på annan plats. Men mota inte bort någon.

Mekanoid

  • Stammis
  • ****
  • Antal inlägg: 892
    • Modelljärnvägsmoduler
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #4 skrivet: tis 26 mar 2019, 17:43:58 »
Alex, lyssna inte så mycket på LLJ. Det finns faktiskt flera personer som är avstängda & censurerade på Modulforum, bl.a. jag. Och så är det alltid nyttigt att få synpunkter från fler människor. Här kommer mina:

Jag kan inget om MGPs paneldekoder, men har en idé om hur man skulle kunna hantera multning till/från:
 1. En knapp & en röd/grön lysdiod kopplas till Aduinon
 2. Varje tryck på knappen växlar mellan multa/replikering med rött ljus och icke multad/replikering med grön ljus

Det finns flera sätt att kunna ställa in lokadresserna:
1. Du stoppar in mjukvara som kan göra Arduinon till en webbserver/accesspunkt. Då kan du med mobilens webbläsare surfa till en webbsida på Arduinon och där ställa in lokadresserna.
2. Du kan ha en MMRC-klient med display, "rotary encoder" och en menuprogramvara där du kan ställa in lokadresserna, som sen skickas via wifi till mult-lådan. Som förstås måste kunna wifi och MMRC.

Här är ett exempel på hur det ser ut när en MMRC-klient inte hittar nätverket den använde förra gången. Då startar en webbserver och en webbsida med inställningsmöjligheter visas. Surfar man dit med mobilens webbläsare, kan man ändra nätverksuppgiftrerna och när man trycker "save" sparas uppgifterna och Arduinon kopplar upp sig med hjälp av dem.


---
Mvh Peter

LLJ

  • Veteran
  • *****
  • Antal inlägg: 4.629
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #5 skrivet: tis 26 mar 2019, 17:58:36 »
Alex, lyssna inte så mycket på LLJ. Det finns faktiskt flera personer som är avstängda & censurerade på Modulforum, bl.a. jag.

Jag menar bara att det är lättare att följa och hjälpa till om man håller sig till ett forum istället för att sprida samma projekt i flera parallella forum.
Om det sker här eller på Modul Syd eller på annat forum spelar mindre roll.

/Lars

AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #6 skrivet: tis 26 mar 2019, 21:30:28 »
Ganska dumt att ha parallella trådar om samma sak i två olika forum. Håll dig till ett forum och samla alla kommentarer och info där.

/Lars

Alex, lyssna inte så mycket på LLJ. Det finns faktiskt flera personer som är avstängda & censurerade på Modulforum, bl.a. jag.

Jag menar bara att det är lättare att följa och hjälpa till om man håller sig till ett forum istället för att sprida samma projekt i flera parallella forum.
Om det sker här eller på Modul Syd eller på annat forum spelar mindre roll.

/Lars

Jag förstår, och egentligen håller jag med dig LLJ. Så jag ser framför mig att jag kommer kross-uppdatera så att tråden på Modulsyd hålls uppdaterad.

Du får skriva på vilket forum du vill, det viktigaste är din input  ;)
« Senast ändrad: tis 26 mar 2019, 21:43:39 av AlexEhn »

AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #7 skrivet: tis 26 mar 2019, 21:51:23 »

Jag kan inget om MGPs paneldekoder, men har en idé om hur man skulle kunna hantera multning till/från:
 1. En knapp & en röd/grön lysdiod kopplas till Aduinon
 2. Varje tryck på knappen växlar mellan multa/replikering med rött ljus och icke multad/replikering med grön ljus


Paneldekodern är likvärdig med en Arduino Pro Mini med tillaggt två Loconetkontakter på kretskortet. En knapp och lysdiod är synnerligen enkelt att lägga till.

Jag tror det behöver till funktionalitet på kan släppa och ta emot adresserna. Jag har mer att lära när det gäller hur LocoNet fungerar.


Det finns flera sätt att kunna ställa in lokadresserna:
1. Du stoppar in mjukvara som kan göra Arduinon till en webbserver/accesspunkt. Då kan du med mobilens webbläsare surfa till en webbsida på Arduinon och där ställa in lokadresserna.
2. Du kan ha en MMRC-klient med display, "rotary encoder" och en menuprogramvara där du kan ställa in lokadresserna, som sen skickas via wifi till mult-lådan. Som förstås måste kunna wifi och MMRC.

Här är ett exempel på hur det ser ut när en MMRC-klient inte hittar nätverket den använde förra gången. Då startar en webbserver och en webbsida med inställningsmöjligheter visas. Surfar man dit med mobilens webbläsare, kan man ändra nätverksuppgiftrerna och när man trycker "save" sparas uppgifterna och Arduinon kopplar upp sig med hjälp av dem.


Behovsspecen tillåter hårdkodade adresser just för att inte behöva göra det du beskriver. ;)
Det beror främst på att jag är synnerligen ny på Arduino och LocoNet, och har så långt det gått i mitt yrkesliv undvikt programmering och kodning.

Min idé på lösning för en eventuell version 2, då dynamiska/konfigurerbara adresser ska finnas, var att använda MGP blåtandsdongel och att via MGP's app ändra adresserna.

Dock är dina idéer bra att input. Framför allt lösning 1 känns tilltalande om jag i framtiden byter hårdvara till en ESP Wemo eller vad den heter.

Tack!
« Senast ändrad: tis 26 mar 2019, 22:08:13 av AlexEhn »

AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #8 skrivet: tis 26 mar 2019, 22:07:34 »
Och bara för att SvMJF har den goda smaken att kunna visa inbäddade YT-klipp så får ni här mitt "Hello World" när det gäller Arduinoprogrammering.

Detta är alltså hårdvaran jag utgår från, en MGP Paneldekoder. I manualen kan man läsa följande:

Citera
MGPs dekodrar är kompatibla med kretskortsfamiljen Arduino.

Dom kan omprogrammeras med Arduinos utvecklingsmiljö och i det fallet ska dom användas som ”Arduino Pro Mini”.

De sex oanvända anslutningspunkterna läng sidan på kretskortet är samma gränssnitt som finns på en ”Pro Mini”. Sett
från utsidan så är ”GND” det yttersta högra hålet.

För att använda korten med LocoNet så kan programbiblioteket från ”Model Railroading with Arduino” användas. De
första versionerna av dekodrarna använde detta bibliotek, medan senare version använder, pga minnesstorleken, mer
kompakt och mindre generell kod.

För att använda LocoNet-biblioteket så skall D8 användas för inkommande och D9
för utgående kommunikation.


AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #9 skrivet: mån 08 apr 2019, 21:53:40 »
Nu har jag lärt mig mer om Arduinokodning och gjort en prototyp till en en grind med lampor. Grinden ska sitta på servot. :)


AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #10 skrivet: mån 08 apr 2019, 21:58:10 »
Men jag läste i senaste MJ-magasinet och där såg jag en artikel om en DCC-sniffer!

Jag tänker att ena halvan av mitt projekt är en sådan sniffer, om än via Loconet istället för DCC.

Är det månne paj2 som är författaren?
Finns det möjlighet att få input och tips? Eller rent av få kika på lite av koden?




LLJ

  • Veteran
  • *****
  • Antal inlägg: 4.629
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #11 skrivet: mån 08 apr 2019, 22:18:10 »
Det är nog smidigare att använda det bibliotek som finns för LocoNet istället för att försöka skriva ett eget.
Eftersom jag har gjort en styrning av en enkel utställningsbana med två tåg som möts på en mötesstation (se Åmålbanan i MJ-magasinet) med detta bibliotek så vet jag vad det kan.

/Lars

AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #12 skrivet: mån 08 apr 2019, 22:29:08 »
Det är nog smidigare att använda det bibliotek som finns för LocoNet istället för att försöka skriva ett eget.
Eftersom jag har gjort en styrning av en enkel utställningsbana med två tåg som möts på en mötesstation (se Åmålbanan i MJ-magasinet) med detta bibliotek så vet jag vad det kan.

/Lars

Jag är inte alls ute efter att bygga eget, att uppfinna hjulet igen är bland det osmartaste jag vet. :)

Är exemplet "LocoNet Packet Monitor" motsvarande en sniffer fast för Loconet?

LLJ

  • Veteran
  • *****
  • Antal inlägg: 4.629
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #13 skrivet: mån 08 apr 2019, 23:23:33 »
Ja. Används för att visa all trafik på LocoNet.

Men man behöver både lyssna och sända samt ansluta sig till digitaladressen för ett visst fordon.

/Lars

PerH

  • Stammis
  • ****
  • Antal inlägg: 1.179
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #14 skrivet: tis 09 apr 2019, 06:41:04 »
Är det månne paj2 som är författaren?
Jupp, det är Paj2 som är författaren, han kommer säkert ge dig mer info.
Svenskt epok V-VI, H0 2R DCC m Z21/Mgp och TC(g)

rcmodeler

  • Användare
  • ***
  • Antal inlägg: 67

paj2

  • Veteran
  • *****
  • Antal inlägg: 4.634
    • http://www.mj-rallaren.se/index.htm
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #16 skrivet: tis 09 apr 2019, 08:22:02 »
rcmodeler ger här svar på frågan om var man hittar Arduinokoden  till DCC-sniffern.
Något som jag missade i artikeln i tidningen.

Jag vill samtidigt nämna att iden och mjukvaran till sniffern kommer från Rudy B... som ligger bakom många lösningar med MJ-elektronik baserat på bl.a  bl.a Arduino.

Mitt bidrag i sammanhanget är som artikelrubriken säger..... "Jag byggde en DCC-sniffer"... är att i MJ-magasinet visa hur en  lösning från Rudy B kan se ut i praktiken och i någon mån förklara hur det hela fungerar och hur den kan användas.

Det praktiska jobbet i sammanhanget bestod sålunda i att utföra anpassningen mellan Arduinon och DCC-signalen och en kapsling som skydd samt att fixa en bugg så att även långa lokadresser fungerar som det var tänkt.




« Senast ändrad: tis 09 apr 2019, 10:58:08 av paj2 »

BenWah46

  • Veteran
  • *****
  • Antal inlägg: 2.743
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #17 skrivet: tis 09 apr 2019, 12:45:16 »
Paj2 är alltför blygsam. Projektet har presenterats i detta forum med länkar till koden och med scheman och bilder.

http://www.svensktmjforum.se/forum/index.php?topic=20961.msg212666#msg212666
Bengt W
H0 2R DCC

paj2

  • Veteran
  • *****
  • Antal inlägg: 4.634
    • http://www.mj-rallaren.se/index.htm
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #18 skrivet: tis 09 apr 2019, 13:30:07 »
Paj2 är alltför blygsam. Projektet har presenterats i detta forum med länkar till koden och med scheman och bilder.

http://www.svensktmjforum.se/forum/index.php?topic=20961.msg212666#msg212666

Tack Bengt!

AlexEhn

  • Användare
  • ***
  • Antal inlägg: 341
SV: LocoNet på Arduino - att koda en "Multi-dongel"
« Svar #19 skrivet: tor 11 apr 2019, 14:16:09 »
rcmodeler ger här svar på frågan om var man hittar Arduinokoden  till DCC-sniffern.
Något som jag missade i artikeln i tidningen.

Jag vill samtidigt nämna att iden och mjukvaran till sniffern kommer från Rudy B... som ligger bakom många lösningar med MJ-elektronik baserat på bl.a  bl.a Arduino.

Mitt bidrag i sammanhanget är som artikelrubriken säger..... "Jag byggde en DCC-sniffer"... är att i MJ-magasinet visa hur en  lösning från Rudy B kan se ut i praktiken och i någon mån förklara hur det hela fungerar och hur den kan användas.

Det praktiska jobbet i sammanhanget bestod sålunda i att utföra anpassningen mellan Arduinon och DCC-signalen och en kapsling som skydd samt att fixa en bugg så att även långa lokadresser fungerar som det var tänkt.



Jag förstår. Ja det var koden jag funderade på hur jag kunde få fatt på. Tack, nu har jag lite mer att läsa på.  :D


Paj2 är alltför blygsam. Projektet har presenterats i detta forum med länkar till koden och med scheman och bilder.

http://www.svensktmjforum.se/forum/index.php?topic=20961.msg212666#msg212666

Aha! tack.