Mundarija:

Bog 'poezdi - Arduino simsiz NMRA DCC: 4 qadam (rasmlar bilan)
Bog 'poezdi - Arduino simsiz NMRA DCC: 4 qadam (rasmlar bilan)

Video: Bog 'poezdi - Arduino simsiz NMRA DCC: 4 qadam (rasmlar bilan)

Video: Bog 'poezdi - Arduino simsiz NMRA DCC: 4 qadam (rasmlar bilan)
Video: 12 Лекция узб 2024, Iyun
Anonim
Image
Image
Tizim dizayni
Tizim dizayni

O'lik temir yo'l tizimi bo'yicha DCC bilan oldingi ko'rsatmalarga qo'shimcha ravishda, men bu g'oyani klaviatura va LCD displeyli qo'lda boshqariladigan DCC qo'mondonlik stantsiyasi yordamida ishlab chiqdim. Qo'mondonlik stantsiyasi NMRA DCC ko'rsatmalari uchun zarur bo'lgan barcha kodlashni o'z ichiga oladi, lekin relslarga ulanish o'rniga, ma'lumotlar RF24L01+ radio moduli orqali yuk mashinasida yoki lokom ostida o'rnatilgan qabul qilgichga uzatiladi - xona ruxsat bergan joyda.

Albatta, sizning lokomotivlaringiz dvigatel motorlariga mos keladigan yuk ko'tarish qobiliyatini dekoder bilan jihozlangan bo'lishi kerak.

1 -qadam: tizimni loyihalash

Tizim dizayni
Tizim dizayni

Arduino Pro Mini - dizayn markazida. Tizimni ishlab chiqish va tenglikni ishlab chiqarish uchun Fritzingdan foydalanish.

Men bir xil PCB -ni uzatuvchi va qabul qilgichda ishlata oldim, shuning uchun ba'zi xarajatlarni tejadim.

Transmitterda klaviatura va LCD uchun ulanishlar mavjud, qabul qilgich esa ularni talab qilmaydi va H-ko'prigidan foydalanib, lokomotiv uchun DCC chiqishini ta'minlaydi.

Keyingi rivojlanish, agar kuchliroq lokomlar uchun kerak bo'lsa, katta H-ko'prigi uchun ulanishlarni o'z ichiga oladi.

Agar siz Arduino -dagi SCA / SCL ulanishlariga displeyni faqat 2 ta sim yordamida uzatishga imkon beradigan ryukzakli LCD displeydan foydalansangiz, PCF8574 o'chirilishi mumkin. Qismlar ro'yxati: DCC Command Station + 1 qabul qilgich uchun jami = taxminan 60 funt = Har biri taxminan 10,00 funt. + batareyalar

Arduino Pro Mini. x 2 = 4,00 funt

4x3 membranali klaviatura = 3,00 funt

20 x 4 LCD displey = 7,00 funt

PCF5874 = 1,80 funt

NRF24L01+. radio modullari x 2 = 5,80 funt

PCB ishlab chiqarilishi 10 chegirmali (yoki Vero kartasidan foydalanish mumkin) = 2 ta narx uchun 24 funt yoki 4,80 funt

3.3 v Regulyator = 0.17 funt (RS Comp dan 25 to'plami)

5V regulyatori LM7805 = 0,30 funt

H-ko'prigi SN754410ne = 3,00 funt

Qayta zaryadlanadigan Lloytron 2700 maH AA batareyalari x 12 = 22,00 funt. (pastroq maH nominal batareyalar arzonroq)

Kondansatkichlar, kostryulkalar, pinlar, ulagichlar va boshqalar = taxminan 2,00 funt

Qoplama 190x110x60 mm = 8,00 funt

Transmitter - telefon zaryadlovchi / batareya = 2,00 funt

2 -qadam: uzatuvchi

Transmitter
Transmitter

Arduino Pro Mini -dagi D2 dan D8 pinlari klaviaturaga ulangan elektron sxemasi ko'rsatilgan. 100k ohmlik potentsiometr A0 analog piniga ulangan. SDA va SCL pinlari PCF8574 chipini A4 pinlariga ulangan. A5 Arduino Pro Mini -da, Pro Mini -ning yuqori qavatidagi pinlarga lehimli simlar yordamida.

Yuklab olish uchun Arduino eskizi biriktirilgan.

Men 20 x 4 o'lchamli LCD displeydan foydalanganman, har bir satrda 20 ta belgidan iborat 4 qatorli ma'lumotlarga ega, klaviatura quyidagi menyuni beradi:

1dan 9gacha = manzil manzili * = yo'nalish 0 = chiroqlar # = 1-8 tugmachalari uchun funktsiya menyusi

Arduino Pro Mini eskizining asosiy tavsifi: Kodning bu qatori DCC xabarini HEX formatida tartibga soladi. tuzilish Xabar msg [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // bo'sh xabar

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 baytli manzil

};

Har bir lokom uchun sozlamalarni saqlash uchun qatorlar qatori quyidagicha o'rnatiladi:

int la [20]; // loco raqamlarini ushlab turuvchi qator

int sa [20]; // tezlik qiymatlarini ushlab turuvchi qator

int fda [20]; // dirni ushlab turish uchun qator

int fla [20]; // chiroqlarni ushlab turuvchi qator

int f1a [20]; // qiziqarli o'tkazish uchun qator1 …..

int f8a [20]; // ko'ngilxushlikni saqlash uchun8

Biz ketayotganimizda DCC ko'rsatmalariga o'zgartirishlar kiritish uchun:

Tezlik ko'rsatmalari uchun: void o'zgarishlar_speed (struct Message & x) {

x.data [0] = locoAdr;

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

Funktsiya bo'yicha ko'rsatmalar uchun:

void o'zgarishlar_group1 (tuzilgan Xabar va x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg birinchi guruhli ko'rsatma 0x80}

Eskizning asosiy halqasi:

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

send_data_1 (); // ma'lumotlarni simsiz yuborish

kechikish (10);

send_data_3 (); // ma'lumotlarni LCD displeyda ko'rsatish

send_data_4 (); // ma'lumotlarni ketma -ket monitorda ko'rsatish}

if (read_function ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

kechikish (10);

send_data_3 (); }}

Tezlik o'zgarganda ma'lumotlarni yangilang:

boolean read_locoSpeed () Bu yangi manzil, tezlik yoki yo'nalish sozlamalarini aniqlaydi va shunga mos ravishda HEX "ma'lumotlarini" o'zgartiradi. Bu erda men 28 tezlik bosqichini ko'rsatdim va NMRA S 9.2 standartiga javob berish uchun tezlik ma'lumotlarini qidirish jadvalidan topish kerak. "speed_step ()" da

void speed_step () {switch (locoSpeed) {

1 -holat: ma'lumotlar | = 0x02; tanaffus;

2 -holat: ma'lumotlar | = 0x12; tanaffus;

3 -holat: ma'lumotlar | = 0x03; tanaffus;

………

28 -holat: ma'lumotlar | = 0x1F; tanaffus; }}

Vazifalar o'zgarganda ma'lumotlarni yangilang:

mantiqiy o'qish funktsiyasi ()

if (fla [locoAdr] == 0) {ma'lumotlar = 0x80;

} // faralar o'chadi

agar (fla [locoAdr] == 1) {

ma'lumotlar = 0x90;

} // faralar yonadi

Har bir funktsiya uchun:

if (f2a [locoAdr] == 0) {ma'lumotlar | = 0; }. // 2 -funktsiya o'chirilgan

agar (f2a [locoAdr] == 1) {

ma'lumotlar | = 0x02; // "Ma'lumotlar" ning 2 -funktsiyasi har bir funktsiya uchun ['| =' birikma bitli yoki] HEX kodlarini birlashtirib tuziladi.

3 -qadam: qabul qiluvchi

Qabul qiluvchi
Qabul qiluvchi

H-ko'prigiga DCC signalini etkazib berish uchun Arduino Pro Mini-ning 5 va 6-pinlari ishlatilgan sxemasi ko'rsatilgan. H-ko'prik juftlari oqim quvvatini oshirish uchun parallel ulanadi. Loko chizig'ining oqimiga qarab, 16 pinli DIP qurilmasiga sovutgichni ulash talab qilinishi mumkin yoki og'ir yuk ko'taruvchi H-ko'prigi tashqi tomondan ulanishi mumkin.

Yuklab olish uchun Arduino eskizi biriktirilgan. DCC signali 2 MGts tezlikda ishlaydi

void SetupTimer2 () bu vazifani bajaradi.

Soat DCC ma'lumotlarida "1" uchun "qisqa pulslar" (58us) va DCC ma'lumotlarida "0" uchun "uzoq pulslar" (116us) ni o'z ichiga oladi.

Bo'shliq, radiodan ma'lumotlarni oladi va agar to'g'ri satr topilsa, ma'lumotlar DCC ma'lumotlariga aylanadi.

void loop (void) {if (radio.available ()) {bool done = false; bajarilgan = radio. o'qish (inmsg, 1); // olingan ma'lumotlarni o'qing

char rc = inmsg [0]; // bu qatorga o'qilgan belgini qo'ying

agar (rc! = 0) {. // agar belgi nolga teng bo'lmasa

inString.concat (rc); // xabar yaratish}

if (rc == '\ 0') {// agar belgi '/0' xabarning oxiri bo'lsa

Serial.println (inString); // yig'ilgan xabarni chop eting

satr (); // DCC ko'rsatmalarini olish uchun mag'lubiyat xabarini tuzish

} } }

4 -qadam: Locos -ni ishga tushiring

Lokoslarni ishga tushiring
Lokoslarni ishga tushiring

Bir yo'lda bir nechta poezd harakatlanishiga to'sqinlik qilmaslik uchun, har bir lokomotiv va yuk mashinasi uchun g'ildiraklar va yo'l o'rtasidagi kontaktlarni uzib qo'yish kerak.

Yo'l sharoitidan qat'i nazar, bepul yuradigan poezdlardan rohatlaning - bu qanday farq! Hech qanday qiyinchilik, start-stop va tozalash talab qilinmaydi.

Men ishlatgan batareyalar qayta zaryadlanadigan LLoytron AA x 12. Men, ayniqsa, ular uchun bir vaqtning o'zida 6 zaryad oladigan zaryadlovchi qurilmasini qurdim. (ko'rsatmalarga qarang)

Tavsiya: