Мазмұны:
Бейне: PIC16F886 микроконтроллері бар сыйымдылық сенсоры: 3 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Бұл оқулықта біз PIC16F886 микроконтроллерін сыйымдылықтағы айырмашылықтарды анықтау үшін қалай қолдануға болатынын қарастырамыз, оны кейін сенсорлық тақтаның басылғанын білу үшін қолдануға болады. Бұл жобаны жасамас бұрын суретті микроконтроллерлермен танысу жақсы.
1 -қадам: Электр тізбегін қосыңыз
Алдымен, схеманы жоғарыдағы схемаға сәйкес қосудан бастайық. Сенсорлық тақтаны жасау үшін алюминий фольганы шаршыға және сымға таспамен бүктеуге болады. Сіз 100k резисторының әр түрлі мәндерімен тәжірибе жасай аласыз, мен 100k мен үшін жақсы жұмыс істеді деп таптым.
RC4 түйреуіші өлшенетін сыйымдылықты зарядтау/разрядтауды бастау үшін қолданылады. C12IN0 ішкі компаратордың бүйіріне, ал C1IN түйреуіші сол компаратордың + жағына қосылады. Микроконтроллер C12IN0 кернеуі C1IN кернеуінен жоғары болғанда сыйымдылық толық зарядталған деп есептейді. Резистивті кернеуді бөлгіш C1IN 5 вольтке жақын екеніне көз жеткізеді.
Сенсорлық тақта сіз мен электр тізбегі арасындағы үлкен сыйымдылыққа байланысты болғандықтан, батарея жұмыс істемеуі мүмкін.
2 -қадам: тақырыптық файл
Барлық байланыстар аяқталды ма? Жақсы, біз тақырып файлын жалғастырамыз. Біз XC8 компиляторын қолданамыз және тақырыпта айтылғандай, сіз енді жобаңызда жаңа тақырып файлын құрып, келесі кодты көшіріп қойыңыз. Сіз оны негізгі кодтың үстіне тақырыптық файлсыз көшіріп қоюға болады.
#CALIBRATION_SAMPLE 20 -ды анықтаңыз #TOUCH_SAMPLE 10 -ді анықтаңыз #ТАСЫРУ_УАҚЫТЫН 5 анықтаңыз
int count;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // өлшенетін разряд сыйымдылығы RC4 = 0; _кідіріс_көшу (ТҮСІРІЛУІ_TIME); // «конденсаторды» толық (іс жүзінде толықтай) шығаруға жеткілікті кідіріс беріңіз // таймердің толып кету жалаушасын тазалаңыз T0IF = 0; // таймердің толып кетуін күтіңіз, санауды 0 кезінде бастаңыз (! T0IF); T0IF = 0; // зарядтау сыйымдылығын өлшеуді бастау RC4 = 1; // сыйымдылықтың сілтеме кернеуіне дейін зарядталуын күтіңіз (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // қалпына келтіру timerCount timerCount = 0; overflowCount = 0; қайтару саны; }
int isTouching (толеранттылық) {
// бірнеше үлгілердің орташа мәні екі есе орташа = 0; for (int i = 0; i calibrationValue+tolerance) орташа ++; } орташа /= TOUCH_SAMPLE; // орташа 0 мен 1 арасындағы сан болады, егер (орташа> 0,2) 1 қайтарса; қайтару 0; }
жарамсыз калибрлеу () {
int орташа = 0; int үлгілері [CALIBRATION_SAMPLE]; // (int i = 0; i <CALIBRATION_SAMPLE; i ++) {үлгілері үшін орташа мәнді алу = getChargeTime (); орташа += сынамалар ; } орташа /= CALIBRATION_SAMPLE; calibrationValue = орташа; // max/min мәндерін алу 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; // калибрлеуді іске қосу кезінде калибрлеуді іске қосыңыз (); }
3 -қадам: Негізгі кодты жазу
Негізгі кодтан бастап, алдыңғы қадамда жасалған тақырып файлын қосу қажет. Келесі код isTouching функциясын коммутатор ретінде қолдануға болатын мысал. Менің жағдайда тақырыпқа capacitiveTouch.h атауын бердім.
#қосу
#«capacitiveTouch.h» қосыңыз
// бұл айнымалы түйменің басылмағанын немесе басылмағанын айтады
int lastState = 0;
void main () {
// TRCCbits шығысы ретінде RC5 параметрін орнату. TRISC5 = 0; // setupCapacitiveTouch () бағдарламасын іске қосқанда осы функцияны шақыру қажет; _ кешіктіру (1000); // дәл баптаудан кейін калибрлеу calibrate (); while (1) {// егер (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0 болса, түйменің басылып жатқанын тексеру; басқасы RC5 = 1; lastState = 1; } // батырманың босатылатынын тексеру if if (lastState == 1 &&! isTouching (15)) lastState = 0; _ кешігу (20); }}
калибрлеу:
Бұл функция calibrationValue айнымалылары деп аталатын кезде maxCalibrationValue және minCalibrationValue жаңартылады. calibrationValue isTouching функциясында қолданылады. Есіңізде болсын, калибрлеу кезінде сенсорлық тақта жалғыз қалуы керек.
setupCapacitiveTouch:
Бағдарламаның басында қоңырау шалу қажет. Ол басқа функцияларда қолданылатын қажетті биттерді орнатады. Ол калибрлеуді де жүргізеді. Дегенмен, мен бір секунд күтіп, калибрлеуді бөлек бөлек жүргізу арқылы жақсы нәтижеге қол жеткіздім.
тиіп тұр:
Бұл функция C12IN0 бойынша сыйымдылықтың жоғарылауын анықтаса 1 қайтарады, ал сыйымдылық калибрлеу кезіндегіге жақын болса 0 қайтарады. Қарапайым тілмен айтқанда, егер біреу тақтаға қол тигізсе, isTouching функциясы 1 -ге оралады. Функция сонымен қатар параметрді енгізу ретінде қалайды, бұл оның іске қосылуына төзімділік. Толеранттылық мәні неғұрлым жоғары болса, соғұрлым ол сезімтал болады. Менің қондырғымда 15 жақсы жұмыс істеді, бірақ бұл оксилятор жиілігіне және оны басқан кезде сыйымдылықтың қосылу дәрежесіне байланысты болғандықтан, сізге сәйкес келетін нәрсені тапқанша осы мәнмен тәжірибе жасау керек.
getChargeTime:
CVREF кернеуіне сыйымдылықты толтыру үшін қанша уақыт қажет екенін білгіңіз келсе, бұл функция оны тексереді және бүтін санды қайтарады. Уақытты секундпен алу үшін мына формуланы қолданасыз: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Бұл формуланы isTouching функциясының төзімділік енгізуін секундқа дейін алу үшін де қолдануға болады.
Ұсынылған:
Топырақ сыйымдылық сенсоры бар Arduino өсімдік мониторы - Оқулық: 6 қадам
Топырақ сыйымдылығы сенсоры бар Arduino өсімдік мониторы - Оқулық: Бұл оқулықта біз OLED дисплейі мен Visuino бар сыйымдылық ылғалдылығы сенсорының көмегімен топырақ ылғалдылығын анықтауды үйренеміз. Бейнені қараңыз
Сыйымдылық сенсорлары бар DFPlayer негізіндегі дыбыс үлгісі: 9 қадам
Сыйымдылық сенсорлары бар DFPlayer негізіндегі дыбыс үлгісі: Кіріспе Әр түрлі синтезаторлардың конструкциясымен тәжірибе жүргізгеннен кейін, мен оңай көшірілетін және арзан аудио сынамалағыш құруды шештім. Жақсы дыбыс сапасы (44,1 кГц) және жеткілікті сақтау сыйымдылығы, DFPlayer режимі
Мини қамыс сенсоры бар RaspberryPi 3 магнит сенсоры: 6 қадам
Мини қамыс сенсоры бар RaspberryPi 3 магнит сенсоры: Бұл нұсқаулықта біз RaspberryPi 3 көмегімен IoT магнит сенсорын жасаймыз. Сенсор жарық диодты және дыбыстық сигналдан тұрады, екеуі де магнитті шағын қамыс сенсоры сезген кезде қосылады
CloudX микроконтроллері бар СКД бар пернетақта: 4 қадам
CloudX микроконтроллері бар СКД бар пернетақта: Бұл жоба үшін біз матрицалық пернетақтадан мәліметтерді қабылдаймыз, содан кейін оны LCD модулінде көрсетеміз
Evive бар сыйымдылық сенсоры (Arduino негізіндегі контроллер): 6 қадам (суреттермен)
Evive көмегімен сыйымдылық сенсоры (Arduino негізіндегі контроллер): Сіз смартфонның сенсорлық экраны қалай жұмыс істейтінін білесіз бе? Қазіргі уақытта оның сыйымдылығы сенсорлы сенсорлық технологияға негізделген және тіпті нәзік жанасуды оңай анықтауға болады. Сыйымдылыққа жанасу сезіледі