25 Ekim 2014 Cumartesi

Arduino Dht11 Bluetooth(HC-06) Uygulaması





                Bu uygulamada yapmak istediğimiz dht11 nem-sıcaklık ölçer ile oda sıcaklığını-nemini ölçmek ve bu değerleri bluetooth kullanarak Android telefona aktarmaktır. Bu iş için lazım olan donanımlar dht11 nem-sıcaklık ölçer , bluetooth  (bendeki  jy-mcu bluetooth) , yazılımlar  ise dht11 kütüphanesi ve Android cihaz için Android Marketten ulaşabileceğimiz Blueterm uygulamasıdır.

                Öncelikle uygulamaya başlamadan dht11 kütüphanesini internetten indirip derleyiciye eklememiz gerekiyor. Bunun için indirdiğimiz kütüphaneyi rar’dan çıkarıp Arduino'nun yüklü olduğu klasörün içerisindeki libraries klasörüne atalım ve derleyiciyi açıp Sketch-Import Library-Add Library şeklinde libraries kütüphanesine eklediğimiz klasörü derleyiciye tanıtıyoruz. Bu işlemlerden sonra dht11 gerekli bağlantıları yaptığımızda sorunsuz çalışacaktır.

                Aşağıda devrenin şeması bulunmaktadır. Buradan bağlantıları aynen yapıp altındaki kodu da çalıştırdığımız zaman telefon ekranında bizim belirlediğimiz aralıklarla nem-sıcaklık bilgisi gözükecektir.




#include <SoftwareSerial.h>
#include <dht11.h> // dht11 kütüp
SoftwareSerial myBluetooth(10, 11); // RX, TX
#define DHT11PIN 2 // DHT11PIN olarak Dijital 2"yi belirliyoruz.

dht11 DHT11;

void setup()
{
  myBluetooth.begin(9600);
  myBluetooth.println("Omer Guvenir");
}

void loop()
{
 
  myBluetooth.println();
 
  int chk = DHT11.read(DHT11PIN);

  myBluetooth.print("Nem (%): ");
  myBluetooth.println((float)DHT11.humidity, 2);

  myBluetooth.print("Sicaklik (Celcius): ");
  myBluetooth.println((float)DHT11.temperature, 2);

  myBluetooth.print("Sicaklik (Fahrenheit): ");
  myBluetooth.println(DHT11.fahrenheit(), 2);

  myBluetooth.print("Sicaklik (Kelvin): ");
  myBluetooth.println(DHT11.kelvin(), 2);

  myBluetooth.print("Cig Olusma Noktasi: ");
  myBluetooth.println(DHT11.dewPoint(), 2);

  delay(5000);

}


                BlueTerm Arduino ile Telefon arasında eşleştirme yapıyor. Eşleştirme için ‘1234’ yazarak Arduino’ya bağlanıyoruz.  Bağlanmadan önce Bluetooth’ta bulunan led sürekli yanıp sönerken bağlantı kurulunca sabit yanmaya başlayacaktır. Bu uygulamada Arduino’dan veriler telefona aktarılıyor. Tam tersini yapmakta mümkündür , yani bu program Arduino’daki Serial Monitor görevi yapar. Basit bir örnek ; telefondan 0 ve 1 yazarak Arduino üzerindeki bir ledi yakıp söndürebiliriz. 

                Önemli bir hususta RX , TX konusudur. Bunlar veri aktarımını sağlar ve Arduino ile Bluetooth arasında çapraz bağlı olmalıdır. Şekle bakarsak Arduino’nun RX’i Bluetooth’un TX’ine denk gelecek şekilde bağlanmıştır. Aynı şekilde Arduino’nun TX’i Bluetooth’un RX’ine denk geleck şekilde bağlanmalıdır. Yoksa veri aktarımı gerçekleşmeyecektir.



19 Ekim 2014 Pazar

