Obsah:
Video: Kapacitní dotek s mikrokontrolérem PIC16F886: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
V tomto tutoriálu se podíváme na to, jak můžete pomocí mikrokontroléru PIC16F886 detekovat rozdíly v kapacitě, což lze později použít k určení, zda je stisknut dotykový panel. Před vytvořením tohoto projektu je dobré se seznámit s obrazovými mikrokontroléry.
Krok 1: Zapojte obvod
Nejprve začněme zapojením obvodu podle výše uvedeného schématu. Chcete -li vytvořit dotykovou podložku, můžete skládat hliníkovou fólii do čtverce a pásku na drát. Můžete experimentovat s různými hodnotami pro odpor 100k, zjistil jsem, že 100k pro mě funguje dobře.
Kolík RC4 se používá k zahájení nabíjení/vybíjení měřené kapacity. C12IN0 je připojen na - stranu interního komparátoru a pin C1IN je připojen k + straně stejného komparátoru. Mikrokontrolér vidí kapacitu jako plně nabitou, když napětí C12IN0 dosáhne nad napětí C1IN. Odporový dělič napětí zajišťuje, že C1IN je blízko 5 voltů.
Protože dotyková podložka závisí na tom, že mezi vámi a uzemněním obvodu je významná kapacita, existuje možnost, že baterie nemusí fungovat.
Krok 2: Soubor záhlaví
Dokončili jste všechna připojení? Dobrá, budeme pokračovat v hlavičkovém souboru. Budeme používat kompilátor XC8 a jak název napovídá, nyní musíte ve svém projektu vytvořit nový soubor záhlaví a zkopírovat a vložit následující kód. Stejně dobře jej můžete zkopírovat a vložit nad svůj hlavní kód bez jakéhokoli záhlaví.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int count;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // měřená vybíjecí kapacita RC4 = 0; _delay_ms (DISCHARGE_TIME); // dejte dostatečné zpoždění na úplné (téměř úplné) vybití "kondenzátoru" // vymazání příznaku přetečení časovače T0IF = 0; // počkejte na přetečení časovače, počítejte od 0 while (! T0IF); T0IF = 0; // spusťte nabíjení měřené kapacity RC4 = 1; // počkejte, až se kapacita nabije až na referenční napětí, zatímco (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} počet = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; počet návratů; }
int isTouching (int tolerance) {
// průměr více vzorků dvojitý průměr = 0; pro (int i = 0; i calibrationValue+tolerance) průměr ++; } průměr /= TOUCH_SAMPLE; // průměr bude číslo mezi 0 a 1, pokud (průměr> 0,2) vrátí 1; návrat 0; }
void calibrate () {
int průměr = 0; int vzorky [CALIBRATION_SAMPLE]; // získání průměrné hodnoty pro (int i = 0; i <CALIBRATION_SAMPLE; i ++) {sample = getChargeTime (); průměr += vzorky ; } průměr /= CALIBRATION_SAMPLE; calibrationValue = průměr; // získejte hodnoty max/min maxCalibrationValue = vzorky [0]; minCalibrationValue = vzorky [0]; pro (int i = 0; i maxCalibrationValue) maxCalibrationValue = vzorky ; if (vzorky <minCalibrationValue) minCalibrationValue = vzorky ; }}
neplatné nastaveníCapacitiveTouch () {
// nastavení nabíjecího/vybíjecího pinu jako výstupu, v tomto případě je to RC4 TRISCbits. TRISC4 = 0; // nastavení časovače0 T0CS = 0; PSA = 1; // nastavení komparátoru C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // vymazání hodnot count count = 0; // vymazání hodnot kalibrace calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // spustit kalibraci při startu calibrate (); }
Krok 3: Napsání hlavního kódu
Počínaje hlavním kódem budete muset zahrnout soubor záhlaví vytvořený v předchozím kroku. Následující kód je příkladem toho, jak můžete použít funkci isTouching jako přepínač. V mém případě jsem dal záhlaví název kapacitníTouch.h.
#zahrnout
#include "kapacitníTouch.h"
// tato proměnná udává, zda je nebo není tlačítko již stisknuto
int lastState = 0;
void main () {
// nastavení RC5 jako výstupu TRISCbits. TRISC5 = 0; // tuto funkci musíte vyvolat při spuštění programu setupCapacitiveTouch (); _delay_ms (1000); // kalibrace po vašem přesném nastavení calibrate (); while (1) {// kontrola, zda je tlačítko stisknuto if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; jinak RC5 = 1; lastState = 1; } // kontrola, zda se uvolňuje tlačítko else if (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
kalibrovat:
Když se tato funkce zavolá, budou aktualizovány proměnné calibrationValue, maxCalibrationValue a minCalibrationValue. calibrationValue používá funkce isTouching. Pamatujte, že dotykový panel by měl během kalibrace zůstat sám.
setupCapacitiveTouch:
Vyžaduje se volání na začátku vašeho programu. Nastavuje potřebné bity používané ostatními funkcemi. Spustí také kalibraci. Lepší výsledky jsem však dosáhl tak, že jsem chvíli počkal a znovu spustil kalibraci samostatně.
isTouching:
Tato funkce vrátí hodnotu 1, pokud detekuje zvýšení kapacity na C12IN0, a vrátí hodnotu 0, pokud je kapacita blízká kapacitě, která byla během kalibrace. Jednoduše řečeno, pokud se někdo dotkne podložky, funkce isTouching vrátí 1. Funkce také chce jako vstup parametr, to je tolerance, kterou může spustit. Čím vyšší je hodnota tolerance, tím méně je citlivá. V mém nastavení jsem zjistil, že 15 funguje dobře, ale protože to závisí na frekvenci ocsillatoru a na tom, kolik kapacity se přidá při jeho stisknutí, měli byste s touto hodnotou experimentovat, dokud nenajdete něco, co vám vyhovuje.
getChargeTime:
Pokud chcete vědět, jak dlouho by trvalo nabití kapacity na napětí CVREF, tato funkce ji otestuje a vrátí celé číslo. Chcete -li získat čas v sekundách, použijte tento vzorec: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Tento vzorec lze také použít k získání vstupu tolerance z funkce isTouching na sekundy.
Doporučuje:
Otestujte Bare Arduino s herním softwarem využívajícím kapacitní vstup a LED: 4 kroky
Otestujte Bare Arduino s herním softwarem využívajícím kapacitní vstup a LED: " Push-It " Interaktivní hra využívající holou desku Arduino, nejsou potřeba žádné externí součásti ani zapojení (využívá kapacitní „dotykový“vstup). Zobrazeno výše, ukazuje, že běží na dvou různých deskách. Push-It má dva účely. Rychle předvést/v
Instalace dotykové kapacitní stěny: 3 kroky
Dotyková kapacitní instalace na stěnu: Před několika léty jsem během prohlídky SparkFun Electronics viděl tuto instalaci na stěnu: zděnou stěnu plnou ikonických obrazů ve vodivé barvě, které byly všechny připojeny k Bare Conductive Touch Board s měděnou páskou. Při dotyku se rovná
Vícebarevný malíř světla (citlivý na dotek): 8 kroků (s obrázky)
Vícebarevný malíř světla (citlivý na dotek): Malování světlem je fotografická technika používaná k vytváření speciálních efektů při dlouhých časech závěrky. K " malování " obrazy. V tomto Instructable vám ukážu, jak vytvořit malíře světla v jednom s dotykem
Arduino MIDI Fighter (citlivý na dotek): 7 kroků (s obrázky)
Arduino Based MIDI Fighter (Touch Sensitive): MIDI je zkratka pro Musical Instrument Digital Interface. Zde vyrábíme na dotek citlivý MIDI bojovník, který má 16 padů. mohou být zvýšeny nebo sníženy. Zde jsem použil 16 kvůli omezeným pinům arduino. Také jsem použil analogové vstupní piny
Kapacitní dotek s Evive (ovladač založený na Arduinu): 6 kroků (s obrázky)
Capacitive Touch With Evive (Arduino Based Controller): Víte, jak funguje dotyková obrazovka vašeho smartphonu? Smartphone má pod skleněnou obrazovkou řadu dotykových senzorů. V dnešní době je jeho technologie založená na kapacitní kapacitě dotykového snímání a dokonce i jemného dotyku snadno detekována. Kapacitní dotek je cítit