Sisällysluettelo:
Video: Kapasitiivinen kosketus PIC16F886 -mikrokontrollerilla: 3 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Tässä opetusohjelmassa käymme läpi, kuinka voit käyttää PIC16F886 -mikrokontrolleria havaitaksesi kapasitanssin erot. Tätä voidaan myöhemmin käyttää kertomaan, onko kosketuslevyä painettu. On hyvä tuntea pic -mikrokontrollerit ennen tämän projektin tekemistä.
Vaihe 1: Johdotkaa piiri
Aloitetaan ensin kytkemällä piiri yllä olevan kaavion mukaisesti. Voit tehdä kosketuslevyn taittamalla alumiinifolion neliöksi ja teippaamalla langan. Voit kokeilla 100k: n vastuksen eri arvoja, huomasin, että 100k toimi minulle hyvin.
RC4 -nastaa käytetään mitattavan kapasitanssin lataamiseen/purkamiseen. C12IN0 on kytketty sisäisen vertailulaitteen puolelle ja C1IN -nasta on kytketty saman vertailijan + -puolelle. Mikro -ohjain näkee kapasitanssin täyteen ladattuna, kun C12IN0 -jännite saavuttaa C1IN -jännitteen. Resistiivinen jännitteenjakaja varmistaa, että C1IN on lähellä 5 volttia.
Koska kosketuslevy riippuu siitä, että sinun ja piirin välillä on merkittävä kapasitanssi, on mahdollista, että paristo ei toimi.
Vaihe 2: Otsikkotiedosto
Oletko saanut kaikki liitännät valmiiksi? Hyvä, jatkamme otsikkotiedoston kanssa. Käytämme XC8-kääntäjää, ja kuten otsikko ehdottaa, sinun on nyt luotava uusi otsikkotiedosto projektillesi ja kopioitava ja liitettävä seuraava koodi. Voit yhtä hyvin kopioida ja liittää sen pääkoodisi yläpuolelle ilman otsikkotiedostoa.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int laskea;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // mitattava purkauskapasitanssi RC4 = 0; _viive_ms (DISCHARGE_TIME); // anna riittävästi viivettä "kondensaattorin" purkamiseksi kokonaan (melkein kokonaan) // tyhjennä ajastimen ylivuotolippu T0IF = 0; // odota ajastimen ylivuotoa, aloita laskenta 0: sta (! T0IF); T0IF = 0; // aloita mitattava latauskapasitanssi RC4 = 1; // odota, että kapasitanssi latautuu referance -jännitteeseen, kun taas (C1OUT) {timerCount = TMR0; jos (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // nollaa timerCount timerCount = 0; overflowCount = 0; palautuslaskenta; }
int isTouching (int suvaitsevaisuus) {
// useiden näytteiden keskiarvo kaksinkertainen keskiarvo = 0; (int i = 0; i calibrationValue+toleranssi) keskiarvo ++; } keskiarvo /= TOUCH_SAMPLE; // keskiarvo on luku välillä 0 ja 1, jos (keskiarvo> 0,2) palauttaa 1; palauta 0; }
void calibrate () {
int keskiarvo = 0; int näytteet [CALIBRATION_SAMPLE]; // hae keskiarvo kohteelle (int i = 0; i <CALIBRATION_SAMPLE; i ++) {sample = getChargeTime (); keskiarvo += näytteet ; } keskiarvo /= CALIBRATION_SAMPLE; calibrationValue = keskiarvo; // hanki max/min -arvot maxCalibrationValue = näytteet [0]; minCalibrationValue = näytteet [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = näytteet ; if (näytteet <minCalibrationValue) minCalibrationValue = näytteet ; }}
void setupCapacitiveTouch () {
// lataus-/purkausnastan asettaminen lähtöksi, tässä tapauksessa se on RC4 TRISCbits. TRISC4 = 0; // ajastimen asettaminen0 T0CS = 0; PSA = 1; // vertailijan asettaminen C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // selvityslaskujen arvojen lukumäärä count = 0; // kalibrointiarvojen tyhjentäminen calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // suorittaa kalibrointi käynnistettäessä kalibroi (); }
Vaihe 3: Pääkoodin kirjoittaminen
Pääkoodista alkaen sinun on sisällytettävä edellisessä vaiheessa luotu otsikkotiedosto. Seuraava koodi on esimerkki siitä, kuinka voit käyttää isTouching -toimintoa kytkimenä. Minun tapauksessani annoin otsikolle nimen capacitiveTouch.h.
#sisältää
#include "capacitiveTouch.h"
// tämä muuttuja kertoo, onko painiketta painettu vai ei
int lastState = 0;
void main () {
// asetetaan RC5 tuloksi TRISCbits. TRISC5 = 0; // sinun on kutsuttava tämä toiminto käyttöön ohjelman käynnistyksen yhteydessäCapacitiveTouch (); _viive_ms (1000); // kalibroi tarkan asennuksen jälkeen kalibroi (); while (1) {// tarkistetaan, painetaanko painiketta, jos (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; muuten RC5 = 1; lastState = 1; } // tarkistetaan, vapautetaanko painike muuten if (lastState == 1 &&! isTouching (15)) lastState = 0; _viive_ms (20); }}
kalibroida:
Kun tätä toimintoa kutsutaan, muuttujat calibrationValue, maxCalibrationValue ja minCalibrationValue päivitetään. calibrationValue käytetään isTouching -toiminnossa. Muista, että kosketuslevy tulee jättää yksin kalibroinnin aikana.
setupCapacitiveTouch:
Sinun on kutsuttava ohjelman alussa. Se asettaa tarvittavat bitit, joita muut toiminnot käyttävät. Se suorittaa myös kalibroinnin. Sain kuitenkin parempia tuloksia odottamalla hetken ja suorittamalla kalibroinnin uudelleen erikseen.
isTouching:
Tämä toiminto palauttaa arvon 1, jos se havaitsee C12IN0: n kapasitanssin kasvun, ja palauttaa arvon 0, jos kapasitanssi on lähellä sitä, joka se oli kalibroinnin aikana. Yksinkertaisesti sanottuna, jos joku koskettaa tyynyä, isTouching -toiminto palauttaa 1. Toiminto haluaa myös parametrin syötteeksi, tämä on toleranssi sen laukaisulle. Mitä suurempi toleranssi, sitä vähemmän herkkä se on. Asetuksessani huomasin, että 15 toimi hyvin, mutta koska tämä riippuu ocsillator -taajuudesta ja kuinka paljon kapasitanssia lisätään, kun painat sitä, kokeile tätä arvoa, kunnes löydät jotain, joka toimii sinulle.
getChargeTime:
Kun haluat tietää kuinka kauan kestää kapasitanssin lataaminen CVREF -jännitteeseen, tämä toiminto testaa sen ja palauttaa kokonaisluvun. Voit saada ajan sekunneissa käyttämällä tätä kaavaa: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Tätä kaavaa voidaan käyttää myös toleranssitulon saamiseen isTouching -toiminnosta sekunteihin.
Suositeltava:
Kosketus- ja äänianturi AC/DC -valojen ohjaaminen: 5 vaihetta
Kosketusanturi ja äänianturi, joka ohjaa AC/DC -valoja: Tämä on ensimmäinen projektini ja tämä perustuu kahteen perusanturiin, joista toinen on kosketusanturi ja toinen on äänianturi. PÄÄLLÄ, jos vapautat sen, valo sammuu ja sama
Arduino MusicStump: Kevyt, vangitseva kosketus ja summeri: 3 vaihetta
Arduino MusicStump: Kevyt, vangitseva kosketus ja summeri: Interaktiivinen puu, jonka yläosassa on LED -rengas, summeri, joka tuottaa ääntä, ja vangitseva kosketusanturi, joka muuttaa väriä kosketettaessa sitä. Tämän hauskan pienen asian tekemiseksi tarvitset seuraavat: Elektroniikka:- 1x Arduino Uno- 15x -kaapelit- 1x niin
LED -taustavalaistu sängynpää - Kosketus aktivoitu: 3 vaihetta
LED -taustavalaistu sängynpää - Kosketus aktivoitu: LED -nauhavalaistus kosketusherkällä pylväskorkilla. Aktivoi LEDit koskettamalla sängyn pylvään kuparia. Valon voimakkuutta on kolme, matala, keskitasoinen ja kirkas, jotka aktivoidaan peräkkäin ennen neljännen kosketuksen kääntymistä
Kapasitiivinen kosketus Eviven kanssa (Arduino -pohjainen ohjain): 6 vaihetta (kuvilla)
Kapasitiivinen kosketus Eviven kanssa (Arduino -pohjainen ohjain): Tiedätkö, miten älypuhelimesi kosketusnäyttö toimii? Älypuhelimessa on joukko kosketusantureita lasinäytön alla. Nykyään se perustuu kapasitanssi -kosketustekniikkaan ja jopa lempeä kosketus on helppo havaita. Kapasitiivinen kosketus tunnetaan
Muuta iPod -kosketus WiFi -puhelimeksi: 3 vaihetta
Muuta iPod Touch WiFi -puhelimeksi: Oletko koskaan toivonut, että voisit soittaa ja lähettää tekstiviestejä hienolla iPod Touchilla? Vain kahdella sovelluksella voit muuttaa iPodin kokonaan iPhoneksi ilman kuukausimaksua. ** Tämä toimii VAIN Wi-Fi-alueella. tämä ei missään tapauksessa korvaa matkapuhelinta, s