در چند ماه اخیر نه تنها کشور ما بلکه تمام کشورهای دنیا درگیر ویروسی به نام کرونا یا COVID-19 بودهاند، حتما توصیه های پزشکی درباره رعایت پروتکل های بهداشتی را شنیدهاید که یکی از مهم ترین آن ها فاصله گذاری اجتماعی است که به اعضای جامعه یادآوری می کند با رعایت فاصلهای مشخص در ارتباط با دیگران میتوانند درصد ابتلا و شیوع ویروس را بطور قابل توجهی کاهش دهند، در این آموزش با چند ماژول ساده و برد ESP8266 اقدام به ساخت یک دستگاه ساده با هدف فاصله اجتماعی می کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
برد ESP8266
ماژول های ESP32 و ESP8266 ساخت شرکت Espressif Systems از در دسترس ترین تراشه های اینترنت اشیا هستند. و همچنین قیمت پایین تری نسبت به دیگر تراشه های اینترنت اشیا دارند و برای توسعه کد های آن میتوانیم از نرم افزار Arduino استفاده کنیم که دسترسی آسان تری را برای کاربر فراهم میکند.
برخی از ویژگی های ESP8266
- ماژول شبکه و میکروکنترولر ESP8266 یکی از معروفترین و ارزان ترین و دردسترس ترین تراشه های اینترنت اشیا میباشد.
- این ماژول با دارا بودن میکروکنترولر قدرتمند بهمراه ارتباط شبکه WIFI داخلی،
- پشتیبانی کامل فول استک TCP/IP
- و همچنین با ارائه رابط های سخت افزاری کافی گزینه مناسبی برای کاربرد های کوچک و کم مصرف اینترنت اشیا میباشد.
- این میکروکنترولر در سال ۲۰۱۴ به بازار عرضه گردید.
ماژول فاصله سنج SRF
این نوع از ماژول های فاصله سنج در انواع مختلفی تولید می شوند، که از محبوب ترین آن ها میتوان SRF-04 و SRF-05 را نام برد، نحوه کارکرد این ماژول ها به این صورت است که با استفاده دو نوع قطعه التراسونیک که بر روی ماژول قرار دارد، امواج التراسونیک و همچنین محاسبات بر اساس زمان ارسال بازخورد امواج، قادر به محاسبه فاصله خواهیم بود، همان طور که ذکر شد در این ماژول دو نوع قطعه التراسونیک وجود دارد که یکی از آن ها از نوع T یا فرستنده و دیگری از نوع R یا دریافت کننده می باشد. پس ماژول به این صورت کار می کند که با ارسال و دریافت امواج التراسونیک فاصله با اجسام را در نهایت قابل محاسبه می کند.
وسایل مورد نیاز
نحوه کار پروژه
در این پروژه با استفاده از ماژول فاصله سنج SRF فاصله بین دو شخص را محاسبه و همچنین با استفاده از ماژول LED RING میزان فاصله مجاز را به فرد مقابل اطلاع میدهیم، به این صورت که اگر فاصله کمتر یک متر باشد led ها شروع به روشن شدن میکنند و همینطور بیزر نیز با کاهش بیش از حد فاصله به صدا در خواهد آمد.
نصب کتابخانه مورد نیاز
ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مرجع Adafruit_NeoPixel می پردازیم. مراحل زیر را دنبال کنید.
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه Adafruit_NeoPixel را جستجو کنید.
- کتابخانه را نصب کنید.
شماتیک و اتصالات
اتصالات را مانند تصاویر زیر برقرار کنید، توجه داشته باشید که مدار از دو بخش مختلف تشکیل شده، یعنی فاصله سنج و بخش هشداردهنده فاصله مجاز که متشکل از بیزر و LED RING است. در مرحله اول اتصالات ماژول SRF را برقرار خواهیم کرد.
- در مرحله بعد مطابق تصویر زیر اتصالات ماژول نئوپیکسل را برقرار کنید.
- در نهایت اتصالات مربوط به قطعه بیزر را برقرار کنید.
- اتصالات کامل پروژه به شرح زیر است.
کد پروژه دستگاه فاصله اجتماعی
در این مرحله بخش های مختلف کد این پروژه و همچنینی قابلیت های آن را بررسی خواهیم کرد. در اولین خط اقدام به معرفی کتابخانه مورد نیاز برای راهاندازی ماژول LEDring میکنیم.
#include<Adafruit_NeoPixel.h>
در ادامه اقدام به نامگذاری پایه های مد نظر و مقداردهی به مواردتعریف شده برای مثال تعداد LED های موجود خواهیم کرد.
#define ledPin D1 #define buzzerPin D2 #define echoPin D5 #define trigPin D6 #define ledNo 20
در این قسمت دو متغیر از نوع int تعریف و از آن ها به عنوان حداقل و حداکثر فاصله در ادامه پروژه استفاده خواهیم کرد.
int minDistance = 50, maxDistance = 80;
در قسمت Void setup تننظیمات اولیه موردنیاز را مشخص میکنیم از جمله حالت ورودی یا خروجی بودن پایه های مورد نیاز و همچنین وضعیت اولیه ماژول LED Ring.
void setup() { pinMode(buzzerPin, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); ring.begin(); for(int i = 0; i < ledNo; i++) { ring.setPixelColor(i,ring.Color(0,0,0)); } ring.show(); }
این قسمت مربوط به ترتیب روشن شدن led ها در ماژول LED Ring است، که میتوانید به دلخواه آن هارا تغییر دهید.
if(i < 6) { ring.setPixelColor(i,ring.Color(50,0,0));//g,r,b } else if(i >= 6 && i < 12) { ring.setPixelColor(i,ring.Color(50,0,0));//g,r,b } else if(i >= 12 && i < 16) { ring.setPixelColor(i,ring.Color(0,50,0));//g,r,b }
کد کامل پروژه دستگاه فاصله اجتماعی دوران کرونا
#include<Adafruit_NeoPixel.h> #define ledPin D1 #define buzzerPin D2 #define echoPin D5 #define trigPin D6 #define ledNo 20 Adafruit_NeoPixel ring = Adafruit_NeoPixel(ledNo,ledPin,NEO_RGB+NEO_KHZ800); int minDistance = 50, maxDistance = 80; void setup() { pinMode(buzzerPin, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); ring.begin(); for(int i = 0; i < ledNo; i++) { ring.setPixelColor(i,ring.Color(0,0,0)); } ring.show(); } void loop() { int distance = calcDistance(); int ledsToGlow = map(distance, minDistance, maxDistance, ledNo, 1); if(ledsToGlow == 16) { digitalWrite(buzzerPin, HIGH); } else { digitalWrite(buzzerPin, LOW); } for(int i = 0; i < ledsToGlow; i++) { if(i < 6) { ring.setPixelColor(i,ring.Color(50,0,0));//g,r,b } else if(i >= 6 && i < 12) { ring.setPixelColor(i,ring.Color(50,0,0));//g,r,b } else if(i >= 12 && i < 16) { ring.setPixelColor(i,ring.Color(0,50,0));//g,r,b } } for(int i = ledsToGlow; i < ledNo; i++) { ring.setPixelColor(i,ring.Color(0,0,0)); } ring.show(); delay(150); } int calcDistance() { long distance,duration; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration/29/2; if(distance >= maxDistance) { distance = maxDistance; } if(distance <= minDistance) { distance = minDistance; } return distance; }
جمع بندی
در پروژه فاصله اجتماعی با استفاده از قطعاتی مانند LED ring، بیزر، فاصله سنج SRF و همچنین برد ESP8266 یک دستگاه بسیار مفید و کاربردی برای دوران شیوع ویروس کرونا ساختیم که فاصله مجاز بین افراد در مکان های عمومی را به آن ها یادآوری و در صورت نیاز هشدار میدهد. با توجه به قطعات این پروژه با استفاده از یک برد هزار سوراخ می توانید قطعات را در یک مدار کنار هم نگه داشته و از آن در هرمکانی استفاده نمایید.
- تنظیمات منوی tools در نرم افزار آردوینو نیز مانند تصویر زیر است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
آقا خلاقیتت دوست داشتم و لذت بردم
حتما اجرا میکنم و نظرمو میگم
خیلی ممنونم از شما.
سلام ببخشید من با این ارور مواجه میشم ، میشه راهنمایی کنید
Executable segment sizes:
IROM : 230056 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 27012 / 32768 – code in IRAM (ICACHE_RAM_ATTR, ISRs…)
DATA : 1256 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 696 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 24896 ) – zeroed variables (global, static) in RAM/HEAP
Sketch uses 259020 bytes (24%) of program storage space. Maximum is 1044464 bytes.
Global variables use 26848 bytes (32%) of dynamic memory, leaving 55072 bytes for local variables. Maximum is 81920 bytes.
از چه بردی برای این پروژه استفاده کردید ؟