Съдържание:
Видео: Капацитивно докосване с микроконтролер PIC16F886: 3 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
В този урок ще разгледаме как можете да използвате микроконтролер PIC16F886 за откриване на разлики в капацитета, което по -късно може да се използва за определяне дали е натиснат тъчпад. Добре е да сте запознати с микроконтролерите за снимки преди да направите този проект.
Стъпка 1: Свържете вашата верига
Първо, нека започнем с свързване на веригата съгласно схемата по -горе. За да направите тъчпад, можете да сгънете алуминиево фолио в квадрат и да залепите лента върху тел. Можете да експериментирате с различни стойности за 100k резистор, открих, че 100k ми работи добре.
Щифтът RC4 се използва за започване на зареждане/разреждане на измервания капацитет. C12IN0 е свързан към - страната на вътрешен компаратор, а щифтът C1IN е свързан към + страната на същия сравнител. Микроконтролерът вижда капацитета като напълно зареден, когато напрежението C12IN0 достигне над напрежението C1IN. Резистивният делител на напрежение гарантира, че C1IN е близо до 5 волта.
Тъй като тъчпадът зависи от наличието на значителен капацитет между вас и масата на веригата, има вероятност батерията да не работи.
Стъпка 2: Заглавният файл
Приключихте с всички връзки? Добре, ще продължим с заглавния файл. Ще използваме компилатора XC8 и както подсказва заглавието, сега трябва да създадете нов заглавен файл във вашия проект и да копирате и поставите следния код. Можете също така да го копирате-поставите над основния си код без никакъв заглавен файл.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int брой;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // разряден капацитет за измерване RC4 = 0; _ закъснение_ms (DISCHARGE_TIME); // даваме достатъчно забавяне за пълно (почти напълно реално) разреждане на "кондензатора" // изчистване на флага за препълване на таймера T0IF = 0; // изчакайте таймера да препълни, стартиране на брояча от 0 while (! T0IF); T0IF = 0; // стартиране на зареждащия капацитет за измерване RC4 = 1; // изчакайте капацитетът да се зареди до референтното напрежение докато (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // нулиране на timerCount timerCount = 0; overflowCount = 0; брой връщания; }
int isTouching (int tolerance) {
// средна стойност на множество проби двойна средна стойност = 0; за (int i = 0; i calibrationValue+толеранс) средно ++; } средно /= TOUCH_SAMPLE; // средното ще бъде число между 0 и 1, ако (средно> 0,2) върне 1; връщане 0; }
void calibrate () {
int средно = 0; int проби [CALIBRATION_SAMPLE]; // получаваме средна стойност за (int i = 0; i <CALIBRATION_SAMPLE; i ++) {проби = getChargeTime (); средно += проби ; } средно /= CALIBRATION_SAMPLE; calibrationValue = средно; // получаваме максимални/минимални стойности maxCalibrationValue = проби [0]; minCalibrationValue = проби [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = проби ; if (проби <minCalibrationValue) minCalibrationValue = проби ; }}
void setupCapacitiveTouch () {
// задаване на извод за зареждане/разреждане, в този случай това е RC4 TRISCbits. TRISC4 = 0; // настройка на таймер0 T0CS = 0; PSA = 1; // настройка на компаратора C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // изчистване на стойностите на броя count = 0; // изчистване на стойностите за калибриране calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // стартиране на калибриране при стартиране calibrate (); }
Стъпка 3: Написване на основния код
Започвайки с основния код, ще трябва да включите заглавния файл, създаден в предишната стъпка. Следният код е пример за това как можете да използвате функцията isTouching като превключвател. В моя случай дадох на заглавката името capacitiveTouch.h.
#включва
#include "capacitiveTouch.h"
// тази променлива казва дали бутонът е натиснат или не
int lastState = 0;
void main () {
// настройка на RC5 като изход TRISCbits. TRISC5 = 0; // трябва да извикате тази функция при стартиране на програмата setupCapacitiveTouch (); _ закъснение_ms (1000); // калибриране след вашата точна настройка calibrate (); while (1) {// проверка дали бутонът се натиска if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; иначе RC5 = 1; lastState = 1; } // проверка дали бутонът се освобождава иначе if (lastState == 1 &&! isTouching (15)) lastState = 0; _ закъснение_ms (20); }}
калибриране:
Когато тази функция бъде извикана променливите calibrationValue, maxCalibrationValue и minCalibrationValue ще бъдат актуализирани. calibrationValue се използва от функцията isTouching. Имайте предвид, че тъчпадът трябва да бъде оставен сам по време на калибрирането.
setupCapacitiveTouch:
Трябва да бъде извикан в началото на вашата програма. Той задава необходимите битове, използвани от другите функции. Той също така изпълнява калибриране. Въпреки това получих по -добри резултати, като изчаках секунда и стартирах калибрирането отново отделно.
е докосване:
Тази функция връща 1, ако открие увеличаване на капацитета на C12IN0 и връща 0, ако капацитетът е близък до този, който е бил по време на калибрирането. Просто казано, ако някой докосне подложката, функцията isTouching ще върне 1. Функцията също иска параметър като вход, това е допустимото отклонение за задействане. Колкото по -висока е толерантността, толкова по -малко чувствителна става. В моята настройка открих, че 15 работи добре, но тъй като това зависи от честотата на оксилатора и колко капацитет се добавя, когато го натиснете, трябва да експериментирате с тази стойност, докато намерите нещо, което работи за вас.
getChargeTime:
Когато искате да знаете колко време ще отнеме зареждането на капацитета до напрежението CVREF, тази функция ще го тества и ще върне цяло число. За да получите времето в секунди, използвайте тази формула: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Тази формула може да се използва и за извеждане на толеранса от функцията isTouching до секунди.
Препоръчано:
Как да направите звънец без докосване, откриване на телесна температура, GY-906, 433MHz с помощта на Arduino: 3 стъпки
Как да направите звънец без докосване, откриване на телесна температура, GY-906, 433MHz с помощта на Arduino: Днес ще направим звънец без докосване, той ще открие телесната ви температура. В сегашната ситуация е много важно да се знае дали телесната температура на някой е по -висока от нормалната, когато някой се свива. Този проект ще покаже червена светлина, ако открие някакви
Три схеми на сензор за докосване + Схема на таймер за докосване: 4 стъпки
Три вериги на сензора за докосване + Схема на таймера за докосване: Сензорът за докосване е верига, която се ВКЛЮЧВА, когато открие докосването върху сензорните щифтове. Той работи на преходна основа, т.е. натоварването ще бъде включено само за времето, когато докосването е върху щифтовете. Тук ще ви покажа три различни начина да усетите докосване
Tfcd 3D проследяване на движението чрез капацитивно разпознаване и LED изход: 6 стъпки (със снимки)
Tfcd 3D проследяване на движението чрез капацитивно измерване и LED изход: В тази инструкция е обяснено как движението на ръката може да бъде проследено в 3D пространство, като се използва принципа на капацитивно усещане. Чрез промяна на разстоянието между заредено фолио от алуминий и ръката ви, капацитетът на кондензатора ще варира
Капацитивно докосване с Evive (базиран на Arduino контролер): 6 стъпки (със снимки)
Капацитивно докосване с Evive (базиран на Arduino контролер): Знаете ли как работи сензорният екран на вашия смартфон? Смартфонът има множество сензори за докосване под стъкления екран. В днешно време тя се основава на капацитивна технология за докосване на докосване и дори леко докосване се открива лесно. Усеща се капацитивно докосване
Капацитивно сензорно настроение/Ambilight: 8 стъпки
Капацитивно сензорно настроение/Ambilight: Тази инструкция е бързо записване на моя опит в създаването на многофункционална светлина за настроение. Очакват се някои основни познания за електронните схеми. Проектът все още не е завършил, някои добавят функционалност и ощипването трябва да се направи, но аз