این ماژول بر پایه چیپ 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); }
شماتیک پروژه :