راه اندازی سنسور Flex با میکروکنترلر AVR

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

در این آموزش به راه اندازی سنسور Flex  با میکروکنترلر ATMEGA8 می پردازیم . برای این کار از ADC(مبدل آنالوگ به دیجیتال) 10 بیتی mega8 استفاده می کنیم . واحد ADC در mega8 حداکثر قادر به تحمل  ولتاژ 5 ولت در ورودی خود است.در ادامه با میکرو دیزاینر الکترونیک باشید.

سنسور خمشی چیست ؟

Flex Sensor  یا  سنسور خمشی یک ترانسدیوسر است که با تغییر پیدا کردن شکل آن مقاومت دو سر آن نیز تغییر می کند . تصویر آن را در زیر می بینید.

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

از این سنسور برای تشخیص تغییرات در خطی بودن استفاده می شود . بنابراین وقتی سنسور خم می شود مقاومت آن به شدت بالا می رود که در تصویر زیر نشان داده شده است :

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

اکنون برای تبدیل این تغییرات مقاومت به تغییرات ولتاژ از یک مدار تقسیم مقاومتی استفاده می کنیم . در این شبکه ی مقاومتی یک مقاومت ثابت و یک مقاومت متغییر داریم .با توجه به تصور زیر R1 در اینجا مقاومت ثابت و R2 سنسور خمشی است که به عنوان یک مقاومت متغییر عمل می کند . ولتاژ گره میانی این شبکه اندازه گیری می شود . با تغییر مقدار مقاومت R2 این ولتاژ نیز به طور خطی تغییر می کند . بنابراین ما یک ولتاژ داریم که با میزان خطی بودن تغییر می کند.

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

اکنون نکته ی مهمی که باید به آن توجه کنیم این است که ADC میکروکنترلر برای اندازه گیری ولتاژ ورودی جریانی در حدود 50میکروآمپر از آن میکشد. این اثر بارگذاری در یک مقسم ولتاژ مقاومتی اهمیت دارد زیرا با افزایش جریان کشیده شده از خروجی تقسیم مقاومتی درصد خطای اندازه گیری نیز افزایش پیدا می کند. البته ما در این آموزش از این خطا چشم پوشی می کنیم .

اکنون به دنبال مقاومت هایی هستیم که برای ولتاژ ورودی 25ولت ولتاژ خروجی 5 ولت داشته باشیم . برای بدست آوردن مقدار واقعی ولتاژ نیز کافیست تا در برنامه مقدار ولتاژ خروجی سنسور را در 5 ضرب کنیم.

قطعات مورد نیاز راه اندازی سنسور Flex  :

سخت افزار :

ATMEGA8 , منبع تغذیه 5 ولت ,  پروگرامر AVR-ISP , ال سی دی 16×2 , خازن 100میکروفاراد  , خازن 100نانوفاراد (5عدد) , مقاومت 100کیلواهم .

نرم افزار :

Atmel studio 6.1 , progisp یا flash magic

شماتیک و نحوه کارکرد مدار

پورت D میکروکنترلر به خطوط دیتای LCD وصل شده است . lcd 16×2 در مجموع با پایه های بک لایت دارای 16 پایه است که 8 عدد از آن ها مربوط به دیتا هستند(7-14یاD0-D7) 2 پایه برای تغذیه (1و2 یا VSSوVDD یا 5vوGND) پایه سوم برای تنظیم کنتراست (VEE) و 3 پایه برای کنترل (RS,RW,E) .

مطلب پیشنهادی:  ساعت دیواری متفاوت با ATmega8

میتوانید در مدار مشاهده کنید که من فقط از 2 پایه کنترلی استفاده کرده ام . پایه های کنتراست و read/write اغلب مورداستفاده قرار نمیگرند و میتوان آن ها را به زمین متصل کرد.این کار ال سی دی را در بالاترین کنتراست و حالت خواندن قرار می دهد

و ما فقط پایه های RSوENABLE را برای فرستادن دیتا و کاراکترها  کنترل می کنیم.

اتصالات LCD و Mega8 به ترتیب زیر است :

  • پایه 1 یا VSS به زمین
  • پایه 2 یا VDD یا VCC به 5ولت
  • پایه 3 یا VEE به زمین (حداکثر وضوح را بدست می دهد – بهترین حالت برای افراد مبتدی)
  • پایه 4 یا RS (Register Selection) به PB0  میکروکنترلر
  • پایه 5 یاRW (Read/Write) به زمین (ال سی دی را در حالت خواندن قرار می دهد و ارتباط را برای کاربر آسان می کند)
  • پایه 6 یا E (ENABLE) به PB1 میکروکنترلر
  • پایه 7 یا D0 به PD0 میکروکنترلر
  • پایه 8 یا D1 به PD1 میکروکنترلر
  • پایه 9 یا D2 به PD2 میکروکنترلر
  • پایه 10 یا D3 به PD3 میکروکنترلر
  • پایه 11 یا D4 به PD4 میکروکنترلر
  • پایه 12 یا D5 به PD5 میکروکنترلر
  • پایه 13 یا D6 به PD6 میکروکنترلر
  • پایه 14 یا D7 به PD7 میکروکنترلر

مشاهده می کنید که ما از ارتباط 8بیتی(D0-D7) استفاده کرده ایم اما این کار ضرورتی ندارد و میتوان از ارتباط  4 بیتی نیز استفاده کرد(D4-D7) اما برنامه نویسی آن کمی پیچیده تر می شود .

بر اساس جدول بالا 10 پایه از ال سی دی به میکروکنترلر وصل می شود که 8 تای آن ها برای دیتا و 2 تای دیگر برای کنترل می باشند .

شماتیک راه اندازی سنسور Flex  با میکروکنترلر AVR :

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

ولتاژ دو سر R2 به طور کامل خطی نیست و دارای نویز است. برای فیلتر کردن نویز یک خازن موازی با هر یک از مقاومت های مقسم ولتاژ قرار داده شده است .

در اینجا پتانسیومتر 1کیلو برای تنظیم دقت ADC استفاده شده است . اکنون به مبحث ADC میکرو Atmega8 میپردازیم .

در میکروکنترلر Mega8 ADC دارای رزولوشن 10 بیتی میباشد.  بنابراین کنترلر میتواند حداقل تغییر Vref/2^10 را اندازه گیری کند و اگر Vref 5ولت باشد این مقدار برابر با 5میلی ولت خواهد بود. با هر 5میلی ولت افزایش ولتاژ ورودیADC یک واحد به خروجی دیجیتال افزوده می شود.

مطلب پیشنهادی:  پروژه برد آموزشی میکروکنترلرهای AVR

تنظیم رجیستر ADC میکروکنترلر AVR

اکنون باید براساس عبارات زیر رجیستر ADC را مقدار دهی کنیم ,

1.اول از همه باید قابلیت ADC را فعال کنیم .

2.در اینجا ما حداکثر ولتاژی که در ورودی داریم 5 ولت است بنابراین مرجع ولتاژ ADC را نیز 5 ولت تعیین می کنیم .

3.کنترلر قابلیتی دارد که تبدیل ADC را تنها در صورت وجود یک عامل تحریک خارجی انجام دهد , از آنجایی که ما به این قابلیت نیاز نداریم باید رجیستر های ADC را طوری مقدار دهی کنیم که ADC در حالت پیوسته کار کند .

4.برای هر ADC فرکانس تبدیل(مقدار آنالوگ به دیجیتال) و دقت مقدار تبدیل شده خروجی با یکدیگر نسبت عکس دارند .بنابراین برای داشتن دقت بیشتر در خروجی باید فرکانس کمتری را انتخاب کنیم . برای حالت عادی کلاک ADC ضریب آن را روی حداکثر مقدار قرار می دهیم (2).  از آنجایی که ما از کلاک داخلی 1Mhz استفاده می کنیم کلاک ADC (1000000/2) هرتز خواهد بود .

این 4 مورد تنها برای برای شروع کار با ADC کافی است .

تمامی 4 مورد بالا با دو رجیستر تنظیم می شوند .

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

قرمز(ADEN)  : این بیت برای فعال کردن ADC باید ست شود .

آبی (REFS1,REFS0)  :این دو بیت برای تنظیم مرجع ولتاژ استفاده می شوند (یا حداکثر ولتاژی که ما قرار است به ADC بدهیم )

چون ما میخواهیم ولتاژ مرجع 5 ولت باشد REFS0 باید ست شود , براساس جدول زیر :

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

زرد(ADFR)  : این بیت باید ست شود تا ADC به طور پیوسته کار کند .

صورتی (MUX0-MUX3)  : این 4بیت برای تعیین کانال ورودی هستند . از آنجایی که ما از ADC0  یا PIN0 استفاده می کنیم طبق جدول زیر احتیاج به ست کردن هیچ بیتی نیست .

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

قهوه ای(ADPS0-ADPS2)  : این 3 بیت برای تعیین ضریب کلاک ADC هستند . مطابق جدول برای ضریب 2 یک بیت باید ست شود .

راه اندازی سنسور خمشی (Flex Sensor) با میکروکنترلر AVR

سبز تیره(ADSC)  : این بیت برای شروع تبدیل ADC باید ست شود . مواقعی که میخواهیم تبدیل متوقف شود این بیت می تواند از درون برنامه غیرفعال شود .

مطلب پیشنهادی:  کنترل از راه دور با پیامک 4 کانال

ویدیو عملکرد مدار سنسور خمشی  :

کد پروژه راه اندازی Flex Sensor :

#include <avr/io.h>

//header to enable data flow control over pins

#define F_CPU 1000000

//telling controller crystal frequency attached

#include <util/delay.h>

//header to enable delay function in program

#define E 5

//giving name “enable” to 5th pin of PORTD, since it Is connected to LCD enable pin

#define RS 6

//giving name “registerselection” to 6th pin of PORTD, since is connected to LCD RS pin

void send_a_command(unsigned char command);

void send_a_character(unsigned char character);

void send_a_string(char *string_of_characters);

int main(void)

{

DDRB = 0xFF;

//putting portB and portD as output pins

DDRD = 0xFF;

_delay_ms(50);//giving delay of 50ms

DDRC = 0;//Taking portC as input.

ADMUX |=(1<<REFS0);//setting the reference of ADC

ADCSRA |=(1<<ADEN)|(1<<ADFR)|(1<<ADPS0);

//enabling the ADC, setting free running mode, setting prescalar 2

float i =0;

float RESISTANCE= 0;//storing digital output

char RESISTANCESHOW [7];//displaying digital output as resistance in 16*2 lcd

send_a_command(0x01); //Clear Screen 0x01 = 00000001

_delay_ms(50);

send_a_command(0x38);//telling lcd we are using 8bit command /data mode

_delay_ms(50);

send_a_command(0b00001111);//LCD SCREEN ON and courser blinking

ADCSRA |=(1<<ADSC);//starting the ADC conversion

send_a_string ("CIRCUIT DIGEST ");// displaying name

send_a_command(0x80 + 0x40 + 0);// shifting cursor to 1st shell of second line

send_a_string ("RESISTANCE=");// displaying name

send_a_command(0x80 + 0x40 + 11);// shifting cursor to 10th shell of second line

while(1)

{

i=ADC/204.8;//Now since it’s a 10bit ADC for every Vref(5V)/1024=5mV(4.88mV) we get one digital increment or for every 1V increment in input we get 204.8 count increment. So for finding voltage at ADC pin.

dtostrf(RESISTANCE, 4, 1, RESISTANCESHOW);

send_a_string(RESISTANCESHOW);

send_a_string("K"); //dtostr(double precision value, width, precision, string that will store the numbers);

// Value is either a direct value plugged into this place, or a variable to contains a value.

//Width that is used with dtostrf is the number of characters in the number that includes the negative sign (-). For instance, if the number is -532.87, the width would be 7 including the negative sign and the decimal point.

//Precision is how many numbers would be after the decimal point in the dtostrf usage.

_delay_ms(50);

send_a_command(0x80 + 0x40 + 11);//retuning to second line 10th shell.

}

}

void send_a_command(unsigned char command)

{

PORTA = command;

PORTD &= ~ (1<<RS); //putting 0 in RS to tell lcd we are sending command

PORTD |= 1<<E; //telling lcd to receive command /data at the port

_delay_ms(50);

PORTD &= ~1<<E;//telling lcd we completed sending data

PORTA= 0;

}

void send_a_character(unsigned char character)

{

PORTA= character;

PORTD |= 1<<RS;//telling LCD we are sending data not commands

PORTD |= 1<<E;//telling LCD to start receiving command/data

_delay_ms(50);

PORTD &= ~1<<E;//telling lcd we completed sending data/command

PORTA = 0;

}

void send_a_string(char *string_of_characters)

{

while(*string_of_characters > 0)

{

send_a_character(*string_of_characters++);

}

}

منبع : circuitdigest

درباره ی سینا طاهباز

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

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

یک دیدگاه

  1. بختیار مرادی

    سلام من میخوام با سنسور دما kty81-1 یا kty81-2 وسنسور فشارps100 ویه برد آردینو فشار به صورت آزمایشی دمای یه گاز داخل محفظه را اندازه گیری نماییم وبتوان ولتاز وجریان داخل محفظه را نیز نشان دهدلذا خواهشمند است مرا یاری دهید که چگونه این سنسورها را به هم ربط دهم تا بتوانم حداقل نمودار جریان -ولتاژوفشار ودمای داخل محفظه را نمایش دهدوضمنا من به چه قطعاتی برای انجام این کار نیاز دارم.دستتون درد نکنه وبسیار ممنون وسپاسگزارم