این ماژول بر پایه چیپ TCS3200 می باشد که قابلیت تشخیص رنگ اجسام به صورت RGB را دارد . TCS3200 متشکل از یک آرایه فوتو دیودی 8X8 است . در این آرایه برای هر رنگ اصلی 16 فوتو دیود وجود دارد . همچنین دارای 16 دیود برای تشخیص شدت روشنایی است . می توان از طریق پین های ماژول سیگنال خروجی را روی هر کدام از این 16 دیود ها تنظیم نمود و مقدار مربوط به آن را اندازه گرفت . خروجی این ماژول به صورت یک سیگنال مربعی با دیوتی سایکل 50% است که فرکانس آن به نسبت رنگ جسم قرار گرفته در جلو ماژول تغییر می کند . می توان با استفاده از واحد کانتر میکروکنترلر تعداد پالس ها را در بازه زمانی خاصی اندازه گیری کرده و فرکانس آن را به دست آورد .

 

مشخصات :

– ولتاژ کاری 3 تا 5 ولت
– خروجی به صورت فرکانسی
– قابلیت تشخیص به صورت RGB
– دارای 16 فتودیود برای هر رنگ اصلی
– قابلیت تشخیص شدت نور
– خروجی به صورت پالس مربعی با فرکانس متغییر
– فاصله اندازه گیری 2 تا 4 سانتی متر
– دارای 4 LED سفید رنگ جهت تشخیص بهتر رنگ ها
– امکان خواندن مقدار هر رنگ به صورت جداگانه

 

 

پین های ماژول GY 31 :


با استفاده از پین های S0 و S1 می توان مقیاس فرکانس خروجی را تنظیم نمود و با استفاده از پین های S2 و S3 می توان سیگنال خروجی را برای هر کدام از رنگ ها تنظیم نمود .

 

 

راه اندازی ماژول GY-31 توسط آردوینو :

در مثال زیر رنگ جسم قرار گرفته شده در مقابل ماژول در محیط Serial terminal آردوینو IDE نمایش داده می شود . همچنین رنگ دریافت شده توسط یک LED RGB نشان داده می شود .

/* This code works with GY-31 TCS3200 TCS230 color sensor module
 * It select a photodiode set and read its value (Red Set/Blue set/Green set) and displays it on the Serial monitor
 * Refer to www.surtrtech.com for more details
 */

#define s0 8       //Module pins wiring
#define s1 9
#define s2 10
#define s3 11
#define out 12

int data=0;        //This is where we're going to stock our values

void setup() 
{
   pinMode(s0,OUTPUT);    //pin modes
   pinMode(s1,OUTPUT);
   pinMode(s2,OUTPUT);
   pinMode(s3,OUTPUT);
   pinMode(out,INPUT);

   Serial.begin(9600);   //intialize the serial monitor baud rate
   
   digitalWrite(s0,HIGH); //Putting S0/S1 on HIGH/HIGH levels means the output frequency scalling is at 100% (recommended)
   digitalWrite(s1,HIGH); //LOW/LOW is off HIGH/LOW is 20% and LOW/HIGH is  2%
   
}

void loop()                  //Every 2s we select a photodiodes set and read its data
{

   digitalWrite(s2,LOW);        //S2/S3 levels define which set of photodiodes we are using LOW/LOW is for RED LOW/HIGH is for Blue and HIGH/HIGH is for green
   digitalWrite(s3,LOW);
   Serial.print("Red value= "); 
   GetData();                   //Executing GetData function to get the value

   digitalWrite(s2,LOW);
   digitalWrite(s3,HIGH);
   Serial.print("Blue value= ");
   GetData();

   digitalWrite(s2,HIGH);
   digitalWrite(s3,HIGH);
   Serial.print("Green value= ");
   GetData();

   Serial.println();

   delay(2000);
}

void GetData(){
   data=pulseIn(out,LOW);       //here we wait until "out" go LOW, we start measuring the duration and stops when "out" is HIGH again
   Serial.print(data);          //it's a time duration measured, which is related to frequency as the sensor gives a frequency depending on the color
   Serial.print("\t");          //The higher the frequency the lower the duration
   delay(20);
}

 

شماتیک پروژه :

Tags:
About Author: USER_4