فهرست مطالب:

سطل مرتب - سطل زباله خود را شناسایی و مرتب کنید: 9 مرحله
سطل مرتب - سطل زباله خود را شناسایی و مرتب کنید: 9 مرحله

تصویری: سطل مرتب - سطل زباله خود را شناسایی و مرتب کنید: 9 مرحله

تصویری: سطل مرتب - سطل زباله خود را شناسایی و مرتب کنید: 9 مرحله
تصویری: باور نخواهید کرد چرا پنبه در ناف جمع می شود و علت این پدیده چیست؟ 2024, دسامبر
Anonim
Image
Image
چگونه کار می کند
چگونه کار می کند

آیا تا به حال کسی را دیده اید که بازیافت نمی کند یا این کار را بد انجام می دهد؟

آیا تا به حال آرزو کرده اید که دستگاهی برای شما بازیافت شود؟

به خواندن پروژه ما ادامه دهید ، پشیمان نخواهید شد!

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

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

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

در بخشهای بعدی ، این پروژه گام به گام توضیح داده می شود.

مرحله 1: چگونه کار می کند

چگونه کار می کند
چگونه کار می کند
چگونه کار می کند
چگونه کار می کند

سطل مرتب سازی به گونه ای طراحی شده است که کار را نسبتاً آسان برای کاربر انجام دهد: زباله ها باید از سوراخی که در صفحه بالایی قرار دارد وارد شوند ، دکمه زرد باید فشار داده شود و روند شروع می شود و با زباله ها به یکی ختم می شود. از دریافت کنندگان اما اکنون این س isال مطرح است که … این فرایند در داخل چگونه کار می کند؟

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

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

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

مرحله 2: بیل مواد (BOM)

قطعات مکانیکی:

  • قطعاتی برای ساختار زیر خریداری شده است

    • ساختار فلزی [پیوند]
    • جعبه خاکستری [پیوند]
  • چاپگر سه بعدی

    PLA برای تمام قطعات چاپ شده (از مواد دیگر نیز می توان استفاده کرد ، مانند ABS)

  • دستگاه برش لیزری

    • ام دی اف 3 میلی متر
    • پلکسی گلاس 4 میلی متر
  • مجموعه بلبرینگ خطی [پیوند]
  • بلبرینگ خطی [پیوند]
  • شفت [پیوند]
  • نگهدارنده شفت (x2) [پیوند]

قطعات الکترونیکی:

  • موتور

    موتور پله ای خطی نما 17 [پیوند]

  • باتری

    باتری 12 ولت [پیوند]

  • سنسورها

    • 2 سنسور اولتراسونیک HC-SR04 [پیوند]
    • 2 سنسور القایی LJ30A3-15 [پیوند]
  • میکروکنترلر

    1 برد arduino UNO

  • اجزای اضافی

    • درایور DRV8825
    • 3 LED: قرمز ، سبز و نارنجی
    • 1 دکمه
    • برخی از سیم های پرشی ، سیم ها و صفحات لحیم کاری
    • تخته نان
    • کابل USB (اتصال Arduino-PC)
    • خازن: 100uF

مرحله 3: طراحی مکانیکی

Image
Image
طراحی مکانیکی
طراحی مکانیکی
طراحی مکانیکی
طراحی مکانیکی

در تصاویر قبلی ، تمام قسمت های مونتاژ نشان داده شده است.

برای طراحی مکانیکی ، SolidWorks به عنوان برنامه CAD استفاده شده است. قسمتهای مختلف مجموعه با در نظر گرفتن روش تولیدی که قرار است تولید شود طراحی شده است.

قطعات برش لیزری:

  • ام دی اف 3 میلی متر

    • ستون ها
    • صفحه بالا
    • سنسورهای اولتراسونیک پشتیبانی می کنند
    • پشتیبانی از سنسورهای القایی
    • جعبه آشغال
    • پشتیبانی از باتری
    • Breadboard و Arduino پشتیبانی می کند
  • پلکسی گلاس 4 میلی متر

    سکو

قطعات چاپ سه بعدی:

  • پایه ستون ها
  • عنصر انتقال حرکت خطی از موتور پله ای
  • استپر موتور و پشتیبانی بلبرینگ
  • قطعات تثبیت کننده دیوار برای جعبه زباله

بسته به دستگاهی که برای این منظور مورد استفاده قرار می گیرد ، برای تولید هر یک از این قطعات ، فایل های STEP باید به فرمت صحیح وارد شوند. در این حالت ، فایل های.dxf برای دستگاه برش لیزری و فایل های ggode برای چاپگر سه بعدی (Ultimaker 2) استفاده شده است.

