מדריך חיבור חיישן פס אנלוגי ודיגיטלי TCRT5000 ל-Arduino ו-ESP32:

במדריך זה נלמד כיצד לחבר מודול חיישן TCRT5000 לבקר Arduino UNO ולבקר ESP32.
נראה איך החיישן מזהה הבדל בין משטחים כהים ובהירים,
איך לקרוא את היציאה האנלוגית AO ואת היציאה הדיגיטלית DO,
ואיך להשתמש בו בפרויקטים של רובוט עוקב קו.

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

מהו חיישן TCRT5000?

TCRT5000 הוא חיישן אופטי מחזיר הכולל משדר אינפרא-אדום ופוטוטרנזיסטור.
המשדר שולח אור אל המשטח,
והפוטוטרנזיסטור מודד את כמות האור שחוזרת אל החיישן.

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

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

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

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

  • משטח בהיר — בדרך כלל החזרת IR חזקה יותר.
  • משטח כהה — בדרך כלל החזרת IR חלשה יותר.
  • AO — מאפשר לקרוא את השינוי היחסי באות.
  • DO — מאפשר לקבל מצב HIGH / LOW לפי סף שנקבע.

על מודול הבקרה נמצא פוטנציומטר.
בעזרתו ניתן לכוון את נקודת המעבר של היציאה הדיגיטלית.

חשוב לדעת שהקוטביות של AO ו-DO יכולה להיות שונה בין גרסאות שונות של המודול.
לכן לפני שכותבים תנאי קבוע בקוד,
מומלץ לבדוק את הערכים מעל משטח לבן ומעל משטח שחור.

פינים במודול TCRT5000

פיןתפקיד
VCCמתח הזנה למודול
GNDאדמה
AOיציאה אנלוגית לפי עוצמת האור המוחזר
DOיציאה דיגיטלית לפי הסף שנקבע בפוטנציומטר

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

  • מודול חיישן TCRT5000 עם יציאות AO ו-DO
  • Arduino UNO או ESP32
  • Breadboard
  • חוטי Dupont
  • כבל USB
  • משטח לבן עם קו שחור לבדיקה

חיבור TCRT5000 ל-Arduino UNO

TCRT5000Arduino UNO
VCC5V
GNDGND
AOA0
DOD2

הסבר חיבור

ב-Arduino UNO מחברים את AO לכניסה האנלוגית A0
ואת DO לפין הדיגיטלי D2.

כך ניתן לבדוק בו-זמנית את הערך האנלוגי
ואת מצב היציאה הדיגיטלית של המודול.

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

קוד Arduino בסיסי לקריאת AO ו-DO

const int analogPin = A0;
const int digitalPin = 2;

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

  pinMode(digitalPin, INPUT);

  Serial.println("TCRT5000 sensor ready");
}

void loop() {
  int analogValue = analogRead(analogPin);
  int digitalValue = digitalRead(digitalPin);

  Serial.print("Analog: ");
  Serial.print(analogValue);

  Serial.print(" | Digital: ");
  Serial.println(digitalValue);

  delay(300);
}

הסבר הקוד

הקוד קורא את שתי היציאות של המודול.
הערך האנלוגי מתקבל מ-A0,
והמצב הדיגיטלי מתקבל מ-D2.

כעת יש להעביר את החיישן בין משטח בהיר לבין קו שחור
ולרשום את הערכים שמתקבלים.

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

כיול היציאה האנלוגית

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

מומלץ לבצע שתי מדידות:

  • להחזיק את החיישן מעל הרקע הבהיר ולרשום את הערך.
  • להחזיק את החיישן מעל הקו השחור ולרשום את הערך.

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

550

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

קוד Arduino לזיהוי משטח לפי AO

const int sensorPin = A0;

const int threshold = 550;

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

void loop() {
  int sensorValue = analogRead(sensorPin);

  Serial.print("Sensor value: ");
  Serial.print(sensorValue);

  if (sensorValue < threshold) {
    Serial.println(" | Surface A");
  } else {
    Serial.println(" | Surface B");
  }

  delay(200);
}

הסבר הקוד

הקוד משווה את הערך האנלוגי לסף שנקבע לאחר הכיול.

בדוגמה השתמשנו בשמות Surface A ו-Surface B
ולא קבענו מראש מי מהם שחור ומי לבן.
לאחר בדיקת החיישן בפועל ניתן להחליף את השמות ל-Black ו-White.

שימוש ב-AO מאפשר לשנות את הסף בתוכנה,
לבצע ממוצע של מספר קריאות ולהתמודד טוב יותר עם רעש.

שימוש ביציאה הדיגיטלית DO

אם רוצים רק מצב פשוט של קו / אין קו,
ניתן להשתמש ביציאה הדיגיטלית DO.

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

לאחר הכיוון ניתן לקרוא את DO בעזרת digitalRead
ולהשתמש בתוצאה ישירות בתוכנית.

