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

PARDUS

Günümüzde en çok kullanılan konulardan birisi artık Milli ürünlerin kullanılması. Son zamanlarda yaşanılan olaylar bizi bu konuları konuşmaya yönlendirdi bence çokta güzel oldu çünkü kendi ürünlerimizi kendi mühendislerimizin çalıştığı ürettiği ürünleri kullanmayıp hepimiz yabancı ürünleri kullanıyoruz. İşletim sistemi denilince hepimizin aklına ilk olarak Windows gelir çünkü alışmış olduğumuz sistem bu kullanım kolaylığı açısından tam olarak son kullanıcıya uygun ve yaygınlaşmış olduğu için hepimiz Windows kullanmışızdır. Her ne kadar çakma crackli olarak kullanılsa da bizim Windows kullanmamız bile fazlasıyla kazandıran bir eylem. İşletim sistemleri olarak üç temel sistem olduğunu söyleyebilirim birincisi Windows ikincisi MacOS ve üçüncüsü Linux diğer ikisine göre Linux açık kaynaklı bir sistem güvenlik açısından daha güvenli denilebilir. Peki yeni bir sıfırdan işletim sistemi yapmak çok mu zor zor hatta çok zor denilebilir. Pardus sıfırdan bir işletim sistemi değil mi diye soracaksınız değil Linux tabanlı bir işletim sistemi nasıl Milli oluyor o zaman diyeceksiniz çekirdek olarak Linux kullanılsa da yine Türk yazılımcılar tarafından geliştirilen bir İşletim Sistemi bence bu Milli İşletim Sistemi demek için yeterli.

Pardus’un detayına girelim. Pardus TÜBİTAK tarafından geliştirilen Linux çekirdek kullanılarak geliştirilmiş bir işletim sistemi Linux kullanılmasının nedeni açık kaynaklı olması. Linux olmasının belli avantajları var mesela güvenli bir sistem virüsler trojenler bu sistemlerde çalışamıyor ama şu da unutulmamalı hiçbir sistem %100 güvenli değildir. Pardus ismini Anadolu Parsından almakta

2002 yılından beri bu çalışmalar yapılmaktadır. Yani bir iki yıllık bir çalışma olmadığını söyleyebilirim. Pardusu kimler kullanabilir diye sorabilirsiniz Windows’a kıyasla Linux sistemler biraz daha bilgi ve deneyim gerektiriyor biraz daha fazla sorun çıkartabiliyor Windows’a oranla kullanan kişi sayısı daha az olduğu için sorunlara karşı kaynak da az ama bu sorunlar Pardus kullanmamıza engel değil. Ben de çoğu bilgisayar kullanıcısı gibi 1 yıl öncesine kadar Windows kullanıyordum fakat son bir yıldır Pardus da kullanmaktayım ilk başlarda Windowsun yanına kurarak çift sistemli çalışarak yavaş yavaş Linux’a geçmeye başladım ve şuan sadece Linux kullanıyorum. Bir yıldır kullanmama rağmen daha buz dağının görünen kısmının çeyreğini gördüm diyebilirim çünkü Linux size bilgisayarın tüm kontrolünü verebilecek bir sistem. Windows her ne kadar kullanıcı dostu olsa da sizi kısıtlayan bir sistem fakat Linux da kısıtlama yok denebilir sizi kısıtlayan sadece bilginiz oluyor. Sorumuza geri dönelim Pardusu kimler kullanabilir tek kelimeyle herkes. Pardusun farklı sürümleri mevcut mesela ben görselliğe çok önem veririm kullanacağım sistem canlı olacak tasarımıyla göz kamaştıracak derseniz DDE sürümü sizi bekliyor

performansı diğer sürümlere göre biraz daha düşük olabilir. Performans ağırlıklı olsun görünüş önemli değil diyenler için XFCE sürümü kollarını açmış sizi bekliyor 🙂

Şunu da eklemeliyim başlangıçta DDE kurduktan sonra XFCE ye geçiş yapabilirsiniz nasıl diye sorarsanız Pardus forum yada google amca size yardımcı olacaktır. Hangi sürümü kuracağınızı seçtikten sonra Pardus’un sitesinden kurulum dosyalarını indirdikten sonra Pardus kısa sürede bilgisayarınıza kurulabilir nasıl kurucaz ben bilmem diyebilirsiniz Pardus bu konuda güzel bir anlatımla kurulum klavuzunu da yanında getiriyor. Yaşadığınız sorunlar olursa google da arama yaparak hem bilgileriniz arttırabilir hem de kendi sorununuzu çözebilirsiniz. Google da bulamazsanız Pardus Forumunda ileri derecede Linux bilen yöneticiler size yardımcı olacaktır. Kurulum bitti Pardus karşınızda bence ilk yapmanız gereken ayarları kurcalamak Windows’a kıyasla farklı gelebilir  ama alışacaksınız. Windowsta kullandığınız bazı programlar Pardus ta olmayabilir Photoshop gibi bunu çeşitli programlar kullanarak örneğin Wine kullanarak Pardus ta açabilir hale getirebilir yada ona yakın programlar kullanarak alternatifleri değerlendirebilirsiniz. Pardus sürekli geliştirilen bir sistem kararlı bir sistem çok sorun çıkartmayan bir sistem örneğin Pardus Mağaza uygulaması geliştiriliyor ve kullanıma sunulmuş bir uygulama bu uygulamaya sürekli yeni uygulamalar eklenmekte ve sürekli kullanılan programlar buradan kurulabilir. Chromium ilk kuracağınız uygulama olabilir.

Sözü biraz fazla uzattım sanırım kısaca Pardus linux çekirdekli yerli ve milli bir işletim sistemidir. Türk yazılımcılar geliştirmektedir. Tüm kullanıcılar için uygun bir sistemdir biraz araştırma yeteneğinizi güçlendirmenize katkı sağlayabilir. Pardus forumda deneyimli yetenekli ve bilgili destek ekibi size hizmet için çalışmaktadır. Siz de hemen şimdi kurabilir Ülkenize Türk yazılımcılara destek olabilirsiniz. Bu konu hakkında herhangi bir sorunuz olursa size yardımcı olmak için bende buradayım

Pardus resmi sitesine buradan

Pardus forumuna buradan ulaşabilirsiniz.

444 5 773 Pardus Destek Hattı da sizler için çalışmakta.

Renklerin dünyasına hoşgeldiniz bugün RGB ledin kısacık kodlamasını ve bağlantı şekline bakacağız. Kısacık diyorum çünkü gerçekten çok kısa sürüyor hazır hale getirmek. Arduino da yapacağımız en renkli uygulamalardan biri diyebiliriz. Öncelikle bu RGB ledi nerelerde kullanabiliriz ona değinelim. Dekorasyonla uğraşan arkadaşlar bu örneği çok sevecekler çünkü çok canlı ve güzel şeyler ortaya çıkabilir. Odanızda küçük güzel renkli aydınlantmalar yapabilirsiniz. Yada tek bir ledden tüm renkleri sağlayabildiğiniz için farklı renklerde ledler kullanmayıp tasarruf sağlayabilirsiniz. Ayrıca diğer ledlerde göre renkler de daha canlı olacaktır. Küçük mobil uygulamayla yönetebilir ve akıllı led lambalar elde edebilirsiniz ve daha birçok uygulamada bu küçük malzememizi kullanabilirsiniz.

Bağlantıda yapmanız gereken R pinini 11.pine G pinini 10.pine B pinini ise 9.pine bağlamak birde – pini var buda ground yani toprak GND pini. Bağlantı bukadar 4 tane kabloyla bitiyor.

Kodlarımızda bağlantımız kadar kısa ve öz ama size önerim kodda verilen değerlerle oynayarak farklı renkler elde etmeye çalışın böylece konuyu daha iyi kavrayabilirsiniz. Sonraki örneklerimizde RGB yide kullanarak çeşitli çalışmalar yapmaya çalışacağız.

Kodların kaynağı bu adrestir arkadaşlar daha detaylı incelemek isteyen bu adresten inceleyebilir ayrıca sorusu olanlar yorumda belirtebilir daha net açıklayabilirim.

int redPin = 11;
int greenPin = 10;
int bluePin = 9;
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);  
}
 
void loop()
{
  setColor(255, 0, 0);  // Kırmızı
  delay(1000);
  setColor(0, 255, 0);  // Yesil
  delay(1000);
  setColor(0, 0, 255);  // Mavi
  delay(1000);
  setColor(255, 255, 0);  // Sarı
  delay(1000);  
  setColor(80, 0, 80);  // Mor
  delay(1000);
  setColor(0, 255, 255);  // Su Rengi
  delay(1000);
}
void setColor(int red, int green, int blue)
{
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);  
}

 

Kendi dijital masa saatinizi yapmak istermisiniz. Cevabı evet olanları buraya toplayalım. Arduino kullanarak kısa sürede kendi saatinizi yapabilirsiniz. Üstelik kendi saatiniz olduğu için kendiniz kendi isteklerinize göre saatinizi şekillendirebilirsiniz. Bu yazı serimizde ilk olarak bir saat yapıp sonra bu saati geliştireceğiz alarm ekleyeceğiz internete bağlayacağız aklımıza ne geliyorsa o yönde geliştirmeler yapacağız. İlk olarak saatimizi yapmak için ihtiyacınız olan elemanları alıyoruz.

  • 1 tane gerçek zaman saat modülü
  • 1 tane 4 digit 7 segment display
  • Bağlantı için jumper kablolar
  • Arduino Mega

Arduino mega kullanmamız gerekyor çünkü 4 digit 7 segment display biraz fazla pin tüketiyor 🙂 Evet elemanlarımızı topladıktan sonra birkaç kütüphane kullanmamız gerekiyor.

Piyasada çeşitli gerçek zaman saat modülü var arkadaşlar ben DS1032 RTC modülü kullanıyorum çünkü elimde bu modül vardı. RTC için kütüphaneyi buradan indirebilirsiniz.

4 digit 7 segment display için kütüphaneye de buradan ulaşabilirsiniz.

Kütüphaneleri taslak -> library ekle -> zip kitaplığı ekle bölümünden direk ekleyebilirsiniz.

Kütüphaneleri indirip ekledikten sonra yapmamız gereken bağlantı ve kodlama kalıyor.

4 digit 7 segment displayin bağlantısını resimde gösterildiği gibi yapabilirsiniz.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bağlantı arduino uno üzerinde gösterilmiş fakat çok farkı yok mega üzerinde de yine aynı pinlere bağlantı yapacağız.

RTC modülümüzün bağlantısını da şu şekilde yapacağız

 

 

RTC VCC -> Arduino 5v

RTC GND -> Arduino GND

RTC CLK -> Arduino 50.pin

RTC DAT -> Arduino 51.pin

RTC RST -> Arduino 52.pin

 

 

 

 

RTC Bağlantısı da bu şekilde yaptıktan sonra kodlama kısmına geçebiliriz.

#include <DS1302.h>
#include "SevSeg.h"
Time t;
DS1302 rtc(52, 51, 50);
SevSeg sevseg;
void setup()
{
  rtc.halt(false);
  rtc.writeProtect(false);
  rtc.setDOW(FRIDAY);       
  rtc.setTime(15, 05, 30);   //Saati ayarlıyoruz.
  rtc.setDate(17,7, 2018);  //Tarihi ayarlıyoruz.
  byte numDigits = 4;
  byte digitPins[] = {9, 10, 11, 12};
  byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 13};
  bool resistorsOnSegments = false; 
  byte hardwareConfig = COMMON_ANODE; 
  bool updateWithDelays = false;
  bool leadingZeros = false; 
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
  sevseg.setBrightness(90);
  Serial.begin(9600);
}
void loop()
{  
 t = rtc.getTime();
 int saat = t.hour*100; //4 haneli olması için saati 100 le çarpıyoruz
 int dakika = t.min; //dakikayı direk alıyoruz.
 int yazdir = saat+dakika; //direk toplayarak saat ifadesini alıyoruz.
 sevseg.setNumber(yazdir,2); //,2 nin anlamı . ifadesini nereye konulacağını belirtmek
 sevseg.refreshDisplay(); //displayi yeniliyoruz..
}

Kodlar bukadar arkadaşlar çok deneme imkanım olmadı buglar olabilir kullandıkça fark ettikçe düzenlemeler yapabilirim arkadaşlar sizin de gördüğünüz hatalar öneriler varsa uyarabilirsiniz. Kolay gelsin

Şanslı arkadaşları hemen buraya alalım 🙂 evet arkadaşlar arduino ve joystick modülü ile oyun nasıl yaparız küük bir örnekle göreceğiz. İlk önce joystick modülü nasıl bağlanır

Joystick modülü üzerinde 5V -> Arduino 5v çıkış

Joystick modülü üzerinde GND -> Arduino GND

Joystick modülü üzerinde Vrx -> Arduino analog A1

Joystick modülü üzerinde Vry -> Arduino analog A0

Joystick modülü üzerinde SW -> Arduino dijital 2.pin

şeklinde bağlantımızı yapıyoruz. Modül x ve y eksenlerinde 0 dan 1024 e kadar olan eksenlerden oluşuyor hiç ellemediğiniz takdirde x ve y değerleri 500 olacak sağ sol yukarı ve aşağı yaptığınızda 0 yada 1024 e gidecektir.

Oyuna gelecek olursak 6 tane ledi arduinomuza bağlıyoruz. 3,4,5,6,7 ve 8. pinlere ledlerimizi bağlıyoruz. Ledin + ucuna küçük bir direnç eklemeyi unutmayalım. Ledleri ve joystick modülü bağladıktan sonra oyun hakkında biraz detay vereyim. Oyunun amacı bilgisayar 6 ledden bir tanesini rastgele seçmekte siz de bir tahmin yaparak bilgisayarın seçtiği ledi bulmaya çalışıyorsunuz. Led seçmek için joystick modülünü sağ sol yapıyoruz. Bir tanesini seçtikten sonra joystick butonuna basarak secimi yapıyoruz. biz seçimi yaptıktan sonra bilgisayar kendisi rastgele bir sayı üretiyor ve bizim sectigimizle karşılaştırıyor. Eğer bizim tahminimizle bilgisayarın seçimi aynıysa bizim puan hanemize 1 puan ekleniyor eğer aynı değilse bilgisayara 1 puan yazılıyor ilk kim 5 puana ulaşırsa o kazanıyor.

 

 

 

 

 

 

 

 

 

Evet Serial monitor de yukarıdaki çıktı gibi olacak. Zevkli bir oyun olduğumu düşünüyorum. Burada bilgisayarın rastgele bir sayı üretmesi için random fonksiyonunu kullandık kullanımı da şu şekilde

random(minimum,maximum-1) biz kodlarda random(3,9) yazdık nedeni ledlerin bağlandığı pin numaralarını referans aldık ama oyunu oynayan kişiye gösterirken 2 çıkartıp öyle gösterdik.Kodlara geçebiliriz artık kodlarda anlaşılmayan bir yer olursa yorumda belirtmeniz yeterli arkadaşlar gerekli açıklamayı yapabilirim.

int xPin = A1;
int yPin = A0;
int butonPin = 2;
int secilen;
int xKonum = 0;
int yKonum = 0;
int butonDurum = 0;
int led = 3;
int oyuncu;
int bilgisayar;
void setup() {
  Serial.begin(9600); 
  pinMode(xPin, INPUT);
  pinMode(yPin, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(butonPin, INPUT_PULLUP); 
  Serial.println("Arduino ruleti oyununa hosgeldiniz.");
  Serial.println("Oyun bilgisayara karsi oynanmaktadir. Amaciniz joystic yardımıyla bilgisayarın sectigi ledi tahmin etmek.");
  Serial.println("Tahmin ettiginiz led bilgisayarın sectigi led ile aynıysa siz kazanırsınız aksi takdirde bilgisayarin puan hanesine eklenir.");
  Serial.println("ilk 5 puani elde eden kazanir. Hadi oyuna...");
  Serial.println("Joystic ile bir led secip joyisic uzerindeki butona basin.");
}

void loop() {

  xKonum = analogRead(xPin);
  yKonum = analogRead(yPin);
  butonDurum = digitalRead(butonPin);
  digitalWrite(led,HIGH);
  if(xKonum >= 1000)
  {
    digitalWrite(led,LOW);
    if(led+1 <= 8)
    {
    led = led+1;
    digitalWrite(led,HIGH);
    }
  }
  if(xKonum <= 300)
  {
    digitalWrite(led,LOW);
    if(led-1 >= 3)
    {
    led = led-1;
    digitalWrite(led,HIGH);
    }
    
  }
  if(butonDurum == 0)
  {
     secilen = led;
     int ran = random(3,9);
     Serial.print("Bilgisayarin secimi=");
     Serial.println(ran-2);
     Serial.print("Sizin tahmiminiz=");
     Serial.println(secilen-2);
     if(secilen == ran)
     {
      Serial.println("Tebrikler tahmininiz dogru 1 puan kazandiniz.");
     oyuncu = oyuncu+1;
     }
     else
     {
     Serial.println("Uzgunum tahmininiz dogru degil 1 puan bilgisayara eklendi");
     bilgisayar = bilgisayar+1;
     }
       Serial.print("Sizin Puaniniz=");
  Serial.println(oyuncu);
  Serial.print("Bilgisayarin puani=");
  Serial.println(bilgisayar);
        Serial.println("-------------------------------------------------------------------");
  if(oyuncu == 5)
  {
    Serial.println("Tebrikler bilgisayari yendiniz... Tekrar oynamak icin led secip dugmeye basin...");
    Serial.println("-------------------------------------------------------------------");
    oyuncu = 0;
    bilgisayar = 0;
  }
  if(bilgisayar == 5)
  {
    Serial.println("Bilgisayar kazandi... Tekrar oynamak icin led secip dugmeye basin...");
    Serial.println("-------------------------------------------------------------------");
     oyuncu = 0;
    bilgisayar = 0;
  }
  }

  
  delay(100);
}

 

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 🙂

Diziler kullanım alanları çok geniş bir konu olması nedeniyle birçok örnek türetilebilir. Biz bu yazımızda temelden başlayarak birkaç örnekle konuyu daha iyi kavramaya çalışacağız hemen örneklere geçelim

1)Klavyeden girilen n tane sayıyı ekrana yazdıran, toplamını ve ortalamasını bulan programı yazın

#include <iostream>
using namespace std;
int i,n,dizi[10],toplam;
float ortalama;
main(){
    cout<<"n degerini girin=";
    cin>>n;
    for(i=0;i<n;i++)
    {
        cout<<"Dizinin "<<i<<".elemanini girin=";
        cin>>dizi[i];
        toplam=toplam+dizi[i];
    }
    for(i=0;i<n;i++)
    {
        cout<<dizi[i]<<"\n";
    }
    cout<<"Ortalama="<<toplam*1.0/n;
}

2)Klavyeden girilen n tane sayidan en buyuk olanı bulan program

#include <iostream>
using namespace std;
int i,n,dizi[10],enbuyuk;
main(){
    cout<<"n degerini girin=";
    cin>>n;
    for(i=0;i<n;i++)
    {
        cout<<"Dizinin "<<i<<".elemanini girin=";
        cin>>dizi[i];
    }
    enbuyuk=dizi[0]; //ilk olarak bir tane referans buyuk deger seciyoruz.
    for(i=0;i<n;i++)
    {
        if(dizi[i]>enbuyuk)
        {
        	enbuyuk=dizi[i]; //elemanları belirlediğimiz referansla karşılaştırıyoruz
		}
    }
    cout<<"En buyuk eleman="<<enbuyuk;
}

3)Klavyeden 30 tane ogrencinin not ortalamaları girilecektir sizden istenen girilen notlara bakarak ortalaması 70 den buyuk olanların sayısını bulmaktır. Bu işi yapmak için küçük bir yazılım yazmak istiyorsunuz ve kodlamaya başlıyorsunuz… (unutmayın 300 tane ogrencide olabilirdi)

#include <iostream>
using namespace std;
int i,n,gecensayisi;
main(){
    cout<<"Ogrenci sayisini girin girin=";
    cin>>n;
    float dizi[n];
    for(i=0;i<n;i++)
    {
        cout<<i+1<<".ogrencinin notunu girin=";
        cin>>dizi[i];
    }
    for(i=0;i<n;i++)
    {
        if(dizi[i]>=70)
        {
        	gecensayisi=gecensayisi+1;
		}
    }
    cout<<"Gecen ogrenci sayisi="<<gecensayisi;
}

Şimdilik bu kadar alıştırma yeter arkadaşlar sonraki yazımızda senaryo şeklinde örneklerle devam edeceğiz. Soruları tek tek cevaplara bakmadan çözmenizi öneririm bu sizin için daha faydalı olacaktır.

Bir önceki yazımızda keypad kullanımına değinmiştik keypad görünce hepimizin aklına parola sistemi gelişmiştir. Keypad parola sistemiyle ne yapabiliriz diye bakacak olursak şifreli kapılar aklımıza gelir şifreyi girdiğimizde kapı açılır aksi halde açılmaz evet yapacağımız örnekte tam olarak bu şekilde C++ da yaptığımız gibi soru cevap şeklinde bir örnek yapalım.

SORU:

Akıllı ev sistemi dizayn etmek istiyorsunuz çeşitli sensörler kullanarak sistemi tasarlamaya başladınız ve aklınıza şifreli kapılar geldi. Sizde aldığınız bir keypad kullanarak bir şifre sistemi yapmaya karar verdiniz. İstediğiniz özellikler

Sistem 3 hak verecek başarısız olursa birdaha giriş kabul etmeyecek

Şifre 4 haneli olacak

Şifre doğru olduğunda tekrar bir giriş kabul etmeyip şifrenin doğru olduğunu yazacak

CEVAP:

#include <Keypad.h>
const byte ROWS = 4;
int i;
int j;
int dogruluk;
char sifre[4];
char asil[4] = {'1','2','3','4'};
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
  {'0','1','2','3'},
  {'4','5','6','7'},
  {'8','9','A','B'},
  {'C','D','E','F'}
};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {9, 8, 7, 6};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 
void setup(){
  Serial.begin(9600);
  baslangic:
  dogruluk=0;
  i=0;
   Serial.println("Lutfen 4 haneli sifrenizi giriniz=");
  while(i<=3)
  {
  char customKey = customKeypad.getKey();
  if (customKey){
  sifre[i]=customKey;
  Serial.println(sifre[i]);
  i=i+1;
  }
  }
  Serial.println("Sifre kontrol ediliyor...");
  while(j<3)
  {
  for(i=0;i<4;i++){
  if(sifre[i]!=asil[i])
  {
    int dogruluk=0;
  }
  else
  {
    dogruluk=dogruluk+1;
  }
  }
  if(dogruluk==4)
  {
    Serial.println("Sifreniz dogru tesekkurler");
    break;
  }
  else
  {
    Serial.println("Sifreniz hatali tekrar deneyin...");
    j=j+1;
    if(j<3){
    goto baslangic;
    }
  }
  }
  if(dogruluk!=4){
      Serial.println("Sifre girisiniz kisitlanmistir. Lutfen yoneticiye basvurun...");
  }

}
void loop(){
 
}

Kodların açıklamasını yapmayacağım arkadaşlar biraz kendiniz kurcalamanız tek tek incelemeniz sizler için daha yararlı olacaktır. Eğer anlamadığınız bir yer olursa yorumlarda anlatabilirim

Sizin kendi yazdığınız koddan farklı olabilir neticede her yazarın bir kod yazışı vardır 🙂

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.