سیم کارت GSM - GPRS میکروکنترلر AVR

کنترل وضعیت اتصال ماژول Sim800L با AVR و میکروکنترلر ATmega16

testing-sim800l-module-with-avr-atmega16-digispark-
نوشته شده توسط معین صابری

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

 


بررسی ماژول سیم کارت GSM


شرکت simcom چندین سال است که در این زمینه ماژول سیم کارت فعال می‌باشد. با تولید انواع چیپ‌های مخابراتی باند GSM، امکان طراحی دستگاه‌های کنترل از راه دور را چه بر بستر GSM و یا GPRS، فراهم نموده است. اما این ماژول‌‌ها با توجه به امکانات بسیاری که فراهم می‌آورند، ممکن است بعد از مدتی دچار آشفتگی شده و به دستورات AT Command ها پاسخی ندهند. حتی مشاهده گردیده است که بعد از چند مدتی، از شبکه خارج شده و دیگر نمی‌توانند دوباره به شبکه بازگردند. این موضوع یک چالش حیاتی در طراحی سیستم‌های کنترل از راه دور خواهد بود. تصور کنید در منطقه‌‌ای دور دست، نیاز است تا به طور مداوم شرایط محیطی نظیر دما، فشار، رطوبت و…. کنترل گردد. با توجه به مطالب ذکر شده، در صورتیکه واحد GSM دچار اینگونه اشکالات گردد، عملا سیستم طراحی شده از کار خواهد افتاد.

اتصالات مدار Sim800L و آی سی Atmega16 -دیجی اسپارک

 

در این شرایط، نیاز به مکانیزمی است تا از صحت عملکرد واحد مخابراتی مطلع شد. در صورت وقع این شرایط، سیستم وارد حالت خود تعمیری گردد و با یک ریست سخت افزاری، این واحد را به حالت عادی خود بازگرداند. بدین منظور، نیاز است تا با در نظر گرفتن یک بازه زمانی، مثلا هر ده دقیقه یکبار، به کنترل وضعیت این واحد پرداخت. به منظور کنترل وضعیت، می‌بایست دستور AT+CCALR? به ماژول مخابراتی ارسال گردد. در صورتیکه شرایط ماژول در حالت عادی باشد، ماژول عبارت +CCALR: 1 را به ما ارسال خواهد نمود. در صورتیکه شرایطی جز این باشد، مثلا اگر به طور کل پاسخی ارسال نگردد و یا عبارت +CCALR: 0 از سوی ماژول ارسال گردد، نیاز است تا ماژول مورد نظر به صورت سخت افزاری ریست گردد. بدین منظور، نیاز است تا مطابق اسناد فنی یک ماژول مخابراتی این شرکت، نظیر ماژول sim800l، پایه ریست این ماژول برای حداقل ۱۰۵ میلی ثانیه صفر منطقی گردد. مطابق اطلاعات دیتاشیت ماژول Sim800L، این کار می‌تواند با اتصال مستقیم پایه میکروکنترلر و یا برد آردوینو به این پایه صورت بگیرد، اما به نظر می‌رسد با توجه به این موضوع که این پایه در حالت عادی، خود دارای ولتاژ است، با اتصال یک ترانزیستور به این پایه، می‌توان از کیفیت مطلوب تری در کار برخوردار گردید.

 


عملکرد مدار اتصال ماژول SIM800L


مطابق شکل فوق، با تعریف کردن پورت B میکروکنترلر به عنوان خروجی و به کمک پین صفر این پورت، می‌توان با کنترل نمودن ترانزیستور، ماژول را ریست نمود. دقت داشته باشید برای این موضوع، پین میکروکنترلر در حالت عادی صفر منطقی است که بدین ترتیب ترانزیستور درحالت عادی خاموش است. زمانی که احتیاج به ریست باشد، این پایه به یک منطقی تغییر وضعیت داده، و با روشن شدن ترانزیستور، پایه ریست ماژول با زمین اتصال برقرار کرده و در نتیجه، ماژول Sim800L ریست می‌گردد. دقت داشته باشید با اعمال یک تقسیم مقاومتی، ولتاژ میکروکنترلر را به منظور ایجاد ولتاژ مناسب برای ترانزیستور کاهش می‌دهیم. نکته دیگر، PULLDOWN کردن پین متصل به BASE ترانزیستور با یک مقاومت ۱۰ کیلو اهمی است. از آنجاییکه ماژول های GSM حین کار نویز شدید در اطراف خود ایجاد می نمایند، ممکن است بر اثر این نویز، پایه خروجی میکروکنترلر به طور ناخواسته‌ای تغییر وضعیت دهد. بنابراین با یک مقاومت ۱۰ کیلو اهم این پایه را به زمین متصل می‌نماییم. این کار باعث می‌شود از ایجاد ولتاژهای ناخواسته احتمالی بر روی این پایه جلوگیری کنیم.

شماتیک کنترل وضعیت اتصال ماژول SIM800L به کمک میکروکنترلر AVR - دیجی اسپارک

 

لوازم مورد نیاز

  1. میکروکنترلر ATmega16
  2. ماژول GSM Sim800L
  3. باتری لیتیوم پلیمر
  4. مقاومت ۴٫۷ کیلو اهم
  5. مقاومت ۱۰ کیلو اهم

 

 

اتصالات

  • پایه TX میکروکنترلر از طریق دو مقاومت ۱ کیلو اهم، به صورت تقسیم مقاومتی، به RX ماژول sim800l
  • پایه RX میکروکنترلر به کمک یک مقاومت ۱ کیلو اهم، به پایه TX ماژول sim800l
  • پین شماره ۰ پورت B میکروکنترلر با دو مقاومت ۴٫۷ کیلو اهم، به بیس ترانزیستور ۲n2222a
  • اتصال یک عدد مقاومت ۱۰ کیلو اهم، به صورت pulldown به پین شماره ۰ پورت B
  • کلکتور ترانزیستور به پایه ریست ماژول sim800l
  • اشتراک زمین ماژول sim800l و میکرو
  • امیتر ترانزیستور به زمین GND

 


کد  AVR اتصال ماژول Sim800L


کدهای زیر برای تراشه Atmega16 توسعه داده شده است. آن‌ها را کپی کرده و در کامپایلر قرار دهید.

 

 

 


تحلیل کد اتصال ماژول Sim800L


  •  در این برنامه متغیری به نام gsm_check_time تعریف شده است. همچنین در بدنه حلقه بی نهایت برنامه، یک تاخیر یک ثانیه ای یا ۱۰۰۰ میلی ثانیه ای وجود دارد. با اضافه کردن یک واحد در هر مرتبه به این متغیر و با توجه به تاخیر زمانی یک ثانیه ای بین هر دو افزایش، با رسیدن این متغیر به ۶۰۰، ۶۰۰ ثانیه یا ده دقیقه طی شده است.
  • دراین حالت به کمک تابع gsm_check_fault()، وضعیت ماژول چک می‌گردد. به عبارت دیگر هر ده دقیقه یکبار وضعیت صحت کارکرد ماژول را به کمک این رویه کنترل می‌نماییم.
  • در نهایت اینکه پروژه به کمک  بخش code wizard نرم افزار کدویژن ایجاد گردیده است و تابع مربوط به وقفه دریافت داده سریال نیز به کمک این بخش، ایجاد شده است.

 

 

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

 


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


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

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

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

