สารบัญ:

ยานใต้น้ำ: 5 ขั้นตอน
ยานใต้น้ำ: 5 ขั้นตอน

วีดีโอ: ยานใต้น้ำ: 5 ขั้นตอน

วีดีโอ: ยานใต้น้ำ: 5 ขั้นตอน
วีดีโอ: การเดินทาง 3 มิติสู่สิ่งที่ซ่อนอยู่ในความลึกของมหาสมุทร 2024, กรกฎาคม
Anonim
ยานพาหนะใต้น้ำ
ยานพาหนะใต้น้ำ
ยานพาหนะใต้น้ำ
ยานพาหนะใต้น้ำ

**************** คำแนะนำนี้ยังอยู่ในระหว่างดำเนินการ **************

คำแนะนำนี้สร้างขึ้นเพื่อตอบสนองความต้องการของโครงการ Makecourse ที่มหาวิทยาลัยเซาท์ฟลอริดา (www.makecourse.com)

คำแนะนำนี้จะเป็นภาพรวมคร่าวๆ เกี่ยวกับการสร้างยานพาหนะใต้น้ำที่ฉันออกแบบและสร้างขึ้นสำหรับชั้นเรียน Makecourse ของฉันที่มหาวิทยาลัยเซาท์ฟลอริดา ในคำแนะนำนี้ ฉันจะจัดเตรียมรายการวัสดุ รหัสควบคุมที่ฉันสร้างขึ้นสำหรับ Arduino Uno ที่ฉันใช้ และภาพรวมของวิธีการประกอบอุปกรณ์ใต้น้ำ

ขั้นตอนที่ 1: วัสดุ

วัสดุ
วัสดุ
วัสดุ
วัสดุ
วัสดุ
วัสดุ

อุปกรณ์อิเล็กทรอนิกส์ใช้ที่ไหน:

1x Arduino Uno

1x กล้องแอคชั่น mobius

1x mobius กล้องแอคชั่นแคมเมรา usb-b ไปยังสาย A/V

1x มุมมองภาคสนาม 777 หน้าจอแสดงผล

1x turnigy marine 50A ESC (ระบบควบคุมความเร็วแบบอิเล็กทรอนิกส์)

1x การ์ดเขียนโปรแกรมทางทะเลแบบหมุนได้

1x T-Motor Navigator 400kv

1x YEP 20A BEC (วงจรกำจัดแบตเตอรี่)

6x Hobby King HK15139 เซอร์โวกันน้ำ

2x ขั้วต่อ T ขนาน y สายรัด

สายต่อเซอร์โว 2x18 นิ้ว

สายต่อเซอร์โวขนาด 6x6 นิ้ว

2x 1300mah 3s แบตเตอรี่ Lipo

2x 2500mah 4s แบตเตอรี่ Lipo

บอร์ดจ่ายไฟ 1x พร้อมเอาต์พุตคงที่ทั้ง 5v และ 12v

วัสดุก่อสร้างที่:

แผ่นไม้อัด 1x 3/16 นิ้ว

1x6 นิ้ว ID ABS shipping tube

1x ท่อซิลิโคน

ซีลเฟล็กซ์ 1 กระป๋อง

หลอด 4x ของเส้นใยเครื่องพิมพ์ ABS 3D

รางลิ้นชัก 1x24 นิ้ว

ท่อหดความร้อน

1x10 ฟุต duraloc velcro

1x JB Weld อีพ็อกซี่พลาสติก

โดมกล้องวงจรปิดอะคริลิกขนาดเส้นผ่านศูนย์กลาง 1x6.2 นิ้ว

2x IP68 การส่งผ่านอีเธอร์เน็ต

สายเคเบิลอีเธอร์เน็ต cat6 ขนาด 2x24 นิ้ว

สายเคเบิลอีเธอร์เน็ต cat6 ขนาด 1x200 ฟุต

ฮาร์ดแวร์ที่ใช้คือ:

สกรูไม้ทองเหลือง 24x1/2 นิ้ว

24x ------ สกรู (รวมอยู่ในเซอร์โว)

เครื่องมือที่ใช้:

