پر بازدید ترین مطالب

رقص نور با حرکات دست با استفاده از رایانه رزبری پای


در این ساختنی دستگاه رقص نور حساس به حرکات دست با استفاده از Leap Motion و رزبری پای را آموزش می دهیم. وجود دیتا مطمئن و قابل اعتماد در زمان واقعی (به صورت لحظه به لحظه) برای پروژه های اینترنت اشیا (IoT) بسیار مهم می باشد. تا این لحظه ساختنی های متفاوتی نظیر ایجاد یک اپلیکیشن یا زدن یک کلید در یک طرف و روشن شدن ال ای دی در طرف دیگر را (نمونه سخت افزاری) دیده اید، اما در این ساختنی قصد داریم موضوع جالب تری را مطرح کنیم. ارائه راهکاری که احساس خواهید کرد شما به طور مستقیم باعث ایجاد یک جریان داده می شوید. بنابراین در این ساختنی تصمیم به ساختینی قصد کنترل اشیا را به وسیله حرکات دست داریم و همچینین تغییر رنگ با استفاده از موقعیت انگشتان دست. با بهره گیری از آموخته های این ساختنی می توانید یک نمونه از این پروژه را برای خود بسازید.

رقص نور با دست به وسیله رزبری پای

رقص نور با دست به وسیله رزبری پای

 

یک مرور مفهومی و عمیق بر کد های موجود در سایت PubNub blog کنید. سورس کد کامل در GitHub Repo وجود دارد و در وب سایت اینستراکتبزل توضیح مجزایی برای مدار راه انداز ال ای دی ماتریسی وجود دارد.

مرحله اول : قطعات و تجهیزات

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

قطعات و تعداد

  • Raspberry Pi – ما از مدل V1 B+ استفاده می کنیم.
  • یک عدد Leap Motion Controller
  • منبع تغذیه ۵ ولت ( ترجیحا ۵ آمپر)
  • ماژول I2C راه انداز pwm – Adafruit گزینه مناسبی است
  • ۴ میکرو سروز
  • ۴ میکرو سرو قوی
  • LED ها و مقاومت های محدود کننده جریان – برای دقیق تر شدن ولی خیلی لازم هم نیست.
  • محفظه دستگاه – می توانید از برش لیزر استفاده کنید.
  • پیچ، بست کمربندی، مهره، … – و هرچیزی که بتواند دو شی را به هم بچسباند یا کنار هم قرار دهد.
  • نوار دور سیم – برای محافظت سیم و تمیز و مرتب بودن کار
  • جک پاور، کلید و کابل – برای گرفتن برق از پریز و اتصال ان به مدار
  • کلید سه حالته – برای برای انتخاب مد خروجی سرو موتور
  • کلید شستی کوچک – برای ریبوت کردن آردوینو/ کلید خاموش کردن
  • ال ای دی RGB و ۲ عدد مقاومت ۴۷۰ اهم – برای ریبوت کردن / خاموش کردن نشانگر
  • جعبه تجهیزات – برای نگهداری تجهیزات.
  • کانکتور- برای اتصال دو سیم به یکدیگر

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

نرم افزار و سرویس ها

  • PubNub – سرویس جریان داده.دارای Sandbox رایگان برای کاربران
  • Java SE – JDK 8 – مطمئن شوید که از یک ورژن مناسب برای سیستم خود استفاده می کنید.
  • Leap Motion Visualizer و Java SDK – باز مطمئن شوید که از یک ورژن مناسب برای سیستم خود استفاده می کنید.
  • PubNub Java SE SDK – برای رفتن به دایرکتوری کتابخانه ها به آن نیاز دارید.
  • Java IDE – برای علاقه مندی هایتان مانند JGrasp، NetBeans، IntelliJ، Eclipse
  • سورس کد برنامه – که در وب سایت Github وجود دارد.

نصب Raspberry Pi

  • PubNub Python Library – یک راهنمای کامل برای پیاده سازی PubNub بر روی رزبری پای
  • اتصال اینترنت – از طریق wifi یا اترنت.اگر می توانید پینگ گوگل کنید، وسپس ادامه دهید.

ابزار ها

  • کامپیوتر – برای نوشتن کدها، دیدن ساختنی و ….
  • دریل برقی + مته – برای سوراخکاری، سفت کردن پیچ ها و…
  • فرز انگشتی – برای سوراخ کاری های بدنه…شاید لازم نباشد
  • چسب حرارتی تفنگی
  • هویه و سیم لحیم
  • برش لیزر – ما از این روش استفاده کردیم ولی شما می توانید از هر روش دیگری که می خواهید استفاده کنید.
  • پیچ گوشتی ، انبردست

مرحله دوم: بررسی اجمال پروژه

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

  1. کامپیوتر و Leap Motion – فرستادن اطلاعات به اینترنت
  2. رزبری پای در یک جعبه – خواندن اطلاعات از اینترنت
  3. PubNub – لایه ارتباط ایمن که موارد بالا را به هم وصل می کند.

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

  1. رزبری پای – کنترلر اولیه که از طریق I2C با بقیه تجهیزات ارتباط برقرار می کند.
  2. ATmega328p مدار راه انداز مارتیس ال ای دی – دریافت اطلاعات از طریق I2C و کنترل دو ماتریس ال ای دی ۸*۸
  3. TLC5916 براساس مدار سینک ال ای دی – توسط ATmega328P کنترل می شود و کنترل جریان ال ای دی ها ماتریسی
  4. ماژول راه انداز PWM مدل Adafruit – دریافت command از طریق I2C ، راه اندازی ۴ سروو
  5. منبع تغذیه ۵ ولت، ۵ آمپر – تغذیه همه ی قسمت ها

برای شروع، کامپیوتر را برای استفاده از Leap motion آماده می کنیم.

مرحله سوم : نصب java و Leap Motion

نصب Java

برای استفاده از java SDK برای Leap Motion ، نیاز به نصب Java Devlopment Kit که شامل Java Runtime Environment است، داریم. بهترین کار این است که تنها از یک پکیج مناسب برای سیستم خود استفاده کنید. بعد از نصب پکیج، باید کدهای برنامه را از طریق Java IDE اجرا کنید.این نرم افزار به شما این قابلیت را می دهد که کد های خود را اجرای کنید یا ویرایش نمایید و بیاموزید. پس از نصب JDK، به یک IDE مناسب نیاز دارید.( integrated development environment) متداول ترین آنها Eclipse، IntelliJ، NetBeans است. موردی را که به دلخواه تان هست را انتخاب کنید یا یکی رابه صورت تصادفی انتخاب کنید. پیاده سازی کتابخانه در هر کدارم از این محیط ها متفاوت است، برای همین منظور باید راهنمای آنها که چگونگی ایجاد یک new project را گفته است مراجعه نمایید.

در ساختنی بخوانید :  با وسایل ارزان کاتر مخصوص PCB بسازید

سورس کد Java

تنها یک فایل java برای اجرای کد لازم است، اما شما باید کتابخانه های PubNub و  Leap Motion جاوا را نصب نمایید…در GitHub project repository فایل های java لازم موجود است. در قسمت بعد مقداری در مورد این کد توضیح می دهم.

نصب Leap

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

  1. دانلود SDK، درایورها و نرم افزارهای از Leap Motion
  2. نصب نرم افزار Leap Motion ، که به صورت خودکار درایور های لازم را نصب می نماید.
  3. اجرای Leap Motion Diagnostic Visualizer و ایجاد یک پروژه
  4. خواندن Java SDK Documentation و نحوه ایجاد یک پروژه

نصب PubNub

مرحله آخر نصب PubNub Java SDK است. صفحه مستندات درباره نحوه اضافه کردن یک کتابخانه به پروژه توضیح داده است.

مرحله ۴: سورس کد جاوا

اگر علاقه ای به کد های جاوا ندارید می توانید از این مرحله بگذرید، هرچند که در پایان نیاز به قرار دادن PubNub keys  های خود در کد برای کارکرد برنامه دارید.می توانید سورس کد را در GitHub ببینید. مطابق زیر وارد کردن این موارد لازم است. اگر نتیجه این موارد دارای خطا هستند، احتمالا کتابخانه های SDK را به درستی نصب نکردیده اید.

موضوع مهمی هست که پروژه شما باید قابلیت اجرایی شدن را داشته باشد تا ما بتوانیم تمام حرکات را به وسیله Leap در این ساختنی انجام دهیم.ما با ایجاد یک پروژه اصلی، implementation of the Runnable interface و تعریف متغیر های عمومی که بعد از آنها استفاده می کنیم، شروع می کنیم. اصلی ترین کد های که باید بنویسیم، متغیرهای عمومی “CHANNEL” هستند مانند جفت Key های تعریف شده در main اصلی برنامه.

این رشته ها تنها مقادیر هستند که شما باید مقدار آنها را تغییر بدهید. نام channel به صورت پیش فرض “leap2pi” باقی می ماند یا می تواند مقادیر دیگری از آلفا وعددی باشد. همه ی قسمت ها از PubNub برای ارتباط با بیش از یک channel استفاده می کنند.،بنابراین شما باید از یک اسم منحصر به فرد برای جلوگیری از ارتباط های متقابل بین پروژه های مختلف استفاده نمایید.

Publish key و subscribe key کدهای شناسایی منحصر به فردی به وسیله PubNub در هنگام ایجاد یک اکانت در اختیار شما قرار می دهد.از آنها محافظت کنید. قسمت های کمی در کد وجود دارد که از “leao2pi” به جای “CHANNEL” استفاده می کند و تمام این قسمت ها باید عوض شوند.

Leap Motion در هر ثانیه ۳۰۰ عکس می گیرد. در هر عکس ما به اطلاعات زیادی در مورد دستهایمان که در حال حرکت است می رسیم، مانند تعداد انگشتان اضافه شده، زاویه های و ژست دست. مقادیر اندازه گیری شده برای pitch و yaw توسط Leap بر حسب رادیان هستند که خیلی به ما کمک نمی کند. ما باید این داده ها را به فرمتی مناسب برای ماژول راه انداز PWM تبدیل کنیم. ما ابتدا رادیان را به درجه تبدیل می کنیم و سپس درجه را به یک مقدار قابل قبول برای pwm سروو موتورها بین ۱۵۰ تا ۶۰۰ تبدیل می کنیم.این رنج براساس رنج معمولی کارکرد یک سروو(۵۰۰-۲۰۰۰us) است که با به عنوان ۱۲ بیت راه انداز سروو در نظر گرفته شده است.

معادله اصلی ۲۵۰۰us/(2^13-1)*(Servo Min/Max Pulse Width) است، بنابراین [۵۰۰,۲۰۰۰] به [۱۵۰,۶۰۰] مقیاس می شود. در کد این موضع با روش زیر انجام می شود.

بنابراین از قرار دادن مقداری خلاف رنج بالا برای سروو و pwm خودداری کنید.

برای اینکه مطمئن شوید کد های شما کار می کند، آنها را در PubNub Debug Console بارگذاری کنید. می توانید مانند publish key و subscribe key ، اسم channel خود را وارد کنید و با جابجایی دستتان مقابل Leap Motion در هنگام اجرای کد جاوا، آمار و داده های شما در message box شما نماش داده می شود.

مرحله پنجم: نصب رقص نور رزبری پای

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

در ساختنی بخوانید :  شروع برنامه نویسی رزبری پای با C:سلام دنیا ! [Raspberry Pi]

مرحله اول نصب PubNub Python است.

یک terminal باز کنید و موارد زیر را نصب نمایید:

  1. Python : pi@raspberrypi ~$ sudo apt-get install python-dev
  2. Pip : pi@raspberrypi ~$ sudo apt-get install python-pip
  3. PubNub : pi@raspberrypi ~$ sudo pip install pubnub

حالا نیاز به یک کپی از تمام فایل های موجود در  Pi directory of the GitHub repository داریم.آسان ترین راه برای این کار clone کردن repo با استفاده از git و سپس رهاشدن از شر چیزهایی که نیاز نداریم:

حالا، محتوای دایرکتوری leap2pi باید به فایل دایرکتوری Pi های GitHub repo شناسانده شود. در نهایت، ما به python script برای اجرای بوت نیازمندیم. دو python script برای اجرا در اختیار داریم:

  • py – کدهایی است که در اخیار PubNub قرار می دهد و سروو ها و ال ای دی ها را راه اندازی می کند.
  • py – یک کلید نمایشی shutdown برای خاموش کردن Pi

این مورد آسان بود، ما تنها به ویرایش یک Linux system فایل نیاز داریم برای روت کاربر.

ابتدا مطمئن شوید که script ها قابل اجرا هستند، سپس فایل rc.local را برای ویرایش باز کنید.

شما می توانید از هر ویرایشگری کهمایلید استفاده نمایید، اما ما vi را پیشنهاد می کنیم. آخرین خط فایل باید “exit 0” است که اجازه خروجی تمیز را می دهد و ترمینال Bush را راه اندازی می کند. ما می توانیم هر تعداد commandدر این قسمت اضافه کنیم تا زمانی که آنها آخرین command خروجی نهایی را اجرا کنند.

مطابق زیر کدهای زیر را بالای command “exit 0” قرار دهید:

فایل را ذخیره کنید، خارج شوید و بوت را فعال کنید، رزبری پای به طور خودکار این script ها را اجرا می کند. بخش های “&&” اطمینان حاصل از اجرای همه command هارا تضمین می کند. اگر خارج شوید ترمینال Bush هرگز بارگذاری نمی شود، بنابراین تا ابد رزبری پای شما قفل خواهد شد.

مرحله ۶ : اتصالات ماژول راه انداز سروو به رزبری پای

رزبری پای به صورت مستقیم به ماژول راه انداز سروو موتور متصل می شود ولی این موضوع آسان نیست. یک کانال pwm اختصاصی وجود دارد ولی ما به ۴ کانال نیاز داریم. این می تواند درنرم افزار فیک باشد اما باز هم ساده ترین راه برای انجام دادن نیست. کامپیوتر بودن رزبری پای در پردازش های سطح بالا بهتر از کنترل های سطح پایین است. شما می توانید در این قسمت از هر درایور pwm استفاده کنید اما ما از Adafruit ، ۱۲ بیت، ۱۶ کاناله استفاده کردیم. پروگرام کردن یک ATtiny24 که بتواند ۴ سروو را از طریق I2C کنترل کند، راحت است. من پیشنهاد می کنم که خودتان یک نمونه بسازید ولی ساخت این قسمت در این ساختنی مطرح نمی شود.

تعداد زیادی مثال ساده برای شروع کار با برد Adafruit در اینترنت وجود دارد، و شما به تعداد کمی سورس کد اضافه تر نیاز دارید. این کدها در  Pi directory of the source code repository یافت می شود- فایل با نام “Adafruit …” نحوه ارتباط رسپرس پای با درایور PWM را توضیح می دهد.

اتصال رزبری پای به برد آسان است. پین های I2C رزبری پای پین های ۳ و ۵ می باشد اما شما نیاز به فعال سازی کانال ارتباطی I2C دارید اگر این کار را قبلا انجام نداده باشید.کی از پین های مهم با نام OE لیبل شده است. این پین، پین active low برای فعال سازی خروجی است. سروو ها تنها زمانی که این پین در وضعیت low است فعال می شوند. این پین را می توان مستقیما به ground وصل کرد یا از طریق یکی از پین های رزبری پای کنترل نمود.در این ساختنی، ما این پین را از طریق مدار راه انداز ال ای دی ماتریسی درایو می کنیم که خود این برد از طریق خط دیتا I2C به رزبری پای متصل شده است.

در تصویر، یک سروو به کانال اول درایو pwm متصل شده است. در اینجا می توانید به طریق زیر عمل کنید:

Channel 0 is Left Yaw (Pan)
Channel 1 is Left Pitch (Tilt)
Channel 2 is Right Yaw (Pan)
Channel 3 is Right Pitch (Tilt)

مرحله هفتم : نگاه دقیق تر به Servo.py

کدهای پایتون که سروو موتور ها را کنترل می کنند خیلی جالب هستند در صورتی که آنها را متوجه شوید. شخصا من نیز خیلی این زبان برنامه نویسی را نمی شناسم ولی در اینجا کدها برای فهمیدن راحت هستند. شما می توانید همرا با آن کپی فایل servo.py را از GitHub بخوانید.

در ساختنی بخوانید :  تکنیک ابر و باد را با رنگ غذا و فوم اصلاح امتحان کنید!

مانند کدهای java نیازمند جایگذاری کدهای اختصاصی PubNub ، publish key . subscribe kes در اینجا هستید و همچینین نام کانال ارتباطی شما.

رزبری پای در هنگام بوت کردن کارهای زیر را انجام می دهد:

  1. ریست کردن مدار درایور(راه انداز) ماتریسی AVR
  2. شروع PubNub با key های شما
  3. اشتراک گذاری “leap2pi” کانال PubNub
  4. حلقه اصلی برنامه، چک کردن یک سوییچ مد خروجی ( یا تعداد بیشتر در یک دقیقه)

کتابخانه PubNub همه کارهای سخت را انجام می دهد. این یکی ارتباط های همیشگی است که از همه چیز مراقبت می کند – این فانکشن ها هنگامی که یک رویداد اتفاق می افتد صدا زده می شوند.

#Subscribe to subchannel, set callback function to _callback and set error fucntion to _error pubnub.subscribe(channels=channel, callback=_callback, error=_error, connect=_connect, reconnect=_reconnect, disconnect=_disconnect)

Callback های مربوط به ارتباط باید مشهود باشند(connect,reconnect,etc) اما یکی از این callback ها که کار عمده کارها را انجام می دهد، دقیقا “callback” نامگذاری شده است. این فانکشن بر روی پیام های دریافت شده توسط ما از کانال اشتراکی کارهایی را انجام می دهد.همانطور که در بالا گفته شد، box دارای چند حالت خروجی است که توسط یک slide سوییچ که به تعدادی IO متصل شده است، انتخاب می شود.

  • MIRROR – ربات ها آینه حرکات شما انجام می دهند – دست چپ شما ربات سمت راست را کنترل می کند.
  • DISABLED – سروو ها حرکتی انجام نمی دهند.
  • CLONE – ربات ها حرکات شما را جمع می کنند – دست چپ شما ربات سمت چپ را کنترل می کند.

منطق لازم برای این مدها مانند شرحی که برای راه اندازی I2C گفته شد توسط فانکشن callback انجام می شود.

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

مرحله هشتم : نگاه دقیق تر به shutdown.py

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

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

این قابلیت به طور کامل در اسکریپت shutdown.py مورد استفاده قرار می گیرد. در حلقه اصلی برنامه موارد زیر اتفاق می افتد:

  1. خاموشی برای ۰٫۲۵ ثانیه
  2. چک کردن فشردن کلید( وضعیت low در پین)
  3. تکرار برای همیشه
    1. دکمه در حالت فشار، یک ثانیه خلموش شود.
    2. چک کردن دوباره پین برای بررسی اینکه آیا هنوز دکمه در حالت فشرده هست یا نه
    3. اگر کلید هنوز در وضعیت فشردن قرار دارد،باید ریبوت شود واگرنه چک کردن ادامه پیدا کند.
    4. آبی کردن ال ای دی RGB
    5. خاموش کردن برای دو ثانیه دیگر
    6. چک کردن پین برای بررسی اینکه آیا هنوز دکمه در حالت فشرده قرار دارد یا نه
    7. اگر دکمه هنوز در حالت فشردن هست، باید خاموش شود
    8. ال ای دی RGB قرمز شود
    9. اگر نه ریبوت شود.

مرحله نهم : ساختن جعبه

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

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

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

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

فایل ها را می توانید در اینجا و اینجا دریافت کنید.

مرحله دهم: بسته شدن

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

منبع

بیشتر بخوانید:

[ad_2]

لینک منبع

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

آخرین مطالب