مقدمه
در این پست آموزشی قصد داریم نحوه استفاده از مقاومت تشخیص نیرو FSR با برد آردوینو را به صورت جامع توضیح دهیم. در ابتدای این آموزش توصیه می شود که اگر آشنایی کافی با بر آردوینو ندارید، مقالات زیر را قبل از شروع این پست مطالعه فرمایید:
سنسور نیرو FSR
FSR مخفف عبارت Force Sensing Resistors، به معنای مقاومت های حساس به نیرو می باشد:
کاربرد های مقاومت های حساس به نیرو FSR
از مدل های رایج این سنسور می توان به FSR-402 و FSR-406 اشاره کرد.
ساختار مقاومت سنجش نیرو FSR
عملکرد این سنسور به صورت یک مقاومت متغیر می باشد که بر اساس فشاری که به سطح سنسور وارد شده، مقاومت کم یا زیاد می شود. در ابتدا که نیرو یا فشاریوارد نمی شود؛ مقاومت بی نهایت (زیاد) است و با افزایش فشار (P) بر سطح (A) مقاومت کاهش می یابد.
ساختار فیزیک FSR از چند لایه انعطاف پذیر و نازک تشکیل شده است. معمولا از مواد رسانای ابریشمی ساخته شده که هر چه عناصر کربنی سطح سنسور بیشتر لمس شود مقاوت بیشتر رو به کاهش می رود.
در شکل زیر ساختار FSR را مشاهده می کنید:
به ترتیب از بالا به پایین:
قالب بندی و اندازه مقاومت سنجش نیرو FSR
پارامترهای مختلفی مانند: ابعاد، قالب و میزان حساسیت و .. می توانند در شکل FSR تاثر بگذارند. اکثر سنسورهای نیرو در قالب دایره یا مستطیل ساخته می شوند:
- FSR مربعی: این مدل از مقاومت های سنجش نیرو برای محاسبه فشار به صورت وسیع تر مناسب هستند.
- FSR دایره ای: از مدل دایره ای برای سنجش فشار با دقت بالاتر استفاده می شود.
محدوده حساسیت مقاومت FSR نسبت به فشار
هر چه نسب نیروی کمتری وارد شود میزان حساسیت FSR بیشتر خواهد بود. باید توجه داشته باشد که اگر از مقدار ماکزیمم تعیین شده برای سنسور، فشار بیشتری وارد کنید سنجش نیرو انجام نمی شود و ممکن است FSR بسوزد!
به عنوان مثال : اگر یک مقاومت سنجش نیرو برای بازه 0 تا 1 کیلوگرم ساخته شده باشد، نمی توانید وزنی در بازه 2 تا 5 کیلوگرم وارد کنید.
نحوه عملکرد FSR
همانطور که در ابتدای مقاله ذکر شد، FSR به طور کلی یک مقاومت است که بسته به مقدار تغییر فشار، تغییر می کند.
زمانی که فشاری وارد نشود، سنسور مقاومت بی نهایت را نشان می دهد.( مدار باز است ) به محض اینکه فشاری به سر نمودار وارد کنید، مقاومت در مسیر و محدوده تغییرات به سمت کاهش نزول می کند و وقتی که فشار را بر می دارد به مقدار قبلی بازگشت می کند.
در نمودار زیر تغییرات مقاومت بر حسب نیروی وارده نشان داده شده است:
نکته مهم : توجه داشته باشید که نمودار به طور کلی برای وزن بالای 50 گرم خطی می شود؛ بدین معنی که هر زمان سنسور را تحت فشار قرار دهیم، مقاومت آن به سرعت از بی نهایت به 100 کیلو اهم کاهش می یابد.
نحوه خواندن سنسور FSR
یک روش آسان به جهت خواندن FSR، اتصال FSR به یک مقاومت 10 کیلو اهمی ثابت برای ایجاد تقسیم ولتاژ است. برای اتصال به صورتی که یک سر FSR را به پاور و سر دیگر را به مقاومت pull-down عمل کنید. سپس نقطه بین مقدار ثابت مقاومت pull-down و مقاومت متغیر FSR را به ورودی ADC یک Arduino متصل کنید.
این روشی برای ایجاد ولتاژ خروجی به صورت متغیر است که توسط ورودی ADC میکروکنترلر قابل خواندن می باشد.
در شکل زیر مدار تقسیم ولتاژ را مشاهده کنید:
- خروجی تقسیم ولتاژ با معادله زیر محاسبه می شود:
- ولتاژ خروجی با افزایش نیرو افزایش می یابد. به عنوان مثال با منبع تغذیه 5ولتی و مقاومت 10کیلو اهمی pull-down، زمانی که مقدار فشار وارده 0 باشد؛ مقاومت FSR بسیار بالا (حدود 10 مگااهم) است:
- اگر FSR را مقدار زیادی فشار دهید، مقاومت تقریباً تا 250 اهم پایین می آید :
- همانطور که طبق محاسبات بالا متوجه شدید، ولتاژ خروجی بین 0 تا 5 ولت متغیر است و تنها وابسته به مقدار نیرویی است که وارد می شود.
در جدول زیر ولتاژ تقریبی آنالوگ را بر اساس نیروی وارد به سنسور FSR402 با مقاومت pull-down به ظرفیت 10کیلو اهمی و منبع تغذیه 5 ولتی مشاهده می کنید:
ولتاژ مقاومت ثابت R | مقاومت FSR | نیرو ( نیوتن N ) | نیرو ( پوند lb ) |
0V | بی نهایت | بدون نیرو | بدون نیرو |
1.3V | 30KΩ | 0.2N | 0.04lb |
3.1V | 6KΩ | 1N | 0.22lb |
4.5V | 1KΩ | 10N | 2.2lb |
4.9V | 250Ω | 100N | 22lb |
وایرینگ سنسور FSR402 به Arduino UNO
اتصال مقاومت نیروسنج به برد آردوینو به سادگی صورت می پذیرد. طبق مدار شماتیک زیر باید یک مقاومت 10 کیلو اهمی pull-down به صورت سری با FSR برای تقسیم ولتاژ مدار، ببندید. پس از آن نقطه بین مقاومت pull-down و FSR به ورودی A0 ADC یک arduino متصل شود.
شرح کد
به عنوان اولین تجربه راه اندازی سنسور FSR با برد آردوینو، دیتا را از پین ADC آردوینو خوانده شده و سپس خروجی در مانیتور سریال نمایش داده می شود. کد زیر را کپی و در آردوینو آپلود کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
int fsrPin = 0; // the FSR and 10K pulldown are connected to a0 int fsrReading; // the analog reading from the FSR resistor divider void setup(void) { Serial.begin(9600); } void loop(void) { fsrReading = analogRead(fsrPin); Serial.print("Analog reading = "); Serial.print(fsrReading); // print the raw analog reading if (fsrReading < 10) { Serial.println(" - No pressure"); } else if (fsrReading < 200) { Serial.println(" - Light touch"); } else if (fsrReading < 500) { Serial.println(" - Light squeeze"); } else if (fsrReading < 800) { Serial.println(" - Medium squeeze"); } else { Serial.println(" - Big squeeze"); } delay(1000); } |
اگر قدم به قدم با این آموزش همراه بودید، خروجی زیر در مانیتور سریال مشاهده خواهد شد:
شرح جزئیات کدنویسی
- با راه اندازی برد آردوینو که مقاومت 10 کیلو اهمی pull-down و FSR به آن متصل است، طرح شروع به کار می کند. متغیر fsrReading را به عنوان متغیری که آنالوگ خام خوانده شده از FSR را نگه می دارد، تعریف کنید:
1 2 |
int fsrPin = 0; int fsrReading; |
- در عملگر setup ، ارتباط سریال با PC را شروع می کنیم:
1 2 3 |
void setup(void) { Serial.begin(9600); } |
- عملگر loop، خواندن آنالوگ را از تقسیم مقاومت FSR گرفته و بر مانیتور سریال نمایش می دهد. همانطور که در قسمت های قبل این آموزش گفتیم، مقدار ولتاژ خروجی سنسور بین 0 (فشاری وارد نشده) و حدوداً 5 ولت (ماکزیمم فشار وارده) است. وقتی که آردوینو ولتاژ آنالوگ را به دیجیتال تبدیل می کند، در واقع آن را به عددی 10 بیتی بین 0 تا 1023 تبدیل کرده و نتیجتاً بسته به فشار وارده مقداری بین 0 تا 1023 را بر مانیتور سریال مشاهده خواهید کرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
fsrReading = analogRead(fsrPin); Serial.print("Analog reading = "); Serial.print(fsrReading); Finally, we print the amount of pressure measured qualitatively. if (fsrReading < 10) { Serial.println(" - No pressure"); } else if (fsrReading < 200) { Serial.println(" - Light touch"); } else if (fsrReading < 500) { Serial.println(" - Light squeeze"); } else if (fsrReading < 800) { Serial.println(" - Medium squeeze"); } else { Serial.println(" - Big squeeze"); } |
اندازه گیری پیشرفته آنالوگ FSR
مدل بعدی آردوینو پیشرفته است. به طوری که مقدار تقریبی نیرو نیوتن را توسط FSR اندازه گیری می کند، که روشی مناسب برای کالیبراسیون نیروهایی که FSR ممکن است تحت تاثیر آنها قرار گیرد، می باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
int fsrPin = 0; // the FSR and 10K pulldown are connected to a0 int fsrReading; // the analog reading from the FSR resistor divider int fsrVoltage; // the analog reading converted to voltage unsigned long fsrResistance; // The voltage converted to resistance unsigned long fsrConductance; long fsrForce; // Finally, the resistance converted to force void setup(void) { Serial.begin(9600); // We'll send debugging information via the Serial monitor } void loop(void) { fsrReading = analogRead(fsrPin); Serial.print("Analog reading = "); Serial.println(fsrReading); // analog voltage reading ranges from about 0 to 1023 which maps to 0V to 5V (= 5000mV) fsrVoltage = map(fsrReading, 0, 1023, 0, 5000); Serial.print("Voltage reading in mV = "); Serial.println(fsrVoltage); if (fsrVoltage == 0) { Serial.println("No pressure"); } else { // The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V // so FSR = ((Vcc - V) * R) / V yay math! fsrResistance = 5000 - fsrVoltage; // fsrVoltage is in millivolts so 5V = 5000mV fsrResistance *= 10000; // 10K resistor fsrResistance /= fsrVoltage; Serial.print("FSR resistance in ohms = "); Serial.println(fsrResistance); fsrConductance = 1000000; // we measure in micromhos so fsrConductance /= fsrResistance; Serial.print("Conductance in microMhos: "); Serial.println(fsrConductance); // Use the two FSR guide graphs to approximate the force if (fsrConductance <= 1000) { fsrForce = fsrConductance / 80; Serial.print("Force in Newtons: "); Serial.println(fsrForce); } else { fsrForce = fsrConductance - 1000; fsrForce /= 30; Serial.print("Force in Newtons: "); Serial.println(fsrForce); } } Serial.println("--------------------"); delay(1000); } |
- خروجی در مانیتور سریال به صورت زیر می باشد:
امیدوارم که این آموزش برای شما مفید واقع شده باشد. برای آموزش سنسورهای بیشتر با مجموعه آموزش های مخترع شوید در سایت ایوینک همراه باشید.🙂
در قسمت نظرات ایده ها و پیشنهادات خلاقانه خود را با ما به اشتراک بگذارید.