در پست آموزشی سعی داریم در ابتدا سنسور خمش را معرفی کنیم و سپس نحوه اتصال آن به آردوینو را شرح دهیم. این راهنما از مجموعه آموزش های مخترع شوید، می باشد.
معرفی سنسور bending
طراحی سنسور خمش بر اساس اندازه گیری مقدار خیز یا خم است. در حقیقت این سنسور, یک مقاومت متغیر است که بسته به خمیدگی که در آن ایجاد می شود. مقادیر مختلفی را می تواند اندازه گیری می کند. از آن جایی که مقاومت به طور مستقیم با میزان خمیدگی در ارتباط است به آن پتانسیومتر انعطاف پذیر می گویند.
به طور معمول خمش در دو اندازه ساخته می شوند:
- 2.2 اینچ (5.588 سانتی متر)
- 4.5 اینچ (11.43 سانتی متر)
کاربرد
در دهه 90 میلادی استفاده از سنسور خمش در دستکش هوشمند نینتندو به عنوان رابط بازی، معروف شد. از آن زمان به عنوان گونیامتر برای شناسایی حرکت مفصل، سنسور درب،رابط های کامپیتوری، رابط آلات موسیقی،سیستم های امنیتی سوئیچ سپر برای دیوار یا سنسور فشار در رباتیک استفاده شد. می توان در شاخه مهندسی پزشکی و علوم مکانیکی کاربرد وسیعی دارد .
شرح ساختار سنسور خمش
تشکیل شده از: یک لایه رزین فنولیک یا رزین فنول فرمالدهید که روی آن جوهر رسانا به صورت یک نوار قرار دارد و در نهایت یک رسانای چند بخشی بر روی آنها قرار می گیرد تا یک پتانسیومتر انعطاف پذیر تشکیل دهد که مقدار مقاومت به محض ایجاد خمش یا انحراف تغییر کند. جزئیات ساختار فیزیکی سنسور خمش را در شکل زیر مشاهده می کنید:
سنسور خمش در چه جهتی خم می شود؟
طراحی سنسورهای فلکس به گونه ای است که تنها در یک جهت خم می شوند.
نکته 1 : زمانی که در جهت مشخص سنسور را خم می کنید مراقب باشید که محل اعمال خم از جوهر رسانا به دور باشد.
نکته 2 : در قسمتی از سنسور که پین ها متصل می شوند، خم را اعمال نکنید، این قسمت بسیار شکننده و آسیب پذیر است!
نکته 3 : اگر در جهتی به غیر از جهت تعیین شده در طراحی سنسور، خم را اعمال کنید سنسور آسیب میبیند.
عملکرد
باید توجه داشته باشید که جوهر رسانا روی سنسور مانند یک مقاومت عمل می کند. هنگامیکه سنسور در حالت مستقیم (تحت زاویه °0) قرار داشته باشد، مقدار مقاومت 25 کیلو اهم است.
با خم شدن سنسور لایه رسانا کشیده شده و در نتیجه سطح مقطع کاهش پیدا می کند و سطح مقطع کاهش یافه منجر به افزایش مقدار مقاومت می شود. به طوریکه در زاویه °90 مقاومت 100 کیلو اهم است. به محض برگشت سنسور به حالت °0، مقاومت نیز به مقدار اصلی برمی گردد.
خواندن و دریافت داده از سنسور خمش
یک راه آسان برای خواندن؛ اتصال آن به یک مقاومت با مقدار ثابت است (غالباً 47 کیلو اهم) که نتیجتاً یک تقسیم ولتاژ ایجاد می شود. برای بستن این مدار ابتدا باید یکی از دو سر انتهایی سنسور را به پاور و سر دیگر را به یک مقاوت pull-down، متصل کنید و سپس نقطه مابین مقاومت ثابت pull-down و سنسور خمش را به پین ورودی ADC برد آردوینو وصل کنید.
- ولتاژ خروجی را می توانید با معادله زیر محاسبه کنید :
مثال : اگر در رابطه بالا ولتاژ تغذیه را 5V و مقاومت pull-down را 47K قرار دهیم،با در نظر گرفتن حالت مسطح (°0)؛مقدار مقاومت حاصل به نسبت کم می باشد(حدود25 کیلو اهم) ولتاژ خروجی به صورت زیر حساب می شود:
- اگر در سنسور با موقعیت °90 خم شده باشد، مقاومت pull-down را 100K در نظر بگیریم؛ مقدار ولتاژ خروجی به صورت زیر محاسبه می شود:
وایرینگ
قبل از شروع اتصال اگر آشنایی کافی با آردوینو ندارید به لینک های زیر مراجعه کنید:
برای اتصال این سنسور به آردوینو ابتدا باید مقاومت 47 کیلو اهمی pull-down را به صورت سری با سنسور خمش بر روی برد بورد ببندید تا مدار تقسیم ولتاژ ایجاد شود. سپس نقطه ای بین مقاومت pull-down و حسگر خمش به ورودی A0 ADC آردوینو متصل شود.
تمامی قطعات الکترونیکی خود را می توانید از فروشگاه ایوینک تهیه کنید.
شرح کدنویسی
- در اینجا برای توضیح نحوه کد نویسی در آردوینو یک مدل طرح شده داریم، که دیتا سنسور را از پین Arduino’s 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 27 28 29 |
</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const int flexPin = A0; // Pin connected to voltage divider output</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">// Change these constants according to your project's design</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const float VCC = 5; // voltage at Ardunio 5V line</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const float R_DIV = 47000.0; // resistor used to create a voltage divider</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const float flatResistance = 25000.0; // resistance when flat</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const float bendResistance = 100000.0; // resistance at 90 deg</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">void setup() {</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">Serial.begin(9600);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">pinMode(flexPin, INPUT);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">}</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">void loop() {</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">// Read the ADC, and calculate voltage and resistance from it</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">int ADCflex = analogRead(flexPin);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">float Vflex = ADCflex * VCC / 1023.0;</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">float Rflex = R_DIV * (VCC / Vflex - 1.0);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">Serial.println("Resistance: " + String(Rflex) + " ohms");</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">// Use the calculated resistance to estimate the sensor's bend angle:</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">Serial.println("Bend: " + String(angle) + " degrees");</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">Serial.println();</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">delay(500);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">}</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;"> |
- پس از کپی و آپلود کد، با اعمال خمیدگی به سنسور تغییرات مقاومت resistance و زاویه خم بر مانیتور سریال نمایش داده می شود:
شرح جزئیات کدنویسی
- طرح با راه اندازی پین آردوینو که سنسور خمش و مقاومت 47K pulldown به آن متصل هستند. اجرا می شود.
1 2 3 |
</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const int flexPin = A0;</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;"> |
- ثابت VCC(ولتاژ سیستم) و R_DIV(مقاومتی که برای تقسیم ولتاژ استفاده شد) را تعریف کنید. flatResistance و bendResistance مقاومت سنسور خمش در دو حالت مسطح °0 و °90 هستند.
1 2 3 4 5 6 |
</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const float VCC = 5;</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const float R_DIV = 47000.0;</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const float flatResistance = 25000.0;</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">const float bendResistance = 100000.0;</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;"> |
- در عملگر setup ، ارتباط سریالی با PC شروع می شود. flexPin را به عنوان INPUT ست کنید:
1 2 3 4 5 6 |
</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">void setup() {</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">Serial.begin(9600);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">pinMode(flexPin, INPUT);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">}</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;"> |
- در عملگر loop، ابتدا خواندن از پین ADC را می گیریم:
1 2 3 |
</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">int ADCflex = analogRead(flexPin);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;"> |
- هنگامیکه آردوینو ولتاژ آنالوگ را به دیجیتال تبدیل می کند در واقع آنرا به عددی 10 بیتی در محدوده 0 تا 1023 تبدیل می کند. بنابراین اندازه گیری مقدار واقعی ولتاژ از دستور زیر استفاده کنید:
1 2 3 |
</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">float Vflex = ADCflex * VCC / 1023.0;</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;"> |
- اکنون مقاومت حاصل از سنسور را توسط فرمول بدست آمده از تقسیم کننده ولتاژ و داده های نمایش داده شده بر مانیتور سریال، محاسبه کنید:
1 2 3 4 |
</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">float Rflex = R_DIV * (VCC / Vflex - 1.0);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">Serial.println("Resistance: " + String(Rflex) + " ohms");</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;"> |
نکات پایانی
سرانجام از مقاومت محاسبه شده برای تخمین زاویه خم سنسور استفاده کنید. با استفاده از عملگر ()map که ساخته شده در IDE است، می توانید این زاویه را تخمین بزنید. ()map مقاومت سنسور را به زاویه خم سنسور تبدیل می کند.
1 2 3 4 5 |
</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0);</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">Serial.println("Bend: " + String(angle) + " degrees");</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;">Serial.println();</span> <span style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 14pt;"> |