ในโลกทุกวันที่นิยมมากขึ้นในหมู่หุ่นยนต์ทำความสะอาด ต้องขอบคุณผู้ช่วยขนาดเล็กเช่นนี้บ้านจึงสะอาดกว่าและทำความสะอาดน้อยลง มีการดัดแปลงหุ่นยนต์ที่แตกต่างกันมากมายพวกเขาต่างกันในการทำงานขนาดและพารามิเตอร์อื่น ๆ
บทความนี้จะพิจารณาตัวอย่างว่าอย่างไร
ทำมันเอง คุณสามารถสร้างหุ่นยนต์แบบง่าย ๆ ซึ่งตัวมันเองจะดูดห้องเมื่อจำเป็น คอนโทรลเลอร์ใช้ที่นี่เป็น "สมอง"
Arduino.
วัสดุและเครื่องมือสำหรับการผลิตหุ่นยนต์:- บอร์ดที่ควบคุมการทำงานของเครื่องยนต์ (Arduino motor shield)
- บอร์ด Arduino
- มอเตอร์สองตัวที่มีเกียร์ (มอเตอร์ที่ 3 โวลต์และความเร็วในการหมุนประมาณ 100 รอบต่อนาที)
- ล้อ (สามารถทำจากกระป๋องอลูมิเนียม
- ตัวระบายความร้อนจากแหล่งจ่ายไฟของคอมพิวเตอร์ (เป็นไปได้ทั้งบน 5V และ 12V)
- แหล่งจ่ายไฟ 5V (แบตเตอรี่);
- สายไฟและแผ่นสำหรับติดตั้งองค์ประกอบวิทยุ
- ในการสร้างเคสคุณจะต้องใช้ภาชนะพลาสติก
- อีกภาชนะเล็ก ๆ สำหรับสร้างถังขยะ
- กาวร้อน
- แม่เหล็ก
- กระดาษแข็ง
กระบวนการผลิตของหุ่นยนต์:
ขั้นตอนแรก ส่วนซอฟต์แวร์ของหุ่นยนต์และแบบร่าง:
หัวใจของหุ่นยนต์คือคอนโทรลเลอร์ Arduino ในการตั้งโปรแกรมคุณจะต้องใช้คอมพิวเตอร์และซอฟต์แวร์พิเศษ
ในการดาวน์โหลดภาพร่างไปยังบอร์ดคุณจะต้องใช้โปรแกรม Arduino IDE ด้านล่างคุณสามารถใช้รหัสโปรแกรมของหุ่นยนต์และดูวงจรหลัก
/*
โปรแกรมสำหรับควบคุมหุ่นยนต์ด้วยมอเตอร์สองตัว
หุ่นยนต์จะหมุนเมื่อมอเตอร์เปลี่ยนความเร็วและทิศทาง
กันชนหน้าทางซ้ายและขวาตรวจจับสิ่งกีดขวาง
อัลตราโซนิกโซนาร์สามารถเชื่อมต่อกับอินพุตอะนาล็อก (ทดสอบกับ LV-MaxSonar-EZ1):
- ใส่พินในอาร์เรย์ sonarPins ตามลำดับต่อไปนี้: ซ้าย, ขวา, ด้านหน้า, อื่น ๆ ..
ตัวอย่าง:
1. เฉพาะ sonars ซ้ายและขวาที่เชื่อมต่อกับหมุด 2 และ 3: sonarPins [] = {2,3}
2. โซนาร์ด้านซ้ายขวาและด้านหน้าเชื่อมต่อกับหมุด 2, 3 และ 5: sonarPins [] = {2,3,5}
3. เฉพาะโซนาร์ด้านหน้าที่เชื่อมต่อกับขา 5: sonarPins [] = {-1, -1.5}
4. เหลือโซนาร์เท่านั้นที่เชื่อมต่อกับพิน 2: sonarPins [] = {2}
5. โซนาร์ด้านขวาเท่านั้นที่เชื่อมต่อกับหมุด 3: sonarPins [] = {-1,3}
6.5 sonars เชื่อมต่อกับพิน 1,2,3,4,5: sonarPins [] = {1,2,3,4,5}
โล่มอเตอร์ใช้ในการเรียกใช้มอเตอร์
*/
const int Baud = 9600; // ความเร็วพอร์ต UART
// คุณสมบัติ Sonar
int sonarPins [] = {1, 2}; // สัญญาณอนาล็อกพินไปยังเซ็นเซอร์โซนาร์พิน AN
const ยาว MinLeftDistance = 20; // ระยะทางขั้นต่ำที่อนุญาต
const ยาว MinRightDistance = 20; // ระยะทางขั้นต่ำที่อนุญาต
const ยาว MinFrontDistance = 15; // ระยะทางด้านหน้าต่ำสุดที่อนุญาต
const int SamplesAmount = 15; // ตัวอย่างเพิ่มเติม - การวัดที่ราบรื่นยิ่งขึ้นและความล่าช้าที่ใหญ่กว่า
const int SonarDisplayFrequency = 10; // แสดงเพียงหนึ่งในบรรทัดเหล่านี้ - ไม่ใช่ทั้งหมด
int sonarDisplayFrequencyCount = 0;
const long factor = 2.54 / 2;
ตัวอย่างยาว [sizeof (sonarPins)] [SamplesAmount];
int sampleIndex [sizeof (sonarPins)];
// ด้านขวา
const int pinRightMotorDirection = 4; // สามารถทำเครื่องหมายบนตัวป้องกันมอเตอร์เป็น "DIR A"
const int pinRightMotorSpeed = 3; // สามารถทำเครื่องหมายบนตัวป้องกันมอเตอร์เป็น "PWM A"
const int pinRightBumper = 2; // ตำแหน่งที่กันชนด้านขวาเชื่อมต่อ
// ด้านซ้าย
const int pinLeftMotorDirection = 7; // สามารถทำเครื่องหมายบนตัวป้องกันมอเตอร์เป็น "DIR B"
const int pinLeftMotorSpeed = 6; // สามารถทำเครื่องหมายบนตัวป้องกันมอเตอร์เป็น "PWM B"
const int pinLeftBumper = 8; // ตำแหน่งที่กันชนด้านขวาเชื่อมต่อ
// uncomment 2 บรรทัดถัดไปถ้า Motor Shield มีตัวแบ่ง
// const int pinRightMotorBreak = PUT_BREAK_PIN_HERE; // สามารถทำเครื่องหมายบนตัวป้องกันมอเตอร์เป็น "BREAKE A"
// const int pinLeftMotorBreak = PUT_BREAK_PIN_HERE; // สามารถทำเครื่องหมายบนตัวป้องกันมอเตอร์เป็น "BREAKE B"
// สาขา
const int turnRightTimeout = 100;
const int turnLeftTimeout = 150;
// ตั้งตัวนับระยะเวลาที่มอเตอร์ทำงาน: N / 10 (เป็นมิลลิวินาที)
int countDownWhileMovingToRight;
int countDownWhileMovingToLeft;
// การเริ่มต้น
การตั้งค่าเป็นโมฆะ () {
Serial.begin (Baud);
initPins ();
// uncomment 4 บรรทัดถัดไปถ้า Motor Shield มีตัวแบ่ง
// pinMode (pinLeftMotorBreak, OUTPUT);
// pinMode (pinRightMotorBreak, OUTPUT);
// digitalWrite (pinLeftMotorBreak, LOW); // ปิดตัวแบ่ง
// digitalWrite (pinRightMotorBreak, LOW); // ปิดตัวแบ่ง
runRightMotorForward ();
runLeftMotorForward ();
startMotors ();
}
// Main loop
void loop () {
VerifyAndSetRightSide ();
VerifyAndSetLeftSide ();
processRightSide ();
processLeftSide ();
ดีเลย์ (10); // ทำซ้ำทุกๆ 10 มิลลิวินาที
}
//---------------------------------------------------
โมฆะ initPins () {
pinMode (pinRightMotorDirection, OUTPUT);
pinMode (pinRightMotorSpeed, OUTPUT);
pinMode (pinRightBumper, INPUT);
pinMode (pinLeftMotorDirection, OUTPUT);
pinMode (pinLeftMotorSpeed, OUTPUT);
pinMode (pinLeftBumper, INPUT);
สำหรับ (int i = 0; i pinMode (sonarPins [i], INPUT);
}
โมฆะ startMotors () {
setMotorSpeed (pinRightMotorSpeed, 255);
setMotorSpeed (pinLeftMotorSpeed, 255);
}
เป็นโมฆะ waitWhileAnyBumperIsPressed () {
ในขณะที่ (checkBumperIsNotPressed (pinRightBumper)
&& checkBumperIsNotPressed (pinLeftBumper)) {
หน่วงเวลา (20); // ตรวจสอบทุก ๆ 20 มิลลิวินาที
}
}
เป็นโมฆะ processRightSide () {
ถ้า (countDownWhileMovingToRight MinFrontDistance) // ตรวจสอบว่าระยะทางด้านหน้าขั้นต่ำที่อนุญาตนั้นไม่ถึง
กลับ;
if (checkCounterIsNotSet (countDownWhileMovingToLeft)) // ถ้าตัวนับยังไม่นับ
runLeftMotorBackward (); // ใช้มอเตอร์ทางขวาถอยหลัง
countDownWhileMovingToLeft = turnLeftTimeout; // ตั้งค่าตัวนับเป็นค่าสูงสุดเพื่อเริ่มนับถอยหลัง
}
บูล checkCounterIsNotSet (ตัวนับ int) {
return counter = SamplesAmount)
sampleIndex [pinIndex] = 0;
ตัวอย่าง [pinIndex] [sampleIndex [pinIndex]] = ค่า;
กลับจริง
}
การคำนวณระยะยาวระยะห่าง (int pinIndex) {
ค่าเฉลี่ยยาว = 0;
สำหรับ (int i = 0; i ค่าเฉลี่ย + = ตัวอย่าง [pinIndex] [i];
ผลตอบแทนเฉลี่ย / SamplesAmount;
}
ขั้นตอนที่สอง การเตรียมองค์ประกอบพื้นฐานของหุ่นยนต์
กระดาษแข็งถูกใช้เป็นฐานสำหรับยึดส่วนประกอบทั้งหมดของหุ่นยนต์รวมถึงแบตเตอรี่แผงควบคุมและมอเตอร์
กังหันจะต้องติดกาวอย่างเหมาะสมหรือติดตั้งบนภาชนะพลาสติกขนาดเล็กซึ่งต้องมีรูเพื่อดูดซับสิ่งสกปรก ต่อจากนั้นการออกแบบนี้ถูกจับไปที่ฐานกระดาษแข็ง นอกจากนี้ภาชนะจะต้องมีรูเพิ่มเติมที่อากาศจะออก ควรมีตัวกรองผู้เขียนตัดสินใจใช้ผ้าใยสังเคราะห์เพื่อจุดประสงค์เหล่านี้
ในขั้นตอนต่อไปเครื่องทำความเย็นจะต้องติดตั้งเซอร์โวและจากนั้นจึงติดตั้งการออกแบบนี้บนฐานกระดาษแข็ง
ขั้นตอนที่สาม เราสร้างล้อสำหรับหุ่นยนต์
เพื่อให้ล้อคุณจำเป็นต้องใช้กระป๋องอลูมิเนียมและตัดส่วนบนและล่างออกจากพวกเขา จากนั้นองค์ประกอบเหล่านี้จะติดกัน ตอนนี้เหลือเพียงการติดล้อกับเซอร์โวเทอร์ด้วยกาวร้อนละลายอย่างถูกต้องเท่านั้น สิ่งสำคัญคือต้องเข้าใจว่าล้อต้องได้รับการแก้ไขอย่างชัดเจนในศูนย์กลางของเพลาของเซอร์โว มิฉะนั้น หุ่นยนต์ จะขับคดเคี้ยวและใช้พลังงานมากขึ้น
ขั้นตอนที่สี่ กระบวนการประกอบหุ่นยนต์ขั้นสุดท้าย
หลังจากติดตั้งแบตเตอรี่และเชื่อมต่อส่วนประกอบทั้งหมดของหุ่นยนต์แล้วยังคงวางโครงสร้างในเคสที่ทนทาน ภาชนะพลาสติกขนาดใหญ่เหมาะสำหรับวัตถุประสงค์เหล่านี้ ก่อนอื่นต้องทำรูที่จมูกของหุ่นยนต์ซึ่งจะมีหน้าสัมผัสที่จะส่งสัญญาณออกมา อิเล็กทรอนิกส์ เมื่อหุ่นยนต์ชนกับสิ่งกีดขวาง
เพื่อให้กรณีถูกลบออกอย่างรวดเร็วและง่ายดายแม่เหล็กจะถูกใช้เพื่อแก้ไขในกรณีนี้มีแปดตัว แม่เหล็กถูกจับที่ด้านในของเครื่องดูดฝุ่นและไปที่ตัวตู้แต่ละชิ้น 4 ชิ้น
นั่นคือทั้งหมดที่ ตอนนี้หุ่นยนต์ถูกประกอบและสามารถทดลองได้ แม้จะมีความจริงที่ว่าหุ่นยนต์ไม่สามารถชาร์จเองได้และมีความสามารถค่อนข้าง จำกัด ในการนำทางในครึ่งชั่วโมงมันจะสามารถล้างขยะในห้องครัวหรือห้องเล็ก ๆ ได้ ข้อดีของหุ่นยนต์คือส่วนประกอบทั้งหมดสามารถหาได้ง่ายและไม่แพงมาก ไม่ต้องสงสัยเลย ทำที่บ้าน คุณสามารถปรับแต่งได้โดยการเพิ่มเซ็นเซอร์ใหม่และองค์ประกอบอื่น ๆ