- MPU6050 Gyroscopic & Accelerometer Sensor
- เซนเซอร์ Flex
- เตรียมความพร้อมของแขนหุ่นยนต์ที่พิมพ์ 3 มิติ:
- ส่วนประกอบที่ต้องการ:
- แผนภูมิวงจรรวม:
- การติดตั้ง MPU6050 & Flex Sensor เข้ากับถุงมือ
- การเขียนโปรแกรม Arduino Nano สำหรับแขนหุ่นยนต์
- การทำงานของแขนหุ่นยนต์ที่ควบคุมด้วยท่าทางโดยใช้ Arduino
Robotic Arms เป็นหนึ่งในการสร้างสรรค์ทางวิศวกรรมที่น่าสนใจและเป็นเรื่องที่น่าสนใจเสมอที่จะเฝ้าดูสิ่งเหล่านี้เอียงและแพนเพื่อทำสิ่งที่ซับซ้อนเช่นเดียวกับแขนมนุษย์ แขนหุ่นยนต์เหล่านี้สามารถพบได้ทั่วไปในอุตสาหกรรมที่สายการประกอบซึ่งทำงานเชิงกลที่รุนแรงเช่นการเชื่อมการเจาะการทาสี ฯลฯ แขนหุ่นยนต์ขั้นสูงที่เพิ่งมีความแม่นยำสูงยังได้รับการพัฒนาเพื่อดำเนินการผ่าตัดที่ซับซ้อน ก่อนหน้านี้เราพิมพ์แขนหุ่นยนต์ 3 มิติและสร้างแขนหุ่นยนต์ DIY Pick and Place โดยใช้ไมโครคอนโทรลเลอร์ ARM7 เราจะใช้แขนหุ่นยนต์ที่พิมพ์แบบ 3 มิติอีกครั้งเพื่อสร้าง แขนหุ่นยนต์ที่ควบคุมด้วยท่าทางมือ โดยใช้ Arduino Nano, MPU6050 Gyroscope และ flex sensor
ตำแหน่งนี้แขนหุ่นยนต์ 3 มิติพิมพ์ถูกควบคุมผ่านมือถุงมือที่แนบมากับ MPU6050 Gyroscope และเซ็นเซอร์ดิ้น เซ็นเซอร์ Flex ใช้เพื่อควบคุมเซอร์โวกริปเปอร์ของ Robotic Arm และ MPU6050 ใช้สำหรับการเคลื่อนที่ของหุ่นยนต์ในแกน X และ Y หากคุณไม่มีเครื่องพิมพ์คุณสามารถสร้างแขนของคุณด้วยกระดาษแข็งแบบธรรมดาที่เราสร้างขึ้นสำหรับโครงการ Arduino Robotic Arm ของเรา สำหรับแรงบันดาลใจคุณสามารถอ้างถึง Record and Play Robotic Arm ที่เราสร้างขึ้นก่อนหน้านี้โดยใช้ Arduino
ก่อนที่จะลงรายละเอียดก่อนอื่นเรามาเรียนรู้เกี่ยวกับเซ็นเซอร์ MPU6050 และเซ็นเซอร์เฟล็กซ์
MPU6050 Gyroscopic & Accelerometer Sensor
MPU6050 ใช้เทคโนโลยี Micro-Mechanical Systems (MEMS) เซ็นเซอร์นี้มี เครื่องวัดความเร่งแบบ 3 แกนไจโรสโคปแบบ 3 แกนและเซ็นเซอร์อุณหภูมิในตัว สามารถใช้ในการวัดพารามิเตอร์เช่น Acceleration, Velocity, Orientation, Displacement เป็นต้นก่อนหน้านี้เราได้เชื่อมต่อ MPU6050 กับ Arduino และ Raspberry pi แล้วและยังสร้างโครงการอีกสองสามโครงการโดยใช้หุ่นยนต์ Self Balancing, Arduino Digital Protractor และ Arduino Inclinometer
คุณสมบัติใน MPU6050 Sensor:
- การสื่อสาร: โปรโตคอล I2C พร้อมที่อยู่ I2C ที่กำหนดค่าได้
- แหล่งจ่ายไฟเข้า: 3-5V
- ADC 16 บิตในตัวให้ความแม่นยำสูง
- DMP ในตัวให้พลังในการคำนวณสูง
- สามารถใช้เพื่อเชื่อมต่อกับอุปกรณ์ I2C อื่น ๆ เช่นแมกนีโตมิเตอร์
- เซ็นเซอร์อุณหภูมิในตัว
รายละเอียด Pin-Out ของ MPU6050:
พิน | การใช้งาน |
Vcc | ให้พลังงานสำหรับโมดูลสามารถ + 3V ถึง + 5V โดยทั่วไปจะใช้ + 5V |
พื้น | เชื่อมต่อกับกราวด์ของระบบ |
นาฬิกาอนุกรม (SCL) | ใช้สำหรับจัดหานาฬิกาพัลส์สำหรับการสื่อสาร I2C |
ข้อมูลอนุกรม (SDA) | ใช้สำหรับการถ่ายโอนข้อมูลผ่านการสื่อสาร I2C |
ข้อมูลอนุกรมเสริม (XDA) | สามารถใช้เพื่อเชื่อมต่อโมดูล I2C อื่น ๆ กับ MPU6050 |
นาฬิกาอนุกรมเสริม (XCL) | สามารถใช้เพื่อเชื่อมต่อโมดูล I2C อื่น ๆ กับ MPU6050 |
AD0 | หากใช้ MPU6050 มากกว่าหนึ่งตัวใน MCU เดียวก็สามารถใช้พินนี้เพื่อเปลี่ยนที่อยู่ได้ |
ขัดจังหวะ (INT) | ขัดจังหวะพินเพื่อระบุว่ามีข้อมูลให้ MCU อ่าน |
เซนเซอร์ Flex
Flex Sensors ไม่ใช่ตัวต้านทานแบบแปรผัน ความต้านทานเซ็นเซอร์งอจะเปลี่ยนไปเมื่อเซ็นเซอร์งอ พวกเขา มักจะมีสองขนาด 2.2 นิ้ว และ 4.5 นิ้ว
ทำไมเราถึงใช้เซนเซอร์แบบยืดหยุ่นในโครงการของเรา?
ในแขนหุ่นยนต์ที่ควบคุมด้วยท่าทางนี้จะใช้เซ็นเซอร์ดิ้นเพื่อควบคุมที่จับของแขนหุ่นยนต์ เมื่อเซ็นเซอร์เฟล็กซ์บนถุงมือมืองอเซอร์โวมอเตอร์ที่ติดกับกริปเปอร์จะหมุนและกริปเปอร์จะเปิดขึ้น
เซ็นเซอร์ Flex มีประโยชน์ในหลาย ๆ แอปพลิเคชันและเราได้สร้างโครงการบางอย่างโดยใช้เซ็นเซอร์ Flex เช่นตัวควบคุมเกมตัวสร้างโทน ฯลฯ
เตรียมความพร้อมของแขนหุ่นยนต์ที่พิมพ์ 3 มิติ:
แขนหุ่นยนต์พิมพ์ 3 มิติที่ใช้ในบทช่วยสอนนี้สร้างขึ้นโดยทำตามการออกแบบที่กำหนดโดย EEZYbotARM ซึ่งมีอยู่ใน Thingiverse ขั้นตอนที่สมบูรณ์ในการสร้างแขนหุ่นยนต์พิมพ์ 3 มิติและรายละเอียดการประกอบพร้อมวิดีโอมีอยู่ในลิงค์ Thingiverse ซึ่งแชร์ไว้ด้านบน
ด้านบนคือภาพแขนหุ่นยนต์ที่พิมพ์ 3 มิติของฉันหลังจากประกอบกับเซอร์โวมอเตอร์ 4 ตัว
ส่วนประกอบที่ต้องการ:
- Arduino นาโน
- เซนเซอร์ Flex
- ตัวต้านทาน 10k
- MPU6050
- ถุงมือมือ
- การเชื่อมต่อสายไฟ
- เขียงหั่นขนม
แผนภูมิวงจรรวม:
ภาพต่อไปนี้แสดงการเชื่อมต่อวงจรสำหรับ แขนหุ่นยนต์ที่ควบคุมด้วยท่าทางของ Arduino
การเชื่อมต่อวงจรระหว่าง MPU6050 และ Arduino Nano:
MPU6050 |
Arduino นาโน |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
การเชื่อมต่อวงจรระหว่างเซอร์โวมอเตอร์และ Arduino Nano:
Arduino นาโน |
เซอร์โวมอเตอร์ |
อะแดปเตอร์ไฟฟ้า |
D2 |
Servo 1 Orange (พิน PWM) |
- |
D3 |
Servo 2 สีส้ม (พิน PWM) |
- |
D4 |
Servo 3 สีส้ม (พิน PWM) |
- |
D5 |
Servo 4 สีส้ม (พิน PWM) |
- |
GND |
Servo 1,2,3,4 สีน้ำตาล (GND Pin) |
GND |
- |
เซอร์โว 1,2,3,4 แดง (+ 5V พิน) |
+ 5V |
เซ็นเซอร์ดิ้น มีสองขา ไม่มีขั้วต่อโพลาไรซ์ ดังนั้นพินหนึ่ง P1 จึงเชื่อมต่อกับอะนาล็อก Pin A0 ของ Arduino Nano โดยมีตัวต้านทานแบบดึงขึ้น 10k และพินสอง P2 ต่อสายดินกับ Arduino
การติดตั้ง MPU6050 & Flex Sensor เข้ากับถุงมือ
เราได้ติดตั้ง MPU6050 และ Flex Sensor เข้ากับถุงมือ ที่นี่ใช้การเชื่อมต่อแบบมีสายเพื่อเชื่อมต่อถุงมือและแขนหุ่นยนต์ แต่สามารถทำแบบไร้สายได้โดยใช้การเชื่อมต่อ RF หรือการเชื่อมต่อบลูทู ธ
หลังจากเชื่อมต่อทุกครั้งการตั้งค่าขั้นสุดท้ายสำหรับ แขนหุ่นยนต์ที่ควบคุมด้วยท่าทาง จะมีลักษณะดังภาพด้านล่าง:
การเขียนโปรแกรม Arduino Nano สำหรับแขนหุ่นยนต์
ตามปกติ โค้ดที่สมบูรณ์พร้อมกับวิดีโอที่ใช้งานได้ จะได้รับในตอนท้ายของบทช่วยสอนนี้ ต่อไปนี้เป็นคำอธิบายบรรทัดสำคัญบางส่วนของโค้ด
1. ขั้นแรกรวมไฟล์ไลบรารีที่จำเป็น ไลบรารี Wire.h ใช้สำหรับการสื่อสาร I2C ระหว่าง Arduino Nano และ MPU6050 และ servo.h สำหรับควบคุมเซอร์โวมอเตอร์
# รวม
2. จากนั้นจะประกาศอ็อบเจ็กต์สำหรับคลาสเซอร์โว ในขณะที่เราใช้เซอร์โวมอเตอร์สี่ตัวจะมีการสร้างวัตถุสี่อย่างเช่น servo_1, servo_2, servo_3, servo_4
เซอร์โว servo_1; เซอร์โว servo_2; เซอร์โว servo_3; เซอร์โว servo_4;
3. ถัดไปมีการประกาศที่อยู่ I2C ของ MPU6050 และตัวแปรที่จะใช้
const int MPU_addr = 0x68; // MPU6050 I2C ที่อยู่ int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; คู่ x; คู่ y; Z คู่
4. ถัดไปในการ ตั้งค่าโมฆะ อัตราการส่งข้อมูล 9600 ถูกตั้งค่าสำหรับการสื่อสารแบบอนุกรม
Serial.begin (9600);
และมีการสร้างการสื่อสาร I2C ระหว่าง Arduino Nano และ MPU6050:
Wire.begin (); // เริ่มต้นการสื่อสาร I2C Wire.beginTransmission (MPU_addr); // เริ่มการสื่อสารด้วย MPU6050 Wire.write (0x6B); // เขียนเพื่อลงทะเบียน 6B Wire.write (0); // เขียน 0 เป็น 6B ลงทะเบียนเพื่อรีเซ็ต Wire.endTransmission (จริง); // สิ้นสุดการส่ง I2C
นอกจากนี้หมุด PWM สี่ตัวถูกกำหนดไว้สำหรับการเชื่อมต่อเซอร์โวมอเตอร์
servo_1.attach (2); // ไปข้างหน้า / Reverse_Motor servo_2.attach (3); // ขึ้น / ลง_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // ซ้าย / ขวา _ มอเตอร์
5. ถัดไปใน ฟังก์ชัน void loop ให้สร้างการเชื่อมต่อ I2C ระหว่าง MPU6050 และ Arduino Nano อีกครั้งจากนั้นเริ่มอ่านข้อมูล X, Y, Z-Axis จากรีจิสเตอร์ MPU6050 และเก็บไว้ในตัวแปรที่เกี่ยวข้อง
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // เริ่มต้นด้วย regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, จริง); // อ่าน 14 รีจิสเตอร์ axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
หลังจากนั้นแมปค่าต่ำสุดและสูงสุดของข้อมูลแกนจากเซ็นเซอร์ MPU6050 ในช่วง -90 ถึง 90
int xAng = แผนที่ (axis_X, minVal, maxVal, -90,90); int yAng = แผนที่ (axis_Y, minVal, maxVal, -90,90); int zAng = แผนที่ (axis_Z, minVal, maxVal, -90,90);
จากนั้นใช้สูตรต่อไปนี้เพื่อคำนวณค่า x, y, z ในรูปของ 0 ถึง 360
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
จากนั้นอ่านข้อมูลเอาต์พุตแบบอะนาล็อกเซนเซอร์แบบยืดหยุ่นที่ขา A0 ของ Arduino Nano และตามค่าดิจิทัลของเซ็นเซอร์เฟล็กซ์ตั้งค่ามุมเซอร์โวของกริปเปอร์ ดังนั้นหากข้อมูลเซ็นเซอร์เฟล็กซ์มากกว่า 750 มุมเซอร์โวมอเตอร์ของกริปเปอร์คือ 0 องศาและถ้าน้อยกว่า 750 ก็เท่ากับ 180 องศา
int กริปเปอร์; int flex_sensorip = analogRead (A0); ถ้า (flex_sensorip> 750) { กริปเปอร์ = 0; } else { กริปเปอร์ = 180; } servo_3.write (กริปเปอร์);
จากนั้นการ เคลื่อนที่ของ MPU6050 บนแกน X จาก 0 ถึง 60 จะถูกจับคู่ในรูปแบบ 0 ถึง 90 องศาสำหรับการเคลื่อนที่ไปข้างหน้า / ถอยหลังของเซอร์โวมอเตอร์ของแขนหุ่นยนต์
ถ้า (x> = 0 && x <= 60) { int mov1 = แผนที่ (x, 0,60,0,90); Serial.print ("การเคลื่อนไหวใน F / R ="); Serial.print (mov1); Serial.println ((ถ่าน) 176); servo_1.write (mov1); }
และการ เคลื่อนไหวของ MPU6050 บนแกน X จาก 250 ถึง 360 จะถูกแมปในรูปแบบ 0 ถึง 90 องศาสำหรับแขนหุ่นยนต์การเคลื่อนไหวขึ้น / ลงของเซอร์โวมอเตอร์
อื่นถ้า (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("การเคลื่อนไหวในขึ้น / ลง ="); Serial.print (mov2); Serial.println ((ถ่าน) 176); servo_2.write (mov2); }
การเคลื่อนที่ของ MPU6050 บนแกน Y จาก 0 ถึง 60 ถูกแมปในรูปแบบ 90 ถึง 180 องศาสำหรับการเคลื่อนที่ด้านซ้ายของแขนหุ่นยนต์เซอร์โวมอเตอร์
ถ้า (y> = 0 && y <= 60) { int mov3 = แผนที่ (y, 0,60,90,180); Serial.print ("การเคลื่อนไหวด้านซ้าย ="); Serial.print (mov3); Serial.println ((ถ่าน) 176); servo_4.write (mov3); }
การเคลื่อนที่ของ MPU6050 ในแกน Y จาก 300 ถึง 360 ถูกแมปในรูปแบบ 0 ถึง 90 องศาสำหรับการเคลื่อนที่ด้านขวาของแขนหุ่นยนต์เซอร์โวมอเตอร์
อื่นถ้า (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("การเคลื่อนไหวทางขวา ="); Serial.print (mov3); Serial.println ((ถ่าน) 176); servo_4.write (mov3); }
การทำงานของแขนหุ่นยนต์ที่ควบคุมด้วยท่าทางโดยใช้ Arduino
สุดท้ายอัปโหลดรหัสไปยัง Arduino Nano และสวมถุงมือมือที่ติดตั้ง MPU6050 & Flex Sensor
1. ตอนนี้เลื่อนมือลงเพื่อเลื่อนแขนหุ่นยนต์ไปข้างหน้าและเลื่อนขึ้นเพื่อเลื่อนแขนหุ่นยนต์ขึ้น
2. จากนั้นเอียงมือไปทางซ้ายหรือขวาเพื่อหมุนแขนหุ่นยนต์ไปทางซ้ายหรือขวา
3. งอสายดิ้นที่แนบมากับนิ้วของถุงมือเพื่อเปิดที่จับจากนั้นปล่อยเพื่อปิด
การทำงานที่สมบูรณ์แสดงให้เห็นในวิดีโอด้านล่าง