آردوینو پروژه های آردوینو

پروژه سیستم هشدار افت ولتاژ باتری خودرو با پیامک و Sim800L آردوینو

car-battery-voltage-alarm-with-arduino-and-sim800l-digispark
نوشته شده توسط معین صابری

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

 


جدول وضعیت ولتاژ باتری خودرو


پیش از اینکه نحوه طراحی و پیاده سازی سیستم را با هم مشاهده کنیم، به صورت مختصر به رابطه ولتاژ و شارژ باتری های خودرو می پردازیم. باتری های خودرو دارای ولتاژ ۱۲ هستند. البته این ولتاژ به صورت اسمی بوده و در حالت رسمی این باتری ها به صورت شارژ کامل دارای ولتاژ ۱۲٫۶ الی ۱۲٫۸ و در حالت تخلیه ولتاژی در حدود ۱۰ خواهند داشت. زمانیک که خودرو روشن می شود، سیستم دینام(آلترناتور) پس از یکسوسازی ولتاژ ایجاد شده از طریق دیود دینام، باتری خودرو را شارژ خواهد نمود. جدول زیر وضیت شارژ باتری خودرو را نسبت به ولتاژ های مختلف نمایش می دهد.

جدول ولتاژ باتری خودرو - دیجی اسپارک

 

مطابق جدول فوق، ولتاژ ۱۲٫۶ و بیشتر نشان از شارژ کامل باتری دارد. زمانیکه این ولتاژ به حدود ۱۲٫۰۶ می رسد، باتری به نیمه شارژ خود رسیده و با ورود به ولتاژ ۱۱٫۷۵، باتری در حالت تخلیه قرار می گیرد. با ادامه این روند و رسیدن باتری به ولتاژ ۱۰٫۵، باتری به طور کامل تخلیه خواهد شد. در این پروژه به کمک برد آردوینو ولتاژ باتری را اندازه می گیریم. چنانچه این ولتاژ به کمتر از ۱۲ برسد، با ارسال پیامک به کاربر، مورد را اطلاع خواهیم داد. در ادامه این آموزش با قطعات پروژه آشنا شده و در نهایت شماتیک، برنامه و اجرای آن را خواهیم دید.

 


برد آردوینو UNO


سیستم دیتالاگر جهت دریافت داده های سنسور، پردازش و ذخیره آن، نیاز به یک برد کنترلی/پردازشی دارد. برد آردوینو UNO، یک برد فوق العاده کاربردی در نمونه سازی اولیه و حتی محصول نهایی است. به کمک این برد به سادگی می توانید سنسورها، نمایشگرها و ماژول های مختلفی را به آن متصل کنید. این برد راه اندازی و کار با میکروکنترلر را بسیار ساده می کند. کافیست به کمک یک کابل آن را به رایانه متصل کنید. سپس به سادگی و بدون نیاز به هیچ پروگرامر جانبی، می توانید برنامه را بر روی آن منتقل کنید.

 

بر روی برد آردوینو UNO تمام ملزومات لازم جهت راه اندازی برد تعبیه شده است. از جمله این ملزومات می توان به کریستال و خازن های کاهش نوسان ولتاژ اشاره نمود. همچنین بر روی این برد یک رگولاتور ۳٫۳ ولت جهت تغذیه ماژول های مختلف قرار گرفته است. به طور کلی استفاده از برد آردوینو در پروژه ها، سبب تسریع و تسهیل روند توسعه خواهد شد. در این پروژه برد آردوینو UNO به عنوان هسته مرکزی پردازش ولتاژ باتری خودرور را خوانده و در صورت افت ولتاژ، به کاربر پیامک ارسال می نماید. از طرفی با توجه به رگولاتور تعبیه شده روی برد، می تونید برد را به طور مستقیم از باتری خودرو تغذیه نمایید.

 


ماژول SIM800L


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

  • ولتاژ کاری بین ۳٫۴ الی ۴٫۴
  • قابلیت کار در فرکانس های ۸۵۰/۹۰۰/۱۸۰۰/۱۹۰۰
  • قابلیت برقراری تماس صوتی دو طرفه
  • قابلیت ارسال و دریافت پیامک
  • قابلیت اتصال به اینترنت و ارسال و دریافت داده
  • پشتیبانی از پروتکل های FTP،HTTP،SMTP و….

ماژول Sim800L برای ساخت دوربین سیم کارتی

 

در این پروژه ما از این ماژول جهت ارسال پیامک حاوی اطلاعات خودرو به کاربر استفاده می کنیم. از آنجاییکه ولتاژ کاری این ماژول بین ۳٫۴ الی ۴٫۲ قرار می گیرد، لذا از طریق باتری لیتیمی به صورت مستقیم و بدون واسط می توانیم این ماژول را تغذیه نماییم. برای راه اندازی و کار با این ماژول کاربردی سلسله آموزشی طی ۱۱ مرحله منتشر شده که با کلیک بر روی این لینک می توانید این آموزش ها را دنبال و مطالعه کنید


ماژول کاهنده ولتاژ LM2596


ماژول کاهنده ولتاژ LM2596، یکی از کاربردی ترین ماژول ها در جهت تغذیه مورد نیاز قطعات و ماژول های مختلف است. به کمک این ماژول می توانید ولتاژ مورد نظر خود را در خروجی تنظیم کنید. خروجی توان این ماژول ۳ آمپر بوده و کاملا مناسب تغذیه ماژول SIM800L است. با توجه به اینکه ماژول SIM800L دارای بازه تغذیه ۳٫۴ الی ۴٫۴ بوده و در لحظه اول راه اندازی نیاز به جریان دو آمپر دارد، ماژول کاهنده ولتاژ LM2596 برای تغذیه ماژول SIM800L، بسیار کاربردی خواهد بود.

Activation of relays via DTMF call with voice report

 

در این پروژه به کمک این ماژول ولتاژ ۱۲ ولت باتری خودرو را به ۴٫۲ ولت که مناسب ماژول SIM800L است کاهش می دهیم. دقت داشته باشید که ابتدا ولتاژ خروجی ماژول را به کمک مولتی ترن آن کاهش داده و سپس به ماژول SIM800L متصل نمایید.

 


شماتیک و اتصالات


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

شماتیک اتصالات پروژه هشدار ولتاژ باتری خودرو با پیامک Sim800L - دیجی اسپارک

 

مطابق تصویر فوق، اتصالات بین برد آردوینو و ماژول SIM800L را به شکل زیر انجام دهید. پیش از برقراری اتصالات ماژول SIM800L توجه داشته باشید که خروجی ماژول کاهنده LM2596 را پیش از اتصال به ماژول SIM800L، بر روی ۴٫۲ ولت تنظیم نمایید. این ماژول ورودی خودر را مطابق تصویر از باتری خودرو دریافت می کند. برای دریافت تغذیه باتری، از سیم کشی خودرو سیمی به طور مستقیم از باتری خودرو دریافت نمایید.

  • اتصال پایه VCC ماژول SIM800L به خروجی مثبت ماژول کاهنده ولتاژ
  • اتصال پایه GND ماژول SIM800L به خروجی منفی ماژول کاهنده ولتاژ
  • اتصال پایه TX ماژول SIM800L به پایه RX(0) برد آردوینو
  • اتصال پایه (۱)TX آردوینو با دو مقاومت به صورت تقسیم مقاومتی به RX آردوینو

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

  • R2: یک مقاومت یک کیلو اهم
  • R1: دو مقاومت ۱۰ کیلو و ۴٫۷ کیلو اهمی به صورت سری

چنانچه در رابطه با تقسیم مقاومتی و محاسبات آن آشنایی ندارید، می توانید آموزش جامع آن را با کلیک بر روی این لینک مطالعه نمایید.  در ادامه، توجه داشته باشید که برد آردوینو تغذیه خود را به صورت مستقیم از باتری خودرو تامین می نماید. شما با اتصال سیم مثبت تغذیه باتری به پایه VIN آردوینو و کابل بدنه(منفی) باتری خودرو به پایه GND، می توانید آردوینو را راه اندازی کنید. توجه داشته باشید که در این حالت جهت اطمینان، در مسیر کابل مثبت باتری به ورودی کاهنده و پایه VIN آردوینو، یک فیوز به صورت سری قرار می گیرد.

 


کدهای پروژه


در این قسمت کدهای پروژه را مشاهده می کنید. این کدها برای برد آردوینو توسعه یافته اند. توجه داشته باشید که پیش از آپلود کدها، کابل متصل به پایه RX آردوینو را جدا کرده و پس از آپلود مجددا متصل نمایید.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 


اجرای پروژه


در این قسمت به اجرای پروژه می پردازیم. در اینجا ما جهت تست، از یک باتری لیتیم پلیمر استفاده می کنیم. از آنجاییکه ولتاژ این باتری در حدود ۴ بوده و از ۱۲ بسیار کمتر است، بنابراین پیامک هشدار را مطابق تصویر زیر دریافت می کنیم.

پیامک سطح ولتاژ باتری خودرو با Sim800l - دیجی اسپارک

 

همچنین در هنگام اجرای برنامه، اطلاعات مربوطه و روال اجرا در سریال مانیتور مطابق تصویر زیر، نمایش داده می شود.

سریال مانیتور آردوینو Arduino - دیجی اسپارک

 

در این پروژه از آنجاییکه برد آردوینو UNO دارای رگولاتور داخلی است، بنابراین شما می توانید به سادگی با برق خودرو آن را تغذیه نمایید. همچنین به کمک ماژول کاهنده LM2596، می توانید ولتاژ ۴٫۲ مخصوص ماژول SIM800L را تامین نمایید. از طرفی جهت جلوگیری از ارسال مداوم پیامک در صورت تشخیص افت ولتاژ، پس از ارسال پیام هشدار به کاربر، برای نیم ساعت دیگر صبر کرده و چنانچه مجددا ولتاژ پایین بود، مجددا پیامک به کاربر ارسال می گردد.

اتصالات پروژه هشدار پیامکی ولتاژ باتری خودرو - دیجی اسپارک

 


تحلیل کدهای پروژه


در این قسمت به تحلیل و بررسی کدهای پروژه به طور مختصر می پردازیم، چراکه درون کدهای برنامه توضیحات به صورت خط به خط درج شده که با مطالعه آن می توانید روال کلی کار را دریابید. در این پروژه ابتدا تابع زیر وضعیت اتصال ماژول به شبکه را کنترل می کند.

check_connect();

تابع فوق منتظر اتصال ماژول GSM به شبکه مانده و سپس اجرای برنامه را از سر می گیرد. پس از اتصال به شبکه در قسمت LOOP، ولتاژ باتری خوانده شده و در صورت کاهش ولتاژ باتری به کمتر از ۱۲ ولت، به کمک تابع send_sms پیامک هشدار به کاربر ارسال می شود. توجه داشته باشید که در این برنامه ابتدا پیامک به کاربر ارسال شده و سپس جهت جلوگیری از ارسال مداوم پیامک، پس از گذشت نیم ساعت، در صورتیکه ولتاژ همچنان از حد مجاز کمتر بود، به کاربر پیامک ارسال می گردد.  در این پروژه کنترل زمان به کمک تابع millis() صورت می گیرد. پس از گذشت هر نیم ساعت، مقدار خروجی تابع millis در یک متغیر ذخیره می گردد. در این حالت، تابع millis مقدار فعلی خود را با مقدار متغیر مقاسه کرده و در صورتیکه این اختلاف ۳۰ دقیقه باشد، متغیر مخصوص ارسال پیامک را false کرده تا ارسال پیامک در صورت کم بودن ولتاژ، انجام شود.

 


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


  1. مقاومت یک کیلو اهمی
  2. مقاومت ۱۰ کیلو اهمی
  3. مقاومت ۴٫۷ کیلو اهمی
  4. برد آردوینو UNO
  5. ماژول SIM00L
  6. ماژول کاهنده ولتاژ با ورودی ۴ الی ۶۰ LM2596HVS
  7. فیوز
  8. پایه فیوز

 


جمع بندی


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

 

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

 

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

معین صابری

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

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

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

۱۵ دیدگاه

  • با سلام اگر چنانچه بخواهیم دستگاه با ارسال پیامک از کاربر ( از طریق هر شماره دلخواه) میزان شارژ باتری را در قابل پیامک ارسال کند چه تغییری در کد برنامه باید داده شود؟

      • اگه ممکنه کدهاشو بنویسید من هر چی گشتم پیدا نکردم
        من میخوام به شماره سیم کارت ماژول از هر سیم کارت دلخواه پیامک بدم و مثلا بنویسم BAT? و ماژول بلافاصله به همون شماره که پیام داده و این کلمه رو ارسال کرده مقدار ولتاژ رو در قالب پیامک بفرسته

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

              • data = data.substring(data.indexOf(“REC UNREAD”) + 1, data.indexOf(“”));

                آیا دستورش این هست برای دریافت و ذخیره شماره فرستنده پیام؟

                • بله
                  به نظر این خط کد برای دریافت شماره تماس کار کند، مورد را تست کنید و پس از دریافت شماره تماس متغیر data را در سریال پرینت کنید تا از صحت دیتای ارسالی مطمئن شوید.

  • با سلام ماژول sim800L رو زمانی که به پایه های RX و TX آردویینو متصل میکنم روشن نمیشه و هر چی تماس میگیرم میگه خاموش میباشد
    ماژول به تنهایی کار میکنه ، بوق میخوره دلیلش چی میتونه باشه؟

    • سلام
      لطفا تصویری از اتصالات خود گرفته و در یکی از سرویس های اشتراک گذاری فایل آپلود کنید. سپس لینک آن را در کامنت بعدی قرار دهید تا مورد بررسی شود. تغذیه ماژول و آردوینو را چگونه تامین می کنید؟

      • طبق شکل انجام دادم البته این مشکل فعلا حل شد و پروژه ران شد و پیامک باتری ضعیف است حتما دریافت کردم اما مد نظرم این هست که بتونم در هر لحظه از ولتاژ باتری خبردار بشم که در بالا شرح دادم

  • سلام خسته نباشید من تمام اتصالات به طور دقیق وصل کردم ولی وقتی برنامه رو ران میکنم تا قبل از این قسمت کد که در ادامه گذاشتم میخونه ولی بعدس روی (“AT+CCALR) میمونه و به قسمت های بعدی کد که مربوط به فرستادن پیامک هستش نمیره و اونارو اجرا نمیکنه
    میتونه مشکل از ماژول سیم کارت باشه یا سیم کشی چون وقتی به سیم کارتی که توی ماژول هستش زنگ میزنم خاموشه
    اگر میشه یک راهنمایی کلی کنید ممنون میشم

    ccalr Serial.print(“AT+CCALR?\r\n”); // ارسال دستور AT+CCALR به ماژول، در صورتیکه ماژول به شبکه متصل گردد ماژول عبارت CCALR: 1 را بر میگرداند
    if (Serial.find(ccalr) == true) // نتیجه تابع find در صورتی true می شود که عبارت مورد نظر یافت شده باشد، در غیر اینصورت درون حلقه تا زمانیکه نتیجه مورد نظر یافت نشود، باقی خواهد ماند
    break; // خروج از حلقه با یافتن پیام مورد نظر
    }
    Serial.println(“CONNECTED TO NETWORK”);
    Serial.flush();
    }
    void send_sms() {
    String number = “+989************”;
    Serial.print(“AT+CMGS=\”” + number + “\”\r\n”);
    Serial.flush();
    delay(1000);
    Serial.println(“ALARM: BATTERY VOLTAGE IS LOW”);//ارسال متن پیام
    Serial.flush();
    delay(1000);
    Serial.write(0x1a); //کاراکتر ctrl+z جهت ارسال پیام
    delay(5000);
    }

  • سلام دوباره ببخشید در قسمت کد ما باید این مواردی که جلوش پرانتز هستش رو پر کنیم
    void send_sms()
    Serial.flush();
    void check_connect
    یا نمیخواد