DIY Smart Vacuum Cleaning Robot ใช้ Arduino
ARDUINO
สวัสดีคุณเป็นมือใหม่ของโลกหุ่นยนต์หรืออิเล็กทรอนิกส์หรือไม่? หรือคุณกำลังมองหาโครงการที่เรียบง่าย แต่ทรงพลังเพื่อทำให้เพื่อน ๆ และครูของคุณประทับใจ? แล้วนี่คือสถานที่
ในโครงการนี้เราจะใช้พลังของระบบสมองกลฝังตัวและอิเล็คทรอนิคส์เพื่อสร้างหุ่นของเราเองซึ่งจะช่วยให้เรารักษาที่บ้านหรือที่ทำงานได้อย่างเป็นระเบียบเรียบร้อย หุ่นยนต์ตัวนี้เป็นเครื่องดูดฝุ่นแบบสี่ล้อซึ่งสามารถหลีกเลี่ยงอุปสรรคและสูญญากาศพื้นได้อย่างชาญฉลาดในเวลาเดียวกัน แนวคิดนี้สร้างแรงบันดาลใจจากเครื่องดูดฝุ่นชื่อดังจากRobot Roombaซึ่งแสดงในภาพด้านล่าง
ความคิดของเราคือการทำให้หุ่นยนต์แบบง่ายๆจากรอยขีดข่วนซึ่งสามารถหลีกเลี่ยงอุปสรรคในขณะที่ทำความสะอาดพื้นได้โดยอัตโนมัติ เชื่อฉันคนมันสนุก !!
วัสดุและส่วนประกอบที่จำเป็น:
เอาล่ะตอนนี้เรามีไอเดียของหุ่นยนต์เครื่องดูดฝุ่นอัตโนมัติของเราอยู่ในใจและเรารู้ว่าเรามีอะไรบ้าง ลองดูว่าเราควรจะเริ่มดำเนินการที่ไหน เพื่อที่จะสร้างหุ่นยนต์ของความคิดของเราก่อนอื่นเราจะต้องตัดสินใจเกี่ยวกับต่อไปนี้:
- ชนิดของไมโครคอนโทรลเลอร์
- จำเป็นต้องใช้เซนเซอร์
- ต้องใช้มอเตอร์
- วัสดุตัวถังหุ่นยนต์
- ความจุแบตเตอรี่
ตอนนี้ให้เราตัดสินใจในแต่ละจุดที่กล่าวมาข้างต้น วิธีนี้จะเป็นประโยชน์สำหรับคุณไม่เพียง แต่สร้างหุ่นยนต์ทำความสะอาดบ้านนี้ แต่ยังมีหุ่นยนต์อื่น ๆ ซึ่งกระทบกับจินตนาการของคุณ
ประเภทไมโครคอนโทรลเลอร์:
การเลือกไมโครคอนโทรลเลอร์เป็นสิ่งที่สำคัญมากเนื่องจากตัวควบคุมนี้จะทำหน้าที่เป็นสมองของหุ่นยนต์ของคุณ โครงการ DIY ส่วนใหญ่ทำขึ้นรอบ ๆArduinoและRaspberry Piแต่ก็ไม่จำเป็นต้องเหมือนกัน ไม่มี Microcontroller เฉพาะที่คุณสามารถทำงานได้ ทุกอย่างขึ้นอยู่กับความต้องการและค่าใช้จ่าย
เช่นแท็บเล็ตไม่สามารถออกแบบบนไมโครคอนโทรลเลอร์ 8 บิตและไม่มีค่าใช้ ARM cortex m4 ในการออกแบบเครื่องคิดเลขอิเล็กทรอนิกส์
เช่นแท็บเล็ตไม่สามารถออกแบบบนไมโครคอนโทรลเลอร์ 8 บิตและไม่มีค่าใช้ ARM cortex m4 ในการออกแบบเครื่องคิดเลขอิเล็กทรอนิกส์
การเลือกใช้ไมโครคอนโทรลเลอร์ขึ้นอยู่กับความต้องการของผลิตภัณฑ์:
1. ความต้องการด้านเทคนิคขั้นแรกจะระบุเช่นจำนวนขา I / O ที่ต้องการขนาดแฟลชจำนวน / ชนิดของโปรโตคอลการสื่อสารคุณลักษณะพิเศษใด ๆ เป็นต้น
2. จากนั้นรายการตัวควบคุมจะถูกเลือกตามข้อกำหนดทางเทคนิค รายการนี้ประกอบด้วยตัวควบคุมจากผู้ผลิตที่แตกต่างกัน ตัวควบคุมเฉพาะแอ็พพลิเคชันจำนวนมากมีอยู่
3. จากนั้นตัวควบคุมจะสรุปตามต้นทุนค่าใช้จ่ายความพร้อมใช้งานและการสนับสนุนจากผู้ผลิต
ถ้าคุณไม่ต้องการที่จะทำมากยกหนักและเพียงต้องการที่จะเรียนรู้พื้นฐานของไมโครคอนโทรลเลอร์และจากนั้นได้รับลึกเข้าไปในนั้นแล้วคุณสามารถเลือก Arduino ในโครงการนี้เราจะใช้Arduino ก่อนหน้านี้เราได้สร้างหุ่นยนต์หลายประเภทโดยใช้ Arduino :
- หุ่นยนต์ควบคุม DTMF โดยใช้ Arduino
- หุ่นยนต์ Line Follower ใช้ Arduino
- หุ่นยนต์ควบคุมด้วยคอมพิวเตอร์โดยใช้ Arduino
- หุ่นยนต์ที่ควบคุมด้วย WiFi โดยใช้ Arduino
- Accelerometer Based Hand Gesture ควบคุมหุ่นยนต์โดยใช้ Arduino
- รถของเล่นควบคุมด้วย Bluetooth ใช้ Arduino
จำเป็นต้องใช้เซนเซอร์:
มีเซ็นเซอร์อยู่มากมายในตลาดที่มีการใช้งานของตัวเอง ทุกหุ่นยนต์ได้รับการป้อนข้อมูลผ่านเซ็นเซอร์ที่พวกเขาทำหน้าที่เป็นอวัยวะประสาทสัมผัสสำหรับหุ่นยนต์ ในกรณีของเราหุ่นยนต์ของเราควรสามารถตรวจจับอุปสรรคและหลีกเลี่ยงได้
มีเซ็นเซอร์เย็นแบบอื่น ๆ อีกมากมายที่เราจะนำมาใช้ในโครงการในอนาคตของเรา แต่ตอนนี้ให้เรามุ่งเน้นไปที่เซ็นเซอร์ IR และ US (Ultrasonic sensor) เนื่องจากทั้งสองคนนี้จะให้ภาพลักษณ์ของรถโรโบ ดูการทำงานของเซ็นเซอร์ IRที่นี่ ด้านล่างแสดงภาพของเซ็นเซอร์รับสัญญาณ IR และอัลตราโซนิคเซนเซอร์ :
อัลตราโซนิคเซนเซอร์ประกอบด้วยดวงตากลมสองดวงซึ่งหนึ่งในนั้นใช้ในการส่งสัญญาณของสหรัฐฯและอีกอันหนึ่งเพื่อรับรังสียูวี คำนวณเวลาโดยรังสีเพื่อรับส่งและรับกลับคำนวณโดยไมโครคอนโทรลเลอร์ ตอนนี้เนื่องจากเวลาและความเร็วของเสียงเป็นที่รู้จักเราสามารถคำนวณระยะทางโดยใช้สูตรต่อไปนี้
- ระยะทาง = เวลา x ความเร็วเสียงหารด้วย 2
ค่าจะถูกหารด้วยสองเนื่องจากรังสีจะเคลื่อนที่ไปข้างหน้าและย้อนกลับไปในระยะเดียวกัน คำอธิบายรายละเอียดของการใช้เซ็นเซอร์อัลตราโซนิกจะได้รับที่นี่
มอเตอร์ต้องมี:
มีค่อนข้างมากมอเตอร์ที่ใช้ในด้านของหุ่นยนต์ที่ใช้มากที่สุดคือ Stepper และ Servo มอเตอร์ เนื่องจากโครงการนี้ไม่ได้มีตัวกระตุ้นที่ซับซ้อนใด ๆ หรือการเข้ารหัสแบบหมุนเราจะใช้ตามปกติPMDC มอเตอร์ แต่แบตเตอรี่ของเรามีขนาดใหญ่และหนักเพราะฉะนั้นเราจึงใช้มอเตอร์ 4 ตัวเพื่อขับเคลื่อนหุ่นยนต์ทั้ง 4 รุ่นของเราเป็นมอเตอร์ PMDC เดียวกัน แต่แนะนำให้ตั้งมอเตอร์ stepper และ servo เมื่อคุณได้รับความสะดวกสบายกับมอเตอร์ PMDC
วัสดุของตัวถังหุ่นยนต์:
ในฐานะนักเรียนหรือนักเล่นสเป็คที่เป็นส่วนที่ยากที่สุดในขณะที่ทำหุ่นยนต์คือการเตรียมแชสซีของหุ่นยนต์ของเรา ปัญหาคือความพร้อมใช้งานของเครื่องมือและวัสดุ วัสดุที่เหมาะที่สุดสำหรับโครงการนี้คืออะคริลิค แต่ต้องใช้เครื่องมือเจาะและเครื่องมืออื่น ๆ เพื่อทำงานร่วมกับมัน ดังนั้นไม้จึงถูกเลือกให้ทุกคนสามารถทำงานได้อย่างง่ายดาย
ปัญหานี้ได้หายไปจากสนามหลังจากการแนะนำเครื่องพิมพ์ 3D ฉันกำลังวางแผนที่จะพิมพ์ชิ้นส่วน 3D สักวันหนึ่งและอัปเดตให้กับคุณด้วยเหมือนกัน ดังนั้นตอนนี้ขอใช้แผ่นไม้เพื่อสร้างหุ่นยนต์ของเรา
ความจุแบตเตอรี่:
การเลือกกำลังการผลิตแบตเตอรี่ควรเป็นส่วนสุดท้ายของการทำงานเนื่องจากหมดจดขึ้นอยู่กับแชสซีและมอเตอร์ของคุณ ที่นี่แบตเตอรี่ของเราควรไดรฟ์เครื่องดูดฝุ่นที่ดึงประมาณ 3-5A และสี่มอเตอร์ PMDC ดังนั้นเราจะต้องใช้แบตเตอรี่หนัก ฉันได้เลือก12V 20Ah SLAB (แบตเตอรี่กรดตะกั่วปิดผนึก)และขนาดใหญ่ของมันทำให้หุ่นยนต์ของเราได้รับสี่มอเตอร์ PMDC เพื่อดึงคนที่แต่งตัวประหลาดขนาดใหญ่นี้
ตอนนี้ที่เราได้เลือกของเราทั้งหมดส่วนประกอบที่จำเป็นช่วยให้รายการพวกเขาลง
- แผ่นไม้สำหรับแชสซี
- เซ็นเซอร์ IR และ US
- เครื่องดูดฝุ่นที่ทำงานบนกระแสไฟตรง
- Arduino Uno
- แบตเตอรี่ 12V 20Ah
- IC ควบคุมมอเตอร์ (L293D)
- เครื่องมือทำงาน
- สายเชื่อมต่อ
- พลังงานที่กระตือรือร้นที่จะเรียนรู้และทำงาน
องค์ประกอบส่วนใหญ่ของเราได้รับการกล่าวถึงในคำอธิบายด้านบนฉันจะอธิบายรายละเอียดด้านล่างซ้าย
DC เครื่องดูดฝุ่น:
ตั้งแต่หุ่นยนต์ของเราทำงานบนระบบ 12V 20Ah DC เครื่องดูดฝุ่นของเราควรเป็นเครื่องดูดฝุ่นแบบ 12V DC หากคุณสับสนในการที่จะได้รับหนึ่งแล้วคุณสามารถเยี่ยมชม eBay หรือ Amazon สำหรับทำความสะอาดเครื่องดูดฝุ่นทำความสะอาดรถ
เราจะใช้เหมือนกันดังแสดงในภาพด้านบน
มอเตอร์ควบคุม (L293D):
ไดรเวอร์มอเตอร์เป็นโมดูลกลางระหว่าง Arduino และ Motor เนื่องจากไมโครคอนโทรลเลอร์ Arduino จะไม่สามารถจ่ายกระแสไฟฟ้าที่จำเป็นสำหรับมอเตอร์ให้ทำงานได้และสามารถจ่ายกระแสไฟ 40mA ได้ดังนั้นการดึงกระแสไฟจะเพิ่มความเสียหายให้กับตัวควบคุมอย่างถาวร ดังนั้นเราจึงเรียกใช้โปรแกรมควบคุมมอเตอร์ซึ่งจะควบคุมมอเตอร์
เราจะใช้L293D Motor Motor ICซึ่งจะสามารถจัดหาได้ถึง 1A ดังนั้นไดรเวอร์นี้จะได้รับข้อมูลจาก Arduino และทำให้การทำงานของมอเตอร์ตามที่ต้องการ
แค่นั้นแหละ!! ฉันได้ให้ข้อมูลสำคัญมากที่สุด แต่ก่อนที่เราจะเริ่มสร้างหุ่นยนต์เราขอแนะนำให้อ่านแผ่นข้อมูลของ L293D และ Arduino หากคุณมีข้อสงสัยหรือปัญหาใด ๆ คุณสามารถติดต่อเราผ่านทางส่วนแสดงความคิดเห็น
การสร้างและทดสอบหุ่นยนต์:
เครื่องดูดฝุ่นเป็นส่วนสำคัญที่สุดในการจัดวางหุ่นยนต์ ต้องวางไว้ที่มุมเอียงตามที่แสดงในภาพเพื่อให้สามารถทำงานได้อย่างถูกต้อง เครื่องดูดฝุ่นไม่ได้ถูกควบคุมโดยArduino เมื่อคุณเปิดเครื่องหุ่นยนต์แล้วเครื่องสูญญากาศยังเปิดอยู่
ขั้นตอนหนึ่งในการสร้างหุ่นยนต์ของเราคืองานไม้ เราต้องแกะสลักไม้ของเราและเจาะหลุมบางส่วนเพื่อวางเซ็นเซอร์และเครื่องดูดฝุ่น
ขอแนะนำให้ทดสอบ Ride Robot ของคุณด้วยรหัสต่อไปนี้เมื่อคุณจัดให้มี Motor and Motor driver ก่อนที่จะเชื่อมต่อ Sensors
การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11 OUTPUT); pinMode (12 OUTPUT); } void loop () { ล่าช้า (1000) Serial.print ( "ไปข้างหน้า"); digitalWrite (9, HIGH); digitalWrite (10, LOW); digitalWrite (11 สูง); digitalWrite (12 LOW); ล่าช้า (500); Serial.print ( "ย้อนกลับ"); digitalWrite (9, LOW); digitalWrite (10, HIGH); digitalWrite (11 LOW); digitalWrite (12 HIGH); }
ถ้าทุกสิ่งทุกอย่างทำงานได้ดีแล้วคุณสามารถเชื่อมต่อเซ็นเซอร์กับArduinoตามที่แสดงในแผนภาพวงจรและใช้รหัสแบบเต็มในตอนท้าย ที่คุณสามารถดูฉันได้ติดตั้งเซ็นเซอร์อัลตราโซนิกไปด้านหน้าและสองเซ็นเซอร์ IR ทั้งสองด้านของหุ่นยนต์ อ่างความร้อนติดตั้งอยู่กับ L293D ในกรณีที่ IC ร้อนขึ้นอย่างรวดเร็ว
นอกจากนี้คุณยังสามารถเพิ่มส่วนพิเศษบางอย่างเช่นนี้
นี่คือการจัดเรียงแบบกวาด (Sweeping Arrangement)สามารถวางไว้ที่ปลายทั้งสองด้านของด้านหน้าซึ่งจะผลักดันฝุ่นไปตามบริเวณที่ดูดเข้าไป
นอกจากนี้คุณยังมีตัวเลือกในการทำSmaller Version ของ Vacuum Cleaning Robot เช่นนี้
Robot ขนาดเล็กกว่านี้ทำจากกระดาษแข็งและทำงานบนบอร์ดพัฒนา ATMega16 ส่วนเครื่องดูดฝุ่นทำโดยใช้พัดลม BLDC และบรรจุในกล่อง คุณสามารถใช้วิธีนี้ได้หากต้องการให้งบประมาณต่ำ แนวคิดนี้ใช้งานได้ แต่ก็ไม่ได้มีประสิทธิภาพ
แผนภูมิวงจรรวม:
รหัสสำหรับหุ่นยนต์ดูดฝุ่นนี้สามารถดูได้จากหัวข้อรหัสด้านล่าง เมื่อการเชื่อมต่อเสร็จสิ้นและโปรแกรมถูกทิ้งลงใน Arduino หุ่นยนต์ของคุณพร้อมที่จะเริ่มทำงานแล้ว การทำงานของโค้ดจะอธิบายโดยใช้ความคิดเห็น หากคุณต้องการดูหุ่นยนต์ตัวนี้ให้ดำเนินการโปรดดูวิดีโอด้านล่าง
นอกจากนี้ฉันยังวางแผนที่จะสมบูรณ์ 3D พิมพ์ชิ้นส่วนในรุ่นถัดไป ฉันยังจะได้รับการเพิ่มคุณสมบัติเย็นน้อยและขั้นตอนวิธีที่ซับซ้อนเพื่อให้ครอบคลุมพื้นที่พรมทั้งหมดและง่ายต่อการจัดการและขนาดกะทัดรัด โปรดคอยติดตามการอัปเดตในอนาคต
รหัส
#define trigPin 12
# define echoPin 13
# กำหนด ir1 7
# กำหนด ir2 6
# define echoPin 13
# กำหนด ir1 7
# กำหนด ir2 6
การตั้งค่าเป็นโมฆะ ()
{
Serial.begin (9600);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11 OUTPUT);
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (ir1, INPUT);
pinMode (ir2, INPUT);
}
{
Serial.begin (9600);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11 OUTPUT);
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (ir1, INPUT);
pinMode (ir2, INPUT);
}
void loop ()
{
ระยะเวลา int, ระยะทาง;
ธง int, val1, val2;
VAL1 = digitalRead (IR1);
VAL2 = digitalRead (ir2);
Serial.println (VAL1);
Serial.println (VAL2);
digitalWrite (trigPin, HIGH);
delayMicroseconds (1000)
digitalWrite (trigPin, LOW);
ระยะเวลา = ชีพจร (echoPin, HIGH);
ระยะทาง = (ระยะเวลา / 2) / 29.1;
if (distance> = 200 || distance <= 0) {
Serial.println ("Out of range");
}
else {
Serial.print (ระยะทาง);
Serial.println ("cm");
}
ล่าช้า (500);
{
ระยะเวลา int, ระยะทาง;
ธง int, val1, val2;
VAL1 = digitalRead (IR1);
VAL2 = digitalRead (ir2);
Serial.println (VAL1);
Serial.println (VAL2);
digitalWrite (trigPin, HIGH);
delayMicroseconds (1000)
digitalWrite (trigPin, LOW);
ระยะเวลา = ชีพจร (echoPin, HIGH);
ระยะทาง = (ระยะเวลา / 2) / 29.1;
if (distance> = 200 || distance <= 0) {
Serial.println ("Out of range");
}
else {
Serial.print (ระยะทาง);
Serial.println ("cm");
}
ล่าช้า (500);
if (distance> = 20)
{
ล่าช้า (100);
Serial.println ( "ไปข้างหน้า");
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
digitalWrite (11 LOW);
ล่าช้า (150);
Serial.println ( "STOP");
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11 LOW);
}
{
ล่าช้า (100);
Serial.println ( "ไปข้างหน้า");
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
digitalWrite (11 LOW);
ล่าช้า (150);
Serial.println ( "STOP");
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11 LOW);
}
if (ระยะทาง <= 20)
{
if (val1 == 1)
{
Serial.print ("เลี้ยวขวา");
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
digitalWrite (11 LOW);
ล่าช้า (2000);
}
if (val2 == 1)
{
Serial.print ("เลี้ยวซ้าย");
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11 LOW);
ล่าช้า (500);
}
}
{
if (val1 == 1)
{
Serial.print ("เลี้ยวขวา");
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
digitalWrite (11 LOW);
ล่าช้า (2000);
}
if (val2 == 1)
{
Serial.print ("เลี้ยวซ้าย");
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11 LOW);
ล่าช้า (500);
}
}
ถ้า (ระยะทาง <= 10)
{
Serial.print ("rearrange back");
digitalWrite (8, LOW);
digitalWrite (9, HIGH);
digitalWrite (10, LOW);
digitalWrite (11 สูง);
ล่าช้า (1000)
Serial.print ("rearranged left");
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
digitalWrite (11 LOW);
ล่าช้า (100);
}
{
Serial.print ("rearrange back");
digitalWrite (8, LOW);
digitalWrite (9, HIGH);
digitalWrite (10, LOW);
digitalWrite (11 สูง);
ล่าช้า (1000)
Serial.print ("rearranged left");
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
digitalWrite (11 LOW);
ล่าช้า (100);
}
if (distance <= 20)
{
Serial.print ("Algorithum");
Serial.print ("สิทธิเสรี");
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11 LOW);
if (val2 == 0)
{
Serial.print ("ปรับสมาร์ท");
digitalWrite (8, LOW);
digitalWrite (9, HIGH);
digitalWrite (10, LOW);
digitalWrite (11 LOW);
ล่าช้า (500);
}
}
}
{
Serial.print ("Algorithum");
Serial.print ("สิทธิเสรี");
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11 LOW);
if (val2 == 0)
{
Serial.print ("ปรับสมาร์ท");
digitalWrite (8, LOW);
digitalWrite (9, HIGH);
digitalWrite (10, LOW);
digitalWrite (11 LOW);
ล่าช้า (500);
}
}
}
ขอวิธีการทำงานของตัวเครื่องด้วยได้มั้ยครับ
ตอบลบHi, it's a very interesting blog. Thank you for sharing it will be helpful for engineering students to develop their own academic projects. I have found interesting projects in this Raspberry Pi Projects for Engineering Students
ตอบลบ