JSF PrimeFaces Hibernate dataTable Örneği




            Önceki 2 JSF yazımda kurulumdan ve Managed Bean kavramına değinmiştik. Bu yazıda ise PrimeFaces componenti olan dataTable içerisine veri tabanından çektiğimiz verileri direk olarak nasıl ekleriz buna göz atacağız. Bundan önceki yazıların başlığında PrimeFaces bulunmasına karşın neredeyse hiç PrimeFaces componenti kullanmadım. Bunun  sebebi zaten PrimeFaces’in resmi sitesinde hepsinin kullanımını görebilmemiz ve altındaki kodu alarak kendi işimiz doğrultusunda geliştirebilmemizdir. Bu yüzden PrimeFaces’teki commandButton şu işe yarar ribbon bu işe yarar gibi işlerle uğraşmak zaman kaybıdır. Aynı zamanda doküman desteğide bulunmaktadır. Hem web hem de doküman kullanarak bu işi daha iyi öğrenebiliriz. Sizde daha önce görmemişseniz eğer aşağıdaki linklere tıklayarak bütün componentlerin kullanımını ve kodlarını görebilirsiniz.







            Gerekli kaynakları gösterdikten sonra biz işimize dönelim. Büyük ihtimalle yapacağımız işlerde veri tabanı ile uğraşmamız gerekecek. Bu uygulamada kısaca veri çekme işlemini gerçekleştirdim. Bu işlemi yaparken direk SQL cümleleri kullanmak yerine Hibernate kütüphanesi ile verilerimizi çektim. Hibernate  redhat bünyesinde geliştirilen bir kütüphanedir. Amacı verileri fazla SQL komutları kullanmadan getirebilmektir. Büyük projelerde tercih edilen bir kütüphanedir. Bunun en temel sebebi direk SQL cümlelerine göre veri getirme hızının yakın olmasıdır. Ayrıca kullanım açısından geliştiricilere seçenekler sunar. Hatta SQL kodu yazmaktan vazgeçemeyenler için Hibernate Query Language (HQL) tarzında özelleşmiş bir dili de mevcut. Temel olarak söyleyebileceklerim bunlar. Aşağıdaki linlere göz atabilirsiniz. İlk link resmi sitesinin , ikincisi ise Hibernate kullanımını anlatıyor.






            Hibernate kütüphanesi NetBeans içerisinde mevcuttur. Direk kütüphane ekle diyerek ekleyebilirsiniz.  Daha önce Java ile Xhtml arasındaki ilişkinin Managed Bean ler ile sağlandığını görmüştük. Peki burada veri tabanı ile Java kısmı nasıl bağlantı kuracak diye düşünebilirsiniz. İşte tam burada karşımıza POJO (Plain Old Java Object)  çıkıyor. Bunlar aslında birer java class larıdır ve her tabloya karşılık bir POJO olmalıdır ve bu POJO lar esasen içerisinde tablolara ait verileri tutar. Hibernate bu POJO ları kullanarak verileri Java kısmına taşır. Bunu yapabilmek için de mapping işlemi gerçekleştirerek tablolar arasındaki ilişkileri belirler. Bu sayede bire bir , bire çok çoğa çok şeklindeki tablolardan veri çekmeyi kolaylaştırır.  NetBeans sayesinde bu POJO ları ve Hibernate mapping işlemlerini otomatik veri tabanı bağlantısı kurarak oluşturabiliyoruz. Burada her POJO nun yanında ".hbm.xml" dosyası da oluşturulur. Her tablonun bilgileri ve diğer tablolarla olan ilişkileri burada belirtilir. Bunun yanı sıra bu işlemleri yaparken dikkat etmemiz gereken çok ince bir ayrıntı var , o da bağlantıyı yapacak Connector kütüphanesini de proje kütüphanelerine dahil etmeliyiz. Yoksa diğer bütün işlemleri doğru yapsak bile sonuç elde edemeyiz. Bu yüzden aşağıdaki Hibernate Configuration videosuna göz atmanızı tavsiye ederim.


            Hibernate ile bağlantıyı kurduktan  ve POJO ları oluşturduktan sonra Managed Bean içerisine fonksiyonlarımızı yazıyoruz ve Xtml sayfamıza  “ <p:dataTable …“ componentimizi ekliyoruz  buradan  yazdığımız fonksiyonu çağırıyoruz ve veriler geliyor. Yazı ile en basit şekilde böyle anlatabiliyorum.  Aşağıdaki ikinci videoda ise baştan sona kadar bahsettiğim şeyleri sıra ile yapıyorum. Yazıda görüldüğü gibi hiç kod yok. Bunun sebebi yazı ile detaylı anlatmaya kalktığımda işlerin karışacağıdır. Bu yüzden video ile daha rahat anlaşılabilir. Son olarak direk bulunduğunuz sayfayı deploy etmek için  Shift+F6’yı kullanabilirsiniz. 






6 Ekim 2014 Pazartesi

Arduino Sensörlü Lamba Uygulaması




                Aslında bu uygulama gerçek hayatta hemen hemen her yerde kullanılan ,  hareketi algıladığı anda eğer ortam ışığı yetersiz ise lambanın yanmasını sağlayan sensörlü lambanın Arduino ile gerçekleştirilmesidir.(Neredeyse bütün binalarda mevcuttur) Bu uygulamada  PIR(hareket sensörü) , LDR , led ve 1 K lık bir direnç kullandım.  Bu malzemeler olduktan sonra yapımı çok kolay ve eğlenceli aynı zamanda gerçek hayatta oldukça kullanılan bir uygulamayı gerçekleştirmiş olacağız.

Uygulamanın Kod kısmında ise LDR den okuduğum değer düşük olduğunda ve aynı anda hareket algılandığında ledin yanmasını sağladım.  Aşağıda devre şeması , kodu ve yaptığım uygulamanın resimleri bulunmaktadır.



int pirPin = 3;
int ledPin = 10;
int deger = 0;            

void setup() {
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  int ldr = analogRead(A0);
  deger = digitalRead(pirPin);
  Serial.println(ldr);
  if (deger == HIGH && ldr <= 15) {
    digitalWrite(ledPin,HIGH);
  }
  else{
    digitalWrite(ledPin,LOW);
  }
  delay(500);
}