آموزش آردوینوپروژه های آردوینو

آموزش ساخت سطل زباله هوشمند با آردوینو

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

چرا باید از سطل زباله هوشمند استفاده کنیم؟

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

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

مزیت اصلی سطل زباله هوشمند با آردوینو نانو این است که به تمیزی محیط کمک کرده و همچنین سازگار با محیط زیست است. این تلاش از ماموریت سواچ بهارات الهام گرفته است. ( کمپین اجرا شده در سراسر کشور هند از سال 2014 برای افزایش مدیریت بر زباله های جامد.)

سطل زباله هوشمند ما، از اتصال 2 سرووموتور، یک سنسور التراسونیک و یک سنسور IR (مادون قرمز) به میکروکنترلر (بورد آردوینو نانو) ساخته میشود.

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

قطعات لازم

  1. آردوینو نانو
  2. 2 عدد سرووموتور MG966R
  3. سنسور التراسونیک HC-SR04
  4. سنسور IR
  5. دو لامپ LED (برای فیدبک و بازخورد دیداری)
  6. باتری لیتیوم-یون 7.4 ولتی
  7. مبدل باک LM2596 DC-DC
  8. سوکت آداپتور DC و کلید
  9. سیم های جامپر
  10. برد بورد یا PCB

مدار اتصال سطل زباله هوشمند با آردوینو نانو

تصویر پایین مدار اتصال سطل زباله هوشمند با آردوینو را نشان میدهد. از آنجایی که این پروژه تنها از سه عنصر اصلی به همراه آردوینو استفاده میکند (سنسور التراسونیک، سنسور IR و دو سرووموتور)، طرح بسیار ساده است.

مدار اتصال سطل زباله هوشمند با آردوینو نانو

مهم : چون ولتاژ شارژ باتری لیتیوم-یون، 8.2 ولت است، ولتاژ خروجی مبدل باک را در محدوده 8 تا 8.2 ولت تنظیم کنید. انجام این کار هنگامی که باتری از طریق یک سوکت شارژ 12 ولتی شارژ میشود، ضروری است. چون مبدل باک به طور موثر ولتاژ را از 12 ولت به 8 ولت کاهش میدهد.

بورد آردوینو نانو را به برد بورد یا PCB متصل کنید و از اتصال پایه های تغذیه و زمین مطمئن شوید. باتری لیتیوم-یون 7.4 ولتی را به وسیله یک کلید به پایه Vin آردوینو متصل کنید. این کلید اجازه قطع و وصل کردن ارتباط آردوینو با منبع تغذیه خارجی ( باتری) را میدهد. سوکت شارژ و پورت برنامه نویسی آردوینو نانو را در تصویر پایین مشاهده میکنید.

سطل آشغال خودکار با آردوینو

سیم مثبت (قرمز) را به خروجی 7.5 ولت مFدل باک DC-DC متصل کرده و مطمئن شوید که در صورت نیاز قابلیت تنظیم به 8.1 ولت را دارد. سیم مشکی (GND)  را به زمین آردوینو نانو متصل کنید و سیم سیگنال دیجیتال (آبی) باید به پایه 2 دیجیتال آردوینو نانو متصل شود.

سنسور تشخیص مانع

سیم مثبت را به خروجی 7.4 ولت مبدل DC-DC متصل کنید و مطمئن شوید که در صورت لزوم میتواند روی 8.1 ولت تنظیم شود. سیم زمین را به زمین (GND) آردوینو متصل کرده و در نهایت سیم سیگنال یا داده سنسور را به پایه 4 دیجیتال آردوینو نانو وصل کنید. دو سروو موتوری که برای باز و بسته کردن درب سطل استفاده کرده ایم، در تصویر پایین قابل مشاهده اند.

سروو موتور حرکت سطل زباله

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

سیم های سیگنال دو سرووموتور را به 2 پایه PWM  آردوینو مثل پایه 9 و 5 متصل کنید. سیم های تغذیه سرووموتورها را به خروجی 7.4 ولت مبدل DC-DC متصل کنید. در نهایت، سیم های سرووموتور را به پایه های GND آردوینو متصل کنید.

در اتصال تغذیه مدار، ترمینال مثبت باتری را از طریق یک دیود به خروجی مبدل باک LM2596 متصل کنید و سپس آن را با یک کلید به پایه Vin  آردوینو اتصال دهید.

