
مقدمه
راه اندازی سنسور تشخیص رنگ: امروزه رنگ ها تاثیر بسزایی در زندگی ما دارند. از ست کردن رنگ یک خانه گرفته تا تلویزیون و گوشی موبایل که معمولا تا ۱۶ میلیون رنگ را ساپورت می کنند. اما تشخیص این رنگ ها کار دشواریست بخصوص زمانی که بخواهیم آن را به میکروکنترلر یا برد آموزشی ای مثل آردوینو بفهمانیم.

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

جدول مقدار دهی پین ها S1 تا S4
انتخاب رنگ فتودیودها | S4 | S3 | نسبت فرکانس سیگنال خروجی | S1 | S0 |
قرمز | L | L | خاموش | L | L |
آبی | H | L | ۲% | H | L |
بدون فیلتر | L | H | ۲۰% | L | H |
سبز | H | H | ۱۰۰% | H | H |
لوازم مورد نیاز برای راه اندازی سنسور تشخیص رنگ
سیم هدر برای اتصالات
یکم انرژی!
نحوه اتصالات: راه اندازی سنسور تشخیص رنگ

VCC: اتصال به منبع تغذیه ۲.۷ تا ۵.۲ ولت
GND: اتصال به زمین مدار
Out: سیگنال خروجی به صورت موج مربعی
OE: پایه فعالسازی سیگنال (با اتصال به زمین فعال و با اتصال به VCC غیر فعال میشود)
S1: پایه نسبت فرکانس خروجی
S2: پایه نسبت فرکانس خروجی
S3: پایه انتخاب رنگ برای بررسی
S4: پایه انتخاب رنگ برای بررسی
اگر احساس می کنید که پایه ها نامفهومند، نگران نباشید. داخل کد های آردوینو توضیح داده خواهد شد.
کد برنامه در راه اندازی سنسور تشخیص رنگ
در کد آردوینو زیر ما قرار است مقدار خوانده شده از هر یک از سه فتودیود قرمز، سبز و آبی را در سریال مانیتور نمایش دهیم:
const int s0 = 5;
const int s1 = 4;
const int s2 = 7;
const int s3 = 6;
const int out = 8;
تعریف پایه های ماژول TCS230 برای آردوینو
int red = 0;
int green = 0;
int blue = 0;
تعریف متغییر های رنگ ها
void setup()
{
Serial.begin(9600);
راه اندازی سریال
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
تعریف پایه های S0 تا S4 به عنوان خروجی
pinMode(out, INPUT);
تعریف پایه OUT به عنوان ورودی
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
با HIGH کردن این دو پایه فرکانس خروجی به نسبت ۵۰ ۵۰ خروجی می دهد
}
void loop()
{
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
ابتدا S2 و S3 را LOW می کنیم تا بتوانیم فقط رنگ قرمز را تشخیص دهیم
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
با استفاده از تابع pulseIn مقدار خروجی را می خوانیم و متغییر رنگ مربوطه (در اینجا قرمز) را مقدار دهی می کنیم توجه کنید که آرگمان دوم شرطی را بررسی کرده که طی آن اگر مقدار out برابر با HIGH بود مقدار LOW را به تابع pulseIn می دهد و در غیر اینصورت مقدار HIGH را می دهد
digitalWrite(s3, HIGH);
حال مقدار S3 را HIGH می کنیم تا بتوانیم رنگ آبی را بررسی کنیم
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
همانند بالا
digitalWrite(s2, HIGH);
حال مقدار S2 را HIGH می کنیم تا بتوانیم رنگ سبز را بررسی کنیم
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
همانند بالا
Serial.print("R Intensity:");
Serial.print(red, DEC);
Serial.print(" G Intensity: ");
Serial.print(green, DEC);
Serial.print(" B Intensity : ");
Serial.print(blue, DEC);
Serial.println();
مقادیر بدست آمده را چاپ می کنیم
delay(300);
تاخیر به مدت ۳۰۰ میلی ثانیه (می توانید این مقدار را کم یا زیاد کنید)
}
خروجی کد سه متغییر رنگ می دهد که بین ۰ تا ۲۵۵ عددی را به شما می دهند با استفاده از آن ها می توانید رنگ را تشخیص دهید مثلا اگر متغییر قرمز ۲۵۵ و بقیه متغییر ها مقداری نزدیک به صفر داشتند آن رنگ قرمز است. همچنین با ترکیب این سه رنگ می توانید هر رنگی که دلتان می خواهد را دریافت و چه بسا با استفاده از مثلا ال ای دی سه رنگ آن رنگ را دوباره تولید کنید.
سخن پایانی
امیدوارم از این آموزش لذت برده باشید. لطفا نظرات انتقادات و پیشنهادات خود را برای من در زیر همین پست ارسال کنید.
شما می توانید دیتاشیت سنسور این ماژول را از اینجا دانلود کنید.