arduino ile uzaktan kumanda etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
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
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ı.
<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')" /> ...
"S0000004d1" kodu sonynin anlayabileceği dilden 4d1 komutu gönderiyor.
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.
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ış
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.
"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.