- MPU6050 Jiroskop ve İvmeölçer Sensörü
- Flex Sensör
- 3B yazdırılmış Robotik ARM hazırlanıyor:
- Gerekli Bileşenler:
- Devre şeması:
- MPU6050 ve Flex Sensörünün Eldivenlere Montajı
- Robotik Kol için Arduino Nano'nun Programlanması
- Jest kontrollü Robotik Kolun Arduino ile Çalışması
Robotik Kollar büyüleyici mühendislik eserlerinden biridir ve karmaşık işleri tıpkı bir insan kolunun yapacağı gibi yapmak için bu şeylerin eğilip döndüğünü izlemek her zaman büyüleyicidir. Bu robotik kollar, kaynak, delme, boyama vb. Gibi yoğun mekanik işler yapan montaj hattındaki endüstrilerde yaygın olarak bulunabilmektedir, son zamanlarda gelişmiş robotik kollar da karmaşık cerrahi operasyonları gerçekleştirmek için yüksek hassasiyette geliştirilmektedir. Daha önce bir robot Kolu 3D olarak yazdırdık ve ARM7 Mikrodenetleyiciyi kullanarak bir DIY Seç ve Yerleştir Robot kolu oluşturduk. Arduino Nano, MPU6050 Jiroskop ve esnek sensör kullanarak El hareketi kontrollü bir robotik ARM yapmak için yine aynı 3D baskılı Robotik Kolu kullanacağız.
Bu 3D baskılı robotik kol pozisyonu, bir MPU6050 Jiroskop ve bir esnek sensör ile bağlı bir el eldiveni ile kontrol edilir. Flex sensörü, Robotik Kolun kavrayıcı servosunu kontrol etmek için kullanılır ve MPU6050, robotun X ve Y eksenindeki hareketi için kullanılır. Yazıcınız yoksa Arduino Robotik Kol Projemiz için yaptığımız gibi kolunuzu basit karton ile de yapabilirsiniz. İlham almak için, daha önce Arduino'yu kullanarak oluşturduğumuz Record and Play Robotic Arm'a da başvurabilirsiniz.
Ayrıntılara girmeden önce MPU6050 sensörü ve esnek sensör hakkında bilgi edinelim.
MPU6050 Jiroskop ve İvmeölçer Sensörü
MPU6050, Mikro-Mekanik Sistemler (MEMS) teknolojisine dayanmaktadır. Bu sensörde 3 eksenli bir ivmeölçer, 3 eksenli bir jiroskop ve dahili bir sıcaklık sensörü bulunur. Hızlanma, Hız, Oryantasyon, Yer Değiştirme, vb. Gibi parametreleri ölçmek için kullanılabilir. Daha önce MPU6050'yi Arduino ve Raspberry pi ile arayüzledik ve aynı zamanda kendi kendini dengeleyen robot, Arduino Dijital Açıölçer ve Arduino İnklinometre gibi birkaç proje oluşturduk.
MPU6050 Sensöründeki Özellikler:
- İletişim: Yapılandırılabilir I2C Adresli I2C protokolü
- Giriş Güç Kaynağı: 3-5V
- Dahili 16 bit ADC, yüksek doğruluk sağlar
- Dahili DMP, yüksek hesaplama gücü sağlar
- Manyetometre gibi diğer I2C cihazlarıyla arayüz oluşturmak için kullanılabilir
- Dahili sıcaklık sensörü
MPU6050'nin Pin-Out detayları:
Toplu iğne | Kullanım |
Vcc | Modüle güç sağlar, + 3V ile + 5V arasında olabilir. Tipik olarak + 5V kullanılır |
Zemin | Sistemin zeminine bağlı |
Seri Saat (SCL) | I2C İletişimi için saat darbesi sağlamak için kullanılır |
Seri Veriler (SDA) | Verileri I2C iletişimi yoluyla aktarmak için kullanılır |
Yardımcı Seri Veriler (XDA) | MPU6050 ile diğer I2C modülleri arasında arayüz oluşturmak için kullanılabilir |
Yardımcı Seri Saat (XCL) | MPU6050 ile diğer I2C modülleri arasında arayüz oluşturmak için kullanılabilir |
AD0 | Birden fazla MPU6050 tek bir MCU kullanılıyorsa, bu pin adresi değiştirmek için kullanılabilir. |
Kesinti (INT) | Verilerin MCU tarafından okunması için mevcut olduğunu gösteren kesinti pimi |
Flex Sensör
Flex Sensörler, değişken bir dirençten başka bir şey değildir. Esnek sensör direnci, sensör büküldüğünde değişir. Genellikle 2,2 inç ve 4,5 inç olmak üzere iki boyutta bulunurlar .
Projemizde neden esnek sensörler kullanıyoruz?
Bu Hareket kontrollü Robotik Kolda, robotik kolun tutucusunu kontrol etmek için bir esnek sensör kullanılır. El eldiveni üzerindeki esneme sensörü büküldüğünde, kıskaca takılı servo motor dönerek kıskaç açılır.
Esnek sensörler birçok uygulamada yararlı olabilir ve bir oyun denetleyicisi, Ton oluşturucu vb. Gibi Flex sensörünü kullanarak birkaç proje oluşturduk.
3B yazdırılmış Robotik ARM hazırlanıyor:
Bu eğitimde kullanılan 3 boyutlu yazdırılmış Robotik Kol, Thingiverse'de bulunan EEZYbotARM tarafından verilen tasarım takip edilerek yapılmıştır. 3D baskılı robotik kol ve videolu montaj detayı yapmak için eksiksiz prosedür, yukarıda paylaşılan Thingiverse bağlantısında mevcuttur.
Yukarıda, 4 Servo Motor ile monte edildikten sonra 3D baskılı Robotik Kolumun görüntüsü var.
Gerekli Bileşenler:
- Arduino Nano
- Flex Sensör
- 10k Direnç
- MPU6050
- Eldiven
- Kabloların Bağlanması
- Breadboard
Devre şeması:
Aşağıdaki görüntü, Arduino tabanlı hareket kontrollü Robotik Kol için devre bağlantılarını göstermektedir .
MPU6050 ve Arduino Nano arasındaki Devre Bağlantısı:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Servo Motorlar ve Arduino Nano arasındaki Devre Bağlantısı:
Arduino Nano |
SERVO MOTOR |
Güç adaptörü |
D2 |
Servo 1 Turuncu (PWM Pin) |
- |
D3 |
Servo 2 Portakal (PWM Pimi) |
- |
D4 |
Servo 3 Portakal (PWM Pimi) |
- |
D5 |
Servo 4 Portakal (PWM Pimi) |
- |
GND |
Servo 1,2,3,4 Kahverengi (GND Pimi) |
GND |
- |
Servo 1,2,3,4 Kırmızı (+ 5V Pimi) |
+ 5V |
Bir esnek sensör iki pim içerir. Polarize terminaller içermez. Böylece, pim bir P1, Arduino Nano'nun Analog Pini A0'a 10k'lık bir çekme direnci ile bağlanır ve pim iki P2, Arduino'ya topraklanır.
MPU6050 ve Flex Sensörünün Eldivenlere Montajı
MPU6050 ve Flex Sensörü bir el eldivenine monte ettik. Burada Eldiven ve robotik kolu bağlamak için kablolu bir bağlantı kullanılır, ancak bir RF bağlantısı veya bir Bluetooth bağlantısı kullanılarak kablosuz yapılabilir.
Her bağlantıdan sonra, hareket kontrollü Robotik Kol için son kurulum aşağıdaki resme benzer:
Robotik Kol için Arduino Nano'nun Programlanması
Her zaman olduğu gibi, bu eğitimin sonunda bir çalışma videosuyla birlikte eksiksiz kod verilmiştir. Burada birkaç önemli kod satırı açıklanmıştır.
1. Önce gerekli kitaplık dosyalarını ekleyin. Wire.h kitaplığı, Arduino Nano & MPU6050 ile servo.h arasındaki I2C iletişimi için servo motoru kontrol etmek için kullanılır.
#Dahil etmek
2. Ardından, servo sınıfının nesneleri bildirilir. Dört servo motor kullandığımız için servo_1, servo_2, servo_3, servo_4 gibi dört nesne oluşturulur.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Daha sonra MPU6050'nin I2C adresi ve kullanılacak değişkenler bildirilir.
const int MPU_addr = 0x68; // MPU6050 I2C Adresi int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; Çift x; çift y; Çift z;
4. Boşluk kurulumunda daha sonra , Seri iletişim için 9600 baud hızı ayarlanır.
Serial.begin (9600);
Ve Arduino Nano ve MPU6050 arasında I2C iletişimi kurulur:
Wire.begin (); // I2C İletişim Telini Başlatın.beginTransmission (MPU_addr); // MPU6050 Wire.write (0x6B) ile iletişimi başlat ; // 6B Kaydına Yazıyor Wire.write (0); // Wire.endTransmission'ı Sıfırlamak için 6B Registerına 0 yazar (true); // I2C iletimini sonlandırır
Ayrıca servo motor bağlantıları için dört PWM pini tanımlanmıştır.
servo_1.attach (2); // İleri / Geri_Motor servo_2.attach (3); // Yukarı / Aşağı_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Sol / Sağ_Motor
5. Boşluk döngü işlevinin ardından, MPU6050 ile Arduino Nano arasında tekrar I2C bağlantısı kurun ve ardından MPU6050'nin kaydından X, Y, Z Ekseni verilerini okumaya başlayın ve bunları ilgili değişkenlerde saklayın.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // regsiter 0x3B ile başla Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, doğru); // 14 Kütüğü Oku axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Bundan sonra, MPU6050 sensöründen gelen eksen verilerinin minimum ve maksimum değerlerini -90 ila 90 aralığında eşleyin.
int xAng = harita (axis_X, minVal, maxVal, -90,90); int yAng = harita (axis_Y, minVal, maxVal, -90,90); int zAng = harita (axis_Z, minVal, maxVal, -90,90);
Ardından, 0 ila 360 arasında x, y, z değerlerini hesaplamak için aşağıdaki formülü kullanın.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
Ardından Arduino Nano'nun A0 pinindeki esnek sensör Analog çıkış verilerini okuyun ve esnek sensörün dijital değerine göre tutucunun servo açısını ayarlayın. Dolayısıyla, esnek sensör verileri 750'den büyükse, tutucunun servo motor açısı 0 derece ve 750'den küçükse 180 derecedir.
int kavrayıcı; int flex_sensorip = analogRead (A0); eğer (flex_sensorip> 750) { tutucu = 0; } else { tutucu = 180; } servo_3.write (tutucu);
Ardından, MPU6050'nin X ekseninde 0'dan 60'a olan hareketi, servo motorun Robotik kolunun İleri / Geri hareketi için 0 ila 90 derece cinsinden eşleştirilir.
eğer (x> = 0 && x <= 60) { int mov1 = harita (x, 0,60,0,90); Serial.print ("F / R'de Hareket ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
Ve MPU6050'nin X ekseninde 250'den 360'a hareketi, servo motorun YUKARI / AŞAĞI hareketi Robotik kolu için 0 ila 90 derece açısından eşleştirilir.
else if (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("Yukarı / Aşağı Hareket ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
MPU6050'nin Y ekseninde 0'dan 60'a hareketi, servo motorun Robotik kolun Sol Hareketi için 90 ila 180 derece cinsinden eşleştirilir.
eğer (y> = 0 && y <= 60) { int mov3 = harita (y, 0,60,90,180); Serial.print ("Soldaki Hareket ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
MPU6050'nin Y eksenindeki 300'den 360'a hareketi, servo motorun Robotik kolun Sağ Hareketi için 0 ila 90 derece cinsinden eşleştirilir.
else if (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("Sağdaki Hareket ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Jest kontrollü Robotik Kolun Arduino ile Çalışması
Son olarak, kodu Arduino Nano'ya yükleyin ve MPU6050 ve Flex Sensör ile monte edilmiş el eldivenini takın.
1. Şimdi robotik kolu ileri hareket ettirmek için eli aşağı, robotik kolu yukarı hareket ettirmek için yukarı hareket ettirin.
2. Ardından robotik kolu sola veya sağa çevirmek için eli sola veya sağa eğin.
3. Tutucuyu açmak için el eldiveninin parmağıyla takılı esnek kabloyu bükün ve ardından kapatmak için serbest bırakın.
Tam çalışma aşağıda verilen videoda gösterilmektedir.