Obsah:
Video: Kapacitný dotyk s mikrokontrolérom PIC16F886: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
V tomto tutoriále sa pozrieme na to, ako môžete pomocou mikrokontroléra PIC16F886 detekovať rozdiely v kapacite, čo sa dá neskôr použiť na zistenie, či je stlačený dotykový panel. Pred uskutočnením tohto projektu je dobré sa zoznámiť s obrazovými mikrokontrolérmi.
Krok 1: Zapojte obvod
Najprv začneme zapojením obvodu podľa vyššie uvedenej schémy. Na výrobu dotykovej podložky môžete alobal zložiť do štvorca a prilepiť páskou na drôte. Môžete experimentovať s rôznymi hodnotami rezistora 100 k, zistil som, že 100 k pre mňa funguje dobre.
Kolík RC4 sa používa na spustenie nabíjania/vybíjania meranej kapacity. C12IN0 je pripojený k - strane interného komparátora a kolík C1IN je pripojený k + strane rovnakého komparátora. Mikrokontrolér vidí kapacitu ako úplne nabitú, keď napätie C12IN0 dosiahne napätie C1IN. Odporový delič napätia zaisťuje, že C1IN je blízko 5 voltov.
Pretože dotyková podložka závisí od existencie významnej kapacity medzi vami a uzemnením obvodu, je možné, že batéria nebude fungovať.
Krok 2: Súbor hlavičky
Dokončili ste všetky pripojenia? Dobre, budeme pokračovať v hlavičkovom súbore. Budeme používať kompilátor XC8 a ako naznačuje názov, teraz vytvorte vo svojom projekte nový súbor hlavičky a skopírujte a prilepte nasledujúci kód. Rovnako dobre ho môžete skopírovať a prilepiť nad svoj hlavný kód bez akéhokoľvek hlavičkového súboru.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int počet;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // vybíjacia kapacita, ktorá sa má merať RC4 = 0; _delay_ms (DISCHARGE_TIME); // poskytnutie dostatočného oneskorenia na úplné (takmer úplné) vybitie "kondenzátora" // vymazanie príznaku pretečenia časovača T0IF = 0; // počkajte na pretečenie časovača, spustite počítanie od 0 while (! T0IF); T0IF = 0; // spustite nabíjaciu kapacitu, ktorá sa má merať RC4 = 1; // počkajte, kým sa kapacita nabije na referenčné napätie, kým (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} počet = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; počet návratov; }
int isTouching (int tolerancia) {
// priemer viacerých vzoriek dvojitý priemer = 0; pre (int i = 0; i calibrationValue+tolerancia) priemer ++; } priemer /= TOUCH_SAMPLE; // priemer bude číslo medzi 0 a 1, ak (priemer> 0,2) vráti 1; návrat 0; }
void calibrate () {
int priemer = 0; int vzorky [CALIBRATION_SAMPLE]; // získanie priemernej hodnoty pre (int i = 0; i <CALIBRATION_SAMPLE; i ++) {sample = getChargeTime (); priemer += vzorky ; } priemer /= CALIBRATION_SAMPLE; calibrationValue = priemer; // získanie hodnôt max/min maxCalibrationValue = vzorky [0]; minCalibrationValue = vzorky [0]; pre (int i = 0; i maxCalibrationValue) maxCalibrationValue = vzorky ; if (vzorky <minCalibrationValue) minCalibrationValue = vzorky ; }}
neplatné nastavenieCapacitiveTouch () {
// nastavenie nabíjacieho/vybíjacieho kolíka ako výstupu, v tomto prípade je to RC4 TRISCbits. TRISC4 = 0; // nastavenie časovača0 T0CS = 0; PSA = 1; // nastavenie komparátora C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // vymazanie hodnôt počítania count = 0; // vymazanie kalibračných hodnôt calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // spustenie kalibrácie pri spustení calibrate (); }
Krok 3: Napísanie hlavného kódu
Počnúc hlavným kódom budete musieť zahrnúť súbor hlavičky vytvorený v predchádzajúcom kroku. Nasledujúci kód je príkladom toho, ako môžete použiť funkciu isTouching ako prepínač. V mojom prípade som hlavičke dal názov kapacitnýTouch.h.
#zahrnúť
#include "capacitiveTouch.h"
// táto premenná hovorí, či je alebo nie je tlačidlo už stlačené
int lastState = 0;
void main () {
// nastavenie RC5 ako výstupu TRISCbits. TRISC5 = 0; // túto funkciu musíte vyvolať na začiatku programu setupCapacitiveTouch (); _delay_ms (1000); // kalibrácia po vašom presnom nastavení calibrate (); while (1) {// kontrola, či je tlačidlo stlačené, ak (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; inak RC5 = 1; lastState = 1; } // kontrola, či sa uvoľňuje tlačidlo else if (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
kalibrovať:
Keď sa táto funkcia nazýva premenné calibrationValue, aktualizujú sa maxCalibrationValue a minCalibrationValue. calibrationValue používa funkcia isTouching. Majte na pamäti, že dotykový panel by mal byť počas kalibrácie ponechaný sám.
setupCapacitiveTouch:
Je potrebné ho zavolať na začiatku programu. Nastavuje potrebné bity používané ostatnými funkciami. Spustí sa aj kalibrácia. Lepšie výsledky som však dosiahol, keď som chvíľu počkal a znova spustil kalibráciu oddelene.
je Dotyk:
Táto funkcia vráti hodnotu 1, ak zistí nárast kapacity na C12IN0, a vráti hodnotu 0, ak je kapacita blízka kapacite, ktorá bola počas kalibrácie. Jednoducho povedané, ak sa niekto dotkne podložky, funkcia isTouching vráti hodnotu 1. Funkcia tiež chce ako vstup parameter, to je tolerancia, ktorú môže spustiť. Čím vyššia je hodnota tolerancie, tým je citlivejšia. V mojom nastavení som zistil, že 15 funguje dobre, ale pretože to závisí od frekvencie ocsilátora a od toho, koľko kapacity sa pridá, keď ho stlačíte, mali by ste s touto hodnotou experimentovať, kým nenájdete niečo, čo vám vyhovuje.
getChargeTime:
Ak chcete vedieť, ako dlho trvá nabitie kapacity na napätie CVREF, táto funkcia to otestuje a vráti celé číslo. Na získanie času v sekundách použijete tento vzorec: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Tento vzorec je možné použiť aj na získanie vstupu tolerancie z funkcie isTouching na sekundy.
Odporúča:
Otestujte Bare Arduino s herným softvérom využívajúcim kapacitný vstup a LED: 4 kroky
Otestujte Bare Arduino s herným softvérom využívajúcim kapacitný vstup a LED: " Push-It " Interaktívna hra využívajúca holú dosku Arduino, nie sú potrebné žiadne vonkajšie diely ani káble (používa kapacitný „dotykový“vstup). Vyššie uvedený obrázok ukazuje, že beží na dvoch rôznych doskách. Push-It má dva účely. Na rýchlu ukážku/v
VLNOVÝ SPÍNAČ -- DOTYK MÉNY SPÍNAČ POUŽÍVAJÚCI 555: 4 kroky
VLNOVÝ SPÍNAČ || DOTYK MÉNY SPÍNAČ POUŽÍVAJÚC 555: Ahoj všetci, vitajte. Dnes staviam jednoduchý bezdotykový spínač, ktorý sa aktivuje jednoduchým mávnutím ruky pomocou infračerveného senzora a integrovaného časovača 555, takže ho postavíme …. Jeho ovládanie je jednoduché. ako 555 pracujúci ako žabka vo svojom obchode
Jednoduchý automatický tester kondenzátora / kapacitný merač s automatickým rozsahom s Arduino a ručne: 4 kroky
Jednoduchý tester kondenzátora Autorange / kapacitný merač s Arduinom a ručne: Dobrý deň! Pre túto fyzikálnu jednotku potrebujete:* napájací zdroj s 0-12 V* jeden alebo viac kondenzátorov* jeden alebo viac nabíjacích odporov* stopky* multimetr pre napätie meranie* arduino nano* a 16x2 I²C displej* 1 / 4W odpory s 220, 10k, 4,7M
Kapacitný predĺžiteľný ukazovateľ: 4 kroky
Kapacitný predĺžiteľný ukazovateľ: Kapacitná dotyková technológia je dnes veľmi bežná, najmä v kuchynskom prostredí. Pre ľudí s menšou postavou alebo obmedzeným dosahom môže byť prístup k ovládacím prvkom týchto technológií ťažký. Konvenčné ukazovatele rozšírenia nebudú fungovať, pretože
Kapacitný dotyk s Evive (ovládač založený na Arduine): 6 krokov (s obrázkami)
Kapacitný dotyk s Evive (ovládač založený na Arduino): Viete, ako funguje dotyková obrazovka vášho smartfónu? Smartfón má pod sklenenou obrazovkou množstvo dotykových senzorov. V dnešnej dobe je založený na kapacitnej technológii snímania dotyku a dokonca aj jemného dotyku je ľahko rozpoznateľný. Kapacitný dotyk je cítiť