پژوهشگر: سعید لیلی زاده استاد راهنما: دکتر علی بهلولی

ایمیل: saeedyliel@gmail.com

 

دانشگاه اصفهان
دانشکده مهندسي  کامپیوتر
گروه مهندسی معماری کامپيوتر

گزارش پروژه کارشناسی
رشته‌ مهندسی کامپيوتر گرايش سخت‌افزار

 

عنوان پروژه
طراحی و ساخت بستر سخت‌افزاری و نرم‌افزاری مبتنی بر سیستم عامل اندروید برای پیاده‌سازی اینترنت اشیا

استاد راهنما:
دکتر علی بهلولی

 

 

پژوهشگر:
سعید لیلیزاده

شهريور 1395


 

چکيده:

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


واژگان کليدي: اینترنت اشیا، ارتباط بیسیم، میکروکنترلر، ماژول ESP


مقدمه

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

1-1- هدف پروژه

در این قسمت ابتدا پروژه معرفی شده و سپس هدف از انجام آن بیان شده است و این که این پروژه چه کاری را انجام می‌دهد شرح داده شده است

1-1-2- معرفی پروژه

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

  1. عدم نیاز به سیم کشی
  2. تغیر پذیر بودن مکانهای فیزیکی سنسورها
  3. وجود مودم (اکسس پوینت) در اکثر خانههای امروزی برای تشکیل شبکه بین نودها
  4. ارزان بودن ماژول وایفای

با توجه به موارد فوق میتوان فهمید بهترین گزینه برای زیرساخت ارتباطی در اینترنت اشیا استفاده از شبکه بیسیم میباشد. این پروژه همان گونه که در شکل 1-1 نشان داده شده از سه قسمت تشکیل شده است:

  1. بوردی که از طریق ماژول وایفای به access point وصل می‌شود و وظیفه ارتباط با گوشی را بر عهده دارد در این پروژه این بورد با نام نُود آورده شده است.
  2. بورد سنسوری که به نود طراحی شده، از طریق کانکتور‌های روی آن وصل می‌شود. این بورد به وسیله پروتکلی که تعریف می شود به نود وصل می‌شود (پروتکل سخت‌افزاری و نرم‌افزاری).
  3. نرم افزار اندرویدی که از طریق وایفای بهaccess point وصل شده و می‌تواند با نود ارتباط برقرار کند و اطلاعات مربوط به سنسور متصل شده به آن را مشاهده کند.

شکل 1-1: شکل کلی پروژه

1-2-کاربردهای پروژه

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


مفاهیم

2-1- مقدمه

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

2-2- موارد نرمافزاری

در این بخش نرمافزار‌های که مورد استفاده قرار می‌گیرد معرفی شده‌اند

2-2-1- نرمافزار Atmel Studio

از این نرمافزار برای نوشتن برنامه میکروکنترلر استفاده شده است Atmel Studio یک IDE میباشد که در آن میتوان به زبان C برای میکروکنترلر برنامهنویسی کرد Atmel Studioمحیط توسعه یکپارچه (IDE) برای توسعه و برنامه‌نویسی میکروکنترلر‌های AVR و ARM می‌باشد. این نرم‌افزار که در نسخه قبلی از نظر شکل ظاهری بسیار زیباتر از نسخه‌های قبل‌تر شده بود، این بار با یک تغییر نام کوچک و یک تغییر بزرگ آمده است. 6 Atmel Studio که در نسخه‌های قبلی با نام AVR Studio ارائه می‌شد یک امکان بسیار مهمی به آن افزوده شده است و آن هم این است که شما می‌توانید با این نسخه برای میکروهای سری ARM شرکت اتمل نیز برنامه نویسی کنید. سری AVRنیز پیشرفت بسیاری پیدا کرد و خصوصا در کشور ما جایگاه ویژه‌ای باز کرده است. اما باز با این حال سری ARM ویژگی‌های منحصر به فرد خود را دارد. برای همین دلیل هم شرکت اتمل با این نرم‌افزار امکانی را برای کاربران خود فراهم کرده است تا بتوانند با یک نرم افزار برای هر دو سری این میکروکنترولرها برنامه‌نویسی کنند. شرکت ATMEL این نرم افزار را به صورت کاملا رایگان منتشر کرده است و شما می‌توانید بدون هیچ گونه صرف هزینه‌ای از تمام امکانات این نرم‌افزار که توسط خود شرکت سازنده AVR و ARM ارائه شده استفاده کرده و لذت ببرید. Atmel Studio از تمامی میکروکنترلرهای خانواده AVR و برخی از میکروکنترلرهای مبتنی بر هسته ARM که توسط شرکت Atmel تولید شده‌اند، پشتیبانی می‌کند، این کامپایلر دارای ویژگی های به شرح زیر است: • ویرایشگر کاملا هوشمند با قابلیت شناسایی کلیه دستورات • پشتیبانی از دستورات استاندارد زبان C و کتابخانه‌های آن • پشتیبانی از تمامی پروگرمرها و دیباگرهای ارائه شده توسط شرکت اتمل • منابع آموزشی متنوع و راهنمای قدرمند • قابلیت برنامه‌نویسی، شبیه‌سازی، مدیریت پروژه، دیباگ و اشکال‌یابی برای تمامی میکروکنترلرهای AVR • و …

2-2-2- نرمافزار Android Studio

از این نرمافزار برای تولید برنامهی کاربردی مخصوص سیستمعامل اندروید استفاده شده است. این نرم‌افزار IDE رسمی اعلام شده از طرف شرکت گوگل برای توسعه برنامههای اندروید برای انواع وسایل اندرویدی مانند گوشیهای موبایل، تبلت، تلویزیون و... میباشد. این IDE از زبان جاوا استفاده میکند. تصویر این نرمافزار در شکل 2-1 آمده است.

شکل 2-1: محیط نرم افزار Android Studio

اندروید استودیو یک محیط برنامه نویسی برای پلتفرم اندروید است. این برنامه در ۱۶ می ۲۰۱۳ توسط مدیران گوگل در کنفرانس گوگل آی/او معرفی شد. از ماه جوئن ۲۰۱۳ نسخه پیش نمایش این برنامه (به صورت رایگان) برای امتحان در دسترس توسعه دهنده‌ها قرار گرفت. این محیط بر اساس نرم‌افزار محبوب جت‌برینز طراحی شده است، این استودیو بطور اختصاصی برای اندروید طراحی شده است. هم اکنون این استودیو برای دانلود بر روی ویندوز، مک و لینوکس در دسترس می‌باشد. این برنامه دارای امکانات بسیار زیادی می‌باشد که در زیر به آن‌ها اشاره شده است - سیستم build جدید بر پایه Gradle - طراحی ویژوال، drag-and-drop و Real-time رابط کاربری برنامه‌ها - ویرایشگر کد هوشمند بر پایه IntelliJ IDEA - ابزار‌هایی برای پیدا کردن مشکلات کارایی - هماهنگی با سیستم‌های کنترل ورژن و ... اندروید استودیو در زمینه خطایابی امکانات مناسبی در اختیار توسعه‌دهنده قرار می‌دهد. زمان تولید و اجرای برنامه، می‌توانیم لاگ‌های مربوط به adb و دستگاه (logcat) را در پانل DDMS با کلیک روی "Android" در پایین پنجره مشاهده کنیم. یکی دیگر از امکانات اندروید استودیو امکان دسترسی مستقیم به تمام امکانات Android Virtual Device Manager است با پیش نمایش زنده میتوانیم حتی با تغییر اندازه فونت سریعا خروجی را مشاهده خواهیم کرد. می توانیم ویجت ها را با درگ-دراپ در صفحه قرار دهیم و یا در زمان ویرایش‌XML، پیش‌نمایش زنده آن را مشاهده کنیم. می توانیم تنظیمات پنجره پیش‌نمایش (مانند دستگاه، نسخه سیستم عامل و...) که در سمت راست نرم‌افزار قرار دارد را تغییر دهیم. با فعال کردن Preview All Screen Sizes امکان مشاهده همزمان خروجی در سایزهای مختلف فعال خواهد شد.

2-2-3- نرمافزار progisp

برای پروگرم کردن میکروکنترلر از این نرمافزار استفاده شده است. PROGISP یکی از نرم افزارهایی است که پروگرمر USBASP را پشتیانی می‌کند در ادامه به معرفی این نرم افزار می‌پردازیم. در این نرم‌افزار برای پروگرم کردن می‌بایست ابتدا اسم میکروکنترلر مورد استفاده را از لیست سمت چپ انتخاب شود سپس از طریق گزینه load flash می‌توان فایل .hex برنامه نوشته شده را در این برنامه لود کرد و با زدن دکمه auto برنامه لود شده را در میکرو پروگرم می‌شود. تصویر این نرمافزار در شکل 2-2 آمده است

شکل 2-2: محیط نرم افزار progisp

2-2-4- نرمافزار Altium Designer

