آموزش آردوینوپروژه های آردوینو

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

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

سنسور تشخیص رنگ TCS3200

سنسور تشخیص رنگ TCS3200 دارای 8 پین است. این پین ها VCC، OUT، S3، S2، S1، S0، OUT، 0E و GND هستند. تمامی پین های این ماژول سنسور به جز VCC و Ground دیجیتالی هستند. Pinout یک سنسور رنگی TCS3200 در زیر نشان داده شده است:

سنسور تشخیص رنگ TCS3200

  • VCC پایه منبع تغذیه سنسور تشخیص رنگ است که می تواند به 5 ولت یا 3.3 ولت منبع تغذیه متصل شود.
  • از پایه های S0 و S1 می توان برای انتخاب درصد مقیاس بندی فرکانس خروجی سنسور استفاده کرد. با پیکربندی این پین‌ها، می‌توان آن را روی 2، 20، یا 100 درصد مقیاس‌گذاری تنظیم کرد.
  • S2 و S3 از پین های S2 و S3 می توان برای انتخاب آرایه رنگ سنسور استفاده کرد. با انتخاب آرایه رنگی مناسب یکی پس از دیگری، این سنسور یک رنگ را شناسایی می کند.
  • OE این پین برای فعال یا غیرفعال کردن خروجی ماژول حسگر رنگ است. این پین روی برد ماژول LOW می شود تا با دادن پالس HIGH به این پین، سنسور غیرفعال شود.
  • OUT این پین خروجی سنسور است، هنگامی که یک رنگ خاص توسط سنسور تشخیص داده می شود، فرکانس پالس خروجی روی این پایه تغییر می کند، با تشخیص این تغییر در عرض پالس می توانیم رنگ را تعیین کنیم.
  • GND پایه زمین ماژول Color Sensor است و باید به پایه GND آردوینو متصل شود.

نحوه کار سنسور رنگ TCS3200

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

نحوه کار سنسور رنگ TCS3200 

حالا بیایید ببینیم سنسور TCS3200 چگونه کار می کند، همانطور که در گیف بالا می بینید، ما سنسور رنگ را داریم و سیگنال های High و Low را به پین ​​های S0 و S1 ماژول سنسور می دهیم که سنسور را روی مقیاس 20% تنظیم می کند. مقیاس بندی فرکانس این بدان معناست که سنسور با فرکانس 200 کیلوهرتز کار خواهد کرد. در این حالت چرخه وظیفه سنسور 50 درصد باقی می ماند اما فرکانس خروجی سنسور با توجه به مقدار رنگ تغییر می کند. پین های S2 و S3 برای انتخاب آرایه فتودیودها استفاده می شوند و همانطور که در گیف مشاهده می کنید برای هر رنگی که برای سنسور قابل مشاهده است، آرایه را یکی یکی روی فیلتر سبز قرمز و آبی قرار می دهیم. اگر رنگ تشخیص داده شده توسط سنسور با آرایه انتخاب شده سنسور مطابقت داشته باشد، فرکانس خروجی سنسور افزایش می یابد و برای هر موقعیت دیگری فرکانس خروجی ثابت می ماند. همانطور که قبلاً اشاره کردیم، از پین های S0، S1، S2 و S3 برای پیکربندی سنسور در جدول زیر استفاده می شود.

S0 و S1 ضریب مقیاس‌بندی فرکانس خروجی را تنظیم می‌کنند:

S0

S1

ضریب مقیاس دهی فرکانس خروجی

L

L

حالت خاموش

L

H

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

مقیاس 2 درصد

H

L

مقیاس 20 درصد

H

H

مقیاس 100 درصد

S2 و S3 برای تنظیم فیلتر داخلی:

S2

S3

فیلتر ها

L

L

فیلتر قرمز

L

H

فیلتر آبی

H

L

بدون فیلتر

H

H

فیلتر سبز

اتصال سنسور TCS3200 به آردوینو

اکنون که به طور کامل متوجه شده ایم که سنسور رنگی TCS3200 چگونه کار می کند، می توانیم تمام سیم های مورد نیاز را به آردوینو متصل کرده و کدی را بنویسیم تا تمام داده ها از سنسور دریافت شود. شماتیک مدار اتصال TCS3200 به آردوینو Uno در زیر نشان داده شده است:

اتصال سنسور TCS3200 به آردوینو

قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

اتصال سنسور TCS3200 به آردوینو بسیار ساده است. برای برقراری ارتباط با سنسور به هیچ چیز دیگری به جز پنج پین GPIO آردوینو نیاز نداریم و به همین دلیل است که از پین های GPIO 8،7،6،5،4 آردوینو استفاده کرده ایم. در نهایت برای تغذیه سنسور از پایه های 5 ولت و Ground برد آردوینو استفاده کرده ایم.

کد آردوینو برای ماژول TCS3200

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

کد کامل در فایل دانلودی انتهای صفحه قرار گرفته است. در اینجا قسمت های مهم کد را توضیح میدهیم. ما کد را با مقدار دهی متغیر ها با شماره پین ها شروع میکنیم.

/*
 *  سنسور S0 -> آردوینو D8
 *  سنسور S1 -> آردوینو D7
 *  سنسور S2 -> آردوینو D6
 *  سنسور S3 -> آردوینو D5
 *  سنسور OUT -> آردوینو D4
*/
#define S0_PIN 8 
#define S1_PIN 7
#define S2_PIN 6
#define S3_PIN 5
#define OUT_PIN  4

در مرحله بعد، تابع setup() را داریم. در تابع setup، پایه S0، S1، S2 و S3 را به عنوان خروجی و OUT_Pin را به عنوان ورودی تنظیم می کنیم.

// S0, S1, S2, S3 خروجی کردن
  pinMode(S0_PIN, OUTPUT);
  pinMode(S1_PIN, OUTPUT);
  pinMode(S2_PIN, OUTPUT);
  pinMode(S3_PIN, OUTPUT);
 //ورودی کردن
  pinMode(OUT_PIN, INPUT);

سپس در تابع setup، پین S0 را HIGH و پین S1 را LOW  میکنیم، این ضریب مقیاس را تا 20% که توسط دیتاشیت توصیه می‌شود، کاهش می‌دهد. ما همچنین ارتباط سریال UART را برای اشکال زدایی فعال می کنیم.

// تنظیم مقیاس
  digitalWrite(S0_PIN, HIGH);
  digitalWrite(S1_PIN, LOW);
// فعال سازی UART
  Serial.begin(9600);

سپس، ما تابع loop خود را داریم. در تابع حلقه، سه متغیر محلی به نام‌های r، g و b را ایجاد می‌کنیم. این متغیرها مقادیر RGB ارائه شده توسط سنسور را نگه می دارند. پس از آن، ما سه تابع برای پردازش مقادیر قرمز، سبز و آبی ایجاد کردیم. این مقادیر را در متغیرهای r، g و b ذخیره کنید. همچنین تأخیر 200 میلی‌ثانیه اضافه می‌کنیم تا به حسگر زمان داده شود تا داده‌ها را پردازش کند. هنگامی که فرآیند جمع آوری داده ها به پایان رسید، مقادیر را در پنجره نمایشگر سریال چاپ می کنیم. همچنین سه دستور if با سه مقدار داریم. این مقادیر پس از چندین بار قرار دادن جسم در مقابل سنسور و میانگین گیری انتخاب می شوند. اگر این مقدار با مقدار خروجی سنسور مطابقت داشته باشد، نام آن رنگ را در پنجره نمایشگر سریال دریافت خواهید کرد.

void loop(){
  int r, g, b;
  r = process_red_value();
  delay(200);
  g = process_green_value();
  delay(200);
  b = process_blue_value();
  delay(200);
  Serial.print("r = ");
  Serial.print(r);
  Serial.print(" ");
  Serial.print("g = ");
  Serial.print(g);
  Serial.print(" ");
  Serial.print("b = ");
  Serial.print(b);
  Serial.print(" ");
  Serial.println();
  if (r < 42){
    Serial.println("Colour Pink");
  }
  else if (g < 63){
    Serial.println("Colour Green");
  }
  else if (r < 64){
    Serial.println("Colour Red");
  }
}

این نشان دهنده پایان تابع loo[ ما است، اکنون بیایید در مورد توابعی صحبت کنیم که داده های خروجی را از سنسور پردازش می کنند و مقدار را در قالب عدد صحیح برمی گرداند. این سه عملکرد دقیقاً مشابه هستند. تنها تفاوت در نحوه پیکربندی پین S2 و S3 سنسور است. برای پردازش رنگ قرمز، هر دو پین S2 و S3 باید LOW باشند. برای پردازش رنگ سبز، پین های S2 و S3 باید HIGH باشند. و برای پردازش رنگ آبی S2 باید LOW و S3 باید HIGH باشد. همانطور که قبلا ذکر کردیم تابع pulseIn() برای تعیین عرض پالس سنسور استفاده می شود. این تابع مقدار را بر حسب میلی ثانیه برمی گرداند و ما به سادگی آن مقدار را در پنجره نمایشگر سریال چاپ می کنیم.

int process_red_value(){
  digitalWrite(S2_PIN, LOW);
  digitalWrite(S3_PIN, LOW);
  int pulse_length = pulseIn(OUT_PIN, LOW);
  return pulse_length;
}
int process_green_value(){
  digitalWrite(S2_PIN, HIGH);
  digitalWrite(S3_PIN, HIGH);
  int pulse_length = pulseIn(OUT_PIN, LOW);
  return pulse_length;
}
int process_blue_value(){
  digitalWrite(S2_PIN, LOW);
  digitalWrite(S3_PIN, HIGH);
  int pulse_length = pulseIn(OUT_PIN, LOW);
  return pulse_length;
}

این نشان دهنده پایان کد ما است.

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

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

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

موارد موجود در فایل : فایل سورس کامل

3.7 (3 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

5 نظر

  1. سلام.سنسور رنگ تا چه فاصله ای رنگ را تشخیص میدهد؟جسم رنگی باید دقیقاً جلوی سنسور قرار گیرد یا اگر فاصله داشته بتشد قابل تشخیص میباشد؟

  2. سلام وقت بخیر. من این کد رو زدم و زمانی که میخوام خروجی بگیرم ارور میده(قسمت serial monitor) باید چیکار کنم براش؟

    1. سلام عزیز
      اروری که دریافت میکنید رو ارسال کنید

  3. سلام خدمت دوستان عزیز ،
    خواستم بگم تمام پروژه هاتون عالین
    و هم ممنون که رایگان در خدمت مردم قرار دادید
    چون بعضی سایت ها پولیه
    ممنون

    1. سلام عزیز
      خوشحالم که آیرنکس براتون مفید بوده

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

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