Locodoco: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
Keine Bearbeitungszusammenfassung
 
(14 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{ProjektInfoBox
{{ProjektInfoBox
|name       = locodoco
|name=locodoco
|status     = experimental
|status=experimental
|image       =  
|image=Locodoco-train1.jpeg
|description = An open source model railroad control infrastructure.
|description=An open source model railroad control infrastructure.
|author      = Soeren
|username=Soeren
|username    = Soeren
|author=Soeren
|version    =
|platform=AVR Microcontrollers
|update      =
|license=GPL
|platform   = AVR Microcontrollers
|download=[https://github.com/soern/locodoco/ Github]<strike>[[http://www.das-labor.org/trac/browser/locodoco Trac]] [[https://www.das-labor.org/svn/locodoco SVN]]</strike>
|license     = GPL
|tags=Bewegung und Mechanik,
|download   = [[http://www.das-labor.org/trac/browser/locodoco Trac]] [[https://www.das-labor.org/svn/locodoco SVN]]
|update=
}} __NOTOC__
}}
__NOTOC__
{| style="border-color:#EEEEEE;border-style:solid;padding:8px;float:left;margin-right:10px;margin-bottom:10px;margin-top:2em;"
|- style="vertical-align:top;"
|
== Components & Building Blocks ==


{|
|
{{Imagemap|Locodoco-decoder-v2.jpg|Locodoco/Loco_Decoder|width=140px|mod=center|alt=Loco Decoder V2|caption=Loco Decoder|description=none}}
&raquo; [[Locodoco/Loco_Decoder|Loco Decoder]]
|
{{Imagemap|Locodoco_Irsender_v1_top.jpg|Locodoco/Position_Tracking|width=140px|mod=center|alt=Position tracking node built into LGB track|caption=Position tracking|description=none}}
&raquo; [[Locodoco/Position_Tracking|Position Tracking]]
|-
|{{Imagemap|Ldc_webif.png|Locodoco/Webinterface|width=140px|mod=center|alt=Webinterface for the Locodoco project|caption=Webinterface|description=none}}
&raquo; [[Locodoco/Webinterface|Webinterface]]
|}
|}
== About Locodoco ==
'''Locodoco is an open source (Soft- and Hardware) project that lets you control model trains and automate train movements.''' The Project consist of several Hard- and Software components. In the first stage of this project's development a "loco decoder" was built. This piece of hardware lets you control motor throttle, lights and other functions of a loco via data transmissions.
'''Locodoco is an open source (Soft- and Hardware) project that lets you control model trains and automate train movements.''' The Project consist of several Hard- and Software components. In the first stage of this project's development a "loco decoder" was built. This piece of hardware lets you control motor throttle, lights and other functions of a loco via data transmissions.
<br style="clear:both" />
== Motivation ==
There simply wasn't an open implementation that suited my needs. There is a well-developed open source project that implements DCC ([http://www.opendcc.de/ Open DCC]). Unfortunately DCC doesn't provide features like sending transmissions from locos to the controller - well, actually it does, but DCC's feedback functions are quite limited due to DDC's nature.


[[image:Locodoco-train1.jpeg|thumb|right|First prototype of the loco decoder installed into LGB 2033]]Another goal I want to achieve is simplicity. A typical use case for this system is a plug-and-play setup where you simply stick all the track pieces together and plug in the power. In current implementations this works as well - turnouts get their signal from the track just like the locos do. The only disadvantage is that you'll have to remember or note turnout numbers in your control panel. The ability I wanted to add to model railroading is to make the process of switching a turnout more intuitive. Once this system is fully implemented you'll be able to select the next turnout on the way of a loco.
=== Motivation ===
There simply wasn't an open implementation that suited my needs. There is a well-developed open source project that implements DCC ([http://www.opendcc.de/ Open DCC]). Unfortunately DCC by nature doesn't provide features like sending transmissions from locos to the controller - well, actually it does, but this system would then be called RailCom&copy;&trade;&reg; and is covered by patents - the opendcc project recently had to stop supporting it because the law situation was "uncertain".
 
Another goal I want to achieve is simplicity. A typical use case for this system is a plug-and-play setup where you simply stick all the track pieces together and plug in the power. In current implementations this works as well - turnouts get their signal from the track just like the locos do. The only disadvantage is that you'll have to remember or note turnout numbers in your control panel. The ability I wanted to add to model railroading is to make the process of switching a turnout more intuitive. Once this system is fully implemented you'll be able to select the next turnout on the way of a loco.
 
== Features & Advantages ==
Usual DCC systems aren't designed for mobile setups. Consider track occupancy detectors for example: To make use of them, you'll need to run wires from these devices back to your base station or even cut the track at some parts of your setup. Since these devices weren't even considered by the DCC standard definition, they possibly won't cooperate with hardware from other vendors, so you're pretty much bound to buying equipment from this particular vendor.


== Features ==
=== Waypoints & Positioning information ===
=== Waypoints & Positioning information ===
Waypoints along the track (beacons) transmit an unique ID via infrared diodes to bypassing locos. This allows locos to transmit their position, direction and speed to the controlling devices. It may also be possible to utilize an accelerometer for more precise acceleration, deceleration information and positioning.
Waypoints along the track (beacons) transmit an unique ID via infrared diodes to bypassing locos. This allows locos to transmit their position, direction and speed to the controlling devices. It may also be possible to utilize an accelerometer for more precise acceleration, deceleration information and positioning.
Zeile 36: Zeile 56:


== Loco decoder ==
== Loco decoder ==
=== First prototype (aka Version 1) ===
[[Datei:Locodoco v1 lgb 2060.jpg|thumb|left|200px|Loco decoder v1 in LGB 2060 ("Schöma Diesellok")]]
[[Datei:Locodoco v1 lgb 2060.jpg|thumb|left|200px|Loco decoder v1 in LGB 2060 ("Schöma Diesellok")]]
The loco decoder consists of an AVR Microcontroller (Atmega32), a RFM12 radio transceiver, an L6202 Motor controller and several other Parts. Due to its size (3x5cm), it currently only fits into rather large scale Trains (i.e. G-Scale locos). At the moment the parts used are mostly SMD and the copper layout is designed for a one-sided board. It may be possible to shrink the entire size to 1/2 of the current, but that'll be pretty much the end of the scale and could fit into normal-sized H0 locos at most.
The loco decoder version 1 was a one layered printed circuit board with an AVR Microcontroller (Atmega32), a RFM12 radio transceiver, an L6202 Motor controller and several other Parts. After some testing and research in the model railroad community, it soon became clear, that especially load regulation is a feature which needed to be added to the controller. Furthermore the 78L05 power regulator (100mA) simply didn't provide enough power for smoke generators and servos.
 
== Loco decoder version 2 ==
=== Discrete Motor Controller ===
[[Datei:Decoder_v2-motor_driver.png|thumb|right|Circuit of the new Motor Driver]]
[[Datei:Locodoco v2 pwmtest.jpg|thumb|right|PWM test for the MOSFET Motor Driver]]
The Motor driver needs more power. I've asked around and was told that some motors consume more than 2A per motor, which clearly is too much for the 6202. Although the L6203 could handle up to 4A, having a huge standing-out Multiwatt package on the circuit board wasn't an option either. So I decided to build a Motor controller on my own.
 
The first test with the new driver was a complete success: I've put 4 (analog) Locos on the Track, put the Motor driver test circuit in between and ran it for about an hour - the FETs weren't even warm.


=== Other features ===
=== Loco decoder version 2 ===
* 4 NPN driven outputs, 250mA each
The 2nd Version of the Loco decoder is currently under development. For more information about the device(s) see [[Locodoco/Loco_Decoder]].
* 2 High Power outputs, 4A each
* 10 Pin Connector for extensions (GND, VCC, Serial RX/TX, one Interrupt and some ADC Pins)
* 1A 5V voltage Regulator
* 3.3V logic supply regulator
* RFM12B (instead of RFM12)
* Current sensor (this is a TODO)


== Waypoint transmitter ==
== Waypoint transmitter ==
Zeile 63: Zeile 70:
The waypoint transmitter fits underneath (or better said into) a single track brick of the standard LGB track and is visually almost completely hidden (just the transmitter diode peeking out). It consists of an infrared transceiver, an Attiny45 (or pin-compatible processor), a voltage regulator (78L05) and some capacitors. The device is designed to be powered by the track, which also makes it suitable for "mobile" track layouts.
The waypoint transmitter fits underneath (or better said into) a single track brick of the standard LGB track and is visually almost completely hidden (just the transmitter diode peeking out). It consists of an infrared transceiver, an Attiny45 (or pin-compatible processor), a voltage regulator (78L05) and some capacitors. The device is designed to be powered by the track, which also makes it suitable for "mobile" track layouts.


&raquo; For more information about position tracking, see [[Locodoco/Position_Tracking|this page]].
== Turnout controller ==
== Turnout controller ==
The turnout controller is a piece of hardware that... well, controls turnouts. There will be several different versions available - some with RFM12 modules, some with infrared transistors to receive commands. Both with different amounts of outputs (for driving more than one turnout or n-way turnouts).
The turnout controller is a piece of hardware that... well, controls turnouts. There will be several different versions available - some with RFM12 modules, some with infrared transistors to receive commands. Both with different amounts of outputs (for driving more than one turnout or n-way turnouts).
== Protocol ==
Each message starts with a '''start header'''. Multiple commands to or from a device with a specific Address may be concatenated into one single Message. Subsequent Headers in the message to follow solely contain a TYPE field.
=== Start Header ===
Byte  0    1    2    3
    +----+----·----+----+ ...
    |TYPE|  ADDR  |XOR |
    +----+----·----+----+ ...
The Header is 32 Bits long and consists of 3 Fields:
* TYPE: The Message Type
* ADDR: Destination or Source Address (depending on the message type)
* XOR: All Bytes of the Message XOR'ed together (payload, including header fields TYPE and DSTADDR). When the XOR sum is built over the header fields, the XOR field itself is set to 0x00 (therefore ignored)
=== Follow-up Header ===
Each subsequent header just contains a single TYPE field. The Address field is not repeated, since the source- or destination Address is the same.
=== Types ===
{|
| '''Bit #'''
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|-
| '''Name'''
| (res.)
| (res.)
| CONCAT
| ACKRQ
| Type Bit 3
| Type Bit 2
| Type Bit 1
| Type Bit 0
|}
* Bits 6 & 7 are reserved for future use.
* The '''concat''' Bit marks that another header/payload follows after the current one.
* If the '''ackrq''' Bit is set, a client must acknowledge the receipt of the message (see acknowledgement messages)
==== Type Messages (Bits 0..3) ====
{|
| 0x00
| Speed control
| 0x01
| Function Control
|-
| 0x02
| Acknowledgement/Pong
| 0x03
| Ping
|-
| 0x04
| State inquiry
| 0x05
| Function inquiry
|-
| 0x06
| Special Decoder functions
|
|
|}
* '''Speed control''': Numerical signed int8_t (-127..+127)
* '''Function control'''
* '''Pong'''
* '''Ping'''
* '''State inquiry'''
* '''Function inquiry''':
* '''Special functions''':
** '''Assign secondary Address''': For 2 or more locos driving in traction.
** '''Invert direction on secondary Address''': This function inverts the direction of speed commands coming for the 2nd Address.
** '''Reboot'''
** '''Calibration''': This instruction initiates the calibration function.




== State of the Project ==
== State of the Project ==
=== Done so far ===
=== Done so far ===
* [[Locodoco/Webinterface|Webinterface]]: proof of concept webinterface done
* [[Locodoco/Loco_Decoder|Loco decoder v2]]: Impedance adjusted, schematics updated
* Load regulation of the [[Locodoco/Loco_Decoder|Loco decoder v2]] tested - needs further tuning; impedance too high
* [[Nakkaloader]] flashed & tested on the [[Locodoco/Loco_Decoder|Loco decoder v2]] - runs like a charme
* [[Locodoco/Loco_Decoder|Loco decoder v2]] prototype built & currently undergoing testing
* Loco decoder Prototype board built & tested in LGB 2033 and 2060
* Loco decoder Prototype board built & tested in LGB 2033 and 2060
* First decoders installed and proven to be working stable
* First decoders installed and proven to be working stable
* First pieces of software tested and run
* First pieces of software tested and run
* Finished work bootloader to wirelessly update the firmware of the controller
* Finished work bootloader to wirelessly update the firmware of the controller
* Developed & tested track nodes (for positioning information)


=== To be done ===
=== To be done ===
'''Basic stuff'''
'''Basic stuff'''
* Implement above protocol
* Develop a turnout controller (Hard- and Software)
* Develop a turnout controller (Hard- and Software)
* Develop track nodes (for positioning information)
* <strike> Develop a controlling device (currently a simple piece of software on a pc)</strike>
* Develop a controlling device (currently a simple piece of software on a pc)
* Develop a web gui for controlling Locos via Smartphones, Tablets & PCs


'''Nifty stuff'''
'''Nifty stuff'''
* Implement automatic track setup detection (i.e. let a loco drive along the track and scan all waypoints). This is necessary to enable the selection of the next turnout stage.  
* Implement automatic track setup detection (i.e. let a loco drive along the track and scan all waypoints). This is necessary to enable the selection of the next turnout stage.  
* Experiment with accelerometer track recognition and 3D stuff (i.e. having live position data in opengl)
* Experiment with accelerometer track recognition (&raquo; [https://en.wikipedia.org/wiki/Inertial_navigation_system see here])


=== Related work ===
=== Related work ===
Zeile 166: Zeile 103:
* [http://usuaris.tinet.cat/fmco/home_en.htm Some more devices...] - Interface boards for the "Lokmaus" controller and some other useful devices.
* [http://usuaris.tinet.cat/fmco/home_en.htm Some more devices...] - Interface boards for the "Lokmaus" controller and some other useful devices.
[[Kategorie:Microcontroller]] [[Kategorie:Datenfunk_mit_dem_Microcontroller]]
[[Kategorie:Microcontroller]] [[Kategorie:Datenfunk_mit_dem_Microcontroller]]
{{LocodocoNavigation}}

Aktuelle Version vom 8. April 2017, 00:12 Uhr

         
locodoco

Release status: experimental [box doku]

Locodoco-train1.jpeg
Description An open source model railroad control infrastructure.
Author(s)  Soeren
Platform  AVR Microcontrollers
License  GPL
Download  Github[Trac] [SVN]



Components & Building Blocks[Bearbeiten | Quelltext bearbeiten]

Loco Decoder V2

» Loco Decoder

Position tracking node built into LGB track

» Position Tracking

Webinterface for the Locodoco project

» Webinterface

About Locodoco[Bearbeiten | Quelltext bearbeiten]

Locodoco is an open source (Soft- and Hardware) project that lets you control model trains and automate train movements. The Project consist of several Hard- and Software components. In the first stage of this project's development a "loco decoder" was built. This piece of hardware lets you control motor throttle, lights and other functions of a loco via data transmissions.

Motivation[Bearbeiten | Quelltext bearbeiten]

There simply wasn't an open implementation that suited my needs. There is a well-developed open source project that implements DCC (Open DCC). Unfortunately DCC by nature doesn't provide features like sending transmissions from locos to the controller - well, actually it does, but this system would then be called RailCom©™® and is covered by patents - the opendcc project recently had to stop supporting it because the law situation was "uncertain".

Another goal I want to achieve is simplicity. A typical use case for this system is a plug-and-play setup where you simply stick all the track pieces together and plug in the power. In current implementations this works as well - turnouts get their signal from the track just like the locos do. The only disadvantage is that you'll have to remember or note turnout numbers in your control panel. The ability I wanted to add to model railroading is to make the process of switching a turnout more intuitive. Once this system is fully implemented you'll be able to select the next turnout on the way of a loco.

Features & Advantages[Bearbeiten | Quelltext bearbeiten]

Usual DCC systems aren't designed for mobile setups. Consider track occupancy detectors for example: To make use of them, you'll need to run wires from these devices back to your base station or even cut the track at some parts of your setup. Since these devices weren't even considered by the DCC standard definition, they possibly won't cooperate with hardware from other vendors, so you're pretty much bound to buying equipment from this particular vendor.

Waypoints & Positioning information[Bearbeiten | Quelltext bearbeiten]

Waypoints along the track (beacons) transmit an unique ID via infrared diodes to bypassing locos. This allows locos to transmit their position, direction and speed to the controlling devices. It may also be possible to utilize an accelerometer for more precise acceleration, deceleration information and positioning.

Independent power supply[Bearbeiten | Quelltext bearbeiten]

Unlike usual systems, locos equipped with a locodoco controller can run on any track that provides between 8 and 30 Volts power AC and DC. It is possible to mix usual DCC systems with this system and have locodoco equipped locos run on DCC powered track. The only disadvantage is that you can't control DCC locos with controllers for the locodoco system. It should be possible to let locodoco Trains accept commands from DCC, though this is a question of software development - the hardware is ready for it ;-)

Speed calibration[Bearbeiten | Quelltext bearbeiten]

With two position beacons in a known distance in between one can easily distinguish the speed of a running train. It is possible to "calibrate" speed levels and control locos by setting their _real_ speed (in contrast to a percentage level as it is the case with current systems).

This feature also allows for implementing beacons that send commands to throttle or halt locos - for example a signal sending the command "stop 1 meter ahead" - a beacon sending "speed limit 1cm/s for the next 3 meters" in front of a sharp curve...

Fully automated setup[Bearbeiten | Quelltext bearbeiten]

With position information and the possibility to control actual speeds, one can build compeletely automated model train setups. All one needs is a set of simple decisions (i.e. "if loco x is at position y, switch turnout 7 to right") and a controlling unit that sends commands to the locos accordingly.

Loco decoder[Bearbeiten | Quelltext bearbeiten]

First prototype (aka Version 1)[Bearbeiten | Quelltext bearbeiten]

Loco decoder v1 in LGB 2060 ("Schöma Diesellok")

The loco decoder version 1 was a one layered printed circuit board with an AVR Microcontroller (Atmega32), a RFM12 radio transceiver, an L6202 Motor controller and several other Parts. After some testing and research in the model railroad community, it soon became clear, that especially load regulation is a feature which needed to be added to the controller. Furthermore the 78L05 power regulator (100mA) simply didn't provide enough power for smoke generators and servos.

Loco decoder version 2[Bearbeiten | Quelltext bearbeiten]

The 2nd Version of the Loco decoder is currently under development. For more information about the device(s) see Locodoco/Loco_Decoder.

Waypoint transmitter[Bearbeiten | Quelltext bearbeiten]

First prototype of the Waypoint transmitter built into the track
view from the bottom: Attiny45 (left), 78L05 (right) and a bridge rectifier on the right

A waypoint transmitter consists of a tiny AVR microcontroller that continuously transmits the same sequence of bits while it is turned on. An infrared LED connected to one of the AVR's output drivers can be installed in turnouts and normal track to mark a position.

The waypoint transmitter fits underneath (or better said into) a single track brick of the standard LGB track and is visually almost completely hidden (just the transmitter diode peeking out). It consists of an infrared transceiver, an Attiny45 (or pin-compatible processor), a voltage regulator (78L05) and some capacitors. The device is designed to be powered by the track, which also makes it suitable for "mobile" track layouts.

» For more information about position tracking, see this page.

Turnout controller[Bearbeiten | Quelltext bearbeiten]

The turnout controller is a piece of hardware that... well, controls turnouts. There will be several different versions available - some with RFM12 modules, some with infrared transistors to receive commands. Both with different amounts of outputs (for driving more than one turnout or n-way turnouts).


State of the Project[Bearbeiten | Quelltext bearbeiten]

Done so far[Bearbeiten | Quelltext bearbeiten]

  • Webinterface: proof of concept webinterface done
  • Loco decoder v2: Impedance adjusted, schematics updated
  • Load regulation of the Loco decoder v2 tested - needs further tuning; impedance too high
  • Nakkaloader flashed & tested on the Loco decoder v2 - runs like a charme
  • Loco decoder v2 prototype built & currently undergoing testing
  • Loco decoder Prototype board built & tested in LGB 2033 and 2060
  • First decoders installed and proven to be working stable
  • First pieces of software tested and run
  • Finished work bootloader to wirelessly update the firmware of the controller
  • Developed & tested track nodes (for positioning information)

To be done[Bearbeiten | Quelltext bearbeiten]

Basic stuff

  • Develop a turnout controller (Hard- and Software)
  • Develop a controlling device (currently a simple piece of software on a pc)
  • Develop a web gui for controlling Locos via Smartphones, Tablets & PCs

Nifty stuff

  • Implement automatic track setup detection (i.e. let a loco drive along the track and scan all waypoints). This is necessary to enable the selection of the next turnout stage.
  • Experiment with accelerometer track recognition (» see here)

Related work[Bearbeiten | Quelltext bearbeiten]

  • opendcc is a project implementing an open source dcc stack and various hardware devices.
  • MERG's DCC Devices - lots of open source DCC hardware devices
  • Some more devices... - Interface boards for the "Lokmaus" controller and some other useful devices.

Locodoco Project | Position tracking system | Loco decoder | Webinterface