Mündəricat:
Video: PIC16F886 Mikrokontrolörlü Kapasitif Toxunuş: 3 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Bu təlimatda, kapasitans fərqlərini aşkar etmək üçün bir PIC16F886 mikro nəzarətçisindən necə istifadə edə biləcəyinizə baxacağıq, daha sonra bir toxunma yastığının basıldığını söyləmək üçün istifadə edilə bilər. Bu layihəni etməzdən əvvəl şəkil mikrokontrolörləri ilə tanış olmaq yaxşıdır.
Addım 1: Dövrənizi bağlayın
Əvvəlcə yuxarıdakı sxemə uyğun olaraq dövrə bağlayaraq başlayaq. Toxunma yastığı düzəltmək üçün alüminium folqa bir kvadrat halına qatlana və telə bantlana bilər. 100k müqavimət üçün fərqli dəyərlərlə təcrübə edə bilərsiniz, 100k mənim üçün yaxşı işlədiyini gördüm.
Ölçüləcək kapasitansı doldurmağa/boşaltmağa başlamaq üçün RC4 pinindən istifadə olunur. C12IN0 daxili müqayisə cihazının yan tərəfinə, C1IN pimi isə eyni müqayisənin + tərəfinə bağlıdır. Mikro nəzarətçi, C12IN0 gərginliyi C1IN gərginliyinin üstünə çıxdıqda, kapasitansın tam dolu olduğunu görür. Rezistiv gərginlik bölücü C1IN -in 5 volta yaxın olmasını təmin edir.
Toxunma paneli aranızda və dövrə arasında əhəmiyyətli bir tutum olduğundan asılı olaraq, batareyanın işləməməsi ehtimalı var.
Addım 2: Başlıq Dosyası
Bütün əlaqələri bitirdinizmi? Yaxşı, başlıq faylına davam edəcəyik. XC8 kompilyatorundan istifadə edəcəyik və başlıqdan da göründüyü kimi, indi layihənizdə yeni bir başlıq faylı yaratmalı və aşağıdakı kodu kopyalayıb yapışdırmalısınız. Heç bir başlıq faylı olmadan əsas kodunuzun üstünə kopyalayıb yapışdıra bilərsiniz.
#CALIBRATION_SAMPLE 20 təyin edin #TOUCH_SAMPLE 10 təyin edin #DISCHARGE_TIME 5 təyin edin
int sayı;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // boşalma kapasitansı ölçülməlidir RC4 = 0; _ gecikmə_ms (DISCHARGE_TIME); // "kondansatörü" tam (demək olar ki, tam olaraq) boşaltmaq üçün kifayət qədər gecikmə verin // taymer daşma bayrağını sil T0IF = 0; // taymerin daşmasını gözləyin, 0 -dan başlayaraq saymağa başlayın (! T0IF); T0IF = 0; // ölçüləcək kapasitansı doldurmağa başlayın RC4 = 1; // kapasitansın (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // sıfırla timerCount timerCount = 0; overflowCount = 0; qaytarma sayı; }
int isToching (int tolerantlığı) {
// birdən çox nümunənin ortalaması ikiqat orta = 0; for (int i = 0; i calibrationValue+tolerance) orta ++; } orta /= TOUCH_SAMPLE; // orta, 0 ilə 1 arasında bir rəqəm olacaq (əgər orta> 0.2) 1 qaytararsa; qaytarma 0; }
boş kalibrləmə () {
int orta = 0; int nümunələri [CALIBRATION_SAMPLE]; // (int i = 0; i <CALIBRATION_SAMPLE; i ++) {nümunələri = getChargeTime (); orta += nümunələr ; } orta /= CALIBRATION_SAMPLE; calibrationValue = orta; // max/min dəyərləri əldə maxCalibrationValue = nümunələr [0]; minCalibrationValue = nümunələr [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = nümunələr ; əgər (nümunələr <minCalibrationValue) minCalibrationValue = nümunələr ; }}
void setupCapacitiveTouch () {
// şarj/boşaltma pinini çıxış olaraq təyin etmək, bu halda RC4 TRISCbits. TRISC4 = 0; // taymerin qurulması0 T0CS = 0; PSA = 1; // müqayisə aparatının qurulması C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // sayma dəyərlərinin silinməsi count = 0; // kalibrləmə dəyərlərinin silinməsi calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // start calibrate -də kalibrləmə apar (); }
Addım 3: Əsas Məcəllənin yazılması
Əsas koddan başlayaraq əvvəlki addımda yaradılmış başlıq faylını daxil etməlisiniz. Aşağıdakı kod isTouching funksiyasını bir keçid olaraq necə istifadə edə biləcəyinizə bir nümunədir. Mənim vəziyyətimdə başlığa capacitiveTouch.h adını verdim.
#daxil edin
#"capacitiveTouch.h" daxil edin
// bu dəyişən düymənin basılmadığını və ya basılmadığını bildirir
int lastState = 0;
void main () {
// RC5 -i TRISCbits. TRISC5 = 0 olaraq təyin etmək; // setupCapacitiveTouch () proqramının başlanğıcında bu funksiyanı çağırmaq lazımdır; _ gecikmə_ms (1000); // dəqiq qurduqdan sonra kalibr edin calibrate (); while (1) {// (isTouching (15) && lastState == 0) {əgər (RC5) RC5 = 0 əgər düymənin basıldığını yoxlayır; başqa RC5 = 1; lastState = 1; } // düymənin başqa bir şəkildə buraxılıb -buraxılmadığını yoxlamaq (lastState == 1 &&! isTouching (15)) lastState = 0; _ gecikmə_ms (20); }}
kalibr edin:
Bu funksiya calibrationValue dəyişənləri adlandırıldıqda maxCalibrationValue və minCalibrationValue yenilənəcək. calibrationValue isTouching funksiyası tərəfindən istifadə olunur. Kalibrləmə zamanı toxunma panelinin tək qalması lazım olduğunu unutmayın.
setupCapacitiveTouch:
Proqramın əvvəlində zəng etmək lazımdır. Digər funksiyalar tərəfindən istifadə olunan zəruri bitləri təyin edir. Həm də bir kalibrləmə aparır. Ancaq bir saniyə gözləyərək daha yaxşı nəticələr əldə etdim və yenidən ayrı -ayrı kalibrləmə apardım.
toxunur:
Bu funksiya, C12IN0 üzərindəki kapasitans artımını algılarsa 1 -i, tutum kalibrləmə zamanı olduğu funksiyaya yaxın olarsa 0 -u qaytarır. Sadəcə olaraq, kimsə yastığa toxunarsa isTouching funksiyası 1 -ə qayıdacaq. Funksiya eyni zamanda giriş olaraq bir parametr istəyir, bu onun tətiklənməsi üçün tolerantlıqdır. Dözümlülük dəyəri nə qədər yüksəkdirsə, bir o qədər həssas olur. Quraşdırma zamanı 15 -in yaxşı işlədiyini gördüm, amma bu osilatorun tezliyindən və ona basdığınızda nə qədər tutum əlavə olunacağından asılı olaraq sizin üçün işləyən bir şey tapana qədər bu dəyərlə təcrübə aparmalısınız.
getChargeTime:
Kapasiteyi CVREF gərginliyinə doldurmağın nə qədər vaxt aparacağını bilmək istəsəniz, bu funksiya onu sınayacaq və tam ədəd qaytaracaq. Zamanı saniyələrlə əldə etmək üçün bu düsturu istifadə edirsiniz: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Bu düstur, isTouching funksiyasından tolerantlıq girişini saniyələrə çatdırmaq üçün də istifadə edilə bilər.
Tövsiyə:
Arduino UNO ilə Kapasitif Barmaq İzi Sensoru Arasında: 7 addım
Arduino UNO ilə Kapasitif Barmaq İzi Sensoru Arasında: Hey, nə var, uşaqlar! Akarsh burada CETech.Today layihələrimizə qoruyucu bir qat əlavə edəcəyik. Bunun üçün heç bir mühafizəçi təyin etməyəcəyimizdən narahat olmayın. DFRobot -dan yaraşıqlı kiçik görünüşlü barmaq izi sensoru olacaq
Atmega328P-PU mikrokontrolörlü bir hava stansiyası: 5 addım
Atmega328P-PU Mikrokontrolörlü Bir Hava İstasyonu: Bu yaxınlarda edx ilə onlayn olaraq pulsuz bir kurs keçdim (2012-ci ildə Harvard Universiteti və MIT tərəfindən qurulan edX, dünyanın ən yaxşı universitetlərindən və qurumlarından yüksək keyfiyyətli kurslar təklif edən bir onlayn öyrənmə və MOOC təminatçısıdır. öyrənənlər ərəfəsində
8051 Mikrokontrolörlü PC Klaviatura Arası: 6 addım
8051 Mikrodenetleyici ilə PC Klaviatura Arası: Bu layihədə sizə kompüter klaviaturamızı 8051 mikro nəzarətçisinə necə bağlaya biləcəyimizi izah etdim
Qırılan keçid lövhəsini Temp Monitorinqi ilə Ağıllı Toxunuş Açarına düzəldin: 4 addım
Qırılan Şalter Kartını Temp İzləmə ilə Ağıllı Toxunuş Anahtarına Fix edin: Hamınızın həyatınızda ən az bir dəfə bu problemlə üzləşdiyinizi bilirəm, keçid lövhəsi davamlı istifadə etməklə pozulmuşdur. çox vaxt ya keçid içərisindəki yay yerindən düşür və ya m
Bir Mosfet istifadə edərək bir toxunuş açarı necə etmək olar: 4 addım (şəkillərlə)
Bir Mosfetdən istifadə edərək Dokunmatik Anahtarı Necə Etmək olar: TƏK BİR MOSFET TRANSİSTORU İSTİFADƏ EDƏCƏK NECƏ OLACAQ Bir çox cəhətdən, MOSFET -lər adi tranzistorlardan daha üstündür və bu günün tranzistor proyektində biz onu əvəz edəcək sadə bir toxunuş açarı necə edəcəyimizi göstərəcəyik. h ilə normal keçid