সুচিপত্র:

PIC16F886 মাইক্রোকন্ট্রোলারের সাথে ক্যাপাসিটিভ টাচ: 3 টি ধাপ
PIC16F886 মাইক্রোকন্ট্রোলারের সাথে ক্যাপাসিটিভ টাচ: 3 টি ধাপ

ভিডিও: PIC16F886 মাইক্রোকন্ট্রোলারের সাথে ক্যাপাসিটিভ টাচ: 3 টি ধাপ

ভিডিও: PIC16F886 মাইক্রোকন্ট্রোলারের সাথে ক্যাপাসিটিভ টাচ: 3 টি ধাপ
ভিডিও: LCD interfacing with PIC Microcontroller | Microcontroller Training Tutorial Class 05 2024, জুলাই
Anonim
PIC16F886 মাইক্রোকন্ট্রোলারের সাথে ক্যাপাসিটিভ টাচ
PIC16F886 মাইক্রোকন্ট্রোলারের সাথে ক্যাপাসিটিভ টাচ

এই টিউটোরিয়ালে আমরা দেখব কিভাবে আপনি একটি 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; _ বিলম্ব_এমএস (ডিসচার্জ_টাইম); // "ক্যাপাসিটর" সম্পূর্ণরূপে (প্রায় সম্পূর্ণভাবে) স্রাব করতে যথেষ্ট বিলম্ব দিন // টাইমার ওভারফ্লো পতাকা T0IF = 0 সাফ করুন; // টাইমার ওভারফ্লো হওয়ার জন্য অপেক্ষা করুন, 0 থেকে গণনা শুরু করুন (! T0IF); T0IF = 0; // RC4 = 1 পরিমাপ করার জন্য ক্যাপ্যাসিট্যান্স চার্জ করা শুরু করুন; // রেফারেন্স ভোল্টেজ পর্যন্ত ক্যাপ্যাসিট্যান্স চার্জ করার জন্য অপেক্ষা করুন (C1OUT) {timerCount = TMR0; যদি (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // রিসেট টাইমারকাউন্ট টাইমারকাউন্ট = 0; overflowCount = 0; ফেরত গণনা; }

int isTouching (int tolerance) {

// একাধিক নমুনার গড় দ্বিগুণ গড় = 0; জন্য (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 = গড়; // সর্বাধিক/মিনিটের মান পান maxCalibrationValue = নমুনা [0]; minCalibrationValue = নমুনা [0]; জন্য (int i = 0; i maxCalibrationValue) maxCalibrationValue = নমুনা ; যদি (নমুনা <minCalibrationValue) minCalibrationValue = নমুনা ; }}

void setupCapacitiveTouch () {

// আউটপুট হিসাবে চার্জ/ডিসচার্জ পিন সেট করা, এই ক্ষেত্রে এটি RC4 TRISCbits. TRISC4 = 0; // টাইমার 0 টি 0 সিএস = 0 সেট আপ করা; পিএসএ = 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 হিসাবে সেট করা; // প্রোগ্রাম সেটআপ ক্যাপাসিটিভ টাচ () শুরুতে আপনাকে এই ফাংশনটি কল করতে হবে; _ বিলম্ব_এমএস (1000); // আপনার সঠিক সেটআপ ক্যালিব্রেট () পরে ক্যালিব্রেট করুন (); যখন (1) {// বাটন টিপছে কিনা তা পরীক্ষা করা হচ্ছে যদি (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; অন্যথায় RC5 = 1; lastState = 1; } // যাচাই করা হচ্ছে যদি বোতামটি ছাড়া হয় অন্যথায় (lastState == 1 &&! isTouching (15)) lastState = 0; _ বিলম্ব_এমএস (20); }}

ক্রমাঙ্কন:

যখন এই ফাংশনটি ভেরিয়েবল calibrationValue বলা হয়, maxCalibrationValue এবং minCalibrationValue আপডেট করা হবে। calibrationValue isTouching ফাংশন দ্বারা ব্যবহৃত হয়। মনে রাখবেন যে ক্রমাঙ্কনের সময় টাচ প্যাডটি একা থাকতে হবে।

setupCapacitiveTouch:

আপনার প্রোগ্রামের শুরুতে কল করা প্রয়োজন। এটি অন্যান্য ফাংশন দ্বারা ব্যবহৃত প্রয়োজনীয় বিট সেট করে। এটি একটি ক্যালিব্রেশনও চালায়। যাইহোক আমি একটি সেকেন্ড অপেক্ষা করে ভাল ফলাফল পেয়েছি এবং আলাদাভাবে আবার ক্রমাঙ্কন চালাই।

স্পর্শ করছে:

এই ফাংশনটি 1 রিটার্ন করে যদি এটি C12IN0 তে ক্যাপ্যাসিট্যান্স বৃদ্ধি সনাক্ত করে এবং 0 ক্যাপাসিট্যান্স যদি ক্যালিব্রেশন চলাকালীন ছিল তার কাছাকাছি থাকে। সহজভাবে বলা হয়েছে, যদি কেউ প্যাড স্পর্শ করে তাহলে isTouching ফাংশন ফিরে আসবে। ফাংশনটিও ইনপুট হিসেবে একটি প্যারামিটার চায়, এটি ট্রিগার করার জন্য সহনশীলতা। সহনশীলতার মান যত বেশি হবে তত কম সংবেদনশীল। আমার সেটআপে আমি 15 টি ভাল কাজ করেছি, কিন্তু এটি ওসিলিটর ফ্রিকোয়েন্সি উপর নির্ভর করে এবং যখন আপনি এটি চাপবেন তখন কতটা ক্যাপ্যাসিট্যান্স যোগ করা হবে তা যতক্ষণ না আপনার জন্য কাজ করে এমন কিছু খুঁজে না পাওয়া পর্যন্ত এই মানটি নিয়ে পরীক্ষা করা উচিত।

getChargeTime:

যখন আপনি জানতে চান যে CVREF ভোল্টেজের ক্যাপাসিট্যান্স চার্জ করতে কত সময় লাগবে, এই ফাংশনটি এটি পরীক্ষা করবে এবং একটি পূর্ণসংখ্যা ফিরিয়ে দেবে। সেকেন্ডের মধ্যে সময় পেতে আপনি এই সূত্রটি ব্যবহার করুন:

প্রস্তাবিত: