HC-05 ile I2C modüllü LCD Ekran Kullanımı

 

Karakter LCD I2C/IIC Dönüştürücü Kartı

Bu konuda HC-05 bluetooth modül, I2C modül ve LCD ekran kullanacağız. HC-05 bluetooth modülümüze cep telefonu veya herhangi başka bir bluetooth bağlatısına sahip cihazdan yolladığımız verileri LCD ekrana yazdıracağız.Yukarıdaki resimde görülen modül I2C haberleşme protokolüne uygun haberleşme yapabilen ve 16×2 LCD ekranlar için özelleştirilmiş bir arayüz modülüdür.  LCD ekranımıza doğrudan bağlanır. Böylelikle, LCD ekran ile arduino kartımız arasındaki kablo bağlantıları sayısı da enfazla 4 adet olacak şekilde sınırlandırılmış olur. Aslında haberleşmeyi SDA ve SCL uçları ile yapacak olduğundan dolayı, modül enerji bağlantıları arduino üzerinden değilde, devremizdeki başka bir noktadan alınırsa, Arduino ile gerekli olan bağlatılar sadece SDA ve SCL uçları ile olacağından kablo sayısı 2 adete bile indirilebilir. Böyle bir uygulamada dikkat edilmesi gereken 2 şey var, I2C modüle uygun 5v vermek ve Arduino ile I2C modül arasındaki GND leri ortaklamak.

I2C modül ile LCD ekran bağlantısı aşağıdaki resimde gösterilmiştir.

Bu şekilde modül ve LCD ekran hazırlandıktan sonra, aşağıda verilen devreyi kurabiliriz.

HC-05 Bluetooth ve IIC LCD Ekran_bb

 

Artık Örnek programımızı yükleme aşamasına geldik. Bu noktada bilinmesi geken bir husu var. I2C (diğer adıyla IIC) modülümüzün adresini bilmemiz gerekiyor, I2C haberleşme adresler üzerinden yapılacağı için, Arduinomuzun hangi adresteki I2C modüle hangi bilgiyi göndereceğini belirtmeliyiz. Eğer adresi bilinmiyor ise, yukarıdaki devreden bluetooth modül bağlantılarını sökerek aşağıdaki programı arduinoya yükleyin ve serial monitörü açarak modülünüzün adresini öğrenebilirsiniz. Bu programi internette araştırma yaparken bulmuştum,

// ————————————–
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0…127 to 1…119,
// according to the i2c scanner by Nick Gammon
// http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>

void setup()
{
Wire.begin();

Serial.begin(9600);
Serial.println(“\nI2C Scanner”);
}

 

