PSoC LCD’li Nem ve Sıcaklık Ölçer
PSoC kulanılarak LCD ekran üzerinde sıcaklık ve nemin gösterilmesi projesi. |
PSoC hem dijital hem de analog yapıları bir arada bulunduran bir mikro olduğundan kullanıldığı projenin de hem dijital hem de analog bileşenlerden oluşması mikronun hakkının verilmesinde önemlidir. Mesela PSoC bir kayan yazı projesi için uygun değildir, böyle bir proje pekâlâ 8051 ile de yapılabilir. Aynı şekilde PSoC RC5 kodlarının çözülmesi içinde uygun değildir, bu projede pekâlâ basit bir PIC ile de gerçekleştirilebilir. Daha basit bir örnekle müzik dinlemek için mp3 player almak yerine PC almaya benzer.
Bu projede yukarıda anlattığımız olumsuzlukları ortadan kaldıracak, PSoC a hak ettiği değeri bir nebzede olsa verecek işleri yaptıracağız.
Başlıktan da anlaşılacağı gibi projemiz LCD ekran üzerinde sıcaklık ve nemin gösterilmesinden ibaret. Devrenin dijital kısmını büyük ölçüde DS1621 sıcaklık sensorü oluşturuyor. Hem analog hem de dijital kısmı kullanan sensör ise VS-H25K5A nem sensörü.
Projede kullanılan nem sensörü datasheetini incelendiğinde karşımıza bir değerler tablosu ve birkaç uyarı çıkıyor. Değerler tablosu sensörün bağıl neme maruz kaldığı durumdaki direnç değerini, sıcaklık bazında veriyor. O yüzden DS1621 gibi bir sıcaklık sensörüne ihtiyacımız var. Yani sensörün direnci neme bağlı olarak değişiyor fakat sıcaklıktan da etkileniyor. Dolayısı ile tablodan ölçülen nem değerini bulabilmemiz için bize sıcaklık bilgiside gerekiyor. O yüzden DS1621 e ihtiyacımız var. Bir diğer konu ise uyarılar. Üretici nem sensörünün polarize olmaması için AC işaret ile sürülmesi gerektiğini hem de bu işaretin değerinin de 1Vrms i geçmemesi gerektiğini söylüyor.
Peki tüm bunları PSoC ile nasıl yapacağız.
Öncelikle kabaca neler yapacağımıza bakalım.
- – Nem sensörünü datasheetinde verilen tablo 1kHz lik işaret ile oluşturulmuş. Bizde aynı tabloyu kullanacağımıza göre aynı frekansı bizde elde etmeliyiz.
- – Havadaki neme ve sıcaklığa göre sensör direnci değişeceğinden sensör geriliminden yola çıkarak sensör direncini hesaplamalıyız.
- – Hesaplanan değer ve sıcaklık sensöründen alınan bilgiye göre tablo üzerinden nem değerini bulmalıyız
- – Ve tüm bunları LCD göstermeliyiz.
Nem sensörü:
Sensörün 1kHz lik işaret ile sürülebilmesi için bir timer kurulup çıkışı bir pin ile ilişkilendirilebilir. Yalnız dikkat edilmesi gereken şey timer çıkışının %50 duty değerine sahip olmasıdır. Aksi halde sensörün polarize olmasına neden olabiliriz. Böyle bir timer ile pinde elde ettiğimiz gerilim 2.5Vrms dir. O halde bir gerilim bölücü ile bu değeri 1Vrms seviyesine çekmeliyiz. Ayrıca işareti AC yapmak içinde seri bir kondansatör kullanmalıyız.
Sensöre sabit değerli bir direnci seri eklediğimizde sabit direnç üzerindeki gerilim değerinden yola çıkarak sensör direncini, beslemesini (1Vrms) bildiğimiz için bulabiliriz. Nem sensörünün 0 ila %100 bağıl nemli bir ortamda çalışalabileceğini düşünürsek, datasheetinde yazılanlara göre sensörün gösterdiği direnç değeri Ω ila MΩ arasında değerler alabilir. Seri direnç değeri üzerinden ölçüm yaptığımızdan bu direnç üzerindeki gerilim değerleri de sensör direnci arttığında düşecektir. O halde sensör direncini daha hassas hesaplayabilmek için seri direnç üzerindeki gerilimi daha hassas ölçmemiz gerekir. Dolayısı ile seri direnç üzerindeki gerilimi ölçmeden önce PSoC içerisindeki PGA ile kuvvetlendirmeliyiz. Yalnız sensör üzerindeki gerilim AC iken DC işaretleri kuvvetlendirebilen bir PGA ile çalışabilmek için sensör seri direnci üzerinden aldığımız AC işarete offset ekleyerek DC ye çevirmeli ve bu şekilde PGA ile kuvvetlendirmeliyiz. PGA çıkışında ise kuvvetlendirilen işaretin sadece max tepe noktasını ADC ye besleyerek o andaki sensör seri direnci gerilimi üzerinden sensör direncini hesaplayabiliriz. Anlık değeri yakalamak içinse PGA çıkışındaki işareti yarım dalga doğrultup RC üzerine vermeliyiz. Bundan sonraki adım ise sadece RC üzerindeki gerilimi ADC ile okumak olacak.
Sıcaklık sensörü:
Sıcaklık sensörü ile I2C hattı üzerinden haberleşeceğiz. İlgili rutinleri bizim için PSoC designer oluşturacak.
LCD:
Nem bilgilerini LCD de göstermek için öncelikle sensör direncini hesaplamalıyız. Bunun için kurduğumuz analog devrenin AC eşdeğeri devresini çizip ölçüm sonucundan nasıl bir eşitlik ile sensör direncini hesaplayacağımızı bulmalıyız.
Sensör direncini hesapladığımızda ortam sıcaklığı ile birlikte bu bilgileri tablo üzerine koymalı ve nem değerini bulmalıyız.
Sonrasında ise hem nem hem de sıcaklık bilgilisini LCD bastırarak projemizi tamamlamış olacağız.
Nem sensörü Direncinin hesaplanması:
Nem sensörünün analog devresi yukarıda gibi dir. PSoC içerisindeki PWM modülü ile oluşturulan 1kHz lik işaret, R1 ve R2 dirençleri ile 1Vrms değerine indirilir. C1 ile AC yapılan işaret sensör ve seri direnci üzerine uygulanır. Sensör direncini bulabilmek için R3 üzerindeki AC işaret PSoC içerisindeki PGA tarafından kuvvetlendirilir ve çıkışındaki işaretin tepe değeri D1 üzeri den C4 ü şarj etmek için kullanılır. C4 üzerindeki gerilim ise PSoC içerisindeki ADC ye aktarılır. C4 ü boşaltan ise R6 direncidir.
ADC nin C4 üzerinden ölçtüğü gerilim değeri nem sensörünün direnci ile değişir. Bu değişim devrenin AC modeli üzerinden eşitliğe dökülebilir. Bu eşitlik aşağıdaki gibidir.
Eşitlikteki GAIN PGA kazancı, VALUE ADC ölçüm değeri, V ise 1N4148 diyodunu ileri yöndeki gerilimidir. Eşitlik programda değişkenlerine göre hesaplandığında o anki nem sensörü değeri bulunabilir.
NOT: PGA girişinde Vdd/2 kadar ofset olduğu için PGA referansını AGND olarak ayarlayın ve AGNDBypass parametresini aktif edin. ADC referansınıda 0-5V olarak Ref MUX parametresinden ayarlayın.
Tablonun okunması:
Nem sensörünün datasheettinde verilen direnç tablosu PSoC programı içerisinde 2 boyutlu bir dizinin içerisinde tutulmaktadır. Hesaplanan direnç değerine karşılık gelen RH değeri ise tablodan elde edilir. RH değerinin elde edilmesi için gereken sıcaklık değişkeni ise DS1621 üzerinden I2C ile elde edilir.
Tabloda bulunmayan RH ve sıcaklık değerleri ise programda yakınsama ile elde edilir.
Örneğin: sıcaklık 28°C, hesaplanan direnç değeri ise 50KΩ olsun. Bu durumda 25°C ve 30°C sütunları kullanılarak orantı yardımıyla 28°C sütunu elde edilir. Bu sütun da her sütun gibi %5 lik adımlar ile oluşturulur. Bu işlemden sonra direnç değerinin hangi %5 lik aralıkta olduğu bulunur. Sonrasında ise orantı yardımıyla tam RH değeri hesaplanır.
Sıcaklığın ölçülmesi:
Sıcaklık değeri yukarıdaki devre ile DS1621 üzerinden elde edilir.
LCD de gösterme:
2×16 lık bir LCD yukarıdaki gibi bağlanmalıdır. LCD üzerinde sıcaklık ve nem bilgisi görülecektir. Ayrıca sıcaklık okumada bir hata oluşması durumunda LCD ekranda hata mesajı belirir.
Yazılım:
Yazılımın büyük bir kısmını sensör direncinin hesaplanması ve ADC filtreleme oluşturur. ADC giriş gerilimin 10 kez örnekler ardından alınan örnekler ortanca filtresinden geçirilir ve son olarak değerlerin ortalaması alınır. Elde edilen değer sensör direncinin hesaplanmasında kullanılır. Sensör direnci hesaplandıktan sonra nemin belirlenebilmesi için tabloya başvurulur. Tabloyu okumak için gereken bir diğer değişkende sıcaklık bilgisi olduğu için I2C üzerinden DS1621 ile haberleşilerek sıcaklık bilgisi alınır. Sıcaklık ve sensör direnç bilgileri ile tabloya bakılır. Eğer elde edilen sıcaklık bilgisi ile ilgili bir tablo değişkeni yoksa ( 22 derece gibi ) ilk önce yakın komşuları kullanılarak ( 20 ve 25 derece ) yeni bir sıcaklık nem serisi elde edilir. Bu seri kullanılarak nem sensörü direncine en yakın bulunmaya çalışılır. Aynı şekilde yeni seri bu değeri ( 59K ) içermiyorsa en yakın komşuları kullanılarak ( %55 ve %60 ) nem değeri hesaplanır.
Devre şeması:
Mutlu son
PSoC designer 5 projesidir!
Tegin Yücel MAYADAĞLI