Arkadaşlar merhaba, daha önceki uygulamalarımızda ESP8266 WiFi modülü kullanarak Tweet atmış, sıcaklık verisini ThingSpeak kullanarak grafik haline getirmiştik. Şimdi ise biraz daha projevari bir çalışma yapacağız. Bu çalışmada ultrasonic sensör ile bir kapının açılıp açılmadığını kontrol edeceğiz ve kapı açılırsa telefonumuza “Hırsız Var!” şeklinde bir bildirim yollayacağız. Bitirdiğimizde projemiz aşağıdaki videodaki gibi olacak

Bu proje için kullanılacak malzemeler:

Ultrasonic mesafe sensörünün çalışma mantığından biraz bahsetmek gerekirse, sensörümüz ilk önce bir ses dalgası yolluyor daha sonra bu ses dalgası bir cisme çarpıp tekrar geri dönünceye kadar geçen süreyi tutuyor. Ses dalgası geri döndüğünde ise, Yol = Hız x Zaman formülü ile ne kadar uzaklıkta bir cisim olduğunu buluyor. Eğer bulunan mesafe belirlediğimiz sınırlarda ise ESP8266 ile telefona bildirim göndereceğiz.

Telefona bildirim yollamak için pushetta uygulamasını kullanacağız. Uygulamayı buradan indirebilirsiniz. Aynı zamanda uygulamaya www.pushetta.com bu adresten üye olup kanal açmamız gerekiyor. Siteye girdikten sonra sağ üstte Singup butonuna tıklayıp kullanıcı adı, e-posta gibi bilgileri girdikten sonra üyeliği tamamlıyoruz. Üyeliğimiz ile giriş yaptıktan sonra ekrana aşağıdaki gibi bir menü olan bir sayfa gelecek.

pushetta ana menu

Bu menüde Channels kısmına tıklayıp, Add a Channel butonu ile yeni bir kanal oluşturuyoruz. Kanal oluştururken bilmeniz gereken şey Kind seçeneğini “Public” yaparsanız siz izin vermeden de başkaları kanala abone olup bildirim alabilecek fakat “Private” seçeneğini işaretlerseniz sadece siz izin verirseniz başkaları kanala abone olup bildirim alabilir. Kanal açtıktan sonra Dashboard menüsüne geliyoruz ve aşağıdaki gibi bir kod karşımıza çıkıyor. Bu kodu kaydediyoruz, bu kodu daha sonra kod içerisinde kullanacağız.

pushetta api kod

Kanalı açtığımıza göre telefon uygulamamıza gelip arama bölümünden açtığımız kanalın ismini girerek takip etmemiz gerekiyor. Kanalı private şeklinde açtıysanız takip ettikten sonra ayrıca onaylamanız gerekiyor. Takip ettikten sonra kanalımızdan gelen her bildirimi almış olacağız.

Bu kısma kadar geldiğimize göre devremize geçebiliriz.

devre_semasi

Üstteki devre şemasına göre devreyi kurduktan sonra Sadece devrenin kodu kalıyor.

NOT: Devreyi kurup Arduino’ya kod yüklemeye çalıştığınızda Arduino IDE’si hata verecektir. Merak etmeyin bunun nedeni, Arduino’nun RX ve TX bağlantılarının o an ESP modülünün bağlı olmasından dolayıdır. RX ve TX bağlantılarını söküp, Arduino’ya kodu yükledikten sonra takarsanız bir problem ile karşılaşmazsınız.

#define ag_ismi  "Wifi Ismi"
#define ag_sifresi "Wifi Sifresi"
#define SERVER "api.pushetta.com"
String API("2828e318e8357eb7285ff2962642b132de28b1b");
String CHANNEL("HirsizAlarmi");
int trigPin = 9; //ultrasonic sensörde kullanılan tetikleme pini
int echoPin = 8; //ultrasonic sensörde kullanılan yankı pini
int sure=0;      //ultrasonic sensörde yollanan ver alınan ses dalgası arasında geçen süre
int mesafe=0;    //sensörün ölçtüğü mesafe

void setup() {
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT);
 Serial.begin(115200);
 Serial.println("AT");
 delay(5000);
 
  if(Serial.find("OK")){         //esp modülü ile bağlantıyı kurabilmişsek modül "AT" komutuna "OK" komutu ile geri dönüş yapıyor.
     Serial.println("AT+CWMODE=1"); //esp modülümüzün WiFi modunu STA şekline getiriyoruz. Bu mod ile modülümüz başka ağlara bağlanabilecek.
     delay(2000);
     String baglantiKomutu=String("AT+CWJAP=\"")+ag_ismi+"\",\""+ag_sifresi+"\"";
    Serial.println(baglantiKomutu);
    
     delay(5000);
 }
}

void loop()
{
  digitalWrite(trigPin, LOW); //önce trig pinini LOW yapıyoruz ki daha sonra göndereceğimiz sinyali temiz bir şekilde gönderelim
  delayMicroseconds(5);       //5 mikrosaniye bekliyoruz
  digitalWrite(trigPin, HIGH); //daha sonra trig pinini HIGH yapıp bir ses dalgası yolluyoruz.
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  sure = pulseIn(echoPin, HIGH); //echo pini ile yolladığımız ses dalgasının kaç saniyede geri döndüğünü hesaplıyoruz. 
  mesafe = (sure/2) / 29.1;      // burada kullandığımız formül YOL = HIZ x ZAMAN formülü. Ses hızı sabit 331km/saat birim dönüştürmesi yapılınca yandaki formül geliyor.
    if (mesafe >= 50 || mesafe <= 0){   //mesafe 50cm den büyük, 0 cm'den küçük ise mesafeyi 0 yapmasını söylüyoruz. 
    mesafe=0;                       
  }
  if(mesafe < 20 && mesafe > 10){ //mesafe 10 ila 20 cm arasında ise uygulamaya veri yolla
    veriPushetta(CHANNEL,"HIRSIZ VAR!");
  }
  
}

//Pushetta uygulamasına veri yollama
void veriPushetta(String CHANNEL,String text) {

  Serial.println(String("AT+CIPSTART=\"TCP\",\"") + SERVER + "\",80"); //server'a bağlanma
  
  delay(3000);
 String   deneme =("POST /api/pushes/");
    deneme+= (CHANNEL);
    deneme+= ("/ HTTP/1.1");
    deneme+= ("\r\n");
    deneme+= ("Host: ");
    deneme+= (SERVER);
    deneme+= ("\r\n");
    deneme+= ("Authorization: Token ");
    deneme+= (API);
    deneme+= ("\r\n");
    deneme+= ("Content-Type: application/json");
    deneme+= ("\r\n");
    deneme+= ("Content-Length: ");
    deneme+= (text.length() + 46);
    deneme+= ("\r\n\r\n");
    deneme+= ("{ \"body\" : \"");
    deneme+= (text);
    deneme+= ("\", \"message_type\" : \"text/plain\" }");
    deneme+= ("\r\n\r\n");
    
    Serial.print("AT+CIPSEND=");
 delay(100);
 Serial.println(deneme.length());
 // Sorun oluşmadıysa veriyi gönder.
 if(Serial.find(">")){
 Serial.println(deneme);
 Serial.println("AT+CIPCLOSE=0");
 delay(100);

 }
 else{
 Serial.println("AT+CIPCLOSE=0");
 }
    
  }

Üstteki kodu Arduino’ya yüklemeden önce aşağıda yer alan bilgileri kendimizinkiler ile değiştirmemiz gerekiyor. Channel kısmına oluşturduğumuz kanalın ismini girmemiz gerekiyor.

#define ag_ismi  "Wifi Ismi"
#define ag_sifresi "Wifi Sifresi"
#define SERVER "api.pushetta.com"
String API("2828e318e8357eb7285ff2962642b132de28b1b");
String CHANNEL("HirsizAlarmi");

Eğer yollayacağımız bildirimin ne olduğunu değiştirmek istersek aşağıdaki satırda “HIRSIZ VAR!” cümlesini değiştirmemiz yeterli.

veriPushetta(CHANNEL,"HIRSIZ VAR!");

13 Yorumlar

  1. Gerçekten çok güzel olmuş , teşekkürler.
    Mobil mesaj sisteminde , GSM sheild kullanılarak daha uygun fiyata getirebilir sistem.
    ücretli sms servisleri biraz cep yakıcı olabiliyor 😀

  2. iyi günler kardeşim devreyi dediğin gibi yaptım mesaj falan gelmedi ilgili yerleride değiştirdim wifi adresini wifi şifresini kanal adını falan benim telefonuma mesaj gelmedi
    yardımcı olurmsusunuz

  3. herşeyi hallettim, ama tek bir skıntım var. kodu arduino’ya yüklerken String baglantiKomutu=String(“AT+CWJAP=\””)+ag_ismi+”\”,\””+ag_sifresi+”\””; ksımında hata veriyor. ağ_ismi yazan yere ağ ismimi, şifre yazan yerede şiferemi yazıyorum. Ama hata veriyor. bi el atarsanız… 😀

    • evet ne kadar saçma bir hata yaptığımı zor yoldan öğrendim. Burası tamam ama şimdide pushetta aracılığıyla telefonuma veri yollayamıyorum. sensörüm sorunsuz çalışıyor, wifi ismi wifi şifresi, kanal adı, apı key hepsi tamam. kod burdakinin aynısı. telefonumda bağlı açtığım kanala. ama bir türlü bildirim gelmiyor….

    • Söylediğiniz gibi Arduino UNO’nun RX ve TX sinyal seviyeleri 5V’tur. Fakat ESP8266’nın sinyal seviyesi 3.3V olduğundan arada lojik seviye dönüştürücü kullanmamız gerekir.

  4. veriPushetta(CHANNEL,”HIRSIZ VAR!”); kod satırı hatalı diyor? scope’ta tanımlı değil, burada bir yanlışlık yok mu

  5. Arduino:1.6.13 (Windows 10), Kart:”Arduino/Genuino Uno”

    D:\BD\hp\arduino karışık\arduino kodları\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe.ino: In function ‘void setup()’:

    D:\BD\hp\arduino karışık\arduino kodları\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe.ino:31:22: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    D:\BD\hp\arduino karışık\arduino kodları\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe.ino: In function ‘void loop()’:

    pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe:58: error: ‘veriPushetta’ was not declared in this scope

    D:\BD\hp\arduino karışık\arduino kodları\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe.ino: In function ‘void veriPushetta(String, String)’:

    D:\BD\hp\arduino karışık\arduino kodları\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe\pushetta_ile_telefona_wifi_uzerinden_bildirim_mesafe.ino:101:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    exit status 1
    ‘veriPushetta’ was not declared in this scope

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    buradaki kodu biraz değiştirdim ama çalışıyordu aynı kodu şimdi tekrar atmaya çalışıyorum arduinoya bu hatayı alıyorum “veriPushetta(CHANNEL,”HIRSIZ VAR!”);” buradaki veri pushetta kısmını sildiğimde sorunsuz atıyor kodu ancak bildirim gelmiyor bu seferde
    LÜTFEN YARDIMCI OLURMUSUNUZ !

CEVAP VER