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

عصا نابینایان التراسونیک با آردوینو (الهام از کوسه)

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

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

ما قبلا در آیرنکس نحوه ساخت یک عصا دیجیتال را قرار دادیم میتوانید عملکرد آن را بررسی کنید: ساخت عصا دیجیتال برای نابینایان با آردوینو

مدار عصا نابینایان هوشمند

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

مدار عصا نابینایان هوشمند

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

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

  • سنسور اولتراسونیک
  • آردوینو پرو مینی (یا آردوینو دیگر)
  • بازر
  • موتور هپتیک
  • باتری لیتیوم یون

کد آردوینو برای عصا نابینایان هوشمند

Arduino IDE برای برنامه ریزی میکروکنترلر اصلی (Arduino Pro mini) استفاده شده و همچنین پروژه توسط کد کوچکی که در زیر توضیح داده شده است کار میکند. کد کامل در انتهای مطلب قرار داده شده است و در اینجا قسمت های مهم کد را توضیح میدهیم.

const int TRIGGER_PIN = 6;
const int ECHO_PIN = 5;
const int buzzer = 4;
const int MOTOR_PIN = 7;

این بخش پین های استفاده شده توسط اجزای دیگر مدار را تعریف می کند. TRIGGER_PIN به پین Trigger سنسور اولتراسونیک، ECHO_PIN به پین Echo سنسور، buzzer به بازر و MOTOR_PIN به یک موتور هپتیک متصل است.

const int ALERT_DISTANCE = 100; // هشدار در صورت کمتر شدن فاصله

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

const int BUZZER_ON_TIME = 500; // تایم بازر بر حسب میلی ثانیه
const int MOTOR_ON_TIME = 200; // تایم موتور بر حسب میلی ثانیه
const int LOOP_DELAY = 50; // تاخیر کلی تکرار عملکرد ها

این بخش ثابت های زمانی مورد استفاده در برنامه را تعریف می کند. BUZZER_ON_TIME و MOTOR_ON_TIME به ترتیب مدت‌هایی هستند که آژیر و موتور لمسی هپتیک می‌مانند. LOOP_DELAY زمان تأخیر بین خواندن از سنسور اولتراسونیک است.

void setup() {
  // تنظیم پین ها
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(MOTOR_PIN, OUTPUT);
  // مقدار دهی ارتباط سریال برای عیب یابی
  Serial.begin(9600);
}

این تابع در ابتدای برنامه فقط یک بار اجرا می شود. حالت هر یک از پین های تعریف شده (TRIGGER_PIN، ECHO_PIN، buzzer، و MOTOR_PIN) را روی INPUT یا OUTPUT تنظیم کردیم. همچنین ارتباط سریال را با نرخ باود 9600 شروع میکنیم و امکان ارسال پیام‌های اشکال زدایی را از طریق USB فراهم می‌کند.

void loop() {
  // ارسال پالس التراسونیک
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  //محاسبه طول بازگشت پالس
  long duration = pulseIn(ECHO_PIN, HIGH);
  // محاسبه فاصله
  int distance = duration / 58;
  // خروجی در سریال مانیتور
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  // بررسی هشدار
  if (distance <= ALERT_DISTANCE) {
  // روشن کردن بازر 
    tone(buzzer, 1000, 1000); // 1KHz
    digitalWrite(MOTOR_PIN, HIGH);
    delay(BUZZER_ON_TIME);
    digitalWrite(MOTOR_PIN, LOW);
    noTone(buzzer); // 1KHz
}
noTone(buzzer); // 1KHz
  // تاخیر قبل از بررسی مجدد
  delay(LOOP_DELAY);
}

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

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

محفظه پرینت سه بعدی عصا

محفظه پرینت سه بعدی عصا
ساخت محفظه پرینت سه بعدی احتمالاً سخت ترین بخش در فرآیند است. ما از نرم افزار سالید ورک برای فرآیند کامل مدل‌سازی و از ender pro برای چاپ آن استفاده کردیم.

اتصالات عصا سه بعدی

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

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

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

امیدوارم از این پروژه خوشتان بیاید. اگر سوالی داشتید در قسمت نظرات به ما اطلاع دهید.

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

3.7 (3 نفر)

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

محمد رحیمی

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

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

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