پروژه ارتباط رادیویی با ماژول های ASK DX-RF - وب سایت رضا احمدی

پروژه ارتباط رادیویی با ماژول های ASK DX-RF

پروژه ارتباط رادیویی با ماژول های ASK DX-RF

در این پروژه از ارتباط رادیویی جهت ارسال و دریافت دیتا بین میکرو کنترلرهای avr استفاده شده که در آن ماژول های ASK DX-RF بکار رفته است.

قطعات بکار رفته در پروژه :

فرکانس کاری :  433 MHz     ولتاژ کاری :3.5 تا 5 ولت    جریان مصرفی : 10 الی 15 میلی آمپر   مدولاسیون: ASK    خروجی دیتا: TTL

 ASK DX-RF  

 یک ماژول رادیویی می باشد. کاربرد این ماژول در ریموت کنترلرها می باشد. این ماژول در فرکانس کاری 433 ساخته می شوند و نسبت به فرکانس ریموت خود باید فرکانس فرستنده نیز انتخاب شوند. ولتاژ مورد نیاز این ماژول ها بین 3.5 تا 5.5 ولت میباشد.

ماژول های ask-dx-rf
ماژول های ask-dx-rf

میکرو کنترلر مورد استفاده در این پروژه ATMega8a  از خانواده AVR میباشد. جهت اتصال و رد و بدل کردن داده ها بین میکرو کنترلرها از همین ارتباط uart  استفاده شده است. نحوه برقراری ارتباط به این صورت است که در مدار فرستنده پایه txd  میکرو کنترلر را به پایه data ماژول فرستنده وصل میکنیم. و در قسمت گیرنده پایه Rxd میکروکنترلر را به ماژول گیرنده وصل میکنیم.

جهت تامین کلاک میکرو کنترلر از یک عدد کریستال 3.6864 MHz استفاده شده که کمترین خطا برای تنظیم نرخ داده ارتباط سریال را دارد . در این جا برای ارتباط سریال نرخ داده بر روی 1200 bps استفاده شده سرعت بیشتر از این موجب خطا در داده های اریالی توسط ماژولهای Rf میگردد.

فقط باید دقت کرد که ماژول داده ها هنگاهی به بیت 1 میرسند از سمت ماژول فرستنده ارسال میشود و از انجایی که همگامی که هیچ دیتایی ارسال نمیکنیم پایه Txd میکروکنترلر همواره مقداره 1 منطقی (5ولت) می باشد. پس باید اطلاعات را معکوس کرد و فرستاد. و در نتیجه در سمت گیرنده نیز باید ابتدا اطلاعات دریافتی ماژول را معکوس کرد و آنها را خواند و برسی و دیکد کرد.

برقرای ارتباط بین میکروکنترلر avr و ماژول های RF
برقرای ارتباط بین میکروکنترلر avr و ماژول های RF

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

یک طبقه معکوس کننده با bc547
یک طبقه معکوس کننده با bc547

همانطور که می بینید از یک طبقع  ترانزیستور npn به شماره مدل bc547  بصورت امیتر مشترک استفاده شده. هنگامی که پایه tx مقدار 5 ولت باشد آنگاه ترانزیستور روشن و به ناحیه اشباع رفته در نتیجه پایه خروجی که از کلکتور گرفته شده مقدار صفر ولت (زمین ) میشود. و هنگامی که مثدار txd  صفر ولت باشد مقدار ترانزیستور خاموش درنتیجه مقدار خروجی به vcc که مثدار 5 ولت را دارد وصل می شود.

شماتیک مدار

مدار فرستنده :

شماتیک پروژه فرستنده ماژولRF
شماتیک پروژه فرستنده ماژولRF

مدار گیرنده :

شماتیک پروژه گیرنده ماژولRF
شماتیک پروژه گیرنده ماژولRF

عملکرد این مدار به این صورت است که هنگامی که در قسمت فرستنده کلید 1 فشرده می شود از طریق ماژول Rf  عبارت “$r1” ارسال می شود و هنگامی که در قسمت گیرنده این عبارت دریافت شود پورت c.5 میکروکنترلر روشن و در نتیجه ترانزیستور 2n3904  رو شن و باعث راه اندازی رله می شود.

در اینجا هم باید دقت نمود از ترانزیستور 2n3904 در ناحیه کلید زنی استفاده شده که تغذیه و جریان مناسب جهت روشن شدن رله 12 ولتی را تامین میکند . همچنین از یک دیود 1n4007 برای تخلیه انرژی ذخیره شده در کنداکتور رله استفاده شده که به عنوان دیود هرز گرد از آن یاد میکنند.

سورس پروژه :

کد مدار فرستنده :

  1. /*
  2.  * txCode.c
  3.  *
  4.  * Created: 04/14/2018 11:53:02 ب.ظ
  5.  * Author: Reza.ZX
  6.  */
  7.  
  8. #include <io.h>
  9. #include <delay.h>
  10.  
  11. #define KEYA PINC.5
  12. #define KEYB PINC.4
  13.  
  14. #define LEDA PORTB.2
  15. #define LEDB PORTB.1
  16.  
  17. int i=0; 
  18.  
  19. void USART_init()
  20. {    
  21.     UCSRA=0x00;
  22.     UCSRB=(1 << TXEN);//enable Transmit
  23.     UCSRC |=(1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); //set data bits to 8 and 1sopt bit and no parity
  24.     UBRRH=0x00;
  25.     UBRRL=191; //set Baud rate to 1200 in fosc 3.6864MHz}
  26. }
  27.  
  28. void USART_send_char(unsigned char data)
  29. {
  30.  
  31. 	while ((UCSRA & (1 << UDRE)) == 0) {};
  32. 	UDR = data;
  33.  
  34. }
  35.  
  36. void USART_send_string(char* str)
  37. {    
  38.     for(i=0;str[i];i++)
  39.     {
  40.         USART_send_char(str[i]);
  41.     }
  42.     USART_send_char('\n');
  43. }
  44.  
  45. void main(void)
  46. {
  47. DDRC.5=0;//input keys
  48. DDRC.4=0;
  49.  
  50. DDRB.1=1;
  51. DDRB.2=1;
  52. PORTB=0x00;
  53.  
  54. USART_init();
  55. delay_ms(1000);
  56. while (1)
  57.     {
  58.     // Please write your application code here
  59.         if(KEYA==0)
  60.         {
  61.             USART_send_string("$r1");            
  62.             LEDA=1;
  63.             while(KEYA==0);
  64.             delay_ms(500);            
  65.             LEDA=0;
  66.         }
  67.         else if(KEYB==0)
  68.         {
  69.             USART_send_string("$r2");
  70.             LEDB=1;
  71.             while(KEYB==0);
  72.             delay_ms(500);
  73.             LEDB=0;
  74.         }
  75.      }
  76. }

کد مدار گیرنده :

  1. /*
  2.  * rxCode.c
  3.  *
  4.  * Created: 04/14/2018 11:53:02 ب.ظ
  5.  * Author: Reza.ZX
  6.  */
  7.  
  8. #include <io.h>
  9. #include <delay.h>
  10. #include <string.h>
  11.  
  12. #define RELA PORTC.5
  13. #define RELB PORTC.4
  14.  
  15. #define RX_BUFF_SIZE 24
  16. int index=0,i=0;
  17. unsigned char Rx_buffer[RX_BUFF_SIZE]; 
  18.  
  19. void USART_init()
  20. {    
  21.     UCSRA=0x00;
  22.     UCSRB= (1 << RXEN) | (1<<RXCIE);//enable Reciever and interrupt
  23.     UCSRC |=(1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); //set data bits to 8 and 1sopt bit and no parity
  24.     UBRRH=0x00;
  25.     UBRRL=191; //set Baud rate to 1200 in fosc 3.6864MHz    
  26. }                 
  27. interrupt [USART_RXC] void usart_rx_interrupt(void)
  28. {
  29. char data;
  30. data=UDR;
  31. Rx_buffer[index]=data;
  32. if(++index >= RX_BUFF_SIZE) {index=0;}
  33. }
  34.  
  35. void clean()
  36. {
  37.     for(i=0;Rx_buffer[i];i++)
  38.         Rx_buffer[i]='';
  39.         index=0;
  40. }
  41. void main(void)
  42. {
  43.     DDRC.5=1;
  44.     DDRC.4=1;
  45.     PORTC=0x00;
  46.     USART_init();
  47.     delay_ms(1000);
  48.     #asm("sei");
  49. while (1)
  50.     {
  51.     // Please write your application code here
  52.     if(strstr(Rx_buffer,"$r1"))        
  53.          {
  54.             RELA=1;
  55.             delay_ms(2000);
  56.             clean();
  57.         }                    
  58.     else if(strstr(Rx_buffer,"$r2"))
  59.         {
  60.             RELB=1;
  61.             delay_ms(2000);
  62.             clean();
  63.         }
  64.  
  65.  
  66.     RELA=0;RELB=0;//reset relay
  67.     delay_ms(200);            
  68.     }
  69. }

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

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

دیدگاه های ثبت شده

    امیر | ۲۵ دی ۱۴۰۰

    سلام و عرض ادب
    خسته نباشید

    ببخشید هیچ کدام از عکس ها در سایت نیست

    اگر میشه درست کنید
    با تشکر

      رضا احمدی | ۲۶ دی ۱۴۰۰

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


    محمد | ۱۵ بهمن ۱۴۰۰

    سلام وقتتون بخیر خیلی ممنون از مطلب مفید تون
    یه سوال داشتم چرا برای وصل کردن میکرو به ماژول از ترانزیستور استفاده شده؟
    نمیشه به صورت مستقیم وصل بشه؟
    خروجی میکرو باید نات بشه؟

      رضا احمدی | ۱۶ بهمن ۱۴۰۰

      سلام متشکرم
      این ماژول فرستنده وقتی وقتی به بیت یک برسه دیتا رو ارسال میکنه . ولی خروجی پایه txd همیشه یک هستش وقتی چیزی برای انتقال نداره برای حل این مشکل دیتا رو معکوس میکنیم سپش خروجی ماژول دریافت رو دوباره معکوس میکنیم به این ترتیب به دیتا اصلی میرسیم.
      در مورد استفاده از ترازیستورم باید بگم خروجی هر پایه میکرو میتونه نهایتا تا ۴۰ میلی امپر جریان ازش عبور کنه اگه مداری که داره جریان میکشه جریان بیشتری بخواد به میکرو اسیب میزنه. در نتیجه برای تقویت جریان از ترانزیستوری استفاده میکنیم که توانایی درایو اون میزارن جریان رو داشته باشه .

        محمد | ۱۶ بهمن ۱۴۰۰

        خیلی ممنون از پاسخگویی تون


    محمد | ۱۷ بهمن ۱۴۰۰

    من این پروژه رو با دو مبدل USB به TTL راه اندازی کردم و به خوبی کار کرد.
    و اینم بگم که با بادریت ۹۶۰۰ هم کار میکرد و مشکلی نداشت.
    ممنون از وبسایت خوبتون.

      رضا احمدی | ۲۹ بهمن ۱۴۰۰

      سلام سپاسگزارم
      من با ۹۶۰۰ تست نکرده بودم خودم . معمولا اینگونه خطاها توی دیتاهای بزرگتر خودشونو نشون میدن.
      موفق باشید.


    متین | ۲۰ فروردین ۱۴۰۱

    j4 ,j5چه کاربردی دارن؟

      رضا احمدی | ۲۰ فروردین ۱۴۰۱

      سلام.
      j4 یک پین هدر(نری / مادگی) وصل میشه که بعدا اگه نیاز بود از این پورتها بشه استفاده لازم رو کرد.
      j5 به عنوان کلید روشن و خاموش مدار در نظر گرفته شده. مثلا یک کلید راکر دو حالته…