مقاومت حسگر نیرو، با نام مقاومت حساس به نیرو، سنسور نیرو یا سنسور FSR شناخته میشود. اما چگونه میتوانیم آن را با آردوینو راه اندازی کنیم؟ در این مقاله همراه ما باشید تا نحوه راه اندازی مقاومت حساس به نیرو با آردوینو را یاد بگیرید.
مقاومت حساس به نیرو که به طور ویژه برای تشخیص فشار، نیرو و وزن طراحی شده، ارزان قیمت است و بهراحتی قابل استفاده میباشد. اما شاید این سوال برای شما پیش بیاید که از این مقاومت در چه جاهایی استفاده میشود.
در جواب به این سوال باید گفت که از این مقاومت در طبلهای الکترونیکی، گوشیهای موبایل، بازیهای دستی و بسیاری از تجهیزات الکترونیکی قابل حمل میتوان استفاده کرد.
با وجود اینکه این سنسورها برای اندازهگیری فشار به کار میروند، اما برای محاسبه مقدار وزنی که برحسب پوند بر روی آنها قرار دارد، مناسب نیستند. با این حال، اگر میخواهید بدانید که آیا سنسور شما تحت فشار قرار دارد یا نه، یا میخواهید بفهمید که به چه مقدار تحت فشار است؟ این سنسور میتواند گزینهی مناسبی برای پروژه شما باشد. در ادامه بیشتر با این سنسور آشنا خواهید شد.
مروری بر سنسور FSR
تکنولوژی مورد استفاده در FSRها توسط شرکت Interlink Electronics که از سال 1985 شروع به فعالیت کرده، اختراع و ثبت شده است. متداولترین نوع FSRها که به آسانی میتوانید آنها را پیدا و تهیه کنید، سنسور سنجش فشار مقاومتی FSR-402 و FSR-406 از شرکت Interlink است.
ساختار مقاومت حساس به نیرو
FSR، یک مقاومت متغیر است که با اعمال فشار به سطح سنسور، مقاومت آن تغییر میکند. این سنسور، از چند لایهی نازک انعطافپذیر ساخته شده است. هر چه فشار بیشتری به سنسور وارد شود، عناصر کربنی غیرهادی، بیشتر در تماس با ترکهای هادی قرار میگیرند و این امر منجر به کاهش مقاومت میشود.
شکل و اندازه مقاومت حساس به نیرو
سنسور FSR، انواع مختلفی دارد، بهطوری که مشخصههای کلیدی از جمله شکل، اندازه و محدودهی سنجش، این سنسورها را از هم متمایز ساخته است. اکثر سنسورهای FSR، ناحیهی حسگر مدور یا مستطیلی شکل دارند. سنسورهای مربعی شکل برای سنجش سطوح وسیع مناسب هستند، درحالیکه سنسورهای مدور کوچک دقت بالاتری دارند.
محدودهی سنجش مقاومت حساس به نیرو
مشخصه کلیدی دیگر مقاومت حساس به نیرو ، محدودهی سنجش مجاز آن است. این مشخصه، حداقل و حداکثر فشاری را که سنسور میتواند در آن محدوده حس نماید، مشخص میکند. هر چه میزان تغییرات نیرو کمتر باشد، FSR حساستر خواهد بود. فشارهای بیشتر از ماکزیمم فشار در محدودهی سنجش سنسور، غیر قابل اندازهگیری است (و حتی میتواند به سنسور آسیب برساند). به عنوان مثال، FSR کمتر از 1Kg میتواند دادههای حساستری از 0 تا 1Kg ارائه دهد، اما قادر به نشان دادن اختلاف وزن بین 2Kg و 5Kg نیست.
مقاومت حساس به نیرو چگونه کار میکند؟
همانطور که گفتیم، FSR مقاومتی است که مقدار آن بسته به این که چه اندازه تحت فشار قرار میگیرد، تغییر میکند.
زمانیکه فشاری به سنسور وارد نکنید، سنسور مانند یک مقاومت بینهایت (مدار باز) عمل میکند. هر چه فشار بیشتری به سنسور وارد کنید، مقاومت کمتری بین ترمینالهای سنسور ایجاد خواهد شد. اما وقتی فشار را حذف کنید، مقاومت نیز به مقدار اولیه خود باز خواهد گشت.
در نمودار زیر میتوانید مقاومت سنسور FSR402 را به ازای اعمال نیروهای مختلف مشاهده کنید. به این نکته دقت داشته باشید که دادهها در مقیاس لگاریتم رسم شدهاند.
همانطور که میبینید نمودار برای نیروهای 50g و بیشتر خطی است، اما برای مقادیر کمتر از 50g، این چنین نیست. این موضوع به این معنا است که با اعمال فشار، مقاومت سنسور به سرعت از بینهایت به 100K کاهش مییابد و سپس خطیتر میشود.
خواندن سنسور FSR
سادهترین راه برای خواندن FSR این است که آن را به یک مقاومت با مقدار ثابت (معمولا 10 کیلواهم) متصل کنید تا یک تقسیم کنندهی ولتاژ به وجود بیاد. برای این کار، یک سر FSR را به تغذیه و سر دیگر آن را به مقاومتی که pull down شده است، متصل کنید. سپس محل بین مقاومت pull down شده و مقاومت متغیر FSR را به ورودی ADC یک آردوینو متصل نمایید.
به این ترتیب، شما میتوانید یک خروجی ولتاژ متغیر که با ورودی ADC میکروکنترلر قابل خواندن است، ایجاد کنید.
به این نکته توجه کنید که ولتاژ خروجی اندازهگیری شده، افت ولتاژ دو سر مقاومت pull down شده است، نه مقاومت FSR. خروجی تقسیم کنندهی ولتاژ با استفاده از رابطه زیر محاسبه میشود:
همانطورکه در رابطهی بالا میبینید، با افزایش نیرو، ولتاژ خروجی افزایش مییابد. برای مثال، با تغذیهی 5 ولت و مقاوت pull down شدهی 10 کیلواهم، در صورتیکه فشاری وارد نشود، مقاومت FSR بسیار زیاد است (حدود 10MΩ). این باعث ایجاد ولتاژ خروجی میشود که از طریق رابطهی زیر به دست آمده است:
اگر فشار بسیار زیادی به FSR وارد کنید، میزان مقاومت به حدود 250Ω کاهش پیدا میکند. در نتیجه ولتاژ خروجی زیر به دست میآید:
همانطورکه مشاهده میکنید، ولتاژ خروجی بسته به مقدار نیروی اعمال شده به سنسور، از 0V تا 5V متغیر است.
جدول زیر ولتاژ آنالوگ تقریبی براساس نیرو یا مقاومت سنسور را با تغذیه 5V و مقاومت pull down شده 10K نشان میدهد.
Voltage across R | FSR Resistance | Force (N) | Force (lb) |
0V | Infinite | None | None |
1.3V | 30KΩ | 0.2N | 0.04lb |
3.1V | 6KΩ | 1N | 0.22lb |
4.5V | 1KΩ | 10N | 2.2lb |
4.9V | 250Ω | 100N | 22lb |
سیمکشی – راه اندازی مقاومت حساس به نیرو با آردوینو
راه اندازی سنسور FSR با آردوینو بسیار ساده است. قطعات لازم برای این کار عبارتاند از:
- مقاومت حساس به نیرو FSR
- مقاومت 10K یک و چهاردهم وات
- سیم برد بوردی دسته 65 تایی
- برد بورد 840 سوراخ
- ماژول آردوینو UNO
برای این کار باید یک مقاومت 10 کیلواهم pull down شده را بهصورت سری به سنسور FSR متصل کنید تا یک مدار تقسیم کنندهی ولتاژ به دست آید. سپس، محل بین مقاومت pull down شده و مقاومت FSR را به پایه A0 (ورودی ADC) آردوینو متصل کنید.
نکته:
توجه کنید FSRها اساسا مقاومت هستند. یعنی میتوانید آنها را به هر روشی متصل کنید و باز هم انتظار عملکرد خوبی از آنها داشته باشید.
در ادامه، دو پروژه برای شما در نظر گرفتهایم تا راه اندازی مقاومت حساس به نیرو با آردوینو را به طور کامل یاد بگیرید. پس همراه ما باشید.
کد آردوینو – اندازهگیری ساده سنسور FSR آنالوگ
در پروژه اول، داده سنسور را از پایه ADC آردوینو میخوانیم و خروجی را بر روی سریال مانیتور نمایش میدهیم. کدهای که برای این پروژه ارائه کردهایم، بسیار ساده هستند. این دستورات تنها آنچه را که به طور کیفی به عنوان مقدار فشار مشخص میشود، چاپ میکنند. برای اکثر پروژهها، این دستورات کفایت میکند.
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);
}
اگر همه چیز به درستی انجام شده باشد، باید خروجی زیر را در سریال مانیتور مشاهده کنید:
توضیحات کد:
و اما نوبت بررسی دستورات بالا است.
این دستورات با معرفی پایهی آردوینو که به مقاومت pull down شدهی 10kΩ و سنسور FSR متصل شده است، آغاز میشود. علاوه بر این، در اینجا متغیر fsrReading
را نیز برای خواندن داده خام آنالوگ از FSR تعریف میکنیم.
int fsrPin = 0;
int fsrReading;
در تابع setup، ارتباط سریال با PC را مقداردهی میکنیم.
void setup(void) {
Serial.begin(9600);
}
در تابع loop، دادهی آنالوگ را از مقاومت FSR دریافت میکنیم و بر روی سریال مانیتور نمایش میدهیم.
همانطور که قبلا گفتیم، مقدار ولتاژ خروجی سنسور بین 0 ولت (بدون اعمال فشار) و تقریبا 5 ولت (با اعمال ماکزیمم فشار ) است. زمانیکه آردوینو این ولتاژ آنالوگ را به دیجیتال تبدیل میکند، در واقع آن را به یک عدد 10 بیتی بین 0 تا 1023 تبدیل میکند. بنابراین آنچه در سریال مانیتور میبینید بسته به مقدار فشار وارد شده به سنسور، مقداری بین 0 تا 1023 خواهد بود.
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 وارد می شود، میتواند مفید باشد.
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);
}
پس از آپلود دستورات بالا، خروجی آن در سریال مانیتور بهصورت زیر خواهد شد:
سخن پایانی
در این مقاله هدف ما این بود که شما با مقاومت حساس به نیرو یا همان سنسور FSR و نحوه راه اندازی آن با آردوینو آشنا بشید. امیدواریم که بتوانید همراه این مقاله دو پروژه ارائه شده را بهخوبی انجام دهید و به تجربیات خود اضافه کنید.
البته کسب تجربه کافی نیاز به تمرین بسیاری دارد، به همین دلیل میتوانید علاوه بر این پروژه، سایر پروژههای وبلاگ ما را انجام دهید و سوالات خود را با ما مطرح کنید.
۲ دیدگاه. Leave new
سلام.من به تازگی با سایت شما آشنا شدم.مطالب بسیار زیاد و آموزنده ای در سایتتون موجود هست.مقالات در مورد راه اندازی ماژول ها بسیار جالب و آموزنده است.
میخواستم بدونم که آیا همین مطالب و مقالات رو میشه به زبان سی پلاس و با برنامه کدویژن آموزش بدید.
اگر این کار رو بکنید سایتتون واقعا بی نظیر میشه.و از همه لحاظ تکمیله.
سلام عباس عزیز،
ممنون از شما که ما رو همراهی میکنی و به ما لطف داری
در آینده مقالات مختلفی رو در نظر داریم مثل آموزش AVR که امیدواریم مورد پسند باشه.