Posted by : MC 15 Şubat 2015 Pazar

Arduino ile gerçekleştirilmiş yeni bir yaratıcı proje ile karşınızdayız.

Bu projede webserver ve arduino kullanılarak uzaktan kontrol sistemi oluşturulmuş.Gelin ince detayları ile projeyi ele alalım


Projede temel bileşenleri

phytonserver,arduino ve infrared kütüphanesi, 1 adet infrared led

Phytonserver bize static bir websitesi ve websitesi üzerinde arduino tarafında gönderebileceğimiz form kodlarını içerecek.Böylelikle web sitesinde tıkladığımız form değerleri öncelikle arduinoya ve arduino tarafından da infrared led sayesinde kontrol etmek istediğimiz cihaza gönderilecek.

1.WebServer

Basit bir şekilde tasarlanmış olan phytonwebserverımızın temelde 2 tane görevi var.

-Uzaktan kontrol sistemi için tasarlanmış olan static bir html websitesini ve website görsellerini taşımak
-Websitesine gelen form post değerlerini toplayarak arduino tarafına iletecek.

Projede phytonserver linux tabanlı bir işletim sistemine sahip bir bilgisayar üzerine kurulmuş.Server ve arduino arasındaki bağlantı ise seri haberleşme ile sağlanmış ve arduino seri haberleşme portu da /dev/ttyUSB0 olarak kayıt altına alınmış.

Gelelim webserver için phyton kodlarına

class MyHandler(SimpleHTTPRequestHandler):
  def do_POST(self):
    if self.path == '/arduino':
      form = cgi.FieldStorage(fp=self.rfile, headers=self.headers,
        environ={'REQUEST_METHOD':'POST'})
      code = form['code'].value
      arduino.write(code)
      self.send_response(200)
      self.send_header('Content-type', 'text/html')
      return
    return self.do_GET()

arduino = serial.Serial('/dev/ttyUSB0', 9600, timeout=2)
server = HTTPServer(('', 8080), MyHandler).serve_forever()

phyton kodumuz arduino ile phyton server üzerindeki post değerlerimiz arasındaki bağlatıyı en alt satırda da göreceğiniz üzere usb üzerinden arduinomuza iletiyor ve bu haberleşme sisteminin sürekli olarak host makinemizde çalışır vaziyette kalmasını sağlıyor.

Web sitemize erişim için ise localhost a :8080 portu ile erişim sağlanıyor.

2.Web Sayfası

Ajax kullanılmış.Nedeni ise her obje tıklandığında tekrardan sayfa yenileme ihtiyacını ortadan kaldırmak yani otomatik refresh özelliğini kullanmak.Uzaktan kontrol edilecek cihazın uzaktan kumandasının fotografı çekilmiş ve birazda photoshop bilgisi ile web sayfasına aktarılacak görseller oluşturulmuş.


Projedeki herbir kontrol butonu ise resim ve resim haritası olarak tanımlanmış.Aslına bakarsanız projenin en zahmetli kısmı burası.

function button(value) {
  if (window.XMLHttpRequest) {
   request = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  request.open('POST', '/arduino', true);
  request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  request.setRequestHeader('Content-length', value.length);
  request.setRequestHeader('Connection', 'close');
  request.send('code=' + value);
}

Yukarıdaki kod bir butonun içerisine bir aksiyonun nasıl tanımlacağı örneği verilmiş.Herbir kontrol grubu için bir request tanımlanmış ve bunun post metodu ile arduinoya gönderilmesi sağlanmış

<img src="hk3370.png" width="268" height="800" border="0" usemap="#map" /> <map name="map"> <area shape="rect" coords="60,97,85,111" href="#" alt="on" onClick="button('N010e03fc')" /> <area shape="rect" coords="104,98,129,109" href="#" alt="off" onClick="button('N010ef906')" /> ...

Resimler yani butonlarımızın yerini alacağı image dosyaları teker teker html sayfasında koordinat belirtilerek yerleştirilmiş ve kumanda görünümü verilmiş.

button('N010ef906') kodunda ise butondan sonra parantez içerisinde yer alan kod kısmı bizim arduino tarafına iletmek istediğimiz mesajımız.

3.Arduino




Sony cihaz için özel yazılmış olan IR kodları sayesinde haberleşme sağlanıyor.Gelin yakından bakalım.

"S0000004d1" kodu sonynin anlayabileceği dilden 4d1 komutu gönderiyor.
"N010e03fc" kodu sonynin anlayabileceği dilden 010e03fc mesajı ve play komutu gönderiyor.

void processSerialCode() {
  if (Serial.available() < 9) return;
  char type = Serial.read();
  unsigned long code = 0;
  // Read 8 hex characters into code (omitted)
  if (type == 'N') {
    irsend.sendNEC(code, 32);
  } 
  else if (type == 'S') {
    // Send Sony code 3 times
    irsend.sendSony(code, 12);
    delay(50);
    irsend.sendSony(code, 12);
    delay(50);
    irsend.sendSony(code, 12);
  }
  // More code for RC5 and RC6
}

Arduino tarafındaki kodlarımız ise bizim webserverımızdan gelen kodları sony protokolüne çevirerek Ir sensörü vasıtası ile cihazıma komut gönderilmesini sağlıyor.

proje kütüphanelerine buradan ulaşabilirsiniz.


yorumlarınız bizim için önemli

Bültene abone ol | Yorumlara abone ol

ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger