نورپردازی هوشمند پشت تلویزیون (Ambilight) با آردوینو و رسپبریپای
وقتی رنگهای روی صفحه با نورهای پشت تلویزیون هماهنگ میشن، حس میکنی تصویر خیلی بزرگتر از قاب تلویزیونه و کاملا غرق در فضا میشی. خیلی از سیستمهای آماده فقط برای یک ورودی خاص کار میکنن، اما اینجا یه راهکار جامع داریم.
توی این آموزش از تیم آیسیمدار، قراره یه سیستم امبیلایت حرفهای بسازیم که به هر دستگاهی وصل بشه؛ چه کامپیوتر قدیمی، چه کنسول بازی و چه گیرنده دیجیتال. این سیستم با استفاده از برد آردوینو، رسپبریپای و ریسه الایدی آدرسپذیر کار میکنه و تصویر هر ورودی رو پردازش میکنه تا دقیقترین نورپردازی رو بهت بده.
حالا وقتشه وسایل رو آماده کنی و دست به کار بشی. بریم سراغ ساخت این پروژه جذاب و قدمبهقدم پیش بریم.
قطعات و ابزارهای لازم برای ساخت امبیلایت
برای این پروژه ممکنه همه دستگاههات خروجی HDMI نداشته باشن و مجبور بشی از چند تا تبدیل استفاده کنی. نگران نباش، نتیجه نهایی انقدر جذابه که ارزش این مراحل اضافه رو داره.
بسته به اینکه بخوای نمایشگر LCD داشته باشی یا نه، قطعات متفاوتی نیاز داری. موارد اصلی رو برات لیست کردم و قطعات اختیاری رو هم جداگانه آوردم.
- 4 متر ریسه الایدی آدرسپذیر WS2812B با تراکم 30 الایدی در متر (برای تلویزیون 55 اینچ کافیه)
- یک عدد برد آردوینو UNO
- یک عدد برد رسپبریپای مدل 2 یا 3
- یک عدد کارت حافظه SD با ظرفیت حداقل 8 گیگابایت
- یک عدد ویدئو کپچر مدل STK1160 (حتما همین مدل رو تهیه کن تا سازگاری کامل داشته باشه)
- منبع تغذیه 5 ولت 10 آمپر
- اسپلیتر HDMI یک به دو
- سوئیچر HDMI پنج به یک
- مبدل HDMI به AV
- خازن الکترولیت 10 میکروفاراد
کابلها و اتصالات:
- چهار عدد کابل HDMI کوتاه (حدود 25 سانتیمتر)
- دو عدد رابط مادگی به مادگی HDMI برای نصب رو پنل
- یک عدد سوکت ورودی برق 220 ولت (ترجیحا فیوزدار)
- باکس پروژه با ابعاد مناسب برای جا دادن قطعات
- سیمهای مفتولی تکرشته برای اتصالات 5 ولت
- سیمهای فلت یا رشتهای برای اتصال ورودیها به آردوینو
قطعات اختیاری:
- مبدل AV به HDMI
- مبدل VGA به HDMI
- دو عدد کابل HDMI کوتاه اضافه
- نمایشگر LCD کاراکتری 16 در 2
- ماژول رابط I2C برای نمایشگر
- یک عدد فن خنککننده برای باکس پروژه
نرمافزارهای مورد نیاز پروژه
برای راهاندازی این سیستم به چند تا نرمافزار مختلف نیاز داری. اول از همه باید این برنامهها رو روی سیستم خودت نصب کنی تا بتونیم مراحل بعدی رو پیش ببریم.
- نرمافزار WinSCP
- نرمافزار Putty
- نرمافزار SDFormatter
- نرمافزار Win32DiskImager
- محیط برنامهنویسی Arduino IDE
- نرمافزار HyperCon
- ویرایشگر متن مثل Notepad++ (اختیاری)
علاوه بر اینها، به فایل ایمیج سیستمعامل رسپبریپای هم نیاز داری. باید نسخه OpenELEC 8.0.3 for RPI2 / RPI3 رو دانلود و آماده کنی.
راهاندازی اولیه رسپبریپای
اول از همه باید سیستمعامل OpenELEC رو روی کارت حافظه بریزیم.
- فایل ایمیج رسپبریپای که دانلود کردی رو از حالت فشرده خارج کن.
- کارت حافظه SD رو به کامپیوترت وصل کن.
- برنامه SDFormatter رو باز کن.
- درایو مربوط به کارت حافظه رو انتخاب کن.
- توی بخش تنظیمات، گزینه Size Adjustment رو روشن کن.
- کارت حافظه رو فرمت کن.
- حالا برنامه Win32DiskImager رو اجرا کن.
- فایل ایمیج و درایو کارت حافظه رو انتخاب کن و دکمه Write رو بزن.
کارت حافظه رو از کامپیوتر دربیار و بذارش توی رسپبریپای. حالا باید این اتصالات رو روی برد انجام بدی:
- کابل شبکه رو به رسپبریپای وصل کن.
- خروجی HDMI برد رو به مانیتور یا تلویزیون بزن.
- کیبورد و موس رو به پورتهای USB وصل کن.
- کابل USB ویدئو کپچر رو هم به رسپبریپای متصل کن.
منبع تغذیه 5 ولت رو به برد وصل کن و صبر کن تا سیستم بالا بیاد. دستورالعملهای روی صفحه رو دنبال کن تا به محیط اصلی سیستمعامل برسی.
حالا باید اتصال اینترنت رو چک کنی. برو به بخش Settings و از قسمت System Information، آدرس IP دستگاه رو یادداشت کن؛ بعدا بهش نیاز داریم. همچنین از قسمت Services مطمئن شو که گزینه Enable SSH فعال باشه. رسپبریپای باید روشن و به شبکه وصل باشه.
- آدرس IP که یادداشت کرده بودی رو توی برنامه وارد کن و دکمه Open رو بزن.
- وقتی نام کاربری خواست، کلمه root رو تایپ کن و اینتر بزن.
- برای رمز عبور هم کلمه openelec رو وارد کن (موقع تایپ رمز چیزی روی صفحه دیده نمیشه که کاملا طبیعیه).
- دستور lsusb رو بنویس و اینتر بزن. باید اسم ویدئو کپچرت رو توی لیست دستگاههای متصل ببینی.
- حالا میتونی پنجره رو ببندی.
کارمون فعلا با رسپبریپای تموم شد. جلوتر دوباره بهش برمیگردیم تا فایل کانفیگ الایدیها رو روش آپلود کنیم.
تنظیمات نرمافزار HyperCon و ساخت فایل کانفیگ
- برنامه HyperCon.jar رو اجرا کن.
توی تب Hardware، تنظیمات بخش Device رو دقیقا مثل تصاویر انجام بده. برای اینکه بفهمی آردوینو به کدوم پورت وصل شده، دوباره با Putty به رسپبریپای وصل شو. دستور dmesg | grep "tty" رو تایپ کن و اینتر بزن تا خروجی رو ببینی.
معمولا عبارتی مثل /dev/ttyUSB0 یا /dev/ttyACM0 رو میبینی. همین مقدار رو باید توی بخش Output برنامه HyperCon وارد کنی. توی قسمت Construction هم باید مشخصات ریسه رو وارد کنی.
- جهت حرکت ریسه (Direction) رو روی حالت ساعتگرد (clockwise) تنظیم کن؛ فرض بر اینه که داری از روبرو به تلویزیون نگاه میکنی.
- تیکهای مربوط به گوشههای بالا و پایین رو خالی بذار.
- چهار ردیف بعدی رو بر اساس ابعاد تلویزیون و تعداد الایدیهای خودت پر کن.
- بخش Bottom Gap نشوندهنده فاصله خالی پایین تلویزیونه.
- مقدار Offset رو اونقدر تغییر بده تا الایدی شماره صفر دقیقا در سمت چپ فضای خالی پایین تلویزیون قرار بگیره.
- تنظیمات بخش Image Process رو میتونی از روی تصاویر الگوبرداری کنی.
- تیک Blackborder Detection رو بزن و مقدارش رو روی 15 تنظیم کن.
حالا برو به تب Process.
- مقادیر بخش Smoothing رو وارد کن.
- تنظیمات Color Calibration رو هم مطابق تصاویر ست کن تا رنگها طبیعی بشن.
- بخش Luminance Gain میزان روشنایی الایدیها رو مشخص میکنه. اگه حس کردی نور کمه، میتونی روی 1.25 تنظیمش کنی.
وارد تب Grabber شو.
- تنظیمات اولیه رو انجام بده. بعد از نصب نهایی سیستم، دوباره به این بخش برمیگردیم تا کراپ کردن تصویر رو دقیقتر تنظیم کنیم.
در تب External:
- مقادیر رو تنظیم کن.
- اگر دوست داشتی میتونی افکت زمان روشن شدن سیستم رو هم تغییر بدی.
در نهایت برو به تب SSH.
- آدرس IP رسپبریپای خودت رو وارد کن.
- رمز عبور رو روی openelec بذار.
فعلا تا همینجا کافیه. وقتی همهچیز نصب شد برای کالیبره نهایی دوباره سراغ این برنامه میایم.
نصب ریسه روی قاب پشت تلویزیون
حالا وقتشه که ریسههای نوری رو پشت تلویزیون بچسبونی. من از چسب دوطرفه خود ریسه استفاده کردم و اونو مستقیم لبههای قاب پشتی چسبوندم. بعضیها ترجیح میدن یه فریم جداگانه برای ریسهها بسازن. این موضوع کاملا سلیقهایه و به شکل ظاهری تلویزیونت بستگی داره.
تو سیستم من، 78 تا الایدی بالا، 47 تا هر طرف و 30 تا هم در دو سمت پایین قرار گرفتن که مجموعا شد 232 الایدی. وقتی از روبرو به تلویزیون نگاه میکنم، مسیر حرکت دادهها از اولین الایدی تا آخرین دونه، دقیقا در جهت عقربههای ساعته.
یادت باشه بسته به طول ریسه، جریان نسبتا زیادی ازش عبور میکنه. برای همین بهتره برق 5 ولت رو به هر دو سر ریسه متصل کنی تا افت ولتاژ نداشته باشی و نور انتهای ریسه کم نشه. سیمهایی که برای تغذیه استفاده میکنی هم باید ضخامت مناسبی داشته باشن.
من از سوکتهای خود ریسه استفاده کردم. سوکت ابتدایی سه تا سیم داره شامل 5 ولت، زمین (GND) و ورودی داده (Data IN). سمت دیگه ریسه فقط دو تا سیم نیاز داره. اون دو سیم فقط برای 5 ولت و زمین هستن تا تغذیه به درستی تو کل مسیر پخش بشه.
انتقال فایل کانفیگ به رسپبریپای و تنظیم کادر تصویر
تو این مرحله رسپبریپای باید روشن و به مودم وصل باشه. اول برنامه HyperCon رو باز کن و به برد متصل شو.
- وقتی گزینههای بخش SSH از حالت خاکستری دربیان، یعنی اتصال برقراره.
- برو به تب Grabber.
- روی عکس تلویزیون راستکلیک کن و گزینه Take Grabber Screenshot رو بزن.
- حالا مقادیر Crop رو اونقدر تغییر بده تا حاشیههای سیاه اطراف تصویر کاملا حذف بشن. با هر تغییر یه اسکرینشات جدید بگیر تا نتیجه رو ببینی.
- وقتی کادر تصویر کاملا فیت شد، کارمون تو این بخش تمومه.
- به تب SSH برگرد و اتصال رو قطع کن.
- در نهایت دکمه Create Hyperion Configuration رو بزن و فایل ساخته شده رو روی کامپیوترت ذخیره کن.
حالا باید نرمافزار WinSCP رو باز کنی.
- آدرس IP رسپبریپای رو در بخش Host Name بنویس. یوزرنیم رو root و پسورد رو openelec وارد کن و Login رو بزن.
- یه صفحه لاگین میاد و بعدش وارد محیط اصلی برنامه میشی.
- سمت چپ، فایلهای کامپیوترته و سمت راست، پوشههای رسپبریپای قرار داره.
- از سمت چپ برو به مسیری که فایل کانفیگ رو ذخیره کرده بودی.
- تو پنل سمت راست چند بار روی فلش بازگشت به عقب کلیک کن تا به روت (/) برسی. بعد وارد پوشه storage شو.
- فایل کانفیگ رو از سمت چپ انتخاب کن و کلید F5 رو بزن تا آپلود بشه.
- توی پنجرهای که باز میشه، مسیر آپلود رو دقیقا روی storage/.config/ تنظیم کن و تایید رو بزن.
فایل کانفیگ با موفقیت به برد منتقل شد. کافیه یه بار رسپبریپای رو ریبوت کنی تا با تنظیمات جدید بالا بیاد و الایدیها آماده به کار بشن.
سیستم امبیلایت چطور کار میکنه؟
اگه به فلوچارت دقت کنی، روند کار خیلی سادهست. سوئیچر HDMI از بین 5 تا ورودی مختلف (مثل پلیاستیشن، کامپیوتر و غیره) یکی رو که خودت انتخاب کردی عبور میده و میفرسته به اسپلیتر تا تصویر دو شاخه بشه. شاخه دوم وارد مبدل HDMI به AV میشه.
در نهایت این اطلاعات رو میفرسته به آردوینو تا نور ریسهها رو تغییر بده. آردوینو در کنار کنترل ریسه، حواسش به سوئیچر HDMI هم هست. با توجه به اینکه کدوم ورودی فعاله، اسم دستگاه رو روی نمایشگر LCD مینویسه و با یه دکمه ساده میتونی کل نورپردازی رو خاموش یا روشن کنی.
مونتاژ نهایی در باکس پروژه و سیمکشیها
نحوه چیدمان قطعات داخل باکس کاملا به خلاقیت خودت بستگی داره، ولی برای ایده گرفتن میتونی به عکسهای پروژه دقت کنی. یه نکته خیلی مهم اینه که پورتهای USB دیگه روی رسپبریپای رو خالی بذاری.
احتمالا دلیلش محدودیت پهنای باند USB روی برد باشه، ولی در هر صورت از وصل کردن دانگل وایفای یا حتی کابل آردوینو به پورتهای کناری کپچر خودداری کن.
پیشنهاد میکنم اول همه مبدلها رو سر جای خودشون ثابت کنی و بعد سیمکشی تغذیه رو انجام بدی. من آداپتورهای دیواری مبدلها رو حذف کردم و براشون یه برد کوچیک تغذیه ساختم تا 5 ولت رو بین همه قطعات پخش کنم. این کار باعث میشه فضای خیلی زیادی داخل باکس صرفهجویی بشه.
مبدلها رو با چسب دوقلو سر جاشون محکم کردم و برای نصب آردوینو از اسپیسرهای پلاستیکی استفاده کردم. سوکت ورودی برق رو هم چسب زدم تا موقع وصل کردن کابل، لق نزنه. این سوکت یه کلید روشن و خاموش هم داره تا کل سیستم رو باهاش کنترل کنم. داخل سوکت ورودی برق یه فیوز 1.6 آمپری هم گذاشتم تا اگه منبع تغذیه به مشکل خورد، قطعات آسیبی نبینن.
با استفاده از ابزارهایی مثل فرز مینیاتوری و سوهان، جای پورتها و نمایشگر رو روی قاب باکس درآوردم. حتی یه سوراخ کوچیک برای سنسور مادون قرمز هم در نظر گرفتم. نقشه مدار خاصی برای اتصالات نکشیدم، چون همهچیز از روی عکسها کاملا مشخصه و میتونی سیمکشیها رو به راحتی الگوبرداری کنی. اگه حین مونتاژ قطعات ابهامی داشتی، از روی مسیر سیمها تو عکسها پیش برو تا همهچیز دقیق و بدون نقص وصل بشه.
دستکاری سوئیچر HDMI برای اتصال به آردوینو (اختیاری)
برای اینکه آردوینو متوجه بشه کدوم ورودی روی سوئیچر فعاله، باید یه سیگنال از سوئیچر به برد بفرستیم. خوشبختانه روی این دستگاه 5 تا الایدی وجود داره که شماره ورودی فعال رو نشون میدن. ما هم دقیقا از پایه همین الایدیها انشعاب میگیریم.
من از پایههای هر 5 تا الایدی سیم کشیدم، ولی موقع نوشتن کد آردوینو متوجه شدم که نیازی به الایدی شماره یک نداریم. اگه به عکس کابل فلت دقت کنی، میبینی که سیم قهوهای رنگ سمت راست به جایی وصل نیست. پس فقط الایدیهای 2 تا 5 رو به پینهای A0 تا A3 آردوینو وصل میکنیم. دلیل استفاده از پینهای آنالوگ فقط این بود که سیمکشی داخل باکس مرتبتر بشه و کار خاصی انجام نمیدن.
اگه نمیخوای نمایشگر LCD روی پنل پروژهت داشته باشی، کلا میتونی از این مرحله رد بشی. البته اگه سوئیچر رو داخل باکس قرار بدی و نمایشگر هم نداشته باشی، فهمیدن اینکه کدوم ورودی الان در حال پخشه یه مقدار سخت میشه.
آپلود کدهای آردوینو و تنظیمات نرمافزاری
برای اینکه آردوینو بتونه ریسه رو کنترل کنه و روی نمایشگر متن بنویسه، به دو تا کتابخونه Adafruit_NeoPixel.h و LiquidCrystal_I2C.h نیاز داری. اول این کتابخونهها رو توی نرمافزار Arduino IDE نصب کن. کدهای پروژه طوری نوشته شدن که کاملا خوانا باشن و با کمی دقت میتونی بخشهای مختلفش رو متوجه بشی.
توی خطوط اولیه کد، پین متصل به ریسه با عبارت #define DATAPIN 5 مشخص شده که یعنی دادهها از پین 5 ارسال میشن. تعداد الایدیهای ریسه رو باید توی بخش #define LEDCOUNT 113 تغییر بدی و عدد خودت رو بنویسی. نرخ انتقال داده (Baudrate) رو روی 500000 نگه دار تا با رسپبریپای هماهنگ بمونه. میزان روشنایی رو هم میتونی بین صفر تا 100 تنظیم کنی.
خط 24 کد مربوط به پیشوند (Prefix) دیتای الایدیهاست. باید بر اساس تعداد الایدیهای خودت، مقدار هگزادسیمال مناسب رو تولید و جایگزین کنی. مثلا برای 113 الایدی، خط کد به این صورت درمیاد: const char prefix[] = {0x41, 0x64, 0x61, 0x00, 0x70, 0x25};
یا برای 278 تا الایدی باید این رو بنویسی: const char prefix[] = {0x41, 0x64, 0x61, 0x01, 0x15, 0x41}; در اواخر کد و در تابع check_source() میتونی اسم هر ورودی (مثل PC، PS4 یا TV) رو تغییر بدی تا همون اسم روی LCD نمایش داده بشه.
میتونی جایگاه متن روی نمایشگر رو هم با دستورات مربوط به Cursor جابهجا کنی تا دقیقا وسط قرار بگیره. وقتی کدها رو ویرایش کردی، اون رو روی آردوینو آپلود کن و مدار رو تست کن.
بعد از آپلود کد، یه خازن 10 میکروفاراد بین پینهای GND و RESET آردوینو قرار بده (پایه مثبت خازن به ریست وصل بشه). این کار باعث میشه وقتی رسپبریپای روشن میشه و دیتا میفرسته، آردوینو بیدلیل ریست نشه. اگه در آینده خواستی کد آردوینو رو آپدیت کنی، اول این خازن رو بردار و بعد از پروگرام کردن دوباره بذارش سر جاش.
تست نهایی و روشن کردن سیستم
حالا رسپبریپای و آردوینو رو با کابل USB به هم وصل کن. ریسهها رو هم به باکس و آردوینو متصل کن. مطمئن شو که تغذیه 5 ولت به همه مبدلها، آردوینو و رسپبریپای رسیده باشه. وقتی برق اصلی سیستم رو وصل میکنی، الایدی روی سوئیچر روشن میشه و میتونی ورودی رو با دکمه تغییر بدی.
تلویزیون رو روی ورودی HDMI که پروژهت بهش وصله تنظیم کن و ببین که تصویر دستگاه انتخاب شده به درستی نمایش داده میشه یا نه. بعد از چند ثانیه، ریسه به آرومی روشن و خاموش میشه. این یعنی آردوینو بوت شده و ارتباطش با الایدیها سالمه. بلافاصله بعد از این، رسپبریپای کنترل رو به دست میگیره و رنگهای تصویر روی دیوار پشت تلویزیون نقش میبنده.
تبریک میگم! کار نصب تموم شد و حالا میتونی از نورپردازی بینظیر تلویزیونت موقع فیلم دیدن لذت ببری.
کنترل نورپردازی با گوشی موبایل
برای اینکه پروژهت کاملتر بشه، میتونی اپلیکیشن کنترل Hyperion رو روی گوشیت نصب کنی. استفاده ازش خیلی راحته؛ فقط کافیه رسپبریپای و ریسهها روشن باشن. روی دکمه Detect تو اپلیکیشن بزن تا سرور رو پیدا کنه.
بعد از وصل شدن، میتونی رنگ دلخواهت رو از روی پالت رنگ انتخاب کنی تا ریسهها ثابت روشن بمونن، یا افکتهای نوری مختلفی رو اجرا کنی. با این آموزش از آیسیمدار یاد گرفتی که چطور یه سیستم امبیلایت حرفهای و همهکاره بسازی.
فایلهای پیوست
تو میتونی اولین سازنده باشی!
اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر
این آموزش با استانداردهای اختصاصی آیسیمدار بازنویسی و بهینهسازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.








































گفتگوهای کاربران
هنوز نظری ثبت نشده؛ تو شروع کن!
هنوز نظری ثبت نشده؛ تو شروع کن!