ไขควงปากแบนของฟิลิปและหัวแบน

ชุดกุญแจอัลเลน

หัวแร้ง

ปืนความร้อน

เครื่องพิมพ์ 3 มิติ (ฉันใช้ Monoprice Maker Select Plus)

ขั้นตอนที่ 2: การเขียนโปรแกรม

การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม

ด้านล่างเป็นรหัสที่สร้างขึ้นเพื่อควบคุมการดำน้ำ ฉันได้แนบไฟล์.ino มาด้วยเพื่อให้สามารถดาวน์โหลดได้

รหัสนี้ถูกสร้างขึ้นสำหรับ Arduino Uno โดยใช้คอมไพเลอร์ Arduino

/**********************************************************************************************************************************************************************

ผู้แต่ง: Jonah Powers วันที่: 11/9/2018 วัตถุประสงค์: รหัสควบคุมสำหรับยานพาหนะใต้น้ำที่ควบคุมระยะไกล ****************************** ******************************************************** ******************************************************** ******************************************/ #include // รวม Servo Library Servo roll1; //ประกาศ roll1 เป็นเซอร์โวเซอร์โว roll2; //ประกาศ roll2 เป็นเซอร์โว Servo elev1; //ประกาศ elev1 เป็นเซอร์โว Servo elev2; //ประกาศ elev2 เป็นเซอร์โว Servo yaw1; //ประกาศ yaw1 เป็นเซอร์โว Servo yaw2; //ประกาศ yaw2 เป็นเซอร์โวเซอร์โว esc; //ประกาศ esc เป็นเซอร์โว

int pot1 = 0; // การเริ่มต้นตัวแปร pot1 เป็นจำนวนเต็มและตั้งค่าให้เท่ากับ 0 int pot2 = 1; // การเริ่มต้นตัวแปร pot2 เป็นจำนวนเต็มและตั้งค่าให้เท่ากับ 2 int pot3 = 2; // การเริ่มต้นตัวแปร pot3 เป็นจำนวนเต็มและตั้งค่าให้เท่ากับ 4 int pot4 = 3; //การกำหนดค่าเริ่มต้นตัวแปร pot4 เป็นจำนวนเต็มและตั้งค่าให้เท่ากับ 5 int val1; // การเริ่มต้นตัวแปร val1 เป็นจำนวนเต็ม int val2; // การเริ่มต้นตัวแปร val2 เป็นจำนวนเต็ม int val3; // การเริ่มต้นตัวแปร val3 เป็นจำนวนเต็ม int val4; // การเริ่มต้นตัวแปร val4 เป็นจำนวนเต็ม int val5; // การเริ่มต้นตัวแปร val5 เป็นจำนวนเต็ม int val6; //การเริ่มต้นตัวแปร val6 เป็นจำนวนเต็ม int val7; // การเริ่มต้นตัวแปร val7 เป็นจำนวนเต็ม int val8; // การเริ่มต้นตัวแปร val8 เป็นจำนวนเต็ม int mspeed; //การเริ่มต้นตัวแปร mspeed เป็นจำนวนเต็ม

การตั้งค่าเป็นโมฆะ () {// ขั้นตอนการเริ่มต้น Arduino Serial.begin (9600); //กำลังเริ่มต้นการตรวจสอบแบบอนุกรม roll1.attach(2); //แนบเซอร์โว roll1 เข้ากับขาดิจิตอล 2 roll2.attach(3); //แนบเซอร์โว roll2 กับขาดิจิตอล 3 elev1.attach(5); //แนบเซอร์โว elev1 กับพินดิจิตอล 5 elev2.attach (6); //แนบเซอร์โว elev2 กับพินดิจิตอล 6 yaw1.attach (8) //แนบเซอร์โว yaw1 เข้ากับพินดิจิตอล 8 yaw2.attach(9); //แนบเซอร์โว yaw2 เข้ากับพินดิจิตอล 9 esc.attach(11); //แนบเซอร์โว esc กับขาดิจิตอล 11 roll1.write (90); // เขียนเซอร์โว roll1 ไปยังตำแหน่งกึ่งกลาง roll2.write (90); // เขียนเซอร์โว roll2 ไปยังตำแหน่งกึ่งกลาง elev1.write(90); // การเขียน servo elev1 ไปยังตำแหน่งกึ่งกลาง elev2.write(90); // เขียน servo elev2 ไปยังตำแหน่งกึ่งกลาง yaw1.write(90); // เขียนเซอร์โว yaw1 ไปยังตำแหน่งกึ่งกลาง yaw2.write (90); // การเขียน servo yaw2 ไปยังตำแหน่งกึ่งกลาง esc.write(180); // การเขียน servo esc ไปยังตำแหน่งที่ล่าช้า (2500); //รอ 2 วินาที esc.write (90); ล่าช้า (5000); }

วงเป็นโมฆะ () {// รหัสหลักที่จะวนซ้ำอย่างไม่สิ้นสุดถ้า (analogRead (pot1) <1 && analogRead (pot2) <1 && analogRead (pot3) <1 && analogRead (pot4) = 485 && val1 <= 540) { // ตรวจสอบว่า "จอยสติ๊ก" (โพเทนชิออมิเตอร์) อยู่ตรงกลางหรือไม่ roll1.write(90); // เขียนเซอร์โว roll1 ไปที่ตำแหน่งกึ่งกลาง roll2.write (90); //เขียน servo roll2 ไปที่ตำแหน่งกึ่งกลาง } else { //จะทำอย่างไรถ้า "จอยสติ๊ก" ไม่อยู่ตรงกลาง val1 = map (val1, 0, 1023, 10, 170); //การจับคู่ val1 จาก 10 ถึง 170 และกำหนดให้กับ val1 roll1.write(val1); // การเขียนเซอร์โว roll1 ไปยังตำแหน่งที่กำหนดโดย val1 roll2.write(val1); // การเขียน servo roll2 ไปยังตำแหน่งที่กำหนดโดย val1 }

val2 = analogRead (pot2); // กำลังอ่าน pot2 (อนาล็อกพิน 2) และบันทึกค่าเป็น val2 if(val2>= 485 && val2<= 540){ //ตรวจสอบเพื่อดูว่า "จอยสติ๊ก" (โพเทนชิออมิเตอร์) อยู่กึ่งกลาง elev1.write (90); // กำลังเขียน servo elev1 ไปที่ตำแหน่งกึ่งกลาง elev2.write (90); //เขียน servo elev2 ไปที่ตำแหน่งกึ่งกลาง } else{ //จะทำอย่างไรถ้า "จอยสติ๊ก" ไม่อยู่ตรงกลาง val3 = map (val2, 0, 1023, 10, 170); //การทำแผนที่ val2 จาก 10 ถึง 170 และกำหนดให้กับ val3 val4 = map(val2, 0, 1023, 170, 10); //การจับคู่ val2 จาก 170 ถึง 10 และกำหนดให้กับ val4 elev1.write(val3); // การเขียน servo elev1 ไปยังตำแหน่งที่กำหนดโดย val3 elev2.write(val4); // การเขียน servo elev2 ไปยังตำแหน่งที่กำหนดโดย val4 }

val5 = analogRead (pot3); // กำลังอ่าน pot3 (อนาล็อกพิน 4) และบันทึกค่าเป็น val5 if(val5>= 485 && val5<= 540){ //ตรวจสอบเพื่อดูว่า "จอยสติ๊ก" (โพเทนชิออมิเตอร์) อยู่กึ่งกลาง yaw1.write (90); // เขียนเซอร์โว yaw1 ไปที่ตำแหน่งกึ่งกลาง yaw2.write (90); // เขียนเซอร์โว yaw2 ไปที่ตำแหน่งกึ่งกลาง } อื่น { // จะทำอย่างไรถ้า "จอยสติ๊ก" ไม่อยู่กึ่งกลาง val6 = แผนที่ (val5, 0, 1023, 10, 170); //การจับคู่ val5 จาก 10 ถึง 170 และกำหนดให้กับ val6 val7 = map (val5, 0, 1023, 170, 10); //การจับคู่ val5 จาก 10 ถึง 170 และกำหนดให้กับ val7 yaw1.write(val6); // การเขียน servo yaw1 ไปยังตำแหน่งที่กำหนดโดย val6 yaw2.write (val7); // การเขียน servo yaw2 ไปยังตำแหน่งที่กำหนดโดย val7 }

val8 = analogRead (pot4); // กำลังอ่าน pot4 (อนาล็อกพิน 5) และบันทึกค่าเป็น val8 if(val8 > 470 && val8 80 && val8<80)||(mspeed80)){ //ตรวจสอบเพื่อดูว่ามอเตอร์กำลังจะเปลี่ยนทิศทาง esc.write(80); ล่าช้า (1000); //รอ 1,000 มิลลิวินาที } esc.write (val8) // การเขียน servo esc เป็นความเร็วที่กำหนดโดย val8 mspeed=val8; //จัดเก็บความเร็วปัจจุบันเพื่อเปรียบเทียบ } } Serial.print("throttle "); //ใช้ Serial Print เพื่อแสดงคำว่า "Throttle" Serial.println(val8) //การใช้ Serial Print เพื่อแสดงค่าที่ตั้งค่าคันเร่งเป็น Serial.print("roll "); //ใช้ Serial Print เพื่อแสดงคำว่า "Roll" Serial.println(val1); //การใช้ Serial Print เพื่อแสดงค่าที่ม้วนถูกกำหนดเป็น Serial.print("pitch "); //ใช้ Serial Print เพื่อแสดงคำว่า "Pitch" Serial.println(val3); //ใช้ Serial Print เพื่อแสดงค่าที่ pitch1 ถูกตั้งค่าเป็น Serial.println(val4); //การใช้ Serial Print เพื่อแสดงค่าที่ pitch2 ถูกตั้งค่าเป็น Serial.print("yaw "); //ใช้ Serial Print เพื่อแสดงคำว่า "Yaw" Serial.println(val6); //ใช้ Serial Print เพื่อแสดงค่าที่ตั้งค่า yaw1 เป็น Serial.println(val7); //ใช้ Serial Print เพื่อแสดงค่าที่ตั้งค่า yaw2 เป็น }

ขั้นตอนที่ 3: วงจร

แนบรูปถ่ายของวงจรบนเรือดำน้ำ

ฉันสร้างเกราะป้องกันแบบกำหนดเองสำหรับ Arduino เพื่อทำให้การเดินสายของฉันง่ายขึ้น ฉันได้อัปโหลดไฟล์ Eagle Schematic & Board สำหรับโล่แล้ว ฉันใช้ LPKF S63 เพื่อโม่บอร์ด เซอร์โวที่ด้านหน้าที่ม้วนควบคุมจะถูกเสียบเข้ากับ Arduino

แนบเป็นภาพวงจรภายในคอนโทรลเลอร์

ขั้นตอนที่ 4: ชิ้นส่วนที่พิมพ์ 3 มิติ

ฉันพิมพ์ไฟล์เหล่านี้ทั้งหมดบน Monoprice Maker Select Plus ของฉัน ฉันใช้ Esun ABS 1.75mm Filament การตั้งค่าการพิมพ์ของฉันคือ 105 องศาเซลเซียสสำหรับอุณหภูมิเตียงพิมพ์และ 255 องศาเซลเซียสสำหรับอุณหภูมิเครื่องอัดรีด ต้องการเพียงส่วนละ 1 ส่วนเท่านั้น ยกเว้นว่าคุณจะต้องมีสำเนาปีกหน้า 6 ชุด โปรดทราบว่าชิ้นส่วนเหล่านี้ถูกพิมพ์ด้วยความหนาของผนังที่ตั้งค่าไว้ที่ 1,000 มม. สิ่งนี้ทำเพื่อให้ชิ้นส่วนจะถูกพิมพ์ด้วยการเติม 100% ดังนั้นพวกเขาจะลอยตัวในเชิงลบ

ขั้นตอนที่ 5: การประกอบ

********************************* เร็ว ๆ นี้ *************** *******************

แนะนำ: