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

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


۲۵ اسفند ۱۳۹۸
رضا احمدی
696 بازدید
دسته بندی : avr , آموزش , الکترونیک , پروژه

در این پروژه از ارتباط رادیویی جهت ارسال و دریافت دیتا بین میکرو کنترلرهای 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. }

مطالب مرتبط

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

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