void loop()
{
byte error, address;
int nDevices;

Serial.println(“Scanning…”);

nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();

if (error == 0)
{
Serial.print(“I2C device found at address 0x”);
if (address<16)
Serial.print(“0″);
Serial.print(address,HEX);
Serial.println(” !”);

nDevices++;
}
else if (error==4)
{
Serial.print(“Unknow error at address 0x”);
if (address<16)
Serial.print(“0”);
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println(“No I2C devices found\n”);
else
Serial.println(“done\n”);

delay(5000); // wait 5 seconds for next scan
}

Yukarıdaki programı arduinoya yükleyip çalıştırdıktan sonra, serial monitörde gördüğümüz I2C modülümüzün adresini bir yere not edin. Bu adresi I2C haberleşme için kullanacağız. Devremizi tekrar yukarıdaki gibi eski haline getiriyoruz, yani bluetooth v.s hepsini yeniden bağlıyoruz. Ve aşağıdaki programı arduino ya yüklüyoruz.

/**

* Bluetooth modülden gelen verileri softwareserial ile belirtilen rx-tx pinlerinden okur *ve

* i2c modül ile arduinoya bağlanmış olan LCD de gösterir.

*/

 

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <SoftwareSerial.h>

 

SoftwareSerial bluetoothModulu(10, 11);

/* Arduino  ->  Bluetooth modulu  bağlantı şekli

10 (Rx)   ->  Tx

11 (Tx)   ->  Rx

*/

 

// I2C modül adresi olarak 0x27 ayarla (Yukarıdaki programda görülen adresi yaz) ve //lcdEkran isimli 16,2 satırlı LCD ekran tanımla

LiquidCrystal_I2C lcdEkran(0x27, 16, 2); // 0x27 yerine, yukarıdaki programda not edilen                                                                            //adres yazılacak (eğer farklı ise)

 

void setup()

{

lcdEkran.begin(); //lcdEkran’ı başlat

lcdEkran.backlight(); //lcdEkran arka ışığını başlat

 

Serial.begin(9600); // serial portu 9600 baud hızında başlat

bluetoothModulu.begin(9600); // Bluetooth modül haberleşmesi hızını 9600 baud a                                                                      // ayarla

}

 

void loop()

{

// Eğer softwareserial portta bluetooth modülden gelen bir mesaj var ise…

if (bluetoothModulu.available()) {

 

delay(100); // Gelen mesajın tamamlanması için bir süre bekle

 

lcdEkran.clear(); // Ekranı sil

 

// bluetoothModulu bufferındaki mesaj var iken…

while (bluetoothModulu.available() > 0) {

lcdEkran.write(bluetoothModulu.read()); //bluetoothModulunden                                                                                                                        //okuduklarını lcdEkrana yaz

}

}

}

Yukarıdaki program şunu yapıyor;

SoftwareSerial.h kütüphanesi kullanılarak sanal bir seri port oluşturuluyor, böylelikle d0-d1 pinlerindeki Rx-Tx bağlatıları yerine d10-ve d11 pinlerine sanal Rx-Tx bağlantısı tanımlanıyor. Bunu yapmamızın nedeni, arduinoyu USB ye taktığımızda program yüklemek istersek eğer, d0-d1 pinlerindeki Rx-Tx uçları arduino ide serial programı tarafından kullanılıyor olacak ve biz buraya bir de bluetooth modülün Rx-Tx uçlarını bağlarsak eğer çakışma olacak ve program yükleyemeyeceğiz. Ancak bluetooth modülün, Rx-Tx uçlarını d0-d1 den sökeresek program yüklemesi veya serial monitör görüntülemesi yapabileceğiz. Bu sök-tak işini sürekli yapmak istemeyeceğimize göre (daha kapsamlı bir proje düşünün), biz de software serial kütüphanesi yardımıyla sanal bir seri port daha oluşturarak, bluetooth modül için bu portu kullanıyoruz.

Programda bir diğer kütüphane olan  LiquidCrystal_I2C.h kütüphanesi ile I2C modül ile kullanacağımız lcdEkran elemanını oluşturuyoruz.

kütüphaneyi buradan indirebilirsiniz.

bir diğer kütüphane olan Wire.h ise arduino standart kütüphanesidir ve I2C haberleşme protokolü için gerekli olan kütüphanedir.

Daha sonra program, bluetooth modülü için oluşturduğumuz serial port bufeerını kontrol ediyor ve burada gelmekte olan bir mesaj var ise, mesajı lcdEkran isimli ekrana yazdırıyor. Son gelen mesaj ekranda sürekli olarak kalıyor, ancak yeni bir mesaj geldiğindeeski mesaj silinip yeni mesaj ekrana yazdırılıyor. Burada dikkatimizi çekmek istediğim bir nokta, bu işlemin loop( ) fonksiyonu içerisindeki “if” koşulu ile sağlanıyor olması. Ekran silinmediği sürece (lcdEkran.clear(); komutu ile), son gönderilenler ekranda yer alıyor.

NOT: Konu ile ilgili bir diğer örnek de buradaki yazıda bulunuyor. Ek bir kütüphaneye gerek kalmadan, d0-d1 pinlerindeki rx-tx bağlantısını kullanarak yapmak istiyorsanız buradaki yazıyı okuyabilirsiniz.

Şimdilik bu kadar. Umarım faydalı olmuştur…..

Yorum bırakın