کنترل آسانسور با حرکت دست با برد آردوینو (بدون تماس – کرونا)

محتویات
در این اوضاع کرونا ، آسانسور ها به مکانی پر خطر تبدیل شده اند که همه افراد دکمه های مشابه را لمس می کنند. در بسیاری از مکان ها ، مردم ترفندهایی را برای جلوگیری از تماس با دکمه های آسانسور استفاده کرده اند کرده اند مانند استفاده از کاغذ ، خلال دندان یا دستمال های بهداشتی برای فشار دادن دکمه های آسانسور.
بنابراین در ادامه پروژه های قبلی مرتبط با کرونا، با استفاده از آردوینو نانو نمونه اولیه آسانسور کنترل شده با حرکت را بسازیم.
فیلم زیر به شما در درک نحوه کار این پروژه کمک خواهد کرد.
پروژه های دیگر در زمینه کرونا را هم مشاهده کنید :
- پروژه دماسنج کرونا با موبایل اندروید و آردوینو (ثبت تصویر و خروجی اکسل)
- ساخت دماسنج بدون تماس با آردوینو (مخصوص کرونا و ثبت در فرمت اکسل)
- پروژه تب سنج کرونا ارزان قیمت با آردوینو و سنسور DS18B20
این آسانسور بدون تماس از برد آردوینو نانو ، یک حسگر حرکت APDS9960 و یک ماژول نمایشگر OLED استفاده می کند. حسگر APDS9960 برای خواندن حرکات استفاده می شود. از حرکت بالا و پایین برای تنظیم شماره طبقه استفاده میشود. حرکت چپ برای بستن درب و حرکت راست برای باز کردن درب استفاده میشود.
مدار پروژه کنترل آسانسور با حرکت دست
شماتیک مدار برای آسانسور بدون تماس با استفاده از سنسور APDS9960 در زیر آورده شده است.
پین های VCC و GND هر دو سنسور APDS9960 و نمایشگر OLED به 3.3V و GND آردوینو متصل هستند. در حالی که پایه های SCL و SDA از سنسورهای APDS9960 و OLED Display به ترتیب به پایه های A5 و A4 آردوینو متصل هستند.
پین های OLED & APDS9960 | پین های آردوینو نانو |
VCC | 3.3v |
GND | GND |
SCL | A5 |
SDA | A4 |
بعد از اتصال قطعات، مدار چیزی شبیه به زیر میشود :
حسگر حرکت APDS9960 RGB
APDS9960 RGB یک صفحه برد کوچک است که دارای یک سنسور داخلی APDS-9960 ، فیلترهای مسدود کننده UV و IR ، چهار دیود جداگانه حساس به جهات مختلف و یک واحد ارتباط I2C است. از این سنسور می توان برای اندازه گیری نور و رنگ محیط ، تشخیص مجاورت و لمس حرکات لمسی استفاده کرد. دامنه تشخیص حرکت آن 10 تا 20 سانتی متر است و می تواند برای کنترل میکروکنترلر ، ربات و بسیاری از پروژه های دیگر مورد استفاده قرار گیرد.
امکانات:
- ولتاژ عملیاتی: 2.4 ولت تا 3.6 ولت
- محدوده عملکرد: 4-8 اینچ (10-20 سانتی متر)
- رابط I2C (آدرس I2C: 0x39)
- نور محیط و حسگر رنگی RGB ، مجاورت
- حسگر و تشخیص حرکت در یک ماژول نوری
- رابط سازگار با حالت سریع I2C-bus با نرخ داده تا 400 کیلوهرتز
قطعات مورد نیاز
- آردوینو نانو
- ماژول نمایش OLED
- APDS9960 RGB و حسگر حرکت
- برد بورد
کد پروژه کنترل آسانسور بدون تماس با دست
کد کامل آسانسور بدون تماس با استفاده از APDS9960 در انتهای صفحه آورده شده است. در اینجا ما بعضی از قسمت های مهم کد را توضیح میدهیم. در این پروژه، ما قصد داریم از کتابخانه های APDS9960 و Adafruit_SH1106 استفاده کنیم. کتابخانه APDS9960 را می توانید توسط نرم افزار Arduino بارگیری کنید. برای بارگیری کتابخانه ، به Sketch> Library Manager> Search بروید و سپس Arduino APDS9960 را وارد کنید. کتابخانه Adafruit_SH1106 در فایل دانلودی قرار داده شده است.
طبق معمول کد را با درج همه کتابخانه های مورد نیاز شروع میکنیم. Adafruit_SH1106.h نسخه اصلاح شده کتابخانه اصلی Adafruit است.
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SH1106.h> #include <Arduino_APDS9960.h>
در خطوط بعدی ، متغیرها را تعریف میکنیم تا طبقه و شماره کف فعلی را در جایی که کاربر می خواهد ذخیره کند ، ذخیره کنیم.
int floornum=0; int currentfloor=0;
پس از آن ، بیت مپ های تصاویر فلش ها و … را وارد میکنیم. کد HEX برای تصاویر را می توان با استفاده از یک مبدل مانند Image2cpp تولید کرد.
const unsigned char up [] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,…………………………………………………………………………………….. }; const unsigned char down [] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,…………………………………………………………………………………….. }; const unsigned char dooropen [] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0, ,…………………………………………………………………………………….. };
در عملکرد () void setup ، سریال را با نرخ 9600 برای اهداف اشکال زدایی مقدار دهی میکنیم. سپس در خطوط بعدی ، نمایشگر OLED و حسگر APDS9960 را پیکربندی میکنیم.
Serial.begin(9600); if (!APDS.begin()) { Serial.println("Error initializing APDS9960 sensor!"); } Serial.println("Detecting gestures ..."); display.begin(SH1106_SWITCHCAPVCC, 0x3C);
پس از پیکربندی اولیه نمایشگر و سنسور ، بافر نمایشگر را با دستور clearDisplay ()
پاک میکنیم و اندازه و رنگ قلم را با استفاده از دستور های display.setTextSize ()
و display.setTextColor ()
تنظیم کنید.
display.setTextSize(2); display.setTextColor(WHITE); display.clearDisplay(); display.display();
در داخل void loop()
، مرتباً حرکات را بررسی میکنیم. در اینجا عملکرد های مختلف (UP ، DOWN ، RIGHT ، LEFT) را بررسی میکنیم و حرکت خوانده شده را روی سریال مانیتور چاپ میکنیم. از حرکات UP و DOWN برای تعیین طبقه مورد نظر کاربر استفاده میشود. حرکت Left درب آسانسور را میبندد و حرکت Right درب را باز میکند.
if (APDS.gestureAvailable()) { int gesture = APDS.readGesture(); switch (gesture) { case GESTURE_UP: Serial.println("Detected UP gesture"); display.clearDisplay(); floornum ++; home1(); break; case GESTURE_DOWN: Serial.println("Detected DOWN gesture"); display.clearDisplay(); floornum --; home1(); break; case GESTURE_LEFT: Serial.println("Detected LEFT gesture"); display.clearDisplay(); start(); break; case GESTURE_RIGHT: Serial.println("Detected RIGHT gesture"); display.clearDisplay(); home1(); break; default: break; }
از عملکرد home1 ()
برای ترسیم موارد مورد نیاز برای نمایشگر آسانسور استفاده میشود. شامل یک پیکان رو به بالا ، پیکان رو به پایین ، درب باز ، بستن درب و شماره طبقه فعلی است. از تابع () drawBitmap
برای ترسیم تصاویر روی صفحه نمایش OLED استفاده می شود. توضیحات تابع () drawBitmap
در زیر آورده شده است:
drawBitmap(int16_t x, int16_t y, bitmap, int16_t w, int16_t h, colour);
جایی که:
int16_t x ، int16_t y مختصات X و Y نمایشگر OLED هستند
bitmap نام تصویر بیت مپ است.
int16_t w ، int16_t h قد و عرض تصویر است.
void home1() { display.setCursor(101,23); display.println(floornum); display.drawBitmap(23, 0, uparrow, 40, 18, WHITE); display.drawBitmap(26, 46, downarrow, 40, 18, WHITE); display.drawBitmap(0, 15, dooropen, 29, 30, WHITE); display.drawBitmap(60, 15, closedoor, 29, 30, WHITE); display.display(); }
از تابع start ()
برای حرکت بالابر به سمت بالا یا پایین استفاده می شود. برای این منظور ، شماره طبقه فعلی با شماره طبقه ای که کاربر می خواهد برود مقایسه می شود. اگر شماره طبقه مورد نظر از طبقه فعلی بیشتر باشد، آسانسور به بالا میرود و اگر شماره طبقه وارد شده کمتر از طبقه فعلی باشد، آسانسور به پایین میرود.
void start() { while(floornum > currentfloor){ Serial.println("going UP "); currentfloor++; display.drawBitmap(0, 0, up, 100, 64, WHITE); display.setCursor(101,23); display.println(currentfloor); display.display(); display.clearDisplay(); delay(2000); } while(floornum < currentfloor){ Serial.println("going Down "); currentfloor--; display.drawBitmap(0, 0, down, 100, 64, WHITE); display.setCursor(101,23); display.println(currentfloor); display.display(); display.clearDisplay(); delay(2000); } if(floornum== currentfloor){ Serial.println("Reached"); display.clearDisplay(); home1(); Serial.print(currentfloor); } }
پس از آپلود کد روی آردوینو و اتصال قطعات، پروژه حرکت آسانسور بدون لمس شما آماده است. شما فقط باید دست خود را به سمت بالا یا پایین حرکت دهید تا طبقه مورد نظر را تنظیم کنید. سپس باید حرکت چپ را انجام دهید تا تایید کنید که به آن طبقه میخواهید بروید. و اگر بخواهید حرکت آسانسور را متوقف کنید باید دست خود را به سمت راست حرکت دهید.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام آقای رحیمی
من به این ارور برخوردم Error initializing APDS9960 sensor
ممنون میشم راهنمایی کنید
سلام من تمام مراحل این پروژه رو مو به مو رفتم و درست سیم ها رو متصل کردم ولی متاسفانه بعد از آپلود کد سنسور اصلا کار نمیکنه
سیستم هم اروری نداده
سلام آقای رحیمی
از چه مدل ماژول نمایشگر OLED در این پروژه استفاده شده؟
از این جهت پرسیدم چون ممکنه سایر نمایشگر های OLED درایور هاشون متفاوت باشه و وسط کار به مشکل بخورم
ممنون میشم سایزش هم بگید
سلام عزیز
SH1106 سایز 128*64 هست
کد ها تقریبا مشابه با همان ssd1306 معروف هست که در فروشگاه موجود هست و راه اندازی آن به صورت کامل در دوره آردوینو آموزش داده شده است
Error initializing APDS9960 sensor مهندس این ارور یرای چیه
شما فهمیدید راه حلش رو؟ منم به همین مشکل برخوردم
سلام خسته نباشید …
آقای رحیمی میشه این عبارتم یه توضیح بدید؟
setCursor
کارش چیه ؟
سلام عزیز
برای تنظیم مکان نوشتن متن استفاده میشه یعنی تعیین میکنید متن شما در کجای نمایشگر نشون داده بشه
برای یادگیری برنامه نویسی آردوینو میتونید دوره آموزش آردوینو را مشاهده کنید
سلام خسته نباشید ….
این عبارت رو میشه توضیح بدید؟
display.drawBitmap(23, 0, uparrow, 40, 18, WHITE);
سلام عزیز
این دستور برای نمایش تصویر استفاده میشه، تصویر uparrow با سایز مورد نظر ما در مکان مورد نظر ما چاپ میشه
این دستورات در دوره آموزش آردوینو توضیح داده شده
سلام من دارم کمک این پروژه یک اسانور حرکت دستی با اردینو درست میکنم با استپر موترمدل Stepper ,وبادرایورULN2003 ایا امکانش هست که راه بیفتد
فرقی نمیکنه که از ماژول هسگر مجاورتی9930استفاده کنم یا9960
سلام عزیز
باید مدل استپر موتور خود را بررسی کنید احتمال زیاد با ULN2003 سازگار باشه، ماژول مجارتی هم چیز خاصی نیست احتمالا با مدل های مشابه بشه باز هم دیتاشیت رو بررسی کنید.
سلام آقای رحیمی خسته نباشید
OLED رو چطوری تست رکنم که سالمه یا نه چون روی برد برد نصب کردم روشن نمیشه مشکل از چیه؟
سلام عزیز
اتصالات را صحیح انجام دهید و یک کد ساده برای راه اندازی OLED آپلود کنید اگر روشن نشود مشکل دار هست. برای یادگیری کامل کار با نمایشگر OLED دوره آردوینو را مشاهده کنید
ببخشید ، حالا یه سوال دیگه :
OLED مدل ssd1306
با
OLED توی پروژه فرق میکنه ؟
سلام عزیز
بله درایور این نمایشگر SSD1306 نیست و متفاوت است
سلام و وقت بخیر.
توی فایل های پروژه چندین فایل هست . میخواستم ببینم کدوم رو کپی کنیم واسه اینکه کار کنه پروژه؟
سلام عزیز
یک فایل سورس کد هست و یک فایل کتابخانه هست که باید نصب بشه
اگر با آردوینو آشنایی ندارید دوره آموزش آردوینو رو مشاهده کنید.
سلام مهندس سورس برنامه زبان cدر فایل زیپ قرار داده نشده است
سلام عزیز
بررسی کردم فایل سالم و صحیح هست
با نرم افزار WinRAR باز کنید
سلام و خسته نباشید خدمت آقای رحیمی
آقای رحیمی میشه آیدی تلگرام بدید؟؟
چندتا سوال داشتم اینجا نمیتونم بپرسم
سلام عزیز
سوالتون رو در همینجا یا در انجمن مطرح بفرمایید
سلام وقت بخیر
ببخشید به جای APDS 9960 می توان از APDS 9930 استفاده کرد؟لطف می کنید راهنمایی کنید اگر می شود چه تغییراتی باید انجام شود و کد به چه صورت می شود.
سلام عزیز، تست نکردیم اما احتمالا به تغییرات زیادی نیاز نیست
سلام.من اصلا با کامپایل شدن این برنامه مشکل دارم.
Low memory available Stability problems
occur.ease!
الان نمایشگر اومده
اما سنسور حرکتی کار نمیکنه
این ارور نیست یک هشداره و میتونید نادیده بگیرید.
جناب رحیمی خطای
low memory
دارم چه کار کنم؟
سلام جناب، متن ارور رو کامل ارسال کنید.
سلام وقت بخیر
متاسفانه من با خطای
adafruit_sh1106.h:no such file or directory
مواجه شدم هر کاری هم میکنم اوکی نمیشه
پیشنهادتون چیه
سلام جناب، باید کتابخانه مورد نیاز رو نصب کنید.
سلام
آقای رحیمی میخواهم برد رو پروگرام اخطار میاری ممنون میشم راهنمایی ام کنی.
سلام جناب، اروری که دریافت میکنید رو اینجا ارسال کنید.
مهندس جان منظورم کدوم پایه های اردینو خروجی اسانسور هست
سلام جناب. در قسمت void loop، شما case های متفاوتی رو مشاهده میکنید که مربوط به عملکرد های مختلف هستند، دستور digitalWrite رو در case های مورد نظرتون قرار بدید تا تعیین کنید در شرایط مختلف کدام پین خروجی شود.
مهندس جان با درود سلامت باش خدمتتون جای تشکر دارد از پروژه که ارایه دادید. فقط مهندس سیم بندی اردینو با پنل اسانسور هم توضیح بدید ممنون میشم
سلام جناب. ممنونم. هماهنگ سازی پروژه با پنل آسانسور کار فردی هست که با پنل های آسانسور آشنایی داشته باشه
جناب رحیمی ممنون بابت این پروژه فوق العاده
سلام جناب، خوشحالم که مفید بوده براتون