מדריך חיבור חיישן צבע TCS230/3200 ל-Arduino ו-ESP32:

במדריך זה נלמד כיצד לחבר חיישן צבע TCS230/3200 לבקר Arduino UNO ולבקר ESP32.
נראה איך החיישן מודד צבעים בעזרת אור אדום, ירוק וכחול, איך לקרוא את תדר היציאה,
ואיך להציג ערכי צבע בסיסיים ב-Serial Monitor.

מהו חיישן TCS230/3200?

TCS230/3200 הוא חיישן צבע שממיר עוצמת אור לתדר.
במקום להוציא ערך אנלוגי רגיל, החיישן מוציא בפין OUT אות דיגיטלי בתדר משתנה.
התדר משתנה לפי עוצמת האור שנקלטת דרך מסנני הצבע של החיישן.

החיישן מתאים לפרויקטים של זיהוי צבע, מיון עצמים לפי צבע, רובוטיקה,
ניסויי אופטיקה, בדיקת צבעים ומערכות לימודיות עם Arduino ו-ESP32.

איך החיישן עובד?

בתוך החיישן יש מערך פוטודיודות עם מסנני צבע שונים:
חלק מהפוטודיודות רגישות לאדום, חלק לירוק, חלק לכחול וחלק ללא מסנן צבע.

בעזרת הפינים S2 ו-S3 בוחרים איזה צבע למדוד.
לאחר מכן החיישן מוציא בפין OUT תדר שמתאים לעוצמת האור שנקלטה באותו צבע.

  • S0 ו-S1 — קובעים את קנה המידה של תדר היציאה.
  • S2 ו-S3 — בוחרים את סוג הפילטר: Red, Green, Blue או Clear.
  • OUT — יציאת תדר שאותה קורא הבקר.
  • OE — הפעלת יציאה, בדרך כלל מחברים ל-GND או משאירים לפי מבנה המודול.

כדי לזהות צבע בצורה יציבה, מודדים בנפרד את ערכי Red, Green ו-Blue,
ולאחר מכן משווים ביניהם. חשוב לבצע כיול לפי התאורה, המרחק מהאובייקט והצבעים שרוצים לזהות.

פינים במודול TCS230/3200

פיןתפקיד
VCCמתח הזנה למודול
GNDאדמה
S0בחירת קנה מידה לתדר
S1בחירת קנה מידה לתדר
S2בחירת פילטר צבע
S3בחירת פילטר צבע
OUTיציאת תדר לקריאה על ידי הבקר
OEOutput Enable, אופציונלי במודולים רבים

רכיבים נדרשים

  • חיישן צבע TCS230/3200
  • Arduino UNO או ESP32
  • Breadboard
  • חוטי Dupont
  • כבל USB
  • אובייקטים בצבעים שונים לבדיקה

חיבור TCS230/3200 ל-Arduino UNO

TCS230/3200Arduino UNO
VCC5V
GNDGND
S0D4
S1D5
S2D6
S3D7
OUTD8
OEGND או לא מחובר, לפי המודול

הסבר חיבור

ב-Arduino UNO מחברים את פיני הבקרה S0-S3 לפינים דיגיטליים,
ואת פין OUT לפין דיגיטלי שמסוגל למדוד את משך הפולס.

בדוגמה זו נשתמש ב-S0 ו-S1 כדי להגדיר קנה מידה של 20% לתדר,
וב-S2 ו-S3 כדי לבחור בכל פעם פילטר צבע אחר.

קוד Arduino בסיסי לקריאת החיישן

const int s0Pin = 4;
const int s1Pin = 5;
const int s2Pin = 6;
const int s3Pin = 7;
const int outPin = 8;

unsigned long readColorPulse(bool s2State, bool s3State) {
  digitalWrite(s2Pin, s2State);
  digitalWrite(s3Pin, s3State);

  delay(50);

  unsigned long pulseWidth = pulseIn(outPin, LOW, 100000);
  return pulseWidth;
}

void setup() {
  Serial.begin(9600);

  pinMode(s0Pin, OUTPUT);
  pinMode(s1Pin, OUTPUT);
  pinMode(s2Pin, OUTPUT);
  pinMode(s3Pin, OUTPUT);
  pinMode(outPin, INPUT);

  // Frequency scaling: 20%
  digitalWrite(s0Pin, HIGH);
  digitalWrite(s1Pin, LOW);
}

void loop() {
  unsigned long redValue = readColorPulse(LOW, LOW);
  unsigned long blueValue = readColorPulse(LOW, HIGH);
  unsigned long greenValue = readColorPulse(HIGH, HIGH);

  Serial.print("Red: ");
  Serial.print(redValue);

  Serial.print(" | Green: ");
  Serial.print(greenValue);

  Serial.print(" | Blue: ");
  Serial.println(blueValue);

  delay(500);
}

הסבר הקוד

הקוד בוחר בכל פעם פילטר צבע אחר בעזרת S2 ו-S3,
ואז קורא את משך הפולס שמתקבל בפין OUT.

הערכים שמתקבלים הם ערכים יחסיים. בדרך כלל ערך קטן יותר של pulse width יכול להצביע על תדר גבוה יותר,
ולכן על עוצמת אור גבוהה יותר באותו ערוץ צבע. כדי לזהות צבעים בפועל יש לבצע כיול עם צבעי ייחוס.

חיבור TCS230/3200 ל-ESP32

הערה חשובה לפני החיבור

ESP32 עובד ברמת לוגיקה של 3.3V. לכן בחיבור ל-ESP32 מומלץ להזין את מודול TCS230/3200 מ-3V3,
כדי שגם פיני הבקרה ויציאת OUT יעבדו ברמת מתח שמתאימה לבקר.

אם מזינים את המודול מ-5V, אין לחבר את OUT ישירות ל-ESP32 ללא התאמת רמות מתח.

TCS230/3200ESP32
VCC3V3
GNDGND
S0GPIO26
S1GPIO25
S2GPIO33
S3GPIO32
OUTGPIO27
OEGND או לא מחובר, לפי המודול

הסבר חיבור

ב-ESP32 מחברים את פיני הבקרה לפיני GPIO רגילים,
ואת OUT לפין דיגיטלי לקריאת פולסים.

החיבור המומלץ הוא להזין את המודול מ-3V3.
כך מפחיתים סיכון לפגיעה בכניסת ESP32 ומקבלים רמות לוגיקה מתאימות יותר.

קוד ESP32 בסיסי לקריאת החיישן

const int s0Pin = 26;
const int s1Pin = 25;
const int s2Pin = 33;
const int s3Pin = 32;
const int outPin = 27;

unsigned long readColorPulse(bool s2State, bool s3State) {
  digitalWrite(s2Pin, s2State);
  digitalWrite(s3Pin, s3State);

  delay(50);

  unsigned long pulseWidth = pulseIn(outPin, LOW, 100000);
  return pulseWidth;
}

void setup() {
  Serial.begin(115200);

  pinMode(s0Pin, OUTPUT);
  pinMode(s1Pin, OUTPUT);
  pinMode(s2Pin, OUTPUT);
  pinMode(s3Pin, OUTPUT);
  pinMode(outPin, INPUT);

  // Frequency scaling: 20%
  digitalWrite(s0Pin, HIGH);
  digitalWrite(s1Pin, LOW);
}

void loop() {
  unsigned long redValue = readColorPulse(LOW, LOW);
  unsigned long blueValue = readColorPulse(LOW, HIGH);
  unsigned long greenValue = readColorPulse(HIGH, HIGH);

  Serial.print("Red: ");
  Serial.print(redValue);

  Serial.print(" | Green: ");
  Serial.print(greenValue);

  Serial.print(" | Blue: ");
  Serial.println(blueValue);

  delay(500);
}

הסבר הקוד

הקוד עבור ESP32 דומה לקוד Arduino, אך משתמש בפיני GPIO של ESP32 ובמהירות Serial של 115200.
בכל מחזור הקוד קורא את שלושת ערוצי הצבע ומציג את הערכים ב-Serial Monitor.

הערכים אינם צבעים מוכנים כמו “אדום” או “כחול”.
כדי לזהות צבע בפועל יש לבצע כיול: למדוד אובייקטים בצבעים ידועים, לרשום את הערכים,
ואז להגדיר תנאים בקוד לפי הערכים שהתקבלו.

טיפים לעבודה נכונה

  • שמרו על מרחק קבוע בין החיישן לבין האובייקט.
  • בדקו צבעים באותה תאורה שבה הפרויקט יעבוד בפועל.
  • הימנעו מאור שמש ישיר או תאורה משתנה בזמן המדידה.
  • בצעו כיול לכל צבע שרוצים לזהות.
  • אם הקריאות קופצות, נסו לבצע כמה מדידות ולחשב ממוצע.

פרויקט לדוגמה

מכונת מיון צבעים עם TCS3200 ושני Servo Motors

בפרויקט זה משתמשים בחיישן TCS3200 יחד עם Arduino ושני Servo Motors כדי לבנות מכונת מיון צבעים.
החיישן מזהה את צבע האובייקט, והמערכת משתמשת במנועי סרוו כדי להעביר את האובייקט למסלול המתאים.
זהו פרויקט מתאים ללמידה על זיהוי צבע, כיול חיישנים, בקרה מכנית ומיון אוטומטי.

מעבר לפרויקט לדוגמה

סיכום

חיישן TCS230/3200 הוא מודול שימושי לזיהוי צבעים בפרויקטים עם Arduino ו-ESP32.
החיישן מאפשר למדוד בנפרד את רכיבי Red, Green ו-Blue,
ולהשתמש בהם לזיהוי צבעים, מיון עצמים ורובוטיקה.

כדי לקבל תוצאות יציבות חשוב לבצע כיול, לשמור על תאורה קבועה,
ולבדוק את הערכים בפועל עם הצבעים שבהם משתמשים בפרויקט.

קישור חזרה למוצר

דילוג לתוכן