สารบัญ:
- ขั้นตอนที่ 1: ออกแบบโมเดล 3 มิติ
- ขั้นตอนที่ 2: การพิมพ์โมเดล 3 มิติและเสร็จสิ้น
- ขั้นตอนที่ 3: ส่วนประกอบ
- ขั้นตอนที่ 4: การเข้ารหัส (Arduino & การประมวลผล)
- ขั้นตอนที่ 5: วงจร
- ขั้นตอนที่ 6: การทดสอบต้นแบบ
- ขั้นตอนที่ 7: การจำลองจริง
- ขั้นตอนที่ 8: สนุก
วีดีโอ: ระบบข้อมูลที่นั่งว่างบนรถไฟ - FGC: 8 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
โครงการนี้มีพื้นฐานมาจากการดำเนินการตามมาตราส่วนของรถไฟที่ช่วยให้ผู้คนที่อยู่ในสถานีทราบว่ามีที่นั่งว่างใดบ้าง เพื่อดำเนินการสร้างต้นแบบ ซอฟต์แวร์ Arduino UNO จะใช้ร่วมกับการประมวลผลสำหรับส่วนกราฟิก
แนวความคิดนี้จะทำให้สามารถปฏิวัติโลกแห่งการขนส่งสาธารณะได้ เนื่องจากจะทำให้ที่นั่งของรถไฟทุกที่นั่งเหมาะสมที่สุด รับรองการใช้เกวียนทั้งหมด ควบคู่ไปกับความเป็นไปได้ในการรวบรวมข้อมูลและดำเนินการศึกษาที่ถูกต้องในภายหลัง บน.
ขั้นตอนที่ 1: ออกแบบโมเดล 3 มิติ
อันดับแรก เราได้ทำการวิจัยอย่างละเอียดเกี่ยวกับโมเดลรถไฟ ด้วยข้อมูลทั้งหมดที่รวบรวมได้ รถไฟ GTW (ผลิตโดย Stadler Rail) ที่ใช้กับ FGC (Ferrocarrils de la Generalitat de Catalunya) ได้ถูกเลือกแล้ว
ต่อมาได้รับการออกแบบด้วยซอฟต์แวร์ 3D PTC Creo ซึ่งเป็นแบบจำลองสำหรับการพิมพ์ 3D ในภายหลัง
ขั้นตอนที่ 2: การพิมพ์โมเดล 3 มิติและเสร็จสิ้น
เมื่อออกแบบรถไฟแล้ว ก็ส่งต่อไปยังการพิมพ์ 3 มิติ เมื่อพิมพ์ชิ้นงานแล้วจะต้องขัดเพื่อให้ได้พื้นผิวที่เรียบ
โครงการนี้สามารถทำได้ด้วยโมเดลรถไฟที่มีอยู่
เมื่อพิมพ์เสร็จจะได้รับเสร็จสิ้นขั้นสุดท้าย
ขั้นตอนที่ 3: ส่วนประกอบ
สำหรับการพัฒนาโครงการนี้ จำเป็นต้องมีองค์ประกอบต่อไปนี้:
- FSR 0.04-4.5LBS (เซ็นเซอร์ความดัน)
- ตัวต้านทาน 1.1K โอห์ม
ขั้นตอนที่ 4: การเข้ารหัส (Arduino & การประมวลผล)
ตอนนี้เป็นเวลาเขียนโค้ด Arduino ที่จะให้เซ็นเซอร์ส่งสัญญาณไปยังซอฟต์แวร์การประมวลผลที่จะส่งข้อมูลแบบกราฟิก
ในฐานะที่เป็นเซ็นเซอร์ เรามีเซ็นเซอร์ความดัน 4 ตัวสำหรับ Arduino ที่ปรับความต้านทานตามแรงที่ใช้กับพวกมัน ดังนั้นจุดมุ่งหมายคือการใช้ประโยชน์จากสัญญาณที่ส่งโดยเซ็นเซอร์ (เมื่อผู้โดยสารนั่ง) เพื่อเปลี่ยนหน้าจอกราฟิกในการประมวลผล
จากนั้น เราสร้างส่วนกราฟิกที่เราคำนึงถึงการออกแบบกราฟิกของ Ferrocarrils de la Generalitat de Catalunya เพื่อเลียนแบบความเป็นจริงในวิธีที่ดีที่สุด
ในการประมวลผลมีการเขียนโค้ดที่เชื่อมต่อโดยตรงกับซอฟต์แวร์ Arduino ด้วยวิธีนี้ทุกครั้งที่มีคนนั่งบนที่นั่งจะเปลี่ยนสีทำให้ผู้ใช้ที่ชานชาลารถไฟทราบที่นั่งว่างของรถไฟแบบเรียลไทม์.
ที่นี่คุณสามารถดูการเข้ารหัส
อาร์ดูโน่:
หม้อ int = A0; // เชื่อมต่อพินกลางของหม้อกับพินพินนี้ 2 = A1; int pot3 = A2; int pot4 = A3; int lectura1;// ตัวแปรสำหรับเก็บค่า pot;
int lectura2;int lectura3; int lectura4;
การตั้งค่าเป็นโมฆะ () {// เริ่มต้นการสื่อสารแบบอนุกรมที่อัตรารับส่งข้อมูล 9600 Serial.begin (9600); }
วงเป็นโมฆะ () { สตริง s = ""; // // Llegir sensor1 lectura1 = analogRead (หม้อ); // lectura ค่าอนาล็อกถ้า (lectura1 > 10) { s = "1"; ล่าช้า (100); } อื่น ๆ { s = "0"; ล่าช้า (100); } Serial.println(s);
}
กำลังประมวลผล:
นำเข้าการประมวลผล.ซีเรียล.*; // ไลบรารีนี้จัดการสตริงการพูดคุยแบบอนุกรม val=""; รูปภาพ s0000, s0001, s0010, s0011, s0100, s0101, s0110, s0111, s1000, s1001, s1010, s1011, s1100, s1101, s1110, s1111; อนุกรม myPort; // สร้างวัตถุจาก Serial class
void setup()// นี้ทำงานเพียงครั้งเดียว { fullScreen(); background(0);// ตั้งค่าสีพื้นหลังเป็นสีดำ myPort = ซีเรียลใหม่ (นี่คือ "COM5", 9600); // กำหนดพารามิเตอร์ให้กับวัตถุของคลาสซีเรียล ใส่ com ที่ Arduino ของคุณเชื่อมต่ออยู่และอัตราบอด
s0000 = loadImage ("0000.jpg"); s0001=loadImage("0001.jpg"); s0010=loadImage("00110.jpg"); s0011=loadImage("0011.jpg"); s0100=loadImage("0100.jpg"); s0101=loadImage("0101.jpg"); s0110=loadImage("0110.jpg"); s0111=loadImage("0111.jpg"); s1000=loadImage("1000.jpg"); s1001=loadImage("1001.jpg"); s1010=loadImage("1010.jpg"); s1011=loadImage("1011.jpg"); s1100=loadImage("1100.jpg"); s1101=loadImage("1101.jpg"); s1110=loadImage("1110.jpg"); s1111=loadImage("1111.jpg");
s0000.resize (displayWidth, displayHeight); s0001.resize (displayWidth, displayHeight); s0010.resize (displayWidth, displayHeight); s0011.resize(displayWidth, displayHeight); s0100.resize (displayWidth, displayHeight); s0101.resize (ความกว้างของจอแสดงผล, ความสูงของจอแสดงผล); s0110.resize (ความกว้างของจอแสดงผล, ความสูงของจอแสดงผล); s0111.resize (ความกว้างของจอแสดงผล, ความสูงของจอแสดงผล); s1000.resize (displayWidth, displayHeight); s1001.resize (displayWidth, displayHeight); s1010.resize (displayWidth, displayHeight); s1011.resize (displayWidth, displayHeight); s1100.resize (displayWidth, displayHeight); s1101.resize (displayWidth, displayHeight); s1110.resize (displayWidth, displayHeight); s1111.resize (displayWidth, displayHeight);
val = trim(val);} วาดเป็นโมฆะ () { if (val!=null) {
ถ้า (val.equals ("0001")) { ภาพ (s0001, 0, 0); } else if (val.equals("00110")) { image(s0010, 0, 0); } else if (val.equals("0011")) { image(s0011, 0, 0); } else if (val.equals("0100")) { image(s0100, 0, 0); } else if (val.equals("0101")) { image(s0101, 0, 0); } else if (val.equals("0110")) { image(s0110, 0, 0); } else if (val.equals("0111")) { image(s0111, 0, 0); } else if (val.equals("1000")) { image(s1000, 0, 0); } else if (val.equals("1001")) { image(s1001, 0, 0); } else if (val.equals("1010")) { image(s1010, 0, 0); } else if (val.equals("1011")) { image(s1011, 0, 0); } else if (val.equals("1100")) { image(s1100, 0, 0); } else if (val.equals("1101")) { image(s1101, 0, 0); } else if (val.equals("1110")) { image(s1110, 0, 0); } else if (val.equals("1111")) { image(s1111, 0, 0); } อื่น ๆ { ภาพ (s0000, 0, 0); } } }
ถือเป็นโมฆะ serialEvent(Serial myPort)// เมื่อใดก็ตามที่เหตุการณ์ซีเรียลเกิดขึ้น มันจะทำงาน { val = myPort.readStringUntil('\n'); // ตรวจสอบให้แน่ใจว่าข้อมูลของเราไม่ว่างเปล่าก่อนที่จะดำเนินการต่อหาก (val != null) { // ตัดแต่งช่องว่างและการจัดรูปแบบอักขระ (เช่น carriage return) val = trim (val); println(วาล); } }
ขั้นตอนที่ 5: วงจร
หลังจากการเขียนโปรแกรมทั้งหมด ก็ถึงเวลาเชื่อมต่อเซ็นเซอร์ทั้งหมดกับบอร์ด Arduino UNO
เซ็นเซอร์วางอยู่บนที่นั่ง 4 ตัว (ซึ่งต่อมาจะคลุมด้วยผ้า) และเชื่อมเข้ากับสายเคเบิลที่ต่อไปยังเมนบอร์ดของ Arduino UNO โดยตรง สัญญาณที่ได้รับบนบอร์ดจะถูกส่งไปยังคอมพิวเตอร์ที่เชื่อมต่อผ่าน USB ที่ส่งข้อมูลไปยังการประมวลผลแบบเรียลไทม์เปลี่ยนสีของที่นั่ง
คุณสามารถดูสคีมาของการเชื่อมต่อได้
ขั้นตอนที่ 6: การทดสอบต้นแบบ
เมื่อรหัสถูกอัปโหลดไปยังบอร์ด Arduino และเปิดการประมวลผลและโปรแกรม Arduino เซ็นเซอร์จะถูกทดสอบ บนหน้าจอ คุณจะเห็นการเปลี่ยนแปลงในที่นั่งอันเนื่องมาจากการเปลี่ยนภาพบนจอแสดงผลที่แจ้งเกี่ยวกับที่นั่งว่างและจำนวนที่นั่งว่าง
ขั้นตอนที่ 7: การจำลองจริง
แอปพลิเคชั่นจริงจะพยายามติดตั้งบนรถไฟและแพลตฟอร์มของเครือข่าย FGC เพื่อให้บริการนักเดินทาง
ขั้นตอนที่ 8: สนุก
ในที่สุดคุณก็ได้สร้าง Force Sensor Train (ต้นแบบ) ที่ช่วยให้ผู้ใช้ที่ชานชาลารถไฟทราบว่าที่นั่งใดพร้อมให้บริการแบบเรียลไทม์
ยินดีต้อนรับสู่อนาคต!
โครงการที่ทำโดย Marc Godayol & Federico Domenech
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง