Uygulama

Internet of Things (IoT)

Gelecek vadeden bir teknoloji halkkında bilgi edinmek ve sizleri bilgilendirmek istiyorum. Iot internet of things genelde wifi bağlantısına sahip mikro işlemcilerdir. Bu teknoloji, düşük hesap hapasiteleri ve işlem güçleri olan mikroişlemcileri internete bağlayarak cloud denilen çok yüksek veri depolama ve işlem gücü olan makinaların kabiliyetlerinden yararlandırılması prensibi ne dayanmaktadır. Cloud daki bilgisayarlara bilgi gönderen ucuz ve az enerji tüketen bu minik cihazların çıktılarına başka makinalardan tabletlerden ve cep telefonlarından ulaşmak mümkün olmaktadır.

 

cloud-and-things

 

Bu teknoloji ile sınırsız uygulamalar yapmak mümkün aslında. En değerli olan işte bu kısım. Yani bir teknolojinin ne işe yaradığını anlamak ve bunu kimsenin düşünmediği bir şekilde kullanarak bir sorunu çözmek ve değer yaratmak. Gnexlab genel yaklaşımı tüm teknolojiler için bu şekilde işlemektedir. Teknolojinin nasıl işlediğini anlamak için basitde olsa bir uygulama yapmak gerekli en iyi öğrenme yolu bu. Daha sonra bu teknoloji aklımızda iken günlük hayatta bizim yada çevremizdekilerin yaşantısında bu teknolojiyi nasıl kullanabileceğimizi düşünmemiz gerekli. Aklınıza gelen fikirleri gnexlab proje gruplarında hayata geçirebilir ve bir iş modeline kadar projenizi götürebilirsiniz.

 

Bu yazıda Spark Core olarak bilinen bir IoT ile basit bir uygulama yapmaya çalışacağım. Spark Core bir kickstarter projesi

(https://www.kickstarter.com/projects/sparkdevices/spark-core-wi-fi-for-everything-arduino-compatible) arkasında eski makerbotun kurucularından (şimdi ayrıldı ve kendisi çinde yaşıyor) Zach Hoeken var. Çok başarılı ve örnek aldığım bir makerdır 🙂

kickstarterda 550.000 Dolardan fazla kaynak toplayınca bu güzel ve başarılı çalışma ortaya çıktı. Zach dan aldığım son e-postada bir yatırım grubu kendilerine 14 milyon dolar yatırım yapmış. Çok yakında büyük gelişmeler olacağını düşünüyorum. Bu mebla bize bu teknolojinin bir sonraki büyük şey (Next Big Thing) olabileceği izlemini veriyor. O zaman çalışmaya değer bir konu. Hadi Başlayalım!!!

 

46e46bdc7e2640ff5eecaa335992046e_large

 

Spark Core böyle birşey.

Temel olarak aslında wifi olanağına sahip bir Arduino. Ne var ki bunda çok gördük bunlardan demeyin. Spark Core donanım olarak basit görünse de arkasındaki yazılım gücü ve mimari ile fark yaratıyor. Spark Core’u aldıktan sonra (Ben kickstarter kampanyasına destek olmuştum ilk üretilenlerden bana bir tane geldi) Spark.io adresinden bir account oluşturuyorsunuz. Daha sonra cihazı ev wifi si ile tanıştırmanız gerekiyor. Ben bu kısımda Saprk Coru un iphone uygulamasını kullandım ve ev networkunun bilgilerini girdim. Cihaz üzerindeki çok renkli led bir çok renge büründü ve sonunda yeşil yanıp sönmeye başladı. Cihaz artık internetteydi. Buraya kadar olan kısımları için yapılacaklar burada ayrıntıları ile bahsediliyor. Problemlerle karşılaşan arkadaşlar olursa bu kısımı daha açık anlatabiliriz.

Yapmak istediğim basit proje evde bir oadanın sıcaklığını devamlı ölçerek belli aralıklarla bu değerleri kaydetmek ve nasıl seyrettiğini gözlemlemek. Bir fabrikada bir kazanın yada önemli bir ekipmanın ısısını takip etmek çok daha önemli olabilir. Ama bunların hiç biri bir Öldürücü Uygulama (Killer Application) değil. Sizleri beyin fırtınası ile iot ların ne amaçla kullanılabileceğini düşünmeye davet ediyorum. Dediğim gibi bu teknolojiyi anlama projesi.

Isıyı ölçmek için öncelikle bir ısı sensörümüzün olması gerekli bunlar thermistör yada thermocouple türü komponentler olabilir. Ben 3D yazıcılarda çok ca kullandığım thermistör kullanmak istiyorum (Elimde hazır var biraz da ondan) siz başka komponentler kullanabilirsiniz. Thermistörlerin direnci ısı ile değişmektedir. Elemanın direncini ölçerek ve bu ölçümü bir hesaplamadan geçirerek sıcaklığı bulabiliriz. Direnç ölçmek için Spark Core’un analog bacaklarından birini seçip voltaj okuyacağız. Thermistörümüz bu bacağa bağlı olacak. Direncin ısı ile ilişkisini bir matamatiksel logaritma işlemi ile derece santigrat a dönüştüreceğiz. Böylece sıcaklık değerini bulacağız.

Spark Core ile ilgili anlatılması gereken bir diğer önemli husus da “Access Token”. İnternete bağlı bir cihaza herkesin ulaşmasını engellemek gerekecektir. Spark Core’u internete bağladınız diye herkesin buna ulacağı anlamı çıkarmamak lazım. Spark Core iletişim izinleri için bir standart olan OAuth2 kullanmakta. Spark Core ile konuşurken “Access Token” ınızı da göndermeniz gerekli.  “Access Token” ınızı https://www.spark.io/build/ sayfasına login olduksan sonra settings kısmında bulabilirsiniz.

Donanım:

temp

 

 

 

 

 

Devre şamamız bu şekilde. TEMP yazan yerden Spark Core un A0 analog bacağına bağlantı yapacağız.

 

photo (9)

 

Benim Setupım bu şekilde

 

Aşağıdaki kodu Spark Core içine yuklemek için yine https://www.spark.io/build/ adresindeki IDE yi kullanabiliriz. Create new app düğmesine basıp temp isminde bir uygulama oluşturdum. ve aşağıdaki kodu içeri yapıştırdım. Flash dedim ve kod internet üzerinden Spark Core uma yüklendi. Spark Core üzerindeki led magenta renginde kalp atışı yanıp söndüğünde yükleme işleminin başarı ile gerçekleştiğini anlıyoruz.

 

 

// Read temperature
// -----------------
#include "math.h"
// Create a variable that will store the temperature value
double temperature = 0.0;

void setup()
{
  // Register a Spark variable here
  Spark.variable("temperature", &temperature, DOUBLE);

  // Connect the temperature sensor to A0 and configure it
  // to be an input
  pinMode(A0, INPUT);


}

void loop()
{
  const float Rinf = 0.0173; // thermistor constants for 100k thermistor
  const float B = 4573.5;
  const float Rup = 100000.0; // pullup resistor value
  
  float reading = 0.0;
  
  reading = analogRead(A0);
  
  temperature = B / log(Rup * reading/(4096 - reading)/Rinf) - 273;


}

 

Yükleme işlemi başarılı olduktan sonra Spark Core a ve sensör değerimize Http üzerinden ulaşabiliriz. Şu şekilde:

curl “https://api.spark.io/v1/devices/{Sizin Device ID niz}/temperature?access_token={SizinAccess Token ininz}”

{parentezler yok}

Gelen Cevap:

{

  “cmd”: “VarReturn”,

  “name”: “temperature”,

  “result”: 20.296923598751448,

  “coreInfo”: {

    “last_app”: “”,

    “last_heard”: “2014-10-02T17:02:47.349Z”,

    “connected”: true,

    “deviceID”: “48ff6c065067555023502387”

  }

bir json formatlı bilgi. result kısmında oda sıcaklığı yazıyor. Bu degeri yani sıcaklığı daha hasas ve doğru alma ihtiyacınız olursa thermistor kullanmamanız daha doğru olur. Bu tür bir uygulama yapmak istiyenler temasa geçebilir. Zira thermistör de hata payı olmaktadır.

Ben Macintosh kullandığım için terminalden direkt olarak curl komutunu kullanabiliyorum. Windows kullanıcıları için curl ün executable burada mevcut http://curl.haxx.se/dlwiz/?type=bin&os=Win64

win64 için bunu kurup curl komutunu kullanabilirsiniz. Buna aslında kontrol amaçlı ihtiyacımız olacak. Çok şart değil. Amacım bir google spreadsheet oluşturup sıcaklık değerlerini ona okutup dosyada saklamak. Server kurmak yerine mevcut bedava kaynakları kullanalım 🙂 kaybetme maliyetini düşük tutmak lazım.

Sensörümüzden bilgi aldığımıza göre artık bu değerleri belli aralıklarla okuyup saklamak kısmına geçebiliriz. Dediğim gibi goolge docs bu iş için biçilmiş kaftan. Google App Engine (https://cloud.google.com/appengine/) yine üzerinde durulması gereken bir başka teknoloji artık başka bir yazıda inşallah.

 

Google Docs dan yeni bir spreadsheet oluşturup aşağıdaki adımları yapalım.

  • Create -> Spreadsheet
  • Tools -> Script Editor
  • Aşağıdaki kodu buraya yapıştıralım
  • Resources -> Current Project’s Triggers
  • collectData  foksyonunu her saatte bir çağıralım (siz istediğiniz sıklıkta ayarlayabilirsiniz dokumanın cok buyumemesine dıkkat edin)

 

function collectData() {
  var  sheet = SpreadsheetApp.getActiveSheet();
  var sensor = UrlFetchApp.fetch("https://api.spark.io/v1/devices/{Sizin Device ID niz}/temperature?access_token={SizinAccess Token ininz}");
  // parse the JSON the Core API created
  var sensor = JSON.parse(sensor.getContentText()); 
  // you'll need to unescape before your parse as JSON
  var sensor_result = unescape(sensor.result); 
  // create a time stamp
  var d = new Date();
  // append data to spreadsheet
  sheet.appendRow([d, sensor_result]);
}

Sonuç:

 

excel_spark_temp

 

Ben bu testi yaparken dakikada bir fonksiyonu çağırdım. 3. sıradaki tepe yapan değer sensoru elimle tutup ısıttığım an okunan değer. Çalıştığından emin olabilirsiniz.

Umarım yaralı olmuştur. Spark Core satın almak isteyen arkadaşlar mesaj atabilir. Bu teknoloji ile ilgili fikir ve önerileinizi bekliyorum.