MODELLJERNBANEFORENINGEN I NORGE (MJF) - forum

  New Posts New Posts RSS Feed - Kommunikasjon fra Arduino til JMRI ??
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

Kommunikasjon fra Arduino til JMRI ??

 Post Reply Post Reply
Author
bkv1 View Drop Down
Veteran
Veteran


Joined: 19 desember 2010
Location: Norge
Status: Offline
Points: 247
Post Options Post Options   Thanks (0) Thanks(0)   Quote bkv1 Quote  Post ReplyReply Direct Link To This Post Topic: Kommunikasjon fra Arduino til JMRI ??
    Posted: 14 august 2016 at 20:43
Jeg har en ide om å bruke hall sensorer koblet til en Arduino, men jeg må sende sensor status videre til JMRI. Vet noen her hva jeg trenger for å få det til?

Edited by bkv1 - 14 august 2016 at 20:45
Hilsen Bjørn

N-skala, Peco 55, Digikeijs DR5000, JMRI. Tysk diesel nyere tid
Back to Top
programmeringssporet View Drop Down
Veteran
Veteran


Joined: 12 desember 2013
Status: Offline
Points: 405
Post Options Post Options   Thanks (0) Thanks(0)   Quote programmeringssporet Quote  Post ReplyReply Direct Link To This Post Posted: 15 august 2016 at 01:12
Hei,

Da må du koble hall sensor til Arduino.  Her er en Tutorial :

http://diyhacking.com/arduino-hall-effect-sensor-tutorial/

Deretter må du koble Arduinoen til PC'n med JMRI via USB, og installere en Sketch som leser ioporten og sender status til JMRI på en protokoll som JMRI støtter.  Den enkleste jeg har funnet er dcc++:

https://sites.google.com/site/dccppsite/home

Andre alternativer :

http://www.utrainia.com/65-arduinocmri-and-rs485
https://rudysmodelrailway.wordpress.com/2014/10/03/arduino-used-as-an-s88-occupancy-detector-board/
http://pgahtow.de/wiki/index.php?title=Lok_R%C3%BCckmeldung

Når du har valgt protokoll må du inn i menyen edit/preferences i JMRI og legge til en ny connection


Edited by programmeringssporet - 15 august 2016 at 01:14
Back to Top
bkv1 View Drop Down
Veteran
Veteran


Joined: 19 desember 2010
Location: Norge
Status: Offline
Points: 247
Post Options Post Options   Thanks (0) Thanks(0)   Quote bkv1 Quote  Post ReplyReply Direct Link To This Post Posted: 15 august 2016 at 08:44
Hei.
Jeg oppfatter dcc++ som en dcc-sentral i en Arduino. Er det riktig?
Jeg har allerede en sentral fra Digitax.

Ideen min er å plassere ut Arduinoer er langs anlegget og la dem fange opp at tog med magneter kjører over hall-sensorene. Denne informasjonen skal sendes tilbake til jmri som i mitt tilfelle kjører i en Raspberry pi.

Får du dcc++ til å passe inn i dette?
Hilsen Bjørn

N-skala, Peco 55, Digikeijs DR5000, JMRI. Tysk diesel nyere tid
Back to Top
programmeringssporet View Drop Down
Veteran
Veteran


Joined: 12 desember 2013
Status: Offline
Points: 405
Post Options Post Options   Thanks (0) Thanks(0)   Quote programmeringssporet Quote  Post ReplyReply Direct Link To This Post Posted: 15 august 2016 at 10:48
Originally posted by bkv1 bkv1 wrote:

Hei.
Jeg oppfatter dcc++ som en dcc-sentral i en Arduino. Er det riktig?



Hei,

Ja det er riktig, både DCC+ og z21 emulatoren er komplette DCC sentraler.  I JMRI kan du koble opp flere sentraler, og du kan velge hvilke funksjoner som som skal brukes i hver av dem.  f.eks. kan du velge en sentral for kjøring og en annen for programmering.

I ditt tilfelle velger du å bruke DCC+ kun for tilbakemelding (du trenger da ikke motorshield).  Dette bør fungere - hvis ikke kan du eventuelt plukke ut den delen av kildekoden itl DCC+ som er relevant, og lage en egen sketch som  bruker det samme meldingsformatet som DCC+ når den sender meldinger til JMRI. 

Jeg har testet en del på dette - fordi jeg ønsker å styre Likestrømslok, uten decoder fra JMRI,  v.h.a.  Adafruits Arduino Motorshield.
Back to Top
bkv1 View Drop Down
Veteran
Veteran


Joined: 19 desember 2010
Location: Norge
Status: Offline
Points: 247
Post Options Post Options   Thanks (0) Thanks(0)   Quote bkv1 Quote  Post ReplyReply Direct Link To This Post Posted: 15 august 2016 at 12:37
Jeg forstår.
Men anlegget mitt går langs veggen med to halvøyer ut i rommet. Ca 17 meter fra ende til ende.
Jeg hadde forestilt meg flere Arduinoer bortetter. Jeg håper å kunne sette dem alle langs 1 kabel som går tilbake til pc.
Hilsen Bjørn

N-skala, Peco 55, Digikeijs DR5000, JMRI. Tysk diesel nyere tid
Back to Top
programmeringssporet View Drop Down
Veteran
Veteran


Joined: 12 desember 2013
Status: Offline
Points: 405
Post Options Post Options   Thanks (0) Thanks(0)   Quote programmeringssporet Quote  Post ReplyReply Direct Link To This Post Posted: 16 august 2016 at 20:42
Hei,

Da trenger du en buss løsning.  Det enkleste med Arduino er å simulere Marklins S88 sensornettverk, som det er gjort her :

https://rudysmodelrailway.wordpress.com/2014/10/03/arduino-used-as-an-s88-occupancy-detector-board/

Jeg har ikke testet dette.

Et annet alternativ , jeg har ganske god erfaring med å koble serieporten i en ring mellom arduinoene.  Dette har jeg ikke noe ferdig programvare for deteksjon med.  Da må du evt. programmere Arduinoen selv.  Samtidig er det ikke noe god løsning over lengre avstander, fordi du kan oppleve støy på linjen ved 5 volt, slik at du må koble til RS232 drivere ved hver Arduino.  Ganske enkelt men en del lodding.

RS485 er da trolig et bedre alternativ, som Lenz/Roco benytter både på XPressnet og R-Bussen, men igjen må du lage kode selv, da JMRI ikke støtter R-Bussen direkte.

Et annet, og kanskje det enkleste er å koble Arduinoene til Raspberry'en med lange USB kabler, og usb hubber.  F.eks. kan du plassere Raspberryen sentralt på annlegget og strekke en fem meter lang USB kable i hver retning.  Der plasserer du en USB hub, som igjen kan ha opp til 5 meter lange USB kabler til Arduinoene.  Ulempen med denne løsningen er at hver Arduino oppfattes av JMRI som en digitalsentral.  Vet ikke hvor mange JMRI støtter.

En lignende mulighet kan være å ha benytte Arduinoer med Bluetooth slik at du slipper kablingen.

Alternativt kan være å sette opp tre ekstra Raspberryer (Raspberry Pi Zero koster nesten ingenting Ethernet adapter får du her : AliExpress ), som kobles sammen med Ethernet, samtidig som du benytter JMRI Server muligheter - Jeg har ikke prøvd dette.

Som du ser -  det er mange muligheter, men det kan tenkes at Arduino ikke er det enklester her, fordi du kanskje må lage egen progrramkode for Arduinoene.  Hovedproblemet er at hvis du skal ha RS232 RS385 , CanBuss eller Ethernet på en Arduino blir det ganske dyrt.  Da har jeg egentlig mere tro på å koble Hall sensorene direkte til distribuerte Raspberry Pi's,  eller kanskje et rimelig MBED kort med Ethernet (STM kortene koster fra ca kr 200, og kan kobles til ca. 100 Hall sensorer)?

Dette innlegget ble ganske teknisk - spør hvis det er noe som er uklart.  Det kan også være litt nyttig å vite hva slags kompetanse du har på Linux og programmering i f.eks. C, Python etc.

Du bør også vurdere om det er verdt arbeidet i forhold til å kjøpe ferdige moduler,  eller som jeg har gjort på Fastanlegget mitt : Satt opp et LCB (Layout Control Bus) fra MERG.  Her har også NMRA laget en alternativ standard som det også er laget støtte for i Arduinoer - men fremtiden til denne standarden er kanskje litt usikker.


Edited by programmeringssporet - 16 august 2016 at 21:00
Back to Top
bkv1 View Drop Down
Veteran
Veteran


Joined: 19 desember 2010
Location: Norge
Status: Offline
Points: 247
Post Options Post Options   Thanks (0) Thanks(0)   Quote bkv1 Quote  Post ReplyReply Direct Link To This Post Posted: 16 august 2016 at 23:07
Takk for info og for linkene i det forrige innlegget ditt. Jeg hadde allerede googlet meg frem til noen av dem. Dessverre kan jeg så lite om elektronikk at det er vanskelig for meg å vurdere innholdet.

Arduino var kanskje ingen god ide likevel. Det ser ut til at Merg CBUS jan være det beste alternativet nå. OpenLCB er interessant, men jeg ser ingen produkter.

Jeg kan jo forklare litt om det eksperimentet jeg ønsker å utføre. Jeg vil prøve å få til blokkdeteksjon (altså bestemme om en blokk er opptatt eller ikke) ved hjelp av hall sensorer i sporet og en magnet i hver ende av toget.

I hver ende av en blokk vil jeg plassere to sensorer med et lite mellomrom. I hvert sensorpar er den ene den ytre sensor og den andre den indre sensor. Det skal dermed være mulig å telle magneter som går inn i blokken og magneter som går ut av blokken.

Jeg må ha et jython scripting i JMRI som lytter på sensorene, og har nok logikk til å bestemme om en magnet går ut av blokken eller inn i den. Når blokken er tom for magneter, er den altså ledig. Jeg laget en prototype på et slikt scriptog brukte interne sensorer i en panelfil for å prøve det ut. Det ser ut til å kunne virke. Jython (python) kan jeg klare.

