KY-033 TCRT5000 Tracking Module (Line Tracking) – principiu de funcționare și conectare la ESP32
KY-033 este un modul de „line tracking” bazat pe senzorul reflectiv TCRT5000, folosit frecvent la roboți care urmăresc o linie (bandă neagră pe fundal alb sau invers). Modulul detectează diferențe de reflectanță: o suprafață deschisă reflectă mai mult IR, una închisă reflectă mai puțin. Pe majoritatea variantelor KY-033 vei găsi și un comparator (de obicei LM393) și un potențiometru pentru reglarea pragului, astfel încât ieșirea să fie un semnal digital stabil.
În acest articol: ce conține KY-033, cum funcționează optic + electric, ce ieșiri există (D0/A0), conectarea sigură la ESP32, exemple de cod (Arduino core pentru ESP32) și pași clari de calibrare.
1) Ce este TCRT5000 și ce face modulul KY-033
TCRT5000 este un senzor reflectiv IR: are un LED infraroșu (emite) și un fototranzistor (recepționează) poziționate astfel încât fototranzistorul „vede” lumina IR reflectată de obiectul aflat în față. Cu cât reflectă mai mult suprafața, cu atât fototranzistorul conduce mai mult.
Modulul KY-033 ambalează acest senzor într-un format ușor de folosit pentru microcontrolere și, în multe variante, include:
- Comparator LM393 – transformă semnalul analog al fototranzistorului într-un nivel logic (0/1).
- Potențiometru – setează pragul (sensibilitatea) la care ieșirea digitală comută.
- LED-uri pe placă (POWER/OUT) – utile la calibrare.
- Header 3 pini (sau uneori 4 pini) pentru conexiuni rapide.
2) Cum funcționează (optic + electric)
2.1 Partea optică: reflectanța suprafeței
LED-ul IR emite lumină (invizibilă). O suprafață:
- deschisă / albă / lucioasă reflectă mult → fototranzistorul primește mai mult IR → semnal „mai mare”;
- închisă / neagră / mată absoarbe mai mult → fototranzistorul primește mai puțin IR → semnal „mai mic”.
În aplicația clasică de „line follower”, modulele sunt montate la câțiva milimetri de sol (tipic în plaja 1–8 mm, în funcție de placă și suprafață) pentru a obține contrast bun și comutare stabilă.
2.2 Partea electrică: analog vs digital
Fototranzistorul produce un semnal analog (curent/tensiune proporțional cu lumina recepționată). KY-033 îl poate oferi în două moduri (în funcție de varianta modulului):
- DO / OUT (Digital Output): comparatorul (LM393) compară semnalul cu un prag setat de potențiometru și scoate 0/1.
- AO (Analog Output) (doar pe unele variante): scoate semnalul analog (util dacă vrei „cât de mult” reflectă, nu doar „da/nu”).
Observație importantă: multe plăci comercializate ca „KY-033” au doar 3 pini (VCC, GND, OUT) și nu expun AO.
3) Pinout și variante de module
3.1 Varianta cu 3 pini (cea mai comună folosita si de mine)
| Pin | Semnificație | Note practice |
|---|---|---|
| VCC | Alimentare | Recomandat 3.3V pentru ESP32. |
| GND | Masă | Masă comună cu ESP32. |
| OUT / DO | Ieșire digitală | 0/1 în funcție de prag și reflectanță; poate fi activ-low sau activ-high în funcție de modul/ajustare. |
3.2 Varianta cu 4 pini (uneori întâlnită)
Unele module similare TCRT5000 expun și AO:
| Pin | Semnificație |
|---|---|
| VCC | Alimentare |
| GND | Masă |
| DO | Ieșire digitală (comparator) |
| AO | Ieșire analogică (fototranzistor) |
3.3 Atenție la ordinea pinilor
Ordinea pinilor poate diferi între producători. Chiar dacă multe plăci au OUT pe pinul din mijloc, nu e garantat. Verifică serigrafia (VCC/GND/OUT) înainte de alimentare.
4) Conectarea la ESP32 (recomandat și sigur)
4.1 De ce e recomandat VCC = 3.3V
ESP32 nu este tolerant la 5V pe GPIO. Dacă alimentezi modulul la 5V, ieșirea DO (și mai ales AO) poate ajunge la niveluri periculoase pentru ESP32. Cea mai simplă și robustă regulă: alimentează KY-033 la 3.3V.
4.2 Conexiuni (varianta 3 pini)
| KY-033 | ESP32 | Recomandări |
|---|---|---|
| VCC | 3V3 | Alimentare stabilă; fire scurte. |
| GND | GND | Masă comună obligatorie. |
| OUT (DO) | GPIO 27 (exemplu) | Orice GPIO de intrare; evită pini „sensibili la boot” dacă ai probleme la pornire. |

