- İvmeölçer ve Jiroskopik sensör nedir?
- MPU6050 İvmeölçer ve Jiroskopik Sensör Modülü
- Gerekli Bileşenler
- Devre şeması
- Programlama Açıklaması
MPU6050 bir IC 3 eksenli ivmeölçer ve birleştirilen 3 eksenli jiroskop tek bir birim halinde. Ayrıca karmaşık bir görevi gerçekleştirmek için bir sıcaklık sensörü ve bir DCM barındırır. MPU6050, Drone ve kendi kendini dengeleyen bir robot gibi diğer uzak robotların yapımında yaygın olarak kullanılır. Bu projede MPU6050 ve Arduino kullanarak bir Dijital Açıölçer inşa edeceğiz. Burada açıyı iletki görüntüsünde göstermek için bir servo motor kullanılır. Servo motor şaftı, 16xLCD ekranda da görüntülenen açıyı belirtmek için iletki görüntüsünde dönecek bir iğne ile tutturulmuştur. Ayrıntılara girmeden önce Jiroskop sensörü hakkında bilgi edinelim.
İvmeölçer ve Jiroskopik sensör nedir?
İvmeyi ölçmek için bir ivmeölçer kullanılır. Aslında hem statik hem de dinamik ivmeyi algılar. Örneğin, cep telefonları, cep telefonunun yatay modda veya dikey modda olduğunu algılamak için ivme ölçer sensörünü kullanır. Daha önce Accelerometer'ı Arduino ile birlikte aşağıdakiler gibi birçok proje oluşturmak için kullandık:
Hareket halindeki nesnenin yönünü belirlemek için dünyanın yerçekimini kullanan açısal hızı ölçmek için bir jiroskop kullanılır. Açısal hız, dönen bir cismin açısal konumunun değişme hızıdır.
Örneğin, günümüzün cep telefonları, cep telefonunun yönüne göre mobil oyunları oynamak için jiroskopik sensörler kullanıyor. Ayrıca, VR başlığı 360 yönelimde görüşlere sahip olmak için jiroskop sensörünü kullanır
Bu nedenle, ivmeölçer doğrusal ivmeyi ölçebilirken, jiroskop dönme ivmesini bulmaya yardımcı olabilir. Her iki sensörü de ayrı modüller olarak kullanırken yön, konum ve hız bulmak zorlaşır. Ancak iki sensörü birleştirerek Atalet Ölçüm Birimi (IMU) olarak çalışır. Dolayısıyla MPU6050 modülünde, yön, konum ve hızı bulmak için tek bir PCB üzerinde ivmeölçer ve jiroskop bulunur.
Uygulamalar:
- Dronlarda yön kontrolü için kullanılır
- Kendi kendini dengeleyen robotlar
- Robotik kol kontrolü
- Eğim sensörü
- Cep telefonlarında, Video oyun konsollarında kullanılır
- İnsansı Robotlar
- Uçak, Otomotiv vb.
MPU6050 İvmeölçer ve Jiroskopik Sensör Modülü
MPU6050, içinde 3 eksenli İvmeölçer ve 3 eksenli Jiroskoptan oluşan bir Mikro Elektro-Mekanik Sistemlerdir (MEMS). Ayrıca sıcaklık sensörüne sahiptir.
Şunları ölçebilir:
- Hızlanma
- Hız
- Oryantasyon
- Yer değiştirme
- Sıcaklık
Bu modülün içinde ayrıca karmaşık hesaplama yapmak için yeterince güçlü olan ve böylece Mikroişlemci için işi serbest bırakan bir (DMP) Dijital Hareket İşlemcisi bulunur.
Modülde ayrıca manyetometre gibi harici IIC modüllerine arayüz oluşturmak için kullanılabilen iki yardımcı pim vardır. Modülün IIC adresi yapılandırılabilir olduğundan, AD0 pini kullanılarak bir Mikroişlemciye birden fazla MPU6050 sensörü arabirimlenebilir.
Özellikler ve Özellikler:
- Güç Kaynağı: 3-5V
- İletişim: I2C protokolü
- Dahili 16 bit ADC, yüksek doğruluk sağlar
- Dahili DMP, yüksek hesaplama gücü sağlar
- Manyetometre gibi diğer IIC cihazlarıyla arayüz oluşturmak için kullanılabilir
- Yapılandırılabilir IIC Adresi
- Dahili Sıcaklık sensörü
MPU6050'nin pin çıkışı:
PIN numarası | Pin Adı | Kullanım |
1 | Vcc | Modüle güç sağlar, + 3V ile + 5V arasında olabilir. Tipik olarak + 5V kullanılır |
2 | Zemin | Sistemin zeminine bağlı |
3 | Seri Saat (SCL) | I2C İletişimi için saat darbesi sağlamak için kullanılır |
4 | Seri Veriler (SDA) | Verileri I2C iletişimi yoluyla aktarmak için kullanılır |
5 | Yardımcı Seri Veriler (XDA) | Diğer I2C modülleri ile MPU6050 arasında arayüz oluşturmak için kullanılabilir. İsteğe bağlıdır |
6 | Yardımcı Seri Saat (XCL) | Diğer I2C modülleri ile MPU6050 arasında arayüz oluşturmak için kullanılabilir. İsteğe bağlıdır |
7 | AD0 | Birden fazla MPU6050 tek bir MCU kullanılıyorsa, bu pin adresi değiştirmek için kullanılabilir. |
8 | Kesinti (INT) | Verilerin MCU tarafından okunması için mevcut olduğunu belirtmek için kesme pini. |
Daha önce Arduino ile MPU6050'yi Self Balancing Robot ve Inclinometer oluşturmak için kullandık.
Gerekli Bileşenler
- Arduino UNO
- MPU6050 Jiroskop Modülü
- 16x2 LCD Ekran
- Potansiyometre 10k
- SG90-Servo Motor
- Açıölçer Resmi
Devre şeması
Bu DIY Arduino Açıölçer için devre şeması aşağıda verilmiştir:
Arduino UNO ve MPU6050 arasındaki Devre Bağlantıları:
MPU6050 |
Arduino UNO |
VCC |
+ 5V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Arduino UNO ve Servo Motor arasındaki Devre Bağlantıları:
Servo Motor |
Arduino UNO |
KIRMIZI (VCC) |
+ 5V |
TURUNCU (PWM) |
9 |
KAHVERENGİ (GND) |
GND |
Arduino UNO ve 16x2 LCD arasındaki Devre Bağlantıları:
LCD ekran |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Potansiyometre Merkez PIN'ine LCD Kontrastını Kontrol Etmek İçin |
RS |
2 |
RW |
GND |
E |
3 |
D4 |
4 |
D5 |
5 |
D6 |
6 |
D7 |
7 |
Bir |
+ 5V |
K |
GND |
Programlama Açıklaması
Her zamanki gibi, bir Demonstrasyon videosu ile birlikte programın tamamı bu eğitimin sonunda verilmiştir.
Burada servo motor Arduino ile bağlanır ve mili eğimli MPU6050'nin açısını gösteren açıölçer görüntüsü üzerine yansıtılır. Bu öğretici için programlama basittir. Ayrıntılı olarak görelim.
Öncelikle gerekli tüm kitaplıkları ekleyin - Servo kullanmak için Servo Motor kitaplığı, LCD kullanmak için LCD kitaplığı ve I2C iletişimini kullanmak için Tel kitaplığı.
MPU6050, I2C İletişimini kullanır ve bu nedenle yalnızca Arduino'nun I2C Pinlerine bağlanmalıdır. Bu nedenle, Wire.h kitaplığı, Arduino UNO ile MPU6050 arasında iletişim kurmak için kullanılır. Daha önce MPU6050'yi Arduino ile arayüzledik ve 16x2 LCD'de x, y, z koordinat değerlerini görüntüledik.
#Dahil etmek
Daha sonra Arduino UNO'ya bağlı olan RS, E, D4, D5, D6, D7 LCD ekran pinlerini tanımlayın.
LiquidCrystal lcd (2,3,4,5,6,7);
Daha sonra MPU6050'nin I2C adresi tanımlanır.
const int MPU_addr = 0x68;
Ardından, X, Y ve Z ekseni değerlerini depolamak için Servo sınıfı ve üç değişkeni kullanmak için myservo nesnesini başlatın .
Servo myservo; int16_t axis_X, axis_Y, axis_Z;
0'dan 360'a ölçüm açısı için sonraki minimum ve maksimum değer 265 ve 402 olarak ayarlanır.
int minVal = 265; int maxVal = 402;
geçersiz kurulum ():
Gelen boşluk kurulum fonksiyonu ilk I2C iletişimi başlatılır ve iletim 0x68 adresi ile MPU6050 ile başladı.
Wire.begin (); Wire.beginTransmission (MPU_addr);
MPU6050'yi 0x6B yazarak Uyku Moduna getirin ve ardından 0 yazarak uyandırın.
Wire.write (0x6B); Wire.write (0);
MPU6050'yi etkinleştirdikten sonra iletimi sonlandırın
Wire.endTransmission (doğru);
Burada Servo motorun PWM pini Arduino UNO pin 9 ile bağlanır.
myservo.attach (9);
Devreyi açar açmaz, LCD bir karşılama mesajı görüntüler ve 3 saniye sonra temizler.
lcd.begin (16,2); // LCD'yi 16X2 Modunda ayarlar lcd.print ("CIRCUIT DIGEST"); gecikme (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); gecikme (3000); lcd.clear ();
geçersiz döngü ():
Yine I2C iletişimi MPU6050 ile başlar.
Wire.beginTransmission (MPU_addr);
Ardından 0x3B (ACCEL_XOUT_H) kaydı ile başlayın
Wire.write (0x3B);
Artık işlem, yanlış olarak ayarlanmış son aktarımla yeniden başlatılır, ancak bağlantı aktiftir.
Wire.endTransmission (yanlış);
Bundan sonra şimdi 14 kayıttan veri talep edin.
Wire.requestFrom (MPU_addr, 14, doğru);
Şimdi saygın eksen kayıt değerleri (x, y, z) elde edilir ve axis_X, axis_Y, axis_Z değişkenlerinde saklanır.
axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Sonra 265'ten 402'ye -90'dan 90'a kadar olan bu değerleri eşleştirin. Bu, üç eksen için yapılır.
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);
Derece cinsinden (0 ila 360) x değerini hesaplamak için formül aşağıda verilmiştir. Burada sadece x'i dönüştürüyoruz çünkü servo motor dönüşü x değeri hareketine dayanıyor.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
0 ile 360 derece arasındaki X açı değeri, 0'dan 180'e dönüştürülür.
int pos = harita (x, 0,180,0,180);
Ardından servoyu iletki görüntüsünde döndürmek için açı değerini yazın ve bu değerleri 16x2 LCD ekranda yazdırın.
myservo.write (konum); lcd.setCursor (0,0); lcd.print ("Açı"); lcd.setCursor (0,1); lcd.print (x); gecikme (500); lcd.clear ();
Dolayısıyla , açıyı ölçmek için Arduino ile MPU6050 kullanılabilir. Bu proje için tam kod ve video aşağıda verilmiştir.