نرم افزار Altium Designer یا همان PROTEL DXP نرم‌افزار قدرتمندی است که برای پیاده‌سازی شماتیک، طراحیPCB و آنالیز مدارهای آنالوگ و برخی مدار‌های دیجیتالی طراحی شده است. یکی از مزایای این نرم‌افزار دسته‌بندی مناسب کتابخانه‌ها به نحوی است که با صرف زمان کوتاهی قطعه مورد نظر را خواهید یافت. نرم افزار Altium Designer توانسته است که طراحی را از لحاظ نرم‌افزاری و سخت‌افزاری به صورت یک‌پارچه در آورد. هوش مصنوعی در این نسخه به قدری تقویت شده که شما بدون هیچ مشکلی می‌توان طرح‌های خود را به سرعت طراحی و اشکال‌زدایی کرد همچنین قادر خواهید بود برای مدارات طراحی شده فیبر مدار چاپی آماده کنید و از آن ها برای ساخت مدارات استفاده نمایید. برای کشیدن شماتیک مدار طراحی شده و همچنین pcb آن از ورژن 13.2 این نرم افزار استفاده شده است که محیط آن در شکل 2-3 نشان داده شده است.

شکل 2-3: محیط نرم افزار آلتیوم دیزاینر

2-2-5- نرمافزار Proteus

از این نرمافزار برای طراحی و شبیهسازی مدارهای الکترونیکی استفاده می‌شود که در این پروژه به منظور شبیه‌سازی مدارها در برخی موارد خاص استفاده شده است.

2-3- موارد سختافزاری در این بخش مفاهیم مورد نیاز قسمت سخت افزاری پروژه شرح داده شده است

2-3-1- میکروکنترلر

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

شکل 2-4: میکروکنترلر

AVRدر ابتدا یک خانواده از میکروکنترلر‌های ۸ بیتی بود که در سال ۱۹۹۶ برپایه معماری تغییر یافته هاروارد طراحی و ساخته شد و توسط شرکت Atmel روانه بازار‌های جهانی شد. این میکروکنترلر یکی از پرفروش‌ترین میکروکنترلر‌ها در کل جهان به شمار می‌آید که تاکنون در پروژه‌های متعدد علمی، تحقیقاتی و تجاری گوناگونی به کار گرفته شده است. AVR سری های مختلفی را شامل می‌شود و فرآیند توسعه این خانواده از میکروکنترلر‌ها همچنان ادامه دارد. از شناخته شدهترین سریهای AVR می توان به سری Attiny,Atmega,AtXmega اشاره نمود .در حال حاضر AVR در سریهای مختلف و متنوعی با توانهای پردازشی گوناگون، ظرفیتهای حافظهای مختلف و سرعت پردازش متفاوت در بازارهای جهانی موجود است. اما چیزی که در حال حاضر در کشورمان به صورت عمومی و گسترده استفاده می شود، سری Atmega از خانواده AVR است که به علت قیمت مناسب و توان پردازش بالا مورد استقبال قرار گرفته است.

2-3-2- ماژول وایفای (ESP-201)

این ماژول برای برقرای ارتباط بیسیم میکروکنترلر و اکسس‌پوینت (مودم) استفاده شده است ماژول ESP8266 مدلEPS-201 یکی از ماژولهای WiFi میباشد که امکان ارتباط با شبکه Wifi را از طریق ارتباط سریال فراهم میکند، تفاوتی که این ماژول نسبت به سری قبلی این خانواده دارد این است که آنتن دهی این ماژول با اضافه کردن آنتن مخصوص تقویت شده است، لذا بدیهی است که همراه این محصول آنتن مخصوص آن نیز ارائه میگردد که در شکل 2-5 نشان داده شده است کار کردن با این ماژول از طریق پورت سریال بوده و صرفاً مبتنی بر ارسالAT command ها به ماژول میباشد. از مصرف انرژی این ماژول نیز نباید غافل بود که این پارامتر مقدار بسیار ناچیزی دارد. پردازنده داخلی این ماژول از سری پردازندههای 32 بیتی بوده که تغذیه آن 3.3 ولت و توان آن کمتر از 1 میلی وات میباشد. موارد مصرف این ماژول در تجهیزاتی چون اتوماسیون خانگی، تجهیزات پزشکی، مانیتورینگ بیسیم، سیستمهای هوشمند و به طور کلی تجهیزات BMS میباشد.

شکل 2-5: ماژول وایفای ESP-201

2-3-3- اکسس‌پویت (مودم) در این پروژه اکسس‌پویت شبکهای که قسمت‌های مختلف به آن وصل می‌شوند را می‌سازد و گوشی موبایل و نودهای طراحی شده از این طریق می‌توانند با هم ارتباط برقرار کنند. اگر نیاز به ارتباط با بیرون شبکه باشد از طریق مودم میتوان کل شبکه داخلی را به اینترنت وصل کرد. شکل 2-6 یک اکسس پوینت را نشان میدهد

شکل 2-6: مودم (اکسس پونت)

2-3-4- پروگرمر USBASP

برای این که برنامه نوشته شده برای میکروکنترلر را بتوانیم بر روی آن اجرا کنیم نیاز است تا ابتدا آن را به میکروکنترلر منتقل کنیم این کار توسط پروگرمر انجام می‌شود پرگرمر‌ها انواع مختلفی دارند یکی از انواع پروگرمر که برای برنامه‌ریزی میکروکنترلر‌های AVR استفاده می‌شود پروگرمر USBASP می‌باشد پروگرمری که در این پروژه استفاده شده است از این نوع هست که در شکل 2-7 نشان داده شده است

شکل 2-7: پروگرمر usbasp

2-3-5- سنسور دما

از این سنسور در این سیستم به عنوان مثالی که نقش سنسور را در اینترنت اشیا ایفا می‌کند برای تست استفاده می‌شود

2-3-6- مقاومت، خازن، LED، پتانسیومتر و رگولاتور

از این قطعات در بورد ساخته شده استفاده شده است مثلا از خازن جهت حذف نویز و از پتانسیومتر برای کالیبره کردن سنسورها استفاده شده است.

2-4- سایر تجهیزات

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

2-5- راههای ارتباط بیسیم بین ماژول‌های مختلف

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

2-5-1- بلوتوث

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

2-5-2- ارتباط RF

برای استفاده از این تکنولوژی ماژول های آماده‌ای وجود دارد این ماژول‌ها اغلب بورد بیشتری نسبت به ارتباط وایفای دارند ماژولNRF2401 از دسته ماژول‌هایی است که از این تکنولوژی استفاده می‌کند مدولاسیون پیشرفته ارتباطی ماژول NRF24L01 به صورت GFSK است دیتاریت ماژول NRF24L01 حداکثر ۲ مگا بیت بر ثانیه است که می توان از آن برای انتقال اطلاعات سنگینی مشابه صوت و یا حتی ویدئو استفاده کرد! این ماژول امکانات خوبی را در اختیار کاربر قرار می‌دهد ولی به خاطر این که اغلب در ساختمان‌ها نیاز به بوردی به این اندازه نیاز نمی باشد و همچنین نمی‌توان این ماژول‌ها را به شبکه اینترنت متصل کرد برای این پروژه مناسب نمی‌باشد

2-5-3- ارتباط GSM

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

2-5-4- ارتباط WIFI

با فناوری «وایفای» ارتباطی با قدرتی بیشتر از بلوتوث ایجاد می‌شود. ارتباط وایفای بیشتر بر پایه ارتباط شبکه اینترنت به صورت بی‌سیم تأکید می‌کند و همین امر باعث محبوبیت بسیار زیاد آن شده ‌است با استفاده از این تکنولوژی به راحتی در مسافرت، هواپیما و یا هتل می‌توان از طریق رایانه همراه به اینترنت متصل شد. وایفای که همان استاندارد IEEE۸۰۲٫۱۱ است در مدل‌های ۸۰۲٫۱۱g و ۸۰۲٫۱۱b مورد استفاده قرار می‌گیرد و استاندارد اصلی آن IEEE802.11b است. در این مدل حداکثر سرعت انتقال اطلاعات ۱۱ Mbps است و از فرکانس رادیویی ۲/۴ گیگاهرتز استفاده می‌کند. برای سرعت بخشیدن به این استاندارد مدل دیگری نیز به نام ۸۰۲٫۱۱ n ایجاد شده که سرعت انتقال را حداقل تا ۲۰۰ Mbps افزایش می‌دهد. برد وایفای در حدود ۲۰ متر است امروزه شخص برای استفاده از این نوع ارتباط بیشتر با موبایل وتبلت‌های خود که دارای این نوع خدمات است استفاده می‌کنند البته اغلب لپ‌تاب‌های امروزی نیز دارای آن هستند. برای دسترسی به اینترنت در گوشی‌های همراه باید به اکسس پوینتی که به اینترنت متصل است وصل شد این فناوری به جهت این که امروزه تقریبا در تمامی ساختمان ها مودم وایفای موجود است و به علت این که ماژول ارتباط وایفای قیمت بسیار پایینی دارد و به این جهت که وایفای دارای برد مناسب و سرعت انتقال بالا است و قابلیت اتصال به اینترنت را دارد برای این پروژه بسیار مناسب است

2-6- جمع‌بندي

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


سخت افزار سیستم

3-1- مقدمه

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

3-2- طراحی قسمت سختافزاری

برای پیاده‌سازی فلوچارت کاری این سیستم ابتدا باید سخت‌افزاری که در نود نیاز است طراحی شود. ابتدا قسمت های مختلفی را که به آن ها نیاز است را مشخص کنیم

  • مداری جهت تغذیه میکروکنترلر و ESP
  • مداری برای ریست میکرو
  • پورتی برای اتصال بورد سنسور، پروگرم کردن میکروکنترلر و مشاهده پورت سریال در کامپیوتر
  • LED ها جهت نمایش وضعیت
  • پول آپ کردن پایه chip enable

در شکل 3-1 بلاک دیاگرام قسمت سخت‌افزاری مدار آورده شده است در ادامه به توضیح هر کدام از این‌ها می‌پردازیم:

شکل 3-1 قسمت های سخت‌افزاری مورد نیاز بر روی بورد نود

3-2-1- مدار تغذیه

برای تامین تغذیه میکروکنترلر، ماژول ESP ، سنسورها ، رله‌ها و... میبایست ولتاژ مورد نیاز آن‌ها را در بورد سنسور بسازیم تقریبا تمام عناصری که در بورد نود استفاده شده اند از تغذیه 5v استفاده می‌کنند به جز ماژول ESP که از تغذیه 3.3vاستفاده می‌کند به این منظور از رگولاتور ولتاژ 7805 برای ساخت ولتاژ 5v و از LF33 برای ولتاژ 3.3v استفاده می‌کنیم برای کاهش نویز مطابق شکل 3-2 از دو خازن بزرگ 470 uF در خروجی این دو رگولاتور قرار می‌دهیم [3] همچنین میبایست از خازن 100nF در نزدیکی ماژول ESP استفاده شود در صورت استفاده نکردن از این خازن ماژول ESP ممکن دچار ریست شدن های پیاپی بشود[ 10 ] ولتاژ ورودی رگولاتورها از طریق جک ورودی آدپتور تامین میشود ورودی کل این قسمت با استفاده از یک کلید قطع و وصل می‌شود

شکل 3-2 مدار تغذیه نود

3-2-2- مدار کریستال

به دلیل استفاده از ارتباط سریال که نیاز به دقیق بودن فرکانس پردازنده است از اسیلاتور خارجی در این پروژه استفاده شده است و همچنین به خاطر این که ممکن است نیاز به استفاده از بادریت‌های متفاوت داشته باشیم از کریستال 11.9592 MHZ استفاده شده است در صورت استفاده از منبع کلاک داخلی خود میکروکنترلر خطای به وجود آمده بسیار زیاد میشود در صورتی که با این کریستال می‌توان از بادریت‌های متفاوت با کمترین نرخ خطا استفاده کرد[ 4 ]

3-2-3- مدار ریست

برای مواقعی که برنامه میکرو متوقف یا دچار مشکلی شود نیاز است تا بتوان سیستم را راه‌اندازی مجدد کرد این کار از طریق پایه ریست میکروکنترلر انجام می‌شود به این صورت که اگر به مدت 1.5µs صفر شود میکروکنترلر ریست می‌شود برای اینکار مطابق شکل 3-3 این پایه را از طریق یک مقاومت به 5v و با یک کلید فشاری به زمین وصل کرده‌ایم

شکل 3-3 مدار ریست

3-2-4- ساخت پورتهای ارتباطی و کنترلی

برای اتصال بورد سنسور، پروگرم کردن میکرو، کانفیگ ESP نیاز است بر روی بورد نود پورت‌هایی موجود باشد در این بورد ما این پورت‌ها را با استفاده از پین هدر بهوجود می‌آوریم
پورت پروگرمر: برای پروگرم کردن میکرو‌کنترلر با استفاده از پروگرمر USBASP به پایه های gnd ، reset ، miso ، mosi و sck نیاز است به این جهت این پایه‌ها را به یک پین هدر 5 پایه روی بورد متصل می‌کنیم تا در زمانی که میکرو روی بورد قرار می‌گیرد بتوان آن مجددا برنامه‌ریزی کرد.


شکل 3-4 پورت پروگرمر
پورت برای بورد سنسور: برای متصل کردن بورد سنسور به بورد نود از دو پین هدر 20 پایه استفاده شده است که تمامی پورت‌های میکرو از جمله i2c ، spi ، پورت سریال مطابق با شکل 4-5 در این دو پین هدر موجود است همچنین پایه های باقی مانده را به تغذیه های 3v و 5v اختصاص میدهیم تا در صورتی که در بورد سنسور به این ولتاژها نیاز باشد در دسترس باشند به این جهت از دو پین هدر استفاده شده است که بورد سنسور با استحکام بیشتری بر روی بورد نود متصل شود. فاصطه این دو پین هدر 2 اینچ یا 2000 میل می باشد و پایه های آن ها دقیقا رو به روی همدیگر قرار دارند که باعث میشود پس از نصب بورد سنسور بر روی بورد نود کل سیستم به صورت یک بورد دو طبقه باشد میبایست در هنگام ساخت بورد سنسور این اندازه در نظر گرفت در شکل 3-5 پایههای این پورت نشان داده شده است.
پورت برای مشاهده اطلاعات میان میکرو و ESP‌: زمانی که میکروکنترلر از طریق پورت سریال به ESP متصل می‌کنیم برای مشاهده داده‌هایی که این برای یکدیگر می‌فرستند نیاز است تا پایه‌های RX وTX از طریق یک پین هدر بر روی بورد قرار دهیم به این وسیله با استفاده از مبدل سریال به usb می‌توان این داده‌ها را در کامپیوتر مشاهده کرد این قسمت برای عیب‌یابی سیستم بسیار مفید است.
جامپر برای انتخاب AREF : با استفاده از یک جامپر پایه AREF میکروکنترلر در شکلهای مختلف برای انتخاب VREF قرار می‌گیرد [6] این جامپر پایه AREF را به ولتاژ‌های 0 یا 5 ولت متصل می‌کند.
سوکت اتصال میکرو: برای نصب میکروکنترلر بر روی بورد از سوکت 28 پایه‌ای متناسب با میکروکنترلر Atmega8 استفاده شده که در صورت وجود مشکل به راحتی قابل تعویض باشد.
پین هدر برای اتصال ماژول ESP : برای اتصال ماژول ESP بر روی بورد از پین هدر متناسب با تعداد پایه‌ها این ماژول استفاده شده که عملیات نصب و تعویض آن را بسیار ساده می‌کند.
LEDها: برای نشان دادن وضعیتهای متفاوتی که بورد نود در آنها قرار میگیرد از دو عدد LED استفاده شده است یکی از آنها نشان دهنده اتصال دستگاه به پاور می باشد (روشن بودن نود) و دیگری نشان‌دهنده اتصال برنامه گوشی هوشمند به نود است وجود این LEDها نیز به عیبیابی سیستم کمک می‌کند.

شکل 3-5 پورت اتصال بورد سنسور
پول آپ پایه chip enable : برای استفاده از پورت سریال جهت موارد دیگر مثلا ارتباط با سنسوری که با پروتکل سریال کار میکند لازم است تا بتوانیم ماژول ESP را غیرفعال کنیم این کار را با پول آپ کردن پایه chip enable این ماژول و اتصال آن به یکی از پایه های میکرو انجام میدهیم شکل 3-6 این موضوع را نشان میدهد


شکل 3-6: پول آپ پایه chip en

3-3- شماتیک کلی مدار طراحی شده

در این قسمت شماتیک کلی مدار طراحی شده آورده شده است که در شکل 3-7 مشخص شده است



شکل 3-7: شماتیک کلی مدار

3-4- بستن مدار طراحی شده روی بردبورد

بعد از مرحله طراحی، این مدار بر روی بردبورد پیاده‌سازی شده و تست گردیده است در این مدار از گذاشتن بعضی از قسمت های طراحی شده برای سادگی کار خودداری شده است این مدار در شکل 3-8 آورده شده است.

3-5- ساخت بورد مدار چاپی نود

بعد از طراحی شماتیک مدار در نرم افزار آلتیوم آن را به بورد مدار چاپی تبدیل می‌کنیم با استفاده از قابلیت Auto Route تراک‌های را که نیاز است رسم می‌کنیم با تعریف قوانین برای رسم تراک برای تراک‌هایی که به vcc وgnd مربوط است از تراک‌هایی با قطر بیشتر استفاده شده است برای چاپ این مدار چاپی به شرکت‌های که این کار را انجام می‌دهند مراجعه شده است شکل 3-9 این طرح را قبل از چاپ شدن در محیط نرم‌افزار نشان می‌دهد شکل 3-10 نیز بورد چاپ شده را نشان می‌دهد

شکل 3-8: بستن مدار طراحی شده روی بردبورد


شکل 3-9: بورد مدار چاپی طراحی شده

 


شکل 3-10: بورد مدار چاپی چاپ شده

3-6- نصب قطعات بر روی بورد

بس از چاپ مدار می‌بایست قطعات استفاده شده بر روی بورد لحیم‌کاری شوند قطعات به کار رفته در بورد به شرح زیر می‌باشد
جدول 3-1:قطعات به کار رفته در بورد نود


لیست قطعات

قیمت (تومان)

محل تهیه

میکروکنترلر Armega8a

۳۵۰۰

وبسایت eca

ماژول ESP 201

۱۶۰۰۰

وبسایت eca

LF33CV

۴۰۰

وبسایت eca

L7805CV

۳۷۰

وبسایت eca

سوکت میکروکنترلر ۲۸ پایه

۱۴۰

وبسایت eca

پین هدر مادگی بسته ۱۰تایی

۲۴۰۰

وبسایت eca

پین هدر نری بسته ۵تایی

۱۵۰۰

وبسایت eca

خازن ۲۲ نانو فاراد بسته ۱۰ تایی

۲۰۰

وبسایت eca

کریستال MHz ۱۱.۰۵۹۲ بسته ۵ تایی

۱۲۰۰

وبسایت eca

جامپر بسته ۲۰ تایی

۶۰۰

وبسایت eca

مقاومت 1k و 10k بسته ۱۰ تایی

۳۵۰

وبسایت eca

LED بسته ۱۰ تایی

۵۰۰

وبسایت eca

سنور دما LM36DZ

۱۵۰۰

وبسایت eca

خازن الکترولیتی 470uF بسته ۱۰تایی

۵۰۰

وبسایت eca

تک سوئیچ ۲ پایه بسته ۱۰تایی

۵۰۰

وبسایت eca

خازن عدسی 100nF

۵۰۰

وبسایت eca

جک اداپتور

۲۳۰

وبسایت eca

3-7- ساخت کتابخانه آلتیوم برای بورد سنسور

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

3-8- جمع‌بندي

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

نرم افزار سیستم

4-1- مقدمه

در این فصل فلوچارت کار نود را پیاده‌سازی کرده و با استفاده از زبان C برنامه مربوط به میکروکنترلر نوشته می‌شود سپس یک برنامه ساده برای سیستم‌عامل اندروید نوشته می‌شود که با آن بتوان اطلاعات مربوط به سنسورها و رله‌ها را خواند و نوشت.

4-2- فلوچارت کلی سیستم

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

4-3- قسمت نرم‌افزاری میکروکنترلر

بخش نرم‌افزاری این پروژه از دو قسمت تشکیل شده است قسمت اول مربوط به میکروکنترلر و ارتباط با ماژول ESP و خواندن سنسور‌ها و قطع و وصل رله‌ها می باشد و قسمت دوم مربوط به گوشی هشمند است که از طریق آن فرمان خواندن سنسورها و قطع و وصل رله‌ها صادر می‌شود ابتدا قسمت اول را توضیح داده و پس از آن با تعریف پروتکلی ساده برای ارسال و دریافت داده‌ها کار را در قسمت دوم ادامه می‌دهیم برای ساخت برنامه میکرو در Atmel studio ابتدا به منوی File رفته و از گزینه New مورد Project را انتخاب کنید، حال گزینه GCC C Executable Project انتخاب کرده و در انتها هم برای Name اسم پروژه را انتخاب کنیم و در قسمت Location نیز می‌توانیم محل ذخیره سازی پروژه را تعیین نماییم.

شکل 4-1: فلوچارت کار نود

4-3-1- تنظیمات اولیه

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

#define BAUD 115200 // define baud
#define BAUDRATE ((F_CPU)/(BAUD*16UL)-1) // set baud rate value for UBRR
// function to initialize UART
void uart_init (void)
{
UBRRH = (BAUDRATE>>8); // shift the register right by 8 bits
UBRRL = BAUDRATE; // set baud rate
UCSRB|= (1<<TXEN)|(1<<RXEN); // enable receiver and transmitter
UCSRC|= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); // 8bit data format
}

این تابع باد ریت را که در ابتدای برنامه تعریف شده است در رجیستر‌های UBRRH و UBRRL در میکروکنترلر می‌نویسد BAUDRATE مطابق با دیتاشیت میکرو از رابطه ((F_CPU)/(BAUD*16UL)-1) بدست آمده است و سپس با فعال کردن بیت‌های TXEN و RXEN باعث می‌شود که میکرو هم فرستنده باشد و هم گیرنده‌. در خط 4 این تابع بیت‌های UCSZ0 و UCSZ1 یک می شوند که قالب 8 بیتی برای ارسال و دریافت را مشخص می کند و بیت URSEL برای دسترسی به رجیستر UCSRC می‌باشد زیرا رجیسترهای UCSRC و UBRRH در یک مکان قرار دارند و با این بیت مشخص می‌شود که به کدام رجیستر می‌توان دسترسی داشت. این تابع در ابتدا تابع main فراخوانی شده و این تنظیمات را اعمال می‌کند
تنظیم تایمر
برای این که بتوانیم در برنامه در جاهایی که ممکن است در برنامه گیر کنیم باید تایمری داشته باشیم که با استفاده از آن بتوانیم که میلی ثانیه‌ها را بشماریم و این شمارش مستقل از روند اجرای برنامه باشد این کار توسط اینتراپت تایمر میکروکنترلر قابل پیاده‌سازی است [7] که باید ابتدا برنامه کانفیگ شود. با تابع زیر این کار انجام می‌شود.

void initTimer(void){
// CTC mode, Clock/8
TCCR1B |= (1 << WGM12) | (1 << CS11);
// Load the high byte, then the low byte
// into the output compare
OCR1AH = (CTC_MATCH_OVERFLOW >> 8);
OCR1AL = CTC_MATCH_OVERFLOW;
// Enable the compare match interrupt
TIMSK |= (1 << OCIE1A);
// Now enable global interrupts
sei();
}

همان طور که گفته شد این زمان در اینتراپت تایمر میکرو افزایش پیدا می‌کند به صورتی که در زیر نشان داده شده است

ISR (TIMER1_COMPA_vect)
{
timer1_millis++;
}

و با استفاده از این تابع میلی ثانیه‌هایی را که گذشته برگشت داده می‌شود

unsigned long millis ()
{
unsigned long millis_return;
// Ensure this cannot be disrupted
ATOMIC_BLOCK(ATOMIC_FORCEON) {
millis_return = timer1_millis;
}
return millis_return; }

4-3-2- ارسال و دریافت داده

برای ارسال ودریافت داده‌ها از طریق پورت سریال باید توابعی نوشته شود که این کار را انجام دهند برای ارسال از تابع uart_transmit استفاده شده است تا زمانی که بافر فرستنده برای ارسال آماده نشده در حلقه while باقی می‌ماند میکرو کنترلر این را با یک شدن بیت UDRE متوجه می‌شود زمانی که بافر برای ارسال آماده شود دیتا را در رجیستر UDR قرار می‌دهد و واحد سریال به صورت اتوماتیک این داده را ارسال می‌کند ورودی این تابع از نوع unsigned char می‌باشد که دارای خروجی نمی‌باشد بدنه این تابع در ادامه آورده شده است.
// function to send data

void uart_transmit (unsigned char data)
{
while (!( UCSRA & (1<<UDRE))); // wait while register is free
UDR = data; // load data in the register
}

برای دریافت داده در این پروژه به دو صورت عمل شده است

  • دریافت با طول ثابت
  • دریافت با فاصله زمانی کوتاه

در دریافت داده با طول ثابت برنامه تا زمانی که به اندازه طولی که به تابع پاس شده، داده دریافت نکرده در تابع می‌ماند کد این تابع به این صورت است

unsigned char* uartFixedLengthRecieve( unsigned char size,int clear)
unsigned char i = 0;
unsigned char x[size+1];

if (size == 0) return 0; // return 0 if no space

while (i <= size - 1) { // check space is available
unsigned char c;
while (!((UCSRA) & (1<<RXC)));// wait for another char
c = UDR;
x[i] = c; // write into the supplied buffer
i++;
}
x[i] = 0; // ensure string is null terminated
return x; // return number of characters written
}

در دریافت داده به روش دوم به این گونه عمل می‌شود پس از این که این تابع فراخوانی شود در ابتدای هر حلقه زمان را از تابع millis دریافت می‌کند و در حلقه while مرتبا چک می‌کند مدت زمان انتظار برای دریافت این کاراکتر را چک می‌کند اگر از حد خاصی مثلا 300 میلی ثانیه گذشته باشد از تابع با دستور break خارج می‌شود در غیر این صورت به اندازه‌ی سایزی که مشخص شده است کارکتر دریافت می‌کند کد این تابع به صورت مقابل است

unsigned char uartrecieve(unsigned char *x, unsigned char size)
{
unsigned char i = 0;
if (size == 0) return 0; // return 0 if no space
while (i < size - 1) { // check space is available unsigned char c;
int timeouted=0;
unsigned long milliseconds_current = millis();
while (!((UCSRA) & (1<<RXC))){ // wait for another char if ( millis()-milliseconds_current > 300) {
timeouted=1;
break;
}
}
if(timeouted==0){
c = UDR;
x[i] = c;
i++;
}else{
break;
}
}
x[i] = 0; // ensure string is null terminated
return i + 1; // return number of characters written
}

4-3-3- ارسال دستورات AT

با استفاده از دستورات AT می‌توان با ماژول ESP دیتا را ارسال کرد و برای این کار باید این دستورات را توسط پروتکل سریال برای ماژول ارسال کرد و در ادامه کاراکتر‌های cr و lf را ارسال کرد این کار توسط تابع sendATCammand انجام می‌شود این تابع دستور AT را در قالب یک متغیر از نوع char* دریافت می‌کند و آن را کاراکتر به کاراکتر برای ESP می‌فرستد این کار تا زمانی که به انتهای این رشته که با کاراکتر NULL مشخص می‌شود نرسیده باشیم انجام می‌شود در انتها کاراکتر‌های cr و lf را ارسال می‌کند و توسط تابع uartrecieve پاسخ دستور ارسال شده را دریافت می‌کند و آن را به عنوان خروجی تابع برگشت می‌دهد.

unsigned char* sendATCammand(char* ATcommand){

int a=0;
while(ATcommand[a]!=NULL)
uart_transmit(ATcommand[a++]);
uart_transmit(13);
uart_transmit(10);
unsigned char y[100];
uartrecieve(y, 100);
return y;
}

4-3-3- راهاندازی سیستم

