این پروژه برای تشخیص و شناسایی رنگ ها و نمایش نام رنگ‌ها روی LCD با استفاده از ماژول سنسور رنگی TCS3200 و برد Arduino استفاده می‌شود. این حسگر با استفاده از فوتودیودهای رنگی، مقدار منعکس شده نور قرمز، سبز و آبی را تولید می‌کند. خروجی رنگ بصورت فرکانس است و مقدار آن به شدت بستگی دارد.

نظریه شناسایی رنگ

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

از مقادیر R ، G و B که به صورت Vr ، Vg و Vb دریافت می‌شوند، باید دو مقدار معروف به “مختصات رنگی” محاسبه شود. فرمول محاسبه این دو مختصات x و y توسط کمیته بین‌المللی ارائه شده است.

 

شکل 1: نمودار رنگی بودن با x و y مختصات قرمز و سبز

این کمیته، پس از خواندن هزاران مشاهده‌گر بصری با اشیا رنگی متنوع، به یک نمودار معروف به نمودار Chromaticity رسید که در شکل 1 نشان داده شده است. از مختصات x و y محاسبه‌شده، رنگ را میتوان با رسم نقشه ( y)در نمودار مشخص کرد.

x=Vr/(Vr+Vg+Vb)

y=Vg/(Vr+Vg+Vb)

به عنوان مثال، x = 0.2 و y = 0.35 رنگ سبز مایل به آبی و x = 0.47 و y = 0.45 رنگ زرد می‌دهد. این نمودار یک شکل نعل اسبی دارد، که عجیب است اما نتیجه یک مطالعه جامع توسط CIE است. لبه نمودار خالص‌ترین رنگ‌ها را با مقادیر طول موج طیفی نشان داده شده در نقاط خاصی که در آن نشان داده شده است، نشان می‌دهد.

به عنوان مثال، رنگ آبی از 400 نانومتر شروع می‌شود، سبز بین 500 تا 540 نانومتر، زرد با 575 نانومتر و قرمز با 640 نانومتر شروع می‌شود.

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

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

مدار ماژول سنسور رنگ  TCS3200

نمودار مدار برای شناسایی رنگ در شکل 2 نشان داده شده است. این مدار در اطراف یک تخته Arduino Uno (برد 1) ، 16 × 2 LCD (LCD1) ، ماژول حسگر رنگ TCS3200 (CS) و چند جز گسسته ساخته شده است. ماژول سنسور رنگ TCS3200 در شکل 3 نشان داده شده است.

شکل 2: نمودار مدار برای شناسایی رنگ
شکل 3: ماژول حسگر رنگ TCS3200

مدار نشان داده شده از خروجی فرکانس استفاده می‌کند. پین وقفه خارجی INT0 (پایه 2) Arduino برای شمارش مقادیر فرکانس استفاده می‌شود. ما 10kHz را به عنوان حداکثر برد انتخاب کرده‌ایم. پایه‌های S2 و S3 رنگ‌ها را به ترتیب 00 ، 11 و 01 انتخاب می‌کنند. فقط مقادیر اصطکاک سه رنگ قرمز (R) ، سبز (G) و آبی (B) در دسترس هستند. جزئیات ماژول سنسور رنگ با استفاده از TCS3200 در ‘RGB Color Detector منتشر شده است

مقاله DIY Sensor Module اکنون در این پیوند موجود  است.

سه مقدار فرکانس برای تعیین مختصات رنگی و در نتیجه شناسایی یکی از میان 22 رنگ طبقه‌بندی شده از نمودار رنگی CIE با استفاده از الگوریتم جستجوی ما استفاده می‌شود. مختصات رنگی (ضرب در ده) برای هر شی همراه با نزدیک‌ترین نام رنگ طبق نمودار CIE مشخص شده نشان داده شده است (شکل 2). این مقادیر R و G برای تطبیق رنگ استفاده می‌شود.

یک LCD به برد Arduino وصل می‌شود تا هم مختصات R و G و هم نام رنگ را نشان دهد. R و G برای تطبیق رنگ استفاده می‌شود زیرا دو شی colored رنگی یکسان مقادیر مشابهی دارند.

مدار نیز با یک نمایشگر LCD دو ردیف رابط می‌شود. پایه 3 LCD به یک پمپتور 10 کیلو اهم (VR1) متصل است تا ولتاژ بین 0 تا 5 ولت را برای تغییر کنتراست کاراکترهای نشان داده شده در ماژول LCD تنظیم کند.

داده‌ها شامل چهار اتصال سیم به پایه‌های D4 تا D7 LCD (11-14) است. پایه 15 به + 5V متصل شده و برای نور پس زمینه LCD استفاده می‌شود و پایه 16 از طریق مقاومت R2 به زمین متصل می‌شود.

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

اجسام مایل به زرد که در LCD شناسایی و نمایش داده می‌شوند، همراه با مقادیر سیگنال‌ها، در شکل 4 نشان داده شده است.

شکل 4 (a و b): تشخیص اشیا colored رنگی مایل به زرد

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

برنامه (colour_sense.bas) برای واحد در Oshon AVR Simulator IDE ساخته شده است. این نرم‌افزار برای توسعه پروژه مفید است.

بعد از انجام کدگذاری (با BASIC نوشته شده)، کد را کامپایل کنید یا فایل hex تولید شده در تراشه ATmega328P را روی صفحه Arduino Uno بارگیری کنید. از برنامه Xloader برای بارگذاری پرونده hex استفاده می‌شود. همانطور که در شکل 5 نشان داده شده است ، هنگام اجرای برنامه Xloader، پنجره‌ای باز می‌شود، شماره پورت COM را برای پریز USB که برد Arduino Uno به آن متصل است مشخص کنید. این شماره را می‌توان از “Device Manager” در ویندوز روی رایانه / لپ تاپ یافت.

همانطور که در شکل 5 نشان داده شده است، کد hex را از پنجره XLoader مرور کنید و دکمه بارگذاری را فشار دهید. پس از بارگیری کد، برد Arduino را از لپ تاپ جدا کرده و یک آداپتور 9 ولت به سوکت DC آن متصل کنید (یا یک منبع 5 ولت به پایه‌های 5 ولت و پایه آن).

شکل 5: پنجره Xloader

نحوه ساخت ماژول شناسایی رنگ ها

طرح PCB برای شناسایی رنگ در شکل 6 و طرح اجزای آن در شکل 7 نشان داده شده است. پس از جمع‌آوری مدار بر روی PCB، آن را در یک جعبه مناسب محصور کنید. ماژول سنسور و LCD را در پانل جلو ثابت کرده و سیم‌ها را به اتصالات مربوط به آنها در PCB وصل کنید.

شکل 6: طرح PCB از شناسایی رنگ
شکل 7: طرح اجزای PCB

PDF های طرح بندی PCB و قطعات را بارگیری کنید:  اینجا را کلیک کنید

کد منبع را بارگیری کنید

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