مجموعه مکانیکی این پروژه را می توانید در فایل. STEP ضمیمه شده در این قسمت مشاهده کنید.

مرحله 4: الکترونیک (انتخاب قطعات)

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

برد Arduino UNO (به عنوان میکروکنترلر):

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

موتور (موتور پله ای خطی نما 17):

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

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

DRV8825 درایور:

از این برد برای کنترل استپر موتور دوقطبی استفاده می شود. دارای یک جریان کنترل قابل تنظیم است که به شما امکان می دهد حداکثر خروجی جریان را با پتانسیومتر و همچنین شش وضوح گام مختلف تنظیم کنید: تمام مرحله ، نیم مرحله ، 1/4 مرحله ، 1/8 مرحله ، 1/16- مرحله ، و 1/32 مرحله ای (ما در نهایت از مرحله کامل استفاده کردیم زیرا نیازی به مراجعه به microstepping نداشتیم اما می توان از آن برای بهبود کیفیت حرکت استفاده کرد).

سنسورهای اولتراسونیک:

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

اگرچه خروجی این سنسور یک مقدار (فاصله) است ، اما با تعیین یک آستانه برای تعیین وجود یا نبودن یک جسم ، ما تبدیل می کنیم

سنسورهای القایی:

براساس قانون فارادی ، این سنسور به دسته سنسورهای مجاورت الکترونیکی بدون تماس تعلق دارد. ما آنها را در پایین جعبه متحرک ، زیر سکوی پلکسی که شی را پشتیبانی می کند ، قرار دادیم. هدف آنها تمایز بین شیء فلزی و غیر فلزی است که خروجی دیجیتالی (0/1) دارد.

LED (سبز ، زرد ، قرمز):

ماموریت آنها برقراری ارتباط با کاربر است:

-LED سبز روشن: ربات منتظر یک شی است.

LED قرمز روشن: دستگاه کار می کند ، نمی توانید هیچ جسمی را پرتاب کنید.

-LED زرد روشن: یک شی شناسایی می شود.

باتری 12 ولت یا منبع تغذیه 12 ولت + قدرت USB 5 ولت:

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

مسائلی که پیدا کردیم:

  • تشخیص حسگر القایی ، ما دقت مورد نظر را بدست نیاورده ایم ، زیرا گاهی اوقات یک جسم فلزی که در موقعیت بدی قرار دارد درک نمی شود. این به دلیل 2 محدودیت است:

    • مساحت تحت پوشش سنسورها در سکوی مربعی کمتر از 50 درصد آن را نشان می دهد (بنابراین شیء کوچک را نمی توان تشخیص داد). برای حل آن توصیه می کنیم از 3 یا 4 سنسور القایی استفاده کنید تا مطمئن شوید بیش از 70 درصد مساحت را پوشش می دهد.
    • فاصله تشخیص سنسورها به 15 میلی متر محدود شده است ، بنابراین ما مجبور شدیم از یک پلت فرم پلکسی گلاس خوب استفاده کنیم. این نیز می تواند محدودیت دیگری در تشخیص اجسام با شکل عجیب باشد.
  • تشخیص اولتراسونیک: باز هم ، اجسامی که به شکل پیچیده ای شکل گرفته اند مشکلاتی را ایجاد می کنند زیرا سیگنال ساطع شده از حسگرها بد منعکس شده و دیرتر از آنچه باید به سنسور باز می گردد.
  • باتری: ما برخی از مسائل مربوط به کنترل جریان ارائه شده توسط باتری را داریم و برای حل آن در نهایت از منبع تغذیه استفاده کردیم. با این حال ، راه حل های دیگر مانند استفاده از دیود را می توان انجام داد.

مرحله 5: الکترونیک (اتصالات)

الکترونیک (اتصالات)
الکترونیک (اتصالات)
الکترونیک (اتصالات)
الکترونیک (اتصالات)

این بخش سیم کشی اجزای مختلف را نشان می دهد. همچنین نشان می دهد که هر جزء به کدام پین در آردوینو متصل است.

مرحله ششم: برنامه نویسی

برنامه نويسي
برنامه نويسي

این بخش منطق برنامه نویسی پشت دستگاه مرتب سازی Bin را توضیح می دهد.

این برنامه به 4 مرحله تقسیم می شود که به شرح زیر است:

  1. راه اندازی اولیه سیستم
  2. حضور اجسام را بررسی کنید
  3. نوع شی موجود را بررسی کنید
  4. جعبه حرکت

برای توضیحات دقیق هر مرحله ، موارد زیر را ببینید:

مرحله 1: سیستم را اولیه کنید

پانل LED (3) - مجموعه کالیبراسیون LED (قرمز) HIGH ، LED آماده (سبز) LOW ، شی موجود (زرد) LOW

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

  • آزمایش سنسور اولتراسونیک را برای اندازه گیری فاصله از یک طرف به دیوار جعبه اجرا کنید

    • موقعیت اولیه == 0 >> به روز رسانی مقادیر Ready LED HIGH و Calibrating LED LOW -> مرحله 2
    • موقعیت اولیه! = 0 >> ارزش خواندن دیجیتال سنسورهای اولتراسونیک و بر اساس مقادیر سنسور:

      • به روز رسانی مقدار موتور LED بالا حرکت می کند.
      • جعبه حرکت را اجرا کنید تا زمانی که مقدار هر دو سنسور اولتراسونیک <مقدار آستانه باشد.

مقدار به روز رسانی موقعیت اولیه = 1 >> ارزش به روز رسانی LED Ready HIGH و حرکت موتور LOW و کالیبراسیون LOW >> مرحله 2

گام 2

حضور اجسام را بررسی کنید

تشخیص شیء اولتراسونیک را اجرا کنید

  • Object present == 1 >> مقدار به روز شده Object present LED HIGH >> مرحله 3
  • Object present == 0 >> هیچ کاری نکنید

مرحله 3

نوع شی موجود را بررسی کنید

تشخیص حسگر استقرایی را اجرا کنید

  • inductiveState = 1 >> مرحله 4
  • inductiveState = 0 >> مرحله 4

مرحله 4

جعبه حرکت

عملیات موتور را اجرا کنید

  • inductiveState == 1

    به روز رسانی موتور LED در حال حرکت بالا >> حرکت موتور به چپ ، (به روز رسانی موقعیت اولیه = 0) تأخیر و حرکت به عقب راست >> مرحله 1

  • inductiveState == 0

    به روز رسانی موتور LED در حال حرکت بالا >> حرکت موتور را به راست ، (به روز رسانی موقعیت اولیه = 0) ، تأخیر و حرکت به عقب چپ >> مرحله 1

کارکرد

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

پس از مرحله 4 ، برنامه به طور کامل اجرا شده است و قبل از اجرا مجدد به مرحله 1 باز می گردد.

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

آنها به ترتیب عبارتند از:

  • inductiveTest ()
  • moveBox (inductiveState)
  • ultrasonicObjectDetection ()

// بررسی کنید که آیا شیء فلزی است یا خیر

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {true true؛ else {return false؛ }} void moveBox (bool inductiveState) {// جعبه وقتی فلز شناسایی می شود به سمت چپ می رود و inductiveState = true اگر (inductiveState == 0) {stepper.moveTo (مراحل) ؛ // موقعیت تصادفی برای آزمایش stepper.runToPosition ()؛ تاخیر (1000) ؛ stepper.moveTo (0) ؛ stepper.runToPosition ()؛ تاخیر (1000) ؛ } else if (inductiveState == 1) {stepper.moveTo (-steps)؛ // موقعیت تصادفی برای آزمایش stepper.runToPosition ()؛ تاخیر (1000) ؛ stepper.moveTo (0) ؛ // موقعیت تصادفی برای آزمایش stepper.runToPosition ()؛ تاخیر (1000) ؛ }} boolean ultrasonicObjectDetection () {long duration1، distance1، durationTemp، distanceTemp، averageDistance1، averageDistanceTemp، averageDistanceOlympian1؛ // تعداد اندازه گیری ها را برای انجام مسافت های طولانی تعریف کنید Max = 0؛ مسافت طولانی حداقل = 4000 ؛ مسافت طولانیTotal = 0؛ برای (int i = 0؛ i distanceMax) {distanceMax = distanceTemp؛ } if (distanceTemp <distanceMin) {distanceMin = distanceTemp؛ } distanceTotal+= distanceTemp؛ } Serial.print ("Sensor1 maxDistance")؛ Serial.print (distanceMax)؛ Serial.println ("میلی متر") ؛ Serial.print ("سنسور 1 دقیقه فاصله") ؛ Serial.print (distanceMin) ؛ Serial.println ("میلی متر") ؛ // فاصله متوسط را از خوانش های میانگین فاصله 1 = distanceTotal/10 بگیرید؛ Serial.print ("Sensor1 averageDistance1") ؛ Serial.print (averageDistance1) ؛ Serial.println ("میلی متر") ؛ // بالاترین و پایین ترین مقادیر اندازه گیری ها را حذف کنید تا از خواندن اشتباهات خودداری کنید averageDistanceTemp = distanceTotal - (distanceMax+distanceMin) ؛ averageDistanceOlympian1 = averageDistanceTemp/8؛ Serial.print ("Sensor1 averageDistanceOlympian1")؛ Serial.print (averageDistanceOlympian1)؛ Serial.println ("میلی متر") ؛

// تنظیم مجدد مقادیر دما

distanceTotal = 0؛ distanceMax = 0؛ distanceMin = 4000؛ long duration2، distance2، averageDistance2، averageDistanceOlympian2؛ // تعداد اندازه گیری هایی که باید انجام شود (int i = 0؛ i distanceMax) {distanceMax = distanceTemp؛ } if (distanceTemp <distanceMin) {distanceMin = distanceTemp؛ } distanceTotal+= distanceTemp؛ } Serial.print ("Sensor2 maxDistance")؛ Serial.print (distanceMax)؛ Serial.println ("میلی متر") ؛ Serial.print ("سنسور 2 دقیقه فاصله") ؛ Serial.print (distanceMin) ؛ Serial.println ("میلی متر") ؛ // فاصله متوسط را از خوانش ها میانگین فاصله 2 = distanceTotal/10 بگیرید؛ Serial.print ("Sensor2 averageDistance2") ؛ Serial.print (averageDistance2) ؛ Serial.println ("میلی متر") ؛ // بالاترین و پایین ترین مقادیر اندازه گیری ها را حذف کنید تا از خواندن اشتباهات خودداری کنید averageDistanceTemp = distanceTotal - (distanceMax+distanceMin) ؛ averageDistanceOlympian2 = averageDistanceTemp/8؛ Serial.print ("Sensor2 averageDistanceOlympian2")؛ Serial.print (averageDistanceOlympian2)؛ Serial.println ("میلی متر") ؛ // بازنشانی مقادیر دما distanceTotal = 0؛ distanceMax = 0؛ distanceMin = 4000؛ if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {true true؛ } else {return false؛ }}

بدنه اصلی

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

هشدار

آزمایشهای زیادی برای یافتن ثابتها انجام شد: blankBoxDistance ، مراحل و حداکثر سرعت و شتاب در راه اندازی.

مرحله 7: پیشرفت های احتمالی

بهبودهای احتمالی
بهبودهای احتمالی

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

-با توجه به مسائلی که با تشخیص اولتراسونیک پیدا کردیم ، می توانیم به دنبال جایگزینی برای این عملکرد باشیم: لیزر و آشکارساز لیزری KY-008 (تصویر) ، سنسورهای خازنی.

مرحله 8: محدود کردن عوامل

این پروژه مطابق دستورالعمل ها عمل می کند ، اما در مراحل زیر باید مراقبت ویژه ای انجام شود:

کالیبراسیون سنسورهای اولتراسونیک

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

منبع نیرو

توان مورد نیاز راننده پله ای DRV8825 12 ولت و بین 0.2 تا 1 آمپر است. آردوینو همچنین می تواند با حداکثر 12 ولت و 0.2 آمپر با استفاده از ورودی جک در آردوینو تغذیه شود. در صورت استفاده از منبع تغذیه یکسان برای راننده آردوینو و موتور پله ای باید مراقبت ویژه ای صورت گیرد. اگر از پریز برق معمولی با استفاده از منبع تغذیه آداپتور 12V/2A AC/DC تغذیه می کنید ، قبل از تغذیه درایور موتور آردوینو و پله ای ، باید یک تنظیم کننده ولتاژ و دیودهایی در مدار وجود داشته باشد.

خانه سازی جعبه

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

راننده استپر DRV8825 تنظیم

راننده استپر برای کار با موتور پله ای به تنظیم نیاز دارد. این کار به صورت آزمایشی با چرخاندن پتانسیومتر (پیچ) روی تراشه DRV8825 انجام می شود تا جریان مناسب به موتور وارد شود. بنابراین ، پیچ پتانسیومتر را کمی بچرخانید تا زمانی که موتور به صورت خمیده عمل کند.

مرحله 9: اعتبار

این پروژه به عنوان بخشی از یک دوره مکاترونیک در طول سال تحصیلی 2018-2019 برای استاد Bruface در Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB) انجام شد.

نویسندگان عبارتند از:

ماکسیم دکلیر

لیدیا گومز

مارکوس پودر

آدریانا پوئنتس

نارجیسه اسنوسی

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

توصیه شده: