آموزش راه اندازی ماژول سنسور تشخیص رنگ TCS230 و TCS3200 با آردوینو

آموزش راه اندازی ماژول سنسور تشخیص رنگ TCS230 و TCS3200 با آردوینو

در این مطلب می‌خواهیم به همراه هم راه اندازی ماژول سنسور تشخیص رنگ TCS230 و TCS3200 با آردوینو را آغاز کنیم، اما پیش از آن حتما باید با این ماژول به خوبی آشنا شوید.

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

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

در ادامه چگونگی عملکرد سنسورهای رنگ را با هم بررسی می‌کنیم.

نحوه‌ی عملکرد سنسورهای رنگ

نور سفید از سه رنگ اصلی (قرمز، سبز و آبی) تشکیل شده‌ است که هر کدام طول موج‌های مختلفی دارند. این رنگ‌ها با هم ترکیب می‌شوند تا رنگ‌های مختلفی را به وجود بیاورند.

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

تابش نور سفید به یک تیشرت و شلوارک و مشاهده رنگ قرمز تیشرت و رنگ آبی شلوارک به دلیل طول موج‌هایی که به چشم ما بازتاب می‌شود.


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

فیلتر حساس به رنگ Bayer و آرایش منظمی از فتودیودها


هر پیکسل در این شبکه متشکل از 4 فیلتر است: فیلتر قرمز، آبی، سبز و یک فیلتر شفاف. این الگو به عنوان «الگوی Bayer» نیز شناخته می‌شود. همان‌طور که در شکل زیر می‌بینید، هر فیلتر یک رنگ از نور را به فتودیود زیرین انتقال می‌دهد، درحالی‌که فیلتر شفاف، نور را به همان شکلی که هست، عبور می‌دهد. عبور این نور اضافی از فیلتر شفاف، در شرایطی با نور کم، مزیت بزرگی به‌شمار می‌آید.  

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


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

ماژول سنسور تشخیص رنگ TCS3200 و TCS230

اما اینجا می‌خواهیم سنسور تشخیص رنگ را بررسی کنیم.

در هسته مرکزی ماژول سنسور تشخیص رنگ TCS230 یا TCS3200 یک تراشه‌ی سنسور RGB وجود دارد. این تراشه ارزان‌قیمت، ساخته شرکت Texas Advanced Optoelectronic Solutions (TAOS) است. این سنسور، این قابلیت را دارد که طیف نامحدودی از رنگ‌های مرئی را تشخیص دهد و سپس اندازه‌گیری کند.

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

ولتاژ تغذیه این سنسور نیز بین 2.7 تا 5.5 است و سیگنال سطح منطقی TTL را تولید می‌کند.

عملکرد سنسور تشخیص رنگ TCS230و TCS3200

پیش از اینکه راه اندازی ماژول سنسور تشخیص رنگ TCS230 و TCS3200 با آردوینو را آغاز کنیم، می‌خواهیم نحوه عملکرد آن‌ها را در این بخش، به شما نشان دهیم. سنسور تشخیص رنگ، به کمک آرایشی 8×8 از فتودیودها، رنگ‌‌ها را تشخیص می‌دهد. 16 تا فتودیود دارای فیلترهای قرمز، 16 فتودیود دارای فیلترهای سبز و 16 فتودیود دارای فیلترهای آبی هستند. 16 فتودیود باقی‌مانده نیز شفاف‌اند و فیلتری ندارند. اگر به تصویر زیر از نزدیک نگاه کنید و کمی دقیق‌تر شوید، می‌توانید این فیلترها را مشاهده کنید.

نمای نزدیکی از سنسور تشخیص رنگ TCS230-TCS3200


هر 16 فتودیود به طور موازی به یک‌دیگر متصل شده‌اند، بنابراین با استفاده از دو پایه‌ی کنترلی S2 و S3  می‌توانید هر یک از آن‌ها را انتخاب کنید و بخوانید. به عنوان مثال، اگر فقط می‌خواهید تنها رنگ قرمز را تشخیص دهید، می‌توانید مطابق جدول زیر، با تنظیم هر دو پایه‌ی کنترلی به سطح منطقی LOW، شانزده فتودیود با فیلترهای قرمز را انتخاب کنید. به طور مشابه، برای فیلتر کردن رنگ‌های دیگر، می‌توانید ترکیب‌های مختلفی از پایه های S2 و S3 را انتخاب کنید.

S2S3Photodiode type
LOWLOWRed
LOWHIGHBlue
HIGHLOWClear (No filter)
HIGHHIGHGreen


یک مبدل جریان به فرکانس داخلی، داده‌های دریافتی از فتودیودها را به یک موج مربعی که فرکانس آن متناسب با شدت نور رنگ انتخاب ‌شده است، تبدیل می‌کند. دامنه‌ی فرکانس خروجی معمولا بین 2 هرتز تا 500 کیلوهرتز است.

این سنسور دو پایه‌ی کنترلی دیگر تحت عنوان S0 و S1 دارد. این دو پایه به منظور مقیاس‌گذاری فرکانس خروجی مورد استفاده قرار می‌گیرند. فرکانس را می‌توان به سه مقدار از پیش تعیین‌شده‌ی مختلف 2% ، 20% یا 100% مقیاس‌گذاری کرد. با این مقیاس‌گذاری فرکانس، سنسور را می‌توانید با انواع مختلفی از میکروکنترلرها و دستگاه‌ها استفاده کنید.

همان‌طور که در جدول زیر مشاهده می‌کنید، با ترکیبات مختلفی از پایه‌های کنترلی S0 و S1، می‌توانید ضرایب مقیاس‌گذاری مختلفی به دست بیاورید. در اکثر پروژه‌های مبتنی بر آردوینو، از مقیاس 20% استفاده می‌شود.

S0S1Output frequency scaling
LOWLOWPower down
LOWHIGH2%
HIGHLOW20%
HIGHHIGH100%

پایه‌های ماژول سنسور تشخیص رنگ TSC230

در اینجا نگاهی به پایه‌های ماژول سنسور تشخیص رنگ می‌اندازیم. شمای زیر پایه‌های ماژول TSC230 را نشان می‌دهد:

پایه‌های خروجی ماژول سنسور تشخیص رنگ TSC230

GND : پایه‌ای است که به زمین متصل می‌شود.

OE : پایه‌ی فعال‌ساز خروجی است. از این پایه به ندرت استفاده می‌شود و در اکثر ماژول‌ها به طور دائمی فعال شده ‌است. درصورتی‌که این پایه فعال نیست، آن را به LOW متصل کنید.

S0و S1 : پایه‌های انتخاب مقیاس‌گذاری فرکانس هستند.

S2و S3 : پایه‌های انتخاب نمایش رنگ هستند.

OUT : پایه‌ای است که موج مربعی سطح TLL را نشان می‌دهد.

VCC : پایه‌ی تأمین ولتاژ تغذیه‌ی ماژول است که باید به منبع تغذیه‌ی 2.7 ولت تا 5.5 ولت متصل شود.

سیم‌کشی – راه اندازی ماژول سنسور تشخیص رنگ TCS230 و TCS3200 با آردوینو

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

قطعات مورد نیاز:

قطعات ذکر شده، در جهت راه اندازی ماژول سنسور تشخیص رنگ به کار برده می‌شوند. اما در صورت نیاز، می‌توانید این ماژول را به‌صورت جداگانه با دو سنسور رنگ TCS230 SMD و سنسور رنگ TCS3200 SMD بسازید و طبق این مقاله آن را راه اندازی کنید.

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

نحوه سیم کشی ماژول سنسور تشخیص رنگ TCS3200-TCS230 به آردوینو

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


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

پس از اینکه ماژول را به طور کامل به آردوینو متصل کردید، زمان نوشتن کد است!

کالیبراسیون سنسور

در اینجا دو نمونه کد برای راه اندازی سنسور تشخیص رنگ TCS230 با آردوینو تهیه کرده‌ایم. اما می‌توانید برای راه اندازی سنسور تشخیص رنگ TCS3200 نیز، از آن استفاده کنید:

  1. اولین نمونه کد (کد کالیبراسیون)، در جمع‌آوری داده‌‌های خام از سنسور به شما کمک می‌کند.
  2. دومین نمونه کد (نمونه کد اصلی آردوینو)، از داده‌های خام دریافتی استفاده می‌کند تا مقادیر RGB را برای رنگی که تشخیص داده شده است، نشان دهد.

به این نکته دقت داشته باشید که نحوه اتصال ماژول به آردوینو در هر دو نمونه کد یکسان خواهد بود.

در ادامه می‌توانید نمونه کد کالیبراسیون را مشاهده کنید. این کد رنگ به رنگ سنسور TCS230 را بررسی و پهنای پالس پایه‌ی خروجی را می‌خواند و در نهایت، خروجی را در سریال مانیتور نمایش می‌دهد.

این نمونه کد را روی نرم افزار آردوینو بارگذاری کنید و سنسور را رو به روی جسم مورد نظر خود قرار دهید. ابتدا یک جسم مرجع برای رنگ سفید و سیاه پیدا کنید. این دو جسم مرجع، حداقل و حداکثر مقادیر به ازای هر سه رنگ را تولید خواهند کرد.

// Define color sensor pins
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

// Variables for Color Pulse Width Measurements
int redPW = 0;
int greenPW = 0;
int bluePW = 0;

void setup() {
	// Set S0 - S3 as outputs
	pinMode(S0, OUTPUT);
	pinMode(S1, OUTPUT);
	pinMode(S2, OUTPUT);
	pinMode(S3, OUTPUT);

	// Set Pulse Width scaling to 20%
	digitalWrite(S0,HIGH);
	digitalWrite(S1,LOW);

	// Set Sensor output as input
	pinMode(sensorOut, INPUT);

	// Setup Serial Monitor
	Serial.begin(9600);
}

void loop() {
	// Read Red Pulse Width
	redPW = getRedPW();
	// Delay to stabilize sensor
	delay(200);

	// Read Green Pulse Width
	greenPW = getGreenPW();
	// Delay to stabilize sensor
	delay(200);

	// Read Blue Pulse Width
	bluePW = getBluePW();
	// Delay to stabilize sensor
	delay(200);

	// Print output to Serial Monitor
	Serial.print("Red PW = ");
	Serial.print(redPW);
	Serial.print(" - Green PW = ");
	Serial.print(greenPW);
	Serial.print(" - Blue PW = ");
	Serial.println(bluePW);
}


// Function to read Red Pulse Widths
int getRedPW() {
	// Set sensor to read Red only
	digitalWrite(S2,LOW);
	digitalWrite(S3,LOW);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

// Function to read Green Pulse Widths
int getGreenPW() {
	// Set sensor to read Green only
	digitalWrite(S2,HIGH);
	digitalWrite(S3,HIGH);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

// Function to read Blue Pulse Widths
int getBluePW() {
	// Set sensor to read Blue only
	digitalWrite(S2,LOW);
	digitalWrite(S3,HIGH);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}


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

خروجی نمونه کد کالیبراسیون بر روی سریال مانیتور

توضیحات کد

نمونه کدی که در بخش قبلی دیدید، با تعریف پایه‌هایی که برای اتصال به ماژول سنسور تشخیص رنگ TCS230 مورد استفاده قرار می‌گیرند، آغاز می‌شود. علاوه بر این، متغیرهای دیگری نیز به‌منظور نمایش پهنای پالس رنگ قرمز، سبز و آبی تعریف می‌شوند.

#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

int redPW = 0;
int greenPW = 0;
int bluePW = 0;


در تابع setup، شما باید پایه‌های S0  تا S3 را به عنوان خروجی تعریف کنید. این پایه‌ها برای انتخاب مقیاس‌گذاری فرکانس و رنگی که می‌خواهید بررسی کنید، مورد استفاده قرار می‌گیرند. از پایه‌های S0 و S1 نیز برای تنظیم مقیاس‌گذاری فرکانس به 20%، که مقدار رایجی هنگام راه اندازی این ماژول با آردوینو است، استفاده می‌شود. در مرحله بعد، پایه‌ی خروجی سنسور به عنوان ورودی آردوینو تعریف می‌شود. با این پایه، شما موج مربعی را دریافت خواهید کرد.

در نهایت، تنظیمات مربوط به سریال مانیتور را انجام دهید.

void setup() {
	// Set S0 - S3 as outputs
	pinMode(S0, OUTPUT);
	pinMode(S1, OUTPUT);
	pinMode(S2, OUTPUT);
	pinMode(S3, OUTPUT);

	// Set Pulse Width scaling to 20%
	digitalWrite(S0,HIGH);
	digitalWrite(S1,LOW);

	// Set Sensor output as input
	pinMode(sensorOut, INPUT);

	// Setup Serial Monitor
	Serial.begin(9600);
}

در تابع Loop، باید سه تابع ()getRedPW() ، getGreenPW  و ()getBluePW  را برای به دست‌آوردن پهنای پالس فراخوانی کنید. به عنوان نمونه، تابع ()getRedPW را باهم بررسی می‌کنیم.

تابع ()getRedPW، پهنای پالس رنگ قرمز را به دست می‌آورد. این کار با تنظیم پایه‌های S2 و S3 برای انتخاب فیلتر قرمز آغاز می‌شود. این تنها تفاوت این تابع با توابع سبز و آبی است.

سپس، یک عدد صحیح برای ذخیره‌ی پهنای پالس تعریف می‌شود. پس از آن، پهنای پالس با کمک تابع ()pulseIn آردوینو تعیین می‌گردد. این تابع، پهنای پالس را اندازه می‌گیرد. اما به این نکته دقت داشته باشید که ما آن را به گونه‌ای تنظیم کرده‌ایم که سطح پایین یا LOW بودن سیگنال را اندازه بگیرد. نتیجه این اندازه گیری، به صورت زمان و بر حسب ثانیه خواهد بود. در نهایت، این مقدار توسط تابع برگردانده می‌شود و تابع به پایان می‌رسد.

int getRedPW() {
	// Set sensor to read Red only
	digitalWrite(S2,LOW);
	digitalWrite(S3,LOW);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

همان‌‍طور که گفتیم در تابع Loop باید سه تابع را برای خواندن پهنای پالس رنگ فراخوانی ‌کنید. علاوه بر این، تأخیر 200 میلی‌ثانیه‌ای بین آن‌ها را نیز به هر تابع اضافه کنید تا سنسور به حالت پایدار برسد. سپس، مقادیر را در سریال مانیتور چاپ و حلقه را تکرار کنید.

void loop() {
	// Read Red Pulse Width
	redPW = getRedPW();
	// Delay to stabilize sensor
	delay(200);

	// Read Green Pulse Width
	greenPW = getGreenPW();
	// Delay to stabilize sensor
	delay(200);

	// Read Blue Pulse Width
	bluePW = getBluePW();
	// Delay to stabilize sensor
	delay(200);

	// Print output to Serial Monitor
	Serial.print("Red PW = ");
	Serial.print(redPW);
	Serial.print(" - Green PW = ");
	Serial.print(greenPW);
	Serial.print(" - Blue PW = ");
	Serial.println(bluePW);
}

کد آردوینو –  خواندن مقادیر RGB از TCS230

زمانی‌که مقادیر پهنای پالس را دریافت کردید، نمونه کد بعدی که با استفاده از آن مقادیر RGB را از سنسور تشخیص رنگ TCS230 می‌خوانید، در آردوینو بارگذاری کنید.

اما پیش از بارگذاری این نمونه کد، 6 مقدار را که از نمونه کد کالیبراسیون استخراج کردید، در ابتدای این کد وارد نمایید و مقادیر آن را  با مقدار 0  جایگزین کنید.

// Define color sensor pins
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

// Calibration Values
// *Get these from Calibration Sketch
int redMin = 0; // Red minimum value
int redMax = 0; // Red maximum value
int greenMin = 0; // Green minimum value
int greenMax = 0; // Green maximum value
int blueMin = 0; // Blue minimum value
int blueMax = 0; // Blue maximum value

// Variables for Color Pulse Width Measurements
int redPW = 0;
int greenPW = 0;
int bluePW = 0;

// Variables for final Color values
int redValue;
int greenValue;
int blueValue;

void setup() {
	// Set S0 - S3 as outputs
	pinMode(S0, OUTPUT);
	pinMode(S1, OUTPUT);
	pinMode(S2, OUTPUT);
	pinMode(S3, OUTPUT);

	// Set Sensor output as input
	pinMode(sensorOut, INPUT);

	// Set Frequency scaling to 20%
	digitalWrite(S0,HIGH);
	digitalWrite(S1,LOW);

	// Setup Serial Monitor
	Serial.begin(9600);
}

void loop() {
	// Read Red value
	redPW = getRedPW();
	// Map to value from 0-255
	redValue = map(redPW, redMin,redMax,255,0);
	// Delay to stabilize sensor
	delay(200);

	// Read Green value
	greenPW = getGreenPW();
	// Map to value from 0-255
	greenValue = map(greenPW, greenMin,greenMax,255,0);
	// Delay to stabilize sensor
	delay(200);

	// Read Blue value
	bluePW = getBluePW();
	// Map to value from 0-255
	blueValue = map(bluePW, blueMin,blueMax,255,0);
	// Delay to stabilize sensor
	delay(200);

	// Print output to Serial Monitor
	Serial.print("Red = ");
	Serial.print(redValue);
	Serial.print(" - Green = ");
	Serial.print(greenValue);
	Serial.print(" - Blue = ");
	Serial.println(blueValue);
}


// Function to read Red Pulse Widths
int getRedPW() {
	// Set sensor to read Red only
	digitalWrite(S2,LOW);
	digitalWrite(S3,LOW);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

// Function to read Green Pulse Widths
int getGreenPW() {
	// Set sensor to read Green only
	digitalWrite(S2,HIGH);
	digitalWrite(S3,HIGH);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

// Function to read Blue Pulse Widths
int getBluePW() {
	// Set sensor to read Blue only
	digitalWrite(S2,LOW);
	digitalWrite(S3,HIGH);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}


اکنون می‌توانید کد را بارگذاری نمایید و نتایج را در قالب نمونه‌هایی از رنگ‌های مختلف مشاهده کنید. در صورت لزوم، می‌توانید تغییرات جزئی در مقادیر کالیبراسیون اعمال کنید.

توضیحات کد:

همان‌طور که مشاهده می‌کنید، به جز 6 مقدار کالیبراسیون که از نمونه کد قبلی به دست آورده‌اید و باید در ابتدای این نمونه کد وارد کنید، بیشتر قسمت‌های این کد دقیقاً مشابه نمونه کد قبلی است.

// Calibration Values
int redMin = 0; // Red minimum value
int redMax = 0; // Red maximum value
int greenMin = 0; // Green minimum value
int greenMax = 0; // Green maximum value
int blueMin = 0; // Blue minimum value
int blueMax = 0; // Blue maximum value

اما تنها تفاوت این کد با نمونه کد قبلی، این است که در اینجا سه متغیر جدید برای نمایش مقادیر RGB به عنوان خروجی مورد نظر شما تعریف شده‌ است.

int redValue;
int greenValue;
int blueValue;

در تابع Loop، با استفاده از همان توابعی که برای به دست‌ آوردن پهنای پالس در نمونه کد قبلی استفاده کرده‌اید، مقادیر را بخوانید. سپس از تابع ()map استفاده کنید تا به کمک مقادیر کالیبراسیون به عنوان مرجع، مقادیر خوانده ‌شده را به مقادیر RGB تبدیل کنید. به این نکته توجه داشته باشید که شما حداقل مقدار را به 255 و حداکثر مقدار را به 0 نگاشت کرده‌اید، زیرا توابع شما پهنای پالس را برمی‌گردانند و نه فرکانس را.

// Read Red value
redPW = getRedPW();
// Map to value from 0-255
redValue = map(redPW, redMin,redMax,255,0);
// Delay to stabilize sensor
delay(200);

در نهایت، مقادیر به دست آمده را در سریال مانیتور نمایش دهید. این مقادیر نهایی با مقادیر RGB جسمی که اسکن شده است، متناظر خواهد بود.

کلام آخر

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

به هر حال، امیدواریم که با خواندن این مقاله بتوانید این پروژه جذاب و البته پر کاربرد را انجام دهید. اگر نیاز به راهنمایی بیشتری داشتید، حتما دیدگاه خود را ثبت کنید و با افراد متخصص ما در این حوزه در ارتباط باشید.  

مقالات مشابه

۶ دیدگاه. Leave new

  • سلام
    باز هم مثل تمامی مقاله هایی که از شما خوندم. این پست هم عالی بود.
    در یه کلام باید بگم که مفید، جامع و کاربردی.

    پاسخ
    • سلام به شما،
      خیلی ممنون، شما لطف داری،
      باعث خرسندیه که این مقالات رو دوست داشتی و ما رو همراهی می‌کنی.

      پاسخ
  • امیر محمد
    دی ۶, ۱۴۰۱ ۱۷:۵۹

    سلام ببخشید من این برنامه رو نوشتم ولی در بخش serial از اول تا آخر شماره۴۸۱ رو نشون میده مشکل از کجاست ؟

    پاسخ
    • سلام امیر محمد عزیز،
      اگر نوشته های GREEN PW، RED PW و BLUE PW رو هم نمی‌بینی و فقط در سریال مانیتور عدد ۴۸۱ چاپ میشه، احتمالا مشکل تنظیم نبودن بادریت هست.
      لطفا مثل تصویر، بادریت رو روی ۹۶۰۰ قرار بده.

      پاسخ
  • سلام ، برای راه اندازی دو عدد سنسور تشخیص رنگ با یک اردوینو چه کاری باید انجام بدیم؟

    پاسخ
    • درود بر شما دوست عزیز
      سنسور دوم را نیز به ۴ تا از پایه‌‌های آزاد دیجیتال آردوینو متصل کنید. پایه‌های سنسور دوم را نیز در کد تعریف کنید، سه متغیر دیگر برای رنگ‌های سنسور دوم تعریف کنید. پایه‌های سنسور دوم را نیز خروجی تعریف کنید و.. . در اصل همه کارهایی که برای سنسور اول انجام دادیم برای سنسور دوم نیز انجام می‌شود.

      پاسخ

دیدگاهتان را بنویسید

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

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات