آردوینو arduino, آنالوگ, پروژه, پروژه آردوینو, پروژه های سیسوگ, توصیه شده, کتابخانه برنامه نویسی, مقاله

ساخت کنسول بازی به وسیله آردوینو و خروجی تصویر آنالوگ

شاید تا کنون در پروژه‌هایتان قصد داشته‌اید تا خروجی تصویر آنالوگ برای مانیتور و تلویزیون داشته باشید. برای مثال خواسته باشید یک پیام یا حالت خاصی را روی تلویزیون به اطلاع کاربر برسانید. در این مقاله ابتدا شما با کلیاتی در مورد ویدئو کامپوزیت آشنا شده و سپس به کمک کتابخانه (لایبری) معرفی شده می‌توانید خروجی فیلم آنالوگ را بدون هیچ‌گونه ماژول و تراشه جانبی، به کمک میکروکنترلر AVR بر روی کابل کواکسیال (Coaxial Cable) یا همان RCA تولید کنید! همچنین قادر خواهید بود تا به راحتی یک بازی ویدئویی بسازید.

 

کامپوزیت ویدئو (Composite video)

کامپوزیت ویدئو (Composite video) یک خروجی تصویر آنالوگ (Analog Video) است که می‌تواند تصویر را در انواع فرمت‌های استاندارد با قدرت تفکیک (رزولوشن) ۴۸۰i و ۵۷۶i از طریق سیگنال در یک کانال واحد منتقل کند. تمام اطلاعات مربوط به ویدئو درون کانال به‌صورت کد شده وجود دارد. متأسفانه در این روش هر قدر به کیفیت بالاتری نیاز داشته باشید، می‌بایست تعداد خطوط انتقال تصویر را بیشتر کنید. برای مثال در S-video دو کانال وجود دارد و در component video که کیفیت بالاتری دارد، حداقل از سه سیم و بیشتر استفاده می‌شود.

فیلم کامپوزیت همچنین با نام CVBS (Composite Video Baseband Signal) نیز شناخته می‌شود. CVBS برای انتقال سیگنال فیلم، رنگ، همگام سازی و خالی کردن شناخته شده است. ویدئو کامپوزیت را با SD video (Standard Definition) برای انتقال تصویر استاندارد به تلویزیون می‌شناسند.

 

واژه ها را بشناسیم!

کابل کواکسیال (Coaxial Cable) سیمی است که اطلاعات را منتقل می‌کند، RCA کانکتور (Connector) یا اتصال دهنده‌ی آن است. AV نیز مخفف AUDIO VIDEO است. AV برچسب (Lable) است که در دستگاه‌ها به این درگاه نسبت می‌دهند. کامپوزیت ویدئو (Composite video) به انتقال اطلاعات در این روش گفته می‌شود.

کابل تصویر کواکسیال یا RCA

چالش تلویزیون رنگی!

حقیقت این است که شناخت ماهیت سیگنال ویدئو آنالوگ و ساخت آن یک مبحث بسیار پیچیده است. به حدی این پیچیدگی زیاد است که در دانشگاه و کار و دانش درسی به نام “دریافت و پردازش سیگنال‌های صوت و تصویر در تلویزیون رنگی” وجود دارد. چالشی که دانشمندان در مورد سیگنال تلویزیون رنگی داشتند، این بود با اضافه کردن رنگ به سیگنال تصویر، همچنان این سیگنال توسط تلویزیون سیاه و سفید قابل اجرا باشد. یعنی اگر همان کابل کواکسیال (Coaxial Cable) که در حال انتقال تصویر رنگی است را به تلویزیون سیاه و سفید متصل کنیم، باید آن را نمایش دهد!

سیستم های رنگ

کامپوزیت به معنی مرکب می‌باشد. زیرا سیگنال اطلاعات تصویر آنالوگ، همزمان با سیگنال همزمان کننده فریم نیز، روی یک سیم ترکیب شده است. سیگنال تصویر باید یک فریم یا تصویر جدید را خط به خط ایجاد کند و پالس‌های همزمان کننده، ابتدا و انتهای این فریم را برای تلویزیون مشخص می‌کنند. در عین حال، سیگنال تصویر خود شامل دو قسمت درخشندگی تصویر و یک سیگنال زیر حامل دیگر است. سیگنال زیر حامل، سیگنالی است که به عنوان موج مدوله کننده برای مدوله کردن موج دیگر اعمال می‌شود. این زیر حامل، کرومیانس (Chrominance) یا اطلاعات رنگ را حمل می‌کند. در واقع کرومیانس ترکیبی از طیف رنگ و اشباع است. سه سیستم رنگ مختلف مختلف برای ویدئو آنالوگ وجود دارد: NTSC، PAL و SECAM. جزئیات مربوط به ترکیب کردن این سیگنال در سیستم‌های PAL، NTSC و SECAM متفاوت است. از ترکیب تمام این اطلاعات با یکدیگر، سیگنال ویدئو آنالوگ کامپوزیت تشکیل می‌گردد.

مدولاسیون

طیف فرکانسی سیگنال رنگی مدوله شده، با سیگنال باند پایه همپوشانی دارد. بنابراین جدا کردن دوباره این سیگنال متکی به این است که اجزای سیگنال باند پایه، به هارمونیک‌های نرخ اسکن افقی نزدیک باشد. سیگنال حامل رنگ، مضرب فردی از نصف نرخ اسکن افقی انتخاب شده است. با توجه به تعریف هارمونیک، انتخاب این مقدار منطقی است. در نهایت این فرآیند یک سیگنال رنگی مدوله شده تولید می‌کند که عمدتاً از فرکانس‌های هارمونیکی تشکیل شده است. سیگنال‌های هارمونیکی که خود بین هارمونیک‌های موجود در سیگنال باند پایه یا LUMA قرار می‌گیرند. با این روش به جای اینکه دو سیگنال مجزا به‌صورت همزمان ارسال شود، هر دو سیگنال در کنار یکدیگر و در دامنه فرکانس قرار بگیرند. به عبارت دیگر، ترکیب سیگنال LUMA و Chrominance به تکنیک تقسیم فرکانسی نیازمند است. اما تقسیم فرکانسی مورد استفاده در این روش بسیار پیچیده‌تر از روش مورد استفاده برای امواج رادیویی باند FM و AM است.

سیگنال Burst

یک سیگنال گیت شده و فیلتر شده که از زیر حامل سیگنال رنگ نشأت گرفته شده، با نام Burst یا ColorBurst به فاصله‌های خالی افقی در هر خط (به استثنای خطوط در بازه همگام سازی عمودی) به عنوان یک سیگنال هماهنگ کننده و مرجع دامنه برای تقویت سیگنال‌های کرومینانس اضافه می‌شود. کلمه Burst به معنی پشت سر هم می‌باشد. در سیستم فیلم NTSC، فاز سیگنال Burst معکوس شده است. یعنی نسبت به زیر حامل مرجع، ۱۸۰ درجه اختلاف فاز دارد. در سیستم تصویر PAL، فاز سیگنال زیر حامل رنگ، در خطوط پی در پی متناوب است.

نمونه‌ای از سیگنال تصویر:

 

سیگنال کامپوزیت ویدئو

 

کتابخانه TVout برای تولید سیگنال تلویزیون

خوشبختانه، با ظهور الکترونیک دیجیتال بسیاری از پیچیدگی‌ها و دشواری‌های این مسیر هموار شد. همچنین پدیده‌ای به نام Open Source یا متن باز، به پیشرفت این مسئله کمک به سیای کرد. تا جایی که شما برای تولید این سیگنال لازم نیست چرخ را از اول اختراع کنید! کتابخانه TVout درایور یا راه اندازی است که با کمک اینتراپت، خروجی ویدئو کامپوزیت با سیستم PAL یا NTSC به‌صورت مستقیم بر روی پایه‌های آردوینو تولید می‌کند. با کتابخانه‌ی TVout که به‌صورت متن باز نوشته شده است، شما نه به تراشه و ماژول جانبی، و نه حتی میکروکنترلر خیلی قوی نیاز دارید! همه‌ی این‌ها یعنی صرفه جویی در هزینه تولید مدار نهایی!

یعنی شما می‌توانید به راحتی و با صدا زدن چند تابع سطح بالا، اشغال شدن تنها دو پایه I/O از آردوینو و به کمک دو عدد مقاومت به‌راحتی روی تلویزیون خود تصویر ایجاد کنید!! ازین پس مدار شما خروجی RCA نیز دارد!

در این کتابخانه از رجیستر های AVR استفاده شده است. بنابراین این کتابخانه نمی‌تواند برای تراشه‌های ARM کاربرد داشته باشد. خروجی فیلم برای کابل RCA مطابق با جدول زیر به آردوینو متصل می‌شود:

MCUSYNCVIDEOAUDIOArduinoSYNCVIDEOAUDIO
ATmega168/۳۲۸PB1PD7PB3NG,Decimila,UNO۹۷۱۱
ATmega1280/۲۵۶۰PB5PA7PB4Mega۱۱۲۹۱۰
ATmega644/۱۲۸۴p*PD5PA7PD7Sanguino۱۳۲۴۸
ATmega32u4PB5PB4PB7Leonardo۹۸۱۱
AT90USB1286PB5PF7PB4Teensy++___
  • این کتابخانه مشکلاتی با تراشه ATmega1284p دارد. این مشکل شاید به خاطر هسته‌ی Sanguino باشد.
  • خروجی SYNC را با یک مقاومت ۱K و VIDEO را با مقاومت ۵۷۰ اهم به همدگر متصل کنید تا خروجی ویدئو برای RCA تشکیل شود.
  • به‌طور کلی SYNC همیشه پایه‌ی OCA و VIDEO همیشه پین شماره ۷ (از هر پورت دلخواه) باشد.
  • برای مثال، در آردوینو NANO، از میکروکنترلر ATmega328 استفاده شده است. بنابراین خروجی VIDEO پین شماره ۷ و SYNC پین شماره ۹ آردوینو می‌باشد.

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

اضافه کردن کتابخانه TVout

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

اضافه کردن کتابخانه به نرم افزار آردوینو

از طریق منوی

Sketch -> Include Libary -> Manage Libaries…

و یا با استفاده از کلید ترکیبی Ctrl+Shift+I قسمت مدیریت کتابخانه‌ (لایبری)های آردوینو را باز کنید.

افزودن کتابخانه TVout به آردوینو

 

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

نصب کتابخانه TVout آردوینو

 

اضافه کردن کتابخانه به VSCODE

قبلاً آموزش نصب افزونه PlatformIO برای VSCODE در سیسوگ آموزش داده شده است. به کمک این مقاله، شما می‌توانید به جای محیط کسل کننده آردوینو، از محیط توسعه پیشرفته VSCODE استفاده کنید. اگر شما برای برنامه نویسی آردوینو، به جای خود نرم افزار آردوینو از VSCODE استفاده می‌کنید، می‌بایست به این روش کتابخانه Tvout را اضافه کنید:

platformIo -> Libaries -> Install

افزودن کتابخانه به پلت فرم آی او

 

سپس در پنجره باز شده عبارت TVout را وارد کنید تا جستجو انجام شود. پس از یافتن کتابخانه دکمه Install را بزنید:

اضافه کردن کتابخانه TVout به VSCODE

 

نحوه استفاده و توابع کتابخانه ای

در ابتدا باید فایل‌های سرآیند مورد نیاز به پروژه اضافه شوند:

توجه داشته باشید که فونت‌ها داخل خود کتابخانه موجود هستند، می‌توانید از آنجا فایل‌های مربوطه را برای پروژه خود کپی کنید:

فونت های مخصص ویدئو کامپوزیت

 

در مرحله بعد یک شی از روی TVout ساخته می‌شود:

 

برای راه اندازی اولیه (Init) یا Begin می‌بایست نوع سیستم تصویر را مشخص کنید (PAL یا NTSC). اگر تراشه شما تنها یک کیلوبایت حافظه SRAM دارد، بهتر است از NTSC استفاده کنید.

 

برای نوشتن متن، ابتدا باید فونت تنظیم شود:

می‌توانید از فونت‌های زیر نیز استفاده کنید (به شرطی که آن‌ها را به پروژه خود اضافه کرده باشید.)

 

برای پاک کردن صفحه نمایش:

 

و برای نوشتن متن روی صفحه نمایش:

 

برای درک بهتر این توابع و همین طور توابع رسم گرافیکی دیگر، بهتر است نمونه کدهای کتابخانه را از مسیر زیر در آردوینو اجرا کنید:

File -> Examples -> TVout

از آنجایی که فایل‌های فونت به‌طور پیش فرض به مثال‌ها اضافه نشده‌اند، از مسیر زیر

Documents\Arduino\libraries\TVout

وارد پوشه TVoutfonts شوید و محتویات آن را داخل پوشه بالا کپی کنید.

در پروژه نمونه DemoPAL شما تقریباً می‌توانید با اکثر قابلیت‌های این کتابخانه آشنا شوید. در این پروژه متن، اشکال گرافیکی و توابع رسم استفاده شده‌اند. در انتها شما یک مکعب سه بعدی را بر روی تلویزیون خود خواهید دید که در حال گردش است.

 

راه اندازی بازی FlappyCat

بازی فلاپی کت، یک بازی ساده اما اعتیاد آور است که به کمک کتابخانه TVout نوشته شده است. در این بازی شما باید به گربه داستان کمک کنید تا از میان ستون‌های سنگی عبور کند، بدون اینکه با آن‌ها برخورد و تصادفی داشته باشد. با ساخت این بازی، شما تا حدی با نحوه کار کنسول‌های بازی مثل آتاری، سگا، ریترو و… آشنا می‌شوید. خروجی صدا پایه شماره ۱۱ آردوینو بوده و کلید بازی به پایه شماره ۲ متصل است. همچنین این پایه با مقاومت ۱۰ کیلو اهمی PULL DOWN شده است. خروجی تصویر پین شماره ۷ است، به این پایه یک مقاومت ۴۷۰ اهمی متصل کنید. همچنین سیگنال SYNC که در پایه شماره ۹ ایجاد می‌شود را به یک مقاومت ۱ کیلواهمی متصل کنید. دو سر مقاومت را به یکدیگر متصل کنید تا خروجی تصویر ایجاد شود. برای اجرای این بازی شما تنها کافی است تا پس از بستن مدار، پروژه را از گیت هاب دریافت، سپس در آردوینو باز کرده و بر روی آن آپلود کنید. به همین راحتی!

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

 

خروجی RCA صدا و تصویر از آردوینو

 

ویدئو بازی Flappy Cat


انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.  همکاری با سیسوگ

 

نوشته های مشابه

پاسخی بگذارید

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

9 دیدگاه در “ساخت کنسول بازی به وسیله آردوینو و خروجی تصویر آنالوگ

  1. noorsun0035 گفت:

    سلام.
    بسیار عالی بود.
    البته من مدتی درباره تولید تصویر کامپوزیت و VGA توسط مگا ۸ تحقیق کرده بودم. و به جای خوبی رسیده بودم. ولی به خاطر کارها با اولویت بالا متوقف کردم.
    در اینترنت هم نمونه هایی دیده بودم. البته من اساس کار را درک کرده بود.
    حالا این برناهه هم جالب بود.
    ولی من یک مشکل دارم. هنوز با آردینو کار نکردم و خیلی هم راغب به این کار نیستم. تمام پروژه های من هم با مگا ۸ است. چون من خرید این میکرو را عمده دارم. از نظر اقتصادی کاملا درست است. یعنی انبار اضافه نداریم. شاید در یک پروژه با میکرو سبک تر بشود باز هم این است. و در پرروژه سنگین تر ممکن است دو عدد میکرو مصرف شود.
    و اما در خواست من: امکان دارد این برنامه را بتوانم در مگا ۸ و با کدویژن پورت کنم؟ لطفا راهنمایی بفرمایید. (که دیگه خودم کار قبلی رو ادامه ندهم و این برنامه استفاده کنم)
    با تشکر و سپاس فراوان

    1. Digi Boy Digi Boy گفت:

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

  2. کامبیز گفت:

    خیلی خوب بود ممنون

  3. نیما گفت:

    سلام اصلا فکرشو نمیکردم بدون ای سی بشه همچین کاری کرد. .سیسوگ واااقعا عالی هسی !

    1. Digi Boy Digi Boy گفت:

      درود بر شما. اگر با سیسوگ همراه باشید، بیشتر از این هم شگفتانه خواهید دید!

  4. M Hariri مهدی گفت:

    سلام ، خدا قوت
    امیدوارم موفق باشید
    آیا برای ساخت خروجی رنگی هم کاری انجام دادید ؟

    1. Digi Boy Digi Boy گفت:

      سلام.
      اگر فرصت بشه، حتماً می‌گذاریم.

  5. مسعود گفت:

    واقعا؟! خیلی عالیه..