avatar_ete

Dokunmatik Buton Kontrolü (CVD system)

Başlatan ete, 04 Eylül 2011, 10:26:39

ete

Tamamen dokunmatik çalışan bir buton tasarladım. Tasarladım derken Mikrochip dökümanlarından yararlandım. AN 1288A_ADC dökümanda piclerde bulunan ADC kanalını kullanarak dokunmatik buton yapılabileceği belirtilmiş. Sistem şöyle çalışıyor.
Önce her hangi bir ADC kanalının ADC özelliğini açmadan çıkış olarak ayarlayıp çıkıştan HIGH çıkartıyorsun. Sonra aynı kanalı ADCON0 registerinden dahili kondansatöre bağlıyorsun. Böylece kondansatör VDD ile şarj ediliyor. Hemen ardından dokunma ucunun bağlı olduğu kanalı önce LOW yapıp üzerinde birikmiş kapasiteyi deşarj ediyorsun. Sonra aynı kanalı giriş ve ADC olarak ayarlayıp dahili kondansatöre yönlendiriyorsun. Bu aşamada;
dahili kondansatördeki şarj dokunma ucundaki kapasite ile bir miktar deşarj oluyor (CVD işlemi yani Capacitive Voltage Divider Türkçesi Kapasitif Voltaj Bölücü))ve kanal üzerindeki voltaj bölünüyor. Şayet dokuna ucuna dukunursanız vücut kapasiteside devreye girdiğinden deşarj olayı daha fazla yaşanıyor ve voltaj seviyesi sıfıra kadar düşüyor. İşte dokunma ile dokunmama arasındaki farkı bu şekilde tespit ederek çalışan bir sistem bu. Sistem şimdilik tek kanal çalışıyor ama artırılabilir. Bunu benden istemeyin ihtiyacı olan uğraşıp kendi yapsın artık.

Proje dosyaları aşağıdadır. Dosya içinde iki ayrı program bulunmaktadır. Birisi Toggle çalışmakta diğeri ise bas-bırak sistemi ile çalışmaktadır.



Ete

Mucit23

#1
  Geçen gün bi alışveriş merkezinde gezerken Vikonun üretmiş olduğu kapasitif anahtarlar ve Dimmerleri gördüm. Gerçekten çok pratikler. Eski mekanik mantık kontaklar kullanılmıyor. Buton üzerinde hafif bir dokunmak yetiyor. Dimmerleride aynı şekilde buton üzerinde parmak aşağı yukarı kaydırılarak lamba parlaklığı ayarlanabiliyor.  Belki görmüşsünüzdür aşağıda var.
http://kartonpiyerci.org/ev-ici-dekorasyon-urunleri/esyalari/594-viko-anahtar-modelleri-ve-fiyatlari-lamba-dugme-cesitleri-2011.html
Sormak istediğim şey Bunlardamı sizin bahsettiğiniz mantıkla çalışıyor. Ben alışveriş merkezinde biraz bunları inceledim. :D Dışında plastik bir kılıf var Üzerine dokunur dokunmaz lambayı toggle yapıyor. Dikkatimi çekti anahtara elimi yaklaştırmam yetiyor. Ufak bir dokunma lamba yanıyor.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

#2
Benim yaptığım aslında dirençsel değişim esasına dayanıyor. Çok enteresan bir mantığı var. Onu anlatmadan Viko nun kileri açıklayayım. Onlar kapasitif çalışıyorar. Kapasitif çalışma sisteminde bir relaxion osilatör oluşturuluyor. Pic lerde bu osilatör bir direnç ve bir shottky diyot yardımı ile picin comparatör özelliği kullanılarak oluşturulmaktadır. Dokunma ucu ise osilatörün kapasitesini oluşturmaktadır. Bu kapasiteye yaklaşan her şey ilave kapasite yarattığı için osilatörün frekansını değiştiriyor ve sonuçta frekans yada peryod ölçümü yapılarak yaklaşmatik yada dokunmatik olarak bir cismin varlığını tespit edebiliyorlar.
Henüz kapasitif sistemi deneme fırsatım olmadı ama yakında deneyeceğim. Relaxion (başka şekilde yazılıyor olabilir) osilatör konusunu incelemem gerekiyor.

