Mundarija:
Video: PIC16F886 mikrokontrolerli sig'imli sensor: 3 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
Ushbu qo'llanmada biz sig'imdagi farqlarni aniqlash uchun PIC16F886 mikrokontroleridan qanday foydalanish mumkinligini ko'rib chiqamiz, keyinchalik bu sensorli panel bosilganligini aniqlash uchun ishlatilishi mumkin. Loyihani amalga oshirishdan oldin mikrokontrollerlar bilan tanishish yaxshi.
1 -qadam: O'chirish davrasini uzing
Birinchidan, sxemani yuqoridagi sxema bo'yicha ulashdan boshlaylik. Sensorli panelni yaratish uchun siz alyumin folga kvadratga o'ralib, simga lenta qo'yishingiz mumkin. Siz 100k qarshilik uchun turli qiymatlar bilan tajriba o'tkazishingiz mumkin, men 100k men uchun yaxshi ishlaganini topdim.
RC4 pimi o'lchanadigan sig'imni zaryad qilish/tushirishni boshlash uchun ishlatiladi. C12IN0 ichki taqqoslagichning yon tomoniga, C1IN pimi esa xuddi shu taqqoslagichning + tomoniga ulangan. Mikrokontroller C12IN0 zo'riqishi C1IN kuchlanishidan yuqori bo'lganida, sig'im to'liq zaryadlangan deb hisoblaydi. Rezistiv kuchlanish bo'luvchi C1IN 5 voltga yaqin ekanligiga ishonch hosil qiladi.
Sensorli panel siz va kontaktlarning zanglashiga olib boruvchi quvvati o'rtasida bog'liq bo'lgani uchun, batareyaning ishlamasligi ehtimoli bor.
2 -qadam: Sarlavha fayli
Barcha ulanishlar tugadimi? Yaxshi, biz sarlavha faylini davom ettiramiz. Biz XC8 kompilyatoridan foydalanamiz va sarlavhadan ko'rinib turibdiki, endi siz loyihangizda yangi sarlavha faylini yaratasiz va quyidagi kodni nusxa ko'chirasiz. Siz hech qanday sarlavha faylisiz uni asosiy kodingiz ustiga nusxalashingiz mumkin.
#kalibratsiya_MASALASI 20 ni belgilang #TOUCH_SAMPLE 10 ni aniqlang #yuklash vaqtini aniqlang 5
int soni;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // o'lchash kerak bo'lgan tushirish sig'imi RC4 = 0; _delay_ms (DISCHARGE_TIME); // "kondansatkichni" to'liq (deyarli to'liq) chiqarib yuborish uchun etarli kechikish bering // taymer to'lib ketish bayrog'ini tozalang T0IF = 0; // taymer oshib ketishini kuting, hisobni 0 dan boshlang (! T0IF); T0IF = 0; // o'lchash uchun zaryadlovchi sig'imini boshlash RC4 = 1; // (C1OUT) {timerCount = TMR0; agar (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; qaytarish soni; }
int isTouch (int bag'rikenglik) {
// bir nechta namunalarning o'rtacha ikki baravar ortasi = 0; for (int i = 0; i calibrationValue+tolerance) o'rtacha ++; } o'rtacha /= TOUCH_SAMPLE; // o'rtacha 0 dan 1 gacha bo'lgan son bo'ladi, agar (o'rtacha> 0,2) 1 qaytsa; qaytarish 0; }
bekor kalibrlash () {
int o'rtacha = 0; int namunalari [CALIBRATION_SAMPLE]; // (int i = 0; i <CALIBRATION_SAMPLE; i ++) {namuna = getChargeTime () uchun o'rtacha qiymatni oling; o'rtacha += namunalar ; } o'rtacha /= CALIBRATION_SAMPLE; calibrationValue = o'rtacha; // max/min qiymatlarini olish maxCalibrationValue = namunalar [0]; minCalibrationValue = namunalar [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = namunalar ; if (namunalar <minCalibrationValue) minCalibrationValue = namunalar ; }}
void setupCapacitiveTouch () {
// zaryad/tushirish pinini chiqish sifatida o'rnatish, bu holda bu RC4 TRISCbits. TRISC4 = 0; // taymerni sozlash0 T0CS = 0; PSA = 1; // komparatorni sozlash C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // tozalash qiymatlari hisobini tozalash = 0; // kalibrlash qiymatlarini tozalash calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // kalibrlashni start calibrate -da ishga tushirish (); }
3 -qadam: Asosiy kodni yozish
Asosiy koddan boshlab, oldingi qadamda yaratilgan sarlavha faylini kiritishingiz kerak bo'ladi. Quyidagi kod isTouching funktsiyasini kalit sifatida qanday ishlatishingiz mumkinligiga misol. Mening vaziyatimda sarlavhaga capacitiveTouch.h nomini berdim.
#qo'shing
#"capacitiveTouch.h" ni qo'shing
// bu o'zgaruvchi tugma bosilgan yoki bosilmaganligini bildiradi
int lastState = 0;
void main () {
// RC5 ni TRISCbits. TRISC5 = 0 chiqishi sifatida sozlash; // setupCapacitiveTouch () dasturining boshlanishida siz ushbu funktsiyani chaqirishingiz kerak; _ kechikish (1000); // aniq sozlangandan keyin sozlang kalibrlash (); while (1) {// agar tugmani bosilishini tekshirish (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; boshqa RC5 = 1; lastState = 1; } // boshqa tugma chiqayotganligini tekshirish, agar (lastState == 1 &&! isTouching (15)) lastState = 0; _ kechikish (20); }}
kalibrlash:
Qachon bu funksiya o'zgaruvchilar deb nomlansa calibrationValue, maxCalibrationValue va minCalibrationValue yangilanadi. calibrationValue isTouching funktsiyasi tomonidan ishlatiladi. Kalibrlash paytida sensorli panelni yolg'iz qoldirish kerakligini unutmang.
setupCapacitiveTouch:
Dasturning boshida qo'ng'iroq qilish kerak. U boshqa funktsiyalar uchun zarur bo'lgan bitlarni o'rnatadi. Bundan tashqari, kalibrlash ishlaydi. Biroq, men bir soniya kutib, kalibrlashni alohida -alohida bajarib, yaxshiroq natijalarga erishdim.
tegmoqda:
Agar bu funktsiya C12IN0 da sig'imning oshishini aniqlasa, 1 ni qaytaradi va agar sig'im kalibrlash paytida bo'lganiga yaqin bo'lsa, 0 ni qaytaradi. Oddiy qilib aytganda, agar kimdir padga tegsa, isTouching funktsiyasi qaytadi. Funktsiya parametr sifatida kirishni xohlaydi, bu uning ishga tushishiga bardoshlikdir. Bardoshlik qiymati qanchalik yuqori bo'lsa, u shunchalik sezgir bo'ladi. O'rnatishimda men 15 ta yaxshi ish topdim, lekin bu osilator chastotasiga va uni bosganingizda qancha sig'im qo'shilishiga bog'liq bo'lgani uchun siz o'zingiz uchun mos keladigan narsani topmaguningizcha bu qiymat bilan tajriba o'tkazishingiz kerak.
getChargeTime:
Agar siz CVREF kuchlanishiga sig'imning zaryadlanishi qancha vaqt ketishini bilmoqchi bo'lsangiz, bu funksiya uni tekshiradi va butun sonni qaytaradi. Vaqtni soniyalarda olish uchun siz ushbu formuladan foydalanasiz: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Bu formuladan isTouching funksiyasidan bardoshlik kiritishini soniyalargacha olish uchun ham foydalanish mumkin.
Tavsiya:
Bir martali ishlatiladigan qalam uchun sig'imli qalam: 6 qadam (rasmlar bilan)
Bir martali ishlatiladigan qalam uchun sig'im qalamchasi: Menda o'nta to'pli mikro rolikli sharlar bor. Men ulardan birining qopqog'iga sig'imli qalam qo'shmoqchiman. Keyin qalpoq va qalamni qalamdan boshqasiga o'tkazish mumkin, chunki ularning har birida siyoh tugaydi. Men Jeyson Poel Smitdan minnatdorman
Yalang'och Arduino -ni sinovdan o'tkazing, sig'imli kirish va LED yordamida o'yin dasturiy ta'minoti: 4 qadam
Yalang'och Arduinoni, O'yin dasturiy ta'minoti yordamida, sig'imli kirish va LED yordamida tekshiring: " Itaring " Yalang'och Arduino taxtasi yordamida interaktiv o'yin, tashqi qismlar va simlar kerak emas (sig'imli "sensorli" kirish ishlatiladi). Yuqorida ko'rsatilgandek, u ikki xil taxtada ishlayotganini ko'rsatadi. Push-Bu ikkita maqsadga ega. /V ni tezda ko'rsatish uchun
Sensorli sig'imli devor o'rnatish: 3 qadam
Sensorli sig'imli devorni o'rnatish: Bir necha yoz oldin, men bu yupqa devor o'rnatilishini SparkFun Electronics -ga ekskursiya paytida ko'rdim: devorli simli lenta bilan yalang'och Supero'tkazuvchilar sensorli taxtaga ulangan, o'tkazgichli bo'yoqdagi tasvirlar bilan to'ldirilgan. Qo'l tegsa, teng
Qanday qilib sensorli sig'imli pianino yasash mumkin: 5 qadam
Qanday qilib sensorli sig'imli pianino yasash mumkin: Men texnologiya va musiqaning ashaddiy muxlisiman, va men pianinochi talabalik yillarimdan ilhomlanganimdan keyin buni qilishga qaror qildim. Qanday bo'lmasin … Bu darsda men sizga Arduino, karnay va qog'oz yordamida arzon sig'imli sensorli pianino yasashni ko'rsataman. Men
Tugmalar uchun "Metall tuynuklar" yordamida ESP32 sig'imli sensorli kirish: 5 qadam (rasmlar bilan)
Tugmalar uchun "Metall teshikli vilkalar" yordamida ESP32 sig'imli sensorli kirish: Men yaqinda ESP32 WiFi Kit 32 -ga asoslangan uchta tugmani kiritishni talab qiladigan loyihaning dizayn qarorlarini yakunlayotganimda, bitta muhim muammo shundaki, WiFi Kit 32 -da bitta mexanik tugmachaning yo'qligi, faqat uchta mexanik tugma, f