Hvorfor vil jeg ikke prøve tradisjonell blokkdeteksjon ved å spore strømforsbruk i blokken? Tja, jeg har nå fått denne andre ideen. Tradisjonell blokkdeteksjon krever at jeg kapper skinnene her og der, og det frister ikke. Dessuten må jeg for hver blokk føre digitalstrømmen gjennom en elektrodings (så vidt jeg har forstått) . Det fører til mer komplisert kabling. Det frister heller ikke.

Hvordan er Merg? Man må vel melde seg inn? Er du det ene norske medlemmet? Forventer de at alle medlemmer kan bidra med kunnskap om elektronikk?

Hilsen Bjørn

N-skala, Peco 55, Digikeijs DR5000, JMRI. Tysk diesel nyere tid
Back to Top
programmeringssporet View Drop Down
Veteran
Veteran


Joined: 12 desember 2013
Status: Offline
Points: 405
Post Options Post Options   Thanks (0) Thanks(0)   Quote programmeringssporet Quote  Post ReplyReply Direct Link To This Post Posted: 17 august 2016 at 00:13
Hei,

Jeg tror det kan være en god ide å teste videre med Jython scriptet ditt, og sette opp en Arduino i nærheten av Raspberryen for å teste dette ut i en blokk eller to.

Merg C-bus kan du laste ned designen for alle kortene, og lage dem selv.  Selve definisjonen på C-buss kan du også laste ned.

Hvis du melder deg inn,  koster ca kr 200 pr år/Paypall.  Kan du kjøpe komplette byggesett for modulene.  en 8 input modul (CANACE8C) koster f.eks. ca kr 100.  Pc interface  (CANUSB) ca kr 150.  Selve CAN kablingen er vanlig 4 tråders kabel.  Du får derfor en komplett overvåkning for ca kr 500.

Byggesettene er meget enkle, med detaljert byggebeskrivelse som passer for nybegynnere.  Dette er mye enklere enn f.eks. å lodde inn dekodere i lokomotiver, fordi beskrivelsen er så god, og at det er store lett loddbare komponenter.  Eneste utfordringer er tollen,  jeg endte opp med å bestille for < 350 kroner hver gang, bl.a. ved at jeg bestillte kun kretskortene, og kjøpte komponenter fra digikey.no.

I tillegg til mulighetene til å kjøpe byggesett, får du tilgang til forumet, og et blad i posten 4 ganger i året.  Kvaliteten på informasjonen kan du få et inntrykk av ved å laste ned noen fritt tilgejngelige bøker :
http://www.merg.org.uk/ebook.php (Anbefales til alle som generell lærebok i Modelljernbane elektronikk både digital og analog - og med mange prosjekter som de kaller "Pocket Money Projects" - Se side 150 i part B).

Medlemmene i MERG er alt fra "guruer" til nybegynnere - og det forventes ikke at du bidrar med noe.  F.eks. er SPROG  utviklet av et av medlemene i MERG - bl.a. basert på MERG sitt byggesett for DCC sentral.

Jeg var medlem, men har i det siste fokusert mere på egenutviklet styring med Arduino istedenfor MERG C-Bus, men kommer nok til å melde meg inn igjen når behovet for flere MERG moduler dukker opp.

Selv om MERG kanskje operer litt gammeldags med at du må melde deg inn for å få tilgang til Forumet, vil jeg absolutt si at medlemsavgiften er noe av det mest fornuftige jeg har brukt penger på når det gjelder MJ.  De selger byggesett kun til medlemer fordi de da mener de kommer utenom kravet til CE merking av byggesettene.




Edited by programmeringssporet - 17 august 2016 at 00:14
Back to Top
bkv1 View Drop Down
Veteran
Veteran


Joined: 19 desember 2010
Location: Norge
Status: Offline
Points: 247
Post Options Post Options   Thanks (0) Thanks(0)   Quote bkv1 Quote  Post ReplyReply Direct Link To This Post Posted: 17 august 2016 at 12:58
Ja kanskje kjøper jeg et motorshield til Arduinoen og gjør noen forsøk med DCC++
Hilsen Bjørn

N-skala, Peco 55, Digikeijs DR5000, JMRI. Tysk diesel nyere tid
Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 20 august 2016 at 12:37
Jeg har akkurat laget et system for å hente inn innganger fra en Arduino til JMRI som kanskje kan være av interesse.

Når det gjelder å sende data fra en Arduino til JMRI synes jeg det enkleste er å kjøpe ethernetkortet til Arduino og programmere Arduinoen til å oppføre seg som en LoconetOverTcp server.  Og så kople Arduinoen til maskinen som kjører JMRI via ethernet.

Arduino ethernetkortet får du for rundt om en 50-lapp på ebay.

