پروژه الکترونیکپروژه های آردوینو

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

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

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

پروژه های دیگر در زمینه کرونا را هم مشاهده کنید : 

این آسانسور بدون تماس از برد آردوینو نانو ، یک حسگر حرکت 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 سانتی متر است و می تواند برای کنترل میکروکنترلر ، ربات و بسیاری از پروژه های دیگر مورد استفاده قرار گیرد.

حسگر حرکت APDS9960 RGB

امکانات:

  • ولتاژ عملیاتی: 2.4 ولت تا 3.6 ولت
  • محدوده عملکرد: 4-8 اینچ (10-20 سانتی متر)
  • رابط I2C (آدرس I2C: 0x39)
  • نور محیط و حسگر رنگی RGB ، مجاورت
  • حسگر و تشخیص حرکت در یک ماژول نوری
  • رابط سازگار با حالت سریع I2C-bus با نرخ داده تا 400 کیلوهرتز

قطعات مورد نیاز

  1. آردوینو نانو
  2. ماژول نمایش OLED
  3. APDS9960 RGB و حسگر حرکت
  4. تخته نان
  5. سیم های بلوز

کد پروژه کنترل آسانسور بدون تماس با دست

کد کامل آسانسور بدون تماس با استفاده از 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);
      }
  }

فیلم عملکرد حرکت آسانسور بدون لمس

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

موارد موجود در فایل : سورس کامل 

پروژه ها رایگان هستند. برای دانلود فایل های پروژه باید در سایت عضو باشید. ثبت نام / ورود

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

محمد رحیمی

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

6 نظر

    1. سلام جناب. در قسمت void loop، شما case های متفاوتی رو مشاهده میکنید که مربوط به عملکرد های مختلف هستند، دستور digitalWrite رو در case های مورد نظرتون قرار بدید تا تعیین کنید در شرایط مختلف کدام پین خروجی شود.

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

    1. سلام جناب. ممنونم. هماهنگ سازی پروژه با پنل آسانسور کار فردی هست که با پنل های آسانسور آشنایی داشته باشه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *