Mündəricat:

Garden Train - Arduino Wireless NMRA DCC: 4 Addım (Şəkillərlə birlikdə)
Garden Train - Arduino Wireless NMRA DCC: 4 Addım (Şəkillərlə birlikdə)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 Addım (Şəkillərlə birlikdə)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 Addım (Şəkillərlə birlikdə)
Video: Cheap and Amazing! DCC-EX 2 Years Later 2024, Noyabr
Anonim
Image
Image
Sistemin Dizaynı
Sistemin Dizaynı

Ölü dəmir yolu sistemi ilə bağlı DCC ilə əvvəlki təlimatlara əlavə olaraq, fikri klaviatura və LCD displeyə malik DCC Komanda Stansiyası ilə daha da inkişaf etdirdim. Komandarlıq Stansiyası NMRA DCC təlimatları üçün lazım olan bütün kodlamaları ehtiva edir, lakin relslərə qoşulmaq əvəzinə məlumatlar RF24L01+ radio modulu ilə yük maşınının içərisində və ya lokotun altına quraşdırılmış alıcıya ötürülür - otaq icazə verdiyi yerdə.

Əlbəttə ki, lokotlarınızda mühərrik mühərriklərinə uyğun yükləmə qabiliyyəti olan bir dekoder quraşdırılmalıdır.

Addım 1: Sistemin dizaynı

Sistemin Dizaynı
Sistemin Dizaynı

Arduino Pro Mini dizaynın mərkəzindədir. Dövrəni inkişaf etdirmək və PCB istehsal etmək üçün Fritzing -dən istifadə etmək.

Eyni PCB -ni həm ötürücü, həm də alıcı üçün istifadə edə bildim, beləliklə bəzi xərclərə qənaət etdim.

Vericinin klaviatura və LCD üçün əlaqələri var, qəbuledici isə bunları tələb etmir və lokot üçün DCC çıxışını təmin etmək üçün H körpüsündən istifadə edir.

Əlavə bir inkişaf, daha güclü lokoslar üçün tələb olunarsa daha böyük bir H körpüsü üçün əlaqələri əhatə edir.

PCF8574, Arduino üzərindəki SCA / SCL bağlantılarının ekranı yalnız 2 teldən istifadə edərək qidalandırmasına imkan verən sırt çantası ilə təchiz edilmiş bir LCD displey istifadə etsəniz silinə bilər. = Hər biri təxminən 10.00 funt sterlinq. + batareyalar

Arduino Pro Mini. x 2 = 4,00 funt sterlinq

4x3 membran klaviatura = 3,00 funt

20 x 4 LCD ekran = 7.00 funt sterlinq

PCF5874 = 1,80 funt

NRF24L01+. radio modulları x 2 = 5,80 funt

10 endirim üçün PCB istehsalı (və ya Vero lövhəsi istifadə edilə bilər) = 2 off üçün 24 funt sterlinq və ya 4.80 funt sterlinq

3.3 v Regulator = 0.17 funt (RS Comp -dən 25 paket)

5v tənzimləyici LM7805 = 0.30 funt

H körpüsü SN754410ne = 3,00 funt

Lloytron təkrar doldurulan 2700 maH AA batareyaları x 12 = 22.00 funt sterlinq. (aşağı maH nominal batareyalar daha ucuzdur)

Kondansatörler, qablar, sancaqlar, bağlayıcılar və s. = Təxminən £ 2.00

Kassa 190x110x60 mm = 8.00 funt sterlinq

Verici - telefon şarj cihazı / batareya = 2,00 funt

Addım 2: ötürücü

Verici
Verici

Arduino Pro Mini -dəki D2 -dən D8 sancaqlarının klaviatura ilə birləşdirildiyi dövrə diaqramı göstərilir. Sürət tənzimlənməsi üçün Analog pin A0 -a 100k ohm potansiyometr, PCF8574 çipini təşkil edən SDA və SCL pinləri A4 sancaqlarına və A5, Arduino Pro Mini -də Pro Mini -nin üst qatındakı pinlərə lehimli tellər vasitəsilə.

Yükləmək üçün Arduino eskizi əlavə edilmişdir.

Hər sətirdə 20 simvoldan ibarət 4 sətir məlumatı təmin edən 20 x 4 LCD displeydən istifadə etmişəm. Klaviatura aşağıdakı menyunu təqdim edir:

1 - 9 = loko ünvanı * = istiqamət 0 = işıqlar # = 1 - 8 düymələri üçün funksiya menyusu

Arduino Pro Mini eskizinin əsas təsviri: Bu kod xətti DCC mesajını HEX formatında təşkil edir. struktur Mesajı msg [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // boş mesaj

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 baytlı ünvan

};

Hər bir lokonun parametrlərini saxlamaq üçün bir sıra seriallar aşağıdakı kimi qurulur:

int la [20]; // loco nömrələrini tutmaq üçün bir sıra

int sa [20]; // sürət dəyərlərini saxlamaq üçün bir sıra

int fda [20]; // dir tutmaq üçün bir sıra

int fla [20]; // işıqları saxlamaq üçün bir sıra

int f1a [20]; // əylənmək üçün bir sıra1 …..

int f8a [20]; // əylənmək üçün dizi8

Gedərkən DCC təlimatlarının dəyişdirilməsini təmin etmək üçün:

Sürət təlimatları üçün: void editor_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // 28 sürətli addım ilə locoMsg}

Funksiya təlimatları üçün:

void editor_group1 (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // qrup 1 təlimatı ilə locoMsg 0x80}

Eskizin əsas döngəsi:

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

send_data_1 (); // məlumatları simsiz göndərin

gecikmə (10);

send_data_3 (); // məlumatları LCD ekranda göstərin

send_data_4 (); // məlumatları serial monitorda göstərin}

if (read_function ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

gecikmə (10);

send_data_3 (); }}

Sürət dəyişdikdə məlumatları yeniləyin:

boolean read_locoSpeed () Bu, yeni bir lokos ünvanı, sürət və ya istiqamət ayarını algılar və buna uyğun olaraq HEX 'məlumatlarını' düzəldir. Burada 28 sürət addımını təyin etdim və NMRA standartı S 9.2 -ə cavab vermək üçün sürət məlumatları bir axtarış masasından tapılmalıdır. 'speed_step ()' daxilində

void speed_step () {keçid (locoSpeed) {

hal 1: məlumatlar | = 0x02; fasilə;

hal 2: data | = 0x12; fasilə;

hal 3: data | = 0x03; fasilə;

………

hal 28: data | = 0x1F; fasilə; }}

Funksiyalar dəyişdikdə məlumatları yeniləyin:

boolean oxu funksiyası ()

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

} // faralar söndü

əgər (fla [locoAdr] == 1) {

məlumat = 0x90;

} // faralar yanır

Hər bir funksiya üçün:

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

əgər (f2a [locoAdr] == 1) {

məlumatlar | = 0x02; // "data" üzrə 2 -ci funksiya, hər bir funksiya üçün ['| =' mürəkkəb bit və ya] HEX kodlarını birləşdirərək qurulur.

Addım 3: Alıcı

Alıcı
Alıcı

H-körpüsünə verilən DCC siqnalını təmin etmək üçün Arduino Pro Mini 5 və 6 sancaqlarının istifadə edildiyi dövrə diaqramı göstərilmişdir. H-körpü cütləri cari tutumu artırmaq üçün paralel olaraq bağlanır. Lokonun çəkdiyi cərəyandan asılı olaraq, 16 pinli DIP cihazına bir qızdırıcının bağlanması tələb oluna bilər və ya xaricdən ağır bir H körpüsü bağlana bilər.

Arduino eskizi yükləmək üçün əlavə edilmişdir. DCC siqnalı 2MHz -də işləyən bir saatdan ibarətdir.

void SetupTimer2 () bu işi görür.

Saata DCC məlumatlarında '1' üçün 'qısa darbeler' (58us) və DCC məlumatlarında '0' üçün 'uzun pulslar' (116us) daxildir.

Döngü boşluğu radiodan məlumat alır və etibarlı bir sim tapılarsa, məlumatlar DCC məlumatlarına çevrilir.

void loop (void) {if (radio.available ()) {bool done = false; tamamlandı = radio.read (inmsg, 1); // alınan məlumatları oxuyun

char rc = inmsg [0]; // oxunan xarakteri bu cərgəyə qoyun

əgər (rc! = 0) {. // xarakter sıfıra bərabər deyilsə

inString.concat (rc); // mesajı qurun}

if (rc == '\ 0') {// əgər xarakter '/0' mesajın sonudursa

Serial.println (inString); // yığılmış mesajı çap edin

simli (); // DCC təlimatlarını almaq üçün simli mesajı qurun

} } }

Addım 4: Locoları işə salın

Locoları işə salın
Locoları işə salın

Eyni yolda birdən çox qatarın hərəkət etməsinə dair məlumatların kəsilməməsi üçün, işləyən hər bir lokomotiv və yük maşını üçün təkərlər və yol arasındakı kontaktları ayırmaq lazımdır.

Yol şəraitindən asılı olmayaraq pulsuz işləyən qatarlardan zövq alın - nə fərq! Heç bir çətinlik, start-stop və təmizliyə ehtiyac yoxdur.

İstifadə etdiyim batareyalar yenidən şarj edilə bilən LLoytron AA x 12-dir. Xüsusilə bir anda 6 şarj edən bir şarj cihazı qurmuşam. (bax təlimatlı)

Tövsiyə: