Turkcell | Geleceği Yazanlar

Arduino 401Başlangıç seviyesi derslerde Arduino uygulama geliştirme ortamını detaylı olarak inceliyoruz.

Tüm Eğitimleri Aldın mı? Kendini sınamanın tam zamanı

Haydi Sınava Gir

Ortam Sıcaklığını Arduino ile Tweet Atmak

Kategori : Mobil | Lisans : Creative Commons (by-nc-sa) | En son 12.09.2019 tarihinde güncellendi
Eğitmen : Geleceği Yazanlar Ekibi
Etiketler : arduino

Ethernet modülümüzü başarılı bir şekilde internete bağladığımıza göre, bu modül ile yapılabilecek projelere bakalım. "ethercard-master" kütüphanesi içerisinde tweet atmak için yazılmış örnek program bulunmaktadır. Bu program üzerinde ufak değişiklikler yaparak ortam sıcaklığını tweet atan bir devre kurabiliriz. Öncelikle Twitter'a mesaj yollayabilmemiz için kişisel jetonunuzun (token) olması gerekir. Bunun için burada linki verilen Twiter uygulamasını kullanabilirsiniz.

Twitter üye girişinizi yaptıktan ve uygulamaya izin verdikten sonra, site üzerinde jetonunuz (token) görünür. Bu sayı ve karakterleri yazacağımız Arduino koduna ekleyeceğiz.

Bu uygulamayı yapmak için ihtiyacınız olan malzemeler:

  • Arduino UNO
  • Ethernet modülü
  • 1 x LM35 (sıcaklık sensörü)
  • 1 x Breadboard

Devremizi yukarıdaki devre şemasında gösterildiği gibi kuralım. Ethernet kablosunu, ethernet modülümüze bağladıktan sonra devre kurulumumuz tamamlanmış olacaktır. Artık Arduino kodunu hazırlayabiliriz.

Öncelikle Arduino, Ethernet modülü yardımıyla internet ağına bağlanması gerekir. LM35 ile ortam sıcaklığı ölçülerek tweet mesajına eklenecektir. Oluşturulan mesaj, Twitter üzerinden aldığımız jeton (token) ve Twitter uygulaması yardımıyla tweetlenecektir.

#include <EtherCard.h>
 
 
#define TOKEN  "BURAYA TOKEN KODUNUZU YAZINIZ"

static uint32_t timer;

byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
/* tekil MAC adresi */

const char website[] PROGMEM = "arduino-tweet.appspot.com";
/* Tweet atabilmemiz için kullandığımız uygulama adresi */

static byte session;
 
byte Ethernet::buffer[700];
Stash stash;
 
static void TweetAt () {
  Serial.println("Tweet hazirlaniyor");
  float sicaklik = analogRead(A0); 
  /* A0daki gerilim ölçüldü */
  sicaklik = sicaklik * 0.48828125;
  /* Ölçülen gerilim sicaklığa çevrildi */

  byte sd = stash.create();
  stash.print("token=");
  stash.print(TOKEN);
  stash.print("&status=");
  stash.print("Odamin sicakligi su anda ");
  stash.print(sicaklik);
  stash.println(" derecedir.");
  
  Serial.println("Tweet hazirlandi");
  
  stash.save();
  int stash_size = stash.size();  
  Stash::prepare(PSTR("POST http://$F/update HTTP/1.0" "\r\n"
    "Host: $F" "\r\n"
    "Content-Length: $D" "\r\n"
    "\r\n"
    "$H"),
  website, website, stash_size, sd);
  session = ether.tcpSend();
  Serial.println("Tweet yollandi");
}
 
void setup () {
  Serial.begin(57600);
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
    Serial.println(F("Ethernet baglanti hatasi"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP hatasi"));
 
  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  
 
  if (!ether.dnsLookup(website))
    Serial.println(F("DNS hatasi"));
 
  ether.printIp("SRV: ", ether.hisip);
 
}
 
void loop () {
  ether.packetLoop(ether.packetReceive());
 
  const char* reply = ether.tcpReply(session);
  if (reply != 0) {
    
    Serial.println(reply);
  }
  
  if (millis() > timer) {
    timer = millis() + 60000;
    Serial.print("Baglanti kuruluyor");
    TweetAt();
  }

}

Not: Seri haberleşmenin daha hızlı gerçekleşmesi için Baud Rate 57600 olarak belirlenmiştir. Serial monitörde mesajların doğru görülmesi için serial monitor penceresinin sağ altından baud rate ayarını yapmayı unutmayınız.

Setup fonksiyonu içinde ethernet modülünün ağa katılabilmesi için ayarlamalar yapıldı. Arduino'nun ağ üzerindeki IP adresi de bu bölümde ekrana yazdırıldı. Loop fonksiyonu içinde ethernet modülünden gelecek mesajlar gösterildi ve 60 saniyede bir "TweetAt" fonksiyonu çağrıldı.

"TweetAt" fonksiyonu, sıcaklığın ölçülerek Twitter mesajının oluşturulduğu fonksiyondur. Burada oluşturulan mesaj daha önceden izin verdiğimiz uygulama aracılığıyla Twitter'a yollanır. Bu fonksiyon, loop fonksiyonu içerisinde 60 saniyede bir çağrılır. Kısa sürelerde aynı tweetlerin atılması, Twitter'ın yollanan mesajları engellemesine neden olabilir.

Ethernet modülü bazen tweet atarken başarısız olabilir. Bu durumlarda tekrar tweet atmayı deneyebilirsiniz.

Bu uygulama değiştirilerek yeni Nesnelerin İnterneti (Internet of Things) projeleri gerçekleştirilebilir. Örneğin burada kullanılan sıcaklık sensörü yerine, toprak-nem sensörü kullanarak çiçeğinizin durumunu çevrimiçi olarak takip edebilir, istediğiniz zaman çiçeğinizi sulayabilirsiniz.