สารบัญ:
- ขั้นตอนที่ 1: การออกแบบระบบ
- ขั้นตอนที่ 2: เครื่องส่ง
- ขั้นตอนที่ 3: ผู้รับ
- ขั้นตอนที่ 4: เรียกใช้ Locos
วีดีโอ: Garden Train - Arduino Wireless NMRA DCC: 4 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
นอกเหนือจากคำสั่งก่อนหน้านี้กับ 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
เพื่อหลีกเลี่ยงไม่ให้ข้อมูลต้องวิ่งรถไฟหลายขบวนบนรางเดียวกัน คุณต้องปลดการเชื่อมต่อระหว่างล้อกับรางสำหรับโลโกและรถบรรทุกแต่ละคันที่ใช้
เพลิดเพลินไปกับรถไฟวิ่งฟรีโดยไม่คำนึงถึงสภาพเส้นทาง - ช่างแตกต่างอะไรเช่นนี้ ! ไม่ยุ่งยาก ไม่สตาร์ท-หยุด และไม่ต้องทำความสะอาด
แบตเตอรี่ที่ฉันใช้คือ LLoytron AA x 12 ที่ชาร์จซ้ำได้ ฉันได้สร้างที่ชาร์จสำหรับแบตเตอรี่เหล่านี้โดยเฉพาะที่ชาร์จครั้งละ 6 ก้อน (ดูคำแนะนำ)
แนะนำ:
Steampunk Train: 5 ขั้นตอน (พร้อมรูปภาพ)
Steampunk Train: ฉันโชคดีที่ได้รับฐานรถเข็นที่ใช้แล้วจากเพื่อน ฉันจำเป็นต้องเปลี่ยนแบตเตอรี่ทั้งสองก้อนเพื่อให้มันใช้งานได้ แต่นั่นเป็นราคาเล็กน้อยที่จะต้องจ่ายสำหรับแท่นสร้างเสาเอนกประสงค์ ฉันตัดสินใจเ
Smart IoT Garden: 10 ขั้นตอน (พร้อมรูปภาพ)
Smart IoT Garden: หากคุณเป็นเหมือนฉัน คุณชอบผักและผลไม้สดในจาน แต่คุณไม่มีเวลาพอที่จะดูแลสวนที่ดี คำแนะนำนี้จะแสดงให้คุณเห็นถึงวิธีสร้างสวน IoT ที่ชาญฉลาด (ฉันเรียกมันว่า Green Guard) ที่รดน้ำ pl
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
Raspberry Pi Powered IOT Garden: 18 ขั้นตอน (พร้อมรูปภาพ)
Raspberry Pi ขับเคลื่อน IOT Garden: หนึ่งในวัตถุประสงค์หลักของโครงการนี้คือการรักษาความเป็นอยู่ที่ดีของสวนโดยใช้พลังของ Internet of Things (IoT) ด้วยความเก่งกาจของเครื่องมือและซอฟต์แวร์ที่มีอยู่ ผู้ปลูกของเราจึงถูกรวมเข้ากับเซ็นเซอร์ที่
DIY Wireless Mic to Wireless Guitar System: 4 ขั้นตอน
DIY Wireless Mic to Wireless Guitar System: ฉันเคยดู vids และบางวงแล้ว และเกือบทั้งหมดใช้ระบบไร้สายกับกีตาร์ คลั่งไคล้ เคลื่อนไหว เดิน และทำทุกอย่างที่พวกเขาต้องการโดยไม่มีเชือกผูกไว้ ฉันจึงฝันที่จะมีมัน.. แต่.. สำหรับฉันตอนนี้มันแพงเกินไป ฉันเลยคิดขึ้นมาได้ว่า