11 Ekim 2015 Pazar

STM32F4 DISCOVERY MPU6050 DMP


Merhaba arkadaşlar, geçen yazımda MPU6050 raw acc ve gyro datalarını okumuştuk. Bu yazıyı okuyup daha detaylı bilgi elde edebilirsiniz. Burada bahsetmiştim raw dataları doğru okuyabiliyorum ama DMP de sorun olduğunu. Bu yazıda kullandığımız kodlar Jeff Rowberg' in Arduino için yazdığı kodlar. Bu kodlar chibiOS için C diline çevrilmiş. Bende kodları STM işlemciler için uyarladım ve şuan da doğru bir şekilde çalışıyor. Bu kodları da githuba attım buradan kodları çekip kullanabilirsiniz. Tabi ki burada bir teşekkür etmek beni mutlu eder:))

Kodları direk çevirince dmp initialize ederken kodlar takılıyordu. Neredeyse bu kodlar için 6 aydır uğraşıyorum ve sonunda hatayı buldum. Ayrıca şunu da belirteyim Jeff Rowberg'in kodlarının dmp kısmını STM de çalıştıran bir kod bulamadım. Yani bu kodlar STM için çalışan ilk dmp kodları olabilir. Yada sizin bildiğiniz başka kodlar varsa lütfen belirtin.

Peki hata nerede, dmp kodu initialize ederken "Setting motion detection threshold to 2..." işleminden önceki MPUgetFIFOBytes(fifoBuffer, fifoCount) satırında I2C takılıyor eğer bu satırı kaldırırsak kodlar doğru bir şekilde çalışıyor. Başka bir değişikliğe gerek yok. Temelde mainde ki kodlarda şu şekilde



Bu https://github.com/srcnert/STM32F4DISCOVERY_MPU6050_DMP github adresinden kodları inceleyebilir ve içindeki Processing örnek programı ile üç boyutlu bir nesneyi kontrol edebilirsiniz.

16 Eylül 2015 Çarşamba

STM32F4 DISCOVERY ile MPU6050 Kullanımı

Merhaba arkadaşlar, bu yazıda MPU6050 sensörü ve Stm32f4 Discovery bordu ile yaptığım uygulamayı anlatacağım. Aslında sürekli paylaşılacak bir şeyler oluyor ama pek zaman olmadığı için biraz da tembellikten bilgisayarın başına geçip bir şeyler yazamadım uzun süredir. Bu yüzden bir github ve github gist hesabı açtım ve artık kodları oraya yükleyerek hem kısa hem de açıklayıcı ve yararlı yazılar yazabileceğim. Ayrıca github için bir yazı yamak gerekli gerçekten github son derece kullanışlı. 

Bu projede MPU6050 6DOF sensörünü kullandım. Robotistan aldığım MPU6050 sensörü 3 eksen gyro ve 3 eksen akselerometreye sahip bir MEMS sensör. Githubdaki kütüphane chibi için yazılmıştı, ben kendime göre port ettim ve i2c için ayrı bir kütüphane oluşturdum.. Ne yazık ki DMP kısmında problem var belki bu yazıyı okuyup hatanın nerede olduğunu söyleyen birileri olur. Simülasyon için ise Processing programında hazırladığım bir simülasyon dosyası var. Bunun ile alakalı Youtube' a bir video yükledim. Temelde benim video https://www.youtube.com/watch?v=qmd6CVrlHOM linkteki videonun düzenlenmiş hali denebilir. Kullanmak için seri porttan sprintf(str_main,"#:%.2f:%.2f:%.2f\n", compAngleRoll, compAnglePitch, 0.00f) şeklinde veri göndermeniz yeterli.

Kodlar için https://github.com/srcnert/My_Work_Place/tree/master/MPU6050 adresini kullanabilirsiniz. Bu klasörün içerisinde processing dosyası da mevcut. Kodlar temelde aşağıda ki gibi çalışmakta;





Simülasyon Processing programı ile yazıldı. Bunun için Youtube' a bir video yükledim onuda aşağıda izleyebilirsiniz. 



Umarım yararlı bir makale olmuştur. Yazıda gördüğünüz yanlışlar ve takıldığınız noktalarla alakalı mail ve mesaj atabilirsiniz:) Herkese iyi çalışmalar......................

22 Temmuz 2015 Çarşamba

HC05 Bluetooth Modül ve Android ile Haberleşmesi

Bu yazımda HC-05 Bluetooth modülünü kullanarak Android ve Stm32f4 discovery kitimizin bluetooth üzerinden haberleşmesini sağlayacağız. Öncelikle HC05 modülünün özellikleri ile başlayalım;


Bu modül Bluetooth SSP(Serial Port Standart) kullanımı ve  kablosuz seri haberleşme uygulamaları için tasarlanmıştır. Kullandığı bluetooth Protokolü: Bluetooth 2.0+EDR ve
çalışma gerilimi 3.3V dur.

Şimdi kitimizin şemasına göz atalım;







RX/TX herhangi bir işlemci ile uart üzerinden haberleşmemiz için,

RESET pini bluetooth modülümüzü resetlemek için (AT komut setine geçmek için kullanılıyor),

AT pini -> GND bağlı ise UART Mode da kullanmak için
              -> 3.3V bağlı ise AT komut setini kullanmak için.(AT bacağını 3.3V bağladıktan                                     sonra reset butonuna basmak gerekiyor.)

CONNECT/DISCONNECT pini (LED2) cihaz paired edildiği zaman led yanıyor, bağlantı yok ise sönüyor.

COMMUNICATION (LED1) pini bağlantı yok ise led hızlı yanıp sönüyor, bağlantı gerçekleşince yavaşlıyor. Ayrıca At modun da modülü çalıştırırsak yine yavaş yanıp sönüyor.



Şimdi ilk olarak modül ile Windows bilgisayarınızı birbirine bağlayacağız



Öncelikle Device Manageri açıyoruz ve  ayarlarımızın yukarıdaki resimdeki gibi olduğundan emin oluyoruz.





Daha sonra yukarıdaki resimdeki gibi Add device diyoruz ve eklemek istediğimiz cihazı seçiyoruz.




Cihaz paired edildikten sonra bluetooth cihazın hangi porta olduğunu cihaz ayarlarından öğreniyoruz.Bu işlemlerden sonra Communication ledimiz yavaş yanmaya başlayacak fakat şu an bağlantı ledimiz yanmıyor olacak. 


Şimdi terminal üzerinden COM8 e bağlanırsak windows ile HC05 arasında bağlantı kurulmuş olacak ve connection ledimiz yanmaya başladı. Bunu test etmek için cihazın rx ve tx bacaklarını bir usb to rs 232 dönüştürücüye bağlamamız gerekiyor. Daha sonra serial terminaller arsında veri alışverişi yapabilirsiniz.






İkinci olarak HC05 modül ile android arasında veri alışverişi için ise şu https://github.com/WorkPalace/AndroidforHC05 paylaştığım uygulamayı kullanabilirsiniz. ListView de bağlanmak istediğiniz cihazı seçip tıklamanız yeterli. Write buttonuna dediğiniz zaman veri yazabilir ve herhangi bir veri geldiğinde textview parse edebilirsiniz. STM kısmı ile led yakıp södürebilir veya STM RTC modülü ile elde ettiğimiz saat verisini yaza bilirsiniz. Fakat stm kısmını kullanmadan da write ve read kısmını kullanarak kendi işlemcimiz ile android arasında hc 05 modülü ile haberleşme sağlayabiliriz.



Son olarakta AT Modunun nasıl çalıştığında bahsetmek istiyorum bunun için AT pinini 3.3V bağlayıp reset butonuna basıyoruz. Daha sonra realterm ile 38400 baudrate de bağlanıyoruz. AT cazıp send ascii butonuna bastığımız zaman her şey yolunda ise OK cevabını görmemiz gerekiyor. AT+NAME? ile cihazın ismini öğrenebilir yada AT+NAME=--- ile de cihazımızın ismini değiştirebiliriz. Bu yaptığımız değişikliklerden sonra AT+SAVE komutunu kullanıyoruz ve cihaza reset atıyoruz. AT komutları ile ilgili daha ayrıntılı bilgi için cihazın pdf dosyasını inceleyebilirsiniz. 

Umarım yazı yararlı olmuştur. Gördüğünüz yanlışları ve yorumlarınızı bekliyorum.