4.3 Dacă ai și AO (analog)
Conectează AO la un pin ADC din ADC1 (recomandat pentru compatibilitate cu Wi-Fi). Exemple ADC1: GPIO 32–39 (în funcție de placă). Exemplu:
- AO → GPIO 34 (ADC1_CH6) sau GPIO 32/33 etc.
Notă: pe ESP32, pinii ADC1 (GPIO 32–39) sunt de preferat deoarece ADC2 poate fi indisponibil când Wi-Fi este activ. De asemenea, GPIO34–GPIO39 sunt doar intrare (perfect pentru AO), dar pe unele plăci nu au pull-up intern.
5) Calibrare: obții comutare stabilă (pas cu pas)
- Montează senzorul la 2–6 mm de suprafață (începe cu ~3–4 mm).
- Pornește alimentarea; LED-ul POWER trebuie să fie aprins (dacă există).
- Pune senzorul deasupra alb, apoi deasupra negru (linia).
- Rotește potențiometrul lent până când LED-ul OUT (sau starea DO) comută clar între cele două suprafețe.
- Repetă la distanța reală de montaj (distanța influențează semnificativ pragul).
În practică, calibrezi astfel încât senzorul să nu „clipească” instabil când trece peste marginea liniei sau când lumina ambientală se schimbă.
6) Exemplu 1: citire DO (digital) pe ESP32 – Arduino IDE
Acesta este scenariul tipic pentru „line follower”: DO îți spune dacă ești pe linie sau pe fundal (în funcție de prag și de orientare). Folosește acest sketch ca test inițial.
#include <Arduino.h>
// KY-033 (DO) conectat la un GPIO de intrare
static const int PIN_DO = 14;
void setup() {
Serial.begin(115200);
delay(200);
// Dacă DO este open-collector și nu există pull-up pe placă,
// poți activa pull-up intern (nu funcționează pe toate GPIO-urile).
pinMode(PIN_DO, INPUT_PULLUP);
Serial.println("KY-033 DO test (ESP32).");
}
void loop() {
int v = digitalRead(PIN_DO);
// Interpretarea 0/1 depinde de modul și de reglaj.
// Tipic: 0 = detectează (linie) sau invers. Verifică practic.
Serial.print("DO = ");
Serial.println(v);
delay(100);
}
Cum interpretezi: pune senzorul pe alb și pe negru și vezi cum se schimbă DO. Dacă observi invers față de ce te aștepți, nu e o problemă: ajustezi pragul sau inversezi logica în cod.
7) Exemplu 2: citire AO (analog) pe ESP32 – dacă modulul are AO
Citirea analogică îți permite să vezi „nivelul de reflectanță” și să faci software-threshold sau control mai fin.
#include <Arduino.h>
static const int PIN_AO = 34; // ADC1 pin (input only)
static const int PIN_DO = 27; // optional, dacă ai și DO
void setup() {
Serial.begin(115200);
delay(200);
pinMode(PIN_DO, INPUT_PULLUP);
// ESP32 ADC: opțional setezi rezoluția (default 12-bit = 0..4095)
analogReadResolution(12);
Serial.println("KY-033 AO/DO test (ESP32).");
}
void loop() {
int ao = analogRead(PIN_AO); // 0..4095 (aprox)
int d = digitalRead(PIN_DO);
Serial.print("AO=");
Serial.print(ao);
Serial.print(" DO=");
Serial.println(d);
delay(100);
}
Tip: fă un mic tabel cu AO pe alb și pe negru. Apoi setează un prag software, de exemplu (alb + negru) / 2, dacă vrei să nu depinzi de potențiometru.
8) Exemplu 3: logică simplă de line tracking (2 senzori)
Pentru un robot, tipic folosești 2 senzori (stânga/dreapta) și ajustezi motoarele în funcție de combinațiile DO.
#include <Arduino.h>
static const int S_LEFT = 26;
static const int S_RIGHT = 27;
// Aici ar veni pinii de motor driver (ex: L298N / TB6612).
// Pentru exemplu, doar afișăm decizia.
void setup() {
Serial.begin(115200);
delay(200);
pinMode(S_LEFT, INPUT_PULLUP);
pinMode(S_RIGHT, INPUT_PULLUP);
}
void loop() {
int L = digitalRead(S_LEFT);
int R = digitalRead(S_RIGHT);
// IMPORTANT: stabilește întâi sensul corect (0=linie sau 1=linie).
// Presupunem aici: 0 = detectează linia (negru), 1 = fundal (alb).
bool onLineL = (L == 0);
bool onLineR = (R == 0);
if (onLineL && onLineR) {
Serial.println("Mergi inainte (ambele pe linie).");
} else if (onLineL && !onLineR) {
Serial.println("Corectie spre stanga (stanga pe linie).");
} else if (!onLineL && onLineR) {
Serial.println("Corectie spre dreapta (dreapta pe linie).");
} else {
Serial.println("Linie pierduta (ambele pe fundal) - cauta linia.");
}
delay(50);
}
9) Probleme frecvente și soluții
- DO clipește instabil: distanța față de suprafață e prea mare/variabilă; luminează soarele direct; pragul e setat la limită. Ajustează potențiometrul și coboară senzorul.
- Nu comută deloc: verifică VCC/GND, verifică orientarea (senzorul trebuie să „vadă” suprafața), testează pe alb/negru cu contrast puternic.
- Pe ESP32 nu citești corect la AO: folosește ADC1, nu ADC2 când Wi-Fi e activ; alimentează la 3.3V; păstrează firele scurte.
- ESP32 pornește greu / boot issues: mută DO pe alt GPIO; unele GPIO-uri au rol la boot pe anumite plăci.
10) Concluzie
KY-033 (TCRT5000) este unul dintre cele mai simple și ieftine module pentru detecția de linie. Pentru integrare fără surprize cu ESP32: alimentează la 3.3V, calibrează pragul cu potențiometrul (sau folosește AO dacă există), și testează întâi DO în Serial Monitor înainte să treci la controlul motoarelor.
Bonus
Susține acest blog
Cumpărând de pe https://mag.automatic-house.ro/ro/ susții blogul meu, iar 10% din vânzări vor fi direcționate către Fundația Dăruiește Viață. Îți mulțumesc!
Mulțumesc pentru atenție!
Pentru întrebări și/sau consultanță tehnică vă stau la dispoziție pe blog mai jos în secțiunea de comentarii sau pe email simedruflorin@automatic-house.ro.
O zi plăcută tuturor !