LoconetOverTcp er en meget enkel protokoll som bare sender de bytene som Loconet vanligvis sender over det fysiske Loconettet over TCP/IP istedet (http://loconetovertcp.sourceforge.net/Protocol/LoconetOverTcp.html).

I JMRI finner du den som "LocoNetOverTCP LbServer" under "Digitrax" i "Connections".

Her er testprogrammet mitt:
https://github.com/Lobo-T/ArduinoLoconetOverEthernetSensor/blob/master/LoconetOverEthernetSensorV1.ino

Ethernetkortet bruker arduinopinnene 10,11,12 og 13.
Hvis du har en versjon av kortet med SD kortleser (som er de mest vanlige) så brukes pinne 4 som chipselect til SD kortet og du vil antakeligvis ikke klare å bruke den pinnen til noe fornuftig heller.
Jeg har hørt at noen kort har A0 og A1 koplet til write protect og prescence for SD kortet, men det har ikke vært tilfelle på noen av mine.
Pinnene 0 og 1 er best å la være å bruke siden de er koplet til seriellporten som er kjekk å ha til å debugge via.
Resten av pinnene skal være tilgjengelige.


Skal du ha flere Arduinoer så må du nødvendigvis ha en ethernet switch til å kople dem sammen.
Og hver Arduino blir en egen Loconet connection i JMRI.

Du må også gi hver Arduino en unik MAC adresse og IP adresse.
Og endre LOCONET_ADR slik at de ikke overlapper.
Det er fire innganger per LOCONET_ADR.
Slik som det er satt opp i programmet nå så er det definert 12 innganger og de vil ta opp adressene 0,1 og 2.  (Jeg mistenker at Digitrax ville kallt dette adresse 1,2 og 3.)

Back to Top
programmeringssporet View Drop Down
Veteran
Veteran


Joined: 12 desember 2013
Status: Offline
Points: 405
Post Options Post Options   Thanks (0) Thanks(0)   Quote programmeringssporet Quote  Post ReplyReply Direct Link To This Post Posted: 21 august 2016 at 20:23
Kuult,

LoconetOverTcp er en protokoll jeg ikke har sett på.  Jeg ser noen utvidede muligheter dette kan brukes til :

1. Utvide antall I/O pr. Arduino v.h.a. I2C bussen.
2. Distribuere v.h.a. I2C "langdistansedrivere".
3. Kjøre på et Arduino Mega,  eller MBED kort for flere innganger pr. krone.
4. Wifi ?
5. Kjøre koden(modifisert) (evt med I2C) på den samme Raspberry'en som man kjører JMRI på.

Den siste muligheten er kanskje den mest spennende da den ikke krever ekstra kontroller for de som allerede kjører JMRI på en Raspberry.

Man kan vel også lage en konsentrator på Arduino eller Raspberry Pi, som står i mellom slik at antallet connections i JMRI reduseres ?

Dette skal jeg se mere på en dag jeg har tid.
Back to Top
bkv1 View Drop Down
Veteran
Veteran


Joined: 19 desember 2010
Location: Norge
Status: Offline
Points: 247
Post Options Post Options   Thanks (0) Thanks(0)   Quote bkv1 Quote  Post ReplyReply Direct Link To This Post Posted: 21 august 2016 at 21:15
Dette er interessant,Trond.
Hvis jeg legger kabel til noen Arduinoer spredt rundt på anlegget vil jeg helst ikke trekke kabel fra hver av dem tilbake til en sentral switch. Kan jeg få til topologi som en bus? Altså alle Arduinoer langs en ethernetkabel?

Jeg har forøvrig brukt LocoNetOverTCP LbServer for å
få JMRI på laptoppen til å snakke med JMRI på Raspberry pi.
Hilsen Bjørn

N-skala, Peco 55, Digikeijs DR5000, JMRI. Tysk diesel nyere tid
Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 21 august 2016 at 21:53
1. Ja, dette har jeg allerede tenkt på.  Grunnen til at A4 og A5 (i2c data og clock) ikke er satt opp som innganger i det programmet er fordi jeg tenkte å koble til noen kort med MCP23008 portexpandere som jeg laget tidligere en gang.

2. Jeg har ikke noen erfaring med dette.  I2C er vel i hovedsak laget for å være en buss innenfor et kretskort, eller ivhertfall innenfor et apparat.  Men med riktig kabling og kanskje noen driverkretser går det sikkert an.

3. Ja, dette er nok en billigere løsning enn den i punkt 1.  Men jeg drives ofte av hva som hadde vært interessant å få til å fungere framfor det rent praktiske.  ;)

4. Det offisielle Arduino Wifi-shieldet var ganske dyrt sist jeg så på det.
Men nå for et år eller to så kom jo disse ESP8266 kretsene.  Jeg kjøpte en ifjor, men kom aldri så langt at jeg fikk gjort så mye eksperimenter og nå finner jeg den ikke igjen.  Ett av problemene er at den går på 3,3V og trekker mer en 3,3V pinnen på Arduinoen kan forsyne så man må nesten lage seg et kort med en 3,3V regulator og plass til ESP8266 kortet.

5. Det er visst noe støtte for io på Raspberry PI i de siste JMRI versjonene, men jeg har ikke sett på det.

Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 21 august 2016 at 22:10
Quote Hvis jeg legger kabel til noen Arduinoer spredt rundt på anlegget vil jeg helst ikke trekke kabel fra hver av dem tilbake til en sentral switch. Kan jeg få til topologi som en bus? Altså alle Arduinoer langs en ethernetkabel?

Ikke egentlig med moderne ethernet.  For 20 år siden når det gikk på koaksialkabel så var det jo slik det fungerte, men den tiden er forbi.  Du må nok ha en kabel fram til hvert ethernetkort.