קוד Arduino לקריאה דיגיטלית

const int sensorPin = 2;

void setup() {
  Serial.begin(9600);
  pinMode(sensorPin, INPUT);
}

void loop() {
  int sensorState = digitalRead(sensorPin);

  Serial.print("Digital state: ");
  Serial.println(sensorState);

  delay(200);
}

הסבר הקוד

הקוד מציג את המצב הדיגיטלי של המודול.
בזמן הבדיקה יש להעביר את החיישן בין שחור ללבן
ולבדוק איזה מצב מתקבל בכל משטח.

לאחר מכן ניתן להשתמש ב-HIGH או LOW
כתנאי לזיהוי הקו בהתאם למודול בפועל.

חיבור TCRT5000 ל-ESP32

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

ESP32 עובד ברמת לוגיקה של 3.3V.
לכן בחיבור ל-ESP32 מומלץ להזין את המודול מ-3V3.

כך היציאה האנלוגית והיציאה הדיגיטלית נשארות
בתחום שמתאים לכניסות ESP32.

אין להזין את המודול מ-5V ולחבר את AO ישירות לכניסת ADC של ESP32
ללא בדיקת רמת המתח.

TCRT5000ESP32
VCC3V3
GNDGND
AOGPIO34
DOGPIO27

הסבר חיבור

ב-ESP32 מחברים את AO לפין ADC כמו GPIO34
ואת DO לפין דיגיטלי רגיל כמו GPIO27.

GPIO34 הוא פין קלט בלבד,
ולכן הוא מתאים לקריאת האות האנלוגי מהחיישן.

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

קוד ESP32 בסיסי לקריאת AO ו-DO

const int analogPin = 34;
const int digitalPin = 27;

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

  pinMode(digitalPin, INPUT);

  analogReadResolution(12);

  Serial.println("TCRT5000 sensor ready");
}

void loop() {
  int analogValue = analogRead(analogPin);
  int digitalValue = digitalRead(digitalPin);

  Serial.print("Analog: ");
  Serial.print(analogValue);

  Serial.print(" | Digital: ");
  Serial.println(digitalValue);

  delay(300);
}

הסבר הקוד

הקוד קורא את AO דרך GPIO34
ואת DO דרך GPIO27.

ב-ESP32 הערך האנלוגי יכול להגיע בדרך כלל עד 4095
כאשר משתמשים ברזולוציה של 12-bit.

יש למדוד מחדש את הערכים מעל הקו והרקע
ולבחור סף שמתאים לחיישן ולגובה ההתקנה.

בחירת מרחק נכון מהמשטח

TCRT5000 מיועד לעבודה מטווח קצר מאוד.
המרחק המיטבי של החיישן עצמו הוא בסביבות 2.5 מילימטר.

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

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

אם החיישן גבוה מדי,
ההחזר יהיה חלש וההבדל בין המשטחים יקטן.

אם החיישן קרוב מדי,
גם אז ייתכן שהקריאה לא תהיה מיטבית.

שימוש ברובוט עוקב קו

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

ברובוט עוקב קו משתמשים בדרך כלל בשני חיישנים או יותר.

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

שימוש ביציאות האנלוגיות מאפשר לבנות שליטה הדרגתית יותר
במקום החלטה פשוטה של HIGH או LOW.

שיפור יציבות הקריאה

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

const int sensorPin = A0;
const int sampleCount = 10;

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

void loop() {
  long sum = 0;

  for (int i = 0; i < sampleCount; i++) {
    sum += analogRead(sensorPin);
    delay(2);
  }

  int averageValue = sum / sampleCount;

  Serial.print("Average value: ");
  Serial.println(averageValue);

  delay(100);
}

הסבר הקוד

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

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

שגיאות נפוצות

אם אין הבדל ברור בין שחור ללבן,
יש לבדוק קודם את גובה החיישן מהמשטח.

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

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

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

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

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

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

רובוט עוקב קו עם TCRT5000 וזיהוי מכשולים

בפרויקט זה בונים רובוט עוקב קו בעזרת Arduino UNO
ומודול חיישן TCRT5000.

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

בנוסף, הרובוט כולל חיישן מרחק HC-SR04.
כאשר מזוהה מכשול לפני הרובוט,
המערכת מסוגלת לעצור במקום להמשיך בנסיעה.

מעבר לחיישן TCRT5000 עצמו,
הפרויקט כולל גם Arduino UNO,
שלדת 2WD, מנועים, דרייבר L298N וחיישן אולטרסוניק.
לכן הוא מתאים ללמידה על חיישני פס,
בקרת מנועים וזיהוי מכשולים במערכת אחת.

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

סיכום

מודול TCRT5000 הוא חיישן אופטי שימושי לזיהוי קו ומשטחים
בפרויקטים עם Arduino ו-ESP32.

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

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

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

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

דילוג לתוכן