สารบัญ:
- ขั้นตอนที่ 1: มันทำงานอย่างไร
- ขั้นตอนที่ 2: รายการวัสดุ (BOM)
- ขั้นตอนที่ 3: การออกแบบเครื่องกล
- ขั้นตอนที่ 4: อิเล็กทรอนิกส์ (ตัวเลือกส่วนประกอบ)
- ขั้นตอนที่ 5: อิเล็กทรอนิกส์ (การเชื่อมต่อ)
- ขั้นตอนที่ 6: การเขียนโปรแกรม
- ขั้นตอนที่ 7: การปรับปรุงที่เป็นไปได้
- ขั้นตอนที่ 8: จำกัดปัจจัย
- ขั้นตอนที่ 9: เครดิต
วีดีโอ: Sorter Bin - ตรวจจับและจัดเรียงถังขยะของคุณ: 9 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
คุณเคยเห็นคนที่ไม่รีไซเคิลหรือทำในทางที่ไม่ดีหรือไม่?
คุณเคยต้องการเครื่องจักรที่จะรีไซเคิลให้คุณหรือไม่?
อ่านโครงการของเราต่อไป คุณจะไม่เสียใจ!
Sorter bin เป็นโครงการที่มีแรงจูงใจที่ชัดเจนในการช่วยรีไซเคิลในโลก ดังที่ทราบกันดีว่า การขาดการรีไซเคิลทำให้เกิดปัญหาร้ายแรงในโลกของเรา เช่น การหายไปของวัตถุดิบและการปนเปื้อนในทะเล เป็นต้น
ด้วยเหตุผลดังกล่าว ทีมงานของเราจึงตัดสินใจพัฒนาโครงการในขนาดเล็ก: ถังขยะคัดแยกที่สามารถแยกขยะออกเป็นผู้รับที่แตกต่างกัน ขึ้นอยู่กับว่าวัสดุนั้นเป็นโลหะหรืออโลหะ ในรุ่นต่อๆ ไป ถังคัดแยกนั้นสามารถประมาณการได้ในระดับใหญ่ ทำให้สามารถแยกขยะออกเป็นวัสดุประเภทต่างๆ ได้ (ไม้ พลาสติก โลหะ อินทรีย์…)
เนื่องจากจุดประสงค์หลักคือการแยกแยะระหว่างโลหะหรืออโลหะ ถังคัดเเยกจะติดตั้งเซ็นเซอร์อุปนัย แต่ยังมีเซ็นเซอร์อัลตราโซนิกเพื่อตรวจจับว่ามีอะไรอยู่ในถังหรือไม่ ยิ่งไปกว่านั้น ถังขยะจะต้องเคลื่อนที่เป็นเส้นตรงเพื่อย้ายขยะไปไว้ในกล่องสองกล่อง ดังนั้นจึงเลือกใช้สเต็ปเปอร์มอเตอร์
ในหัวข้อถัดไป โครงการนี้จะอธิบายทีละขั้นตอน
ขั้นตอนที่ 1: มันทำงานอย่างไร
ถังขยะคัดแยกได้รับการออกแบบมาเพื่อให้งานค่อนข้างง่ายสำหรับผู้ใช้: ขยะจะต้องถูกนำเข้าไปในรูที่วางไว้ในเพลทด้านบน ต้องกดปุ่มสีเหลือง และกระบวนการเริ่มต้น ลงท้ายด้วยขยะเป็นหนึ่งเดียว ของผู้รับ แต่คำถามตอนนี้คือ… กระบวนการทำงานภายในเป็นอย่างไร?
เมื่อกระบวนการเริ่มต้นขึ้นแล้ว ไฟ LED สีเขียวจะติดสว่าง จากนั้นเซ็นเซอร์อัลตราโซนิกที่ติดอยู่กับแผ่นด้านบนผ่านตัวรองรับเริ่มทำงานเพื่อตรวจสอบว่ามีวัตถุอยู่ภายในกล่องหรือไม่
หากไม่มีวัตถุใดๆ อยู่ในกล่อง ไฟ LED สีแดงจะสว่างและไฟสีเขียวจะดับลง ในทางตรงกันข้าม ถ้ามีวัตถุอยู่ เซ็นเซอร์เหนี่ยวนำจะทำงานเพื่อตรวจจับว่าวัตถุนั้นเป็นโลหะหรืออโลหะ เมื่อกำหนดประเภทของวัสดุแล้ว ไฟ LED สีแดงและสีเหลืองจะเปิดขึ้น และกล่องจะเคลื่อนไปยังทิศทางเดียวหรือทิศทางตรงกันข้าม ขึ้นอยู่กับประเภทของวัสดุที่ขับเคลื่อนด้วยสเต็ปเปอร์มอเตอร์
เมื่อกล่องมาถึงจุดสิ้นสุดของจังหวะและวัตถุถูกทิ้งไปยังผู้รับที่ถูกต้อง กล่องจะกลับไปที่ตำแหน่งเริ่มต้น สุดท้าย เมื่อกล่องอยู่ในตำแหน่งเริ่มต้น ไฟ LED สีเหลืองจะดับลง เครื่องคัดเเยกจะพร้อมเริ่มต้นใหม่ด้วยขั้นตอนเดิม กระบวนการที่อธิบายในย่อหน้าสุดท้ายนี้ยังแสดงในรูปภาพของแผนภูมิเวิร์กโฟลว์ที่แนบมาในขั้นตอนที่ 6:การเขียนโปรแกรม
ขั้นตอนที่ 2: รายการวัสดุ (BOM)
ชิ้นส่วนเครื่องกล:
-
ซื้อชิ้นส่วนสำหรับโครงสร้างด้านล่าง
- โครงสร้างเมทัลลิก [Link]
- กล่องสีเทา [Link]
-
เครื่องพิมพ์ 3 มิติ
PLA สำหรับชิ้นส่วนที่พิมพ์ทั้งหมด (สามารถใช้วัสดุอื่นได้ เช่น ABS)
-
เครื่องตัดเลเซอร์
- MDF 3mm
- ลูกแก้ว 4mm
- ชุดตลับลูกปืนเชิงเส้น [Link]
- ลิเนียร์แบริ่ง [Link]
- เพลา [Link]
- ตัวจับเพลา (x2) [Link]
ชิ้นส่วนอิเล็กทรอนิกส์:
-
เครื่องยนต์
ลิเนียร์สเต็ปเปอร์มอเตอร์ Nema 17 [Link]
-
แบตเตอรี่
แบตเตอรี่ 12 v [Link]
-
เซนเซอร์
- 2 เซ็นเซอร์อัลตราโซนิก HC-SR04 [ลิงก์]
- 2 เซ็นเซอร์อุปนัย LJ30A3-15 [Link]
-
ไมโครคอนโทรลเลอร์
1 บอร์ด Arduino UNO
-
ส่วนประกอบเพิ่มเติม
- ไดร์เวอร์ DRV8825
- ไฟ LED 3 ดวง: แดง เขียว และส้ม
- 1 ปุ่ม
- สายกระโดด สายไฟ และแผ่นบัดกรี
- เขียงหั่นขนม
- สาย USB (การเชื่อมต่อ Arduino-PC)
- ตัวเก็บประจุ: 100uF
ขั้นตอนที่ 3: การออกแบบเครื่องกล
ในรูปก่อนหน้านี้แสดงทุกส่วนของการประกอบ
สำหรับการออกแบบเชิงกลนั้น SolidWorks ถูกใช้เป็นโปรแกรม CAD ชิ้นส่วนต่างๆ ของชุดประกอบได้รับการออกแบบโดยคำนึงถึงวิธีการผลิตที่จะผลิตชิ้นส่วนต่างๆ
ชิ้นส่วนตัดด้วยเลเซอร์:
-
MDF 3mm
- เสาหลัก
- จานบน
- รองรับเซ็นเซอร์อัลตราโซนิก
- รองรับเซ็นเซอร์อุปนัย
- ถังขยะ
- รองรับแบตเตอรี่
- รองรับ Breadboard และ Arduino
-
ลูกแก้ว 4mm
แพลตฟอร์ม
ชิ้นส่วนที่พิมพ์ 3 มิติ:
- ฐานเสา
- องค์ประกอบการส่งผ่านการเคลื่อนไหวเชิงเส้นจากสเต็ปเปอร์มอเตอร์
- สเต็ปเปอร์มอเตอร์และตัวรองรับแบริ่ง
- ชิ้นส่วนยึดผนังสำหรับถังขยะ
สำหรับการผลิตชิ้นส่วนเหล่านี้แต่ละส่วน ไฟล์. STEP ควรนำเข้ามาในรูปแบบที่ถูกต้อง ทั้งนี้ขึ้นอยู่กับเครื่องที่จะใช้เพื่อจุดประสงค์นั้น ในกรณีนี้ ไฟล์.dxf ถูกใช้สำหรับเครื่องตัดเลเซอร์และไฟล์.gcode สำหรับเครื่องพิมพ์ 3 มิติ (Ultimaker 2)
การประกอบทางกลของโครงการนี้สามารถพบได้ในไฟล์. STEP ที่แนบมาในส่วนนี้
ขั้นตอนที่ 4: อิเล็กทรอนิกส์ (ตัวเลือกส่วนประกอบ)
ในส่วนนี้ เราจะอธิบายสั้นๆ เกี่ยวกับส่วนประกอบอิเล็กทรอนิกส์ที่ใช้และคำอธิบายเกี่ยวกับตัวเลือกส่วนประกอบ
บอร์ด Arduino UNO (เป็นไมโครคอนโทรลเลอร์):
ฮาร์ดแวร์และซอฟต์แวร์โอเพ่นซอร์ส ราคาถูก ใช้ง่าย เขียนโค้ดง่าย บอร์ดนี้เข้ากันได้กับส่วนประกอบทั้งหมดที่เราใช้ และคุณจะพบบทช่วยสอนและฟอรัมต่างๆ ที่เป็นประโยชน์มากในการเรียนรู้และแก้ปัญหา
มอเตอร์ (ลิเนียร์สเต็ปเปอร์มอเตอร์ Nema 17):
เป็นสเต็ปเปอร์มอเตอร์ประเภทหนึ่งที่แบ่งการหมุนเต็มจำนวนตามจำนวนขั้นที่กำหนด เป็นผลให้มันถูกควบคุมโดยให้จำนวนขั้นตอนที่แน่นอน มีความแข็งแกร่งและแม่นยำ และไม่ต้องการเซ็นเซอร์ใดๆ เพื่อควบคุมตำแหน่งจริง ภารกิจของมอเตอร์คือการควบคุมการเคลื่อนที่ของกล่องที่บรรจุวัตถุที่โยนแล้วหย่อนลงในถังขยะด้านขวา
ในการเลือกรุ่น คุณต้องคำนวณแรงบิดสูงสุดที่ต้องการเพิ่มปัจจัยด้านความปลอดภัย เกี่ยวกับผลลัพธ์ เราซื้อแบบจำลองที่ครอบคลุมค่าที่คำนวณได้เป็นส่วนใหญ่
DRV8825 ไดร์เวอร์:
บอร์ดนี้ใช้เพื่อควบคุมสเต็ปเปอร์มอเตอร์แบบไบโพลาร์ มีการควบคุมกระแสไฟที่ปรับได้ซึ่งช่วยให้คุณตั้งค่าเอาต์พุตกระแสสูงสุดด้วยโพเทนชิออมิเตอร์รวมถึงความละเอียดขั้นตอนที่แตกต่างกันหกแบบ: เต็มขั้นตอน ครึ่งขั้นตอน 1/4 ขั้นตอน 1/8 ขั้นตอน 1/16- และ 1/32 สเต็ป (ในที่สุดเราก็ใช้ฟูลสเต็ปเพราะเราไม่พบว่าจำเป็นต้องทำไมโครสเต็ปปิ้งเลย แต่ก็ยังสามารถใช้เพื่อปรับปรุงคุณภาพของการเคลื่อนไหวได้)
เซ็นเซอร์อัลตราโซนิก:
เหล่านี้เป็นประเภทของเซ็นเซอร์เสียงที่แปลงสัญญาณไฟฟ้าเป็นอัลตราซาวนด์และในทางกลับกัน พวกเขาใช้การตอบสนองของเสียงสะท้อนของสัญญาณอะคูสติกที่ปล่อยออกมาในตอนแรกเพื่อคำนวณระยะทางไปยังวัตถุ เราใช้เพื่อตรวจสอบว่ามีวัตถุอยู่ในกล่องหรือไม่ ใช้งานง่ายและให้การวัดที่แม่นยำ
แม้ว่าผลลัพธ์ของเซ็นเซอร์นี้เป็นค่า (ระยะทาง) โดยการสร้างธรณีประตูเพื่อพิจารณาว่ามีวัตถุอยู่หรือไม่ เราก็แปลง
เซ็นเซอร์อุปนัย:
ตามกฎหมายของฟาราเดย์ จัดอยู่ในหมวดหมู่ของเซ็นเซอร์ความใกล้ชิดอิเล็กทรอนิกส์แบบไม่สัมผัส เราวางไว้ที่ด้านล่างของกล่องเคลื่อนที่ ใต้แท่นลูกแก้วที่รองรับวัตถุ เป้าหมายของพวกเขาคือการแยกความแตกต่างระหว่างวัตถุที่เป็นโลหะและอโลหะที่ให้เอาต์พุตดิจิทัล (0/1)
ไฟ LED (เขียว เหลือง แดง):
ภารกิจของพวกเขาคือการสื่อสารกับผู้ใช้:
-ไฟ LED สีเขียวติด: หุ่นยนต์กำลังรอวัตถุ
- ไฟ LED สีแดงติด: เครื่องกำลังทำงาน คุณไม่สามารถโยนวัตถุใดๆ ได้
- ไฟ LED สีเหลืองติด: ตรวจพบวัตถุ
12V แบตเตอรี่ หรือแหล่งพลังงาน 12V + ไฟ USB 5V:
จำเป็นต้องใช้แหล่งจ่ายแรงดันไฟฟ้าเพื่อจ่ายพลังงานให้กับเซ็นเซอร์และสเต็ปเปอร์มอเตอร์ จำเป็นต้องใช้แหล่งพลังงาน 5V เพื่อจ่ายไฟให้กับ Arduino สามารถทำได้โดยใช้แบตเตอรี่ 12V แต่ควรมีแหล่งจ่ายไฟ 5V แยกต่างหากสำหรับ Arduino (เช่น ด้วยสาย USB และอะแดปเตอร์โทรศัพท์ที่เชื่อมต่อกับแหล่งพลังงานหรือกับคอมพิวเตอร์)
ปัญหาที่เราพบ:
-
การตรวจจับเซ็นเซอร์แบบเหนี่ยวนำ เราไม่ได้รับความแม่นยำตามที่ต้องการ เนื่องจากบางครั้งระบบจะไม่รับรู้ตำแหน่งของวัตถุที่เป็นโลหะที่ไม่ดี ทั้งนี้เนื่องมาจากข้อจำกัด 2 ประการ:
- พื้นที่ที่ครอบคลุมโดยเซ็นเซอร์ภายในแท่นสี่เหลี่ยมมีสัดส่วนน้อยกว่า 50% ของพื้นที่ทั้งหมด (ดังนั้นจึงไม่สามารถตรวจจับวัตถุขนาดเล็กได้) ในการแก้ปัญหานี้ เราขอแนะนำให้ใช้เซ็นเซอร์เหนี่ยวนำ 3 หรือ 4 ตัวเพื่อให้แน่ใจว่าครอบคลุมพื้นที่มากกว่า 70%
- ระยะการตรวจจับของเซ็นเซอร์ถูกจำกัดไว้ที่ 15 มม. ดังนั้นเราจึงถูกบังคับให้ใช้แพลตฟอร์มลูกแก้วชั้นดี นี่อาจเป็นข้อจำกัดอีกประการหนึ่งในการตรวจจับวัตถุที่มีรูปร่างแปลก ๆ
- การตรวจจับด้วยคลื่นเสียงความถี่สูง: อีกครั้ง วัตถุที่มีรูปร่างซับซ้อนทำให้เกิดปัญหา เนื่องจากสัญญาณที่ปล่อยออกมาจากเซ็นเซอร์สะท้อนออกมาอย่างไม่ดีและกลับมาช้ากว่าที่ควรจะเป็นกับเซ็นเซอร์
- แบตเตอรี่: เรามีปัญหาบางอย่างในการควบคุมกระแสไฟที่ส่งมาจากแบตเตอรี่ และเพื่อแก้ปัญหานี้ ในที่สุดเราก็ใช้แหล่งพลังงาน อย่างไรก็ตาม วิธีแก้ปัญหาอื่นๆ เช่น การใช้ไดโอดก็สามารถทำได้
ขั้นตอนที่ 5: อิเล็กทรอนิกส์ (การเชื่อมต่อ)
ส่วนนี้แสดงการเดินสายไฟของส่วนประกอบต่างๆ ที่ประกอบเข้าด้วยกัน นอกจากนี้ยังแสดงให้เห็นว่าพินใดบน Arduino แต่ละองค์ประกอบเชื่อมต่ออยู่
ขั้นตอนที่ 6: การเขียนโปรแกรม
ส่วนนี้จะอธิบายตรรกะการเขียนโปรแกรมที่อยู่เบื้องหลังเครื่อง Bin Sorting
โปรแกรมแบ่งออกเป็น 4 ขั้นตอน ได้แก่
- เริ่มต้นระบบ
- ตรวจสอบการมีอยู่ของวัตถุ
- ตรวจสอบประเภทของวัตถุที่มีอยู่
- ย้ายกล่อง
สำหรับคำอธิบายโดยละเอียดของแต่ละขั้นตอน ดูด้านล่าง:
ขั้นตอนที่ 1 เริ่มต้นระบบ
แผงไฟ LED (3) - ตั้งค่า LED ปรับเทียบ (สีแดง) สูง LED พร้อม (สีเขียว) ต่ำ มีวัตถุอยู่ (สีเหลือง) ต่ำ
ตรวจสอบสเต็ปเปอร์มอเตอร์อยู่ที่ตำแหน่งเริ่มต้น
-
เรียกใช้การทดสอบเซ็นเซอร์อัลตราโซนิกเพื่อวัดระยะห่างจากด้านหนึ่งไปยังอีกด้านของผนังกล่อง
- ตำแหน่งเริ่มต้น == 0 >> อัปเดตค่าของ Ready LED HIGH และ Calibrating LED LOW -> ขั้นตอนที่ 2
-
ตำแหน่งเริ่มต้น != 0 >> ค่าการอ่านแบบดิจิตอลของเซ็นเซอร์อัลตราโซนิกและขึ้นอยู่กับค่าของเซ็นเซอร์:
- อัพเดทค่าไฟ LED เคลื่อนที่ของมอเตอร์สูง
- เรียกใช้กล่องย้ายจนกว่าค่าของเซ็นเซอร์อัลตราโซนิกทั้งสองจะ <ค่าเกณฑ์
อัปเดตค่าตำแหน่งเริ่มต้น = 1 >> อัปเดตค่า LED Ready HIGH และมอเตอร์เคลื่อนที่ LOW และ Calibrating LOW >> ขั้นตอนที่ 2
ขั้นตอนที่ 2
ตรวจสอบการมีอยู่ของวัตถุ
เรียกใช้การตรวจจับวัตถุอัลตราโซนิก
- วัตถุปัจจุบัน == 1 >> อัปเดตค่าของวัตถุปัจจุบัน LED HIGH >> ขั้นตอนที่ 3
- วัตถุที่มีอยู่ == 0 >> ไม่ต้องทำอะไร
ขั้นตอนที่ 3
ตรวจสอบประเภทของวัตถุที่มีอยู่
เรียกใช้การตรวจจับเซ็นเซอร์อุปนัย
- inductiveState = 1 >> ขั้นตอนที่ 4
- inductiveState = 0 >> ขั้นตอนที่ 4
ขั้นตอนที่ 4
ย้ายกล่อง
เรียกใช้การทำงานของมอเตอร์
-
inductiveState == 1
อัปเดตไฟ LED เคลื่อนที่สูง >> เลื่อนมอเตอร์ไปทางซ้าย (อัปเดตตำแหน่งเริ่มต้น = 0) หน่วงเวลาแล้วถอยกลับทางขวา >> ขั้นตอนที่ 1
-
inductiveState == 0
อัปเดตไฟ LED เคลื่อนที่สูง >> ให้มอเตอร์เคลื่อนที่ไปทางขวา (อัปเดตตำแหน่งเริ่มต้น = 0) หน่วงเวลาแล้วเลื่อนกลับซ้าย >> ขั้นตอนที่ 1
ฟังก์ชั่น
ดังที่เห็นได้จากตรรกะในการเขียนโปรแกรม โปรแกรมทำงานโดยเรียกใช้ฟังก์ชันโดยมีเป้าหมายเฉพาะ ตัวอย่างเช่น ขั้นตอนแรกคือการเริ่มต้นระบบซึ่งมีฟังก์ชัน "ตรวจสอบสเต็ปเปอร์มอเตอร์อยู่ที่ตำแหน่งเริ่มต้น" ขั้นตอนที่สอง จากนั้นตรวจสอบการมีอยู่ของวัตถุซึ่งในตัวมันเองเป็นฟังก์ชันอื่น (ฟังก์ชัน "การตรวจจับวัตถุด้วยคลื่นเสียงความถี่สูง") เป็นต้น.
หลังจากขั้นตอนที่ 4 โปรแกรมได้ดำเนินการอย่างสมบูรณ์และจะเปลี่ยนกลับเป็นขั้นตอนที่ 1 ก่อนที่จะรันอีกครั้ง
ฟังก์ชันที่ใช้ในเนื้อหาหลักมีการกำหนดไว้ด้านล่าง
ตามลำดับ:
- การทดสอบอุปนัย ()
- moveBox (สถานะอุปนัย)
- UltrasonicObjectDetection()
// ตรวจสอบว่าวัตถุเป็นโลหะหรือไม่
bool inductiveTest () { if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) { คืนค่าจริง; อื่น { กลับเท็จ; } } โมฆะ moveBox (bool inductiveState) { // กล่องไปทางซ้ายเมื่อตรวจพบโลหะและ inductiveState = จริงถ้า (inductiveState == 0) { stepper.moveTo (ขั้นตอน); // สุ่มตำแหน่งเพื่อสิ้นสุดการทดสอบ stepper.runToPosition(); ล่าช้า (1000); stepper.moveTo(0); stepper.runToPosition(); ล่าช้า (1000); } else if (inductiveState == 1) { stepper.moveTo(-steps); // สุ่มตำแหน่งเพื่อสิ้นสุดการทดสอบ stepper.runToPosition(); ล่าช้า (1000); stepper.moveTo(0); // สุ่มตำแหน่งเพื่อสิ้นสุดการทดสอบ stepper.runToPosition(); ล่าช้า (1000); } } UltrasonicObjectDetection บูลีน () { duration1, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // กำหนดจำนวนการวัดที่จะใช้ทางไกล สูงสุด = 0; ทางไกล Min = 4000; ทางไกลรวม = 0; สำหรับ (int i = 0; i distanceMax) { distanceMax = distanceTemp; } ถ้า (distanceTemp < distanceMin) { distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("เซนเซอร์1 maxDistance "); Serial.print (ระยะทางสูงสุด); Serial.println("มม."); Serial.print ("เซนเซอร์1 minDistance "); Serial.print (ระยะทางต่ำสุด); Serial.println("มม."); // ใช้ระยะทางเฉลี่ยจากการอ่านค่า AverageDistance1 = distanceTotal/10; Serial.print ("เซนเซอร์1 averageDistance1 "); Serial.print (averageDistance1); Serial.println("มม."); // ลบค่าการวัดสูงสุดและต่ำสุดเพื่อหลีกเลี่ยงการอ่านค่าที่ผิดพลาด averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); AverageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("เซนเซอร์1 averageDistanceOlympian1 "); Serial.print (averageDistanceOlympian1); Serial.println("มม.");
// รีเซ็ตค่าอุณหภูมิ
ระยะทางรวม = 0; ระยะทางสูงสุด = 0; ระยะทางขั้นต่ำ = 4000; ระยะเวลานาน2, ระยะทาง2, ระยะทางเฉลี่ย2, ระยะทางเฉลี่ยOlympian2; // กำหนดจำนวนการวัดที่จะใช้ (int i = 0; i distanceMax) { distanceMax = distanceTemp; } ถ้า (distanceTemp < distanceMin) { distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("เซนเซอร์2 maxDistance "); Serial.print (ระยะทางสูงสุด); Serial.println("มม."); Serial.print ("เซนเซอร์2 minDistance "); Serial.print (ระยะทางต่ำสุด); Serial.println("มม."); // ใช้ระยะทางเฉลี่ยจากการอ่านค่า AverageDistance2 = distanceTotal/10; Serial.print ("เซนเซอร์2 averageDistance2 "); Serial.print (averageDistance2); Serial.println("มม."); // ลบค่าการวัดสูงสุดและต่ำสุดเพื่อหลีกเลี่ยงการอ่านค่าที่ผิดพลาด averageDistanceTemp = distanceTotal - (distanceMax+distanceMin); AverageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("เซนเซอร์2 averageDistanceOlympian2 "); Serial.print (averageDistanceOlympian2); Serial.println("มม."); // รีเซ็ตค่าอุณหภูมิ distanceTotal = 0; ระยะทางสูงสุด = 0; ระยะทางขั้นต่ำ = 4000; ถ้า (averageDistanceOlympian1 + averageDistanceOlympian2 < emptyBoxDistance) { คืนค่าจริง; } อื่น ๆ { คืนค่าเท็จ; } }
ตัวหลัก
เนื้อหาหลักมีตรรกะเดียวกันกับที่อธิบายไว้ที่ด้านบนของส่วนนี้ แต่เขียนด้วยโค้ด ไฟล์มีให้ดาวน์โหลดด้านล่าง
คำเตือน
มีการทดสอบหลายอย่างเพื่อค้นหาค่าคงที่: emptyBoxDistance, steps และ Maximumspeed และการเร่งความเร็วในการตั้งค่า
ขั้นตอนที่ 7: การปรับปรุงที่เป็นไปได้
- เราต้องการความคิดเห็นเกี่ยวกับตำแหน่งของกล่องเพื่อให้แน่ใจว่าอยู่ในตำแหน่งที่ถูกต้องเสมอในการเลือกวัตถุในตอนเริ่มต้น มีตัวเลือกต่างๆ มากมายในการแก้ปัญหา แต่วิธีง่ายๆ ก็คือการคัดลอกระบบที่เราพบในเครื่องพิมพ์ 3 มิติโดยใช้สวิตช์ที่ปลายด้านหนึ่งของเส้นทางของกล่อง
-เนื่องจากปัญหาที่เราพบกับการตรวจจับด้วยคลื่นเสียงความถี่สูง เราสามารถมองหาทางเลือกอื่นสำหรับฟังก์ชันนั้น: KY-008 Laser and Laser Detector (ภาพ) เซ็นเซอร์ capacitive
ขั้นตอนที่ 8: จำกัดปัจจัย
โครงการนี้ทำงานตามที่อธิบายไว้ในคำแนะนำ แต่ต้องใช้ความระมัดระวังเป็นพิเศษในระหว่างขั้นตอนต่อไปนี้:
การสอบเทียบอัลตราโซนิกเซนเซอร์
มุมที่วางเซ็นเซอร์อัลตราโซนิกสัมพันธ์กับวัตถุที่ต้องตรวจจับมีความสำคัญอย่างยิ่งต่อการทำงานที่ถูกต้องของต้นแบบ สำหรับโครงการนี้ เลือกมุม 12.5 °จากมุมปกติสำหรับการวางแนวของเซ็นเซอร์อัลตราโซนิก แต่มุมที่ดีที่สุดควรถูกกำหนดโดยการทดลองโดยบันทึกการอ่านระยะทางโดยใช้วัตถุต่างๆ
แหล่งพลังงาน
กำลังที่ต้องการสำหรับไดรเวอร์สเต็ปเปอร์มอเตอร์ DRV8825 คือ 12V และระหว่าง 0.2 ถึง 1 แอมป์ Arduino ยังสามารถใช้พลังงานสูงสุด 12V และ 0.2 แอมป์โดยใช้แจ็คอินพุตบน Arduino ต้องใช้ความระมัดระวังเป็นพิเศษ อย่างไรก็ตาม หากใช้แหล่งพลังงานเดียวกันสำหรับทั้ง Arduino และไดรเวอร์สเต็ปเปอร์มอเตอร์ หากใช้พลังงานจากเต้ารับไฟฟ้าทั่วไป เช่น อะแดปเตอร์จ่ายไฟแบบอะแดปเตอร์ AC/DC 12V/2A ควรมีตัวควบคุมแรงดันไฟฟ้าและไดโอดในวงจรก่อนที่ไฟจะถูกส่งไปยังไดรเวอร์ Arduino และสเต็ปเปอร์มอเตอร์
กลับบ้านกล่อง
แม้ว่าโครงการนี้จะใช้สเต็ปเปอร์มอเตอร์ซึ่งภายใต้สภาวะปกติจะกลับสู่ตำแหน่งเริ่มต้นด้วยความแม่นยำสูง แต่ก็ควรมีกลไกกลับบ้านในกรณีที่เกิดข้อผิดพลาดขึ้น โปรเจ็กต์นี้ไม่มีกลไกกลับบ้าน แต่มันค่อนข้างง่ายที่จะนำไปใช้ สำหรับสิ่งนี้ ควรเพิ่มสวิตช์เชิงกลที่ตำแหน่งเริ่มต้นของกล่อง เพื่อที่ว่าเมื่อกล่องกระทบกับสวิตช์ มันจะรู้ว่าอยู่ที่ตำแหน่งเริ่มต้น
ไดรเวอร์ Stepper DRV8825 Tuning
ไดรเวอร์สเต็ปเปอร์ต้องการการปรับแต่งเพื่อทำงานกับสเต็ปเปอร์มอเตอร์ สิ่งนี้ทำโดยการทดลองโดยการหมุนโพเทนชิออมิเตอร์ (สกรู) บนชิป DRV8825 เพื่อให้กระแสไฟที่เหมาะสมถูกส่งไปยังมอเตอร์ ดังนั้นให้หมุนสกรูโพเทนชิออมิเตอร์เล็กน้อยจนกว่ามอเตอร์จะทำงานในลักษณะยัน
ขั้นตอนที่ 9: เครดิต
โครงการนี้ทำขึ้นโดยเป็นส่วนหนึ่งของหลักสูตรเมคคาทรอนิกส์ระหว่างปีการศึกษา 2018-2019 สำหรับ Bruface Master ที่ Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB)
ผู้เขียนคือ:
Maxime Decleire
ลิเดีย โกเมซ
Markus Poder
Adriana Puentes
Narjisse Snoussi
ขอขอบคุณเป็นพิเศษกับหัวหน้างานของเรา Albert de Beir ที่ช่วยเราตลอดโครงการเช่นกัน
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
ถังขยะ E Bin: 10 ขั้นตอน (พร้อมรูปภาพ)
Wheel E Bin: กล่องวาง Wheelie Bin ที่ปลอดภัยที่เปิดใช้งานอินเทอร์เน็ต คุณสมบัติ Wheelie Bin ถูกยึดกับผนังด้วยแคลมป์ที่ล็อคได้ พัสดุถูกซ่อนจากมุมมองด้วยแผ่นปิดที่ล็อคได้ ปลดล็อคแบบอิเล็กทรอนิกส์ผ่านปุ่มกดเรืองแสง สัญญาณไฟ PIR สำหรับการส่งในเวลากลางคืน
PhantomX Pincher Robot - Apple Sorter: 6 ขั้นตอน
PhantomX Pincher Robot - Apple Sorter: ข้อกำหนดด้านความปลอดภัยสำหรับอาหารกำลังเพิ่มขึ้น ทั้งผู้บริโภคและทางการต่างเรียกร้องมากขึ้นเรื่อยๆ ว่าอาหารที่เรารับประทานควรมีคุณภาพสูงและมีความปลอดภัยสูง หากเกิดปัญหาระหว่างการผลิตอาหาร ที่มาของความผิดพลาดเ
Card Sorter สำหรับเครื่องการ์ดสะสม (อัพเดท 2019-01-10): 12 ขั้นตอน (พร้อมรูปภาพ)
Card Sorter for Trading Card Machine (อัปเดต 2019-01-10): Card Sorter สำหรับ Trading Card MachineThe Change Log สามารถพบได้ในขั้นตอนสุดท้าย พื้นหลังฉันได้อธิบายแรงจูงใจของโครงการของฉันแล้วในบทความ Card Feeder แต่ในระยะสั้น ลูกๆ ของฉันและฉันได้สะสมการ์ดสะสมเป็นจำนวนมาก
Arduino Skittle Sorter: 11 ขั้นตอน (พร้อมรูปภาพ)
Arduino Skittle Sorter: ผู้ชื่นชอบขนมจู้จี้จุกจิกทุกที่มักพบว่าตัวเองเสียเวลาอันมีค่าไปกับการคัดแยกขนมของพวกเขา ฟังดูคุ้นเคยไหม? คุณเคยต้องการสร้างเครื่องจักรที่สามารถจัดเรียง Skittles ให้คุณหรือไม่? คำแนะนำนี้จะแสดงให้คุณเห็นว่า h