Daftar Isi:
Video: Sentuhan Kapasitif Dengan Mikrokontroler PIC16F886: 3 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:57
Dalam tutorial ini kita akan membahas bagaimana Anda dapat menggunakan mikrokontroler PIC16F886 untuk mendeteksi perbedaan kapasitansi, ini nantinya dapat digunakan untuk mengetahui apakah touch pad sedang ditekan. Ada baiknya untuk mengenal mikrokontroler pic sebelum membuat proyek ini.
Langkah 1: Hubungkan Sirkuit Anda
Pertama, mari kita mulai dengan memasang rangkaian sesuai dengan skema di atas. Untuk membuat panel sentuh, Anda dapat melipat aluminium foil menjadi persegi dan menempelkannya pada kawat. Anda dapat bereksperimen dengan nilai yang berbeda untuk resistor 100k, saya menemukan 100k bekerja dengan baik untuk saya.
Pin RC4 digunakan untuk memulai pengisian/pengosongan kapasitansi yang akan diukur. C12IN0 terhubung ke - sisi komparator internal dan pin C1IN terhubung ke + sisi komparator yang sama. Mikrokontroler melihat kapasitansi sebagai terisi penuh ketika tegangan C12IN0 mencapai di atas tegangan C1IN. Pembagi tegangan resistif memastikan C1IN mendekati 5 volt.
Karena panel sentuh bergantung pada kapasitansi yang signifikan antara Anda dan ground sirkuit, ada kemungkinan baterai tidak berfungsi.
Langkah 2: File Header
Selesai dengan semua koneksi? Baik, kita akan melanjutkan dengan file header. Kami akan menggunakan kompiler XC8 dan seperti yang disarankan oleh judulnya, Anda sekarang harus membuat file header baru di proyek Anda dan menyalin-tempel kode berikut. Anda juga dapat menyalin-menempelnya di atas kode utama Anda tanpa file header apa pun.
#define CALIBRATION_SAMPLE 20#define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
jumlah int;
int kalibrasiValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime(){
int penghitung waktu Hitung = 0; int overflowCount = 0; //pengosongan kapasitansi yang akan diukur RC4 = 0; _delay_ms(DISCHARGE_TIME); //memberikan penundaan yang cukup untuk sepenuhnya (hampir sepenuhnya benar-benar) melepaskan "kapasitor" //menghapus flag overflow timer T0IF = 0; //tunggu timer overflow, mulai hitung dari 0 while(!T0IF); T0IF = 0; //mulai pengisian kapasitansi yang akan diukur RC4 = 1; //tunggu kapasitansi mengisi hingga tegangan referensi while(C1OUT){ timerCount = TMR0; if(T0IF){ overflowCount++; T0IF = 0; } } count = (256 * overflowCount) + timerCount; //reset timerCount timerCount = 0; overflowCount = 0; jumlah pengembalian; }
int isTouching(toleransi int){
//rata-rata beberapa sampel rata-rata ganda = 0; for(int i = 0; i kalibrasiNilai + toleransi) rata-rata++; } rata-rata /= TOUCH_SAMPLE; //rata-rata akan menjadi angka antara 0 dan 1 jika(rata-rata > 0.2) mengembalikan 1; kembali 0; }
batal kalibrasi(){
int rata-rata = 0; int sampel[CALIBRATION_SAMPLE]; //mendapatkan nilai rata-rata untuk(int i = 0; i < CALIBRATION_SAMPLE; i++){ sampel = getChargeTime(); rata-rata += sampel; } rata-rata /= CALIBRATION_SAMPLE; kalibrasiNilai = rata-rata; //mendapatkan nilai maks/min maxCalibrationValue = sampel[0]; minCalibrationValue = sampel[0]; for(int i = 0; i maxCalibrationValue) maxCalibrationValue = sampel; if(sampel < minCalibrationValue) minCalibrationValue = sampel; } }
batalkan pengaturanCapacitiveTouch(){
//mengatur pin charge/discharge sebagai output, dalam hal ini adalah RC4 TRISCbits. TRISC4 = 0; //menyetel timer0 T0CS = 0; PSA = 1; //menyiapkan komparator C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; //menghapus nilai hitungan count = 0; //menghapus nilai kalibrasi kalibrasiValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; //jalankan kalibrasi saat mulai kalibrasi(); }
Langkah 3: Menulis Kode Utama
Dimulai dengan kode utama, Anda harus menyertakan file header yang dibuat pada langkah sebelumnya. Kode berikut adalah contoh bagaimana Anda dapat menggunakan fungsi isTouching sebagai sakelar. Dalam kasus saya, saya memberi header nama capacitiveTouch.h.
#termasuk
#sertakan "capacitiveTouch.h"
// variabel ini memberitahu apakah tombol sudah atau belum ditekan
int keadaan terakhir = 0;
batal utama(){
//mengatur RC5 sebagai output TRISCbits. TRISC5 = 0; //Anda perlu memanggil fungsi ini pada awal program setupCapacitiveTouch(); _delay_ms(1000); //kalibrasi setelah pengaturan yang tepat kalibrasi(); while(1){ //memeriksa apakah tombol ditekan if(isTouching(15) && lastState == 0){ if(RC5) RC5 = 0; lain RC5 = 1; keadaan terakhir = 1; } //memeriksa apakah tombol dilepaskan else if(lastState == 1 && !isTouching(15)) lastState = 0; _delay_ms(20); } }
menyesuaikan:
Saat fungsi ini dipanggil variabel kalibrasiValue, maxCalibrationValue dan minCalibrationValue akan diperbarui. kalibrasiValue digunakan oleh fungsi isTouching. Ingatlah bahwa panel sentuh harus dibiarkan sendiri selama kalibrasi.
setupCapacitiveTouch:
Perlu dipanggil di awal program Anda. Ini mengatur bit yang diperlukan yang digunakan oleh fungsi lain. Ini juga menjalankan kalibrasi. Namun saya mendapatkan hasil yang lebih baik dengan menunggu sebentar dan menjalankan kalibrasi lagi secara terpisah.
menyentuh:
Fungsi ini mengembalikan 1 jika mendeteksi peningkatan kapasitansi pada C12IN0 dan mengembalikan 0 jika kapasitansi dekat dengan kapasitansi selama kalibrasi. Sederhananya, jika seseorang menyentuh pad, fungsi isTouching akan kembali 1. Fungsi tersebut juga menginginkan parameter sebagai input, ini adalah toleransi untuk memicunya. Semakin tinggi nilai toleransi maka semakin tidak sensitif. Dalam pengaturan saya, saya menemukan 15 bekerja dengan baik, tetapi karena ini tergantung pada frekuensi osilator dan berapa banyak kapasitansi yang ditambahkan ketika Anda menekannya, Anda harus bereksperimen dengan nilai ini sampai Anda menemukan sesuatu yang sesuai untuk Anda.
getChargeTime:
Bila Anda ingin mengetahui berapa lama waktu yang dibutuhkan untuk mengisi kapasitansi ke tegangan CVREF, fungsi ini akan mengujinya dan mengembalikan bilangan bulat. Untuk mendapatkan waktu dalam detik gunakan rumus ini: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Rumus ini juga dapat digunakan untuk mendapatkan input toleransi dari fungsi isTouching ke detik.
Direkomendasikan:
Anda Dapat Melakukannya Dengan Sentuhan Kindle?: 15 Langkah (dengan Gambar)
Anda Dapat Melakukannya Dengan Sentuhan Kindle?: Saya tidak pernah mengerti mengapa ada orang yang ingin memiliki e-Reader. Kemudian anak-anak saya yang sudah dewasa memberi saya Kindle Touch dan saya telah menemukan cara untuk membuatnya melakukan banyak hal bagi saya seperti yang dilakukan ponsel pintar atau iPad untuk orang lain. Suatu hari itu akan menggantikan penuaan saya
Luncurkan Slideshow Gambar Liburan Anda Dengan Sentuhan Ajaib !: 9 Langkah (dengan Gambar)
Luncurkan Slideshow Gambar Liburan Anda Dengan Sentuhan Ajaib !: Selama bertahun-tahun, saya telah mengembangkan kebiasaan membawa patung kecil saat bepergian: Saya sering membeli seni kecil kosong (seperti yang ada di gambar) dan melukis agar sesuai dengan bendera dan tema negara yang saya kunjungi (dalam hal ini, Sisilia). T
Konfigurasi Bit Fuse Mikrokontroler AVR. Membuat dan Mengunggah di Memori Flash Mikrokontroler Program Berkedip LED.: 5 Langkah
Konfigurasi Bit Fuse Mikrokontroler AVR. Membuat dan Mengupload di Flash Memory Mikrokontroler Program LED Blinking.: Dalam hal ini kita akan membuat program sederhana dalam kode C dan membakarnya ke dalam memori mikrokontroler. Kami akan menulis program kami sendiri dan mengkompilasi file hex, menggunakan Atmel Studio sebagai platform pengembangan terintegrasi. Kami akan mengkonfigurasi fuse bi
Pembuka Botol yang Dioperasikan dengan Sentuhan: 4 Langkah (dengan Gambar)
Pembuka Botol yang Dioperasikan dengan Sentuhan: Instruksi ini dibuat untuk memenuhi persyaratan proyek Makecourse di University of South Florida (www.makecourse.com)Apa yang dibutuhkan seseorang ketika mereka memiliki segalanya??? Pembuka botol yang dioperasikan dengan sentuhan tentu saja! Ide ini
Sentuhan Kapasitif Dengan Evive (Pengontrol Berbasis Arduino): 6 Langkah (dengan Gambar)
Capacitive Touch With Evive (Pengontrol Berbasis Arduino): Tahukah Anda cara kerja layar sentuh ponsel cerdas Anda? Ponsel cerdas memiliki serangkaian sensor sentuh di bawah layar kaca. Saat ini, ini didasarkan pada teknologi penginderaan sentuh kapasitansi dan bahkan sentuhan lembut pun mudah dideteksi. Sentuhan kapasitif dirasakan