Inhaltsverzeichnis:

Gartenzug - Arduino Wireless NMRA DCC - Gunook
Gartenzug - Arduino Wireless NMRA DCC - Gunook

Video: Gartenzug - Arduino Wireless NMRA DCC - Gunook

Video: Gartenzug - Arduino Wireless NMRA DCC - Gunook
Video: Cheap and Amazing! DCC-EX 2 Years Later 2024, Juni
Anonim
Image
Image
Design des Systems
Design des Systems

Zusätzlich zu den vorherigen instructable mit DCC auf Dead-Rail-System habe ich die Idee mit einer Hand-DCC-Kommandostation mit Tastatur und LCD-Display weiterentwickelt. Die Command Station enthält alle notwendigen Codierungen für NMRA DCC-Befehle, jedoch werden die Daten statt an die Schienen angeschlossen, per Funkmodul RF24L01+ an einen im LKW oder unter der Lok montierten Empfänger übertragen - wo immer es der Platz zulässt.

Selbstverständlich müssen Ihre Loks mit einem auf die Motoren abgestimmten belastbaren Decoder ausgestattet sein.

Schritt 1: Design des Systems

Design des Systems
Design des Systems

Der Arduino Pro Mini ist das Herzstück des Designs. Mit Fritzing die Schaltung entwickeln und Leiterplatten herstellen.

Ich konnte die gleiche Platine für Sender und Empfänger verwenden und so einige Kosten sparen.

Der Sender hat Anschlüsse für Tastatur und LCD, während der Empfänger diese nicht benötigt und über die H-Brücke den DCC-Ausgang der Lok versorgt.

Eine Weiterentwicklung beinhaltet Anschlüsse für eine größere H-Brücke bei Bedarf für stärkere Loks.

Der PCF8574 kann gelöscht werden, wenn Sie ein LCD-Display verwenden, das mit dem Rucksack geliefert wird, sodass SCA / SCL-Verbindungen am Arduino das Display mit nur 2 Drähten versorgen können = ca. 10,00 € pro Stück. + Batterien

Arduino Pro Mini. x 2 = 4,00 €

4x3 Folientastatur = 3,00 €

20 x 4 LCD-Display = 7,00 £

PCF5874 = 1,80 €

NRF24L01+. Funkmodule x 2 = £5.80

PCB-Herstellung für 10 Stück (oder Vero-Board kann verwendet werden) = 24 £ oder 4,80 £ für 2 Stück

3,3-V-Regler = 0,17 £ (Packung mit 25 von RS Comp)

5V-Regler LM7805 = 0,30 €

H-Brücke SN754410ne = 3,00 £

Lloytron wiederaufladbare 2700 mAh AA-Batterien x 12 = £22,00. (Batterien mit niedrigerem maH-Wert sind billiger)

Kondensatoren, Töpfe, Stifte, Anschlüsse usw. = ca. 2,00 £

Gehäuse 190x110x60 mm = 8,00 €

Sender - Handy-Ladegerät / Akku = 2,00 £

Schritt 2: Sender

Sender
Sender

Das Schaltbild wird gezeigt, wo D2- bis D8-Pins des Arduino Pro Mini mit der Tastatur verbunden sind. Ein 100k-Ohm-Potentiometer ist mit dem analogen Pin A0 zur Geschwindigkeitseinstellung verbunden. Die SDA- und SCL-Pins des PCF8574-Chips sind mit den Pins A4 und verbunden A5 auf dem Arduino Pro Mini mittels Lötdrähten an die Pins auf der obersten Schicht des Pro Mini.

Die Arduino-Skizze ist zum Download beigefügt.

Ich habe ein 20 x 4 LCD-Display verwendet, das 4 Informationszeilen mit 20 Zeichen pro Zeile ermöglicht. Die Tastatur bietet das folgende Menü:

1 bis 9 = Lokadresse * = Fahrtrichtung 0 = Licht # = Funktionsmenü für Tasten 1 bis 8

Grundlegende Beschreibung der Arduino Pro Mini-Skizze: Diese Codezeile ordnet die DCC-Nachricht im HEX-Format an. struct Nachricht msg[MAXMSG] = {

{ { 0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // Leerlaufnachricht

{ { locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 Byte Adresse

};

Um die Einstellungen für jede Lok zu speichern, werden eine Reihe von Arrays wie folgt eingerichtet:

int la[20]; // Array für Loknummern

int sa[20]; // Array zum Speichern von Geschwindigkeitswerten

int fda[20]; // Array zum Speichern von dir

int fl[20]; // Array zum Halten von Lichtern

int f1a[20]; // Array, um fun1 zu halten…..

int f8a[20]; // Array für fun8

Damit die DCC-Anweisungen im Laufe der Zeit geändert werden können:

Für Geschwindigkeitsanweisungen: void amend_speed (struct Message & x) {

x.data[0] = locoAdr;

x. Daten[1] = 0x40; // locoMsg mit 28 Fahrstufen }

Für Funktionsanweisungen:

void amend_group1 (struct Nachricht & x) {

x.data[0] = locoAdr;

x.data[1] = 0x80; // locoMsg mit Anweisung der Gruppe eins 0x80 }

Die Hauptschleife der Skizze:

Void Schleife (void) { if (read_locoSpeed ()) { Assemble_dcc_msg_speed ();

send_data_1(); // Daten drahtlos senden

Verzögerung(10);

send_data_3(); // Daten auf LCD-Display anzeigen

send_data_4(); // Daten auf seriellem Monitor anzeigen}

if (read_function()) {

Assemble_dcc_msg_group1();

send_data_1();

Verzögerung(10);

send_data_3(); } }

Daten aktualisieren, wenn sich die Geschwindigkeit ändert:

boolean read_locoSpeed () Dies erkennt eine neue Lokadresse, Geschwindigkeit oder Richtungseinstellung und ändert die HEX-'Daten' entsprechend. Hier habe ich 28 Geschwindigkeitsstufen angegeben und um den NMRA-Standard S 9.2 zu erfüllen, müssen die Geschwindigkeitsdaten aus einer Nachschlagetabelle gefunden werden in 'speed_step()'

Void speed_step () { Schalter (locoSpeed) {

Fall 1: Daten |= 0x02; brechen;

Fall 2: Daten |= 0x12; brechen;

Fall 3: Daten |= 0x03; brechen;

………

Fall 28: Daten |= 0x1F; brechen; }}

Daten aktualisieren, wenn sich die Funktionen ändern:

boolesche read_function()

if (fla[locoAdr] == 0) { Daten = 0x80;

} // Scheinwerfer aus

if (fla[locoAdr] == 1) {

Daten = 0x90;

} // Scheinwerfer an

Für jede Funktion:

if (f2a[locoAdr] == 0) { Daten |= 0; }. // Funktion 2 aus

if (f2a[locoAdr] == 1) {

Daten |= 0x02; // Funktion 2 auf }'data' wird aufgebaut, indem ['|=' bitweise zusammengesetzt oder] die HEX-Codes für jede Funktion kombiniert werden.

Schritt 3: Empfänger

Empfänger
Empfänger

Das Schaltbild wird gezeigt, wo die Pins 5 und 6 des Arduino Pro Mini verwendet werden, um das an die H-Brücke gelieferte DCC-Signal bereitzustellen. Die H-Brückenpaare sind parallel geschaltet, um die Stromkapazität zu erhöhen. Abhängig von der Stromaufnahme der Lok kann es erforderlich sein, einen Kühlkörper an das 16-polige DIP-Gerät anzuschließen oder eine Hochleistungs-H-Brücke extern anzuschließen.

Die Arduino-Skizze ist zum Download beigefügt. Das DCC-Signal besteht aus einer Uhr mit 2 MHz

void SetupTimer2() erledigt diese Aufgabe.

Der Takt umfasst „kurze Impulse“(58 us) für „1“in DCC-Daten und „lange Impulse“(116 us) für „0“in DCC-Daten.

Die Schleife void, ruft Daten vom Funkgerät ab und wenn ein gültiger String gefunden wird, werden die Daten in DCC-Daten umgewandelt.

Void Schleife (void) { if (radio.available ()) { bool done = false; done = radio.read(inmsg, 1); // die empfangenen Daten lesen

char rc = inmsg[0]; // Gelesenes Zeichen in dieses Array einfügen

if (rc != 0){. // wenn Zeichen ungleich Null ist

inString.concat(rc); // die Nachricht aufbauen }

if (rc == '\0') { // wenn Zeichen '/0' ist Ende der Nachricht

Serial.println (inString); // drucke die zusammengestellte Nachricht

Zeichenfolge(); // Dekonstruiere die String-Nachricht, um DCC-Anweisungen zu erhalten

} } }

Schritt 4: Fahren Sie die Loks

Fahren Sie die Loks
Fahren Sie die Loks

Um eine Datenunterbrechung durch den Betrieb mehrerer Züge auf demselben Gleis zu vermeiden, müssen Sie die Kontakte zwischen den Rädern und dem Gleis für jede eingesetzte Lok und jeden eingesetzten LKW trennen.

Genießen Sie frei laufende Züge unabhängig von den Gleisbedingungen - was für ein Unterschied! Kein Ärger, kein Start-Stopp und keine Reinigung erforderlich.

Die von mir verwendeten Batterien sind wiederaufladbare LLoytron AA x 12. Ich habe speziell dafür ein Ladegerät gebaut, das 6 gleichzeitig auflädt. (siehe Anleitung)

Empfohlen: