C# Arduino İletişimi Bu yazımızda arduinodaki mpu6050(6 eksenli jiroskop-ivme sensörü), hc-05(bluetooth sensörü) aracılığıyla c# taki serialport1 i haberleştireceğiz. Sensörden aldığımız verileri her eksen boyunca grafik çizip değerleri SQL veritabanına ekleyeceğiz ve log.txt adlı text dosyasınada kayıt edeceğiz. Öncelikle gereken malzemeleri gözden geçirelim. Breadboard Jumper Kablo Arduino Nano HC-05(Bluetooth Sensörü) MPU6050(6 Eksenli gyro-acc sensörü) 1 adet LED İlk olarak çalışma tahtamızdaki sensörlerimizi ve ledimizi jumper kablolarla arduino nanomuza entegre edelim. *Fritzing devre çizimi github kodlarının içinde bulunmaktadır. Sensörlerimizin arduino nano ile bağlantılarını kontrol
edelim. Arduino nanoyu bilgisayarımıza bağlayalım. Arduino nun kendi derleyicisini açalım. Araçlar kısmına girelim. Bu kısımda kartımızı ve portumuzu seçili olduğuna dikkat edelim. Artık yavaş yavaş işin kod kısmına geçelim. [crayon-5cc210be46eb8881251416/] İlk önce arduinomuzdaki kütüphaneleri ve define edeceğimiz değerleri tanımladık. Arduino derleyicisine her kütüphane ekli olamayacağından dolayı I2Cdev, MPU6050, SoftwareSerial kütüphanelerini ayrı ayrı indirip programın yüklü olduğu yerdeki libraries kısmına atmamız gerekmektedir. [crayon-5cc210be46ec4692412022/] Yukarıdaki kod parçacığında mpu6050 sensörümüzdeki 6 eksen değerini 3 jiroskop 3 ivme olarak her biri için ayrı ayrı tamsayılı değişkenlere atadık. Amacımız burada aldığımız 6 değeri serialport ekranına aralarına ; ile yazdırıp bluetooth sensörü ile C sharp a göndermektir. C sharp ta her bir değeri ayrı ayrı okuyup her bir değer için grafik
çizilecektir. Arduino muzun değer döndürdüğünü veya düzgün çalışmasını anlamamız için 12. pine keyfi led bağladık. Her değer okunduğu zaman ledimiz true değerini döndürecektir. [crayon-5cc210be46ecb233267816/] Genel olarak void setup() fonksiyonuna arduinomuzun hangi portuna hangi sensörün bağlandığını gösteririz ve serialportun kaç baud değeri alacağını yazarız.(1200-2400-4800-9600-19200-38400 )Baud değerleri iletişim hızını ifade eder. [crayon-5cc210be46ed5342696730/] mpu6050 sensörünü void setup() kısmında başlatması komutunu verdik ve arduinoya değer göndereceği için INPUT olarak tanımladık. [crayon-5cc210be46edb522082877/] Mpu6050 sensörümüzün default değerlerini ve statü değerlerini belirtildi. Ledimizin arduinomuzdan OUTPUT olduğunu belirttik yani ledimizn portunda değer okuma işlemi değilde true veya false gönderme işlemi yapacak. [crayon-5cc210be46ee1156718844/] Mpu6050 sensörümüzden alınan verilerimizin birikmesi sonucu aldığımız Overflow hatasının gösterimi.ancak programımızda sadece değerleri okuma üzerine yaptığımızdan dolayı serialportta Overflow hatası yediğimizi yazdırmadım. [crayon-5cc210be46eec560980602/] Mpu6050 sensörümüzden gelen verileri matematiksel hesaplamalar sonucu başta tanımladığımız gyro-x gyro-y gyro-z acc-x acc-y acc-z değerlerine teker teker atadık. Serialportta yazdırırken aralarına ; ekledik. C # tan aralarındaki ; göre okuyacağız. delay(850) yaparak C# programımızı sensörümüzden aldığımız verilerin bombardımanından az da olsa rahatlattık. Her 850 milisaniyede 6 değer döndürecek şekilde programladık. [crayon-5cc210be46ef4693522531/] Cihazımız 48 değerini döndürüyorsa programımız seri portuna mesaj yazıp 1 saniye bekledikten sonra resetfunc fonksiyonuna gidiyor.
Şuanda arduinoya yazacağımız kodumuz bitti. Derleyip çalıştırınız. Eğer hata alıyorsanız kabloları düzgün taktığınıza, kütüphanenizi düzgün yüklediğinize, arduino yu güncellediğinize dikkat ediniz. Eğer sorununuz geçmediyse bizle irtibata geçiniz. Şimdi visual studio dan c# windows form oluşturalım.windows Formumuza 2 tane chart(grafik ekleyelim). 2 adet combobox,listview,2 adet buton,1 adet textbox ekleyelim. Şimdi gelelim c sharp kodumuza öncelikle: [crayon-5cc210be46ef9723519763/] Lazım olacak kütüphanelerimizi ekleyelim. [crayon-5cc210be46f02412493464/] Arduinomuzdan çekeceğimiz 6 adet verinin her biri için ayrı ayrı diziler tanımladık Arduinomuzdaki portları ports adlı diziye ekledik. SQL database sini oluşturduğumuz tabloyu tanımladık. Tablomuz : [crayon-5cc210be46f0a492453231/]
Form ekranımız yüklenirken combobox1 e ports dizimizdeki değeri atadık. Serialporttaki baudrate leri combobox2 ye yazdırdık ve label le form1 yüklenirken bağlı olmadığını yazdırdık. Bu try catch() bloğunda log.txt dosyasını oluşturduk. [crayon-5cc210be46f19835305001/] Serialport ile C sharp arasındaki bağlantıyı kesme butonu oluşturduk. [crayon-5cc210be46f1f794046107/] Bu bölüm aslında programımızın en önemli parçasıdır. Arduinomuzdan çekilen verileri textbox1 e yazdırdık. veriler adında bir string dizisi oluşturduk split( ; ) komutuyla 6 tane değeri ayrı ayrı başta tanımladığımız 6 tane diziye attık.aldığımız 6 değeri önce Yaz() fonksiyonuna sonra da guncelle() fonksiyonuna yolladık. Aldığımız değerleri teker teker SQL veritabanımıza kaydettik. Listbox1 e 6 tane aldığımız değeri teker teker bastırdık. timer1 fonksiyonu içinde geçen bu alanda interval değerini 830 yaptık. [crayon-5cc210be46f27930181518/] timer1 de çağırdığımız verilerigoster() fonksiyonumuz ise timer1de yazılan ve veritabanımıza atılan değerleri teker teker göstermemizi sağlar. Ben projemde listbox da gösterdiğim için burayı açıklama parantezine aldım. İsteğe bağlı olarak projeye listview eklenip veritabanındaki değerlerde bastırılabilir. [crayon-5cc210be46f32717792355/] Dinamik bir şekilde timer1 den gelen verileri 2 ayrı(chart 5, chart 6) grafiğe bastırdık. [crayon-5cc210be46f38185257185/] Combobox tan seçtiğimiz portu ve baud değeri ile arduino arasındaki bağlantıyı doğrular. Hatalı ise hata mesajı gönderir.
[crayon-5cc210be46f53932737370/] timer1 de çağırdığımız Yaz fonksiyonu arduinodan aldığımız 6 veriyi log.txt adlı dosyamıza satır satır yapıştırır. C sharp arayüzünden yazdığımız programıda bitirdik. Şimdi arduinodaki ve bilgisayarımızdaki bluetooth sensörünü haberleştirmemiz gerekir. Projede bluetooth şifresi kullanılmamıştır. Eğer kullanmak istenirse projeye ek kod yazmanız gerekmektedir. Öncelikle arduinomuza güç verdikten sonra bilgisayarımızdan hc-05 e bluetooth ile bağlanmamız gerekir. Eşleştirme işleminde parola soracaktır. Belirlediğimiz parolayı girerek eşleştirmeyi tamamlamalıyız. Denetim Masasından > Aygıtlar ve Yazıcılara giriyoruz. Bluetooth modülümüze sağ tıklayıp Özelliklere basıyoruz. Bu kısımda yukarıda donanıma gelerek COM portumuzun numarasını öğreniyoruz. Arduino derleyicisinden araçlar kısmını açarak COM portumuzun numarasını değiştiriyoruz. Bluetooth sensörünün menzili boyunca 6 eksenli mpu6050 sensörümüz düzenli olarak c sharp veri aktarımı yapacaktır.aldığımız verileri parçalara ayırıp her bir parçayı grafik olarak gösteriyoruz. Hem SQL veritabanımıza hemde log.txt klasörümüze aldığımız sonucları yazıyoruz. Kısaca bahsetmek gerekirse Dengede duran robot,rc uçak,rc helikopter ve drone projelerinde dengeyi sağlamak amacıyla mpu6050 sıkça kullanılır eğer bir kablosuz iletim sensörüyle hc-05 hc-06 nrf24l01 veya esp8266 kullanarak projelerinizi c
sharp a seriport aracılığıyla dahil edebilirsiniz. Belki kamera takıp görüntü aktarıp hatta görüntü işlemenize bile ön adım olabilir. Görüşlerinizi yorumlarınızı alt tarafta belirtiniz. Gelecek yazılarda görüşmek üzere
PROJE KODLARI İÇİN TIKLAYINIZ. Yazar : Ömer Can ESKİCİOĞLU