- Gerekli malzemeler:
- Devre şeması:
- Kurulumunuzu güçlendirmek:
- Arduino'nuzu programlama:
- Android Uygulamasını İşleme Kullanarak Hazırlama:
- Arduino İnklinometrenin Çalışması:
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'nin nasıl kullanılacağını öğreneceğiz bir Eğimölçer veya Ruh Düzleştirici inşa edildi. Bir yüzeyin mükemmel bir şekilde düz olup olmadığını kontrol etmek için bir eğim ölçer kullanıldığını bildiğimiz gibi, bunlar ya sprit bubble olarak ya da dijital sayaçlar olarak mevcuttur. Bu projede, bir Android uygulaması kullanılarak izlenebilen bir Dijital İnklinometre oluşturacağız.. Cep telefonu gibi bir uzak ekran kullanmanın nedeni, donanıma bakmaya gerek kalmadan MPU6050'den gelen değerleri izleyebilmemizdir; bu, MPU6050 bir drone veya başka erişilemeyen yerlere yerleştirildiğinde çok kullanışlı olacaktır.
Gerekli malzemeler:
- Arduino Pro-mini (5V)
- MPU6050 Gyro Sensörü
- HC-05 veya HC-06 Bluetooth modülü
- FTDI kurulu
- Breadboard
- Bağlantı telleri
- Akıllı Telefon
Devre şeması:
Bu Arduino Eğim Sensörü Projesi için eksiksiz devre şeması aşağıda gösterilmiştir. Yalnızca üç bileşeni vardır ve devre tahtası üzerine kolayca inşa edilebilir.
MPU6050, I2C yardımıyla haberleşir ve dolayısıyla SDA pini, SDA pini olan Arduino'nun A4 pinine ve SCL pini Arduino'nun A5 pinine bağlanır. HC-06 Bluetooth Modülü dolayısıyla Bluetooth Rx pin pin D11 ve Bluetooth Tx pimi Arduino pin D10 bağlanır bağlı olduğu seri haberleşme yardımı ile çalışır. Bu pin D10 ve D11, Arduino programlanarak Seri pin olarak yapılandırılacaktır. HC-05 modülü ve MSP6050 modülü + 5V üzerinde çalışır ve dolayısıyla yukarıda gösterildiği gibi Arduino'nun Vcc pini tarafından çalıştırılırlar.
Bazı breadboard bağlantı kabloları kullandım ve kurulumu küçük bir devre tahtası üzerine inşa ettim. Bağlantılar yapıldıktan sonra panom aşağıdaki gibi görünüyor.
Kurulumunuzu güçlendirmek:
Devrenize benim yaptığım gibi FTDI programlama panosu aracılığıyla güç sağlayabilir veya 9V pil veya 12V adaptör kullanarak Arduino pro mini'nin Raw pinine bağlayabilirsiniz. Arduino Pro-mini, bu harici voltaj regülasyonlu + 5V'u dönüştürecek dahili bir voltaj regülatörüne sahiptir.
Arduino'nuzu programlama:
Donanım hazır olduğunda Arduino'muzu programlamaya başlayabiliriz. Her zaman olduğu gibi, bu proje için tam kod bu sayfanın altında bulunabilir. Ancak projeyi daha iyi anlamak için kodu küçük parçalara böldüm ve aşağıdaki adımlar olarak açıkladım.
İlk adım MPU6050 ile Arduino arasında arayüz oluşturmak olacaktır. Bu proje için Korneliusz tarafından geliştirilen ve aşağıdaki linkten indirebileceğiniz kütüphaneyi kullanacağız.
MPU6050 Liberty - Korneliusz Jarzebski
ZIP dosyasını indirin ve Arduino IDE'nize ekleyin. Ardından Dosya-> Örnekler-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw'a gidin . Bu, indirdiğimiz kitaplığı kullanan örnek programı açacaktır. Bu yüzden yüklemeye tıklayın ve programın Arduino Pro mini'nize yüklenmesini bekleyin. Bu yapıldıktan sonra seri monitörünüzü açın ve baud hızınızı 115200'e ayarlayın ve aşağıdakileri alıp almadığınızı kontrol edin.
Başlangıçta, üç değerin tümü sıfır olacaktır, ancak devre tahtanızı hareket ettirirken bu değerlerin değiştiğini görebilirsiniz. Değişirlerse, bağlantınızın doğru olduğu anlamına gelir, aksi takdirde bağlantılarınızı kontrol edin. Burada biraz zaman ayırın, Pitch Roll ve Yaw üç değerinin sensörünüzü eğme şeklinize göre nasıl değiştiğine dikkat edin. Kafanız karışırsa Arduino'daki sıfırlama düğmesine basın ve değerler yeniden sıfırlanacak, ardından sensörü bir yöne doğru eğin ve hangi değerlerin değiştiğini kontrol edin. Aşağıdaki resim daha iyi anlamanıza yardımcı olacaktır.
Bu üç parametreden sadece Roll ve Pitch ile ilgileniyoruz. Roll değeri bize X eksenindeki eğimi anlatacak ve Pitch değeri bize Y Eksenindeki eğimi anlatacaktır. Artık temelleri anladığımıza göre, Arduino'yu Bluetooth üzerinden Arduino'ya göndererek bu değerleri okumak için programlamaya başlayalım. Her zaman olduğu gibi, bu proje için gerekli tüm kütüphaneleri ekleyerek başlayalım
#Dahil etmek
Ardından Bluetooth modülü için yazılım serisini başlatıyoruz. Bu, Arduino'daki Yazılım Seri kütüphanesi nedeniyle mümkündür, IO pinleri Seri pinler olarak çalışacak şekilde programlanabilir. Burada D10 id Rx ve D11'in Tx olduğu D10 ve D11 dijital pinlerini kullanıyoruz.
Yazılım Seri BT (10, 11); // RX, TX
Bunu takiben , program için gerekli değişkenleri ve nesneleri başlatıyoruz ve Seri monitör ve Bluetooth için baud hızını belirlediğimiz setup () işlevine geçiyoruz. HC-05 ve HC-06 için baud hızı 9600'dür, bu yüzden aynısını kullanmak zorunludur. Daha sonra Arduino'nun IIC veriyolunun MPU6050'ye bağlı olup olmadığını kontrol ederiz, yoksa bir uyarı mesajı yazdırır ve cihaz bağlı olduğu sürece orada kalırız. Bundan sonra Gyro'yu kalibre ediyoruz ve aşağıda gösterildiği gibi ilgili işlevlerini kullanarak eşik değerlerini belirliyoruz.
geçersiz kurulum () {Serial.begin (115200); BT.başlangıç (9600); // Bluetooth iletişimini 9600 baud hızında başlat // MPU6050'yi başlatırken (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Geçerli bir MPU6050 sensörü bulunamadı, kablolamayı kontrol edin!"); gecikme (500); } mpu.calibrateGyro (); // Jiroskopu başlatma sırasında kalibre et mpu.setThreshold (3); // Hassasiyeti kontrol eder}
" Mpu.calibrateGyro ();" satırı MPU6050'yi şu anda yerleştirildiği konum için kalibre edin. Bu satır, MPU6050'nin kalibre edilmesi gerektiğinde ve tüm değerlerin sıfıra ayarlanması gerektiğinde program içinde birden çok kez çağrılabilir. "Mpu.setThreshold (3);" bu işlev, sensör üzerindeki hareket için değerin ne kadar değiştiğini kontrol eder, çok düşük bir değer gürültüyü artırır, bu nedenle bununla uğraşırken dikkatli olun.
İçinde boşluk döngü (), biz defalarca Jiroskop değerlerini ve okumak Sıcaklık sensörü zift, rulo ve yaw değerini hesaplamak, Bluetooth modülüne göndermek. Aşağıdaki iki satır, ham Gyro değerlerini ve sıcaklık değerini okuyacaktır.
Vektör norm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Daha sonra, zaman adımıyla çarparak ve önceki değerlere ekleyerek eğimi, dönüşü ve sapmayı hesaplıyoruz. Bir timeStep , ardışık okumalar arasındaki aralıktan başka bir şey değildir.
adım = adım + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = sapma + norm.ZAxis * timeStep;
Zaman adımını daha iyi anlamak için aşağıdaki satıra bir göz atalım. Bu satır, MPU6050'den değerleri tam olarak 10 mS veya 0,01 saniye aralığında okumak için yerleştirilir. Bu yüzden timeStep'in değerini 0.01 olarak ilan ediyoruz. Daha fazla zaman varsa programı tutmak için aşağıdaki satırı kullanın. (millis () - timer ()), programın o ana kadar çalıştırılması için geçen süreyi verir. Sadece 0.01 saniye ile çıkarıyoruz ve kalan süre için sadece gecikme fonksiyonunu kullanarak programımızı orada tutuyoruz.
gecikme ((timeStep * 1000) - (milis () - zamanlayıcı));
Değerleri okumayı ve hesaplamayı bitirdiğimizde, bunları Bluetooth aracılığıyla telefonumuza gönderebiliriz. Ama burada bir püf noktası var. Kullandığımız Bluetooth modülü yalnızca 1 bayt (8 bit) gönderebilir, bu da yalnızca 0 ile 255 arasındaki sayıları göndermemize izin verir. Bu nedenle, değerlerimizi bölmek ve bu aralığın içine eşlemek zorundayız. Bu, aşağıdaki satırlarla yapılır
eğer (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); eğer (adım> -100 && adım <100) y = harita (adım, -100, 100, 100, 200); eğer (sıcaklık> 0 && sıcaklık <50) t = 200 + int (sıcaklık);
Sizin de anlayabileceğiniz gibi, roll değeri 0'dan 100'e, değişken x'e ve adım 100'den 200'e, değişken y'ye ve temp, 200'e ve üstü t değişkenine eşlenir. Verileri gönderdiklerimizden almak için aynı bilgileri kullanabiliriz. Son olarak bu değerleri aşağıdaki satırları kullanarak Bluetooth üzerinden yazıyoruz.
BT.write (x); BT.write (y); BT.write (t);
Programın tamamını anladıysanız, programa bakmak için aşağı kaydırın ve Arduino kartına yükleyin.
Android Uygulamasını İşleme Kullanarak Hazırlama:
Bu Arduino İnklinometre için android uygulaması Processing IDE kullanılarak geliştirilmiştir. Bu, Arduino'ya çok benzer ve sistem uygulaması, Android uygulaması, web tasarımları ve çok daha fazlasını oluşturmak için kullanılabilir. Aşağıda listelenen diğer harika projelerimizden bazılarını geliştirmek için işlemeyi zaten kullandık
- Arduino kullanarak Ping Pong Oyunu
- İşleme Kullanılarak Akıllı Telefon Kontrollü FM Radyo.
- İşleme ve Ultrasonik Sensör kullanan Arduino Radar Sistemi
Ancak bu uygulamanın nasıl oluşturulacağına dair kodun tamamını açıklamak mümkün değildir. Yani bunu aşmanın iki yolu var. Ya APK dosyasını aşağıdaki bağlantıdan indirebilir ve android uygulamasını doğrudan telefonunuza yükleyebilirsiniz. Veya tam işlem kodunu bulmak ve nasıl çalıştığını kendiniz öğrenmek için aşağıya kaydırın
ZIP dosyasının içinde, android uygulamasına yüklenecek tüm görüntülerden ve diğer kaynaklardan oluşan veri adlı bir klasör bulabilirsiniz. Aşağıdaki satır , Bluetooth'un otomatik olarak hangi ada bağlanacağına karar verir
bt.connectToDeviceByName ("HC-06");
İçinde beraberlik () fonksiyonu, işler tekrar tekrar burada yürütülecektir , görüntüleri çizmek metni görüntülemek ve barlar animasyon değerlerine dayalı Bluetooth modülünü oluşturur. Programı okuyarak her fonksiyonun içinde ne olduğunu kontrol edebilirsiniz.
void draw () // Sonsuz döngü {background (0); imageMode (MERKEZ); resim (logo, genişlik / 2, yükseklik / 1.04, genişlik, yükseklik / 12); load_images (); textfun (); getval (); }
Son olarak, açıklanması gereken bir önemli şey daha var, perde, yuvarlanma ve temp değerlerini 0'dan 255'e böldüğümüzü hatırlayın. Yani burada onu normal değerlere ters eşleyerek tekrar normal değerlere geri getiriyoruz.
eğer (bilgi <100 && bilgi> 0) x = harita (bilgi, 0, 100, - (genişlik / 1.5) / 3, + (genişlik / 1.5) / 3); // x = bilgi; else if (bilgi <200 && bilgi> 100) y = harita (bilgi, 100, 200, - (genişlik / 4,5) /0,8, + (genişlik / 4,5) /0,8); // y = bilgi; else if (bilgi> 200) temp = bilgi -200; println (sıcaklık, x, y);
Bir Bluetooth modülünden telefona veri almanın çok daha iyi yolları var, ancak bu sadece bir hobi projesi olduğu için onları görmezden geldiğimiz için, ilgilenirseniz daha derine inebilirsiniz.
Arduino İnklinometrenin Çalışması:
Donanım ve Uygulama ile hazırlandıktan sonra, geliştirdiklerimizle eğlenme zamanı. Arduino Kodunu karta yükleyin, ayrıca Serial.println satırlarındaki yorumları kaldırabilir ve seri monitörü kullanarak donanımın beklendiği gibi çalışıp çalışmadığını kontrol edebilirsiniz. Her neyse, bu tamamen isteğe bağlıdır.
Kod yüklendikten sonra, cep telefonunuzda Android uygulamasını başlatın. Uygulama otomatik olarak HC-06 modülünüze bağlanmalıdır ve aşağıda gösterildiği gibi uygulamanın üstünde “Connect to: HC-06” mesajını gösterecektir.
Başlangıçta sıcaklık değeri dışındaki tüm değerler sıfır olacaktır. Bunun nedeni, Arduino'nun MPU-6050'yi referans olarak bu konum için kalibre etmesidir, şimdi donanımı eğebilir ve mobil uygulamadaki değerlerin de animasyonla birlikte değişip değişmediğini kontrol edebilirsiniz. Uygulamanın tam çalışması aşağıdaki videoda bulunabilir. Artık devre tahtasını herhangi bir yere yerleştirebilir ve yüzeyin mükemmel şekilde düz olup olmadığını kontrol edebilirsiniz.
Umarım projeyi anladınız ve ondan faydalı bir şeyler öğrendiniz. Herhangi bir şüpheniz varsa, çözmek için lütfen aşağıdaki yorum bölümünü veya forumları kullanın.