بلوتوث Bluetooth میکروکنترلر AVR

کنترل رله بلوتوث از طریق ماژول بلوتوث HC-05 با میکروکنترلر Atmega8

hc05-relay-bluetooth-with-avr-atmega-digispark
نوشته شده توسط امیرحسین شاهمی

با گذشت زمان و پیشرفت تکنولوژی حس راحت طلبی انسان نیز قوی تر شده است. امروزه انسان به کنترل از راه دور بیش از پیش به علاقه مند شده است زیرا باعث راحتی در انجام امور ، شخصی سازی و همچنین قیمت کمتر و کارایی بالاتری نسبت به روش های قدیمی را دارد. بلوتوث یکی از همین وسیله هاست که باعث کنترل تمام وسایل برقی میشود. در این آموزش قصد کنترل رله بلوتوث با at mega 8  از طریق ماژول بلوتوث hc-05 را داریم. در ادامه این آموزش با مرجع تخصصی میکروکنترلر AVR به زبان فارسی، دیجی اسپارک همراه باشید.

 


مشخصات ماژول بلوتوث HC05


ماژول بلوتوث HC-05 یک ماژول بلوتوث بی سیم است که امکان ارتباط بی سیم بین دستگاه های الکترونیکی را فراهم می کند. این ماژول مبتنی بر استاندارد بلوتوث ۲٫۰ است و قابلیت ارتباط در حالت های مختلف را فراهم می کند.ماژول HC-05 از پروتکل سریال (UART) برای ارتباط با میکروکنترلرها یا سایر دستگاه های الکترونیکی استفاده می کند. این ماژول قابلیت ارسال و دریافت داده ها را از طریق پین های تعیین شده برای TX و RX به میکروکنترلر ارائه می دهد. علاوه بر ارتباط سریال، ماژول HC-05 قابلیت اتصال به عناوین صوتی (AT command mode) را نیز دارد که امکان پیکربندی و تنظیمات مختلف را از طریق دستورات AT ارائه می دهد.این ماژول در پروژه های الکترونیکی مورد استفاده قرار می گیرد که نیاز به ارتباط بی سیم دارند، مانند کنترل از راه دور، ارسال و دریافت داده ها، اتصال دستگاه ها به یک شبکه بلوتوث و غیره. با استفاده از این ماژول، می توانید ارتباط بی سیم بین دستگاه های مختلف را برقرار کنید و داده ها را بین آنها ارسال و دریافت کنید.

 

HC05 یک ماژول بلوتوث با امکانات فراوان و پر مصرف می‌باشد. میتواند در دو مد master و slave ، پورت سریال را به صورت بی سیم در اختیار شما بگذارد. از این رو می‌توانید از این ماژول در طراحی خانه‌های هوشمند ، هدست‌های بی سیم و … استفاده کنید. با استفاده از ماژول HC05 میتوان دیتا را در فواصل معین ( ۱۰ الی ۳۳  متر) با استفاده از پروتکل بلوتوث دریافت و ارسال کرد. یکی از ویژگی‌های جذاب ماژول بلوتوث، امکان انتقال دیتا از آردوینو، میکروکنترلر، تلفن همراه و…… به  صورت سریال می‌باشد. سپس خود ماژول دیتا را از طریق پروتکل بلوتوث ارسال خواهد کرد. همچنین می‌تواند دیتا را از طریق پرونکل بلوتوث دریافت کند. سپس آن‌ها را به سریال تبدیل کرده و به کاربر تحویل دهد. ماژول‌های سری HC به دو صورت با پسوند اعداد زوج و فرد وارد بازار می‌شوند. ماژول‌های بلوتوث با پسوند اعداد زوج فقط می‌توانند در مد master یا slave باشند. مانند HC-04M که فقط در مد master می‌باشد. یا HC-04S که فقط میتواند در مد slave باشند.

 


مشخصات فنی ماژول بلوتوث


در زیر مشخصات فنی ماژول بلوتوث HC-05 را ذکر می‌کنم:

  • نسخه بلوتوث: بلوتوث ۲٫۰+EDR (Enhanced Data Rate)
  • پروتکل‌های پشتیبانی شده: AT command mode، SPP (Serial Port Profile)
  • فاصله انتقال: تا ۱۰ متر (با شرایط ایده‌آل)
  • ولتاژ تغذیه: ۳٫۶ تا ۶ ولت
  • جریان مصرفی: حدود ۳۰ میلی‌آمپر در حالت فعال و حدود ۱ میلی‌آمپر در حالت استندبای
  • رابط کاربری: سریال (UART)
  • پین‌های ارتباطی: TX (ارسال داده)، RX (دریافت داده)، VCC (تغذیه)، GND (زمین)
  • سرعت انتقال داده: قابل تنظیم بین ۱۲۰۰bps تا ۱۳۸۲۴۰۰bps
  • حالت‌های ارتباط: Master و Slave
  • نوع آنتن: آنتن داخلی ماژول
  • پشتیبانی از رمزگذاری و رمزگشایی: پشتیبانی می‌کند
  • ابعاد: حدود ۲۷mm × ۱۳mm × ۲٫۲mm
  • وزن: تقریباً ۳ گرم

 

 

 

 


تنظیمات پیش فرض ماژول بلوتوث HC05


  1. نام پیش فرض HC-05
  2. پسورد پیش فرض: ۱۲۳۴
  3. بادریت در هنگام تبادل دیتا: ۹۶۰۰
  4. نام دستگاه (Device Name): HC-05
  5. رمز عبور (Password): 1234 یا ۰۰۰۰
  6. حالت کاری (Operating Mode): Slave Mode (حالت برده)
  7. سرعت ارتباط (Baud Rate): 9600 بیت در ثانیه
  8. پین‌های ارتباطی (Communication Pins):
  9. پین TX: برای ارسال داده از ماژول
  10. پین RX: برای دریافت داده توسط ماژول
  11. پین VCC: تغذیه (بین ۳٫۶ تا ۶ ولت)
  12. پین GND: زمین 

شماتیک پروژه کنترل رله بلوتوث


این پروژه از دو بخش فرمان که شامل میکروکنترلر و ماژول و بخش اجرا که شامل رله ها و مدار راه انداز می باشد.

HC05 bluetooth avr atmega8-1 digispark

 

بخش دوم

HC05 bluetooth avr atmega8-2 digispark

 


اتصالات ماژول کنترل رله بلوتوث


  • پایه VCC ماژول به +۵v
  • پایه ی GND ماژول به قطب منفی
  • پایه ی rx ماژول به پایه ی tx میکرو
  • پایه ی tx ماژول به پایه ی rx  میکرو

** اگر پایه ی EN ماژول به قطب منفی وصل شود ماژول خاموش میشود.

** اگر ماژول به یک دستگاه بلوتوثی اتصال برقرارکند وضعیت پایه state یک منطقی می شود.

 


کدهای پروژه کنترل رله بلوتوث


جهت اجرای پروژه کنترل رله بلوتوث باید در نرم افزار کدویژن، کدها را آماده کرده و سپس پروگرام کنید. چنانچه این روش را نمی‌دانید به آموزش نحوه ی ساخت پروژه جدید و پروگرام کردن میکروکنترلر مراجعه کنید. پس از ساخت پروژه‌ی جدید در نرم افزار کدویژن CodeVision کدهای زیر را داخل آن کپی کنید. سپس تراشه میکروکنترلر Atmega8 را پروگرام کنید.

 

#include <mega8.h>       // تعریف کتابخانه ها
#include <delay.h>
#include <string.h>
#include <stdio.h>

#define  CH1   PORTC.0 //تغیر اسم پایه ها 
#define  CH2   PORTC.1
#define  CH3  PORTC.2
#define  CH4  PORTC.3

int a;
unsigned char drx,c,st[102],flag;   // تعریف متغییر ها
interrupt [USART_RXC] void usart_rx_isr(void) //USART_RX اینتراپت
{
    drx=UDR;
    if(drx>=0x01){st[c]=drx;c++;}
    if(c>=100)
    {
    c=0;
    }
    flag=50;

}