Men det finnes jo andre løsninger som gjerne passer deg bedre.  Dette var bare noe jeg har holdt på med denne uken som virket som om det kunne være relevant.


Det er f.eks. fullt mulig å få en Arduino til å kommunisere på et vanlig fysisk Loconet.

Men du vil trenge å få produsert noen kretskort og lodde litt.

Her er en som har designet et kretskort for et Arduino loconet interface:
http://www.scuba.net/wiki/index.php/LocoShield

Og her et Arduino Loconet bibliotek til det kortet:
https://github.com/mrrwa/LocoNet

Jeg har bygget en versjon av det kortet og bruker LocoNetEherBuffer eksempelet i biblioteket som pc-interfacet mitt mot Digitrax kommandostasjonen min.

Jeg ser at i den nyeste versjonen av det kortet så har han også laget en mulighet for å forsyne Arduinoen med driftsspenning via loconet Railsync ledningene.
Du vil da kunne få til å ha en buss mellom Arduinoene som er både data og strømforsyning.  Som kanskje er det du opprinnelig var på jakt etter.

Back to Top
programmeringssporet View Drop Down
Veteran
Veteran


Joined: 12 desember 2013
Status: Offline
Points: 405
Post Options Post Options   Thanks (0) Thanks(0)   Quote programmeringssporet Quote  Post ReplyReply Direct Link To This Post Posted: 22 august 2016 at 00:33
"1. Ja, dette har jeg allerede tenkt på.  Grunnen til at A4 og A5 (i2c data og clock) ikke er satt opp som innganger i det programmet er fordi jeg tenkte å koble til noen kort med MCP23008 portexpandere som jeg laget tidligere en gang."

MCP23017 - er tilsvarende men med 16 innganger.

"2. Jeg har ikke noen erfaring med dette.  I2C er vel i hovedsak laget for å være en buss innenfor et kretskort, eller ivhertfall innenfor et apparat.  Men med riktig kabling og kanskje noen driverkretser går det sikkert an."

Et eller annet sted på forumet - var jeg i en diskusjon om dette.  Da fant vi en leverandør som lagde mj-styring basert på dette - husker ikke hvem.

Jeg fant imidlertid en 8-pins krets som kan brukes for å øke I2C til 50 meter :

http://www.digikey.no/product-detail/en/texas-instruments/P82B715P/296-23469-5-ND/1868651
Jeg bestilte to for å teste ut.

Et annet alternativ er 1-wire buss:

https://github.com/neuoy/OneWireArduinoSlave
http://forum.arduino.cc/index.php?topic=20574.0
https://www.maximintegrated.com/en/app-notes/index.mvp/id/148


"4. Det offisielle Arduino Wifi-shieldet var ganske dyrt sist jeg så på det.
Men nå for et år eller to så kom jo disse ESP8266 kretsene.  Jeg kjøpte en ifjor, men kom aldri så langt at jeg fikk gjort så mye eksperimenter og nå finner jeg den ikke igjen.  Ett av problemene er at den går på 3,3V og trekker mer en 3,3V pinnen på Arduinoen kan forsyne så man må nesten lage seg et kort med en 3,3V regulator og plass til ESP8266 kortet."

Det er ganske enkel å modifisere en Arduino til 3.3Volt :
https://learn.adafruit.com/arduino-tips-tricks-and-techniques/3-3v-conversion

eller kjøpe en 3.3 Volts Arduino Pro Micro:
http://www.digikey.no/product-search/en?keywords=1568-1061-ND

eller en komplettløsning :
http://www.digikey.no/product-detail/en/adafruit-industries-llc/3010/1528-1580-ND/5848448
Har bestilt en forrige uke - lander nok i postkassen morgen.
eller :
https://www.kjell.com/no/produkter/elektro-og-verktoy/elektronikk/arduino/shields/adafruit-feather-huzzah-utviklingskort-p88221




Edited by programmeringssporet - 22 august 2016 at 00:36
Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 24 august 2016 at 17:04
Jeg la til muligheten for å bruke samme programmet både til innganger og utganger.

https://github.com/Lobo-T/ArduinoLoconetOverEthernetSensor


Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 03 oktober 2016 at 21:27
Noen som kom så langt at de testet dette?


Nå er jeg tilbake fra ferie og har programmert litt mer.
Jeg har nå laget et tilsvarende program for å kommunisere over vanlig Loconet.

Som nevnt i den tidligere posten så trenger du å lage et kretskort med det fysiske Loconet-grensesnittet.
Jeg har fra før laget versjon 3 fra denne siden: http://www.scuba.net/wiki/index.php/LocoShield
Og det er det jeg har testet mot.

Når tråden ble startet så var det jo en versjon 1.5 av kortet som var ment å kunne drives fra Railsync linjene på Loconet kabelen.  Og man ville da kunne få til det som du opprinnelig ønsket, en kabel med både strømforsyning og data, og som kan koples i serie.
Men som du ser så har han nå oppdaget at den kretsen der ikke fungerer som tenkt.

Jeg har laget min egen utgave av kortet med en litt annen krets som jeg tror skal fungere, men jeg venter på kretskortet.  Jeg tror jeg venter med å legge ut kretsen til jeg har fått testet den.  Wink


