مشروع مُستشعر الألوان TCS3200 مع وحدة Bluetooth اكتب تعليقُا

تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث أي مشكلة لا سمح الله.

شرح فكرة المشروع

  • في هذا المشروع، سيتم استخدام مستشعر الألوان TCS3200 لكشف الألوان وعرض النتائج على نافذة Serial Monitor.
  • كما يمكن عرض هذه النتائج عن طريق تقنية البلوتوث، وذلك باستخدام هاتف Android OS.
  • عند تحميل الملف، يجب أولاً فصل وحدة البلوتوث (يمكن فقط فصل أسلاك RXD و TXD)، وعند الانتهاء من التحميل، يمكن حينئذ توصيل بقية الأسلاك بالأردوينو.
  • بعد تحميل الكود، يجب فتح نافذة Serial Monitor (اختر Tools ثم Serial Monitor).
  • أبسط طريقة لعرض النتائج من هاتفك، تكون باستخدام هذا التطبيق المتوفر في متجر Play Store:
  • https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal
  • من أجل تفعيل تطبيق البلوتوث: من الضروري إدخال كلمة المرور (إما “0000” أو “1234”).
  • ومن ثم يمكن اتباع الخطوات الموضحة في الصورة التالية:
  • الرابط

ادوات المشروع

مخطط المشروع

الكود البرمجي

تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.
  • للتعرف على تجهيز لوحة أردوينو للبرمجة قم بزيارة الرابط التالي.
  • للإطلاع على كيفية تحميل وتنصيب المكتبات قم بزيارة الرابط التالي.
  • قبل تحميل الكود البرمجي، عليك تحميل المكتبات التالية:
  • EasyColor.h
  • في حال لم يعمل هذا الكود البرمجي، قم بتحميل ملف الكود بالضغط على زر التحميل الموجود في الأسفل.

#include <EasyColor.h>

//TCS3200 pins wiring to Arduino

#define s0 4

#define s1 5

#define s2 6

#define s3 7

#define outPin 8

#define btLED 13

// Variables

int red;

int green;

int blue;

int tempr = 0;

int tempg = 0;

int tempb = 0;

int maxr = 300;

int lowr = 0;

int maxg = 360;

int lowg = 0;

int maxb = 260;

int lowb = 0;

//Make sure to install EasyColor library from Sketch -> Include Library

hsv out_hsv;

rgb in_rgb;

rgb nrgb;

EasyColor::HSVRGB HSVConverter;

void setup()

{

pinMode(s0, OUTPUT);

pinMode(s1, OUTPUT);

pinMode(s2, OUTPUT);

pinMode(s3, OUTPUT);

pinMode(outPin, INPUT); //out from sensor becomes input to arduino

pinMode(btLED, INPUT);

//setting the output frequency at 20%

digitalWrite(s0, HIGH);

digitalWrite(s1, LOW);

Serial.begin(9600);

}

void loop()

{

readRGB();

//You should use and tweak the values until you think you have a more accurate read

//Then you use the nrgb to print the values

// /*

out_hsv = HSVConverter.RGBtoHSV(in_rgb, out_hsv);

out_hsv.s = out_hsv.s +20;

if(out_hsv.s > 100){

out_hsv.s = 100;

}

nrgb= HSVConverter.HSVtoRGB(out_hsv,nrgb)

// String msg = “{‘format’:’rgb’,’r’:” + String(in_rgb.r) + “,’g’:” + String(in_rgb.g) + “,’b’:” + String(in_rgb.b) + “}!”;

String msg = “{‘format’:’rgb’,’r’:” + String(nrgb.r) + “,’g’:” + String(nrgb.g) + “,’b’:” + String(nrgb.b) +”}!”;

Serial.println(msg);

Serial.flush();

delay(300);

}

/* read RGB components */

void readRGB() {

/*

Each digitalWrite values correlate to the RGB that is followed by

Depending on the values you get from pulseIn without the

conditions and map(), you should change the ‘temp’ varialbes

and (un)comment the conditions as you need

*/

digitalWrite(s2, LOW);

digitalWrite(s3, LOW);

tempr = pulseIn(outPin, LOW);

if (tempr > maxr) {

tempr = maxr;

}/* else if(tempr < lowr){

tempr = lowr;

}*/

tempr = map(tempr, lowr, maxr, 255, 0);

digitalWrite(s2, HIGH);

digitalWrite(s3, HIGH);

tempg = pulseIn(outPin, LOW);

if (tempg > maxg) {

tempg = maxg;

}/* else if(tempg < lowg){

tempg = lowg;

}*/

tempg = map(tempg, lowg, maxg, 255, 0);

digitalWrite(s2, LOW);

digitalWrite(s3, HIGH);

tempb = pulseIn(outPin, LOW);

if (tempb > maxb) {

tempb = maxb;

}/* else if(tempb < lowb){

tempb = lowb;

}*/

tempb = map(tempb, lowb, maxb, 255, 0);

in_rgb.r = tempr;

in_rgb.g = tempg;

in_rgb.b = tempb;

}

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *