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

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

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

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

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

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

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

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

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

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

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

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

    سخت افزار :

    ATMEGA8 , منبع تغذیه ۵ ولت ,  پروگرامر AVR-ISP , ال سی دی ۱۶×۲ , خازن ۱۰۰میکروفاراد  , خازن ۱۰۰نانوفاراد (۵عدد) , مقاومت ۱۰۰کیلواهم .

    نرم افزار :

    Atmel studio 6.1 , progisp یا flash magic

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

    پورت D میکروکنترلر به خطوط دیتای LCD وصل شده است . lcd 16×۲ در مجموع با پایه های بک لایت دارای ۱۶ پایه است که ۸ عدد از آن ها مربوط به دیتا هستند(۷-۱۴یاD0-D7) 2 پایه برای تغذیه (۱و۲ یا VSSوVDD یا ۵vوGND) پایه سوم برای تنظیم کنتراست (VEE) و ۳ پایه برای کنترل (RS,RW,E) .

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

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

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

    • پایه ۱ یا VSS به زمین
    • پایه ۲ یا VDD یا VCC به ۵ولت
    • پایه ۳ یا VEE به زمین (حداکثر وضوح را بدست می دهد – بهترین حالت برای افراد مبتدی)
    • پایه ۴ یا RS (Register Selection) به PB0  میکروکنترلر
    • پایه ۵ یاRW (Read/Write) به زمین (ال سی دی را در حالت خواندن قرار می دهد و ارتباط را برای کاربر آسان می کند)
    • پایه ۶ یا E (ENABLE) به PB1 میکروکنترلر
    • پایه ۷ یا D0 به PD0 میکروکنترلر
    • پایه ۸ یا D1 به PD1 میکروکنترلر
    • پایه ۹ یا D2 به PD2 میکروکنترلر
    • پایه ۱۰ یا D3 به PD3 میکروکنترلر
    • پایه ۱۱ یا D4 به PD4 میکروکنترلر
    • پایه ۱۲ یا D5 به PD5 میکروکنترلر
    • پایه ۱۳ یا D6 به PD6 میکروکنترلر
    • پایه ۱۴ یا D7 به PD7 میکروکنترلر

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

    بر اساس جدول بالا ۱۰ پایه از ال سی دی به میکروکنترلر وصل می شود که ۸ تای آن ها برای دیتا و ۲ تای دیگر برای کنترل می باشند .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    کد پروژه راه اندازی 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

© تمامی حقوق مطالب برای وبسایت آلفا باکس محفوظ است و هرگونه کپی برداری بدون ذکر منبع ممنوع و شرعا حرام می باشد.
قدرت گرفته از : بک لینکس