สารบัญ:

Model Railway - DCC Command Station โดยใช้ Arduino :: 3 Steps
Model Railway - DCC Command Station โดยใช้ Arduino :: 3 Steps

วีดีโอ: Model Railway - DCC Command Station โดยใช้ Arduino :: 3 Steps

วีดีโอ: Model Railway - DCC Command Station โดยใช้ Arduino :: 3 Steps
วีดีโอ: DCC Arduino projects for model trains | March 2017 Model Railroad Hobbyist | Geoff Bunza 2024, พฤศจิกายน
Anonim
Image
Image
รหัส Arduino - สถานีคำสั่งพร้อมปุ่มกด
รหัส Arduino - สถานีคำสั่งพร้อมปุ่มกด

อัปเดตในเดือนสิงหาคม 2018 - ดูคำแนะนำใหม่:

อัปเดต 28 เมษายน 2559: ตอนนี้ความสามารถในการควบคุมผลิตภัณฑ์ / คะแนน 16 รายการไปยัง Command Station ผลิตภัณฑ์ T1 - T8 มีให้ผ่านปุ่ม 'B' ผลิตภัณฑ์ T9 - T16 มีให้ผ่านปุ่ม 'C'

อัปเดต 10 มีนาคม 2559:

เพิ่มความสามารถในการควบคุมผลิตภัณฑ์ 8 จุด / จุดใน Command Station รหัส Arduino ได้รับการอัปเดตตามนั้นโดยใช้แพ็กเก็ตมาตรฐาน NMRA สำหรับผลิตภัณฑ์ (อ้างอิงจากการศึกษาแพ็กเก็ตข้อมูล Lenz / Atlas Compact สำหรับการควบคุมผลิตภัณฑ์)

ผลิตภัณฑ์ T1 - T8 มีให้ผ่านปุ่ม 'B'

ดูคำแนะนำเกี่ยวกับวงจรรับแพ็กเก็ตข้อมูลที่ใช้และต้องใช้รหัส Arduino

อัปเดต 18 มกราคม 2559:

ฉันได้เพิ่มตัวต้านทานความรู้สึกปัจจุบัน (1k5 โอห์ม) และตัวเก็บประจุ (10 uf) ให้กับวงจรและแก้ไขรหัส Arduino เพื่อตัดกระแสไฟเมื่อตรวจพบกระแสสูงสุดที่> 3200 mAmps ข้อมูลจำเพาะ H-bridge ระบุกระแสเอาต์พุต 377 uA ต่อ 1 แอมป์ในการโหลด

ตัวต้านทาน 1.5 k ohm จะส่ง 0.565 โวลต์ต่อแอมป์บนขาอนาล็อก 6 ด้วย 1023 ขั้นตอนบนอินพุตแบบอะนาล็อก ซึ่งจะทำให้ 0.565 * 1023 / 5 = 116 ต่อโหลดแอมป์

A = 100 * (การอ่านแบบแอนะล็อก (AN_CURRENT)) / 116;A = A * 10; (ให้ผลเป็นมิลลิแอมป์)

กระแสโหลดเป็นมิลลิแอมป์จะแสดงบน TFT

แป้นพิมพ์ 4x4 แบบเต็มมีฟังก์ชัน F1 ถึง F8 และอีก 10 loco (1-19) ผ่านปุ่ม '#' (เพื่อเพิ่ม 10 ลงในปุ่มตัวเลขโดยเริ่มจาก loco 10)

รหัส Arduino มีมาตรฐาน NMRA สำหรับไบต์คำสั่ง

ดูลิงค์

www.nmra.org/sites/default/files/s-9.2.1_20…

(หน้า 6 มีความเกี่ยวข้องเป็นพิเศษ)

แพ็กเก็ตถูกจัดเรียงตามจำนวนขั้นตอนความเร็ว ที่อยู่แบบยาว/แบบสั้น และคำสั่งกลุ่มฟังก์ชัน

ไบต์ของคำสั่งทั้งหมดนำหน้าด้วยคำนำของ '1' บิต 11111111 (หรือแพ็กเก็ตที่ไม่ได้ใช้งาน) ตามด้วย

เช่น. ที่อยู่ 4 ไบต์ 0 00000011 0 00111111 0 10000011 0 10111111

เท่ากับ loco 3, ความเร็ว 128 ขั้น, ทิศทางไปข้างหน้าและความเร็วขั้นที่ 3 (ไบต์สุดท้ายคือ XOR ตรวจสอบข้อผิดพลาด)

เช่น ที่อยู่ 3 ไบต์ 0 00000011 0 10010000 0 10110011

เท่ากับ loco 3, กลุ่มฟังก์ชัน 1, ไฟ FL บนบวก XOR ไบต์ (บิต '0' แยกแต่ละไบต์)

ดูวิดีโอสาธิตที่แนบมาสำหรับ loco 12

ฟังก์ชั่น F1 - F8 ใช้งานได้ผ่านปุ่ม 'A', DIR (ปุ่ม '*' = ทิศทาง) FL (ปุ่ม '0' = ไฟ) และปุ่ม '#' ให้ locos 10 ถึง 19 บนแป้นพิมพ์ตัวเลข ตอนนี้คีย์ 'D' ใช้สำหรับ 'Emergency STOP'

ขอขอบคุณผู้ให้บริการต่างๆ บนเว็บสำหรับแหล่งข้อมูล DCC และรหัส Arduino

โดยเฉพาะอย่างยิ่ง โปรเจ็กต์นี้ได้รับแรงบันดาลใจจาก Michael Blank และ 'Simple DCC - a command station'

www.oscale.net/en/simpledcc

4x4 Matrix Array 16 คีย์แพดเมมเบรนคีย์สวิตช์ (ebay) £1.75

2.2 นิ้ว 240x320 Serial SPI TFT LCD Display Module (ebay) £7.19

ยูนิเวอร์แซล 12V 5A 60W เพาเวอร์ซัพพลาย AC ADAPTER (ebay) £6.49

Nano V3.0 สำหรับ Arduino พร้อม CH340G 5V 16M ที่รองรับ ATmega328P (ebay) 2 x £3.30 = 6.60 ปอนด์

โมดูลไดรเวอร์มอเตอร์ LMD18200T สำหรับ Arduino R3 (ebay) £6.99

คอนเนคเตอร์, สายไฟ, เวโรบอร์ด, โพเทนชิออมิเตอร์ ประมาณ £3.50

รวม £32.52

สถานีคำสั่งพื้นฐานที่ไม่มีหน้าจอ tft และ 1 x nano จะเป็น £22.03

[หมายเหตุ: คุณสามารถเพิ่มการ์ดหน่วยความจำลงในจอแสดงผล TFT และแก้ไขโค้ดเพื่อแสดงภาพของเอ็นจิ้นที่เลือกได้ แม้ว่าจะต้องแก้ไขรหัสห้องสมุดเพื่อสร้างหน่วยความจำเพิ่มเติมสำหรับภาพร่าง ขนาดร่างปัจจุบันสูงสุดสำหรับ TFT Arduino Nano]

รหัส Arduino ดั้งเดิมโดย Michael Blank ใช้สำหรับเอ็นจิ้นเดียว เดินหน้า / ถอยหลังเท่านั้นโดยไม่มีการควบคุมฟังก์ชัน ไม่มีปุ่มกด และไม่มีจอแสดงผล

ฉันได้แก้ไขโค้ดให้รวมเครื่องยนต์ 1 - 19 หน้า หน้าจอแสดงผล ทิศทาง ไฟ 8 ฟังก์ชั่น หยุดฉุกเฉินและจำกัดกระแสไฟอัตโนมัติ

สะพาน LMD18200T สามารถรองรับกระแสไฟสูงสุด 3 แอมป์ ซึ่งเหมาะสำหรับเครื่องชั่งทุกขนาดรวมถึง G-scale (รถไฟสวน) แหล่งจ่ายไฟหลักและอุปกรณ์อิเล็กทรอนิกส์เหมาะสำหรับใช้ภายในอาคารเท่านั้น เว้นแต่คุณจะสามารถป้องกันสภาพอากาศได้ทั้งหมด ฉันมีสถานีบัญชาการในบ้านพักฤดูร้อนที่มีสายเชื่อมต่อรางวิ่งผ่านกำแพงไปยังรางรถไฟ

ขั้นตอนที่ 1: รหัส Arduino - สถานีคำสั่งพร้อมปุ่มกด

ฉันขอขอบคุณ tvantenna2759 สำหรับการชี้ข้อผิดพลาด 2 ข้อในแผนภาพวงจรที่รหัส Arduino ไม่ตรงกับการเดินสาย อัปเดตแล้ว (21 ต.ค. 2017)

ตอนนี้ได้เพิ่มผู้ประท้วง 16 คนในสถานีบัญชาการแล้ว ดูคำแนะนำในแผนภาพวงจรผลิตภัณฑ์ / คะแนนโดยใช้โมดูล Arduino Mini Pro

แนบโค้ดที่แก้ไขแล้วรวมถึงการควบคุมผลิตภัณฑ์

แพ็กเก็ตตัวถอดรหัสอุปกรณ์เสริมพื้นฐานคือ: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 จากการวิเคราะห์แพ็กเก็ตที่ใช้โดย Lenz (Compact / Atlas) สำหรับการควบคุมจุด ฉันได้ใช้รูปแบบแพ็กเก็ตไบนารีต่อไปนี้สำหรับไบต์ 1 และ 2: tunAddr = 1 Turnout 1a: 1000 0001 1111 1000 / จำนวนสินค้า 1b: 1000 0001 1111 1001 จำนวนสินค้า 2a: 1000 0001 1111 1010 / จำนวนสินค้า 2b: 1000 0001 1111 1011 จำนวนสินค้า 3a: 1000 0001 1111 1100 / สินค้า 3b: 1000 0001 1111 1101 จำนวนสินค้า 4a: 1000 0001 1111 1110 / จำนวนสินค้า 4b: 1000 0001 1111 1111 tunAddr = 2 --------------------------------------------------- -------------------------------------------------- ----------------- Turnout 5a: 1000 0010 1111 1000 / Turnout 5b: 1000 0010 1111 1001 Turnout 6a: 1000 0010 1111 1010 / Turnout 6b: 1000 0010 1111 1011 Turnout 7a: 1000 0010 1111 1100 / จำนวนสินค้า 7b: 1000 0010 1111 1101 สินค้า 8a: 1000 0010 1111 1110 / จำนวนสินค้า 8b: 1000 0010 1111 1111 ----------------------- -------------------------------------------------- ---------------------------------- ผลิตภัณฑ์ 9a: 1000 0011 1111 1000 / สินค้า 9b: 1000 0011 1111 1001 เป็นต้น …………

แยกจากโค้ดที่แก้ไข: เพิ่มข้อความ 'struct' อีก 2 ข้อความ updatesvoid amend_tun1 (struct Message & x) { x.data[0] = 0x81; // ตัวถอดรหัสอุปกรณ์เสริม 0x80 & ที่อยู่ 1 x.data[1] = 0; }

เป็นโมฆะ amend_tun2 (ข้อความโครงสร้าง & x) { x.data[0] = 0x82; // ตัวถอดรหัสอุปกรณ์เสริม 0x80 & ที่อยู่ 2 x.data[1] = 0; }

เพิ่ม void ใหม่สำหรับ turnouts:boolean read_turnout() { delay(20);

บูลีน change_t = เท็จ; get_key();

ถ้า (key_val >= 101 && key_val <= 404 && turn == 1){

ข้อมูล = 0xf8; // = เลขฐานสอง 1111 1000

amend_tun1(msg[1]);

}

ถ้า (key_val >= 505 && key_val <= 808 && turn == 1){

ข้อมูล = 0xf8; // = เลขฐานสอง 1111 1000

amend_tun2(msg[1]);

}

ถ้า (key_val == 101 && เทิร์น == 1){

ถ้า (tun1 == 1){

ข้อมูล |= 0; // t1a

change_t = จริง;}

ถ้า (tun1 == 0){

ข้อมูล |= 0x01; // t1b

change_t = จริง;}

}

ถ้า (key_val == 202 && เทิร์น == 1){

ถ้า (tun2 == 1){

ข้อมูล |= 0x02; // t2a

change_t = จริง;

}

ถ้า (tun2 == 0){

ข้อมูล |= 0x03; // t2b

change_t = จริง; }

}

ถ้า (key_val == 303 && เทิร์น == 1){

ถ้า (tun3 == 1){

ข้อมูล |= 0x04; // t3a

change_t = จริง;

}

ถ้า (tun3 == 0){

ข้อมูล |= 0x05; // t3b

change_t = จริง;}

}

ถ้า (key_val == 404 && เทิร์น == 1){

ถ้า (tun4 == 1){

ข้อมูล |= 0x06; // t4a

change_t = จริง;

}

ถ้า (tun4 == 0){

ข้อมูล |= 0x07; // f4b

change_t = จริง;}

}

ถ้า (key_val == 505 && เทิร์น == 1){

ถ้า (tun5 == 1){

ข้อมูล |= 0; // t5a

change_t = จริง;

}

ถ้า (tun5 == 0){

ข้อมูล |= 0x01; // t5b

change_t = จริง;}

}

ฯลฯ ………..

ขั้นตอนที่ 2: รหัส Arduino - จอแสดงผล TFT

รหัส Arduino - จอแสดงผล TFT
รหัส Arduino - จอแสดงผล TFT
รหัส Arduino - จอแสดงผล TFT
รหัส Arduino - จอแสดงผล TFT
รหัส Arduino - จอแสดงผล TFT
รหัส Arduino - จอแสดงผล TFT
รหัส Arduino - จอแสดงผล TFT
รหัส Arduino - จอแสดงผล TFT

วงจรการแสดงผลยังคงเหมือนเดิมโดยมีโค้ดที่ปรับเปลี่ยนเพื่อแสดงสถานะของผู้ออกมาประท้วงทั้ง 16 ราย หมายเหตุ: รหัสห้องสมุดใช้หน่วยความจำรหัสสเก็ตช์เกือบทั้งหมด ทำให้เหลือที่ว่างเล็กน้อยสำหรับคุณลักษณะใหม่ หากใครมีไฟล์ไลบรารี่ที่มีประสิทธิภาพมากกว่าสำหรับ TFT ที่ใช้ที่นี่ โปรดแจ้งให้เราทราบ

ขั้นตอนที่ 3: ผู้ควบคุมผลิตภัณฑ์

ผู้ควบคุมผลิตภัณฑ์
ผู้ควบคุมผลิตภัณฑ์
ผู้ควบคุมผลิตภัณฑ์
ผู้ควบคุมผลิตภัณฑ์

ดูคำแนะนำเกี่ยวกับวิธีการสร้างตัวควบคุม Turnout / Points

ครบชุดควบคุม 16 จุด และอุปกรณ์เสริม 15 ชิ้น เช่น ไฟ เสียง เครื่องเล่นแผ่นเสียง ฯลฯ

แนะนำ: