Բովանդակություն:
Video: Capacitive Touch With PIC16F886 միկրոկառավարիչ ՝ 3 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Այս ձեռնարկում մենք կանդրադառնանք, թե ինչպես կարող եք օգտագործել PIC16F886 միկրոկոնտրոլերը `տարողունակության տարբերությունները հայտնաբերելու համար, որը հետագայում կարող է օգտագործվել ՝ հպման բարձիկի սեղմման դեպքում: Նախքան այս նախագիծը պատրաստելը լավ է ծանոթ լինել միկրոկառավարիչների հետ:
Քայլ 1: Լարացրեք ձեր սխեման
Նախ, եկեք սկսենք էլեկտրագծերի միացումից ՝ ըստ վերը նշված սխեմայի: Կպչուն պահոց պատրաստելու համար դուք կարող եք ալյումինե փայլաթիթեղը քառակուսի ծալել, իսկ ժապավենը `մետաղալարի վրա: 100k դիմադրության համար կարող եք տարբեր արժեքներով փորձարկել, ես գտա, որ 100k- ն ինձ համար լավ է աշխատել:
RC4 քորոցն օգտագործվում է չափվող հզորությունը լիցքավորելու/լիցքաթափելու համար: C12IN0- ը միացված է ներքին համեմատիչի - կողմին, իսկ C1IN- ի կապը միացված է նույն համեմատիչի + կողմին: Միկրոկոնտրոլերը տեսնում է, որ հզորությունը լիովին լիցքավորված է, երբ C12IN0 լարումը հասնում է C1IN լարման մակարդակին: Դիմադրողական լարման բաժանարարը համոզված է, որ C1IN- ը մոտ է 5 վոլտին:
Քանի որ հպման պահոցը կախված է ձեր և միացման միջանցքի միջև զգալի հզորությունից, հնարավոր է, որ մարտկոցը չաշխատի:
Քայլ 2: Վերնագրի ֆայլ
Ավարտե՞լ եք բոլոր կապերով: Լավ, մենք կշարունակենք վերնագրի ֆայլը: Մենք կօգտագործենք XC8 կոմպիլյատորը, և ինչպես ենթադրվում է վերնագրից, այժմ դուք պետք է ստեղծեք նոր վերնագրի ֆայլ ձեր նախագծում և պատճենեք-տեղադրեք հետևյալ ծածկագիրը: Դուք կարող եք նույնքան լավ պատճենել-տեղադրեք այն ձեր հիմնական կոդի վերևում ՝ առանց վերնագրի ֆայլի:
#սահմանել CALIBRATION_SAMPLE 20 #սահմանել TOUCH_SAMPLE 10 #սահմանել DISCHARGE_TIME 5
int հաշվարկ;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // չափվող արտանետվող հզորությունը RC4 = 0; _ ուշացումով (DISCHARGE_TIME); // բավականաչափ ուշացում տալ «կոնդենսատորը» ամբողջությամբ (գրեթե ամբողջությամբ) լիցքաթափելու համար // ջնջել ժամաչափի արտահոսքի դրոշը T0IF = 0; // սպասեք, որ ժամաչափը լցվի, սկսեք հաշվել 0 -ից մինչ (! T0IF); T0IF = 0; // սկսել լիցքավորման հզորությունը, որը պետք է չափվի RC4 = 1; // սպասեք, որ հզորությունը լիցքավորվի մինչև հղման լարումը (C1OUT) {timerCount = TMR0; եթե (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // վերականգնել timerCount timerCount = 0; overflowCount = 0; վերադարձի հաշվարկ; }
int isTouching (int հանդուրժողականություն) {
// բազմակի նմուշների միջինը կրկնակի միջին = 0; համար (int i = 0; i calibrationValue+tolerance) միջին ++; } միջին /= TOUCH_SAMPLE; // միջինը կլինի թիվ 0 -ից 1 -ի միջև, եթե (միջինը> 0.2) վերադարձնի 1; վերադարձ 0; }
դատարկ calibrate () {
int միջին = 0; int նմուշներ [CALIBRATION_SAMPLE]; // ստանալ միջին արժեքը (int i = 0; i <CALIBRATION_SAMPLE; i ++) {sample = getChargeTime (); միջին += նմուշներ ; } միջին /= CALIBRATION_SAMPLE; calibrationValue = միջին; // ստանալ max/min արժեքներ maxCalibrationValue = նմուշներ [0]; minCalibrationValue = նմուշներ [0]; համար (int i = 0; i maxCalibrationValue) maxCalibrationValue = նմուշներ ; եթե (նմուշներ <minCalibrationValue) minCalibrationValue = նմուշներ ; }}
void setupCapacitiveTouch () {
// լիցքավորման/լիցքավորման քորոցը որպես ելք սահմանել, այս դեպքում դա RC4 TRISCbits. TRISC4 = 0; // ժամանակաչափի տեղադրում 0 T0CS = 0; PSA = 1; // համեմատիչի տեղադրում C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // մաքրման հաշվարկի արժեքների հաշվարկ = 0; // calibration արժեքների մաքրում calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // գործարկել calibration սկզբնական calibrate (); }
Քայլ 3. Գրեք հիմնական ծածկագիրը
Սկսած հիմնական կոդից ՝ ձեզ հարկավոր է ներառել նախորդ քայլում ստեղծված վերնագրի ֆայլը: Հետևյալ կոդը օրինակ է, թե ինչպես կարող եք օգտագործել isTouching գործառույթը որպես անջատիչ: Իմ դեպքում վերնագրին տվեցի capacitiveTouch.h անունը:
#ներառում
#ներառել «capacitiveTouch.h»
// այս փոփոխականն ասում է, եթե կոճակը սեղմված է կամ դեռ սեղմված չէ
int lastState = 0;
դատարկ հիմնական () {
// RC5- ը որպես ելք TRISCbits. TRISC5 = 0; // դուք պետք է այս գործառույթը կանչեք ծրագրի setupCapacitiveTouch () սկզբին; _ ուշացում (1000); // calibrate ձեր ճշգրիտ կարգավորումից հետո calibrate (); իսկ (1) {// ստուգում, եթե կոճակը սեղմվում է if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; այլ RC5 = 1; lastState = 1; } // ստուգում, արդյոք կոճակը այլևս ազատվում է, եթե (lastState == 1 &&! isTouching (15)) lastState = 0; _ ուշացումով (20); }}
calibrate:
Երբ այս գործառույթը կոչվի փոփոխականներ calibrationValue, maxCalibrationValue և minCalibrationValue կթարմացվեն: calibrationValue- ն օգտագործվում է isTouching գործառույթի կողմից: Հիշեք, որ սենսորային պահոցը պետք է միայնակ մնա տրամաչափման ընթացքում:
setupCapacitiveTouch:
Անհրաժեշտ է զանգահարել ձեր ծրագրի սկզբում: Այն սահմանում է այլ գործառույթների կողմից օգտագործվող անհրաժեշտ բիթերը: Այն նաև վարում է կալիբրացիա: Այնուամենայնիվ, ես ավելի լավ արդյունքներ ստացա `սպասելով մեկ վայրկյան և նորից առանձին -առանձին գործարկեցի չափագրումը:
isTouching:
Այս ֆունկցիան վերադարձնում է 1 -ը, եթե հայտնաբերում է C12IN0- ի հզորության բարձրացում և վերադարձնում 0 -ը, եթե հզորությունը մոտ է նրան, ինչ եղել է կալիբրացիայի ժամանակ: Պարզապես ասված է, որ եթե ինչ -որ մեկը դիպչի բարձիկին, isTouching գործառույթը կվերադառնա 1. Ֆունկցիան նաև ուզում է պարամետր որպես մուտքագրում, սա է դրա հանդուրժողականությունը: Որքան բարձր է հանդուրժողականության արժեքը, այնքան պակաս զգայուն է դառնում: Իմ տեղադրման մեջ ես գտա, որ 15 -ը լավ են աշխատել, բայց քանի որ դա կախված է օկիլյատորների հաճախականությունից և այն, թե որքան հզորություն է ավելացվում այն սեղմելիս, պետք է փորձեք այս արժեքով, մինչև չգտնեք ինչ -որ բան, որը ձեզ հարմար է:
getChargeTime:
Երբ ցանկանում եք իմանալ, թե որքան ժամանակ կպահանջվի CVREF լարման հզորությունը լիցքավորելու համար, այս գործառույթը կփորձարկի այն և կվերադարձնի մի ամբողջ թիվ: Վայրկյաններում ժամանակը ստանալու համար օգտագործեք այս բանաձևը. (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Այս բանաձևը կարող է օգտագործվել նաև isTouching գործառույթից վայրկյանների հանդուրժողականության մուտքը ստանալու համար:
Խորհուրդ ենք տալիս:
Թվային ժամացույց ՝ օգտագործելով միկրոկառավարիչ (AT89S52 առանց RTC- ի միացում). 4 քայլ (նկարներով)
Թվային ժամացույց ՝ օգտագործելով միկրոկառավարիչ (AT89S52 Առանց RTC- ի միացում). Թույլ տվեք նկարագրել ժամացույցը … " ockամացույցը սարք է, որը հաշվում է և ցույց է տալիս ժամանակը (հարաբերական) " !!! Գուշակիր, որ ես ճիշտ ասացի, որպեսզի թույլ տանք ARԱՄԱՈՅ AL ALԱՐԳԱՄԱՆ հատկությամբ . Ո NOTՇԱԴՐՈԹՅՈՆ. Ընթերցանության համար կպահանջվի 2-3 րոպե: Կարդացեք ամբողջ նախագիծը, հակառակ դեպքում ես չեմ
Հաճախականության հաշվիչ `օգտագործելով միկրոկառավարիչ` 8 քայլ
Հաճախականության հաշվիչ `օգտագործելով միկրոկառավարիչ. Այս ձեռնարկը պարզապես նշում է, թե ինչպես կարելի է հաշվարկել զարկերակային աղբյուրի հաճախականությունը` օգտագործելով միկրոկոնտրոլերը: Իմպուլսի աղբյուրի բարձր լարման մակարդակը 3.3 Վ է, իսկ ցածրը `0 Վ: Ես օգտագործել եմ STM32L476, Tiva launpad, 16x2 այբբենական թվային LCD որոշ լարեր տախտակ և 1K ռեզի
Հետևող ռոբոտ, որն օգտագործում է TIVA միկրոկառավարիչ TM4C1233H6PM ՝ 3 քայլ
Հետևող ռոբոտ, որն օգտագործում է TIVA միկրոկառավարիչ TM4C1233H6PM. Հետևող ռոբոտը բազմակողմանի մեքենա է, որն օգտագործվում է սպիտակ մակերևույթի վրա գծված մուգ գծերը հայտնաբերելու և հեռացնելու համար: Քանի որ այս ռոբոտը արտադրվում է տախտակի միջոցով, այն կառուցելը չափազանց հեշտ կլինի: Այս համակարգը կարող է միաձուլվել
MATLAB վերահսկվող միկրոկառավարիչ (Arduino MKR1000) ՝ 4 քայլ
MATLAB վերահսկվող միկրոկառավարիչ (Arduino MKR1000). Մեր նախագծի նպատակն էր օգտագործել MATLAB- ը, ինչպես նաև Arduino MKR1000- ը `մեր հնարավորությունների սահմաններում: Մեր նպատակն էր ստեղծել մի սցենար, որը թույլ կտար arduino- ի որոշ առանձնահատկություններին կատարել որոշակի ելք `ելնելով որոշակի մուտքագրումից: Մենք օգտագործել ենք շատ
Ձայնով կառավարվող ռոբոտ ՝ օգտագործելով 8051 միկրոկառավարիչ. 4 քայլ (նկարներով)
Ձայնով կառավարվող ռոբոտ ՝ օգտագործելով 8051 միկրոկոնտրոլեր. Ձայնով կառավարվող ռոբոտը կատարում է նշված հրամանը ձայնի տեսքով: Ինչ էլ որ հրամանը տրվի ձայնային մոդուլի կամ Bluetooth մոդուլի միջոցով, այն վերծանվում է առկա վերահսկիչի կողմից և, հետևաբար, տրված հրամանը կատարվում է: Այստեղ այս նախագծում ես