Inhaltsverzeichnis:

Modelleisenbahn - DCC-Kommandostation mit Arduino: - Gunook
Modelleisenbahn - DCC-Kommandostation mit Arduino: - Gunook

Video: Modelleisenbahn - DCC-Kommandostation mit Arduino: - Gunook

Video: Modelleisenbahn - DCC-Kommandostation mit Arduino: - Gunook
Video: Einführung in DCC-EX und JMRI Teil 1 - Märklin Modellbahn H0-DCC Command Station mit Booster billig 2024, November
Anonim
Image
Image
Arduino Code - Kommandostation mit Tastatur
Arduino Code - Kommandostation mit Tastatur

Aktualisiert August 2018 - siehe neue Instructable:

Update 28. April 2016: Jetzt 16 Weichen-/Weichensteuerungsfunktionen für die Command Station. Die Weichen T1 - T8 sind über die Taste 'B' verfügbarDie Weichen T9 - T16 sind über die Taste 'C' verfügbar

Update 10. März 2016:

Der Command Station wurden jetzt 8 Weichen-/Weichensteuerungsfunktionen hinzugefügt. Der Arduino-Code wurde unter Verwendung des NMRA-Standardpakets für Weichen entsprechend aktualisiert (ebenfalls basierend auf einer Studie von Lenz / Atlas Compact-Datenpaketen für die Weichensteuerung).

Die Weichen T1 - T8 sind über die Taste 'B' verfügbar

Siehe anweisbar auf der verwendeten Datenpaketempfängerschaltung und dem erforderlichen Arduino-Code.

Update 18. Januar 2016:

Ich habe der Schaltung einen Strommesswiderstand (1k5 Ohm) und einen Kondensator (10 uf) hinzugefügt und den Arduino-Code geändert, um die Stromversorgung zu unterbrechen, wenn ein Spitzenstrom von > 3200 mA erkannt wird. Die H-Brückenspezifikation gibt einen Ausgangsmessstrom von 377 uA pro 1 Ampere in der Last an.

Der 1,5 kOhm-Widerstand liefert 0,565 Volt pro Ampere am analogen Pin 6. Bei 1023 Schritten am analogen Eingang ergibt dies 0,565 * 1023 / 5 = 116 pro Ampere Last.

A = 100 * (analogRead(AN_CURRENT)) / 116;A = A * 10; (um das Ergebnis in Milliampere anzugeben)

Der Laststrom in Milliampere wird auf dem TFT. angezeigt

Die vollständige 4x4-Tastatur beinhaltet die Funktionen F1 bis F8 und weitere 10 Loks (1-19) über die '#'-Taste (um 10 zu den Zifferntasten ab Lok 10 hinzuzufügen).

Der Arduino-Code enthält den NMRA-Standard für Befehlsbytes.

Siehe Link

www.nmra.org/sites/default/files/s-9.2.1_20…

(Seite 6 ist von besonderer Bedeutung)

Die Pakete sind nach Anzahl der Fahrstufen, langer / kurzer Adresse und Funktionsgruppenanweisungen geordnet.

Allen Befehlsbytes geht eine Präambel von "1"-Bits 11111111 (oder Leerpaket) voraus, gefolgt von;

z. B. Eine 4-Byte-Adresse 0 00000011 0 00111111 0 10000011 0 10111111

entspricht Lok 3, 128 Fahrstufen, Vorwärtsrichtung und Fahrstufe 3 (das Endbyte ist die Fehlerprüfung XOR)

z. B. A 3 Byte Adresse 0 00000011 0 10010000 0 10110011

entspricht Lok 3, Funktionsgruppe 1, FL leuchtet plus XOR-Byte (jedes Byte wird durch ein '0'-Bit getrennt)

Siehe beiliegendes Demo-Video für Lok 12.

Die Funktionen F1 - F8 sind über die 'A'-Taste, DIR ('*'-Taste = Richtung) FL ('0'-Taste = leuchtet) und die Taste '#' auf dem Ziffernblock auf die Loks 10 bis 19 verfügbar. Die Taste 'D' wird nun für einen 'Not-Halt' verwendet.

Vielen Dank an verschiedene Anbieter im Web für Quellen von DCC-Informationen und Arduino-Code.

Dieses Projekt wurde insbesondere von Michael Blank und seinem 'Simple DCC - a command station' inspiriert.

www.oscale.net/en/simpledcc

4x4 Matrix Array 16 Tasten Folientastatur (ebay) £1,75

2,2-Zoll-240x320-Seriell-SPI-TFT-LCD-Anzeigemodul (ebay) £7.19

UNIVERSAL 12V 5A 60W STROMVERSORGUNG AC ADAPTER (ebay) £6.49

Nano V3.0 für Arduino mit CH340G 5V 16M kompatibel ATmega328P (ebay) 2 x £3.30 = £6.60

Motortreibermodul LMD18200T für Arduino R3 (ebay) £6.99

Anschlüsse, Kabel, Vero-Platine, Potentiometer ca. £3,50

Gesamt £32.52

Die Basis-Zentrale ohne TFT-Bildschirm und 1 x Nano würde 22,03 € kosten

[Hinweis: Es ist möglich, dem TFT-Display eine Speicherkarte hinzuzufügen und den Code zu ändern, um Bilder ausgewählter Motoren anzuzeigen, obwohl die Bibliothekscodes nach unten bearbeitet werden müssen, um mehr Speicherplatz für die Skizze zu schaffen. Die aktuelle Skizzengröße ist für den TFT Arduino Nano maximal]

Der ursprüngliche Arduino-Code von Michael Blank war für einen Motor, nur vorwärts / rückwärts ohne Funktionskontrolle, ohne Tastatur und ohne Display.

Ich habe den Code so geändert, dass er 1 - 19 Motoren, einen Anzeigebildschirm, Richtung, Lichter, 8 Funktionen, Notstopp und automatische Strombegrenzung enthält.

Die Brücke LMD18200T kann bis zu 3 Ampere tragen, wodurch sie für alle Waagen einschließlich G-Spur (Garteneisenbahn) geeignet ist. Das Netzteil und die Elektronik sind nur für den Innenbereich geeignet, es sei denn, Sie können es wetterfest machen. Ich habe die Zentrale im Gartenhaus mit Gleisanschlussdrähten, die durch die Wand zum Gleis laufen.

Schritt 1: Arduino-Code - Kommandostation mit Tastatur

Mein Dank an tvantenna2759 für den Hinweis auf 2 Fehler im Schaltplan, bei denen der Arduino-Code nicht mit der Verkabelung übereinstimmte, jetzt aktualisiert (21.10.2017).

Der Command Station wurden jetzt 16 Weichen hinzugefügt. Siehe Anleitung auf dem Schaltplan der Weiche / der Punkte mit dem Arduino Mini Pro-Modul.

Der geänderte Code inklusive Weichensteuerung ist unten angehängt.

Das Basiszubehör-Decoderpaket ist: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 Aus der Analyse des von Lenz (Compact / Atlas) für die Weichensteuerung verwendeten Pakets habe ich das folgende binäre Paketformat für Byte 1 und 2 verwendet: tunAddr = 1 Weiche 1a: 1000 0001 1111 1000 / Weiche 1b: 1000 0001 1111 1001 Weiche 2a: 1000 0001 1111 1010 / Weiche 2b: 1000 0001 1111 1011 Weiche 3a: 1000 0001 1111 1100 / Weiche 3b: 1000 0001 1111 1101 Weiche 4a: 1000 0001 1111 1110 / Weiche 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- -------------------------------------------------- ----------------- Weiche 5a: 1000 0010 1111 1000 / Weiche 5b: 1000 0010 1111 1001 Weiche 6a: 1000 0010 1111 1010 / Weiche 6b: 1000 0010 1111 1011 Weiche 7a: 1000 0010 1111 1100 / Weiche 7b: 1000 0010 1111 1101 Weiche 8a: 1000 0010 1111 1110 / Weiche 8b: 1000 0010 1111 1111 ---------------------- -------------------------------------------------- ---------------------------------- Weiche 9a: 1000 0011 1111 1000 / Weiche 9b: 1000 0011 1111 1001 usw. ………

Auszug aus geändertem Code: Fügen Sie 2 weitere 'struct'-Nachrichten hinzu updatesvoid amend_tun1 (struct Message & x) { x.data[0] = 0x81; // Zubehördecoder 0x80 & Adresse 1 x.data[1] = 0; }

void amend_tun2 (struct Message & x) { x.data[0] = 0x82; // Zubehördecoder 0x80 & Adresse 2 x.data[1] = 0; }

Neue Leere für Weichen hinzufügen: boolean read_turnout () { delay (20);

boolescher Wert geändert_t = false; get_key();

if (key_val >= 101 && key_val <= 404 && turn == 1){

Daten = 0xf8; // = binär 1111 1000

amend_tun1(msg[1]);

}

if (key_val >= 505 && key_val <= 808 && turn == 1){

Daten = 0xf8; // = binär 1111 1000

amend_tun2(msg[1]);

}

if (key_val == 101 && drehen == 1){

wenn (tun1 == 1){

Daten |= 0; // t1a

geändert_t = wahr;}

wenn (tun1 == 0){

Daten |= 0x01; // t1b

geändert_t = wahr;}

}

if (key_val == 202 && drehen == 1){

wenn (tun2 == 1){

Daten |= 0x02; // t2a

geändert_t = wahr;

}

wenn (tun2 == 0){

Daten |= 0x03; // t2b

geändert_t = wahr; }

}

if (key_val == 303 && drehen == 1){

wenn (tun3 == 1){

Daten |= 0x04; // t3a

geändert_t = wahr;

}

wenn (tun3 == 0){

Daten |= 0x05; // t3b

geändert_t = wahr;}

}

if (key_val == 404 && drehen == 1){

wenn (tun4 == 1){

Daten |= 0x06; // t4a

geändert_t = wahr;

}

wenn (tun4 == 0){

Daten |= 0x07; // f4b

geändert_t = wahr;}

}

if (key_val == 505 && drehen == 1){

wenn (tun5 == 1){

Daten |= 0; // t5a

geändert_t = wahr;

}

wenn (tun5 == 0){

Daten |= 0x01; // t5b

geändert_t = wahr;}

}

etc ………………….

Schritt 2: Arduino-Code - TFT-Display

Arduino-Code - TFT-Display
Arduino-Code - TFT-Display
Arduino-Code - TFT-Display
Arduino-Code - TFT-Display
Arduino-Code - TFT-Display
Arduino-Code - TFT-Display
Arduino-Code - TFT-Display
Arduino-Code - TFT-Display

Die Anzeigeschaltung bleibt gleich mit einem modifizierten Code, um den Status der 16 Weichen anzuzeigen. Hinweis: Der Bibliothekscode nimmt fast den gesamten Sketch-Code-Speicher ein und lässt wenig Platz für neue Funktionen. Wenn jemand eine effizientere Bibliotheksdatei für das hier verwendete TFT hat, lassen Sie es mich bitte wissen.

Schritt 3: Weichensteuerung

Weichensteuerung
Weichensteuerung
Weichensteuerung
Weichensteuerung

Siehe anweisbar, wie man den Weichen- / Punkte-Controller macht.

Die komplette Schaltung steuert 16 Weichen und 15 Zubehörteile wie Lichter, Sounds, Plattenspieler usw.

Empfohlen: