สารบัญ:
- ขั้นตอนที่ 1: รหัส Arduino - สถานีคำสั่งพร้อมปุ่มกด
- ขั้นตอนที่ 2: รหัส Arduino - จอแสดงผล TFT
- ขั้นตอนที่ 3: ผู้ควบคุมผลิตภัณฑ์
วีดีโอ: Model Railway - DCC Command Station โดยใช้ Arduino :: 3 Steps
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
อัปเดตในเดือนสิงหาคม 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
วงจรการแสดงผลยังคงเหมือนเดิมโดยมีโค้ดที่ปรับเปลี่ยนเพื่อแสดงสถานะของผู้ออกมาประท้วงทั้ง 16 ราย หมายเหตุ: รหัสห้องสมุดใช้หน่วยความจำรหัสสเก็ตช์เกือบทั้งหมด ทำให้เหลือที่ว่างเล็กน้อยสำหรับคุณลักษณะใหม่ หากใครมีไฟล์ไลบรารี่ที่มีประสิทธิภาพมากกว่าสำหรับ TFT ที่ใช้ที่นี่ โปรดแจ้งให้เราทราบ
ขั้นตอนที่ 3: ผู้ควบคุมผลิตภัณฑ์
ดูคำแนะนำเกี่ยวกับวิธีการสร้างตัวควบคุม Turnout / Points
ครบชุดควบคุม 16 จุด และอุปกรณ์เสริม 15 ชิ้น เช่น ไฟ เสียง เครื่องเล่นแผ่นเสียง ฯลฯ
แนะนำ:
Simple Weather Station โดยใช้ ESP8266.: 6 ขั้นตอน (พร้อมรูปภาพ)
Simple Weather Station โดยใช้ ESP8266: ในคำแนะนำนี้ฉันจะแบ่งปันวิธีใช้ ESP8266 เพื่อรับข้อมูลเช่นอุณหภูมิ, ความดัน, สภาพภูมิอากาศ ฯลฯ และข้อมูล YouTube เช่นสมาชิก & จำนวนการดูทั้งหมด และแสดงข้อมูลบน Serial monitor และแสดงบน LCD ข้อมูลจะเ
Neopixel Ws2812 Rainbow LED เรืองแสงพร้อม M5stick-C - เรียกใช้ Rainbow บน Neopixel Ws2812 โดยใช้ M5stack M5stick C โดยใช้ Arduino IDE: 5 ขั้นตอน
Neopixel Ws2812 Rainbow LED เรืองแสงพร้อม M5stick-C | เรียกใช้ Rainbow บน Neopixel Ws2812 โดยใช้ M5stack M5stick C การใช้ Arduino IDE: สวัสดีทุกคนในคำแนะนำนี้ เราจะเรียนรู้วิธีใช้ neopixel ws2812 LED หรือแถบนำหรือเมทริกซ์นำหรือวงแหวน LED พร้อมบอร์ดพัฒนา m5stack m5stick-C พร้อม Arduino IDE และเราจะทำ ลายรุ้งกับมัน
การควบคุมวิทยุ RF 433MHZ โดยใช้ HT12D HT12E - การสร้างรีโมทคอนโทรล Rf โดยใช้ HT12E & HT12D ด้วย 433mhz: 5 ขั้นตอน
การควบคุมวิทยุ RF 433MHZ โดยใช้ HT12D HT12E | การสร้างการควบคุมระยะไกล Rf โดยใช้ HT12E & HT12D ด้วย 433mhz: ในคำแนะนำนี้ฉันจะแสดงวิธีสร้างรีโมทคอนโทรล RADIO โดยใช้โมดูลตัวรับส่งสัญญาณ 433mhz พร้อมการเข้ารหัส HT12E & IC ถอดรหัส HT12D ในคำแนะนำนี้ คุณจะสามารถส่งและรับข้อมูลโดยใช้ส่วนประกอบราคาถูกมาก เช่น HT
วิธีเปิด/ปิด Wifi โดยใช้ Command Prompt!!: 4 ขั้นตอน
วิธีเปิด/ปิด Wifi โดยใช้พรอมต์คำสั่ง!!: คำแนะนำนี้จะแสดงวิธีเปิดหรือปิด wifi บนคอมพิวเตอร์ของคุณโดยใช้พรอมต์คำสั่ง โปรดสมัครรับข้อมูลจากช่องของฉันขอบคุณ
การควบคุม WiFi ของ Model Train โดยใช้ MQTT: 9 ขั้นตอน
การควบคุม WiFi ของ Model Train โดยใช้ MQTT: มีระบบโมเดล TT Scale Train แบบเก่า ฉันมีแนวคิดว่าจะควบคุม locos แยกกันอย่างไร เมื่อคำนึงถึงสิ่งนี้ ฉันได้ก้าวไปอีกขั้นและค้นพบว่าสิ่งที่จำเป็นไม่เพียงแต่ควบคุมรถไฟเท่านั้น แต่มีข้อมูลเพิ่มเติมเกี่ยวกับ