[LinuxFocus-icon]
<--  | Ana Sayfa  | Erişimdüzeni  | İçindekiler  | Arama

Duyumlar | Belgelikler | Bağlantılar | LF Nedir
Bu makalenin farklı dillerde bulunduğu adresler: English  Deutsch  Francais  Turkce  

[Photo of the Author]
Ralf Wieland
<rwieland(at)zalf.de>



Türkçe'ye çeviri:
Selen İnal <seleninal(at)yazhoo.com>

İçerik:

 

Hava basıncını Linux ile ölçmek

[Illustration]

Özet:

Eğer herhangi bir ölçü aleti satın aldığınızda, herzaman Windows sistemlerinden birisi için sürücü programı da birlikte gelmektedir. Linux kullanıcıları genellikle hiçbirşeye sahip olamazlar. Böyle olmak zorunda değil, çünkü teknik olarak Linux için bir donanım sürücüsü yazmak çoğu kez Windows'a göre daha kolaydır. Bazı üreticilerin fikirlerine göre; çok az sayıda Linux kullanıcısının varlığı kadar Linux kullanıcılarının daha enerjik ve yeni şeyleri denemeye daha açık olmaları da tartışılabilirdir. Herneyse, çoğunlukla çözüm kendi sürücünüzü kendinizin yazmasıdır. Bir sürücüyü çalışır hale getiren adımları yazmak istedim. Belki başka birileri için de faydalı olabilir. Bu çekirdek düzeyinde yazılmış bir sürücüsü olmayacak, ben bilgisayarın paralel bağlantısını kullanacağım.


_________________ _________________ _________________

 

Giriş

Bir ölçüm sistemini geliştirmek için ilk olarak şu 3 soruyu açıklığa kavuşturmanız gerekir:

Bu sorular önemsiz gözükebilir, ama geliştirmenin her adımında onlar hakkında düşünmek iyidir.

 

Fizik

Hava basıncı birçok nedenden dolayı ilginçtir. Gemici ve dağcılar için o, havadaki olası bir değişikliğin belirtisidir. Fakat benim için evde hava basıncını izlemek de eğlencelidir. Oturma odalarında kurulmuş küçük hava istasyonlarından görüldüğü üzere birçok başka insan da aynı seyi yapıyor gibi. Bununla birlikte, bunlar çoğunlukla gerçek ölçüm aletlerinden çok oyuncaktırlar. Eğer, hava basıncı ile ilgili ciddi ölçümler yapmak istiyorsanız birkaç şeyi daha göz önünde bulundurmanız gerekir. Hava basıncı doğru olarak, yukarıdaki resimde gösterildiği gibi, bir barograf ile ölçülebilir. Bu aletler tamamen mekanik olup, çok pahalıdırlar. Fazla masraftan kaçınmak için bir elektronik yarı iletken algıyıcı kullanılabilir. Motorola değişik amaçlara yönelik birkaç tipte algılayıcılar üretmektedir. Yarı iletken algılayıcılar herzaman sıcaklık ve gerilime bağımlıdırlar. Bunu hesaba katmalısınız. Hava basıncı, evin içinde ve dışında aynı olduğundan, ölçümü göreceli olarak kolaydır. Algılayıcıyı dışarıda kullanım için inşa etmek ve yağmura karşı korumak zorunda değilsiniz. Algılayıcıyı doğrudan bilgisayarınızın yanında bulundurabilirsiniz. Sıcaklık evin içinde dışarıdaki kadar çok değişmediği için bu sıcaklığın telafisi için de iyidir. Yüksek doğrulukta sonuçlar elde etmek için elektronik bir sıcaklık düzenleyicisine gereksinim duyacaksınız. Önerilen devre takım olarak bir Avrupalı elektronik dağıtıcısından elde edilebilmektedir. ELV, bana devreyi yayımlama iznini verdi. Sıcaklığın telafisi bu gibi durumlarda bir yazılım tarafından yapılmaktadır. Algılayıcı sadece basıncı değil, aynı zamanda sıcaklığı da ölçer. Sıcaklığın telafisi icin algoritma Intersema'nın hava basınç algılayıcısı veri sayfasında belgelenmiştir. Gerilimin kararlılığı bir 3.3 V düzenleyiciyle yapılır.

Hava basıncı sadece havaya değil, aynı zamanda deniz seviyesinden yüksekliğe de bağlıdır. Değişik yerlerdeki hava basıncını karşılaştırmak için, deniz seviyesindeki değeri normalleştirmeniz gerekir. Bu uluslararası düzeyde kabul görmüş aşağıdaki formülle yapılır:

p0=p/(1-6.5*h/288000)^5.255

Bu formül sadece yüksekliğe bağlı değildir, aynı zamanda yüksek seviyelerdeki sıcaklık düşüşünü de hesaba katar. Ölçülen hava basıncı şimdi deniz seviyesinden yüksekliği ile telafi edilecektir. Hava basıncı değişikliklerini yaklaşık 1.2mbar/10m olarak hesaplayabilirsiniz. Deniz seviyesinden yükseklik "myclient" adlı programda #define HIGH_NN olarak yeralır. Geriye kalan soru, ölçümün ne kadar doğru olduğudur. Doğruluk, doğrudan algılayıcıya bağlıdır. Sonuçların kararlılık ve doğruluğunu birbirinden ayırmalısınız. Algılayıcı, 25° bir sıcaklıkta +-1.5mbar ile 750..1100mbar arasında bir doğruluğa sahiptir. Bununla birlikte kararlılık çok daha yüksektir: 15Bit+-7Bit ve bu 1/2^15 = 3*10^-5 veya 0.03mbar'dır. Başka bir deyişle, son sayıların bir anlamı yoktur. Bundan dolayı program, sonuçları virgülden sonra bir rakam bırakacak şekilde yuvarlayacaktır. Halen ne kadar sıklıkta ölçüm yapılması gerektiği açıklığa kavuşturulmalıdır. Birçok amaç için 5 ila 10 dakikalık bir aralık yeterli olacaktır. Gelişigüzel değişiklikleri süzgeçten geçirmek için her 10 ila 60 saniyede bir ölçeceğiz ve düşük geçiş süzgeci uygulayacağız. Bu sıralanmış veri tarafından üretilen Merkezi Işlem Birimi (MIB) yükünü gözardı edilebilir. Ben 10 saniyelik bir ölçüm aralığı kullandım ve değerleri her 2 dakikada bir depoladım. Bu günde 60*24/2=720 ölçüm üretir.

 

Algılayıcı ve bilgisayar arasındakı arayüz

[schematic]
Daha büyük resim için şekil üzerine tıklayın.

Arayüz olarak bilgisayarın paralel bağlantısını kullandım. Cağdaş yazıcıların birçoğu USB bağlantısı kullanacağından bu mantıklı bir karardır. Bilgisayarın paralel bağlantısının kullanılmasındaki avantaj, çok kolay programlanabilmesi ve fazla ek donanıma gereksinim duyulmamasıdır. Bazı evirgeç geçitler, gerilim seviyelerini ayarlar ve bir saat sinyali üretirler.

Eğer takımı ELV'den almak istemiyorsanız, parçaları bir soysal deneme devre kartı üzerine lehimleyebilirsiniz.

Devre üzerine birkaç yorum:
Soldaki sayılar, paralel bağlantıdaki noktalardır. 18 ile 25 arasındaki noktalar tabandadır ve 12, 3 ve 4 veri çizgileridir. 2. nokta devrenin güç kaynağı için kullanılmıştır. Dirençler R1/R2 ve R3/R4 5V'luk paralel bağlantıyı 3.3V'a uyarlamak için kullanılmıştır. 74HC04 ve algılayıcının her ikisi de 3.3V'ta çalışır.

Program C programlama dilinde yazılmıştır. Algılayıcıdan verileri okur ve sıcaklık telafisi ile sayısal alçak geçiş süzgecini uygular. Kaynak kodun takip edilmesi kolay olmalıdır. Onu bu makalenin sonunda verilen kaynaktan elde edebilirsiniz. Veriyi algılayıcıdan geri çağırmak için, algılayıcıya bir dizi vurum gönderilir. Algılayıcı bu vurumları komut olarak yorumlar ve cevaplar. Bu algılayıcı için kurallar veri sayfasında belgelenmiştir.

 

Ölçüm sonuçlarının kullanılması ve görüntülenmesi

Normal bir kişisel bilgisayar ile birkaç gün hava basıncını ölçerken arkadaşlarınızdan veya ailenizden uzak kalabilirsiniz, çünkü normal kişisel bilgisayarlar çok gürültülüdür ve her zaman işletilmeleri gerekir. Bir DIL/NetPC kullanmak ilginç bir seçenek olabilir. Bu bilgisayarlar çok az güç kullanırlar ve hiç gürültü yapmazlar. Maalesef ucuz değillerdir ve sadece bir iletişim ağı tarafından erişilebilirler. Bu beni, bu amaçla bu işte Linux sunucusu kullanma fikrine itti. Sunucu nasıl olsa sürekli çalışmaktadır. Böyle bir sisteme sahip omayanlar belki eski bir bilgisayar kullanabilir ve onu bodrumda, kimseyi rahatsız etmeyecek bir yere yerleştirebilirler. Verileri geri almak için bir sunucu ve istemci uygulaması geliştirdim. Bunun bir sınırlaması, şu anki sunucu işlemi, paralel kapıya doğrudan ulaşabilmek için kök hakları ile işletilmeli olmasıdır. Bir diğer seçenek Parapin gibi bir sürücü sayesinde, paralel bir kapıyı kök hakları olmaksızın kullanmaktır. Bunula birlikte, bu çekirdeğin yeniden derlenmesi için bir Parapin sürücünün eklenmesini gerektirir. Eğer veriyi Internette mevcut kılmak istiyorsanız, kesinlikle ayrıcalıksız bir kullanıcı kullanmayı göz önünde bulundurmalısınız. Benim amacım için bu basit çözüm yeterliydi.
Kullanıcı uygulaması ve sunucu işlemi iletişim için TCP/IP yuvaları kullanır. Sunucu iki yürütme biriminde çalışır. Biri algılayıcıdan veriyi alır ve diğeri iletişim ağını i\'baletir. Bu i\'balemler PThreads-Library "PYürütme Birimleri - Kütüphanesi" ile uygulanır. İstemci (kullanıcı) cok basittir. Verileri alır ve yukarıdaki denkleme göre yüksekliğini düzeltir. Veriler kolayca 2 sıra halinde "stdout"'a yazılır. Ilki, kayan noktalı sayı olarak saat cinsinden zamandır. Ikinci sıra, kayan noktalı sayı olarak hava basıncıdır. Aşağıdaki gibi görülür:

     0.000000 1008.2
     0.033333 1008.1
     0.066667 1008.2
     0.100000 1008.0
     0.133333 1008.1
     ...

Bu doğrudan gnuplot'a veya Plotutils'e bes lenebilir. Ben daha iyi görüntüleme kalitesinden dolayı Plotutils kullandım. \'ddki farklı basımı karşılaştırırken, her iki çizimde de aynı ölçeği kullanmak önemlidir. Bundan dolayı ben eksen üzerinde mutlak ölçeklendirmeyi tercih ettim:

 ./myclient modell1 | graph -T X -C -g 3 -L "air pressure" \\
     -X "t from start of measurement in h" -Y "mbar" --x-limits 0 24\\
      --y-limits 950 1040

Kullanıcı program "myclient" verileri almak için "modell1" sunucusuna bağlanır ve veriler i Plotutil'a (grafik programi) bir hat aracılığıyla gönderir. Hava basıncının ölçeklendirilmesi, 950mbar ile 1040mbar arasındadır. Zaman birimi 24 saattir. Eger -T X 'den -T ps seçeneğine değiştirirseniz, Postscript dosyaları üretilecektir. Bu kolayca bir kağıt üzerine yazdırılabilir.

[graph]

Çizim, iyi hava aralığının bitimini ve yağmur başlangıcını gösterir.

 

Kurulum

Kurulum cok kolaydır. Devreyi tekrar kontrol edin ve onu paralel kapıya bağlayın. Yazılım bir -zxvf druck-0.1.tar.gz "tar"'ıyla açılacaktır. Daha sonra kaynak dizinine değiştirilecek ve deniz seviyesinden yüksekliğiniz (HIGH_NN) için myclient.c'i uyarlanacaktır. Onu "make" yazarak derleyin. Birimi kullanmadan önce, yuva ileti\'baimi için /etc/services 'e kapı numarasını eklemelisiniz. Bir sonraki satırı ekleyin:

socktest       7123/tcp    # Air pressure sensor
Daha sonra ./druck LPT1 (veya LPT2) ile sunucu işlemini kök olarak başlatabilirsiniz. Eğer herşey yolunda ise, sunucu her 10 saniyede bir, basınç ve sıcaklığın zamana bağlı ham verisini yazacaktır. Kullanıcı uygulaması şimdi aynı ileti\'ba im agında (veya aynı makinada) herhangi bir yerde başlatılabilir. druck.sh yazısı verileri grafik programı Plotutils aracılığıyla görüntüler. Yazıyı doğru sunucu ismi için düzenlemelisiniz. /etc/services 'deki giriş, sunucu işleminin ve kullanıcının çalıştığı makinalar üzerine yapılmalıdır.  

Son olarak dikkate alınması gerekenler

Üreticilerin Linux için sürücüleri sıklıkla sağlamamaları can sıkıcıdır. Bununla birlikte bu bana, burada sunduğum kendi çözümümü geliştirme olanağı verdi. Veriler şimdi değişik makinalardan okunabildiği icin sadece istemci (kullanıcı)/sunucu uygulaması tatmin edici bir çözüm oldu. Halen birkaç şey eksik. Bu değerler nasıl Internet aracılığıyla sağlanabilir ? Eğer birkaç insan, sıcaklık hava basıncı, nemlilik ve rüzgar hızıyla (rüzgar hızının ölçülmesi kolay değildir) bir hava istasyonu inşaa ederlerse, veriler nasıl değiş tokuş edilebilir ? Hangi veri şekli kullanılmalıdır ? Belki birisinin bu konuda fikri vardır ve bu başka bir makal ede sunulabilir.

 

Kaynaklar

 

Bu yazı için görüş bildiriminde bulunabilirsiniz

Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
 talkback page 

<--, Bu sayının ana sayfasına gider

Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Ralf Wieland, FDL
LinuxFocus.org
Çeviri bilgisi:
de --> -- : Ralf Wieland <rwieland(at)zalf.de>
de --> en: Guido Socher <guido(at)linuxfocus.org>
en --> tr: Selen İnal <seleninal(at)yazhoo.com>

2003-08-03, generated by lfparser version 2.43