void main(void)
{
DDRC=0xff;     //تعریف ورودی یا خروجی بودن پایه ها
// USART  تنظیمات
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
UCSRB=(1<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
UBRRH=0x00;
UBRRL=0x33;



// Global enable interrupts
#asm("sei")      // فعال ساز وقفه عمومی

while (1<2)  // حلقه اصلی
 {

    if(flag>1)
    {
    delay_ms(10);
    flag--;
     if(strstr(st,"all off")||strstr(st,"All off"))// جستجو در اطلاعات دریافت شده
     {
     puts("All turned off"); // ارسال جواب برای کاربر
     memset(st,0,strlen(st));  // پاک کردن اطلاعات دریافت شده
     c=0;

     PORTC=0X00;
     flag=1;
     }
     if(strstr(st,"all on")||strstr(st,"All on"))// جستجو در اطلاعات دریافت شده
     {
     putsf("All turned on"); // ارسال جواب برای کاربر
     memset(st,0,strlen(st));  // پاک کردن اطلاعات دریافت شده
     c=0;
     PORTC=0Xff;
     flag=1;
     }
    if(strstr(st,"Ch1 on")||strstr(st,"ch1 on"))
     {
     putsf("CH1 on");
     memset(st,0,strlen(st));
     c=0;
     CH1=1;
          flag=1;
     }
     if(strstr(st,"Ch1 off")||strstr(st,"ch1 off"))
     {
     putsf("CH1 off");
     memset(st,0,strlen(st));
     c=0;
     CH1=0;
     flag=1;
     }
     
     if(strstr(st,"Ch2 on")||strstr(st,"ch2 on"))
     {
     putsf("CH2 on");
     memset(st,0,strlen(st));
     c=0;
     CH2=1;
     flag=1;
     }
     if(strstr(st,"Ch2 off")||strstr(st,"ch2 off"))
     {
     putsf("CH2 off");
     memset(st,0,strlen(st));
     c=0;
     CH2=0;
     flag=1;
     }
     
     if(strstr(st,"Ch3 on")||strstr(st,"ch3 on"))
     {
     putsf("CH3 on");
     memset(st,0,strlen(st));
     c=0;
     CH3=1;
     flag=1;
     }
     if(strstr(st,"Ch3 off")||strstr(st,"ch3 off"))
     {
     putsf("CH3 off");
     memset(st,0,strlen(st));
     c=0;
     CH3=0;
     flag=1;
     }
     
     if(strstr(st,"Ch4 on")||strstr(st,"ch4 on"))
     {
     putsf("CH4 on");
     memset(st,0,strlen(st));
     c=0;
     CH4=1;
     flag=1;
     }
     if(strstr(st,"Ch4 off")||strstr(st,"ch4 off"))
     {
     putsf("CH4 off");
     memset(st,0,strlen(st));
     c=0;
     CH4=0;
     flag=1;
     }
   
    if(flag==1)      // پاک کردن اطلاعات اشتباه
    {
    memset(st,0,strlen(st));
    c=0;
    flag=0;
    }
 }
   if(a==1)      // پاک کردن اطلاعات اشتباه
    {
    PORTA=0X00;
    PORTC=0X00;
    delay_ms(1000);
    PORTA=0Xff;
    PORTC=0Xff;
    delay_ms(1000);
    flag=1;
    }
    

    
 }
}

 


سخت افزار مورد نیاز


ماژول بلوتوث hc-05

آی سی ATmega8

ماژول رله

دیود ۱n4007

ترانزیستور  BC547

مقاومت ۱کیلو اهم

 

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک دانشجوکیت digispark daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

امیرحسین شاهمی

دانشجوی الکترونیک علاقمند به یادگیری ، آموزش و چالش های جدید

تبادل نظر و رفع عیب با ثبت دیدگاه

۵۱ دیدگاه

    • سلام ممنونم اگه به همین صورت کامپایل کنید فایل hex رو به صورت کامل برای شما ارسال میشه همچنین فایل hex برای شما ایمیل میشه

      • سلام هر جا که شما دچار مشکل شدید از طریق تیکت سایت سوالتون رو بپرسین ما جواب میدیم

        • سلام
          با تشکر از شما.
          لطفا میشه بگویید ایا میتوانیم بولوتوس را رله کنیم، یعنی فاصله گیرنده و فرستده را با یک دستگاه دیگر چند برابر کنیم؟

          • سلام روز بخیر .
            میشه به جای (دیود و رله و ترانزیستور و مقاومت)مستقیم یه ماژول رله به میکرو وصل کنیم؟
            فکر کنم با اتصال مستقیم ماژول رله به پایه های میکرو هم کار کنه ؟

            • با سلام
              در صورتی که از ماژول رله استفاده میکنید، امکان اجرای درخواستتان فراهم است. البته بهتر است از ماژول رله ای که دارای اپتوکوپلر است استفاده کنید.

  • سلام ،
    درج نشده که از چه طریقی به ماژول بلوتوث کانکت بشیم .
    برنامه ای که روی تلفن همراه باید نصب بشه رو نگفتید که

    • سلام
      برنامه های متنوعی موجوده توی بازار شما میتونید از bluetooth terminal استفاده کنید اگه دقت کرده باشید لینک آموزش کانکت شدن به ماژول بلوتوث رو گذاشتم

  • سلام آموزشی هست که من بتونم خروجی یه سنسور اردوینورو روی گوشی ببینم؟
    من با اندروید برنامه ساختم که وصل میشه به اردوینو و دستوراتم اوکی هست، فقط مشکل من دریافت از اردوینو روی اندروید هستش.
    راه حلی دارید؟

    • سلام شما میتونید با ابزار های مختلفی این کار رو انجام بدین مثلا یکی همین بلوتوث با اتصال بلوتوث به برد میتونین مقدار خروجی سنسور رو دریافت کنین البته از طریق کابل یو اس بی و یوآرت هم میتونن از طریق کامپیوتر مشاهده کنین.

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

  • سلام خسته نباشید . اگه میشه تنظیمات داخل کدویژن رو هم اضافه کنید . مانند تنظیم کردن ویزارد . خروجی ورودی ها. برای بلوتوث هم باید تعریف کرد ک خروجی ار ایکس و تی ایکس رو؟؟؟؟

    • ‌سلام ممنونم.
      اگه دقت کرده باشید برای کوتاه شدن مطلب لینک کار با نرم افزار کد ویژن رو قرار دادم فقط دقت داشته باشید فرکانس کاری ۸ مگاهرتز هست منظورتون رو از
      برای بلوتوث هم باید تعریف کرد ک خروجی ار ایکس و تی ایکس رو
      متوجه نشدم

  • سلام اگه بخوام تعداد رله و خروجی رو زیاد کنم میتونم کد
    if(strstr(st,”Ch4 on”)||strstr(st,”ch4 on”))
    {
    putsf(“CH4 on”);
    memset(st,0,strlen(st));
    c=0;
    CH4=1;
    flag=1;
    }
    if(strstr(st,”Ch4 off”)||strstr(st,”ch4 off”))
    {
    putsf(“CH4 off”);
    memset(st,0,strlen(st));
    c=0;
    CH4=0;
    flag=1;
    }
    رو مثلا تا CH8 ادامه بدم؟ و داخل برنامه باید خروجی هارو بزارم.
    اگه نمیشه میشه بگید چطوری انجام بدم؟
    بعدم برنامه داره تو نت یا باید بنویسم براش

  • سلام و وقت به خیر
    جناب میخواستم بپرسم قطعه کد زیر به چه دلیل قرار داده شده است؟
    if(drx>=0x01)
    هم چنین چرا سایز st، صدو دو(۱۰۲) ىر نظر گرفته شده است؟

  • ۱ سلام
    من می خوام به لامپ وصل کنم می خوام بدونم اگه من بلوتوث رو خاموش کنم لامپ هم خاموش می شه یا روشن می مونه

  • سلام
    اول تشکر میکنم از اموزشتون
    یکی از سوالام اینکه اگ ب ۸ تا رله بخوایم وصل کنی جز پایه های ۲۳تا۲۶دیگ کدوم پایه ها امکان اتصا رله دارند و اینکه اگ بخواییم رله کانالی لحظه ای کار کنه مثلا ۱۰۰۰میلی ثانیه کدوم کد باید جابجا شه؟

    • سلام
      خواهش میکنم
      تمامی پایه هایی که خروجی دیجیتال داشته باشند قابلیت کنترل رله رو دارند برای ایجاد تاخیر زمانی کافیه داخل یکی شرط هایی که رله را فعال میکند از دستور delay استفاده بشه و بلافاصله دستور قطع رله نوشته شود

      • سلام
        واقعا تشکر ویژه که اینقدر سریع پاسخ میدین.
        سوالم اینه میشه همین پروژه رو با mega 64یا mega 128انجام داد؟
        رله ها با زدن لحظه ای وصل بشن مادامیه کلید لمس شده رله متصل باشد بدون تاخیر، در غیر این صورت قطع باشد

    • سلام با وارد کردن عبارات مقابل دستور strstr میتونین رله ها رو کنترل کنید

  • سلام
    با تشکر از شما.
    لطفا میشه بگویید ایا میتوانیم بولوتوس را رله کنیم، یعنی فاصله گیرنده و فرستده را با یک دستگاه دیگر چند برابر کنیم؟

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

    • با سلام
      کاربر گرامی در این خصوص از اپلیکیشن هایی که برای اندروید و سازگار با آردوینو وجود دارد باید استفاده کنید که این مورد تست نشده است.