در این بخش از سری آموزش های آردوینو سعی شده، نحوه تشخیص رنگ توسط سنسورهای TCS3200 ،TCS230 با یرد آردوینو را شرح دهیم. شما می توانید برای یادگیری بیشتر و آشنایی با نحوه عملکرد این قطعات مطالب زیر را مطالعه نمائید.
سنسور تشخیص رنگ TCS230
سنسور تشخیص رنگ مدل TCS230، مجموعه ای از فتودیودهای سیلیکونی قابل تنظیم با یک مبدل جریان به فرکانس که در یک مدار مجتمع به شکل یک ماژول یکپارچه به وجود آمده، ساخته شده است. این سنسور دارای پین های ورودی و خروجی دیجیتال می باشد که امکان اتصال به برد آردوینو را بسیار راحت کرده است همچنین خروجی سنسور تشخیص رنگ TCS230 به صورت یک موج مربعی که فرکانس آن متناسب با شدت نور تنظیم می شود، است.
اگر نگاهی دقیق به ساختمان سنسور بیندازید متوجه نحوه شناسایی رنگ از طریق آن خواهید شد. این سنسور دارای سه نوع فتودیود مختلف قرمز، سبز و آبی است. همچنین این فتودیودها فیلترهای مختلفی برای شناسایی مقدار دقیق رنگ را دارند. به طوری که 16 فیلتر برای تشخیص رنگ قرمز، 16 فیلتر برای رنگ سبز، 16 فیلتر برای رنگ آبی و 16 عدد فتودیود بدون فیلتر که قادر است رنگ سفید را تشخیص دهد.
هر 16 فتودیود به صورت موازی وصل می شوند و ما می توانیم با استفاده از پین های کنترل S2 و S3 انتخاب کنیم که کدام یک از آنها خوانده شود. برای مثال؛ اگر بخواهیم رنگ قرمز را شناسایی کنیم با استفاده از 16 فتودیود فیلتر شده با رنگ قرمز و دو پین کنترل (طبق جدول زیر) این کار را انجام می دهیم.
این مدل از سنسور دارای دو پین کنترل S0 و S1 برای تعیین مقیاس فرکانس خروجی می باشد که این مقیاس به سه مقدار از پیش تعیین شده 2% ، 20% و یا 100% تقسیم بندی شده است.
لیست قطعات مورد نیاز
ماژول آردوینو مدل MEGA2560-R3 | 1 عدد |
ماژول و سنسور تشخیص رنگ TCS230 | 1 عدد |
برد بورد (پروجکت برد) مدل GL | 1 عدد |
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی) | 1 عدد |
نقشه شماتیک پروژه
در این بخش از پروژه، سنسور تشخیص رنگ TCS230 را به آردوینو متصل کنیم. برای این کار می توانید از نقشه شماتیک مربوط به این پروژه که در زیر آمده است استفاده کنید.
برنامه نویسی سنسور تشخیص رنگ TCS230
1. تعریف توابع
در ابتدای کار ما نیاز داریم تا پین های مورد استفاده سنسور و متغیرهای فرکانس را تعریف کنیم. برای این کار باید چهار عدد از پین های کنترل را به عنوان خروجی، خروجی سنسور و ورودی آردوینو در نظر بگیریم، همچنین مقیاس فرکانس را نیز باید تعیین کنیم. برای مثال ما ابتدا مقیاس فرکانس را بر روی 20% تعیین کرده و شروع به مانیتورینگ می کنیم تا بتوانیم نتایج حاصل از آن را بررسی و تحلیل نمائیم.
در این بخش ما در نظر داریم که فتودیودهای فیلتر قرمز خوانده شوند، برای این منظور ابتدا دو پین S2 و S3 را در کمترین سطح خود قرار می دهیم، سپس با استفاده از عملگر (تابع) “() PulseIn” مقدار فرکانس خروجی را خوانده (تعیین کرده) و آن را به عنوان متغییر فرکانس در نظر می گیریم. همچنین از طریق عملگر (تابع) ” ()Serial.print ” می توانیم نتایج حاصل از برنامه نویسی را مانیتورینگ کنیم. در صورتی که بخواهیم از دو رنگ استفاده کنیم برای این کار کافی است که پین های کنترل مورد نظر را با نوع رنگ دلخواه تنظیم کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
/* Arduino Color Sensing Tutorial */ #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 int frequency = 0; void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // Setting frequency-scaling to 20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); } void loop() { // Setting red filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,LOW); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Green filtered photodiodes to be read digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("G= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Blue filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(100); } |
2. مانیتورینگ پروژه
بعد از انجام مراحل فوق اگر شروع به مانیتورینگ کنیم، قطعا خروجی خواهیم گرفت که این خروجی بستگی به مقیاس تعیین شده و نور اطراف محیط کار ما دارد.
همانطور که از داده فتودیودهای مختلف دیده می شود، مقادیر با توجه به حساسیت های موجود برای هر فتودیود متغییر است. با این فرض، وقتی رنگ های مختلف را در مقابل سنسور می گیریم، واکنش آن در مقابل هر کدام متفاوت خواهد بود. به عنوان مثال اگر رنگ قرمز را در مقابل سنسور قرار دهیم، دو پین S2 و S3 در کمترین سطح خود قرار می گیرند.
به طور کلی، سنسور تشخیص رنگ TCS230، رنگ اجسامی که در مقابل خود مشاهده می کند را تحلیل نموده و فرکانس هر یک از آنها را به صورت عددی در محدوده 0 تا 255 مشخص می کند، برای نمایش دادن رنگ به این صورت از عملگر (تابع) “()map” استفاده می کنیم.
1 2 |
//Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,70,255,0); |
3. برنامه نویسی کامل پروژه در نرم افزار آردوینو
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
/* Arduino Color Sensing Tutorial */ #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 int frequency = 0; void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // Setting frequency-scaling to 20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); } void loop() { // Setting red filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,LOW); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,72,255,0); // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Green filtered photodiodes to be read digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 30,90,255,0); // Printing the value on the serial monitor Serial.print("G= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Blue filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,70,255,0); // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(100); } |
واقعا اگر در هر خط از آمورشهای برنامه نویسی توضیحات وجود داشته باشه که هر خط رو کارشو در برنامه توضیح بده بهترین حالت آموزشه.
لطفا به لرنامه ها توضیخات اضاقه کنید.
تشکر
سلام. ببخشید من می خوام اگه رنگ قرمز از یه حدی بیشتر شد LED روشن بشه. چه کدی رو باید اضافه کنم؟؟ با تشکر
سلام دوست عزیز
ابتدا سه متغیر از جنس int تعریف کنید و سپس به ترتیب مقادیر بدست آمده از متغیر frequency را در خطوط 27 و 37 و 47 برنامه در متغیرهایی که ساخته اید ذخیره کنید، حال می توانید با برسی اعداد بدست آمده و تعریف یک دستور شرطی، برای رنگ مورد نظر خود یک شرط اعمال کنید.
سلام.برای اینکه کاری کنیم که این سنسور رنگ های دیگه مثلا زرد رو تشخیص بده باید چه کدی اضافه کنیم؟؟ ممنون
سلام دوست عزیز
این سنسور توانایی تشخیص طیف وسیعی از رنگ ها را با تشخیص سه رنگ اصلی قرمز، سبز و آبی دارد. برای درک بیشتر می توانید عبارت “رنگ RGB” را در گوگل جستجو کنید.
سلام. ببخشید ایا ماژول ماژول LCM230 برای تشخیص رنگ خوب است ؟؟ با تشکر
و ایا ماژول GY-31 هم خوب است؟ با تشکر
و خیلی خیلی ببخشید چجوری باید سنسور تشخیص رنگ TCS34725 رو راه بندازیم و اینکه شما این سنسور رو پیشنهاد می کنید؟ با تشکر
سلام دوست عزیز
برای اینکه بفهمید کدام سنسور مناسب کار و پروژه شما است باید دیتاشیت هر کدام از سنسورها را از اینترنت دانلود کنید و سپس مشخصات فنی آنرا با یکدیگر مقایسه کنید.
لینک دانلود نیست
سلام دوست عزیز
این پروژه فاقد لینک دانلود است، چراکه تمامی موارد مورد نیاز جهت ساخت پروژه همچون نقشه شماتیک و برنامه نمونه در توضیحات پروژه درج گردیده است.