Benim yaptığım sistemde bir ADC pinini önce çıkış yapıyorsun ve çıkışa HIGH veriyorsun. Ama aynı zamanda ADC kanal seçiminden o pini seçersen çıkışa verilen HIGH doğruca gidip ADC kondansatörünü şarj ediyor. Daha sonra o pini giriş yapıp ADC girişi olarak ayarladığın zaman şarj olmuş kondansatör dokunma ucunun yarattığı kapasiteye deşarj olarak ADC ucundaki voltajın hemen hemen yarıya düşmesine sebep olmaktadır. Şayet bir dokunma hareketide var ise bu sefer deşarj tam olarak olmakta ve kondansatör şarjı sıfıra düşmektedir. İşte bu voltajın anında ölçülmesi ile bir dokunma hareketi varmı yokmu anlayabiliyorsun. Kısaca şarj edilmiş ADC kondansatörünün ilave kapasite ile voltajının bölünmesi esasına dayanmaktadır benim yaptığım. Bana ilginç gelmiş ve merak yüzünden yapıp denemiştim. Ama çalışıyor sistem.
Tek kusuru var istediğin yüzyde kullanamıyorsun. Dokunma uçları küçük olursa sistem gayet kararlı çalışıyor. Ama bir lamba gövdesine bağladım ve gövdeyi dokunma ucu olarak kullanayım dedim ama olmadı maalesef. Kapasite büyük gelip Voltaj anında sıfırlandığı için sistem kararlı çalışmadı . Ama küçük dokunma uçlarında yaklaşık 5-10cm kablo ile gayet kararlı çalışmaktadır.

Geçenlerde E-Bay da bir dokunmatik sensör gördüm. IQS127D diye bir adı var. Sure (çin) elektronik satıryor idi. 5 ad. için 8 USD fiyat verdim ve aldım. Geldi sensörler ve hemen denedim. Smd ve gayet küçük bir şey 4 adt kondansatör ve bir direnç ilave edilerek çalışıyor. Tek dokunma ucu var ama iki çıkışı var. Birisi dokunma ucu çıkışı diğeri ise yaklaşma çıkışı.
Dokunma ucu çıkışını kullanırsan dokunma ucuna dokununca çıkış veriyor. Yaklaşma çıkışını kullanırsan dokunma ucuna elini yaklaşık 10cm yaklaştırırsan sistem çıkış veriyor. Bayağı hoşuma gitti. Üstelilk becerebilirsen programlanabilen bir alet. Çıkışlar istenirse Toggle istenirse (default) bas bırak çalışıyor. Hassasiyet de programlanabiliyor. Programlamak için özel bir cihaz istiyor ama sonuçta alet epeyce hoşuma gitti. Dokunmatik bir dimmer yapmıştım. Dokunma ucunu bir türlü 50Hz parazit sinyalinden kurtaramıyordum ama bu sensör ile sorunu kökünden hallettim.

Ete


Mucit23

IQS127D çipine şimdi bende baktım. Kullanışlı bir çipe benziyor. Dediğiniz ilginç bir çalışma mantığı var. Özellikle açma kapama anahtarı gibi kullanım alanlarını ve işlevselliğini görünce yazmak istedim.
Kolay gelsin. Hayırlı Çalışmalar.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

pwm.c

ETE hocam, öncelikle böyle bir çalışmayı paylaştığınız için çok teşekkürler. hazır verilmiş uygulamalar bizi birçok zahmetten kurtarıyor.
kendim bu devreyi biraz değiştirerek kullandım. bana, dokunma ucunun yalıtkan bir plastik yüzeyin arkasından algılayanından gerekiyordu. pic kullanmadan başka bir devre tasarladıydım ama çok fazla malzeme kullanmıştım. sizin devrenizde az sayıda malzeme olunca bunu yapmaya karar verdim.
devreyi kurdum ama bu hali ile yalıtkan bir yüzeyden algılamıyordu. bende iki yüzeyli pleketi 2cm*2cm  kesip bundan dokunma sensörü yaptım. bakır yüzeyin birini dokunma ucuna dierinide GND şaseye verdim. sonunda devre tam istediğim gibi çalıştı. yapmak isteyenler aynı yöntemi kullanabilirler.

unutmadan, ben DOKUN_TOGGLE yazılımını kullandım ama bazı eksik ve fazla kodlar var. örneğin ilk çalışmada eeproma sürekli veri yazılıyor.
     WRITE $10,BUYUK
     WRITE $11,KUCUK
sanırım bunları unutmuş olmalı. silince değişen bişey olmadı. aynı yazılımı kullanan varsa bunları silsin.
birde sensör kapasitesinin deşarjı için buraya 1ms gecikme ekledim.

       GPIO.0=0   'sensör pini LOW ve sensör kapasitesi deşarj oldu
       pause 1     

çok gerekli değil ama isteyen bunuda ekleyebilir.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

ete

pwm.c,
Orada yer alan Write komutlarını şarj voltajının hangi seviyelere ulaştığını anlamak için ancak kayıt ettirerek izleyebiliyordum.
O nedenle programı geliştirirken faydlandığım komutlar. Orada unutmuşum.

Ete

ELZEMEFE

 IQS127D  çok güzel bişey yapmışlar   2009 da  çıkmış sanırım....   farklı özellikleride var baya parazit bastırma felan  koymuşlar..

pwm.c

ETE hocam, PIC12F683 de 3 kanal kapasitif dokunmatik girişi olduğu Microchip'in sayfasında belirtilmiş.
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010115
ancak, kullanımıyla ilgili kaynak bulamadım. dier piclerin datasında CPS modülü hakkında kaynaklar var ama bu 12f683 de nedense yok. "Cap Touch Channels" diye belirtilen şey nedir? sizin bu konuda bir bilginiz var mı?
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

ete

#8
pwm.c,
Verdiğin linkteki açıklamada 3 adet "touch channel" diye bir ifade kullanmış ama ne yazıkki Data sheet de en ufak bir ip ucu bulamadım. Enteresan olan bu işlemcinin 3 adet Analog kanalı var acaba onlarımı kast ediyor. Her neyse benim bildiğim şu,
Dokunmatik buton yapmanın bir diğer yolu da relaxion osilatör kullanmak şeklinde olmaktadır. İşin prensibi basit Bir direnç ve dokunma ucunun oluşturduğu kapasite ile bir osilatör oluşturuyorsun. Bu osilatörü işlemcinin komparatör pinlerini kullanarak stabil hale getiriyorsun ve sonuçta dokunma ucu boşta iken osc frekansını pic ile ölçüyorsun bu ölçümü genelde açılışta bir kere yapıyorlar. O ölçüm sonucunu bir yere yazıyorsun. Sonra program sürekli olarak frekans ölçümü yapıyor (sanki buton ucunu kontrol eder gibi)  Dokunma ucuna bir el yaklaşır ise hemen relaxion osc nin frekansı değişiyor. Program bu değişimi yakalayarak hem yaklaşma anını hemde dokunma anını yakalayabiliyor.  Bu sistemle yapılan 12F615 le yapılmış bir sistem gördüm ve adamın programını denedim  gayet güzel çalışıyor.  Bunu diğer komparatörü olan işlemcilerede tatbik etmek isterim ama henüz üzerinde çalışamadım.  Aşağıda linkini veriyorum. Program ASM de yazılmış. İncelemek istersen bir bak istersen. Bu sistemi çözersem yada çözebilirsek belkide daha stabil çalışan bir dokunma sistemimiz olur.

http://www.pcbheaven.com/circuitpages/PIC_Frequency_Change_Touch_Button/

Gerçek kapasitif dokunma modülü olan pic ile yapılmış bir sistemide aşağıdaki linkte anlatıyor aynı vatandaş.

http://www.pcbheaven.com/circuitpages/PIC_Capacitance_Sensor_with_Multitouch_Function/?p=0


Ete


pwm.c

#9
ETE hocam ilgilendiğin için çok teşekkürler. dokunmatik sensörlerle ilgili bütün kaynakları önceden incelemiştim ve yeterince bilgi edindim. ben sadece 12f683 dokunmatiğini merak etmiştim sorun buydu sadece. 12f683 de hazır modül var diye umutlanmıştım ama heralde yok.
ilgin için tekrardan teşekkürler.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

huseyin

ete hocam projede verdiginiz bas dosyalarinda ki komutlarin açikmalamarini hepsinin karşilarina  yazabilirmisiniz.! biliyorum sizden çok şey istiyorum ama sayenizde birşeyler ögreniyoruz.
ben ilk başta c dili ile başlayinca bas. dilini anlamak ta güçlük çekiyorum ve derleyicisini kullanmayi beceremedim hex ve diger dosyalarini çikartamiyorum.
asil amacım dokunmatik buton yaparken programanin mantigini anlamak
formda açikmala yapmişsiniz ama dahili adc kondastorü pic in içinde mevcut olan birşey mi onu programla hangi konutla aktif ediyoruz.?

huseyin

ete hocam microcode studio da sizin verdiginiz CVD system in bas. dosyasini koplayip yeni bir proje açtim ve derlemeye çaliştim hassasiyetini 136 ya yükseltmek için
6 tana device hatasi verdi sebebi ne olabilir 

ete

Hata mesajlarını görmeden bir şey söylemem mümkün değil maalesef.
Ete

huseyin


ete

Hataların hepside sigorta ayarları ile ilgili. Bu ise şunu işaret ediyor.
Muhtemelen MPASM ile derleme yapıyorsun. Ama programdaki sigorta ayarları MPASM formatına uygun değiller.
Ya programı MPASM ile derlemeyeceksin yada ayarları MPASM formatına çevireceksin.

Ete

Powered by EzPortal