مطابق با فلوچارت کلی سیستم زمانی که سیستم راهاندازی میشود باید یک سری از دستورات AT ماژول ESP آماده اتصال گوشی هوشمند شود برای این که این قسمت را توضیح دهیم ابتدا باید با این دستورات آشنا شویم دستوراتی که در این پروژه استفاده شده است به طور خلاصه در جدول 4-1 آورده شده است زمانی که سیستم راهاندازی میشود باید به اکسس پوینت متصل شود برای این کار باید ماژول را در حالت کلاینت یا استیشن قرار دهیم این ماژول دارای مدهای دیگری نیز میباشد که در اینجا چون باید به اکسس پوینت وصل شویم نیاز به استفاده از حالت اکسس پوینت ماژول نیست این نکته لازم به ذکر است که در حالت اکسس پوینت این ماژول تا 5 دستگاه میتواند به آن متصل شود ولی در حالتی که از اکسس پونت جدا استفاده شود میتوان دستگاه های (نود) بیشتری را درشبکه اینترنت اشیا داشته باشیم. از دستور برای این که این ماژول به اکسس پوینت وصل شود .
جدول 4-1: دستورات AT پر کاربرد


توضیح

دستور

ماژول را تست می‌کند

AT

تمام تنظیمات ماژول را ریست می‌کند

AT+RST

تمام شبکه‌‌های wifi موجود را نمایش می‌دهد

AT+CWLAP

1 = Staion (client)
2 = Access point
3 = Access point + Station

AT+CWMODE=mode

به وسیله این دستور به مودم وای فای یا اکسس پوینتی که رمزش را داریم متصل می‌شویم

AT+CWJAP=ssid,pwd

توسط این دستور، ارتباط ماژول با اکسس پوینتی که به آن متصل است قطع می‌شود

AT+CWQAP

مشخص کردن طول  داده‌ای که می‌خواهیم ارسال کنیم (در حالتmultiple connection )

AT+CIPSEND=length

کانشکشن دلخواه را می‌بندد

AT+CIPCLOSE=id

۰ = خارج کردن از حالت Multiple
۱ = قرار دادن در حالت Multiple

AT+CIPMUX=mode

۰ = اگر از قبل سروی ساخته شده باشد ، آن سرور حذف می‌شود
۱ = ساخت یک سرور
:port شماره پورت (به  طور پیش‌فرض ۳۳۳ می‌باشد)

AT+CIPSERVER=mode[,port]

از دستور AT+CWJAP=ssid,pwd استفاده می‌کنیم این دستور ssid یا نام اکسس پوینت و پسورد آن را می‌گیرد و به آن اکسس پونت متصل میشود پس از این مرحله ESP به اکسس پونت متصل شده است ولی برای این که در برنامه گوشی هوشمند قابل رویت باشد باید در ماژول یک سرور سوکت ساخته شود برای این کار باید ماژول را در حالت مالتیپل قرار داداین کار با دستور AT+CIPMUX=0 انجام میشود برای ساخت سرور سوکت در این ماژول این کار ضروری است مرحله بعد ساخت خود سرور سوکت می‌باشد که با دستور AT+CIPSERVER=mode[,port] انجام می‌شود با این کار بر روی پورت خاصی که به صورت پیش فرض 333 است کانکشن سوکتی ساخته می‌شود و منتظر اتصال دستگاه دیگری به خود می‌شود از این ویژگی برای پیدا کردن نود‌ها در شبکه استفاده شده است پس از انجام این مراحل دستگاه آماده اتصال گوشی هوشمند می‌باشد کد این قسمت صورت زیر است.

char* AT_CMD="AT";
char* AT_CIPMUX="AT+CIPMUX=1";
char* AT_CIPSERVER="AT+CIPSERVER=1,333";
char* AT_CIPSEND="AT+CIPSEND=0,39";
char* AT_CWMODE="AT+CWMODE=1";
char* AT_CWJAP="AT+CWJAP=\"HOME\",\"11111111\"";
int main(void)
{
int conected=0;
int delayBetweenCommand=500;
initTimer();
DDRC = 0x03;
PORTC = 0x01;
uart_init();
_delay_ms(5000);
senATCammand(AT_CMD,"",1000,0);
senATCammand(AT_CWMODE,"",1000,0);
senATCammand(AT_CWJAP,"",1000,0);
_delay_ms(15000);
senATCammand(AT_CIPMUX,"",1000,1);
senATCammand(AT_CIPSERVER,"",1000,1);
_delay_ms(5000);
while(1){
unsigned char* chh=uartFixedLengthRecieve(9,1000);

if(chh[0] == '0'&&chh[3]=='O'){
conected=1;
}else{
conected=0;
}
while(conected){ }

4-3-4- دریافت درخواست و پاسخ به آن

پس از اتصال گوشی هوشمند به ESP گوشی هوشمند می‌تواند درخواست خود را ارسال کند و در صورتی که نیاز به دریافت پاسخ باشد آن را دریافت کند برای این کار پروتکل ساده‌ای طراحی شده که آن را بیان می‌کنیم
پروتکل دریافت درخواست:
در این پروژه درخواست‌هایی که توسط گوشی ارسال می‌شود به صورت یک عدد 8 بیتی می‌باشد یعنی به تمام درخواست‌هایی که ممکن است برای میکرو ارسال شود یک عدد نسبت داده می‌شود و میکرو از روی این عدد تشخیص می‌دهد که چه کاری باید انجام دهد با توجه به این که تعداد سنسور‌ها و رله‌های قابل اتصال به میکرو محدود است می‌توان با یک عدد 8 بیتی همه‌ی این حالت‌ها را نشان داد به طور مثال می‌توان برای بورد سنسوری با 4 رله و 7 سنسور که برای تست ساخته می شود از اطلاعال جدول 4-2 استفاده کرد
جدول 4-2: کد معادل درخواست ها


توضیح

کد

وصل کردن رله 1

65 (A)

 وصل کردن رله 2

66 (B)

 وصل کردن رله 3

67 (C)

 وصل کردن رله 4

68 (D)

قطع کردن رله 1

69 (E)

قطع کردن رله 2

70 (F)

قطع کردن رله 3

71 (G)

قطع کردن رله 4

72 (H)

دریافت اطلاعات کل سنسورها

75 (K)

دریافت درخواست و رسیدگی به آن:
پس از اتصال گوشی به نود میکرو با فراخوانی تابع این منتظر دریافت کد هر یک از این درخواست‌ها می‌باشد کد این عملیات به صورت زیر است همان گونه که در کد مشخص است قبل از دریافتrequest داده‌های دیگری نیز دریافت شده‌اند این داده ها توسط خود ماژول فرستاده می‌شوند و مشخص می‌کنند که این دادههای دریافتی از سمت کدام یک از دستگاه‌هایی که به این سرور سوکت متصل شده‌اند آمده است با توجه به درخواستی که دریافت شده توسط یک ساختار switch عملیات مربوط به آن درخواست انجام می‌شود. برای درخواست‌های با کد 65 تا 72 این عملیات شامل صفر و یک کردن پورت‌های میکروکنترلر که به رله‌ها متصل هستند می‌باشد و کد 75 برای دریافت تمامی عدد‌هایی که از سنسور‌ها خوانده شده می‌باشد کد این قسمت به این صورت است

while(conected){
PORTC=0x00;
senATCammand(AT_CMD,"",1000,0);
_delay_ms(delayBetweenCommand);
unsigned char* y=uartFixedLengthRecieve(7,1000);
unsigned char* x=uartFixedLengthRecieve(3,1000);
unsigned char* request=uartFixedLengthRecieve(2,1000);
switch(request[1])
{
case 65:
//turn on relayA
break;
case 66:
//turn on relayB
break;
case 67:
//turn on relayC
break;
case 68:
//turn on relayD
break;
case 69:
//turn off relayA
break;
case 70:
//turn off relayB
break;
case 71:
//turn off relayC
break;
case 72:
//turn off relayD
break;
case 75:
senATCammand(AT_CIPSEND,"",1000,1);
_delay_ms(2000);
adc_configuration();
uint16_t t= adc_read(2);
unsigned int k=(((t*2.56)*100)/1023);
char data[39];
sprintf(data, "%03u,%03u,%03u,%03u,%03u,%03u,%03u,%03u,%03u,%03u\r\n", k,0,0,0,0,0,0,0,0,0);
senATCammand(data,"",1000,1);
_delay_ms(3000);
//get information of adc1
PORTC=0b11111111;
_delay_ms(100);
PORTC=0b11111100;
break;

default:

break;
}
void adc_configuration(){
ADMUX |= (1<<REFS1)|(1<<REFS0);
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}
// read adc value
uint16_t adc_read(uint8_t ch)
{
// select the corresponding channel 0~7
// ANDing with '7' will always keep the value
// of 'ch' between 0 and 7
ch &= 0b00000111; // AND operation with 7
ADMUX = (ADMUX & 0xF8)|ch; // clears the bottom 3 bits before ORing

// start single conversion
// write '1' to ADSC
ADCSRA |= (1<<ADSC);

// wait for conversion to complete
// ADSC becomes '0' again
// till then, run loop continuously
while(ADCSRA & (1<<ADSC));

return (ADC);
}

خواندن از ADC :
با دریافت 75 میکرو تابع adc_configuration فراخوانی می‌کند که باعث کانفیگ ADC میکروکنترلر می‌شود برای این کار بیت‌های REFS1 و REFS0 را از رجیستر ADMUX ست می‌کنیم که از ولتاژ 2.56 ولت داخلی میکرو به عنوان ولتاژ مرجع برای واحد ADC استفاده کند [8] پس ازآن بیت‌هایADPS0 تا ADPS2 را ست می‌کنیم که با این کار از فرکانس پردازنده تقسیم بر 128 برای فرکانس نمونه برداری واحد ADC استفاده می‌شود در واقع با انتخاب عدد 128 با این 3 بیت کاری می‌کنیم تا فرکانس نمونه برداری ADC عددی بین 50k تا 200k باشد [5] پس از این کار با تابع adc_read که کانال ورودی به عنوان پارامتر دریافت می‌کند کانال مشخص شده به مقدار دیجیتال تبدیل می‌شود و برگشت داده می‌شود
پروتکل ارسال پاسخ
پس از خواندن اطلاعات از پورت‌های مختلف میکرو لازم است تا این اطلاعات را برای برنامه گوشی هوشمند ارسال کنیم برای ارسال اطلاعات با ماژول ESP باید طول داده برای ارسال مشخص باشد به این جهت عدد خوانده شده از سنسور‌ها به صورت یک عدد سه رقمی برای گوشی هوشمند ارسال می‌شود فریم ارسال اطلاعات به این صورت است

SPI

I2C

ADC5

ADC4

ADC3

ADC2

ADC1

ADC0

از آن جا که پایه‌های پورت I2C با ADC مشترک هستند در هر فریم فیلد I2C و یا ADC4 و ADC5 معتبر هستند برای این که داده نامعتبر مشخص شود آن فیلد را با داده های غیر عددی مثلا $$$ پر می‌کنیم

4-3-5- پروگرم کردن میکروکنترلر

با پایان یافتن کد نوشته شده آن را کامپایل می‌کنیم و در صورتی که کد نوشته خطا نداشته باشد فایل .hex آن ساخته می‌شود با استفاده از برنامه progisp میکروکنترلر را با این فایل پروگرم می‌کنیم برای این کار گزینه load flash را از منوی سمت راست انتخاب می‌کنیم با این کار فایل ساخته شده را در این برنامه لود می‌شود برای این که فرکانس میکرو را از منبع خارجی دریافت کنیم لازم است تا با انتخاب گزینه 3 نقطه در سمت راست برنامه، منبع خارجی کلاک را در لیست موجود انتخاب کنیم

4-4- نرم افزار گوشی هوشمند

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

4-4-1- پیدا کردن نود‌ها در شبکه

زمانی که کاربر با استفاده از گوشی خود به اکسس پوینت موجود در ساختمان متصل می‌شود می‌بایست بتواند نودهایی را که در ساختمان موجود است مشاهده کند برای این کار از شماره پورتی که ماژول وایفای آن را گوش می‌کند استفاده شده است به این صورت که برنامه اندروید از آدرس آیپی 192.168.1.50 شروع به اسکن شبکه می‌کند به این دلیل از این آدرس شروع می‌کنیم که معمولا مودم‌ها از این آدرس دستگاه‌های متصل به خود را آدرس دهی می‌کنند اسکن شبکه شامل گرفتن پینگ از دستگاه‌ها می‌باشد و دستگاه‌هایی که پاسخ آنها مثبت است برای باز بودن پورت 333 تست می‌شوند اگر این پورت باز باشد یعنی این دستگاه نودی از شبکه اینترنت اشیا می‌باشد در غیر این صورت دستگاهی دیگر در شبکه است کد این قسمت یه صورت زیر است

/**
* Created by saeed on 7/17/2016.
*/
public class Network {
private static final String TAG = "++NETWORK_TAG++";
final ExecutorService es = Executors.newFixedThreadPool(20);
final String ip = "192.168.1.";
final int port = 333;
final int timeout = 3000;
final int SoketTimeout = 1000;


onComplete onComplete;
Activity activity;
ArrayList<IOTNode> nodes = new ArrayList<>();

private ArrayList<IOTNode> getAllNodeInNetwork() {

nodes = new ArrayList<>();
for (int i = 50; i <= 60; i++) {
Log.i(TAG, "test " + i);
try {
if (InetAddress.getByName(ip + i).isReachable(timeout)) {
Log.i(TAG, ip + i + " is reachable");
portIsOpen(ip + i, port, SoketTimeout);


}
} catch (final UnknownHostException ex) {
Log.i(TAG, "error in UnknownHostException");

activity.runOnUiThread(new Runnable() {
@Override
public void run() {
onComplete.OnError(ex);

}
});
} catch (final IOException ex) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
onComplete.OnError(ex);

}
});
Log.i(TAG, "IOException in UnknownHostException");
}
}

return nodes;
}

private boolean portIsOpen(final String ip, final int port, final int timeout) {

try {
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ip, port), timeout);
IOTNode node = new IOTNode();
node.setIp(ip);
node.setPort(port);
node.setSocket(socket);
nodes.add(node);
Log.i(TAG, "port " + port + " is open");
return true;

} catch (Exception ex) {

Log.i(TAG, "port " + port + " is close");

return false;
}

}

public void startFind(Activity activity) throws NullPointerException {
if (onComplete != null) {
this.activity = activity;
new GetNodesAsyncTask().execute("");
} else {
throw new NullPointerException("must first set onComplete");
}
}

private class GetNodesAsyncTask extends AsyncTask<String, Integer, ArrayList<IOTNode>> {


@Override
protected ArrayList<IOTNode> doInBackground(String... strings) {
return getAllNodeInNetwork();
}

@Override
protected void onPostExecute(ArrayList<IOTNode> nodes) {
if (nodes.size() == 0) {
onComplete.onNoNodesFound();
} else {
onComplete.onNodesFound(nodes);

}
super.onPostExecute(nodes);
}
}

public interface onComplete {
public void onNodesFound(ArrayList<IOTNode> nodes);

public void onNoNodesFound();

public void OnError(Exception e);
}

public Network.onComplete getOnComplete() {
return onComplete;
}

public void setOnComplete(Network.onComplete onComplete) {
this.onComplete = onComplete;
}
}

در سیتم‌عامل اندروید برای اجرای دستوراتی که به زمان زیادی (بیش از 4 ثانیه) نیاز دارند باید تردی جدا ساخته شود و اجرای این دستورات در ترد اصلی برنامه یا UI Thread سبب close force شدن برنامه می‌شود به این جهت از کلاس AsyncTask که در کتابخانه‌های اندروید موجود است استفاده می‌کنیم این کلاس به صورت درونی با ساخت ترد جدید فعابلیت زمانبر را بر روی آن ترد اجرا می‌کند [9] متد doInBackground کارهایی را که باید در پس زمینه انجام شود را مشخص می کند و باید Override شود همچنین این کلاس متد‌هایonPostExecute و onPreExecuteمی‌باشد که در ترد اصلی برنامه اجرا می‌شوند از این متد‌ها برای تغیر دادن واسط کاربری برنامه استفاده می‌شود این کلاس از نوع‌های جنریک استفاده می‌کند این نوع‌ها برای ورودی کار پس‌زمینه، برای نشان دادن پیشرفت کار پس‌زمینه و برای خروجی کار پس‌زمینه می‌باشند در کد بالا نوع ورودی String ، نوع پیشرفت Integer و نوع خروجی لیستی از دستگاه‌های پیدا شده می‌باشد در این جا هم چون نیاز به انجام کار‌های IO‌ می‌باشد که ممکن است زمانبر باشند از این کلاس استفاده شده است در این کد همچنین واسط OnComplete تعریف شده است در هنگامی که عمل جستجو به پایان می‌رسد توابع آن را صدا می زند بدنه این تابع ها در کلاس اصلی برنامه یا MainActivity نوشته می‌ شود این واسط دارای توابع onNodesFound و onNoNodesFound و OnError می‌باشد که هر کدام از آن ها مطابق با نام خود طی شرایطی که ممکن است به وجود آید فراخوانی شده‌اند. کد این قسمت به صورت زیر است

fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
Network network = new Network();
network.setOnComplete(new Network.onComplete() {
@Override
public void onNodesFound(final ArrayList<IOTNode> nodes) {
RequsetConsts.setIotNodes(nodes);
progrsssIndicator.dismiss();
nosdesListView.setAdapter(new CustomListAdapter(getApplicationContext(), nodes));
nosdesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
IOTNode node = (IOTNode) nosdesListView.getAdapter().getItem(i);
Intent intent = new Intent(getApplicationContext(), ShowDevice.class);
intent.putExtra("node", i);
startActivity(intent);
}
});

}

@Override
public void onNoNodesFound() {
Log.i("nodes", "0 nodes found");
Snackbar.make(view, "هیچ نودی پیدا نشد ", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
progrsssIndicator.dismiss();
}

@Override
public void OnError(Exception e)
{ Snackbar.make(view, "خطا در پیدا کردن نود ها ", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
Log.i("nodes", "error in nodes find");
progrsssIndicator.dismiss();

}
});
network.startFind(MainActivity.this);

این کد زمانی که دکمه جستجو در صفحه ی اصلی برنامه کلیک شود اجرا می‌شود ابتدا یک شی از کلاس Network ساخته شده و سپس اینترفیس OnComplete برای آن ست می‌شود سپس با فراخوانی متد startFind شروع به جستجو در شبکه می‌کند با پایان یافتن عملیات جستجو تمام نودهایی در شبکه یافت شده در تابع onNoNodesFound برگشت داده می‌شود سپس با ست کردن اداپتور برای لیست صفحه اصلی این دستگاه‌ها در این صفحه لیست می‌شوند با کلیک کردن روی آیتم‌های این لیست وارد صفحه هر نود شبکه اینترنت اشیا می‌شویم.

4-4-2- ارسال و دریافت داده

برنامه ارسال و دریافت داده‌ها از کلاس‌های استاندارد BufferInputStream و BufferOutputStream استفاده شده است سازنده کلاس BufferInputStream یک شی از نوع InputStream دریافت می‌کند همچنین سازنده کلاس BufferOutputStream یک شی از نوع OutputStream دریافت می‌کند برای ساخت شی از این کلاس ها از استریم‌های ورودی و خروجی کلاس Socket استفاده شده است برای ارسال داده از متد write از کلاس BufferOutputStream استفاده شده است این متد آرایه‌ای از بایت‌ها را دریافت می‌کند و آن را در استریم خروجی می‌نویسد چون این کلاس نوع بافر شده کلاس OutputStream است از متد flush برای خالی کردن این بافر استفاده شده است قبل از ارسال داده ابتدا بافر InputStream را با متد skip خالی می‌کنیم این کار به این جهت است که اگر قبل از ارسال این در خواست به میکرو پاسخی فرستاده که دریافت نشده است دیگر نباید دریافت شود کد این قسمت به این صورت است

@Override
protected String doInBackground(Void... aVoid) {
String s;
try {

byte[] b = new byte[64];
bufferedInputStream.skip(bufferedInputStream.available());
bufferedOutputStream.write(sensor);
bufferedOutputStream.flush();
int n = bufferedInputStream.read(b);
s = convert(b);
} catch (IOException e) {
e.printStackTrace();
s = "error";
}
return s;
}

4-5- جمع‌بندي

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

 


تست سیستم

5-1- مقدمه

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

5-2- تست و راه‌اندازی ماژول ESP8266 201

می‌توان گفت ESP8266 یک ماژول WIFI کامل به همراه تمام بخش های نرم‌افزاری و پشته‌ی پروتکل داخلی TCP/IP می‌باشد که با قیمت بسیار پایین در بازار ایران یافت می‌شود و می‌توان با پروتکل سریال به راحتی با آن ارتباط برقرار نمود و توسط دستورات AT COMMAND آن را کنترل نمود. ماژول ESP8266در دو حالت قابل استفاده می‌باشد. [10]
حالت Station : که از آن برای اینترنت اشیا استفاده می‌شود، که ماژول پس از تظیمات لازم به طور خودکار مودم ADSL را پیدا می‌کند و به اینترنت متصل می‌شود و اقدام به تبادل داده می‌نماید .
حالت Access Point : در این حالت می‌توان با استفاده از کامپیوتر، تبلت یا موبایل ماژول را جستجو کرد و به آن متصل شد و به عنوان ریموت بدون نیاز  به اینترنت از آن استفاده نمود .
برای راه‌اندازی این ماژول پایههای rx وtx را به پایه های tx و rx متصل می‌کنیم و پایه‌ی vcc این ماژول را به 3.3v متصل میکنیم و پایه‌ها‌ی زمین آن را به زمین متصل می‌کنیم همچنین این ماژول برای کار در حالت عادی باید پایه های gpio15 و gpio13 را به 3.3v و gpio0 را به زمین متصل کنیم همچنین پایه‌های RESET و همچنین CH_PD نیز به ۳٫۳ ولت متصل شود پس از اتصال مبدل usb به سریال به کامپیوتر پورتی راکه مبدل درآن هست را انتخاب می‌کنیم وپورت را با کلید OPEN COM بازمی‌کنیم.
این ماژول در ۲ باود ‌ریت (boud rate) میتواند کار کند که باید هر ۲ باود ‌ریت را تست میکنیم تا باود ریت مناسب را پیدا کنیم برای این کار ابتدا باود ریت را ۱۱۵۲۰۰ قرار میدهیم و دستور AT را در قسمت DATA INPUT نوشته وsend میکنیم. در صورت پاسخ دادن یعنی فرستادن OK نشانگر این است که باود‌ریت ما درست است اگر این باودریت به درستی کار نکند می‌توانیم از باودریت‌های دیگر استفاده کنیم. پس از این مرحله می‌توانیم به ماژول متصل شویم برای ارسال دستورات AT باید توجه داشته باشیم که بعد از این دستورات باید کارکتر‌های cr و lf را ارسال کنیم که با زدن تیک این گزینه‌ها این کار به صورت اتوماتیک در برنامه ترمینال انجام می‌شود.

شکل 5-1: پایههای ماژول ESP 201

5-3- تست و راه‌اندازی پورت UART میکرو

برای این کار یک برنامه برای کار با پورت uart میکرو‌کنترلر نوشته شده و در برنامه پروتئوس شبیه‌سازی شده است مزیت این کار تست و راه‌اندازی این پورت میکرو بدون اتصال آن به ماژول وایفای است که باعث می‌شود صحت عملکرد برنامه نوشته شده مشخص شود برای ارسال و دریافت اطلاعات ازVIRTUAL TERMINAL استفاده شده است که در عکس 5-2 نشان داده شده است. در این شبیه‌سازی سعی شده است که فقط به ارسال و دریافت داده از طریق پورت سریال میکروکنترلر پرداخته شود تا با نحوه تنظیم رجیسترهای کنترلی این پورت و ... در ارتباط سریال میکروکنترلر آشنایی لازم به وجود آید در این شبیه سازی از میکروکنترلر atmega328 استفاده شده است که تفاوت چندانی در قسمت پورت سریال با atmega8 که در پروژه استفاده شده ندارد.

شکل 5-2: تست پورت سریال میکرو در پروتئوس

5-4- ساخت بورد سنسور نمونه

برای این که این پروژه به صورت عملی پیاده سازی کنیم یک بورد سنسور را به صورت نمونه می‌سازیم تا هم روند ساخت بورد سنسور را نشان دهیم، و هم مشخص شود که سیستم کار می‌کند برای این کار دو پین هدر بر روی دو طرف این بورد قرار می‌دهیم به گونه‌ای که فاصله آن ها برابر 2 اینچ شود به این صورت می‌توان این بورد سنسور را روی بورد نود قرار داد در این بورد سنسور از یک سنسور دما برای اندازه گیری دمای محیط استفاده می‌شود پایه‌های این سنسور در شکل 5-3 نشان داده شده است خروجی این سنسور آنالوگ بوده و به یکی از پایه های ADC که در پایه های بورد سنسور موجود است وصل می‌کنیم برای تغذیه و زمین این سنسور از تغذیه 5 ولتی و زمین موجود در پایه‌ها استفاده می‌کنیم پس از این مرحله بورد سنسور ساخته شده را به بورد نود متصل کرده و اطلاعات این سنسور قابل مشاهده است باید توجه کنیم که مطابق شکل 5-4 قسمت در بالایی بورد سنسور را برای جلوگیری از اتصال برعکس آن 4 پایه قرار داده شده است

شکل 5-3: پایههای سنسور lm35dz

شکل 5-4: بورد سنسور طراحی شده در دو نمای بالا و پایین

5-5- تست بورد نود ساخته شده

بعد ساختن بورد سنسور و اتصال پین هدر‌های آن به بورد اصلی می‌توانیم این سیستم را تست کنیم برای این کار با روشن نمودن دستگاه با استفاده کلید قرار داده شده بر روی بورد منتظر می‌شویم تا دستگاه راه‌اندازی شود نشانه راه‌اندازی دستگاه روشن شدن یکی از led‌های روی بورد میباشد پس از آن می‌بایست از طریق برنامه گوشی اندرویدی به بورد نود متصل شویم برای این کار باید ابتدا وایفای گوشی را روشن نموده و وارد برنامه شویم در برنامه دکمه جستجو را کلیک می‌کنیم در شکل 5-5 این صفحه از برنامه آورده شده است با این کار تمام نود‌های که در شبکه وایفای موجود است پیدا می‌شود و پس از اتمام جستجو این نود‌ها به صورت لیست به نمایش در می‌آیند با کلیک کردن بر روی هرکدام از این نود‌ها می‌توان اطلاعات مربوط به سنسور‌های هر کدام از سنسور‌های متصل به بورد نود را در گوشی موبایل مشاهده کرد و همچنین رله‌های متصل به آن را قطع و وصل نمود برای این کار چهار دکمه برای قطع و وصل رله‌ها گذاشته شده و از یک دکمه برای دریافت آخرین اطلاعات مربوط به سنسورهای متصل به نود استفاده شده است این اطلاعات به صورت متنی در Textview بالای این صفحه نوشته می‌شود که مطابق با فریم ارسالی میکروکنترلر از سمت چپ به راست مرتب شده‌اند
همچنین در صفحه مرتبط با هر نود یک دکمه در بالای صفحه گذاشته شده است که وظیفه اتصال مجدد به نود را دارد به این جهت از این دکمه استفاده شده است که ممکن است در زمان اتصال به ماژول را بین ارتباط به هر نحوی قطع شود و با این دکمه می‌توان به ماژول وایفای مجددا متصل شد بدون این که نیاز باشد دوباره عملیات زمان‌بر جستجوی شبکه انجام شود.

شکل 5-5: تصاویر نرم‌افزار

5-6- اشکالات

زمانی که میکرو با ماژول ارتباط برقرار می‌کند و باید داده‌های ارسالی ماژول وایفای توسط میکروکنترلر دریافت شود میکرو چند کاراکتر اولیه را به درستی دریافت می‌کند ولی بقیه کاراکتر‌ها اشباه دریافت می‌شوند این امر به این جهت است که میکروکنترلر Atmega8 نمی‌تواند با این سرعت که ماژول کار می‌کند داده‌ها دریافت کند و پس دریافت چند کاراکتر دچار خطا می‌شود برای حل این مشکل می‌توانیم از دستورات AT ماژول برای تغیر باد ریت این ماژول استفاده کنیم دستور AT+CIOBAUD=9600 باعث تغیر بادریتی که ماژول با آن کار می کند می‌شود به این صورت که در ابتدای کار با باد ریت پیشفرض این ماژول به آن متصل می‌شویم و دستور تغیر باد ریت را برای آن ارسال می‌کنیم و باد ریت ماژول را 9600 قرار می‌دهیم با این سرعت میکرو می‌تواند بدون خطا داده ها را دریافت کند.
PCB بورد نود طراحی شده در بعضی قسمت‌ها دارای اشکالاتی می‌باشد که با وصل کردن سیم اشکال به به وجود امده برطرف شده است.

5-7- جمع‌بندي

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


نتیجه گیری و پیشنهادات

هر زمان به واژه اینترنت اشیا می‌اندیشید، در واقع به میلیون‌ها یا میلیاردها دستگاه هوشمند و نحوه تعامل آن‌ها روی شبکه‌ای گسترده و متصل از دستگاه‌های هوش‌مند فکر می‌کنید؛ به عبارت دیگر زمانی که هر یک از  مشتقات دستگاه‌های هوشمند هم‌چون مچ‌بندهای تناسب‌اندام، ساعت‌ها و عینک‌های هوشمند را برای انجام وظایف روزانه خود مورد استفاده قرار می‌دهید، این دستگاه‌ها حجم قابل توجهی از داده‌های مرتبط با فعالیت‌های جسمانی، اوضاع جوی و مواردی از این دست را تولید می‌کنند. ما به خوبی می‌دانیم اینترنت اشیا  این ظرفیت را دارد تا انقلابی در حوزه‌های بهداشت و درمان، ماشین‌ها، لوازم شخصی و تجهیزات صنعتی به وجود آورد. وسایل نقلیه خودران بهترین مثال عملی در این زمینه به‌شمار می‌روند. ماشینی که برای انتخاب بهترین مسیر و تعامل درست با ماشین‌های دیگر از طریق جی پی اس به صورت بلادرنگ داده‌های مربوط به ترافیک را به دست می‌آورد. در حوزه مراقبت‌های بهداشتی، دستگاه‌های‌IoT این توانایی را دارند تا از راه دور فشار خون و ضربان قلب را مورد بررسی و نظارت قرار دهند. این دستگاه‌ها حتی توانایی اعمال مدیریت روی دستگاه‌های پیشرفته‌تری هم‌چون ابزارهایی که مورد استفاده ناشنوایان قرار می‌گیرد را نیز دارند. برآوردها نشان می‌دهند که در آینده ضریب نفوذ کلاود، به دلیل ارائه امکانات مناسب‌تر و اینترنت پر‌سرعت‌تر، تسهیل خواهد شد؛ در نتیجه دنیای فناوری این ظرفیت را پیدا خواهد کرد تا دستگاه‌های اینترنت اشیا را متناسب با سرویس‌های کلاودی تولید کند که با استفاده از اسمارت‌فون‌ها و تبلت‌ها کنترل می‌شوند. این پیشرفت در نهایت به  کاربران اجازه خواهد داد به مجموعه گسترده‌ای از داده‌های تحلیل شده در زمان واقعی دسترسی داشته باشند. در میان فناوری‌های زیرساختی مختلفی که در اینترنت اشیا مورد استفاده قرار می‌گیرد، وایفای یکی از تأثیرگذارترین مؤلفه‌هایی است که در پیشبرد اینترنت اشیا و افزایش ضریب موفقیت آن نقش به‌سزایی داشته است. این تأثیرگذاری به گونه‌ای بوده است که بعضی از کارشناسان، وایفای را همانند چسبی برای اینترنت اشیا توصیف کرده‌اند .
وجود سیستمی مانند آن چه که در این گزارش شرح داده شد به سرعت توسعه اینترنت اشیا می‌تواند کمک بسیار بزرگی بکند این سیستم کاربر را قادر می‌سازد تا شبکه اینترنت اشیا را در ساختمان خود بدون نیاز به سیم کشی‌های متداول که برای ارتباطات نود‌ها نیاز است پیاده‌سازی کند که باعث کاهش شدید هزینه‌ها و وقت می‌شود همچنین به دلیل این که طراحی بورد سنسور از ایجاد شبکه‌ای برای ارتباطات این سنسور‌ها مستقل شده است در این زمینه هم می‌تواند سپس کاهش زمان افزودن این سنسورها به شبکه گردد این سیستم پس از تست و راه‌اندازی به خوبی کار کرده و می‌تواند در تجاری‌سازی شده و استفاده شود بورد طراحی شده در ابعاد 10×10 سانتیمتر ساخته شده و می‌توان بورد سنسوری به ابعاد 2×2.7 اینچ را به آن متصل کرد. اما این سیستم دارای معایبی نیز می‌باشد.
بر سر راه برقراری ارتباطات ایمن میان عناصر و سنسورهای IoT و یک شبکه وای فای، موانع متعددی وجود دارد. در حال حاضر هر نود IoT با یک SSID پیکربندی می‌شود که فرایندی بسیار وقت گیر بوده و سیستم را در برابر خطاهای انسانی آسیب‌پذیر می‌سازد . فعالان صنعت وایفای می‌توانند با شبیه‌سازی امکانات شبکه‌های تلفن همراه و استفاده از این قابلیت‌ها، در مورد استانداردها و گواهی‌نامه‌های احراز هویت به نقطه مشترکی برسند. در غیر این صورت اکوسیستم وایفای نمی‌تواند پا به پای صنعت اینترنت اشیاء که از رشد سریعی برخوردار است، به جلو حرکت کند.

 

 

 

 

پيوست 1: لیست برنامه‌ها

  • برنامه مربوط به میکروکنترلر که در پوشه iot v2 قرار دارد
  • برنامه مربوط به گوشی اندروید که در پوشه BSCProject قرار دارد

پيوست 2: لیست قطعات

لیست قطعات

قیمت (تومان)

محل تهیه

میکروکنترلر Armega8a

۳۵۰۰

وبسایت eca

ماژول ESP 201

۱۶۰۰۰

وبسایت eca

LF33CV

۴۰۰

وبسایت eca

L7805CV

۳۷۰

وبسایت eca

سوکت میکروکنترلر ۲۸ پایه

۱۴۰

وبسایت eca

پین هدر مادگی بسته ۱۰تایی

۲۴۰۰

وبسایت eca

پین هدر نری بسته ۵تایی

۱۵۰۰

وبسایت eca

خازن ۲۲ نانو فاراد بسته ۱۰ تایی

۲۰۰

وبسایت eca

کریستال MHz ۱۱.۰۵۹۲ بسته ۵ تایی

۱۲۰۰

وبسایت eca

جامپر بسته ۲۰ تایی

۶۰۰

وبسایت eca

مقاومت 1k و 10k بسته ۱۰ تایی

۳۵۰

وبسایت eca

LED بسته ۱۰ تایی

۵۰۰

وبسایت eca

سنور دما LM36DZ

۱۵۰۰

وبسایت eca

خازن الکترولیتی 470uF بسته ۱۰تایی

۵۰۰

وبسایت eca

تک سوئیچ ۲ پایه بسته ۱۰تایی

۵۰۰

وبسایت eca

خازن عدسی 100nF

۵۰۰

وبسایت eca

جک اداپتور

۲۳۰

وبسایت eca

 


منابع:

[1] Rajeev Pi. “Internet of Things: Ubiquitous Home Control and Monitoring System using Android based Smart Phone”
[2] http://internetofhomethings.com/homethings/?p=396
[3] http://avr64.com/ESP8266-Internet-Browser-Bascom-avr-Nokia6610-color-lcd.php
] 4 [ رهافروز، امیر. (1390) . میکروکنترلرهای AVR و کابردهای آنها. تهران: انتشارات نص .
[5] http://maxembedded.com/2011/06/the-adc-of-the-avr/
[6] http://www.atmel.com/Images/Atmel-8159-8-bit-AVR-microcontroller-ATmega8A_datasheet.pdf / [7] http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__avr__interrupts.html
[8] http://microlearn.ir/3465/adc.html
[9] https://developer.android.com/reference/android/os/AsyncTask.html
[10] https://cdn-shop.adafruit.com/product-files/2471/0A-ESP8266__Datasheet__EN_v4.3.pdf

 


دانلود فایل ها:
در این قسمت می توانید کل فایل های این پروژه را دانلود کنید دانلود

دانلود سورس برنامه اندروید:
در این قسمت می توانید سورس برنامه اندروید را دانلود کنید دانلود

دانلود سورس برنامه میکررو:
در این قسمت می توانید سورس برنامه میکررو را دانلود کنید دانلود

دانلود pcb و شماتیک:
در این قسمت می توانید pcb و شماتیک این پروژه را دانلود کنید دانلود

پژوهشگر: سعید لیلی زاده استاد راهنما: دکتر علی بهلولی

ایمیل: saeedyliel@gmail.com