Inhoudsopgave:

Garden Train - Arduino Wireless NMRA DCC - Ajarnpa
Garden Train - Arduino Wireless NMRA DCC - Ajarnpa

Video: Garden Train - Arduino Wireless NMRA DCC - Ajarnpa

Video: Garden Train - Arduino Wireless NMRA DCC - Ajarnpa
Video: Cheap and Amazing! DCC-EX 2 Years Later 2024, November
Anonim
Image
Image
Ontwerp van systeem
Ontwerp van systeem

Naast eerdere instructies met DCC op dode railsysteem, heb ik het idee verder ontwikkeld met een handbediend DCC-commandostation met toetsenbord en LCD-scherm. Het commandostation bevat alle codering die nodig is voor NMRA DCC-instructies, maar in plaats van verbinding te maken met de rails, worden de gegevens door radiomodule RF24L01+ overgedragen naar een ontvanger die in een vrachtwagen of onder de locomotief is gemonteerd - waar de ruimte dit toelaat.

Uiteraard moeten uw locs zijn uitgerust met een laadvermogendecoder die geschikt is voor de motormotoren.

Stap 1: Ontwerp van systeem

Ontwerp van systeem
Ontwerp van systeem

De Arduino Pro Mini vormt het hart van het ontwerp. Fritzing gebruiken om de schakeling te ontwikkelen en PCB's te maken.

Ik kon dezelfde print gebruiken voor zowel de zender als de ontvanger, waardoor ik wat kosten bespaarde.

De zender heeft aansluitingen voor toetsenbord en LCD terwijl de ontvanger deze niet nodig heeft en de H-brug gebruikt om de DCC uitgang voor de loc te voeden.

Een verdere ontwikkeling omvat aansluitingen voor een grotere H-brug indien nodig voor krachtigere locomotieven.

De PCF8574 kan worden verwijderd als u een LCD-scherm gebruikt dat bij de rugzak wordt geleverd, waardoor SCA / SCL-verbindingen op de Arduino het scherm kunnen voeden met slechts 2 draden. Onderdelenlijst: Totaal = ongeveer £ 60 voor DCC Command Station + 1 ontvanger Extra ontvangers kosten = £10,00 ongeveer elk. + batterijen

Arduino ProMini. x 2 = £ 4,00

4x3 membraantoetsenbord = £ 3,00

20 x 4 LCD-scherm = £ 7,00

PCF5874 = £1,80

NRF24L01+. radiomodules x 2 = £ 5,80

PCB-fabricage voor 10 korting (of Vero-bord kan worden gebruikt) = £ 24 of £ 4,80 voor 2 korting

3.3 v-regelaar = £ 0,17 (pak van 25 van RS Comp)

5v-regelaar LM7805 = £ 0,30

H-brug SN754410ne = £ 3,00

Lloytron oplaadbare 2700 maH AA-batterijen x 12 = £ 22,00. (batterijen met een lagere maH-classificatie zijn goedkoper)

Condensatoren, potten, pinnen, connectoren, enz. = £ 2,00 ongeveer

Behuizing 190x110x60 mm = £8.00

Zender - telefoonoplader / batterij = £ 2,00

Stap 2: Zender

Zender
Zender

Het schakelschema wordt getoond waar D2- tot D8-pinnen op de Arduino Pro Mini zijn aangesloten op het toetsenbord. Een 100k ohm-potentiometer is aangesloten op analoge pin A0 voor snelheidsaanpassing. De SDA- en SCL-pinnen van de PCF8574-chip zijn verbonden met pinnen A4 en A5 op de Arduino Pro Mini door middel van gesoldeerde draden aan de pinnen op de bovenste laag van de Pro Mini.

De Arduino-schets is bijgevoegd om te downloaden.

Ik heb een 20 x 4 LCD-scherm gebruikt met 4 regels informatie met 20 tekens per regel. Het toetsenbord biedt het volgende menu:

1 t/m 9 = locadres * = richting 0 = lichten # = Functiemenu voor toetsen 1 t/m 8

Basisbeschrijving van Arduino Pro Mini-schets: Deze regel van de code rangschikt het DCC-bericht in HEX-indeling. struct Bericht msg [MAXMSG] = {

{ { 0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // inactief bericht

{ { locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 byte adres

};

Om de instellingen voor elke loc op te slaan, wordt een reeks arrays als volgt opgezet:

int la[20];// array om locomotiefnummers vast te houden

int sa[20];// array om snelheidswaarden vast te houden

int fda[20];// array om dir vast te houden

int fla[20];// array om lichten vast te houden

int f1a[20];// array om fun1 vast te houden…..

int f8a[20];// array om fun8 vast te houden

Om de DCC-instructies onderweg te kunnen wijzigen:

Voor snelheidsinstructies: void amendement_speed (struct Message & x) {

x.data[0] = locoAdr;

x.data[1] = 0x40; // locoMsg met 28 snelheidsstappen }

Voor functie-instructies:

void amendement_group1 (struct Message & x) {

x.data[0] = locoAdr;

x.data[1] = 0x80; // locoMsg met groep één instructie 0x80 }

De hoofdlus van de schets:

void loop (void) {if (read_locoSpeed()) {assemble_dcc_msg_speed();

send_data_1(); // gegevens draadloos verzenden

vertraging(10);

send_data_3(); // gegevens weergeven op LCD-scherm

send_data_4(); // gegevens weergeven op seriële monitor}

if (read_function()) {

assemble_dcc_msg_group1();

send_data_1();

vertraging(10);

send_data_3(); } }

Gegevens bijwerken wanneer de snelheid verandert:

boolean read_locoSpeed()Dit detecteert een nieuw loco-adres, snelheid of richtingsinstelling en past de HEX 'data' dienovereenkomstig aan. Hier heb ik 28 snelheidsstappen gespecificeerd en om te voldoen aan NMRA-standaard S 9.2, moeten de snelheidsgegevens worden gevonden in een opzoektabel in 'speed_step()'

void speed_step(){ schakelaar (locoSpeed){

geval 1: gegevens |= 0x02; pauze;

geval 2: gegevens |= 0x12; pauze;

geval 3: gegevens |= 0x03; pauze;

………

geval 28: gegevens |= 0x1F; pauze; }}

Gegevens bijwerken wanneer de functies veranderen:

booleaanse read_function()

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

} //koplampen uit

if (fla[locoAdr] == 1) {

gegevens = 0x90;

} // koplampen aan

Voor elke functie:

if (f2a[locoAdr] == 0) { data |= 0; }. // Functie 2 uit

if (f2a[locAdr] == 1) {

gegevens |= 0x02; // Functie 2 op }'data' wordt opgebouwd door ['|=' samengestelde bitsgewijze of] de HEX-codes voor elke functie te combineren.

Stap 3: Ontvanger

Ontvanger
Ontvanger

Het schakelschema is weergegeven waar pinnen 5 en 6 van de Arduino Pro Mini worden gebruikt om het DCC-signaal aan de H-brug te leveren. De H-brugparen zijn parallel geschakeld om de stroomcapaciteit te vergroten. Afhankelijk van de stroom die door de loc wordt getrokken, kan het nodig zijn een koellichaam aan het 16-pins DIP-apparaat te bevestigen, of er kan een externe H-brug worden aangesloten.

De Arduino-schets is bijgevoegd om te downloaden. Het DCC-signaal bestaat uit een klok die draait op 2 MHZ

void SetupTimer2() doet dit werk.

De klok bevat 'korte pulsen' (58us) voor '1' in DCC-gegevens en 'lange pulsen' (116us) voor '0' in DCC-gegevens.

De loop void, krijgt data van de radio en als er een geldige string wordt gevonden, worden de data geconverteerd naar DCC-data.

void loop(void){ if (radio.available()){ bool done = false; gedaan = radio.lezen (inmsg, 1); // lees de ontvangen gegevens

char rc = inmsg[0]; // plaats het gelezen karakter in deze array

als (rc != 0){. // als karakter niet gelijk is aan nul

inString.concat(rc); // bouw het bericht op }

if (rc == '\0') { // if character is '/0' einde van bericht

Serial.println(inString); // print het samengestelde bericht

snaar(); // deconstrueer het stringbericht om DCC-instructies te krijgen

} } }

Stap 4: Run de locomotieven

Ren de locomotieven
Ren de locomotieven

Om te voorkomen dat gegevens worden onderbroken door het rijden met meerdere treinen op hetzelfde spoor, moet u de contacten tussen de wielen en het spoor loskoppelen voor elke gebruikte loc en vrachtwagen.

Geniet van vrij rijdende treinen, ongeacht de baanomstandigheden - wat een verschil! Geen gedoe, geen start-stop en geen schoonmaak nodig.

De batterijen die ik heb gebruikt zijn oplaadbare LLoytron AA x 12. Ik heb speciaal voor hen een oplader gebouwd die 6 tegelijk oplaadt. (zie instructable)

Aanbevolen: