آموزش راه اندازی مقاومت حساس به نیرو با آردوینو

آموزش راه اندازی مقاومت حساس به نیرو با آردوینو

مقاومت‌‌ حسگر نیرو، با نام مقاومت‌ حساس به نیرو، سنسور نیرو یا سنسور FSR شناخته می‌شود. اما چگونه می‌توانیم آن را با آردوینو راه اندازی کنیم؟ در این مقاله همراه ما باشید تا نحوه راه اندازی مقاومت حساس به نیرو با آردوینو را یاد بگیرید.

مقاومت حساس به نیرو که به طور ویژه برای تشخیص فشار، نیرو و وزن طراحی شده، ارزان قیمت است‌ و به‌راحتی قابل استفاده می‌باشد. اما شاید این سوال برای شما پیش بیاید که از این مقاومت در چه جاهایی استفاده می‌شود.

در جواب به این سوال باید گفت که از این مقاومت در طبل‌های الکترونیکی، گوشی‌های موبایل، بازی‌های دستی و بسیاری از تجهیزات الکترونیکی قابل حمل می‌توان استفاده کرد.

با وجود اینکه این سنسورها برای اندازه‌گیری فشار به کار می‌روند، اما برای محاسبه مقدار وزنی که برحسب پوند بر روی آن‌ها قرار دارد، مناسب نیستند. با این حال، اگر می‌خواهید بدانید که آیا سنسور شما تحت فشار قرار دارد یا نه، یا می‌خواهید بفهمید که به چه مقدار تحت فشار است؟ این سنسور می‌تواند گزینه‌ی مناسبی برای پروژه شما باشد. در ادامه بیشتر با این سنسور آشنا خواهید شد.

مروری بر سنسور FSR

تکنولوژی مورد استفاده در FSRها توسط شرکت Interlink Electronics که از سال 1985 شروع به فعالیت کرده، اختراع و ثبت شده است. متداول‌ترین نوع FSRها که به آسانی می‌توانید آن‌ها را پیدا و تهیه کنید، سنسور سنجش فشار مقاومتی FSR-402  و FSR-406  از شرکت Interlink است.

ساختار مقاومت حساس به نیرو

FSR، یک مقاومت متغیر است که با اعمال فشار به سطح سنسور، مقاومت آن تغییر می‌کند. این سنسور، از چند لایه‌ی نازک انعطاف‌پذیر ساخته شده است. هر چه فشار بیشتری به سنسور وارد شود، عناصر کربنی غیرهادی، بیشتر در تماس با ترک‌های هادی قرار می‌گیرند و این امر منجر به کاهش مقاومت می‌شود.

لایه‌های نازک و انعطاف پذیر مقاومت حساس به نیرو

لایه پوشاننده، مسیرهای نقر‌ه‌ای هادی، المنت مقاومتی از جنس کربن، لایه پلی یورتان ترموپلاستیک (TPU)

شکل و اندازه مقاومت حساس به نیرو

سنسور FSR، انواع مختلفی دارد، به‌طوری که مشخصه‌های کلیدی از جمله شکل، اندازه و محدوده‌ی سنجش، این سنسورها را از هم متمایز ساخته است. اکثر سنسورهای FSR، ناحیه‌ی حسگر مدور یا مستطیلی شکل دارند. سنسورهای مربعی شکل برای سنجش سطوح وسیع مناسب هستند، درحالی‌که سنسورهای مدور کوچک دقت بالاتری دارند.

مقاومت حساس به نیرو مدور و مربعی

محدوده‌ی سنجش مقاومت حساس به نیرو

مشخصه کلیدی دیگر مقاومت حساس به نیرو ، محدوده‌ی سنجش مجاز آن است. این مشخصه، حداقل و حداکثر فشاری را که سنسور می‌تواند در آن محدوده حس نماید، مشخص می‌کند. هر چه میزان تغییرات نیرو کمتر باشد، FSR حساس‌تر خواهد بود. فشارهای بیشتر از ماکزیمم فشار در محدوده‌ی سنجش سنسور، غیر قابل اندازه‌گیری است (و حتی می‌تواند به سنسور آسیب برساند). به عنوان مثال، FSR کمتر از 1Kg می‌تواند داده‌های حساس‌تری از 0 تا 1Kg ارائه دهد، اما قادر به نشان دادن اختلاف وزن بین 2Kg  و 5Kg نیست.

مقاومت حساس به نیرو چگونه کار می‌کند؟

همان‌طور که گفتیم، FSR مقاومتی است که مقدار آن بسته به این که چه اندازه تحت فشار قرار می‌گیرد، تغییر می‌کند.


تغییر مقاومت سنسور FSR با توجه به میزان فشار وارد شده بر آن

زمانی‌که فشاری به سنسور وارد نکنید، سنسور مانند یک مقاومت بی‌نهایت (مدار باز) عمل می‌کند. هر چه فشار بیشتری به سنسور وارد کنید، مقاومت کمتری بین ترمینال‌های سنسور ایجاد خواهد شد. اما وقتی‌ فشار را حذف کنید، مقاومت نیز به مقدار اولیه خود باز خواهد گشت.

در نمودار زیر می‌توانید مقاومت سنسور FSR402 را به ازای اعمال نیروهای مختلف مشاهده کنید. به این نکته دقت داشته باشید که داده‌ها در مقیاس لگاریتم رسم شده‌اند.

نمودار میزان مقاومت سنسور به ازای اعمال نیروهای مختلف

همان‌طور که می‌بینید نمودار برای نیروهای 50g و بیشتر خطی است، اما برای مقادیر کمتر از 50g، این چنین نیست. این موضوع به این معنا است که با اعمال فشار، مقاومت سنسور به سرعت از بی‌نهایت به 100K کاهش می‌یابد و سپس خطی‌تر می‌شود.

خواندن سنسور FSR

ساده‌ترین راه برای خواندن FSR این است که آن را به یک مقاومت با مقدار ثابت (معمولا 10 کیلواهم) متصل کنید تا یک تقسیم کننده‌ی ولتاژ به وجود بیاد. برای این کار، یک سر FSR را به تغذیه و سر دیگر آن را به مقاومتی که pull down شده است، متصل کنید. سپس محل بین مقاومت pull down شده و مقاومت متغیر FSR را به ورودی ADC یک آردوینو متصل نمایید.

به این ترتیب، شما می‌توانید یک خروجی ولتاژ متغیر که با ورودی ADC میکروکنترلر قابل خواندن است، ایجاد کنید.

ایجاد تقسیم کننده‌ی ولتاژ برای خواندن مقاومت حساس به نیرو با اتصال آن به مقاومت 10 کیلواهم

به این نکته توجه کنید که ولتاژ خروجی اندازه‌گیری شده، افت ولتاژ دو سر مقاومت pull down شده است، نه مقاومت FSR. خروجی تقسیم کننده‌ی ولتاژ با استفاده از رابطه زیر محاسبه می‌شود:

فرمول خروجی تقسیم کننده ولتاژ

همان‌طورکه در رابطه‌ی بالا می‌بینید، با افزایش نیرو، ولتاژ خروجی افزایش می‌یابد. برای مثال، با تغذیه‌ی 5 ولت و مقاوت pull down شده‌ی 10 کیلواهم، در صورتی‌که فشاری وارد نشود، مقاومت FSR بسیار زیاد است (حدود 10MΩ). این باعث ایجاد ولتاژ خروجی می‌شود که از طریق رابطه‌ی زیر به دست آمده است:

فرمول محاسبه ولتاژ خروجی ایجاد شده پس از اتصال مقاومت pull down شده 10 کیلواهم به سنسور FSR

اگر فشار بسیار زیادی به FSR وارد کنید، میزان مقاومت به حدود 250Ω کاهش پیدا می‌کند. در نتیجه ولتاژ خروجی زیر به دست می‌آید:

فرمول محاسبه ولتاژ خروجی پس از وارد کردن فشار زیاد به سنسور و کاهش میزان مقاومت به حدود 250 Ω

همان‌طورکه مشاهده می‌کنید، ولتاژ خروجی بسته به مقدار نیروی اعمال شده به سنسور، از 0V تا 5V متغیر است.

جدول زیر ولتاژ آنالوگ تقریبی براساس نیرو یا مقاومت سنسور را با تغذیه 5V و مقاومت pull down شده 10K نشان می‌دهد.

Voltage across RFSR ResistanceForce (N)Force (lb)
0VInfiniteNoneNone
1.3V30KΩ0.2N0.04lb
3.1V6KΩ1N0.22lb
4.5V1KΩ10N2.2lb
4.9V250Ω100N22lb

سیم‌کشی – راه اندازی مقاومت حساس به نیرو با آردوینو

راه اندازی سنسور FSR با آردوینو بسیار ساده است. قطعات لازم برای این کار عبارت‌اند از:

برای این کار باید یک مقاومت 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);
}


اگر همه چیز به درستی انجام شده باشد، باید خروجی زیر را در سریال مانیتور مشاهده کنید:

خروجی کد اندازه‌گیری ساده سنسور FSR آنالوگ بر روی سریال مانیتور

توضیحات کد:

و اما نوبت بررسی دستورات بالا است.

این دستورات با معرفی پایه‌‎ی آردوینو که به مقاومت 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 آنالوگ بر روی سریال مانیتور

سخن پایانی

در این مقاله هدف ما این بود که شما با مقاومت حساس به نیرو یا همان سنسور FSR و نحوه راه اندازی آن با آردوینو آشنا بشید. امیدواریم که بتوانید همراه این مقاله دو پروژه ارائه شده را به‌خوبی انجام دهید و به تجربیات خود اضافه کنید.

البته کسب تجربه کافی نیاز به تمرین بسیاری دارد، به همین دلیل می‌توانید علاوه بر این پروژه، سایر پروژه‌های وبلاگ ما را انجام دهید و سوالات خود را با ما مطرح کنید.

مقالات مشابه

۲ دیدگاه. Leave new

  • سلام.من به تازگی با سایت شما آشنا شدم.مطالب بسیار زیاد و آموزنده ای در سایتتون موجود هست.مقالات در مورد راه اندازی ماژول ها بسیار جالب و آموزنده است.
    میخواستم بدونم که آیا همین مطالب و مقالات رو میشه به زبان سی پلاس و با برنامه کدویژن آموزش بدید.
    اگر این کار رو بکنید سایتتون واقعا بی نظیر میشه.و از همه لحاظ تکمیله.

    پاسخ
    • سلام عباس عزیز،
      ممنون از شما که ما رو همراهی می‌کنی و به ما لطف داری
      در آینده مقالات مختلفی رو در نظر داریم مثل آموزش AVR که امیدواریم مورد پسند باشه.

      پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات