Merhaba arkadaşlar uzun bir süredir siteyle ilgilenemiyorum dolayısıyla yeni paylaşımlar da gelmedi. Bu süre içinde mail yoluyla iletişime geçen arkadaşlar oldu beraber sorunları çözmeye çalıştık ama ne kadar etkili oldu bilemiyorum. Burada hepimiz yazılımla ilgileniyoruz ve bilemediğimiz, yapamadığımız, sorun yaşadığımız konular oluyor ve google da aramalara başlıyoruz. Araştırmadan yeni şeyler öğrenemeyiz evet ama bazen araştırsak da anlamakta zorlandığımız konular olabiliyor.

Ben buradan sizleri yeni kurduğum Discord sunucumuza davet etmek istiyorum bilemediğimiz konulara hep birlikte çözüm aramaya beraber yeni projeler geliştirerek hep beraber öğrenmeye davetlisiniz. Bilmeyenler için Discord bir iletişim uygulaması. Sıradan bir sohbet uygulamasının yanında sesli ve görüntülü sohbeti ve ekran paylaşımını içeren bir uygulama. Peki bu sunucu da ne olacak kısaca bahsetmek istiyorum. Bir uygulama geliştirirken, bir ödev yaparken veya yeni bir şeyler öğrenirken kaynak sorunları yaşayabiliriz veya bulduğumuz kaynağı okurken zorlanabiliriz. Bu gibi durumlarda sunucuda bulunan diğer geliştirici arkadaşlardan yardım isteyebiliriz. Aramızdaki bilgili arkadaşlar belirli saatlerde oturum planlayarak bilgisini diğer arkadaşlara anlatarak aktarabilir bu hem kendi bilgisini pekiştirmesine hem de diğer arkadaşları bilgilendirmek için önemli olabilir. Beraber yazılım sohbetleri ederek yazılım konusunda da bilgilerimizi arttırabiliriz.

Şimdiden böyle bir etkinlik için fazlasıyla heyecanlıyım hepinizle tanışmak, beraber çalışmak, hep beraber yeni projelere adım atmak için sabırsızlanıyorum. Hepinizi tekrardan geliştirici ailemize katılmaya davet ediyorum. Sunucu bağlantı linkine Buradan Ulaşabilirsiniz.

https://discord.gg/fJfFzYdcPS

ESP8266 çeşitli IoT uygulamasında sıklıkla kullanılan bir modüldür. Arduino ve sensörler kullanarak çeşitli sensörlerle çeşitli uygulamalar yapabilirsiniz bu işlemin bir tık üstü ise bu sensörlerden alınan değerlerin internet ortamına aktarılması veya bu sensörleri internet ortamından kontrol edebilmektir. Bu yazımızda Arduino uno da DHT22 ile sıcaklık ve nem değerlerini ölçüp ESP8266 WiFi modülü ile bu değerleri kendi edindiğimiz ücretsiz veya ücretli bir hostingin veri tabanına aktaracağız. Bu verileri istediğimiz yerden görebilecek gerekli durumlarda müdahaleler yapabileceğiz. Bu uygulamaya benzer şekilde gerçek uygulamalar yapabilirsiniz örnek olarak

  • Oda sıcaklığını ve nemini ölçüp mobil cihazınıza veya web sitenize aktarabilirsiniz.
  • Toprak nem sensörü ile bitkilerinizin nem değerlerini uzaktan görebilirsiniz.
  • Ses sensörü kullanarak bebekler için bir kablosuz dedektör yapabilirsiniz.
  • Hareket sensörü kullanarak kablosuz dedektör yapabilirsiniz.

daha da çoğaltılabilir tamamen hayal gücünüze kalmış bir durum. Sözü fazla uzatmadan uygulamaya geçelim uygulama üç adımdan ibaret

1.adımda Arduino ve ESP8266 modülümüzü hazır hale getireceğiz.
2.adımda Web sitemizin veri tabanını düzenleyeceğiz.
3.adımda Web sitemizin değerleri alabilmesi için küçük bir php kodu hazırlayacağız.

1.Adım Arduino ve ESP8266 Bağlantısı.

İlk olarak donanımı hazır hale getiriyoruz bunun için DHT22 data pinini Arduino 2.pine VCC pinini 5V GND pinini ise Arduino GND sine bağlıyoruz. ESP8266 Tx pinini Arduino Rx pinine Rx pinini Arduino Tx pinine VCC ve CH_PD pinlerini Arduino 3.3V çıkışına GND pinini ise Arduino GND pinine bağlıyoruz.

Bağlantıları yaptıktan sonra Arduinoya kod yüklememiz gerekiyor bunun için şimdilik Arduinoya bağlı olan Tx ve Rx kablolarını çıkartıyoruz aksi takdirde kod yüklenmeyecektir.

//ESP8266
#define ag_ismi "Ag_ismi" //kablosuz ağınızın adını buraya girin
#define ag_sifresi "Ag_sifresi" //kablosuz ağınızın şifresini buraya girin
#define IP "siteadiniz.com" //ornek.com şeklinde alan adınızı girin
#include "DHT.h"
#define DHTPIN 2 //DHT pinini 2.pine bağladık
#define DHTTYPE DHT22 //DHT22 kullanacağımızı belirttik 
DHT dht(DHTPIN, DHTTYPE); //DHT sensörü tanımlıyoruz
void setup() {
dht.begin(); //DHT sensörü başlattık
Serial.begin(115200); //Serial haberleşmeyi başlattık
Serial.println("AT"); //ESP çalışmasını kontrol ediyoruz.
delay(10);
if(Serial.find("OK")){   //ESP cevap olarak OK gönderirse devam
Serial.println("AT+CWMODE=1"); //ESP çalışma modunu sadece ağa bağlanabilir oalrak değiştiriyoruz.
String baglantiKomutu=String("AT+CWJAP=\"")+ag_ismi+"\",\""+ag_sifresi+"\"";
Serial.println(baglantiKomutu); //ağa bağlanıyoruz.
delay(100);
if(Serial.find("OK")) //bağlantı başarılı olursa devam
{
Serial.println("aga baglanildi");
}
else
{
  Serial.println("Ag baglantisi saglanamadi tekrar deneniyor...");
  Serial.println("AT+RST"); //bağlanamazsa ESP resetlenir
  delay(1000);
  asm volatile ("  jmp 0"); //Arduino resetlenir
}
} 
else
{
  Serial.println("ESP ile baglanti saglanamadi tekrar deneniyor...");
  Serial.println("AT+RST"); //ESP bağlanmazsa ESP resetlenir
  asm volatile ("  jmp 0"); //Arduino resetlenir
  delay(100);
}
}
void loop() {
float n = dht.readHumidity(); //DHT den nem değerini okuyoruz
float s = dht.readTemperature(); //DHT den sıcaklık değerini okuyoruz
Serial.print("Hava Sicakligi: "); //Ekrana yazdırıyoruz.
Serial.println(s); 
Serial.print("Nem Orani: ");
Serial.println(n); 
sicaklik_yolla(n,s); //Sıcaklık yolla fonksiyonuna değerleri yoluyoruz.
}
void sicaklik_yolla(float n, float s){ 
Serial.println(String("AT+CIPSTART=\"TCP\",\"") + IP + "\",80"); //TCP bağlantısını başlatıyoruz.
delay(2000);
if(Serial.find("Error")){  
Serial.println("AT+CIPSTART Error");
Serial.println("AT+RST");
asm volatile ("  jmp 0"); //Arduino resetlenir
delay(1000);
}
String yollanacakkomut = "GET /writer.php?"; //Get methoduyla sitedeki writer.php dosyasına veri göndereceğiz
yollanacakkomut += "&s="; 
yollanacakkomut += (String(s)); //Stringe dönüştürüp yolluyoruz
yollanacakkomut += "&n=";
yollanacakkomut += (String(n));
yollanacakkomut += " HTTP/1.1\n";
yollanacakkomut += ("Host: siteadi.com\n"); //alan adinizi girin
yollanacakkomut += ("User-Agent: Arduino\n");
yollanacakkomut += "\r\n\r\n";                                                                                                                        
Serial.print("AT+CIPSEND="); //veri göndermeye başlıyoruz.                  
Serial.println(yollanacakkomut.length()+2); //gönderilecek veri boyutunu giriyoruz.     
delay(4000);
if(Serial.find(">")){  //> işareti gelirse veriyi yazıyoruz                        
Serial.print(yollanacakkomut);
Serial.print("\r\n\r\n");
}
else{
Serial.println("AT+CIPCLOSE");
Serial.println("AT+RST");
asm volatile ("  jmp 0"); //veri gönderilmezse arduino resetlenir.
  delay(100);
}
Serial.println("AT+CIPCLOSE");
//delay(10000);
delay(90000); //Sürekli veri göndermemesi için bir süre bekletiyoruz.
}