Programmet mitt er her: https://github.com/Lobo-T/ArduinoLoconetIO

Du vil også trenge å installere Arduino Loconet-biblioteket, som du finner her: https://github.com/mrrwa/LocoNet


Dette programmet er igrunnen mye enklere enn det forrige siden det biblioteket tar seg av all bitmanipuleringen.

Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 19 oktober 2016 at 21:00
Kretskortene kom igår, så idag satt jeg igjen på arbeid og loddet sammen kretsen.

Ser ut til å fungere:


Jeg forstår at de overflatemonterte komponentene kanskje ser litt skremmende ut å lodde for de fleste, så jeg har designet en utgave med gode gammeldagse gjennomhullskomponenter også.  Den bør de fleste som vet hvilken ende av en loddebolt man bør holde i klare å lodde sammen.


Hvis det fortsatt er noen som er interesserte i dette her så skal jeg prøve å få lagt ut tegninger, delelister og prøve å forklare litt iløpet av helgen.

Back to Top
SveinR View Drop Down
Fremo og MjF medlem
Fremo og MjF medlem


Joined: 03 november 2004
Location: Norway
Status: Offline
Points: 1215
Post Options Post Options   Thanks (0) Thanks(0)   Quote SveinR Quote  Post ReplyReply Direct Link To This Post Posted: 19 oktober 2016 at 23:29
Nå har jeg ikke fulgt med så nøye i denne tråden, men forstår jeg det riktig at det du har laget og viser i denne video er en Loconet Interface til Arduino, så denne kan f.eks brukes som en enkel I/O Interface?
Mvh

-SveinR



Det finnes en skiftetraktor til alt

Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 20 oktober 2016 at 11:34
Originally posted by SveinR SveinR wrote:

Nå har jeg ikke fulgt med så nøye i denne tråden, men forstår jeg det riktig at det du har laget og viser i denne video er en Loconet Interface til Arduino, så denne kan f.eks brukes som en enkel I/O Interface?

Det korte svaret er ja.  Det lengre svaret er vel spredd over flere poster over her.  Wink

Med det programmet jeg har skrevet så langt så kan du bruke det til innganger og til enkle utganger for å f.eks. slå av og på lysdioder.
Jeg har tenkt å utvide programmet slik at du også kan gruppere flere fysiske utganger til en logisk slik at du kan bruke dem til å styre veksler.  (Du må nødvendigvis ha noe mer utenom selve Arduinoen for å få til det siste siden den direkte bare kan gi ut 5V og maks 20mA per utgang.)

Nå er ikke det egentlig noe nytt, det som er nytt her er at vi bruker Railsync signallederne til å forsyne Arduinoen med driftsspenning også.
Back to Top
programmeringssporet View Drop Down
Veteran
Veteran


Joined: 12 desember 2013
Status: Offline
Points: 405
Post Options Post Options   Thanks (0) Thanks(0)   Quote programmeringssporet Quote  Post ReplyReply Direct Link To This Post Posted: 20 oktober 2016 at 13:35
Hei,

Både TORTOISE og Servoer kan drives direkte fra Arduino, med riktig programvare, så det er etter min mening gode alternativer til tradisjonelle vekselmotorer, som derfor også gjør Arduino mye mere aktuelle.  Prismessig sammenlignet med tradisjonelle dekodere og spolemotorer blir dette nesten latterlig billig.

Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 21 oktober 2016 at 13:25
Å styre slike RC servoer fra Arduinoen skal ikke være noe problem.   De har vel tilkopling for driftspenning og en kontrollinngang som skal ha et pulsbreddemodulert signal der duty cycle avgjør posisjon.

Men slik jeg har forstått det så er vel Tortoise motorene bare vanlige motorer, med ganske lavt strømtrekk.
Forstår jeg deg slik at du har kjørt dem rett fra Arduino inngangene?  Induktiv last direkte på mikrokontrollerutganger blir vanligvis ansett som ganske uheldig.
Back to Top
programmeringssporet View Drop Down
Veteran
Veteran


Joined: 12 desember 2013
Status: Offline
Points: 405
Post Options Post Options   Thanks (0) Thanks(0)   Quote programmeringssporet Quote  Post ReplyReply Direct Link To This Post Posted: 21 oktober 2016 at 16:40
Tortois har jeg bare prøvd en gang.  I praksis er vel strømforbruket så lite at den induktive strømmen /spenningen blir så liten at det fungerer greit i praksis - selv om det er en ganske tvilsom måte å gjøre det på.  Eventuelt kan man kanskje sette noen Zenerdioder i paralell.

