Мазмуну:
Video: PIC16F886 микроконтроллери менен сыйымдуу тийүү: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Бул окуу куралында биз сыйымдуулуктагы айырмачылыктарды аныктоо үчүн PIC16F886 микроконтроллерин кантип колдонсоңуз болорун карап чыгабыз, бул кийинчерээк сенсордук панелдин басылгандыгын айтуу үчүн колдонулушу мүмкүн. Бул долбоорду жасоодон мурун микроконтроллерлер менен таанышуу жакшы.
1 -кадам: Районуңузга зым тартуу
Биринчиден, схеманы жогорудагы схемага ылайык өткөрүүдөн баштайлы. Сенсордук блокнотту жасоо үчүн алюминий фольганы төрт бурчтукка бүктөп, зымга скотч менен жабууга болот. Сиз 100k каршылыгы үчүн ар кандай баалуулуктар менен эксперимент жасай аласыз, мен 100k мен үчүн жакшы иштегенин көрдүм.
RC4 пини өлчөнө турган сыйымдуулукту заряддоону/бошотууну баштоо үчүн колдонулат. C12IN0 ички компаратордун - C1IN пини ошол эле салыштыргучтун + тарабына туташкан. Микроконтроллер C12IN0 чыңалуусу C1IN чыңалуусунан жогору болгондо сыйымдуулукту толук заряддалган деп эсептейт. Резистивдүү чыңалуу бөлүштүргүч C1IN 5 вольтко жакын экенин текшерет.
Сенсордук блокнот сиз менен схеманын ортосунда чоң сыйымдуулуктун болушунан көз каранды болгондуктан, батарея иштебей калышы мүмкүн.
2 -кадам: Баш файл
Бардык байланыштар менен бүттүңүзбү? Жакшы, биз башкы файлды улантабыз. Биз XC8 компиляторун колдонобуз жана аталышынан көрүнүп тургандай, сиз азыр долбооруңузда жаңы баш файлды түзүп, төмөнкү кодду көчүрүп чаптаңыз. Сиз аны башкы кодуңуздун үстүнө эч кандай баш файлсыз эле көчүрүп-чаптай аласыз.
#CALIBRATION_SAMPLE 20ны аныктоо #TOUCH_SAMPLE 10ду аныктоо #DISCHARGE_TIME 5ти аныктоо
int count;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // разряд сыйымдуулугу RC4 = 0; _ кечигүү_ms (DISCHARGE_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 (int толеранттуулук) {
// бир нече үлгүлөрдүн орточо эсеби эки эсе орточо = 0; үчүн (int i = 0; i calibrationValue+tolerance) орточо ++; } орточо /= TOUCH_SAMPLE; // орточо 0 менен 1дин ортосундагы сан болот, эгерде (орточо> 0,2) 1 кайтса; return 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; // клиринг эсептөө баалуулуктарынын саны = 0; // клибирлөө баалуулуктарын тазалоо calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // иштетүү калибрлөө баштоо калибрлөө (); }
3 -кадам: Негизги кодду жазуу
Негизги коддон баштап, мурунку кадамда түзүлгөн баш файлды кошушуңуз керек. Төмөнкү код isTouching функциясын которуштуруучу катары кантип колдонсоңуз болоруна мисал. Менин учурда мен аталышка capacitiveTouch.h атын бердим.
#кошуу
#"capacitiveTouch.h" кошуу
// бул өзгөрмө баскыч басылып же басылбаганын айтат
int lastState = 0;
бош функция(){
// RC5ти TRISCbits. TRISC5 = 0 катары чыгаруу; // бул функцияны setupCapacitiveTouch () программасынын башталышында чакыруу керек; _delay_ms (1000); // так орнотууңуздан кийин калибрлөө calibrate (); while (1) {// (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; else RC5 = 1; lastState = 1; } // баскычы башка бошотулуп жаткандыгын текшерүү эгерде (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
калибрлөө:
Бул функция calibrationValue өзгөрмөлөрү деп атала баштаганда, maxCalibrationValue жана minCalibrationValue жаңыртылат. calibrationValue isTouching функциясы тарабынан колдонулат. Калибрлөө учурунда сенсордук тактаны жалгыз калтыруу керек экенин унутпаңыз.
setupCapacitiveTouch:
Программанын башында чакыруу керек. Бул башка функциялар тарабынан керектүү биттерди орнотот. Ошондой эле калибрлөөнү жүргүзөт. Бирок мен бир секунд күтүп, калибрлөөнү өзүнчө кайра иштетип, жакшы жыйынтыктарга жеттим.
isTouching:
Бул функция C12IN0 боюнча сыйымдуулуктун жогорулаганын байкаса 1ди кайтарат жана сыйымдуулугу калибрлөө учурунда болгон функцияга жакын болсо 0 кайтарат. Жөнөкөй сөз менен айтканда, эгер кимдир бирөө панелге тийсе, isTouching функциясы кайтып келет. Функция ошондой эле параметр катары параметрди каалайт, бул анын иштешине болгон толеранттуулук. Толеранттуулуктун мааниси канчалык жогору болсо, ошончолук сезимтал болот. Менин орнотуумда мен 15 жакшы иштегенин таптым, бирок бул оциллятордун жыштыгына жана аны басканда канчалык сыйымдуулук кошулганына байланыштуу болгондуктан, сиз өзүңүзгө ылайыктуу нерсени тапмайынча бул маанини эксперименттешиңиз керек.
getChargeTime:
CVREF чыңалуусуна сыйымдуулукту толтуруу үчүн канча убакыт кетерин билгиңиз келгенде, бул функция аны текшерип бүтүн санды кайтарат. Убакытты секунд менен алуу үчүн сиз бул формуланы колдоносуз: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Бул формуланы isTouching функциясынан толеранттуулукту секундага чейин алуу үчүн да колдонсо болот.
Сунушталууда:
Arduino UNO менен сыйымдуу манжа изинин сенсору: 7 кадам
Arduino UNO менен сыйымдуу бармак изинин сенсору: Эй, эмне болду, балдар! Akarsh бул жерде CETech.Todayден биз долбоорлорубузга коргоочу катмарды кошуп жатабыз. Кабатыр болбоңуз, биз буга эч кандай жансакчы дайындай албайбыз. Бул DFRobotтон келген сүйкүмдүү кичинекей манжа изинин сенсору болот
Сыйкырдуу тийүү менен майрамдык сүрөттөрүңүздүн слайд -шоусун баштаңыз!: 9 кадам (сүрөттөр менен)
Майрамдык сүрөттөрүңүздүн слайд -шоусун сыйкыр менен баштаңыз!: Көп жылдар бою мен саякаттап жүргөндө өзүм менен кичинекей фигураны алып кетүүнү адатка айландырдым: Мен көбүнчө кичинекей, бош артой сатып алам (сүрөттөгүдөй) жана боёк ал мен барган өлкөнүн желегине жана темасына дал келет (бул учурда, Сицилия). Т
Аудио визуалдаштыруу, тийүү баскычтары жана NFC менен Bluetooth үстөл спикери: 24 кадам (сүрөттөр менен)
Аудио визуалдаштыруу, тийүү баскычтары жана NFC менен Bluetooth столунун Bluetooth спикери. Саламатсызбы! Бул көрсөтмөлөрдө мен сенсордук баскычтар жана NFC менен укмуштуудай Аудио визуалдаштыруусу бар бул Desk Bluetooth спикерин кантип жасаганымды көрсөтөм. Бир чыкылдатуу менен NFC иштетилген түзмөктөр менен оңой жупташууга болот. Физикалык баскыч жок
Тийүү менен эс тутум оюну (Саймон мындай дейт) - Эгерде бул ошондо: 6 кадам (сүрөттөр менен)
Тийүү менен эс тутум оюну (Саймон мындай дейт) - Эгерде бул ошондо: Мен өз алдынча жасалган сенсордук аянтчалар жана мектеп проектиси үчүн неопикселдүү шакек менен эстутум оюнун жасадым. Бул оюн Simon Saysке окшош, бирок оюндагы көптөгөн киргизүү жана кайтарым байланыштар (үндөр жана жарык эффекттери) башкача. Мен Су үндөрүн программаладым
Evive менен сыйымдуу тийүү (Arduino негизделген контроллери): 6 кадам (сүрөттөр менен)
Evive менен сыйымдуу тийүү (Arduino негизделген контролер): Сиз смартфонуңуздун сенсордук экраны кандай иштээрин билесизби? Смартфондо айнек экрандын астында сенсордук сенсорлор бар. Бүгүнкү күндө анын сыйымдуулугу тийүү технологиясына негизделген жана ал тургай жумшак тийүү оңой эле аныкталат. Сыйымдуу тийүү сезилет