WEB üzerinden COM port kontrolü

Başlatan ground, 07 Ocak 2004, 20:58:05

ground

PHP ile web üzerinden COM port kontrolü. ( Led Uygulaması. )

Giriş -

Uyarı - Notlar vs. vs.

Merhaba, bilgisayara fazlaca merakı olan bir çok kişinin isteği bilgisayar yardımı ile dış çevre birimlerini kontrol etmektir. Benimde her zaman istediğim şeylerden biri,

evdeki daha doğrusu odamdaki belirli şeyleri bilgisayar yardımı ile yönetebilmektir.

Ney yazıkki bu konuda türkçe olarak az kaynak bulunması yada daha çok elektroniğe yakın bir anlatım

olduğu için sıkıntılar yaşanır. Bu dökümanda sizlere; bu konuda başlangıç düzeyinde bilgiler verip ufak bir uygulama ile yardımcı olmaya çalışacam.

Fakat bu dökümanda bu işi web

üzerinden yapmayı öğreneceksiniz. Üstelik ek bir programa ihtiyacınız olmayacak. Ben sistemi Windows2000 üzerinde, Apache web serverı ve Php modulu kurulu bir vaziyette denedim ve başarılı

oldum.

Windows 2000 ( NT teknolojisi ) üzerinde port uygulamaları geliştirmek diğer işletim sistemlerine göre daha zor bir iştir. Zira NT teknolojisi üzerine kurulu sistemler donanım

aygıtlarına direk erişiminizi kısıtlamaktadırlar. Ama yinede bu olmıyacağı anlamına gelmez. Eğer bu sistem Windows2000 üzerinde rahatlıkla çalıştıysa tüm windows ve *nix türü işletim

sistemlerinde ( daha doğrusu apache ve php ikilisinin kurulu olduğu sistemlerde ) çalışacaktır.

Web üzerinde yaptığım kısa bir araştırmadan sonra, elde ettiğim bilgiler doğrultusunda bu işi

C-C++ kodları ile LPT Portu ( Kabaca : printer ve benzeri aygıt kablosunun girdiği soket ) üzerinden rahatlıkla yapabildiğimi gördüm. Ancak web uygulamalarında bu işin çok daha zor olduğunu

anladım. Öyleki LPT Portunu kullanarak yaptığım php scriptlerinde işletim sisteminin apache web serverına yanıt vermediğini gördüm.

Sonra aynı işlemi COM Portlarını ( Kabaca :

modem, eski mouse vs. gibi aygıtların girdiği soket ) kullanarak yaptığımda bunun mümkün olduğunu gördüm. Bir işin yapılmasından öte neden yapılmadığı konusuyla ilgilendiğim için LPT ile

COM portlar arasındaki farkları araştırdım. Anladığım kadarı ile LPT Portundan çıkan veri bitlerini ( Kabaca : elektronik sinyaller ) ayırmak için tek tek kablo kullanılmış. COM portlarda ise aynı

kablo üzerinden farklı frekanslarda ( TTL olarak geçiyor, aslında bu bilgisayarın temeli ; saat frekansı ) bit iletildiğini anladım.

Sonuç olarak elimde benim bulabildiğim iki tane seçenek

kalmıştı.

- 1. si LPT portu üzerinden : Ek bir program yardımı ile Php kodu sayesinde bu programa bir sinyal gönderebilirim, böylece sinyal gittiği anda led lamba yanacak, başka bir sinyal

gönderdiğimde ise lamba kapanacaktır. ( Aslında bu en iyi yöntem. Ama dediğim gibi LPT portu belkide windows2000 olduğu için web server programına yanıt döndürmüyor ve php scripti kısır

döngüye giriyor )

- 2.si COM portu üzerinden : Bunda sadece php kodları ile ( yani ek bir programa gerek kalmadan her sistemde çalışabilecek durumda ) COM portuna bilgi göndericem

ve gönderdiğim bilgi süresince led yanık kalacak. Aktarım bittiğinde led sönecektir.

