2 Arduino Arası Kablolu İletişim

Bu eğitimde, 2 Arduino Arası Koblolu İletişim nasıl kurulur bunu öğreneceğiz. Bir Arduino’ya bağlı olan LM35 sıcaklık sensöründen aldığımız verileri biraz uzaktaki ikinci bir Arduino’ya iletmek için 3 kablolu bir bağlantı (iletim, alma ve ortak topraklama) kullanacağız. Bu mesafe 10m’den fazla ise teller bükülmelidir.

LM35 Sıcaklık Sensörü

LM35 Sıcaklık Sensörü Kullanımı

LM35, 3 pimli bir sıcaklık sensörüdür. 1 nolu pin, 4V ila 20V arasında herhangi bir yerde bir besleme voltajına bağlanır. 2 nolu pin Çıkış pini, Santigrat derece başına 10mV veren bir voltaj kaynağıdır. Başka bir deyişle, 25 derece C, Out pininde 250mV üretecektir. Bu bir analog voltajdır ve bu nedenle Arduino’daki bir analog pinine bağlanmalıdır. 3 nolu pini ise topraklama pinidir. Sıcaklık aralığı -55 ila +150 derece C’dir. Arduino bunu derece C cinsinden aşağıdaki gibi bir sıcaklığa dönüştürebilir:

  • float tempC = analogRead(LM35_pin)
  • tempC = (tempC*500)/1023

LM35 sensörünün kullanımını daha detaylı öğrenmek için aşağıdaki yazımızı okuyailirsiniz.

İki Arduinonun Bağlanması

Arduinos’un iki seri portunu birbirine bağlamak bariz görünebilir (veri pinleri 0 ve 1). Ancak, bunu yapacaksanız, sinyaliniz Arduino’yu USB bağlantı noktasından ve varsayılan olarak bu pinleri kullanan seri pencereden programlamaya çalışmakla çakışacaktır. Bunun yerine, Arduino IDE ile varsayılan olarak gelen SoftwareSerial kütüphanesini kullanacağız ve kullanmamız için tamamen bağımsız bir seri port seti oluşturacağız. LM35’i uzak üniteye ve bir pile ve 3 telli bağlantıya bağlayacağız.

Yerel Arduino için sadece bir güç kaynağı veya pil veya USB bağlantı noktasından gelen güç yeterlidir. Sonuç seri monitörde gösterilecektir ama siz bir LCD ekran kullanabilirsiniz.

LM35 Sensörü ve Arduinoların Bağlantı Şeması

İki Arduino’yu ve LM35 sıcaklık sensörünü bağlamak için ihtiyaç duyacağınız parçalar şunlardır:

Bir Arduino’nun TX’inin diğerinin RX’ine gittiğini ve bunun tersini unutmayın.

2 Arduino Arası Kablolu İletişim Bağlantı Şeması
2 Arduino Arası Kablolu İletişim Bağlantı Şeması

SoftwareSerial  Kütüphanesini Yükleme

LM35 için gerekli kütüphane yok ve SoftwareSerial kütüphanesi varsayılan olarak Arduino IDE ile kurulu olarak zaten mevcuttur.

Dikkat edilmesi gereken bir şey, standart kütüphanede arabellek boyutu oldukça küçüktür (64 bayt) ve uzun metinleri iletmek isterseniz, bunların kesildiğini (uçların kesildiğini) görürsünüz. Bu, SoftwareSerial.h dosyasını C:\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src konumunda düzenleyerek düzeltilebilir, ancak ne yaptığınızı bilmiyorsanız bunu yapmayın. (Önce dosyanın bir kopyasını oluşturun!)

Seri İletişim Hakkında Not: Seri bağlantı noktalarının (UARTS) eşzamansız olarak iletişim kuracağını unutmak genellikle kolaydır. Bu, alıcıya gelen verilerin Arduino döngüsü ile zamanında değil, kendi zamanında olacağı anlamına gelir.

Master(Yönetici) İçin Arduino Kodu

//Transmitter Code
 #include <SoftwareSerial.h>
 SoftwareSerial link(2, 3); // Rx, Tx
 byte lm35Pin = A0;
 float lm35V = 0;
 float tempC = 0;
 byte greenLED = 12;
 char text[20] ;
 char charVal[6];

  void setup() 
  {
    link.begin(9600);
    Serial.begin(9600);
    pinMode(greenLED, OUTPUT);
  }

  void loop()  
  {
   strcat(text, "Temp is: "); //append to empty string
   digitalWrite(greenLED, HIGH);
   delay(10);
   digitalWrite(greenLED, LOW);
   lm35V = analogRead(lm35Pin);
   tempC = (lm35V/1023) * 500;
   //this is a float we want it as a c-string:
   dtostrf(tempC, 5, 1, charVal);  
   //5 is min width, 1 is precision; float value is copied to charVal
   strcat(text, charVal); //append the value
   text[16] = 0; //terminate the cstring
   strcat(text, "C");  //append a C
   Serial.println(text); //print to local screen for debug
   link.println(text);
      
   delay(200);
  }

Slave(Köle) İçin Arduino Kodu

Loop() içerisindeki yorum yapılmış 4 satırı bağlantıda hatanın olup olmadığını anlamak için kullanmaktayız. Eğer bağlantıda hata var ise bu 4 satırı yorum olmaktan çıkarın ve loop içerisindeki diğer kodları yorum yapın.

 //Receiver code
 #include <SoftwareSerial.h>
 SoftwareSerial link(2, 3); // Rx, Tx
  
  byte greenLED = 12;
  char cString[20];
  byte chPos = 0;
  byte ch = 0;
  char dataStr[6];

  void setup() 
  {
    link.begin(9600); //setup software serial
    Serial.begin(9600);    //setup serial monitor
    pinMode(greenLED, OUTPUT);
  }

  void loop()  
  {  
 // if (link.available())
 //     Serial.write(link.read());
 // if (Serial.available())
 //     link.write(Serial.read());  
   
   
   while(link.available())
   {
    //read incoming char by char:
     ch = link.read();
     cString[chPos] = ch;
     chPos++;     
     
   digitalWrite(greenLED, HIGH); //flash led to show data is arriving
   delay(10);
   digitalWrite(greenLED, LOW);
   }
   cString[chPos] = 0; //terminate cString
   chPos = 0;
   
   Serial.print(cString);
  }

Projenin Test Çıktısı

Her şey doğru şekilde bağlandıysa, sıcaklığı değiştirmek için LM35’i parmaklarınızla sıkıştırın. Slave arduinoyu bilgisayara bağlayın ve seri haberleşme mönitörünü açın ve Seri monitörde aşağıdaki gibi göstermelidir:

2 Arduino Arası Kablolu İletişim Çıktısı
2 Arduino Arası Kablolu İletişim Çıktısı

Umarım bu, iki Arduino arasında nasıl iletişim kuracağınızı anlamanıza yardımcı olur! Herhangi bir sorunuz varsa aşağıya bir yorum bırakmaktan çekinmeyin!