ترمینال منفی باتری را به زمین (GND) آردوینو، مبدل باک LM2596 و بقیه اجزا متصل کنید. ( همه زمین ها باید به هم وصل شوند.) و در آخر، ورودی LM2596 را به سوکت آداپتور DC وصل کنید.

اجزای سطل زباله هوشمند

با استفاده از پیچ و مهره و درصورت نیاز چسب گرم، تمامی اجزا را به بدنه محکم کنید.

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

طراحی سطل زباله هوشمند با آردوینو

ما درب باز و بسته شونده و نگهدارنده سنسور التراسونیک را مطابق با میل خود و مختص این پروژه طراحی کرده ایم. میتوانید تصاویری از CAD design آن را که با استفاده از Onshape طراحی شده به علاوه سطل زباله واقعی ساخته شده را در زیر مشاهده کنید.

طراحی سطل زباله هوشمند

اگر علاقه مند به طراحی دوباره این پروژه یا ترکیب پروژه خود با طرح ما هستید، میتوانید فایل های CAD با پسوند .dxf را از thingiverse دانلود کنید.

درب سطل زباله هوشمند با آردوینو

کد آردوینو سطل زباله هوشمند

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

#include <Servo.h>

کتابخانه Servo که برای کنترل سرووموتورها ضروری است را فراخوانی میکنیم.

const int trigPin = 2;  // Trig pin of the ultrasonic sensor
const int echoPin = 3;  // Echo pin of the ultrasonic sensor
const int irSensorPin = 4;   // IR sensor pin
const int ledPin = 7;   // LED pin
const int lightPin = 6; // Light pin

در این بخش از کد، چند ثابت تعریف کرده و مشخص میکنیم که پایه های مختلف اجزای این مدار به کدام پایه از آردوینو متصل شده اند. ( مثلا trigPin  و echoPin که دو پایه سنسور التراسونیک هستند  به پایه های 2 و3 آردوینو متصل شده اند.)

Servo servo1;
Servo servo2;
bool lidOpen = false;  // Variable to track the lid status
unsigned long lastObjectTime = 0;  // Timestamp to track when object was last detected

نمونه هایی از کلاس Servo میسازیم. این نمونه ها در کنترل دو سروو موتور استفاده میشوند. (servo1,servo2)

در اینجا دو متغیر هم داریم. یکی lidOpen که یک متغیر بولی است و باز یا بسته بودن درب سطل را نشان میدهد و دیگری lastObjectTime، متغیری از نوع unsigned long که زمان آخرین باری که یک جسم شناسایی شده است را در خود ذخیره میکند.

void setup() {
  servo1.attach(9);
  servo2.attach(5);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(irSensorPin, INPUT);
  pinMode(ledPin, OUTPUT);
// Initialize the servo positions to keep the lid closed
  servo1.write(90); //right
  servo2.write(90); //left
   // Delay for 1 second
  delay(1000);
   // Initialize the serial communication for debugging
  Serial.begin(9600);
}

در تابع ()setup، مشخص میکنیم که سروو موتور ها به پایه 9 و5 متصل شده و پایه های سنسور التراسونیک، سنسور IR و لامپ LED را به عنوان پایه های ورودی یا خروجی پیکربندی میکنیم. سرووموتورها به طور پیش فرض درب سطل را بسته نگاه میدارند و در زاویه ابتدایی 90 درجه تنظیم شده اند. بعد یک از تاخیر 1000 میلی ثانیه ای ( 1 ثانیه ای) ارتباط سریال برای اشکال زدایی و دیباگ کردن با نرخ باد 9600 آغاز میشود.

void loop() {
  // Check if an object is within a certain range using the ultrasonic sensor
  long duration;
  int distance;

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;  // Calculate distance in centimeters
  Serial.println(distance);

در تابع ()loop، کد به طور مداوم فاصله را با استفاده از سنسور التراسونیک اندازه میگیرد. به این صورت که سنسور را تحریک کرده، زمانی که طول میکشد تا سیگنال برگردد را اندازه میگیرد و سپس این زمان را به فاصله و بر حسب سانتی متر تبدیل کرده و نتیجه را روی سریال مانیتور نمایش میدهد.

 // Check if the IR sensor is activated
  int irSensorValue = digitalRead(irSensorPin);
 Serial.println(irSensorValue);

کد، HIGH یا LOW  بودن سنسور IR را بررسی میکند و نتیجه را روی سریال مانیتور نمایش میدهد.

// If distance is less than 40 cm or the IR sensor is activated
  if (distance < 40 || irSensorValue == LOW ) {  // Change the threshold value as needed
     // If the lid is not open, open it and set the status
   if (!lidOpen) {
      lidOpen = true;
      digitalWrite(ledPin, HIGH);
      digitalWrite(lightPin, HIGH);
      Serial.println("Led On");

این بلوک کد ( بلوک 1)، با یک دستور if آغاز شده و دو شرط را بررسی میکند. اول اینکه آیا فاصله تشخیص داده شده توسط سنسور التراسونیک از 40 سانتی متر کمتر است یا خیر. و دوم اینکه متغیر irSensorValue در وضعیت LOW هست یا خیر.

LOW بودن این متغیر به معنی شناسایی یک جسم و فعال بودن سنسور IR است. اگر هر یک از شرط ها تحقق یافته باشند، کد نادرستی lidOpen را بررسی میکند. اگر درب سطل باز نباشد (!lidOpen  درست باشد) پروسه ادامه پیدا خواهد کرد تا درب باز شده و lidOpen درست و true شود. لامپ LED (ledPin) و نور (lightPin)  وقتی HIGH باشند، فعالند و فیدبک دیداری را به مدار اضافه میکنند. هم چنین پیام “Led On” برای اشکال زدایی و دیباگ کردن بر روی سریال مانیتور نمایش داده خواهد شد.

for (int angle = 90; angle <= 180; angle++) {
      servo1.write(angle);
      servo2.write(180 - angle);
      delay(10);
    }
   }

یک حلقه for برای به آرامی و گام به گام باز کردن درب سطل زباله داریم. این حلقه از زاویه ابتدایی 90 درجه تا 180 درجه تغییر میکند و تکرار میشود و  زوایای servo1  وservo2 را به صورت هماهنگ تغییر میدهد تا درب آهسته باز شود. همچنین یک تاخیر 10 میلی ثانیه ای در هر گام درنظر گرفته شده تا سرعت سرووموتورها کنترل شود.

 lastObjectTime = millis(); // Record the time when an object was detected

بعد از باز شدن درب، کد، زمان فعلی و حال را با استفاده از تابع ()milis اندازه میگیرد. این زمان در متغیر lastObjectTime ذخیره شده تا زمان آخرین باری که یک جسم شناسایی شده را دنبال کنیم.

else {
    // If the lid was open and it's been more than 2 seconds since an object was detected, close it
    if (lidOpen && millis() - lastObjectTime >= 2000)

اگر هیچکدام از شرط های بلوک کد 1 برآورده نشده باشد، یعنی هیچ جسمی تشخیص داده نشده باشد و جسم خارج از میدان دید سنسور باشد، کد با بررسی درست بودن lidOpen از باز بودن درب مطمئن میشود. چون درست بودن lidOpen به معنی این است که درحال حاضر درب سطل باز است. سپس با استفاده از تابع ()milis، بررسی میشود از آخرین باری که یک جسم شناسایی شده 2 ثانیه میگذرد یا خیر.

{
    for (int angle = 180; angle >= 90; angle--) {
      servo1.write(angle);
      servo2.write(180 - angle);
      delay(20);
    }
    lidOpen = false;
    // Turn off the LED
    digitalWrite(ledPin, LOW);
    digitalWrite(lightPin,LOW);
    Serial.println("Led Off");
  }
  }}

اگر درب باز بوده و بیش از 2 ثانیه از آخرین شناسایی جسم گذشته باشد، درب کم کم بسته میشود. لامپ LED و نور خاموش شده و متغیر lidOpen نادرست و false میشود.

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

بررسی عملکرد سطل زباله هوشمند

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

بررسی عملکرد سطل زباله هوشمند

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

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

به طور مشابه، وقتی از محدوده سنسور IR خارج میشوید، درب دوباره بسته شده و یک تجربه بهداشتی و بدون استفاده از دست را به شما هدیه میکند.

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

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

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

4.4 (7 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

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

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