شاید تا کنون در پروژههایتان قصد داشتهاید تا خروجی تصویر آنالوگ برای مانیتور و تلویزیون داشته باشید. برای مثال خواسته باشید یک پیام یا حالت خاصی را روی تلویزیون به اطلاع کاربر برسانید. در این قسمت از پروژه های آردوینو ابتدا شما با کلیاتی در مورد ویدئو کامپوزیت آشنا شده و سپس به کمک کتابخانه (لایبری) معرفی شده میتوانید خروجی فیلم آنالوگ را بدون هیچگونه ماژول و تراشه جانبی، به کمک میکروکنترلر AVR بر روی کابل کواکسیال (Coaxial Cable) یا همان RCA تولید کنید! همچنین قادر خواهید بود تا به راحتی یک بازی ویدئویی بسازید.
شاید برای شما مفید باشد: آموزش AVR از 0 تا 100 به همراه جزوه PDF و ویدئو آموزشی
کامپوزیت ویدئو (Composite video)
کامپوزیت ویدئو (Composite video) یک خروجی تصویر آنالوگ (Analog Video) است که میتواند تصویر را در انواع فرمتهای استاندارد با قدرت تفکیک (رزولوشن) 480i و 576i از طریق سیگنال در یک کانال واحد منتقل کند. تمام اطلاعات مربوط به ویدئو درون کانال بهصورت کد شده وجود دارد. متأسفانه در این روش هر قدر به کیفیت بالاتری نیاز داشته باشید، میبایست تعداد خطوط انتقال تصویر را بیشتر کنید. برای مثال در 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) به انتقال اطلاعات در این روش گفته میشود.
چالش تلویزیون رنگی!
حقیقت این است که شناخت ماهیت سیگنال ویدئو آنالوگ و ساخت آن یک مبحث بسیار پیچیده است. به حدی این پیچیدگی زیاد است که در دانشگاه و کار و دانش درسی به نام “دریافت و پردازش سیگنالهای صوت و تصویر در تلویزیون رنگی” وجود دارد. چالشی که دانشمندان در مورد سیگنال تلویزیون رنگی داشتند، این بود با اضافه کردن رنگ به سیگنال تصویر، همچنان این سیگنال توسط تلویزیون سیاه و سفید قابل اجرا باشد. یعنی اگر همان کابل کواکسیال (Coaxial Cable) که در حال انتقال تصویر رنگی است را به تلویزیون سیاه و سفید متصل کنیم، باید آن را نمایش دهد!
سیستم های رنگ
کامپوزیت به معنی مرکب میباشد. زیرا سیگنال اطلاعات تصویر آنالوگ، همزمان با سیگنال همزمان کننده فریم نیز، روی یک سیم ترکیب شده است. سیگنال تصویر باید یک فریم یا تصویر جدید را خط به خط ایجاد کند و پالسهای همزمان کننده، ابتدا و انتهای این فریم را برای تلویزیون مشخص میکنند. در عین حال، سیگنال تصویر خود شامل دو قسمت درخشندگی تصویر و یک سیگنال زیر حامل دیگر است. سیگنال زیر حامل، سیگنالی است که به عنوان موج مدوله کننده برای مدوله کردن موج دیگر اعمال میشود. این زیر حامل، کرومیانس (Chrominance) یا اطلاعات رنگ را حمل میکند. در واقع کرومیانس ترکیبی از طیف رنگ و اشباع است. سه سیستم رنگ مختلف مختلف برای ویدئو آنالوگ وجود دارد: NTSC، PAL و SECAM. جزئیات مربوط به ترکیب کردن این سیگنال در سیستمهای PAL، NTSC و SECAM متفاوت است. از ترکیب تمام این اطلاعات با یکدیگر، سیگنال ویدئو آنالوگ کامپوزیت تشکیل میگردد.
مدولاسیون
طیف فرکانسی سیگنال رنگی مدوله شده، با سیگنال باند پایه همپوشانی دارد. بنابراین جدا کردن دوباره این سیگنال متکی به این است که اجزای سیگنال باند پایه، به هارمونیکهای نرخ اسکن افقی نزدیک باشد. سیگنال حامل رنگ، مضرب فردی از نصف نرخ اسکن افقی انتخاب شده است. با توجه به تعریف هارمونیک، انتخاب این مقدار منطقی است. در نهایت این فرآیند یک سیگنال رنگی مدوله شده تولید میکند که عمدتاً از فرکانسهای هارمونیکی تشکیل شده است. سیگنالهای هارمونیکی که خود بین هارمونیکهای موجود در سیگنال باند پایه یا LUMA قرار میگیرند. با این روش به جای اینکه دو سیگنال مجزا بهصورت همزمان ارسال شود، هر دو سیگنال در کنار یکدیگر و در دامنه فرکانس قرار بگیرند. به عبارت دیگر، ترکیب سیگنال LUMA و Chrominance به تکنیک تقسیم فرکانسی نیازمند است. اما تقسیم فرکانسی مورد استفاده در این روش بسیار پیچیدهتر از روش مورد استفاده برای امواج رادیویی باند FM و AM است.
سیگنال Burst
یک سیگنال گیت شده و فیلتر شده که از زیر حامل سیگنال رنگ نشأت گرفته شده، با نام Burst یا ColorBurst به فاصلههای خالی افقی در هر خط (به استثنای خطوط در بازه همگام سازی عمودی) به عنوان یک سیگنال هماهنگ کننده و مرجع دامنه برای تقویت سیگنالهای کرومینانس اضافه میشود. کلمه Burst به معنی پشت سر هم میباشد. در سیستم فیلم NTSC، فاز سیگنال Burst معکوس شده است. یعنی نسبت به زیر حامل مرجع، 180 درجه اختلاف فاز دارد. در سیستم تصویر PAL، فاز سیگنال زیر حامل رنگ، در خطوط پی در پی متناوب است.
نمونهای از سیگنال تصویر:
کتابخانه TVout برای تولید سیگنال تلویزیون
خوشبختانه، با ظهور الکترونیک دیجیتال بسیاری از پیچیدگیها و دشواریهای این مسیر هموار شد. همچنین پدیدهای به نام Open Source یا متن باز، به پیشرفت این مسئله کمک به سیای کرد. تا جایی که شما برای تولید این سیگنال لازم نیست چرخ را از اول اختراع کنید! کتابخانه TVout درایور یا راه اندازی است که با کمک اینتراپت، خروجی ویدئو کامپوزیت با سیستم PAL یا NTSC بهصورت مستقیم بر روی پایههای آردوینو تولید میکند. با کتابخانهی TVout که بهصورت متن باز نوشته شده است، شما نه به تراشه و ماژول جانبی، و نه حتی میکروکنترلر خیلی قوی نیاز دارید! همهی اینها یعنی صرفه جویی در هزینه تولید مدار نهایی!
در این کتابخانه از رجیستر های AVR استفاده شده است. بنابراین این کتابخانه نمیتواند برای تراشههای ARM کاربرد داشته باشد. خروجی فیلم برای کابل RCA مطابق با جدول زیر به آردوینو متصل میشود:
MCU | SYNC | VIDEO | AUDIO | Arduino | SYNC | VIDEO | AUDIO |
---|---|---|---|---|---|---|---|
ATmega168/328 | PB1 | PD7 | PB3 | NG,Decimila,UNO | 9 | 7 | 11 |
ATmega1280/2560 | PB5 | PA7 | PB4 | Mega | 11 | 29 | 10 |
ATmega644/1284p* | PD5 | PA7 | PD7 | Sanguino | 13 | 24 | 8 |
ATmega32u4 | PB5 | PB4 | PB7 | Leonardo | 9 | 8 | 11 |
AT90USB1286 | PB5 | PF7 | PB4 | Teensy++ | _ | _ | _ |
- این کتابخانه مشکلاتی با تراشه ATmega1284p دارد. این مشکل شاید به خاطر هستهی Sanguino باشد.
- خروجی SYNC را با یک مقاومت 1K و VIDEO را با مقاومت 570 اهم به همدیگر متصل کنید تا خروجی ویدئو برای RCA تشکیل شود.
- بهطور کلی SYNC همیشه پایهی OCA و VIDEO همیشه پین شماره 7 (از هر پورت دلخواه) باشد.
- برای مثال، در آردوینو NANO، از میکروکنترلر ATmega328 استفاده شده است. بنابراین خروجی VIDEO پین شماره 7 و SYNC پین شماره 9 آردوینو میباشد.
همانطور که در جدول بالا میبینید، این کتابخانه خروجی صدا نیز دارد. که موضوع خیلی میتواند در هنگام برنامه نویسی به شما کمک کند. همچنین انواع روشهای تولید صدا در مدار، به خصوص روش تولید صداهای آتاری قبلاً در سیسوگ آموزش داده شده است.
اضافه کردن کتابخانه TVout
کتابخانه TVout را میتوانید از گیت هاب پروژه مستقیم دانلود کنید. همچنین از طریق خود نرم افزار آردوینو و یا VSCODE نیز قابل افزودن میباشد.
اضافه کردن کتابخانه به نرم افزار آردوینو
از طریق منوی
Sketch -> Include Libary -> Manage Libaries…
و یا با استفاده از کلید ترکیبی Ctrl+Shift+I قسمت مدیریت کتابخانه (لایبری)های آردوینو را باز کنید.
سپس در کادر جستجو، عبارت TVout را وارد نمایید تا از طریق جستجوی اینترنتی، کتابخانه را پیدا کند. پس از یافتن کتابخانه، بر روی دکمه Install کلیک کنید تا فرآیند دانلود و نصب کتابخانه کامپوزیت ویدئو انجام شود.
اضافه کردن کتابخانه به VSCODE
قبلاً آموزش نصب افزونه PlatformIO برای VSCODE در سیسوگ آموزش داده شده است. به کمک این مقاله، شما میتوانید به جای محیط کسل کننده آردوینو، از محیط توسعه پیشرفته VSCODE استفاده کنید. اگر شما برای برنامه نویسی آردوینو، به جای خود نرم افزار آردوینو از VSCODE استفاده میکنید، میبایست به این روش کتابخانه Tvout را اضافه کنید:
platformIo -> Libaries -> Install
سپس در پنجره باز شده عبارت TVout را وارد کنید تا جستجو انجام شود. پس از یافتن کتابخانه دکمه Install را بزنید:
نحوه استفاده و توابع کتابخانه ای
در ابتدا باید فایلهای سرآیند مورد نیاز به پروژه اضافه شوند:
1 2 | #include <TVout.h> #include <fontALL.h> |
توجه داشته باشید که فونتها داخل خود کتابخانه موجود هستند، میتوانید از آنجا فایلهای مربوطه را برای پروژه خود کپی کنید:
در مرحله بعد یک شی از روی TVout ساخته میشود:
1 | TVout TV; |
برای راه اندازی اولیه (Init) یا Begin میبایست نوع سیستم تصویر را مشخص کنید (PAL یا NTSC). اگر تراشه شما تنها یک کیلوبایت حافظه SRAM دارد، بهتر است از NTSC استفاده کنید. اما اکثر تلویزیون ها PAL هستند.
1 2 | TV.begin(PAL); TV.begin(_NTSC,128,56); |
برای نوشتن متن، ابتدا باید فونت تنظیم شود:
1 | TV.select_font(font6x8); |
میتوانید از فونتهای زیر نیز استفاده کنید (به شرطی که آنها را به پروژه خود اضافه کرده باشید.)
1 2 3 4 | font4x6 font6x8 font8x8 font8x8ext |
برای پاک کردن صفحه نمایش:
1 | TV.clear_screen(); |
و برای نوشتن متن روی صفحه نمایش:
1 | TV.println("WEBSITE\nSISOOG.COM"); |
برای درک بهتر این توابع و همین طور توابع رسم گرافیکی دیگر، بهتر است نمونه کدهای کتابخانه را از مسیر زیر در آردوینو اجرا کنید:
File -> Examples -> TVout
از آنجایی که فایلهای فونت بهطور پیش فرض به مثالها اضافه نشدهاند، از مسیر زیر
Documents\Arduino\libraries\TVout
وارد پوشه TVoutfonts شوید و محتویات آن را داخل پوشه بالا کپی کنید.
در پروژه نمونه DemoPAL شما تقریباً میتوانید با اکثر قابلیتهای این کتابخانه آشنا شوید. در این پروژه متن، اشکال گرافیکی و توابع رسم استفاده شدهاند. در انتها شما یک مکعب سه بعدی را بر روی تلویزیون خود خواهید دید که در حال گردش است.
راه اندازی بازی FlappyCat
بازی فلاپی کت، یک بازی ساده اما اعتیاد آور است که به کمک کتابخانه TVout نوشته شده است. در این بازی شما باید به گربه داستان کمک کنید تا از میان ستونهای سنگی عبور کند، بدون اینکه با آنها برخورد و تصادفی داشته باشد. با ساخت این بازی، شما تا حدی با نحوه کار کنسولهای بازی مثل آتاری، سگا، ریترو و… آشنا میشوید. خروجی صدا پایه شماره 11 آردوینو بوده و کلید بازی به پایه شماره 2 متصل است. همچنین این پایه با مقاومت 10 کیلو اهمی PULL DOWN شده است. خروجی تصویر پین شماره 7 است، به این پایه یک مقاومت 470 اهمی متصل کنید. همچنین سیگنال SYNC که در پایه شماره 9 ایجاد میشود را به یک مقاومت 1 کیلواهمی متصل کنید. دو سر مقاومت را به یکدیگر متصل کنید تا خروجی تصویر ایجاد شود. برای اجرای این بازی شما تنها کافی است تا پس از بستن مدار، پروژه را از گیت هاب دریافت، سپس در آردوینو باز کرده و بر روی آن آپلود کنید. به همین راحتی!
توجه داشته باشید که شما باید کتابخانه TVout را مطابق آنچه در بالاتر گفته شد، به آردوینو اضافه کرده باشید. فایلهای مربوط به font درون خود بازی وجود دارند، اگر قبلا فایلهای فونت را در مسیر کتابخانه TVout کپی کردهاید، این فایلها را از پروژه حذف کنید تا در هنگام کامپایل به مشکلی بر نخورید.
سلام
توی سایت گیم هاب می رم
ولی هیچ سرس کدی نمی بینم
اون گزینخ فلپی کت رو انتخاب می کنم.ولی هیچ کدی نمایش نمی ده
سلام روی کتابخانه cat.h ارور میده باید چیکارش کنم
سلام ببخشید میشه یه آموزش از فارسی کردن این بگذارید
سلام دوست عزیز
فارسی کردن کار زیادی میبره و فکر میکنم چالش خوبی باشه که خودتون بخواید انجامش بدید
اولین کاری که باید بکنید اینه که فونت فارسی رو تعریف کنید
بعد خود نوشته ها رو توی برنامه به فارسی تبدیل کنید با استفاده از استاندارد windows 1256 یا utf8
سلام
برای کتابخانه fontALL ارور میده چیکار کنم
خیلی خوب بود ممنون باتشکر از شما و sisoog
موفق باشید!
می شه یک آموزش برای بازی های دیگر وفارسی کردن این بزارید
درود بر شما.
برای فارسی کردن، جواب کامنت “استور” رو ببینید. البته شاید آموزشی هم براش در نظر بگیرم. انواع بازیهای دیگه هم هست، اگر تونستم اون ها رو هم میزارم.
سلام ببخشید میشه یه آموزش از فارسی کردن این بگذارید ممنون
دوبار فرستادید! ?
ببخشید
فارسی هم میشه نوشت؟
درود بر شما.
بله، باید فونت فارسی براش بسازید یا از توی اینترنت دانلود کنید. بعد متنتون رو بهصورت فینگلیش مینویسید و براتون فارسی چاپ می کنه.
ممنونم ??
چه خفن!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
لطفاً ما رو به دوستاتون و دوستای دوستاتونم معرفی کنید?
حتما?
سلام.
واقعا عالی.دستتون درد نکنه.فقط یه سوال داشتم.چطور می شه تصویر رو به صورت بی سیم به تلویزیون انتقال داد؟با بلوتوث یا وای فای می شه؟ تشکر فراوان
سلام
برای ارسال تصویر به شکل بی سیم شما نیازه که فرستنده uhf یا vhf داشته باشید
تکنولوژی این قیمت یه مقدار قدیمی هست و آنالوگ هست و نمیشه با بلوتوث یا وایفای این کار رو انجام داد
خیلی پروژه جالبیه.ممنون ازسایت خوبتون
ولی واسه کتابخانهfontALLوpollserial خطا میگیره!
درود بر شما.
بعد از اینکه کتابخانه رو از پنجره مدیریت لایبری به آردوینو اضافه کردید،
به محل نصب کتابخانه بروید، معمولاً در ویندوز توی پوشه Documents، داخل پوشه آردوینو اضافه میشه.
داخل کتابخانه TVOut، یه پوشه هست به اسم fontALL
اون رو باید از داخل پوشه TVOut کات کنید، یه مرحله برگردید عقب، بغل خودش پیست کنید.
مشکل ازونجاست که احتمالا برنامه نویس فایل های کتابخانه رو داخل خودش اضافه کرده. شما میتونید کتابخانه FontAll رو جدا هم نصب بکنید.
ببخشید من تازه کار با آردینو روشروع کردم سه چهار جا چند پروژه tvoutدیدم ولی همشون ارور fontall میدهند و سه روز شب در صدد رفع مشکل هستم نمیشود میشود کامل پروژه کجا بیاورید وتوضیح بیشتری بدهید عجیب علاقمند به این موضوع هستم ولی هرکاری میکنم نمیشود میشود یکی دل مارو خوشحال کند و توضیحات بیشتری بدهد ممنون میشوم خیلی علاقمند شدم خواهش میکنم error fontall یعنی چه همش میگیرد
سلام دوست عزیز
فکر میکنم برای این که زودتر به جواب برسید سوالتون رو از ask.sisoog.com بپرسید
سلام ببخشید میشه اموزش فارسی کردن هم بدید
درود بر شما.
در آدرس گیت هابی که برای فونتها در مقاله معرفی کردم، یک فایل با نام fontALL.h وجود دارد که لیستی از فونتهای موجود در پوشه در آن نوشته شده است. شما نیز میتوانید با همان فرمت و در یکی از ابعاد دلخواه فونت خود را طراحی کنید و به این لیست اضافه کنید تا در برنامه قابل استفاده باشد. فونتها بهصورت ماتریسی و صفر و یکی است که میتوانید بهراحتی آنها را ویرایش کنید. در برنامه نیز رشتههای متنی زبان فارسی را با حروف انگلیسی (پینگلیش) تایپ کنید تا کاراکتر متناظر آن چاپ گردد. همچنین فونتهای فارسی نیز از قبل ساخته شده و وجود دارند. با جستجو میتوانید آنها را پیدا کنید و به لیست فونتهای خود اضافه کنید.
میشه توی اردوینو یک فیلمی اپلود کرد تا طوی تلوزیون پخش کنه؟ خروجی رنگی چه پینی هست؟
سلام دوست عزیز پخش فیلم اونم روی تلویزیون اونم با این مدل آردوینو تقریبا نشدنی هست مگر این سطح گرافیک و کیفیت رو خیلی بیارید پایین که باز اونم با این آردوینو خیلی تلاش میخواد
رنگی رو که هم اصلا حرفشو با این مدل بردها نزنید که کار راحتی نیست برای ایجاد رنگ توی سیگنال تصویر باید اختلاف فاز ایجاد کنید توی سیگنال که فرکانس محدود این برد ها امکانش رو بهتون نمی ده.
سلام خیلی خوب بود
اگر بخوام یک تصویر رنگی رو نمایش بدم باید چه دستوری رو وارد کنم؟
یا به طور کلی میخوام رنگ هم دخالت داشته باشه و سیاه سفید نباشه
فکر نمیکنم با این میکروکنترلر کتابخانه رنگی تصویر داشته باشید باید از سری های قوی تر استفاده کنید.
با عرض سلام و خسته نباشید
من کتابخونه رو از گیتهاب گرفتم
وقتی نمونه کد های خودشو آپلود میکنم
میگه برای آپلود تو ورژن uno مشکل داره
چرا
منطقا نباید مشکلی باشه چون تست ما هم با همین اونو بوده .
اگه میشه جزییات بیشتری از خطا رو بذارید تا بشه بهتر نظر داد.
سلام.
بسیار عالی بود.
البته من مدتی درباره تولید تصویر کامپوزیت و VGA توسط مگا 8 تحقیق کرده بودم. و به جای خوبی رسیده بودم. ولی به خاطر کارها با اولویت بالا متوقف کردم.
در اینترنت هم نمونه هایی دیده بودم. البته من اساس کار را درک کرده بود.
حالا این برناهه هم جالب بود.
ولی من یک مشکل دارم. هنوز با آردینو کار نکردم و خیلی هم راغب به این کار نیستم. تمام پروژه های من هم با مگا 8 است. چون من خرید این میکرو را عمده دارم. از نظر اقتصادی کاملا درست است. یعنی انبار اضافه نداریم. شاید در یک پروژه با میکرو سبک تر بشود باز هم این است. و در پرروژه سنگین تر ممکن است دو عدد میکرو مصرف شود.
و اما در خواست من: امکان دارد این برنامه را بتوانم در مگا 8 و با کدویژن پورت کنم؟ لطفا راهنمایی بفرمایید. (که دیگه خودم کار قبلی رو ادامه ندهم و این برنامه استفاده کنم)
با تشکر و سپاس فراوان
سلام.
بله، شما می تونید بوت لودر آردوینو، مخصوص Atmega8 رو روی این تراشه بریزید و از این پس با آردوینو برای اتمگا8 کد بزنید. آموزش هاش هم موجوده. البته کدویژن از آردوینو ساپورت نمیکنه. حتی احتمال داره این کتابخانه برای اتمگا8 با مشکل مواجه بشه. باید تستش کنید و لازم باشه تغییراتی رو هم در اون لحاظ کنید. اگر با C++ آشنایی داشته باشید، احتمالا میتونید این کتابخونه رو برای AVR تبدیل کنید. شما همچنان با سیسوگ همراه باشید، احتمال داره که اگر فرصت شد، باز در این مورد مطلبی منتشر کنیم.
خیلی خوب بود ممنون
متشکرم.
عالی بود فقط چطوری فونت بسازیم خودمون براش میخوام فونت فارسی بنویسم برای ال سی دی که راحت بود نکته اینکه من سیم زمین رو به صدا وصل نکرده بودم کار نمیکرد بنابراین حتما باید سیم زمین رو به صدا هم وصل کنیم تا کار کنه کتابخانه رنگی هم هست دانلود کنیم ؟
کتابخانه رنگی فکر نمیکنم با توجه مقدار حافظه موجود این میکروکنترلر اماکن پذیر باشه !!!
سلام اصلا فکرشو نمیکردم بدون ای سی بشه همچین کاری کرد. .سیسوگ واااقعا عالی هسی !
درود بر شما. اگر با سیسوگ همراه باشید، بیشتر از این هم شگفتانه خواهید دید!
سلام ، خدا قوت
امیدوارم موفق باشید
آیا برای ساخت خروجی رنگی هم کاری انجام دادید ؟
سلام.
اگر فرصت بشه، حتماً میگذاریم.
واقعا؟! خیلی عالیه..