Kodlarımızı Arduino uno yada başka bir sürüme yüklüyoruz. Yükleme işlemi bittikten sonra arduinonun Tx ve Rx pinlerini tekrar bağlayıp arduinoya reset atıyoruz. Herşey düzgün bir şekilde yapıldığında Arduino veri göndermeye başlamış olmalı şimdi bu veriyi alma kısmına geldi bunun için 2.adıma geçiyoruz.

2.Veri Tabanının Düzenlenmesi

Veri tabanımıza erişmek için öncelikle cPanele giriyoruz ve oradan phpMyAdmine giriş yapıyoruz. Veritabanı konusunda hosting firmanızın bir sınırlaması yoksa yeni bir veritabanı oluşturabilirsiniz. Veritabanımızın tabloları şu şekilde olmalı

  • İd (primary)
  • Tarih (TİMESTAMP)
  • Sicaklik (float)
  • Nem (float)

Veritabanımızı oluşturduktan sonra veri almak için küçük bir adımımız kaldı

3.PHP kodların yazılması

PHP kodları bizim arduinodan aldığımız veileri veritabanına kaydetmek için gereklidir. Bunun için masaüstüne writer.php adında bir dosya oluşturuyoruz. Dosya uzantısının .php olduğundan emin olalım ve kodlarımızı yazalım

<?php

$nem = $_GET['n']; // n değeri arduinonun gönderdiği değişken adı
$sicaklik = $_GET['s']; // s değeri arduinonun gönderdiği değişken adı
if (!$nem) { // eğer değerler alınmazsa 0 yazdıracak
  $nem = 0;
}
if (!$sicaklik) {
  $sicaklik = 0;
}

$db = new PDO("mysql:host=localhost;dbname=**veritabaniadi**", "**kullaniciadi**", "**sifre**");
/* Burada yildizları ve içerisini veritabanı adı,kullaniciadi,sifre ile değiştiriyoruz yildizlarida siliyoruz dbname="deneme" gibi */
if($db)
{
	echo("baglanti basarili");
}
else
	echo("baglanti basarisiz");

$now = new DateTime();
$datenow = $now->format("Y-m-d H:i:s"); //tarih saati yazdiriyoruz

$insert = $db->query("INSERT INTO `bitirme` (`id`, `tarih`,`sicaklik`,`nem`) VALUES (NULL, CURRENT_TIMESTAMP , '".$sicaklik."', '".$nem."')");
//insert komutunda önemli olan isimler ve siralamanın doğru olması
if ( $insert ){
    $last_id = $db->lastInsertId();
    print "insert islemi basarili";
}
$db = null;
?>

php kodlarımızı da yazdıktan sonra writer.php dosyasını public_HTML içerisine atıyoruz.

Bütün işlemleri başarılı bir şekilde yaptığınızda arduino çalıştıkça veritabanına veriler gönderilecektir. Sorun yaşayanlar yorum yapabilir. Kolay gelsin arkadaşlar

ESP8266 WiFi modülünü arduinomuza bağladıktan sonra AT komutlarını kullanmayı öğrenmemiz lazım daha doğrusu hangi AT komutu ne işe yaradığını bilmemiz gerekiyor. AT komutlarını serial monitora yazarak kullanabiliyorduk peki hangi komut ne işe yarıyor hemen başlıca komutlara bakalım.

AT = ESP8266 nın çalıştığını kontrol etmek için kullanırız. Serial monitore yazdığımızda ESP bize OK cevabını verirse modül çalışıyor demektir.

AT+RST = ESP8266 yı resetlemek için kullanılır.

AT+GMR = ESP8266 nın yazılım versiyonunu göstermek için kullanılır.

AT+CWLAP = ESP8266 modülüne yakalanan ağları listeler.

AT+CWJAP = Bir ağa bağlanmak için kullanılır. AT+CWJAP=”SSID”,”Password” şeklinde kullanılır.

AT+CWQAP = Bağlanılan ağdan çıkış yapmak için kullanılır.

AT+CIFSR = ESP8266 nın aldığı ip adresini gösterir.

AT+CWMODE = ESP8266 nın çalıştığı modu ayarlayabiliriz. ESP 3 modda çalışır. 1.modda ESP8266 başka ağlara bağlanabilir. 2.modda ESP8266 bir ağ kurar ve diğer cihazlar bu ağa bağlanabilir. 3.modda ise ESP her iki modda da çalışabilir. AT+CWMODE=1 şeklinde kullanılır.

AT+ CWSAP = Eğer ESP8266 yı 2 yada 3.modda çalıştıracaksak bir kaç ayar yapmalıyız.

AT+ CWSAP= <ssid>,<pwd>,<chl>,<ecn> şekllinde kullanılır. ssid kurulacak ağın adıdır. pwd şifre chl kanal ve ecn şifreleme türüdür.

temel komutlarımız bu kadar arkadaşlar tüm komutları buradan görebilirsiniz.

Arduino bildiğimiz üzere yaz yazılım ile donanımın birleşmesiydi günümüz teknolojisinde bu biraz eskidi artık çünkü yeni nesil uygulamalar artık bunun üzerine çıkıyor yeni nesil IoT uygulamalarını konuşuyor. Peki nedir bu IoT uygulamaları? IoT açılımı Internet of Things yani nesnelerin interneti. Nesneler kullandığımız elektronik eşyalar aletlerdir ve bu cihazları internet aracılığıyla birbirine bağlayarak haberleşmelerini sağlamak kısaca IoT nedirin açılımıdır. Örneğin telefonla evinizdeki klimayı istediğiniz yerden açmak yada akıllı ev sistemleri.

Kısaca konu hakkında bilgi verdikten sonra bunu nasıl yapabiliriz konusuna gelelim. Bir nesneyi internete bağlamak için farklı yöntemler mevcut WiFi bunlardan sadece birisi bu yazımızda bu WiFi yi nasıl kullanırız nasıl bağlantı yaparız buna değineceğiz. Arduino ile bu işi yapacağız Arduinonun WiFi tabanlı versiyonu yada ethernet tabanlı versiyonu mevcut bunlardan birisini kullanabilirsiniz yada sıradan bir Arduinoya ESP8266 modülü bağlayarak sizde kendi IoT uygulamanızı yapabilirsiniz.

Hemen bir ESP8266 modülü satın alıyoruz ve bağlantıya geçiyoruz. Bağlantımız şu şekilde olacak

ESP8266 RX -> Arduino TX

ESP8266 VCC -> Arduino 3.3V

ESP8266 CH_PD -> Arduino 3.3V

ESP8266 TX -> Arduino RX

ESP8266 GND -> Arduino GND

Şeklinde bağlantımızı yapıyoruz. Bağlantımızı yaptıktan sonra yazılım tarafına geçiş yapıyoruz. ESP8266 modülünü Arduino ile beraber kullanacaksak herhangi bir kütüphaneye ihtiyacımız yok çünkü ESP8266 nın kendi üzerinde işlemcisi mevcut.

Şimdi tek yapmanız gereken

void setup() {
Serial.begin(115200);

}

void loop() {


}

Kodunu yükleyip serial monitoru açarak AT yazıp yolluyoruz. Sağ alttan Baund Rate değerini 115200  yapmayı unutmayın 🙂

Sonraki yazılarda örneklere geçiyoruz şimdilik bu kadar yeter 🙂

Merhaba arkadaşlar bugün sizlerle arduino ile keypad nasıl kullanılır birlikte inceleyeceğiz piyasada farklı şekillerde keypad ler mevcut bunlardan bir tanesini almanız yeterli türü çok fark etmiyor sadece ufak tefek bağlantı farklılığı yada tuşların konumu değişebiliyor. bir keypad aldınız nasıl bağlayacaksınız bu sorunun cevabı da resimde gösterildiği gibi arkadaşlar. Keypad de bulunan 8 pin (modele bağlı olarak değişebilir) arduinonun dijital 2.pininden 9.pinine kadar sırayla bağlanarak bağlantısını gerçekleştirebiliriz.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bağlantıyı yaptıktan sonra yüklememiz gereken bir de kütüphanemiz mevcut kütüphaneye arduinonun kütüphane yöneticisinden ulaşabilirsiniz.

 

 

 

 

 

 

 

 

 

 

 

Kütüphanemizi yükledikten sonra arduino ide de dosya menüsünden örnekler sekmesinde en altta kütüphane içerisindeki örnekleri görebiliriz. bizde burada o örneklerden bir tanesini analiz edelim.

#include <Keypad.h>
//keypadin satır ve sutun sayisini giriyoruz.
const byte ROWS = 4;
const byte COLS = 4;
//satır ve sutun sayılarına bağlı olarak tuş takımının karakterlerini belirtiyoruz
char hexaKeys[ROWS][COLS] = {
  {'0','1','2','3'},
  {'4','5','6','7'},
  {'8','9','A','B'},
  {'C','D','E','F'}
};
//bağladığımız pinleri belirtiyoruz
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {9, 8, 7, 6};
//girilen tüm değerleri kutuphaneye gonderiyoruz ve customKeypad keypadimize bu ismi veriyoruz.
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
}
  
void loop(){
    //keypadden değer okuyoruz
  char customKey = customKeypad.getKey();
  //eger herhangi bir tusa basılmıssa basılan tusun karakterini serial monitore yazdırıyoruz.
  if (customKey){
    Serial.println(customKey);
  }
}

Evet kodlarımız bunlar gerekli açıklamaları yorum satırlarında belirttim arkadaşlar sizin de sorunuz varsa yorumlarda sorabilirsiniz.

Küçük bir seranız olduğunu düşünelim ve sıcaklık çok arttığı zaman fanlar yardımıyla içeriyi havalandırsın toplamda 2 tane fan bulunsun sürekli olarak ortam sıcaklığını ölçsün sensör olarak DHT22 sıcaklık nem sensörünü kullanalım fan olarakta elinizde varsa küçük fanlardan bağlayabilirsiniz yoksa bir led bağlayarak test edebilirsiniz. Programda if deyimini kullanacağız size yabancı geldiyse buradan konu anlatıma buradan ise örneklere bakabilirsiniz. Hemen kodlara geçiyorum sorularınız olursa yorumlardan iletebilirsiniz arkadaşlar.

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  Serial.println("Basit Sera Uygulamasi");
  dht.begin();
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
}

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("DHT sensorunden veri okunamadi!");
    return;
  }
  if(t>=40)
  {
      Serial.print("Sera sicakligi=");
      Serial.print(t);
      Serial.print("Fanlar calistiriliyor...");
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
  }
  else
  {
      Serial.print("Sera sicakligi=");
      Serial.print(t);
      Serial.print("Fanlar durduruluyor...");
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
  }
}

Uygulamanın Proteus programındaki çizimi aşağıda verilmiştir benzer bir çizimi yapıp sizde kodunuzu deneyebilirsiniz

Döngülerin konu anlatımını yaptıktan sonra örneklere geçelim ne kadar çok örnek yaparsak o kadar çok kendimizi geliştiririz bu yüzden bolca örnek yapmalıyız arkadaşlar ve kodlar kendimiz tek tek yazmalıyız hadi örneklere geçelim.

1)Ekrana 100 kere Merhaba Dünya yazdıran program.

#include <iostream>
using namespace std;
int i;
main(){
    for(i=0;i<100;i++)
    {
        cout<<"Merhaba Dunya\n";
    }
}

2)1 den 100 e kadar sayıların toplamını bulan program.

#include <iostream>
using namespace std;
int i,toplam;
main(){
    for(i=1;i<=100;i++)
    {
    toplam=toplam+i;
    }
    cout<<"Toplam="<<toplam;
}

3)Klavyeden girilen 10 tane sayının kaç tanesinin çift kaç tanesinin tek olduğunu bulan program.

#include <iostream>
using namespace std;
int tek,cift,i,sayi;
main(){
    for(i=0;i<10;i++)
    {
        cout<<i+1<<".sayiyi girin=";
        cin>>sayi;
        if(sayi%2==0)
        {
            cift=cift+1;
        }
        else
        {
            tek=tek+1;
        }
    }
    cout<<"Cift sayi adeti="<<cift<<" tek sayi adeti="<<tek;
}

4)Klavyeden girilen n tane sayının toplamını bulan program.

#include <iostream>
using namespace std;
int toplam,sayi,i,n;
main(){
	cout<<"n degerini girin=";
	cin>>n;
    for(i=0;i<n;i++)
    {
        cout<<"Bir sayi girin=";
        cin>>sayi;
        toplam=toplam+sayi;
    }
    cout<<"Sayilarin toplami="<<toplam;
}

5)Klavyeden girilen n tane sayının ortalamasını bulan program.

#include <iostream>
using namespace std;
int n,i,toplam,sayi;
float ortalama;
main(){
    cout<<"n degerini girin=";
    cin>>n;
    for(i=0;i<n;i++)
    {
        cout<<i+1<<".sayini girin=";
        cin>>sayi;
        toplam=toplam+sayi;
    }
    ortalama=toplam*1.0/n;
    cout<<"Ortalama="<<ortalama;
}

 

Eat, Sleep, Code Repeat…

Hayatımızın döngüsü de bu şekilde değilmi yazılımcılar olarak 🙂 Ye uyu kodunu yaz ve başa dön döngüler tam olarak budur. Bir döngü yazarsınız ve döngü döndüğü sürece yapılacaklar diye devam edersiniz. For döngüsü C++ programlama dilinde ve diğer birçok dil de kullanılır. kullanımına bakacak olursak

for(i=baslangicdegeri ; i<=sınırdegeri ; i++){

Çalışacak kodlar

}

i diye bahsettiğimiz herhangi bir değişken olabilir a da diyebilirsiniz x de size kalmış yani her döngünün bir başlangıç değeri vardır birde bitiş hayatımızdan örnek verelim yine başlangıç zamanı doğduğumuz gün bitiş ise öldüğümüz gün olarak düşünebiliriz. burdada başlangıç değeri döngünün başlangıç değeri genel olarak 0 değerini kullanacağız. sınırdeğeri ise döngü ne zaman bitecek ne zaman sonlanacak bunu ifade ederiz örneğin i<=10 dediğimizde döngü sadece i 10 dan küçük yada eşit olduğunda çalışacaktır aksi takdirde döngüden çıkıp programa devam edecektir. Peki bu i değeri nasıl değişecek i++ da bu anlamdadır açılımı i=i+1 dir yani demek istediği her döngü döndüğünde i ye 1 ekler böylece i sürekli artacaktır. i++ yerine i– gibi değerler de yazabiliriz.

fordan sonra süslü parantezlerimizi açıp döngüde dönecek kod dizisini yazıyoruz. evet hemen küçük bir örnek ile bu konuyu noktalayıp diğer örnekler için başka yazıya geçelim

#include <iostream>
using namespace std;
int i,sinir;
main(){
    cout<<"Bir sinir degeri giriniz=";
    cin>>sinir;
    for(i=0;i<sinir;i++)
    {
        //toplamda sınır değeri kadar dongu donecektir.
        cout<<i<<".dongu donuyor\n";
    }
}

 

Arduino nun en temel uygulamalarından biri olan DHT22 sıcaklık nem sensörüyle ortamın sıcaklığını ve nemini ölçme uygulamasıyla başlıyoruz. Yemek tarifi gibi tarif olacak ama sonunda iyi anlayacağımıza inanıyorum 🙂

Gerekli malzemeler:

1 adet Arduino

1 adet DHT22 sıcaklık nem sensörü

3 adet dişi erkek jumper kablo

Hazırlanışı:

DHT22 nin VCC pinini yani + ucunu arduinonun 5V girişine bağlıyoruz. GND pinini yani – ucunu ise arduinonun GND girişine bağlıyoruz DHT22 dijital çıkış veren bir sensör o yüzden data pinini arduinonun dijital 2.girişine bağlıyoruz. 3.ping boş kalacak.

Arduino yu USB kablosu ile bilgisayara bağlıyoruz.

Kod yazımı için:

Kodumuzu yazmadan önce DHT22 kütüphanesini indirmemiz gerekiyor bunun için taslak sekmesinden library ekle kısmında libraryleri düzenleyi seçiyoruz.arama kısmında DHT22 yazıyoruz ve DHT sensor library kütüphanesinin 1.2.3 sürümünü kuruyoruz. Sürüme dikkat etmenizi öneririm aksi takdirde kodunuz çalışmayabilir.

Kod:

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  dht.begin();
}

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("DHT sensorunden veri okunamadi!");
    return;
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);
  Serial.print("Nem: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Sicaklık: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Sicaklik index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
}

Evet gördüğünüz gibi C++ örneklerine yazım çok çok benzer burada yabancı kelimeler

dht.begin dht kütüphanesinden gelir ve sensörü çalıştırır. Aynı şekilde dht.readHumidity(), dht.readTemperature(), dht.readTemperature(true) ifadeleri de kütüphaneden gelmektedir. sıcaklık ölçüm, nem ölçüm ve sıcaklıüı fahrenheit cinsinden ölçüm anlamına gelmektedir dht.computeHeatIndex ifadesin de sıcaklık indexini bulmak için kullanılan fonksiyondur.

if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(“Failed to read from DHT sensor!”);
return;
}

kısmında yapılan işlemde şu sensörden sıcaklık, nem yada fahrenheit cinsinden sıcaklık değerleri alınamazsa sensörden değer alınamadığını söyleyip tekrar denenmesini sağlayan kısımdır.

evet arkadaşlar arduino da ilk örneğimiz bu şekilde takıldığınız bir kısım olursa yorumlarda belirtebilirsiniz. kolay gelsin

Arduino Serial monitor dediğimizde aklımıza gelmesi gereken iletişimdir çünkü serial port üzerinden yapılan işlemler serial monitorde gözükür nedir bu işlemler. veri gönderme, yazı yazdırma bilgi verme gibi nedenlerle kullanabiliriz. Örneklerde bunu çok daha iyi anlayacağız. Öncelikle arduino programlayabilmemiz için arduino idesini kurmamız lazım Buradan indirebilirsiniz kolay bir kurulumu var dikkat etmeniz gereken kurulum sonunda arduino driverini kurmak için size soracak kurulmasına izin vermelisiniz. Arduino klon kullanıyorsanız eğer googledan aldığınız klon ürün hangisiyse (uno, mega gibi) klon driver yazarak ulaşabilirsiniz.

Arduino ideyi açarak ilk örneğimizi hemen yapıyoruz ve serial monitor kullanarak sonuca bakıyoruz.

Kod yazmaya geçmeden önce birkaç ayar yapmamız gerekiyor. File menüsünden prefences e giriyoruz. Karşımıza gelen ekrandan isterseniz dil olarak Türkçe’yi seçebilirsiniz. “Show verbose output during” bölümünden upload ve compilation kısımlarını işaretliyoruz böylece daha detaylı çıktı görebileceğiz.

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

İlk defa programı açtığınızda sizi bu yazılar karşılayacak kısaca özetlemek gerekirse Arduino da iki temel fonksiyon vardır bunlar setup fonksiyonu ve loop fonksiyonu. Setup fonksiyonunda yazdığımız kodlar sadece bir kere çalaıştırılırken loop fonksiyonunda yazılan kodlar sürekli tekrar eder yani bir döngü fonksiyonudur. açıklama satırlarını artık silip kodlarımızı yazabiliriz.

void setup() {
Serial.begin(9600);
Serial.print("Burada yazilan kodlar bir kere tekrarlanır");
Serial.println("println yazarsak alt satira yazdiririz.");
}

void loop() {
Serial.print("Merhaba Dunya");
}

“begin” başlatmak anlamındadır serial monitor kullanacaksak ilk olarak seri haberleşmeyi başlatmalıyız. Serial.begin yazarak bunu yapıyoruz 9600 değeri ise baund rate değerimiz normal uygulamalarda 9600 değeri işimizi görecektir. Seri haberleşmeyi başlattıktan sonra Serial.print yada Serial.println yazarak Serial monitore yazı yazdırıyoruz peki bunları nasıl göreceğiz.

Ekranın sağ üstünde gördüğümüz merceğe benzer işaretten serial monitoru açabilirsiniz dikkat etmeniz gereken iki nokta var birincisi serial monitorde sağ alttan baund rate yi kodda yazdığımız değerler aynı yapmak diğer dikkat edilmesi gereken ise arduino nun buyuk kucuk harfe duyarlı olması. Sonraki yazımızda görüşmek üzere 🙂