Konsoeptet med Tortuis er at man snur spenningen.  Dette løses ved å koble en turtois til to digitale utganger, og så alternere disse mellom feks D2:HØY D3:LAV og D2:LAV-D3:HØY for å flytte sporvekselen. to Zenerdioder på f.eks. 5.5 volt seriekoblet met Anaode koblet til Katode, og koblet i parallell med motoren kan vel sikre dette - men som sagt jeg tror ikke det er nødvendig (og en Arduino UNO prosessor koster bare kr 20, så hvis det ryker en en gang i blant er det ikke noe stort problem=
Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 23 oktober 2016 at 19:30
Her er skjema og kretskortlayout for Arduino Loconet interfacene jeg har laget.

Dette er basert på kretsene til John Plocher som du kan finne her: http://www.scuba.net/wiki/index.php/LocoShield

Jeg har bare gjort noen små endringer for å få det til å virke med forsyningspenning på Rsync.

Her er skjemaet for versjonen med overflatemonterte komponenter:
Og her er kretskortlayouten:

Jeg laget også en versjon med vanlige gjennomhullskomponenter.  Den er forsåvidt ikke testet, men det er samme kretsen bare med litt andre komponenter.  Så den skal fungere.
Skjema:
Layout:

Dette er tegnet i Cadsoft Eagle PCB, som er gratis for hobbybruk for kort opp til 10x10cm.
Eagle filene finner du her hvis du ønsker å gjøre endringer selv:

Der finner du også til filer med komponentliste.  I kolonnen "ELFA" har jeg lagt inn bestillingsnummrene hos https://www.elfadistrelec.no/ for egnede komponenter.


Jeg pleier å bruke OSH park til å få produsert kretskort: https://oshpark.com
De er ganske billige for små serier.
Du må bestille minst tre kort av samme design.   De garanterer at de sender innen 12 dager, men min erfaring er at det går raskere enn det.

For disse kortene her så kommer tre stykk på $20.40, altså rundt om kr.56 per kort.  (Gitt at du har bruk for alle tre da).
Det er ganske billig for en så liten serie.  Å lage kretskort selv har jeg sluttet med.

Her er link til å bestille overflatekomponentversjonen: https://oshpark.com/shared_projects/u9NtCZLS
Og her for gjennomhullsversjonen: https://oshpark.com/shared_projects/sXRovCQW


Jeg kommer tilbake med litt mer informasjon.
Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 23 oktober 2016 at 21:20
Det er noen komponenter til du trenger som jeg glemte å ta med i forrige post.
Du trenger de lange kontaktpinnene som Arduino bruker til å stable ekstrakort oppå hverandre.  De selges ikke hos Elfa.  Det enkleste er antakeligvis å kjøpe dem på eBay.  Søk på "arduino stackable header kit".

Og selve Arduinoen også selvfølgelig.  Den får du også ganske så billig på eBay.


Det er ikke nødvnedigvis alle komponentene du trenger heller.

IC2 og R10 er for Loconet terminering, og JP3 for å kunne slå denne av og på.  Hvis du skal kople dette til en Digitrax kommandostasjon har du ikke bruk for dem, da er den terminatoren.

Terminator er et ganske dårlig betegnelse på dette, men det er det Digitrax kaller det.  Det det faktisk er er en 15mA konstantstrømgenerator som gir spenning til selve bussen.

Dette er med på kortet i tilfelle du ønsker å lage et "stand-alone" Loconet uten kommandostasjon.  Da trenger du dette på ett av kortene.  Det er viktig at du ikke har termineringen aktivt på mer enn ett.


LED1 og R1 trengs bare hvis du vil ha lys som blinker når det er bussaktivitet.  Hvis ikke kan de sløyfes.  Men sikkert kjekt å ta med på det første du bygger, til feilsøking.


JP1 og JP2 er jumpere for å kunne slå av og på å forsyne kortet og Arduinoen via Loconet RAILSYNC ledningene.  Hvis du vet at du alltid vil ha dette på kan du selvfølgelig bare lodde en ledning over punktene istedet.


Nå blir det litt tenknisk her er jeg redd.

RAILSYNC signalet er en kopi av DCC signalet og går både positivt og negativt i forhold til Loconet GND.
Dette er grunnen til at versjonen til John Plocher med en helbrolikeretter ikke fungerer, du vil få en kortslutning fra GND til den RAILSYNC-linjen som går negativt.
Her er det løst ved å bare bruke en halvbro, som består av diodene D1 og D2.
Hvis du bruker Railsync til å gi DCC signal til en booster er det viktig at du bruker raske nok dioder her til ikke å ødelegge signalet.

C1 har jeg ikke satt noen komponentstørrelse på.  Og på testkortet min er den foreløpig tom.  Før 5 voltsregulatoren på selve Arduinokortet er det en 47uF kondensator som antakeligvis er stor nok til å glatte den pulserende likespenningen vi har etter å ha likerettet railsyncsignalet med en halvbro.  Men hvis vi trekker større strøm vil vi på et eller annet tidspunkt antakeligvis få bruk for en større kondensator.  Så jeg laget plass til en.

R11 er antakeligvis ikke nødvendig.  Ideen er å ha litt motstand i serie slik at det skal ta litt tid å lade opp kondensatorene sånn at ikke Railsync signalet blir dratt ned i det øyeblikket du kopler kortet til.
Jeg har ikke egentlig gjort noen beregninger eller eksperimenter her.  Du kan sikkert bare lodde en ledning over istedet.



Istedet for å kople dette til det faktiske Railsync signalet fra en Digitrax kommandostasjon kan du kople til en 12V spenningsforsyning istedet.  Du må da kople minus på strømforsyningen til Loconet GND og pluss til begge Railsync linjene.  Det er da svært viktig at du ikke kopler dem til kommandostasjonen.  Du kan ha kommunikasjon med en kommandostasjon likevel så lenge du bare kopler til pinnene 2-5 på den ledningen du kopler til kommandostasjonen.


Jeg finner ikke noen offisiell informasjon hos Digitrax om hvor mye Railsync linjene kan belastes.
Men andre steder på nettet sier 1 ampere.
Jeg målte en Arduino og dette kortet til å trekke litt under 60mA.  Så hvis du bruker dette bare til innganger så skal du i teorien kunne klare å kople 16 stykker etter hverandre.


Hvis du forsyner annet enn noen få lysdioder fra 5 volten på Arduinoen må du passe på å beregne hva spenningsregulatoren på Arduinoen tåler.

Hvis vi sier at vi har 12V på Railsync, minus 0,75V over dioden på Locoshield kortet, minus 0,75V over dioden etter VIN på Arduinoen så har vi 12-0,75-0,75-5 = 5,5 volt som spenningsregulatoren skal brenne av.  Ved de 60 milliamperene så utvikler den allerede 0,33 Watt.  Du bør antakeligvis holde deg under 1 Watt.  Hvis Arduinoen slutter å virke etter en stund, men begynner å virke igjen etter å ha fått avkjølt seg litt så overbelaster du nok spenningsregulatoren.

Back to Top
TrondH View Drop Down
Viderekommen
Viderekommen


Joined: 18 august 2016
Status: Offline
Points: 29
Post Options Post Options   Thanks (0) Thanks(0)   Quote TrondH Quote  Post ReplyReply Direct Link To This Post Posted: 23 oktober 2016 at 22:59
"Så hva kan jeg bruke dette til?" spør du kanskje?  Svaret er "Hva som helst!", det er det som er så fint med ting som er programmerbare.  Wink

Men selv om du ikke har noen programmeringskunnskap så er det ting du kan bruke dette til. 

Det hjelper å ha en viss forståelse for hva en Arduino er så begynn med å lese litt her: https://www.arduino.cc

Download Arduino utviklingsmiljøet.  Det finnes til både Linux, Windows og Macintosh.

Så downloader du Loconet biblioteket herfra: https://github.com/mrrwa/LocoNet
(Trykk på den grønne knappen der det står "Clone or download", velg så "Download ZIP".)

I Arduino IDEet så kan du nå på menylinjen gå til "Sketch->Include library->Add .ZIP library..."
Og velge filen du nettopp lastet ned.

Når vi i programmeringsverdenen snakker om et "bibliotek" så snakker vi om en samling av funksjoner som kan brukes i et annet proram.  Dette biblioteket tar seg av de lavnivås funksjonene for å kommunisere over Loconet med dette Loconetinterfacet.

Men det følger også med noen eksempler.  Du finner dem under "File->Examples->Loconet->".
To som er ganske interessante hvis du ikke har et PC interface til Loconet fra før er:
*LocoLinx, får Arduinoen til å oppføre seg som et PC interface over den virtuelle seriellporten du får når du kopler til Arduinoen.
*LocoNetEtherBuffer, brukes sammen med et Arduino ethernetkort til å lage et Loconetinterface som snakker Loconet over ethernet.


Og så har du det programmet jeg har skrevet som jeg har snakket om lengre oppi tråden her.  For å bruke Arduinoen til inn og utganger, for å rapportere tilbake og styre ting fra JMRI.  (Eller andre programmer).

Hvis du vil se på det så kan det være lurt å begynne med det som nå ligger under git branchen "ArduinoIO_only" (https://github.com/Lobo-T/ArduinoLoconetIO/tree/ArduinoIO_only).
Det tillater at du kan sette opp alle pinnene på Arduinoen til å være Loconet innganger eller utganger.

Versjonen som nå ligger under "Master" (https://github.com/Lobo-T/ArduinoLoconetIO) tillater også at du kan bruke MCP23008 portekspander kretser til å få enda flere inn eller utganger.  Men det er litt vanskeligere å forstå.



Noen av de eksemplene vil antakeligvis ha Loconet transmit pinnen på Arduinoen satt til pinne 6, dette må du endre til 7 for at det skal virke med dette kortet.

På en Arduino UNO må receive pinnen alltid være pinne 8.  Dette har med å gjøre at den har spesiell hardware som benyttes (den er capture pin for Timer1 capture funksjonen).

Det kan også brukes mot en Arduino MEGA, men der er receive pinnen pinne 48. 
For å bruke dette kortet må du da:
1. Kutt kretskortbanen mellom de to loddepunktene i SJ2 med en skalpell, e.l. (forsåvidt bare nødvendig hvis du skal bruke pinne 8 til noe.)
2. Lodd en ledning til punkt TP2.
3. Kopl denne til pinne 48.

Loconet biblioteket vil ikke virke med andre typer Arduinoer som ikke bruker AVR kretser.  (Zero,101,Yun,etc.)


Jeg frykter at jeg kanskje bare forvirret folk enda mer nå.  


Gi beskjed hvis du bruker dette.  Spesiellt hvis du gjør noen endringer.
Back to Top
 Post Reply Post Reply

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 12.05
Copyright ©2001-2022 Web Wiz Ltd.

This page was generated in 0,063 seconds.