Arduino Seri İletişim

Arduino ile seri port üzerinden veri göndermek ve almak.

Arduino ile bilgisayar arasında seri port üzerinden iletişim kurmak, projelerinizde hata ayıklama (debugging), sensör verilerini bilgisayara gönderme, bilgisayardan komut alma veya genel olarak iki cihaz arasında veri alışverişi yapma gibi birçok senaryoda temel ve çok kullanışlı bir yetenektir. İşte Arduino'nun seri port üzerinden bilgisayar ile nasıl iletişim kurduğunu adım adım öğreneceğiz: --- ### Temel Kavramlar 1. **Seri Port Nedir?** Seri iletişim, verilerin bit bit, ardışık olarak tek bir hat üzerinden iletildiği bir iletişim protokolüdür. Arduino'da bu genellikle USB kablosu üzerinden bilgisayarınıza bağlanır ve bilgisayarınızda bir sanal seri port (COM port) olarak görünür. Arduino kartlarında genellikle RX (Receive - Alıcı) ve TX (Transmit - Gönderici) pinleri bulunur. Bu pinler doğrudan seri iletişimi gerçekleştirir. 2. **Neden Kullanılır?** * **Hata Ayıklama (Debugging):** Programınızın belirli noktalarında değişken değerlerini veya program akışını Seri Monitör'e yazdırarak hataları tespit etmek. * **Veri Gönderme:** Sensörlerden okunan değerleri (sıcaklık, nem, ışık vb.) bilgisayara göndermek. * **Komut Alma:** Bilgisayardan (veya başka bir seri cihazdan) Arduino'ya komutlar göndererek belirli eylemleri tetiklemek (örneğin, bir LED'i açıp kapatmak). * **Arayüz Oluşturma:** Bilgisayar tabanlı bir uygulama (Python, C#, Processing vb.) ile Arduino arasında iletişim kurarak daha gelişmiş arayüzler oluşturmak. 3. **Baud Hızı (Baud Rate)** Seri iletişimin hızını belirleyen bir değerdir (saniyede bit sayısı). Hem Arduino kodunda hem de bilgisayarınızdaki Seri Monitör'de (veya kullandığınız başka bir seri terminal programında) aynı baud hızını ayarlamanız **zorunludur**. En yaygın kullanılan hızlar 9600, 19200, 57600 ve 115200'dür. 4. **Seri Monitör (Serial Monitor)** Arduino IDE'nin sağ üst köşesindeki büyüteç simgesiyle açılan bir araçtır. Bu monitör, Arduino'nun seri port üzerinden gönderdiği verileri görmenizi ve Arduino'ya veri göndermenizi sağlar. --- ### Adım Adım Uygulama #### 1. Arduino'dan Bilgisayara Veri Gönderme Bu örnekte, Arduino belirli bir metni ve sayısal bir değeri düzenli aralıklarla Seri Monitör'e gönderecektir. **Arduino Kodu:** ```arduino void setup() { // Seri iletişimi 9600 baud hızında başlat. // Bu hız, Seri Monitör'de de AYNI OLMALIDIR. Serial.begin(9600); Serial.println("Arduino programı başladı!"); // Başlangıç mesajı gönder } void loop() { // "Merhaba, Arduino'dan veri!" metnini gönder ve yeni bir satıra geç. Serial.println("Merhaba, Arduino'dan veri!"); delay(1000); // 1 saniye bekle // "Sıcaklık: " metnini gönder (yeni satıra geçme). Serial.print("Sıcaklık: "); // "25" sayısını gönder ve yeni satıra geç. Serial.println(25); delay(2000); // 2 saniye bekle // Bir değişkenin değerini de gönderebiliriz. int sayac = millis() / 1000; // Arduino'nun çalıştığı saniye cinsinden süre Serial.print("Çalışma süresi (saniye): "); Serial.println(sayac); delay(1000); } ``` **Kod Açıklaması:** * `Serial.begin(9600);`: `setup()` fonksiyonu içinde çağrılır. Seri iletişimi belirtilen baud hızında başlatır. Bu, Arduino ile bilgisayar arasındaki bağlantının "açılması" gibidir. * `Serial.print("Metin");`: Seri porta "Metin" ifadesini gönderir, ancak imleci aynı satırda bırakır. * `Serial.println("Metin");`: Seri porta "Metin" ifadesini gönderir ve ardından yeni bir satıra geçer. Bu, her mesajın ayrı bir satırda görünmesini sağlar. * `Serial.print(deger);`: Sayısal değişkenlerin veya sabitlerin değerlerini seri porta gönderir. `Serial.println()` ile de kullanılabilir. * `delay(milisaniye);`: Belirtilen milisaniye kadar programın duraklamasını sağlar. **Uygulama Adımları:** 1. Yukarıdaki kodu Arduino IDE'ye yapıştırın. 2. Kartınızı (örn. Arduino Uno) ve doğru COM portunu **Araçlar > Kart** ve **Araçlar > Port** menülerinden seçin. 3. Kodu Arduino'ya yükleyin (**Yükle** düğmesi). 4. Yükleme tamamlandıktan sonra, Arduino IDE'nin sağ üst köşesindeki **Seri Monitör** simgesine tıklayarak Seri Monitör'ü açın. 5. Seri Monitör penceresinin sağ alt köşesindeki açılır menüden **9600 baud** hızını seçtiğinizden emin olun (kodda ayarladığımız hızla aynı olmalı). **Beklenen Çıktı (Seri Monitör'de):** ``` Arduino programı başladı! Merhaba, Arduino'dan veri! Sıcaklık: 25 Çalışma süresi (saniye): 3 Merhaba, Arduino'dan veri! Sıcaklık: 25 Çalışma süresi (saniye): 7 ... ``` --- #### 2. Bilgisayardan Arduino'ya Veri Gönderme Bu örnekte, bilgisayardan (Seri Monitör üzerinden) gönderilen bir karakteri Arduino okuyacak ve ekrana geri yazdıracak. **Arduino Kodu:** ```arduino void setup() { Serial.begin(9600); Serial.println("Arduino veri bekliyor. Seri Monitör'den bir karakter gönderin."); } void loop() { // Seri portta okunacak veri var mı diye kontrol et. if (Serial.available() > 0) { // Seri porttan gelen tek bir karakteri oku. char gelenKarakter = Serial.read(); Serial.print("Bilgisayardan gelen: "); Serial.println(gelenKarakter); // Gelen karaktere göre farklı işlemler yapabiliriz. if (gelenKarakter == 'a') { Serial.println("A harfi alındı! Özel bir işlem yapılıyor..."); // Örneğin, bir LED yakabilirsiniz. } else if (gelenKarakter == 'b') { Serial.println("B harfi alındı! Başka bir işlem yapılıyor..."); // Örneğin, başka bir LED söndürebilirsiniz. } else { Serial.println("Tanımsız karakter."); } } } ``` **Kod Açıklaması:** * `Serial.available()`: Seri portta okunmayı bekleyen veri (bayt) sayısını döndürür. Eğer 0'dan büyükse, okunacak veri var demektir. * `Serial.read()`: Seri porttan gelen ilk baytı (karakteri) okur ve döndürür. Okunan bayt, porttan kaldırılır. **Uygulama Adımları:** 1. Yukarıdaki kodu Arduino IDE'ye yapıştırın ve Arduino'ya yükleyin. 2. Seri Monitör'ü açın ve baud hızını **9600** olarak ayarlayın. 3. Seri Monitör penceresinin üst kısmında, "Gönder" düğmesinin solunda bir metin giriş kutusu bulunur. Buraya bir karakter (örneğin `a` veya `b`) yazın. 4. Metin giriş kutusunun yanındaki "Gönder" düğmesine basın veya Enter'a basın. 5. Seri Monitör'ün sağ alt köşesindeki açılır menüden "Yeni satır" (Newline) veya "Hiçbiri" (No line ending) seçeneğini deneyebilirsiniz. `Serial.read()` tek karakter okuduğu için genellikle "Hiçbiri" seçeneği daha net sonuç verirken, birden fazla karakterlik mesajlarda "Yeni satır" tercih edilir. **Beklenen Çıktı (Seri Monitör'de siz 'a' yazıp gönderdiğinizde):** ``` Arduino veri bekliyor. Seri Monitör'den bir karakter gönderin. Bilgisayardan gelen: a A harfi alındı! Özel bir işlem yapılıyor... ``` --- #### 3. Her İkisini Birleştirme (Echo Programı) Bu örnek, bilgisayardan gönderilen bir mesajı alacak ve olduğu gibi geri gönderecektir (bir "echo" gibi). Bu sefer tek karakter yerine bir satırlık metin okuyacağız. **Arduino Kodu:** ```arduino void setup() { Serial.begin(9600); Serial.println("Echo programı başladı. Bir şeyler yazın ve Enter'a basın."); } void loop() { if (Serial.available() > 0) { // Seri porttan gelen veriyi yeni satır karakterine ('\n') kadar oku. // Bu, tek bir karakter yerine bir satır metin okumanızı sağlar. String gelenMesaj = Serial.readStringUntil('\n'); Serial.print("Aldım ve geri gönderiyorum: "); Serial.println(gelenMesaj); } } ``` **Kod Açıklaması:** * `Serial.readStringUntil('\n')`: Seri porttan gelen veriyi okur. Okumayı, `'\n'` (yeni satır) karakteriyle veya bir zaman aşımı (timeout) süresiyle durdurur. Okunan veri bir `String` nesnesi olarak döndürülür. Bu fonksiyon, genellikle Seri Monitör'den "Yeni satır" seçeneğiyle gönderilen tam satırları okumak için idealdir. **Uygulama Adımları:** 1. Kodu yükleyin. 2. Seri Monitör'ü açın ve baud hızını **9600** olarak ayarlayın. 3. Seri Monitör'ün sağ alt köşesindeki açılır menüden **"Yeni satır" (Newline)** seçeneğini seçin. Bu önemlidir, çünkü `readStringUntil('\n')` bu karakteri bekler. 4. Metin giriş kutusuna "Merhaba Arduino!" gibi bir mesaj yazın ve Enter'a basın veya "Gönder" düğmesine tıklayın. **Beklenen Çıktı (Seri Monitör'de siz "Merhaba Arduino!" yazıp gönderdiğinizde):** ``` Echo programı başladı. Bir şeyler yazın ve Enter'a basın. Aldım ve geri gönderiyorum: Merhaba Arduino! ``` --- ### Önemli Notlar ve İpuçları * **Baud Hızı Eşleşmesi:** Bu en sık yapılan hatadır. Arduino kodundaki `Serial.begin()` değeri ile Seri Monitör'deki veya harici terminal programındaki baud hızı AYNI olmalıdır. * **`Serial.print()` vs `Serial.println()`:** `println` her mesajdan sonra yeni bir satıra geçer, bu da okunabilirliği artırır. `print` ise imleci aynı satırda bırakır. * **`delay()` ve Seri İletişim:** `delay()` fonksiyonu programı tamamen durdurur. Gerçek dünya uygulamalarında, `delay()` yerine `millis()` kullanarak daha akıcı, engellemeyen kod yazmak genellikle daha iyidir, özellikle seri porttan sürekli veri bekliyorsanız. * **USB Bağlantısı:** Arduino'nuzun bilgisayara doğru USB kablosuyla bağlı olduğundan ve sürücülerin yüklü olduğundan emin olun. * **Seri Monitör'ü Kapatma:** Arduino'ya yeni bir kod yüklerken Seri Monitör'ün kapalı olması gerekir. Aksi takdirde, seri port meşgul olacağı için yükleme başarısız olabilir. * **Diğer Terminal Programları:** Arduino IDE'nin Seri Monitör'ü basit işlemler için yeterlidir, ancak daha gelişmiş işlevler için PuTTY, CoolTerm veya Python'daki `pyserial` gibi programları veya kütüphaneleri kullanabilirsiniz. * **Veri Tipleri:** `Serial.print()` ve `Serial.println()` int, float, char, String gibi birçok veri tipini doğrudan yazdırabilir. Bu bilgilerle Arduino'nuzun seri port üzerinden bilgisayar ile nasıl iletişim kurduğunu temel düzeyde anlamış ve pratik örneklerle uygulamış olmalısınız. Artık projelerinizde hata ayıklamak, sensör verilerini görmek veya bilgisayardan komutlar almak için bu yeteneği kullanabilirsiniz!
Son Paylaşımlar
Kategoriler