สารบัญ:

Garden Train - Arduino Wireless NMRA DCC: 4 ขั้นตอน (พร้อมรูปภาพ)
Garden Train - Arduino Wireless NMRA DCC: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Garden Train - Arduino Wireless NMRA DCC: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Garden Train - Arduino Wireless NMRA DCC: 4 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Let's learn together - CVs for DCC Decoder! (DCC model railway with Arduino 4) 2024, พฤศจิกายน
Anonim
Image
Image
การออกแบบระบบ
การออกแบบระบบ

นอกเหนือจากคำสั่งก่อนหน้านี้กับ DCC บนระบบ dead rail ฉันได้พัฒนาแนวคิดเพิ่มเติมด้วยสถานีบัญชาการ DCC แบบมือถือพร้อมปุ่มกดและจอ LCD Command Station มีรหัสทั้งหมดที่จำเป็นสำหรับคำสั่ง NMRA DCC อย่างไรก็ตาม แทนที่จะเชื่อมต่อกับราง ข้อมูลจะถูกถ่ายโอนโดยโมดูลวิทยุ RF24L01+ ไปยังเครื่องรับที่ติดตั้งในรถบรรทุกหรือใต้ตู้ - ทุกที่ที่ห้องอนุญาต

แน่นอนว่าโลคอสของคุณต้องติดตั้งตัวถอดรหัสความสามารถในการโหลดที่เหมาะสมกับมอเตอร์ของเครื่องยนต์

ขั้นตอนที่ 1: การออกแบบระบบ

การออกแบบระบบ
การออกแบบระบบ

Arduino Pro Mini คือหัวใจสำคัญของการออกแบบ ใช้ Fritzing พัฒนาวงจรและผลิต PCB

ฉันสามารถใช้ PCB เดียวกันสำหรับทั้งตัวส่งและตัวรับ ซึ่งช่วยประหยัดค่าใช้จ่ายบางส่วน

เครื่องส่งมีการเชื่อมต่อสำหรับปุ่มกดและ LCD ในขณะที่เครื่องรับไม่ต้องการสิ่งเหล่านี้ และใช้สะพาน H เพื่อจ่ายเอาต์พุต DCC สำหรับ loco

การพัฒนาเพิ่มเติมรวมถึงการเชื่อมต่อสำหรับ H-bridge ที่ใหญ่ขึ้น หากจำเป็นสำหรับ locos ที่ทรงพลังกว่า

PCF8574 สามารถลบออกได้หากคุณใช้จอ LCD ที่มาพร้อมกับกระเป๋าเป้ ซึ่งอนุญาตให้เชื่อมต่อ SCA / SCL บน Arduino เพื่อป้อนจอแสดงผลโดยใช้สายไฟเพียง 2 เส้นเท่านั้น รายการชิ้นส่วน: รวม = ประมาณ 60 ปอนด์สำหรับสถานีบัญชาการ DCC + เครื่องรับ 1 เครื่อง ค่าใช้จ่ายเครื่องรับเพิ่มเติม = £ 10.00 โดยประมาณแต่ละ. + แบตเตอรี่

Arduino Pro มินิ x 2 = £4.00

ปุ่มกดเมมเบรน 4x3 = £3.00

จอ LCD 20 x 4 = £7.00

PCF5874 = £1.80

NRF24L01+. โมดูลวิทยุ x 2 = 5.80 ปอนด์

การผลิต PCB สำหรับ 10 off (หรืออาจใช้บอร์ด Vero) = 24 ปอนด์หรือ 4.80 ปอนด์สำหรับ 2off

3.3 v Regulator = 0.17 ปอนด์ (แพ็คละ 25 จาก RS Comp)

เครื่องปรับลม 5v LM7805 = 0.30 ปอนด์

สะพาน H SN754410ne = £3.00

Lloytron แบตเตอรี่ AA ขนาด 2700 mAh แบบชาร์จซ้ำได้ x 12 = £22.00 (แบตเตอรี่ที่มีอัตรา maH ต่ำกว่าจะมีราคาถูกกว่า)

ตัวเก็บประจุ หม้อ หมุด คอนเนคเตอร์ ฯลฯ = 2.00 ปอนด์โดยประมาณ

ตู้ 190x110x60 มม. = 8.00 ยูโร

เครื่องส่ง - ที่ชาร์จโทรศัพท์ / แบตเตอรี่ = £2.00

ขั้นตอนที่ 2: เครื่องส่ง

เครื่องส่ง
เครื่องส่ง

แผนภาพวงจรแสดงตำแหน่งที่พิน D2 ถึง D8 บน Arduino Pro Mini เชื่อมต่อกับปุ่มกด โพเทนชิออมิเตอร์ 100k ohm เชื่อมต่อกับพินอะนาล็อก A0 สำหรับการปรับความเร็ว พิน SDA และ SCL จากชิป PCF8574 เชื่อมต่อกับพิน A4 และ A5 บน Arduino Pro Mini โดยใช้สายบัดกรีกับหมุดที่ชั้นบนสุดของ Pro Mini

แนบร่าง Arduino สำหรับดาวน์โหลด

ฉันใช้จอ LCD ขนาด 20 x 4 ซึ่งให้ข้อมูล 4 บรรทัดพร้อมอักขระ 20 ตัวต่อบรรทัด ปุ่มกดมีเมนูต่อไปนี้:

1 ถึง 9 = ที่อยู่ loco * = ทิศทาง 0 = ไฟ # = เมนูฟังก์ชันสำหรับปุ่ม 1 ถึง 8

คำอธิบายพื้นฐานของร่าง Arduino Pro Mini:บรรทัดของโค้ดนี้จัดเรียงข้อความ DCC ในรูปแบบ HEX struct ข้อความ msg [MAXMSG] = {

{ { 0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // ข้อความที่ไม่ได้ใช้งาน

{ { locoAdr, 0, 0, 0, 0, 0, 0}, 3} // ที่อยู่ 3 ไบต์

};

ในการจัดเก็บการตั้งค่าสำหรับแต่ละ loco มีการตั้งค่าอาร์เรย์ดังนี้:

int la[20];// array เพื่อเก็บหมายเลข loco

int sa[20];// array เพื่อเก็บค่าความเร็ว

int fda[20];// อาร์เรย์ที่จะถือ dir

int fla[20];// อาร์เรย์เพื่อเก็บไฟ

int f1a[20];// อาร์เรย์ที่จะถือ fun1…..

int f8a[20];// อาร์เรย์ที่จะถือ fun8

วิธีเปิดใช้งานการแก้ไขคำแนะนำ DCC เมื่อเราดำเนินการ:

สำหรับคำแนะนำความเร็ว: void amend_speed (struct Message & x) {

x.data[0] = locoAdr;

x.data[1] = 0x40; // locoMsg ด้วยความเร็ว 28 ขั้น }

สำหรับคำแนะนำเกี่ยวกับฟังก์ชัน:

เป็นโมฆะ amend_group1 (ข้อความโครงสร้าง & x) {

x.data[0] = locoAdr;

x.data[1] = 0x80; // locoMsg พร้อมคำสั่งกลุ่มหนึ่ง 0x80 }

วงหลักของร่าง:

วงเป็นโมฆะ (เป็นโมฆะ) { ถ้า (read_locoSpeed ()) { assemble_dcc_msg_speed ();

send_data_1(); // ส่งข้อมูลผ่านระบบไร้สาย

ล่าช้า(10);

send_data_3(); // แสดงข้อมูลบนจอ LCD

send_data_4(); // แสดงข้อมูลบนจอภาพแบบอนุกรม }

ถ้า (read_function()) {

assemble_dcc_msg_group1();

send_data_1();

ล่าช้า(10);

send_data_3(); } }

อัปเดตข้อมูลเมื่อความเร็วเปลี่ยนแปลง:

boolean read_locoSpeed() สิ่งนี้จะตรวจจับที่อยู่ loco การตั้งค่าความเร็วหรือทิศทางใหม่และแก้ไข 'ข้อมูล' ของ HEX ตามลำดับ ที่นี่ฉันได้ระบุ 28 ขั้นตอนความเร็วและเพื่อให้เป็นไปตามมาตรฐาน NMRA S 9.2 ต้องพบข้อมูลความเร็วจากตารางค้นหา ใน 'speed_step()'

เป็นโมฆะ speed_step(){ สวิตช์ (locoSpeed){

กรณีที่ 1: ข้อมูล |= 0x02; หยุดพัก;

กรณีที่ 2: ข้อมูล |= 0x12; หยุดพัก;

กรณีที่ 3: ข้อมูล |= 0x03; หยุดพัก;

………

กรณีที่ 28: ข้อมูล |= 0x1F; หยุดพัก; }}

อัปเดตข้อมูลเมื่อฟังก์ชันเปลี่ยนแปลง:

บูลีน read_function()

ถ้า (fla [locoAdr] == 0) { data = 0x80;

} //ปิดไฟหน้า

ถ้า (fla[locoAdr] == 1) {

ข้อมูล = 0x90;

} //เปิดไฟหน้า

สำหรับแต่ละฟังก์ชัน:

ถ้า (f2a [locoAdr] == 0) { ข้อมูล |= 0; }. // ฟังก์ชั่น 2 ปิด

ถ้า (f2a[locoAdr] == 1) {

ข้อมูล |= 0x02; // ฟังก์ชัน 2 บน }'data' ถูกสร้างขึ้นโดยการรวม ['|=' แบบผสมระดับบิตหรือ] รหัส HEX สำหรับแต่ละฟังก์ชัน

ขั้นตอนที่ 3: ผู้รับ

ผู้รับ
ผู้รับ

แผนภาพวงจรแสดงตำแหน่งที่ใช้พิน 5 และ 6 ของ Arduino Pro Mini เพื่อส่งสัญญาณ DCC ที่จ่ายให้กับ H-bridge คู่สะพาน H เชื่อมต่อแบบขนานเพื่อเพิ่มความจุกระแสไฟ ขึ้นอยู่กับกระแสที่ดึงโดย loco อาจต้องต่อฮีทซิงค์กับอุปกรณ์ DIP 16 พิน หรืออาจเชื่อมต่อ H-bridge สำหรับงานหนักภายนอก

แนบร่าง Arduino เพื่อดาวน์โหลด สัญญาณ DCC สร้างขึ้นจากนาฬิกาที่ทำงานที่ 2MHZ

เป็นโมฆะ SetupTimer2() ทำงานนี้

นาฬิกามี 'พัลส์สั้น' (58us) สำหรับ '1' ในข้อมูล DCC และ 'พัลส์ยาว' (116us) สำหรับ '0' ในข้อมูล DCC

วงเป็นโมฆะ รับข้อมูลจากวิทยุ และหากพบสตริงที่ถูกต้อง ข้อมูลจะถูกแปลงเป็นข้อมูล DCC

วงเป็นโมฆะ (เป็นโมฆะ){ ถ้า (radio.available ()) { บูลเสร็จสิ้น = เท็จ; เสร็จสิ้น = radio.read(inmsg, 1); // อ่านข้อมูลที่ได้รับ

ถ่าน rc = inmsg[0]; // ใส่อักขระที่อ่านลงในอาร์เรย์นี้

ถ้า (rc != 0){. // ถ้าตัวอักษรไม่เท่ากับศูนย์

inString.concat(rc); // สร้างข้อความ }

if (rc == '\0') { // ถ้าอักขระเป็น '/0' สิ้นสุดข้อความ

Serial.println (inString); // พิมพ์ข้อความประกอบ

สตริง (); // ยกเลิกการสร้างข้อความสตริงเพื่อรับคำแนะนำ DCC

} } }

ขั้นตอนที่ 4: เรียกใช้ Locos

เรียกใช้ Locos
เรียกใช้ Locos

เพื่อหลีกเลี่ยงไม่ให้ข้อมูลต้องวิ่งรถไฟหลายขบวนบนรางเดียวกัน คุณต้องปลดการเชื่อมต่อระหว่างล้อกับรางสำหรับโลโกและรถบรรทุกแต่ละคันที่ใช้

เพลิดเพลินไปกับรถไฟวิ่งฟรีโดยไม่คำนึงถึงสภาพเส้นทาง - ช่างแตกต่างอะไรเช่นนี้ ! ไม่ยุ่งยาก ไม่สตาร์ท-หยุด และไม่ต้องทำความสะอาด

แบตเตอรี่ที่ฉันใช้คือ LLoytron AA x 12 ที่ชาร์จซ้ำได้ ฉันได้สร้างที่ชาร์จสำหรับแบตเตอรี่เหล่านี้โดยเฉพาะที่ชาร์จครั้งละ 6 ก้อน (ดูคำแนะนำ)

แนะนำ: