2 Ocak 2018 Salı

Uzaktan Kontrollü Sıcaklık Sensörü


Bu projede kullanılacak olan iki Arduino Uno'dan birinde LM35 sıcaklık sensörü bulunmaktadır. Bu, Arduino ortam sıcaklığını ölçerek, sıcaklık bilgisini nRF24L01 kablosuz haberleşme modülünü kullanarak, diğer Arduino'ya aktaracaktır. Sıcaklık bilgisini alan Arduino ,seri port üzerinden Serial Monitör'e yazdıracaktır. Bu uygulamada nRF24L01 modülünün devreye nasıl bağlandığını ve Arduino kodunun nasıl yazıldığını öğrenmiş olacağız.
Not: Bu uygulamada kullanılacak olan LM35 sıcaklık sensörünün besleme (5 V), toprak ve çıkış olmak üzere 3 adet pini bulunmaktadır. Çıkış pinindeki değer, ortamın sıcaklığına göre lineer olarak değişmektedir.
Bu uygulamayı yapmak için ihtiyacınız olan malzemeler:
  • 2 x Arduino UNO
  • 2 x nRF24L01 kablosuz haberleşme modülü
  • 2 x 10 uF kapasite
  • 1 x LM35 (sıcaklık sensörü)
  • 1 x Breadboard
Alıcı görevindeki
Arduino Uno
nRF24L01
3.3 Volt-> VCC
GND-> GND
7-> CS
8-> CE
11-> MOSI
12-> MISO
13-> SCK

Verici görevindeki
Arduino Uno
nRF24L01
3.3 Volt-> VCC
GND-> GND
7-> CS
8-> CE
11-> MOSI
12-> MISO
13-> SCK

Verici görevindeki
Arduino Uno
LM35
5 Volt-> 1 (VCC)
A0-> 2 (Analog)
GND-> 3 (GND)

Verici kodu

#include <SPI.h>
#include <nRF24L01p.h>
#include <String.h>

nRF24L01p verici(7,8);
/* CSN - > 7, CE -> 8 olarak belirlendi */

float sicaklik;
static char veri[10];

void setup() {
  Serial.begin(9600);
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  /* SPI başlatıldı */
  verici.channel(90);
  verici.TXaddress("Hasbi");
  verici.init();
  /* Verici ayarları yapıldı */
}
void loop() {
  sicaklik = analogRead(A0); 
  /* A0daki gerilim ölçüldü */
  sicaklik = sicaklik * 0.48828125;
  /* Ölçülen gerilim sıcaklığa çevrildi */
  Serial.print("SICAKLIK = ");
  Serial.print(sicaklik);
  Serial.println(" C");
  /* Sıcaklık bilgileri ekrana yazdırıldı */
  
  dtostrf(sicaklik,5, 2, veri);
  /* float değerindeki sıcaklık stringe çevrildi */
  
  verici.txPL(veri);
  boolean gonderimDurumu = verici.send(FAST);
  /* Sıcaklık bilgisi nRF24L01'e aktarıldı */
  /* Eğer gönderim başarısız olursa gonderimDurumu'nun değeri false olacaktır */
  if(gonderimDurumu==true){
        Serial.println("mesaji gonderildi");
  }else{
        Serial.println("mesaji gonderilemedi");
  }
  
  delay(1000); 
}
nRF24L01 modülünün CSN ve CE pinleri 7 ve 8 olarak belirlenmiştir. Okunan sıcaklık verisinin ekrana yazdırılabilmesi için, seri haberleşme başlatılmıştır. Modül SPI protokolünü kullandığı için SPI başlatılmıştır. Haberleşmenin sağlanabilmesi için, modüller arasındaki kanal 90 olarak belirlenmiştir. Loop fonksiyonu içerisinde bir saniye aralıklarla LM35'ten sıcaklık verisi okunmuştur. Okunan veri, kablosuz haberleşme modülüne yollanmıştır. Gönderimin başarı durumu 'gonderimDurumu' değişkeni yardımıyla ekrana yazdırılmıştır.

Alıcı kodu

#include <SPI.h>
#include <nRF24L01p.h>

nRF24L01p alici(7,8);
/* CSN - > 7, CE -> 8 olarak belirlendi */

void setup(){
  Serial.begin(9600);
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  /* SPI başlatıldı */
  alici.channel(90);
  alici.RXaddress("Hasbi");
  alici.init();
  /* Alıcı ayarları yapıldı */
}

String sicaklik;

void loop(){ 
  while(alici.available()){
    /* Modülden veri geldiği sürece while devam edecek */
    alici.read();
    alici.rxPL(sicaklik);
    /* Modülden gelen veri okundu */
    if(sicaklik.length()>0)
    {
      Serial.println(sicaklik);
      /* modülden gelen veri ekrana yazdırıldı */
      sicaklik="";
      /* eski veri temizlendi */
    }
  }
}
nRF24L01 modülünün CSN ile CE pinleri 7 ve 8 olarak belirlenmiştir. Vericiden alınan sıcaklık verisinin ekrana yazdırılabilmesi için seri haberleşme başlatılmıştır. Modül SPI protokolünü kullandığı için SPI başlatılmıştır. Haberleşmenin sağlanabilmesi için modüller arasındaki kanal 90 olarak belirlenmiştir. Loop fonksiyonu içerisinde haberleşme modülünden veri geldiği sürece, while döngüsünün devam etmesi sağlanmıştır. Gelen veriler 'sicaklik' değişkeninde tutulmuş ve ekrana yazdırılmıştır.
Bu uygulamamızda iki Arduino modülü arasında kablosuz haberleşmenin nasıl sağlandığını öğrenmiş olduk. Bu ve daha önceki bölümlerde öğrenilen bilgiler ile gelişmiş Arduino projeleri yapılabilir. Bölümde incelenen nRF24L01 modülü yerine farklı modüller de aynı şekilde kullanılabilir fakat her modülün haberleşmesi farklı olacağı için, öncelikle kullanılacak modülün belirtimleri (datasheet) incelenmelidir.

Hiç yorum yok:

Yorum Gönder