Spisu treści:

Pociąg ogrodowy - Arduino Wireless NMRA DCC: 4 kroki (ze zdjęciami)
Pociąg ogrodowy - Arduino Wireless NMRA DCC: 4 kroki (ze zdjęciami)

Wideo: Pociąg ogrodowy - Arduino Wireless NMRA DCC: 4 kroki (ze zdjęciami)

Wideo: Pociąg ogrodowy - Arduino Wireless NMRA DCC: 4 kroki (ze zdjęciami)
Wideo: How To Build an Arduino Wireless Network with Multiple NRF24L01 Modules 2024, Listopad
Anonim
Image
Image
Projekt systemu
Projekt systemu

W nawiązaniu do wcześniejszej instrukcji z DCC na systemie martwej szyny, rozwinąłem ten pomysł za pomocą ręcznej stacji sterowania DCC z klawiaturą i wyświetlaczem LCD. Command Station zawiera całe kodowanie wymagane dla instrukcji NMRA DCC, jednak zamiast łączenia się z szynami, dane są przesyłane przez moduł radiowy RF24L01+ do odbiornika zamontowanego w ciężarówce lub pod lokomotywą – wszędzie tam, gdzie pozwala na to pomieszczenie.

Oczywiście lokomotywy muszą być wyposażone w dekoder nośności dostosowany do silników silników.

Krok 1: Projekt systemu

Projekt systemu
Projekt systemu

Sercem projektu jest Arduino Pro Mini. Wykorzystanie Fritzing do opracowania obwodu i produkcji płytek drukowanych.

Udało mi się użyć tej samej płytki drukowanej zarówno dla nadajnika, jak i odbiornika, co pozwoliło mi zaoszczędzić trochę kosztów.

Nadajnik ma złącza dla klawiatury i wyświetlacza LCD, podczas gdy odbiornik ich nie wymaga i wykorzystuje mostek H do zasilania wyjścia DCC dla lokomotywy.

Dalszy rozwój obejmuje połączenia dla większego mostka H, jeśli jest to wymagane dla silniejszych lokomotyw.

PCF8574 można usunąć, jeśli używasz wyświetlacza LCD dołączonego do plecaka, który umożliwia połączenia SCA / SCL na Arduino do zasilania wyświetlacza za pomocą tylko 2 przewodów. Lista części: Razem = około 60 GBP za DCC Command Station + 1 odbiornik Koszt dodatkowych odbiorników = ok. 10,00 GBP za każdy. + baterie

Arduino Pro Mini. x 2 = 4,00 GBP

Klawiatura membranowa 4x3 = £3.00

Wyświetlacz LCD 20 x 4 = 7,00 £

PCF5874 = 1,80 GBP

NRF24L01+. moduły radiowe x 2 = 5,80 £

Produkcja PCB za 10 obniżek (lub można użyć płytki Vero) = 24 GBP lub 4,80 GBP za 2 obniżki

Regulator 3,3 v = 0,17 GBP (opakowanie 25 sztuk od RS Comp)

Regulator 5v LM7805 = 0,30 £

Mostek H SN754410ne = 3,00 £

Akumulatory Lloytron 2700 mAh AA x 12 = 22,00 GBP. (baterie o niższej wartości maH są tańsze)

Kondensatory, garnki, szpilki, złącza itp = około 2,00 £

Obudowa 190x110x60 mm = 8,00 £

Nadajnik - ładowarka telefonu / bateria = 2,00 £

Krok 2: Nadajnik

Nadajnik
Nadajnik

Schemat obwodu pokazano, gdzie piny D2 do D8 na Arduino Pro Mini są podłączone do klawiatury. Potencjometr 100 kΩ jest podłączony do pinu analogowego A0 w celu regulacji prędkości. Piny SDA i SCL z układu PCF8574 są podłączone do pinów A4 i A5 na Arduino Pro Mini za pomocą przylutowanych przewodów do pinów na górnej warstwie Pro Mini.

Szkic Arduino jest załączony do pobrania.

Użyłem wyświetlacza LCD 20 x 4, który pozwala na 4 linie informacji po 20 znaków w linii. Manipulator udostępnia następujące menu:

1 do 9 = adres lokomotywy * = kierunek 0 = światła # = menu funkcji dla klawiszy od 1 do 8

Podstawowy opis szkicu Arduino Pro Mini: Ta linia kodu porządkuje komunikat DCC w formacie HEX. struct Wiadomość msg[MAXMSG] = {

{ { 0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // komunikat bezczynności

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

};

Aby zapisać ustawienia dla każdej lokomotywy, szereg tablic ustawia się w następujący sposób:

int la[20];// tablica do przechowywania numerów lokomotyw

int sa[20];// tablica do przechowywania wartości prędkości

int fda[20];// tablica do przechowywania katalogu

int fla[20];// tablica do przechowywania świateł

int f1a[20];// tablica do przechowywania fun1…..

int f8a[20];// tablica do przechowywania fun8

Aby umożliwić zmianę instrukcji DCC na bieżąco:

Instrukcje dotyczące szybkości: void amend_speed (struct Message & x) {

x.data[0] = adres_lokal;

x.dane [1] = 0x40; // locoMsg z 28 krokami prędkości }

Instrukcje dotyczące funkcji:

void amend_group1 (wiadomość struktury i x) {

x.data[0] = adres_lokal;

x.dane [1] = 0x80; // locoMsg z instrukcją grupy 1 0x80 }

Główna pętla szkicu:

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

wyślij_dane_1(); // wyślij dane bezprzewodowo

opóźnienie(10);

wyślij_dane_3(); // wyświetl dane na wyświetlaczu LCD

wyślij_dane_4(); // wyświetl dane na monitorze szeregowym }

jeśli (odczytaj_funkcję()) {

assemble_dcc_msg_group1();

wyślij_dane_1();

opóźnienie(10);

wyślij_dane_3(); } }

Zaktualizuj dane, gdy prędkość się zmieni:

boolean read_locoSpeed() Wykrywa nowy adres lokomotywy, ustawienie prędkości lub kierunku i odpowiednio zmienia „dane” HEX. Tutaj określiłem 28 kroków prędkości i aby spełnić standard NMRA S 9.2, dane prędkości muszą być znalezione w tabeli wyszukiwania w 'speed_step()'

void speed_step(){ przełącznik (locoSpeed){

przypadek 1: dane |= 0x02; przerwa;

przypadek 2: dane |= 0x12; przerwa;

przypadek 3: dane |= 0x03; przerwa;

………

przypadek 28: dane |= 0x1F; przerwa; }}

Zaktualizuj dane po zmianie funkcji:

wartość logiczna read_function()

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

} //światła wyłączone

if (fla[locoAdr] == 1) {

dane = 0x90;

} //światła przednie włączone

Dla każdej funkcji:

if (f2a[locoAdr] == 0) { dane |= 0; }. // Funkcja 2 wyłączona

if (f2a[locoAdr] == 1) {

dane |= 0x02; // Funkcja 2 na }'data' jest tworzona przez połączenie ['|=' złożonego bitowego lub] kodów szesnastkowych dla każdej funkcji.

Krok 3: Odbiornik

Odbiorca
Odbiorca

Na schemacie obwodu pokazano, gdzie piny 5 i 6 Arduino Pro Mini są używane do dostarczania sygnału DCC dostarczanego do mostka H. Pary mostków H są połączone równolegle, aby zwiększyć wydajność prądową. W zależności od prądu pobieranego przez lokomotywę, może być wymagane podłączenie radiatora do 16-stykowego urządzenia DIP lub podłączenie zewnętrznego mostka H o dużej wytrzymałości.

Szkic Arduino jest załączony do pobrania. Sygnał DCC składa się z zegara pracującego z częstotliwością 2 MHz

void SetupTimer2() wykonuje to zadanie.

Zegar zawiera „krótkie impulsy” (58us) dla „1” w danych DCC i „długie impulsy” (116us) dla „0” w danych DCC.

Pętla jest nieważna, pobiera dane z radia i jeśli zostanie znaleziony prawidłowy ciąg, dane są konwertowane na dane DCC.

void loop(void){ if (radio.available()){ bool done = false; gotowe = radio.odczyt(inmsg, 1); // odczytaj otrzymane dane

char rc = inmsg[0]; // umieść odczytany znak w tej tablicy

jeśli (rc != 0){. // jeśli znak nie jest równy zero

inString.concat(rc); // zbuduj wiadomość }

if (rc == '\0') { // jeśli znak to '/0' koniec wiadomości

Serial.println(inString); // drukuj zmontowaną wiadomość

strunowy(); // dekonstruuj wiadomość tekstową, aby uzyskać instrukcje DCC

} } }

Krok 4: Uruchom lokomotywę

Uruchom lokomotywę
Uruchom lokomotywę

Aby uniknąć przerw w przesyłaniu danych spowodowanych jazdą wielu pociągów na tym samym torze, należy odłączyć styki między kołami a torem dla każdej używanej lokomotywy i ciężarówki.

Ciesz się darmowymi pociągami niezależnie od warunków na torze - co za różnica! Bez kłopotów, bez start-stop i bez konieczności czyszczenia.

Użyte przeze mnie akumulatory to akumulatory LLoytron AA x 12. Specjalnie dla nich zbudowałem ładowarkę, która ładuje po 6 sztuk na raz. (patrz instrukcja)

Zalecana: