İçindekiler:

Arduino ve Android ile Gerçek Zamanlı MPU-6050/A0 Veri Kaydı: 7 Adım (Resimlerle)
Arduino ve Android ile Gerçek Zamanlı MPU-6050/A0 Veri Kaydı: 7 Adım (Resimlerle)

Video: Arduino ve Android ile Gerçek Zamanlı MPU-6050/A0 Veri Kaydı: 7 Adım (Resimlerle)

Video: Arduino ve Android ile Gerçek Zamanlı MPU-6050/A0 Veri Kaydı: 7 Adım (Resimlerle)
Video: Raspberry Pi Dersleri 5 I2C Protokolü ve SMBUS Kütüphanesini Kullanarak MPU6050 ile Haberleşme 2024, Temmuz
Anonim
Arduino ve Android ile Gerçek Zamanlı MPU-6050/A0 Veri Kaydı
Arduino ve Android ile Gerçek Zamanlı MPU-6050/A0 Veri Kaydı

Arduino'yu makine öğrenimi için kullanmakla ilgileniyorum. İlk adım olarak, bir Android cihazla gerçek zamanlı (veya buna oldukça yakın) bir veri görüntüleme ve kaydedici oluşturmak istiyorum. MPU-6050'den ivmeölçer verilerini yakalamak istiyorum, bu yüzden yapıyı HC-05'i 115200 baud'da kullanacak şekilde tasarladım. Bu konfigürasyon ile saniyede 250 örnekte 4 kanal veri iletilebilir.

Yapının birkaç adımı vardır:

  • Kalkanı veya devre tahtası oluşturun
  • Arduino'yu programlayın
  • Android uygulamasını Google Play'den yükleyin veya GitHub'ı dallandırın ve kendiniz derleyin
  • MPU-6050'yi titreşen ilginç bir şeye bağlayın (bir R/C araba kullandım)
  • Arduino'ya bağlanmak için Android cihazını kullanın
  • Verileri çizin, ilgileniyorsanız kaydedin
  • Daha fazla kullanım için Python'a (veya başka bir platforma) aktarın

Başlayalım!

Adım 1: Kalkanı/breadboard'u oluşturun

Kalkanı/breadboard'u oluşturun
Kalkanı/breadboard'u oluşturun
Kalkanı/breadboard'u oluşturun
Kalkanı/breadboard'u oluşturun

Bu Arduino, HC-05 ve MPU-6050 için bağlantı şemasıdır. MPU-6050'ye ek olarak, ADC'nin çalıştığını göstermek için bir ışık sensörüne bağlanmış A0 analog girişine sahibim. Herhangi bir 0-5 volt sinyali A0 ADC'ye getirilebilir. Bunlar derleme için kullandığım bileşenler:

  • Arduino Uno
  • HC-05 (HC-06 da çalışmalı, ancak benim yapımım HC-05 ile yapıldı)
  • MPU-6050
  • Sparkfun fotodirenci
  • 10kOhm direnç (kahverengi-siyah-turuncu)

Çoğu HC-05 Bluetooth modülü varsayılan olarak 9600 baud'dur. Verilerin başarılı bir şekilde iletilmesi için, 115200 baud hızı için yeniden programlamanız gerekecektir. Nasıl yapılacağını açıklayan iyi bir HC-05/HC-06 AT Command Instructable var.

Adım 2: Arduino'yu Programlayın

Arduino'yu programlayın
Arduino'yu programlayın
Arduino'yu programlayın
Arduino'yu programlayın

Arduino'yu programlamak için Arduino IDE 1.6.7 sürümünü kullandım. Kod, bu adımdaki bağlantılardan veya GitHub deposundan indirilebilir. Üç versiyon ekledim: Firmware125.ino 125 hertz versiyonu, Firmware250.ino 250 hertz versiyonu ve Firmware500.ino 500 hertz versiyonu. Arduino'nun 500 hertz'de dönmesini sağlamak için A0 ADC toplanmaz.

Bellenim, zamanlamayı kontrol etmek için kullandığım Pin 9'da bir saat çıkışı içeriyor. İz, döngü süresinin 4 ms (1/250 hertz'e eşdeğer) olduğunu gösterir. Seri bağlantı sorunları varsa zamanlamanın tek tip olmayacağını buldum.

Arduino kodu, örnekler bazen Bluetooth üzerinden düştüğü için her pakete bir kanal numarası eklemek için bit maskeleme kullanır. Bir kanal numarasını saklamak için en önemli üç biti kullanırım. İşaretli tamsayılar için en anlamlı bit (MSB) işaret için ayrılmıştır. Adresimde tamsayı işareti yerine MSB kullanmak istediğim için işaretli ivmeölçer değerlerinin hepsini işaretsiz tam sayılara çevirmem gerekiyor. Bunu, her değere 32768 ekleyerek (MPU ivmeölçer ADC sayıları +32768 ila -32768 arasındadır) ve işaretsiz tamsayılar olarak yayınlayarak yapıyorum:

(imzasız int)((uzun)iAccelData+32767);

Kanal numaraları, her ivmeölçer ve A0 bağlantı noktası için aynıdır, böylece kanal numaraları bozuksa bırakılan bir paket algılanabilir. Arduino'daki Bluetooth'tan gelen paketler için ikili desen (işaretler bit bazında değişiyor):

(xacc 3 adres biti = 0x00, 13 bit işaretsiz) (yacc 3 adres biti = 0x01, 13 bit işaretsiz) (zacc 3 adres biti = 0x02, 13 bit işaretsiz) (3 adres biti = 0x03, iadc13bit işaretsiz)

(xacc 3 adres biti = 0x00, 13 bit işaretsiz) (yacc 3 adres biti = 0x01, 13 bit işaretsiz) (zacc 3 adres biti = 0x02, 13 bit işaretsiz) (3 adres biti = 0x03, iadc13bit işaretsiz) (xacc 3 adres biti = 0x00, 13bit işaretsiz) (yacc 3 adres biti = 0x01, 13bit işaretsiz) (zacc 3 adres biti = 0x02, 13bit işaretsiz) (3 adres biti = 0x03, iadc13bit işaretsiz) …

Bluetooth verilerini okumak için Accel Plot Android uygulamasından başka bir şey kullanıyorsanız, adresi çıkarma adımları şunlardır (GitHub deposundaki Accel Plot Bluetooth.java dosyasındaki değişken adlarını kullanıyorum):

- 16 imzasız int'yi okuyun

- Yüksek baytı ayıklayın ve btHigh'a kaydedin.

- Düşük baytı ayıklayın ve btLow'a kaydedin.

- Adresi btHigh'dan (btHigh >> 5) & 0x07 kullanarak alın. Bu ifade, üç adres bitini en alttaki üç kayda taşıyarak btHigh 5 biti sağa kaydırır. & işareti, 4 ve daha yüksek bitleri sıfır olmaya ve son üç biti adres bitleriyle eşleşmeye zorlayan mantıksal bir AND'dir. Bu ifadenin sonucu adresinizdir.

Accel Plot kullanıyorsanız, adres çıkarma konusunda endişelenmenize gerek yok.

3. Adım: Android Uygulamasını Google Play'den Yükleyin veya GitHub'ı Şubelendirin

Android Uygulamasını Google Play'den Yükleyin veya GitHub'ı Şubelendirin
Android Uygulamasını Google Play'den Yükleyin veya GitHub'ı Şubelendirin

Android uygulamasını cihazınıza yüklemek için birkaç seçeneğiniz var. Kodlamadan kaçınmak istiyorsanız, "Accel Plot" için arama yapabilirsiniz ve uygulama Google Play mağazasında gelmelidir. Kurulum için mağaza talimatlarını izleyin.

Bu Instructable ile olan arzum, gerçekten başkalarını proje oluşturmaya teşvik etmektir, bu yüzden kodu bir GitHub deposunda da yayınladım. Bunu dallandırabilmeli, inşa edebilmeli ve uygun gördüğünüz şekilde değiştirebilmelisiniz. Kodu MIT Lisansı altında yayınladım, iyi eğlenceler!

Adım 4: Arduino'yu İlginç Bir Şeye Bağlayın (Bir R/C Araba Kullandım)

Arduino'yu İlginç Bir Şeye Bağlayın (Bir R/C Araba Kullandım)
Arduino'yu İlginç Bir Şeye Bağlayın (Bir R/C Araba Kullandım)

Sonunda cihazı yol yüzeyi tespiti için kullanmak istiyorum, bu yüzden küçük bir uzaktan kumandalı (R/C) arabanın uygun olacağını düşündüm. Hızlanmaların hareket eden veya titreyen bir şey üzerinde olabilmesinin bir sonraki adımda yardımcı olacağını düşünüyorum.

Adım 5: Arduino'ya Bağlanmak için Android Aygıtını Kullanın

Arduino'ya Bağlanmak için Android Cihazı kullanın
Arduino'ya Bağlanmak için Android Cihazı kullanın
Arduino'ya Bağlanmak için Android Cihazı kullanın
Arduino'ya Bağlanmak için Android Cihazı kullanın
Arduino'ya Bağlanmak için Android Cihazı kullanın
Arduino'ya Bağlanmak için Android Cihazı kullanın

Henüz yapmadıysanız, önce HC-05'i Android cihazınızla eşleştirmeniz gerekecektir. Çoğu cihazda bunu ayarlara giderek yapabileceğinize inanıyorum. Çoğu HC-05 cihazı için varsayılan pin 1234 veya 1111 olacaktır.

Android cihazda AccelPlot uygulamasını açın. Uygulama açıldığında ve HC-05'e bağlanmadan önce, örnekleme hızını (bu Arduino kodunda ayarlanır), ivmeölçer ölçeklerini (Arduino kodunda da ayarlanır) ve kaydedilecek örnek sayısını değiştirebilirsiniz.

Bu ayarlar yapıldıktan sonra "Bağlan" düğmesine tıklayın. Bluetooth cihazlarını açmalı ve cihazınız listelenmelidir. Onu seçin ve kod bağlantıyı kurduğunda "Bağlı" bir tost açılır penceresi göreceksiniz.

Accel Plot'a dönmek için geri ok düğmesini kullanın. HC-05 cihazından gelen verileri görüntülemek için "Akış Başlat" düğmesine dokunun. Verileri kaydetmek veya frekans modülasyonlu içeriği ses jakı aracılığıyla oynatmak için düğmeler de mevcut olmalıdır.

Adım 6: Verileri Alın ve Çizin

Image
Image
Daha Fazla Kullanım için Python'a (veya Diğer Platforma) Aktarın
Daha Fazla Kullanım için Python'a (veya Diğer Platforma) Aktarın

"Yayını Başlat" düğmesi etkinleştirilmelidir. Ekrana veri akışına başlamak için buna dokunun.

"Verileri Kaydet" düğmesi de etkinleştirilecektir, verileri depolamak için buna dokunun.

Accel Plot ayrıca, ses kanallarında modüle edilmiş bir sinyal çıkışı için bir seçenek içerir. Accel Plot uygulamasındaki 2 kanal, Android cihazdaki ses çıkış jakının sol ve sağ kanallarını ifade eder. Bu, MPU-6050 verilerini National Instruments gibi ayrı bir veri kayıt sistemine getirmek istiyorsanız kullanışlıdır.

Video, bir R/C arabada veri toplayan sistemin bir örneğini göstermektedir.

Adım 7: Daha Fazla Kullanım için Python'a (veya Diğer Platforma) Aktarın

Daha Fazla Kullanım için Python'a (veya Diğer Platforma) Aktarın
Daha Fazla Kullanım için Python'a (veya Diğer Platforma) Aktarın

Dosyalar Android cihaza kaydedilir. Dosyalar, Android API 18 ve daha eski sürümler için "AccelPlot" dizini altında saklanacaktır. Kod,.dat dosyalarını API 19 (KitKat 4.4) ve üstü için "\Tablet\Documents\AccelPlot" klasörüne yerleştirir. USB üzerinden bağlandığında dosyaları gösteren bazı Android cihazlarda sorun yaşadım. Bazı durumlarda, görünmelerini sağlamak için Android cihazını yeniden başlatmam gerekti. Bunun neden olduğundan emin değilim, ancak her kanal için bir tane olmak üzere dört dosya olmalı. Ek çalışma için yerel bir dizine kopyalanabilirler.

Dosyaları açmak ve verileri görüntülemek için Anaconda/Python 2.7 kullandım. "ExploratoryAnalysis.ipynb" dosyası, tüm veri dosyalarını açacak ve örnek verileri çizecek olan IPython Notebook dosyasına sahiptir. Örnek dosyalar GitHub deposuna dahil edilmiştir. Veriler büyük endian 4 baytlık yüzerler ('>f') olarak kaydedilir, bu nedenle herhangi bir analiz programı bunları açabilmelidir.

Ayrıca, tek bir dosyada ada göre nasıl okunacağını gösteren "ReadDataFiles.ipynb" adlı daha basit bir dosya da ekledim.

Önerilen: