İçindekiler:
Video: PIC16F886 Mikrodenetleyicili Kapasitif Dokunmatik: 3 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Bu derste, kapasitans farklarını tespit etmek için bir PIC16F886 mikro denetleyicisini nasıl kullanabileceğinizi gözden geçireceğiz, bu daha sonra bir dokunmatik yüzeye basılıp basılmadığını söylemek için kullanılabilir. Bu projeyi yapmadan önce pic mikrodenetleyicilere aşina olmak güzel.
Adım 1: Devrenizi Bağlayın
İlk önce devreyi yukarıdaki şemaya göre bağlayarak başlayalım. Dokunmatik yüzeyi yapmak için alüminyum folyoyu kare şeklinde katlayabilir ve bir tel üzerine bantlayabilirsiniz. 100k direnç için farklı değerlerle deney yapabilirsiniz, 100k'nin benim için iyi çalıştığını buldum.
RC4 pimi, ölçülecek kapasitansı şarj etmeye/boşaltmaya başlamak için kullanılır. C12IN0, dahili bir karşılaştırıcının - tarafına, C1IN pimi ise aynı karşılaştırıcının + tarafına bağlanır. Mikrodenetleyici, C12IN0 voltajı C1IN voltajının üzerine çıktığında kapasitansı tam olarak şarj edilmiş olarak görür. Dirençli voltaj bölücü, C1IN'in 5 volta yakın olmasını sağlar.
Dokunmatik yüzey, sizinle devre topraklaması arasında önemli bir kapasite olmasına bağlı olduğundan, pilin çalışmama olasılığı vardır.
2. Adım: Başlık Dosyası
Tüm bağlantılar bitti mi? Güzel, başlık dosyasıyla devam edeceğiz. XC8 derleyicisini kullanacağız ve başlıktan da anlaşılacağı gibi şimdi projenizde yeni bir başlık dosyası oluşturacak ve aşağıdaki kodu kopyalayıp yapıştıracaksınız. Herhangi bir başlık dosyası olmadan ana kodunuzun üzerine kopyalayıp yapıştırabilirsiniz.
#define CALIBRATION_SAMPLE 20#define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int sayısı;
int kalibrasyonValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime(){
int timerCount = 0; int overflowCount = 0; //ölçülecek deşarj kapasitansı RC4 = 0; _delay_ms(DISCHARGE_TIME); //"kapasitörü" tamamen (aslında neredeyse tamamen) boşaltmak için yeterli gecikmeyi ver //zamanlayıcı taşma bayrağını temizle T0IF = 0; //zamanlayıcının taşmasını bekle, saymaya 0'dan başla while(!T0IF); T0IF = 0; //ölçülecek kapasitansı şarj etmeye başla RC4 = 1; //kapasitansın referans voltajına kadar dolmasını bekleyin while(C1OUT){ timerCount = TMR0; if(T0IF){ overflowCount++; T0IF = 0; } } count = (256 * overflowCount) + timerCount; // timerCount timerCount'u sıfırla = 0; overflowCount = 0; dönüş sayısı; }
int isTouching(int tolerans){
//birden çok örneğin ortalaması çift ortalama = 0; for(int i = 0; i kalibrasyonDeğeri + tolerans) ortalama++; } ortalama /= TOUCH_SAMPLE; //ortalama 0 ile 1 arasında bir sayı olacaktır if(ortalama > 0.2) return 1; 0 döndür; }
geçersiz kalibre(){
int ortalama = 0; int örnekler[CALIBRATION_SAMPLE]; //(int i = 0; i < CALIBRATION_SAMPLE; i++){ örnekleri için ortalama değer alın = getChargeTime(); ortalama += örnekler; } ortalama /= KALİBRASYON_SAMPLE; kalibrasyonDeğeri = ortalama; //maks/min değerlerini al maxCalibrationValue = örnekler[0]; minCalibrationValue = örnekler[0]; for(int i = 0; i maxCalibrationValue) maxCalibrationValue = örnekler; if(samples < minCalibrationValue) minCalibrationValue = örnekler; } }
geçersiz setupCapacitiveTouch(){
//şarj/deşarj pinini çıkış olarak ayarlıyoruz, bu durumda RC4 TRISCbits. TRISC4 = 0; //zamanlayıcının ayarlanması0 T0CS = 0; PSA = 1; //karşılaştırıcının ayarlanması C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; //sayım değerleri temizleniyor count = 0; //kalibrasyon değerlerinin temizlenmesi kalibrasyonValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; //başlangıçta kalibrasyonu çalıştır calibrate(); }
Adım 3: Ana Kodun Yazılması
Ana koddan başlayarak, önceki adımda oluşturulan başlık dosyasını eklemeniz gerekir. Aşağıdaki kod, isTouching işlevini bir anahtar olarak nasıl kullanabileceğinizin bir örneğidir. Benim durumumda başlığa capacitiveTouch.h adını verdim.
#Dahil etmek
#include "capacitiveTouch.h"
// bu değişken butona basılıp basılmadığını söyler
int lastState = 0;
geçersiz ana(){
//RC5'i çıkış olarak ayarlıyoruz TRISCbits. TRISC5 = 0; //programın başlangıcında bu fonksiyonu çağırmanız gerekiyor setupCapacitiveTouch(); _delay_ms(1000); // tam kurulumunuzdan sonra kalibre edin calibrate(); while(1){ //düğmeye basılıp basılmadığı kontrol ediliyor if(isTouching(15) && lastState == 0){ if(RC5) RC5 = 0; yoksa RC5 = 1; sonDurum = 1; } //butonun serbest bırakılıp bırakılmadığı kontrol ediliyor else if(lastState == 1 && !isTouching(15)) lastState = 0; _delay_ms(20); } }
kalibre etmek:
Bu fonksiyona kalibrasyonValue, maxCalibrationValue ve minCalibrationValue değişkenleri çağrıldığında güncellenecektir. kalibrasyonValue, isTouching işlevi tarafından kullanılır. Kalibrasyon sırasında dokunmatik yüzeyin yalnız bırakılması gerektiğini unutmayın.
setupKapasitif Dokunma:
Programınızın başında çağrılması gerekiyor. Diğer fonksiyonlar tarafından kullanılan gerekli bitleri kurar. Ayrıca bir kalibrasyon çalıştırır. Ancak bir saniye bekleyip kalibrasyonu ayrı ayrı çalıştırarak daha iyi sonuçlar aldım.
Dokunma:
Bu işlev, C12IN0'da kapasitansta bir artış tespit ederse 1 döndürür ve kapasitans kalibrasyon sırasındaki kapasitansa yakınsa 0 döndürür. Basitçe ifade edilirse, birisi pede dokunursa isTouching işlevi 1 değerini döndürür. İşlev ayrıca giriş olarak bir parametre ister, bu, tetikleme toleransıdır. Tolerans değeri ne kadar yüksek olursa o kadar az duyarlı olur. Kurulumumda 15'in iyi çalıştığını buldum, ancak bu osilatör frekansına ve bastığınızda ne kadar kapasitans eklendiğine bağlı olduğundan, sizin için çalışan bir şey bulana kadar bu değerle denemeler yapmalısınız.
getChargeTime:
Kapasitansın CVREF voltajına yüklenmesinin ne kadar süreceğini bilmek istediğinizde, bu fonksiyon onu test edecek ve bir tamsayı döndürecektir. Zamanı saniye cinsinden almak için şu formülü kullanırsınız: (4 * getChargeTime) / osilatörFrequency = ChargeTimeInSeconds Bu formül, isTouching işlevinden tolerans girdisini saniyelere almak için de kullanılabilir.
Önerilen:
Kapasitif Dokunmatik Anahtarlı Arduino El Fanı.: 6 Adım
Kapasitif Dokunmatik Anahtarlı Arduino El Fanı.: Bu eğitimde, kapasitif dokunmatik sensör, röle modülü ve Visuino kullanarak Hendheld pil fanının nasıl açılıp kapatılacağını öğreneceğiz. Bir tanıtım videosunu izleyin
Dokunmatik Kapasitif Duvar Montajı: 3 Adım
Dokunmatik Kapasitif Duvar Kurulumu: Birkaç yaz önce, SparkFun Electronics turu sırasında bu harika duvar kurulumunu gördüm: tümü bakır bantlı Çıplak İletken Dokunmatik Panele bağlanan iletken boyada ikonik görüntülerle dolu bir duvar. Dokunulduğunda, eşit
Ucuz Dokunmatik Kapasitif Piyano Nasıl Yapılır: 5 Adım
Ucuz Dokunmatik Kapasitif Piyano Nasıl Yapılır: Teknoloji ve müziğin büyük bir hayranıyım ve bunu piyano öğrencisi olarak önceki hayatımdan ilham aldıktan sonra yapmaya karar verdim. Her neyse…Bu derste size Arduino, hoparlör ve kağıt kullanarak ucuz kapasitif dokunmatik piyano yapmayı göstereceğim. ben
Düğmeler için "Metalik Delik Tapaları" Kullanan ESP32 Kapasitif Dokunmatik Giriş: 5 Adım (Resimlerle)
Düğmeler için "Metalik Delik Tapalar" Kullanan ESP32 Kapasitif Dokunmatik Giriş: Üç düğme girişi gerektiren yaklaşan bir ESP32 WiFi Kit 32 tabanlı proje için tasarım kararlarını sonlandırırken, göze çarpan bir sorun, WiFi Kit 32'nin tek bir mekanik düğmeye sahip olmamasıydı, henüz yalnız üç mekanik düğme, f
Projelerinize Kapasitif Dokunmatik Anahtarı Ekleyin: 7 Adım
Projelerinize Kapasitif Dokunmatik Anahtar Ekleyin: Evdeki projelerinize kapasitif dokunmatik anahtar nasıl eklenir Merhaba elektronik diy dostları bu dersimizde size elektronik projelerinize ucuza kapasitif dokunmatik anahtarı nasıl ekleyebileceğinizi ve kendi diy projenizi nasıl verebileceğinizi göstereceğim. profesyonel bir görünüm