Aslında LPT portu daha çok işime geliyordu çünkü ledi devamlı yanık tutmak daha kolaydı. Bense hem

COM portundaki kolaylıktan hemde COM portun LPT ye oranla daha fazla üstün özellikleri olduğundan COM portu seçtim.

Burada hemen bir sorun karşıma çıkmıştı, istediğim süre

kadar bir ışığı nasıl yakacaktım, yada kahve makinasının zamanlanması gibi olayları nasıl halledecektim. Bunun üzerine hemen dışarı çıkıp yakında bulunan bir elektrikçiye gidip bu konuda biraz

yardım istedim. Elektrikçi bana led lambanın büyüklüğünde bir röle verdi. Bu röle özelliği gereği her elektrik alışında farklı bir konuma geçiyor. Yani ben bir kez COM port ile ufak bir elektrik sinyali

yolladığımda röle harakete geçip ledi yakıyor. İkinci kez COM porttan sinyal yolladığımda bu sefer röle elektriği kesip ledi söndürüyordu.

Şimdi kısa ve önemli bir açıklama yapıp

kodlarımıza başlıyalım.

Bu dökümanda ben size sadece Php ile COM porta ufak bir elektrik sinyali göndermeyi ve bu sayede porta bağlı led lambayı yakmayı gösterecem. Öncelikle web

kaynaklarından edindiğim bilgi ile sizlere; bilgisayar portlarının anakart ile tümleşim olarak imal edildiğini söylemek istiyorum. Yani herhangi bir elektrik kaçağında anakartınızın yanabileceği

ihtimalini unutmayın. O yüzden bu dökümanı dikkatlice takip etmenizi öneriyorum.

Biz COM port aracılığı ile led ' e direk elektrik sinayli yolladığımızda doğal olarak bu led üzerinde ışık

çıkartacak derecede bir gerilim oluşturacak sonra bu gerilim tekrar led in - kutubundan bilgisayara bağlı porta gönderilecektir. İşte bu noktada led üzerinde oluşabilecek bir sorun porta aşırı yük

binmesine neden olabilecek ve bilgisayarımızın zarar görmesine neden olabilecektir. Biz bu sorundan %99 oranında kurtulmak için led in - kutubuna ( ledin kısa bacağı -, uzun bacağı + kutuptur )

bir direnç direncide porta bağlayacağız. ( Ben direnç olmadan denedim aslında hiç bir sorun olmadı ama yinede tedbiri elden bırakmamak gerekiyor :) )

Şimdi eğer aşağıdaki malzemeler

elinizde varsa işe başlıyabiliriz.

- Led lamba ( Rengi farketmez :) Ama 1 yada 5 volt arası olması en ideali. )
- Direnç ( Klasik 470 ohm luklardan. )
- Bunları bir birine

tutturabileceğiniz bir şey. ( Lehim makinası, band vs. Ben board kullanıyorum )
- Com port ile bu düzeneği birleştirmek için kablo. ( iki tane 1 er metrelik ince tel, harici modem kablosu vs. gibi

şeyler olabilir. )
- Son olarakta gerekli yazılımlar ( PHP kodlarını çalıştırabileceğiniz, herhangi bir web server uygulaması. )

1 - Gerekli düzenek...

Elinizdeki kabloları

bilgisayarınızın arkasındaki boş bir com portun 3. ve 9. pinlerine bağlayın.

Com portu üzerinde pin numaralarını görebilirsiniz, eğer göremiyorsanız aşağıdaki resimden

faydalanabilirsiniz.

Öncelikle bilgisayarınıza bağlı COM port tan bize gerekli olan iki adet kabloyu size yakın ve görebileceğiniz bir yere taşımak. Aslında bu işin en zor yanı desem

gülersiniz. Ama bilgisayarınız arkasında boşta duran bir com porta bu iki kabloyu tutturmak gerçekten zor. ( Kabaca : Bilgisayara bağlı COM portları genelde erkek bir soket oluyor. ) Ben harici

modemimin kablosunu kullandım. Modem kablosunun bir ucunu com porta bağladım diğer ucundaki deliklerede elimdeki iki kablonun uçlarını soktum.

Eğer elinizde bu şekilde bir kablo

yoksa size aşağıda bazı seçenekler sunayım.

- Biraz kalın bir kablonun dışındaki plastiği telin dışına doğru itebilir ve COM port üzerinde bulunan pini bu plastiğin içine girecek şekilde

ayarlıyabilirsiniz. Aşağıdaki şekilde bir bağlantı sağlarsanız ; böylece tellerin istediğimiz pin dışındaki diğer pinlere değmesini engellemiş

olursunuz.




- İkinci seçenek olarak herhangi bir elektronik mağazasından

bilgisayarınız üzerindeki com porta uygun bir soket alıp kablo çekebilirsiniz. Böle bir düzeneği her türlü uygulamadada kullanabileceğinizden oldukça faydalı bir araçtır.

Ben bu noktadan

sonra ; yani bilgisayarımdaki Com portun 3. ve 9. pinlerden iki kablo çektikten sonra board yardımı ile gerekli düzeneği bitirdim. Elinizde minumum araç olduğunu düşünerek aşağıda en basit şekilde

bir grafik hazırladım.




Bir band yada lehim makinası ile yukardaki düzeneği

sağladıysanız, artık işin %80 ini bitmiş demektir.

(Bunu yazan programcı  ;) )

2 - Php kodlarının yazılması ve uygulamayı

çalıştırma.

Aşağıdaki kodları comport.php adıyla kaydedin. Yalnız burada çok önemli bir ayar yapmanız gerekmektedir. Kabloları bağladığınız Com port. Normalde bir çok sistemde iki tane

com port soketi vardır. Bilgisayarın arka tarafındaki düzenekten üstte yada en başta olan port Com1 bir sonraki ise Com2 dir. Ben genellikle işlemlerimde Com2 iyi kullanırım. Fakat siz yukarıdaki

düzeneği hangi port a bağladıysanız aşağıdaki kodlarda ilk satırdaki "COM2" ayarını ona göre ayarlayın.

Eğer işletim sistemi olarak Linux kullanıyorsanız o kısıma , modeminizin tam

yolunu belirtin. ( Zaten linux kullananlar bu işin üstesinden gelirler :) - /dev/ttyS0 vs.vs. :) )


<?
$fp = fopen ("COM2:", 

"w+");
if (!$fp) {
echo "Port açilamiyor.
 Portun kurulu oldugundan yada kullanilmadigindan emin olun";
}
else 

{
$sinyal = "Sinyal Gönderildi...";
echo $sinyal;
fputs ($fp, $sinyal);
fclose 

($fp);
}
?>


Düzeneği doğru yaptıysanız ve kodları kaydedip çalıştırdıysanız. Dosyayı her çalıştırdığınızda yada sayfayı yenilediğinizde

led lambanın kısa bir süre yanıp söndüğünü gördüyseniz ; tebrikler!!!

Şimdi kodları tek tek inceleyelim sonrada bazı önemli notları belirttikten sonra dökümanı bitirelim.

$fp =

fopen ("COM2:", "w+");
if (!$fp) {
echo "Port açılamıyor. Portun kurulu olduğundan yada kullanılmadığından emin olun";
}

Kodun bu bölümünde ilk satırda (

$fp = fopen ("COM2:", "w+"); ) Php nin dosya açma,yazma ve okuma gibi işlemlerini yapmanıza yarıyan fopen() fonksiyonu ile COM2 ( Siz burada bağlantı yaptığınız com portun ayarına

göre değiştirin. ) portuna w+ parametresi ile ek bir bilgi göndereceğimizi belirttik.

Daha sonraki satırda ( if (!$fp) { ) dosyanın ( yani burada dosya COM2 portu oluyor. ) açılıp

açılamadığını kontrol ettik. Eğer COM2 portu bu sırada başka bir aygıt tarafından kullanılıyor yada kurulmamış ise echo komutu ile bu hatayı ekrana ( echo "Port açılamıyor. Portun kurulu

olduğundan yada kullanılmadığından emin olun"; ) bastırdık.

else { Eğer sistem COM2 portunu açabilirse,

$sinyal = "Sinyal Gönderildi..."; Sinyal adında ve değeri "

Sinyal Gönderildi... " olan bir değişken yarattık.

Not : sinyal değişkenin değeri ( Sinyal Gönderildi... ) ne kadar uzun olursa led in ışık yayma süreside okadar uzun

olacaktır.

echo $sinyal; Ardından bu değişkeni ekrana yazdırdık. ( Aslında bu gereksiz ama boş bir ekran biraz kötü duruyordu :) )

fputs ($fp, $sinyal); Sonra php de dosyalara

bilgi göndermeye yarayan fputs() fonksiyonu ile portumuza ufak bir elektrik sinyali gönderdik :)

fclose ($fp); : son olarakta dosyamızı ( yani COM2 portumuzu ) kapatıp php kodunu

bitirdik.

3 - Notlar, Öneriler , Fikirler vs.

Aşağıda bu konu hakkında size verebileceğim diğer önemli bilgileri sıraladım lütfen dikkatlice okumaya

çalışın.

Notlar

- Com porta olan düzenekte çok dikkatli olun. İki kablonun sadece 3. ve 9. pinlerle birbirine temas ettiğine, diğer pinlere değimediğine ve basit sarsıntılarda

kopmayacağından emin olun.
- Sinyal değişkenin değerini uzattıkça ledin yanma süreside okadar artacaktır.
- Sonradan oluşabilecek bir sorun yüzünden; anakartınızın güvenliği için

lütfen direnç kullanmadan devreyi çalıştırmayın.
- Com, LPT gibi portlar güç kaynaklarını anakart üzerinden sağladıkları için ortalama olarak 5V luk bir enerji verebilirler. Bu yüzden röle

olmadan yüksek voltaj isteyen şeyler kullanmayın.
- Sabırlı olun ve dökümanı dikkatlice takip edin Her adımda yaptıklarınızı iki kez kontrol edin.
- Eğer portla ilgili bir sorun yaşarsanız,

port ayarlarından kesme istekleri, dur bitleri gibi ayarlarda değişiklikler yapın.


Öneriler

- Odanızdaki çeşitli araçları kontrol edebilmek için, elektronik bilgisi olan biri ile

görüşün. Düşük voltajla çalışan bir röleyi kontrol ederek, 220 voltla çalışan aletleri nasıl kumanda edebileceğiniz konusunda fikir edinin.
- İnternet üzerinde yada bilgisayar ile ilgili kitapları

araştırarak Com port üzerinden gönderilen sinyalleri işlemeyi ve bunun yardımı ile nasıl elektronik düzenekler hazırlayabileceğinizi araştırın.


Fikirler

- Sağlam ve geniş bir

bilgi ile Com port üzerinden gelen sinyallere göre etki yapan bir devre yapabilirseniz, evinizdeki bir çok şeyi internet üzerinden gerçekleştirebilirsiniz.

Örneğin kahve makinanızı belirli

periyotlarda çalıştırarak, elektronik ayarlı şohbeninizi iş yerinden ayrılırken eve vardığınız anda sicak su yapabilecek şekilde ayarlıyabilirsiniz.

Yada oturduğunuz yerden odanızın ışığını

açıp kapatabilir, hatta ev içerisinde çeşitli sensorler yardımı ile bir alarm sistemi kurup bilgisayar yardımı ile bunu denetleyebilirsiniz.

Sonuç olarak yapabilecekleriniz hayal gücünüz ile

sınırlı. Benim tavsiyem web üzerinden motor kontrolleri gibi şeyler üzerinde yoğunlaşmanız böylece ilerde işsiz kalma gibi bir sorununuz olmaz. Hemen hemen her türlü sanayi faaliyetlerinde

rahatlıkla çalışabilirsiniz. Özellikle otomasyon sistemleri üzerinde çalışın.




Dökümanı Yazan : Fatih Hood - zw@zeb.biz - www.zeb.biz


[/code]
⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..