۹ دیدگاه

  • سلام جناب صابری عزیز
    من یه مشکلی با ریست شدن مدارم دارم که به شرح زیر هست
    مدار با nodemcu طراحی کردم که دارای اجزای زیر هست

    چهار تا ماژول رله ۵ ولت

    یکی ماژول gsm a6

    یک ماژول ساعت ds3231

    و آداپتور ۵ ولت ۳ آمپر هم برق لازم را تامین می کنه

    مشکل من این هست که بصورت تصادفی و غیر قابل پیشبینی esp8266 ریست میشه و من از اس ام اس ارسالی که در موقع روشن شدن بورد ارسال می شه متوجه می شم که ماژول ریست شده و این کار مرتب صورت گرفته تا اینگه ظاهرن ماژول gsm من از کار می افته یعنی نمی تونه شبکه رو پیدا کنه و مرتب چراغ سبز چشمک سریع می زنه و تا تنها راه حل راه اندازی ماژول این هست که سیم کارت رو در بیاری و توی یه گوشی بندازی روشن کنی تا شبکه پیدا بشه و بهد دوباره توی ماژول بندازی

    من تا حالا ۲ تا از ماژول های gsm این اتفاق براش افتاده البته مشکل ریست های پی در پی رو همکار شما به خاطر نبودن ماژول اپتوکوپلر رله ها دونستن و من دیروز یه ماژول رله ۴ تایی اپتوکوپلر دار خریدم تا تست کنم ولی همپنان مشکل ریست رو دارم اینکه gsm من از کار می افته چی میتونه باشه

    من ماژول gsm رو به این ترتیب به nodemcu وصل کردم .

    پایه Vcc ماژول gsm رو به ۵ ولت ورودی

    ودر آخر اینکه مدار من چند روز کار می کنه و یکهو شروع به ریست می کنه مثلن از ساعت ۱ شب دیروز هر ۳ دقیقه یکبار ریست انجام میشه و پیامک راه اندازی واسه من ارسال میشه شاید تا حالا ۳۰۰ تا ریست شده و پیامک ارسال شده میشه راهنمایی کنین منو

    پایه گراند gsm به گراند ورودی

    پایه Tx,Rx به node

    • سلام و عرض احترام خدمت جناب دوست حسینی
      در ابتدا از اینکه این رسانه را به عنوان محلی جهت تبادل نظر و رفع اشکال انتخاب نموده اید، سپاسگزارم
      در رابطه با اشکالات مدار فوق، می بایست در نظر داشته باشید که شما در مدار خود، از اجزای مخابراتی با فرکانس های نسبتا بالا استفاده نموده اید که طبیعتا افزایش فرکانس کاری، سبب افزایش توان مصرفی، طبق رابطه زیر خواهد بود:
      P=F*C*V^2
      بنابراین، صرف اینکه شما یک آداپتور ۳ آمپر را جهت تغذیه این مدار سنگین انتخاب نموده اید، نیاز تغذیه سیستم را جبران نمیکند، چرا که غالبا ماژول های مخابراتی دارای پیک های آمپر بسیار بالا هستند و حتی در بعضی موارد مشاهده شده است که ماژول های GSM، برای انجام بعضی از کارها، نیاز به جریان های لحظه ای ۳ آمپری دارند، بنابراین نیاز است که از خازن هایی با ظرفیت مناسب در سیستم تغذیه استفاده گردد و همچنین برای هر کدام از واحدهای مخابراتی، خازن هایی جداگانه در نزدیکترین فاصله نسبت به پایه های تغذیه آنها، استفاده گردد.
      نکته بعدی، جداسازی سیستم های تغذیه هر واحد است. در این مدار، با توجه به وجود ماژول های پر مصرف، توصیه می گردد که تغذیه هر واحد، یعنی واحد GSM، واحد وای فای و واحد میکروکنترلر، از یکدیگر جدا شود.
      به عنوان نکته آخر، در رابطه با NODEMCU، در نظر داشته باشید که چنانچه از فریمور LUA، برای آن استفاده می نمایید، این فریمور کمی سنگین بوده و بخشی نسبتا قابل توجهی از حافظه ماژول ESP را به خود اختصاص می دهد که طبیعتا نمی توان انتظار انجام کارهای سنگین را از آن داشت. به طوریکه طبق تجربه در سال های قبل، در صورتیکه کمی برنامه نوشته شده به زبان LUA سنگین شود، واحد WATCH DOG این ماژول فعال شده و NODEMCU ریست می گردد، شاید دلیل ریست این ماژول و در ادامه ریست واحد GSM، برنامه بیش از حد سنگین قرار گرفته، بر روی این ماژول باشد.
      در پایان، امیدوارم نکات فوق، گره گشای کار شما باشد.

      • ممنونم جناب مهندس عزیز من موارد رو چک می کنم و امیدوارم مشکلم حل بشه
        اگه اجازه بدین یه سوال دیگه از شما دوست گرامی بپرسم
        من از پایه های D5و D8 یا به عبارتی از پایه های gpio14 و Gpio15 خروجی گرفتم و به یه ترانزیستور ۲n3904 زدم و از پایه اون ترانزیستور به پایه دستور رله متصل کردم
        من براحتی رله ها رو خاموش و یا روشن می کنم فقط مشکل من این هست که زمان روشن شدن و یا ریست شدن nodemcu ، یه لحضه رله ها وصل میشن و خاموش میشن یعنی ۱ ثانیه به حالت اکتیو میرن و قطع میشن و این باگ هست چون اگه رله متصل به قفل درب منزل باشه اون درب باز میشه
        چطوری من جلوی این مشکل رو بگیرم استاد عزیز…

        • از لطف شما سپاسگزارم
          شما در این حالت نیاز دارید که رله شما، بدون اینکه فرمانی از میکروکنترلر دریافت کنند، به صورت پیشفرض، وصل و یا قطع باشند. بدین منظور، نیاز است پایه بیس ترانزیستور متصل به رله، پول داون و یا پول آپ شود. در صورت پول آپ شدن، یعنی اتصال پایه بیس ترانزیستور با یک مقاومت مثلا ۱۰ کیلویی به مثبت تغذیه، ترانزیستور به صورت پیشفرض روشن می ماند. در نتیجه رله نیز متصل خواهد بود و تنها در صورتیکه میکروکنترلر، پالس ۰ منطقی به ترانزیستور اعمال نماید، ترانزیستور خاموش شده و در پی آن رله قطع می گردد. شرایط برعکس این حالت نیز صادق خواهد بود، به طوریکه اگر پایه بیس ترانزیستور، پول داون گردد، یعنی به کمک یک مقامت مثلا ۱۰ کیلویی به زمین متصل شود، ترانزیستور به صورت پیشفرض خاموش خواهد بود و این امر سبب قطع شدن رله می شود. در این حالت، تنها با اعمال پالس یک منطقی از سوی میکروکنترلر، ترانزیستور روشن خواهد شد و سپس رله، متصل می گردد.

          • ممنونم جناب مهندس گرامی
            واقعن راهنمایی های بسیار هوشمندانه و کاملا درستی رو ارائه می دین خیلی ممنونم
            و اینکه جناب مهندس من دو تا ماژول gsm GA6-B دارم که وقتی سیم کارت جدید توش می زاری خوب با شبکه ارتباط می گیره و کار میکنه ولی اگه در حین کار مدار خاموش بشه و یا از برق قطع بشه زمان راه اندازی مجدد ماژول دیکه نمیتونه با شبکه ارتباط بگیره و اگه به سیم کارت زنگ بزنی که میگه در دسترس نمی باشد و یا میگه خاموش می باشد
            حالا تنها راه موجود این هست که من سیم کارت را در بیارم از ماژول و توی یه گوشی موبایل بندازم و روشن کنم تا شبکه وصل بشه بعد دوباره توی ماژول بندازم و ایندفه ارتباط وصل میشه تا زمانی که ریست و یا خاموش نشه کار می کنه
            برق و همه ی مسائل هم چک کردم
            حتی زمان عدم برقراری ارتباط ماژول gsm رو از مدار جدا کردم و بصورت جداگانه با برق ۳آمپر ۵ وات چک کردم و باز هم نتوانست با شبکه ارتباط بگیره
            شایان ذکر هست آنتن اکسترنال هم بهش متصل کردم و بازه نه!!!
            مهندس مشکل از چی میتونه باشه و میشه من دستی به شبکه متصلش کنم!!!
            و این مشکل و من با همه ی سیم کارت ها دارم
            مخابرات ایرانسل رایتل همه رو چک کردم

          • جناب مهندس من دو تا ماژول gsm GA6-B دارم که وقتی سیم کارت جدید توش می زاری خوب با شبکه ارتباط می گیره و کار میکنه ولی اگه در حین کار مدار خاموش بشه و یا از برق قطع بشه زمان راه اندازی مجدد ماژول دیکه نمیتونه با شبکه ارتباط بگیره و اگه به سیم کارت زنگ بزنی که میگه در دسترس نمی باشد و یا میگه خاموش می باشد
            حالا تنها راه موجود این هست که من سیم کارت را در بیارم از ماژول و توی یه گوشی موبایل بندازم و روشن کنم تا شبکه وصل بشه بعد دوباره توی ماژول بندازم و ایندفه ارتباط وصل میشه تا زمانی که ریست و یا خاموش نشه کار می کنه
            برق و همه ی مسائل هم چک کردم
            حتی زمان عدم برقراری ارتباط ماژول gsm رو از مدار جدا کردم و بصورت جداگانه با برق ۳آمپر ۵ وات چک کردم و باز هم نتوانست با شبکه ارتباط بگیره
            شایان ذکر هست آنتن اکسترنال هم بهش متصل کردم و بازه نه!!!
            مهندس مشکل از چی میتونه باشه و میشه من دستی به شبکه متصلش کنم!!!
            و این مشکل و من با همه ی سیم کارت ها دارم
            مخابرات ایرانسل رایتل همه رو چک کردم

  • جناب مهندس من دو تا ماژول gsm GA6-B دارم که وقتی سیم کارت جدید توش می زاری خوب با شبکه ارتباط می گیره و کار میکنه ولی اگه در حین کار مدار خاموش بشه و یا از برق قطع بشه زمان راه اندازی مجدد ماژول دیکه نمیتونه با شبکه ارتباط بگیره و اگه به سیم کارت زنگ بزنی که میگه در دسترس نمی باشد و یا میگه خاموش می باشد
    حالا تنها راه موجود این هست که من سیم کارت را در بیارم از ماژول و توی یه گوشی موبایل بندازم و روشن کنم تا شبکه وصل بشه بعد دوباره توی ماژول بندازم و ایندفه ارتباط وصل میشه تا زمانی که ریست و یا خاموش نشه کار می کنه
    برق و همه ی مسائل هم چک کردم
    حتی زمان عدم برقراری ارتباط ماژول gsm رو از مدار جدا کردم و بصورت جداگانه با برق ۳آمپر ۵ وات چک کردم و باز هم نتوانست با شبکه ارتباط بگیره
    شایان ذکر هست آنتن اکسترنال هم بهش متصل کردم و بازه نه!!!
    مهندس مشکل از چی میتونه باشه و میشه من دستی به شبکه متصلش کنم!!!
    و این مشکل و من با همه ی سیم کارت ها دارم
    مخابرات ایرانسل رایتل همه رو چک کردم

    • سلام و باز هم از لطف شما سپاسگزارم
      به نظر می رسد ماژول نمی تواند وضعیت خود را به درستی به شبکه اعلام نماید. بدین صورت که نمی تواند به عنوان خط خاموش شده به شبکه اعلام وضعیت نماید. البته، این، یک حدس است که می بایست مورد آزمایش قرار گیرد. به همین دلیل، شما در ابتدای برنامه، ابتدای یک بار ماژول را خاموش و سپس روشن نمایید. بدین منظور، پس از گذشت یک زمان معقول از شروع برنامه، مثلا در حدود یک دقیقه از شروع برنامه، ابتدا ماژول را با دستور زیر خاموش نمایید:
      AT+CFUN=0,0
      سپس پس از گذشت زمانی در حدود مثلا یک دقیقه، ماژول را با دستور زیر، ریست نمایید:
      AT+CFUN=1,1
      لطفا مورد بالا را تست نموده و نتیجه را نیز اعلام فرمایید.