This is an old revision of the document!


ColorTrack - Sistem embedded de detecție și scanare a culorilor

Sistem embedded pentru identificarea culorilor, control vizual prin LED RGB și scanare automată cu motor pas cu pas

Autor: Greere Stefan
Grupa: 334CA

Introducere

ColorTrack este un sistem embedded bazat pe microcontrollerul ATmega328P, proiectat pentru detecția și căutarea automată a culorilor. Proiectul pornește de la un scenariu practic de control al calității, în care culoarea unui obiect, a unei etichete sau a unei mostre trebuie verificată rapid și consecvent.

Sistemul poate funcționa în două moduri. Primul mod permite detectarea punctuală a culorii unui obiect plasat în fața senzorului. Rezultatul este afișat pe LCD, transmis prin interfața serială și semnalizat printr-un LED RGB. În acest mod, LED-ul RGB nu indică doar una dintre culorile principale, ci folosește PWM software pentru a aproxima nuanța detectată de senzor.

Al doilea mod permite căutarea automată a unei culori țintă. Utilizatorul selectează culoarea dorită prin interfața serială, iar sistemul rotește o platformă cu ajutorul unui motor pas cu pas. La fiecare pas, senzorul verifică culoarea detectată. Când culoarea țintă este găsită, motorul se oprește, rezultatul este afișat pe LCD, LED-ul RGB se aprinde corespunzător, iar platforma este rotită înapoi în poziția inițială.

Scopul proiectului este realizarea unui sistem capabil să:

  • detecteze culoarea dominantă a unui obiect folosind senzorul TCS230;
  • afișeze starea sistemului și rezultatele pe un LCD 1602 cu interfață I2C;
  • aproximeze nuanța detectată prin LED RGB controlat cu PWM software;
  • permită alegerea modului de funcționare prin USART;
  • controleze un motor pas cu pas prin driver ULN2003;
  • caute automat o culoare țintă pe o platformă rotativă;
  • folosească întreruperea externă INT0 pentru pornirea detecției sau scanării;
  • păstreze modulul microSD conectat pentru o posibilă extensie de jurnalizare.

Descriere generală

ColorTrack funcționează ca un sistem de inspecție și scanare a culorilor. Utilizatorul interacționează cu sistemul prin interfața serială, alegând unul dintre cele două moduri de funcționare.

Modul 1 - Detecție simplă

În acest mod, utilizatorul trimite comanda `1` prin USART. Sistemul intră în modul de detecție simplă și aprinde LED-ul RGB în alb, indicând faptul că așteaptă o comandă de start. Detecția propriu-zisă se face doar după apăsarea butonului. După citirea senzorului TCS230, microcontrollerul determină culoarea dominantă, afișează rezultatul pe LCD și controlează LED-ul RGB prin PWM software pentru a aproxima nuanța detectată.

Modul 2 - Căutare culoare

În acest mod, utilizatorul trimite comanda `2` prin USART, apoi alege culoarea țintă folosind una dintre comenzile `R`, `G` sau `B`. După apăsarea butonului, motorul pas cu pas rotește platforma în pași succesivi. La fiecare interval de pași, senzorul TCS230 citește culoarea curentă. Dacă este detectată culoarea țintă, motorul se oprește, rezultatul este afișat pe LCD, LED-ul RGB indică vizual culoarea găsită, iar motorul revine în poziția inițială.

Modulele principale ale sistemului sunt:

  • microcontrollerul ATmega328P - coordonează întregul sistem;
  • senzorul TCS230 - detectează culoarea obiectului;
  • LCD-ul 1602 I2C - afișează starea sistemului și rezultatul;
  • LED-ul RGB - oferă feedback vizual și aproximare de nuanță prin PWM software;
  • butonul de start - declanșează detecția sau scanarea, folosind întreruperea externă INT0;
  • driverul ULN2003 - controlează motorul pas cu pas;
  • motorul pas cu pas 28BYJ-48 - rotește platforma de scanare;
  • interfața USART - permite alegerea modului de funcționare și a culorii țintă;
  • modulul microSD - conectat hardware prin SPI, păstrat pentru o extensie ulterioară de jurnalizare.

Fluxul general de funcționare este următorul:

  1. sistemul este alimentat și inițializează modulele hardware;
  2. LCD-ul afișează meniul principal;
  3. utilizatorul selectează modul de funcționare prin USART;
  4. în modul 1, utilizatorul apasă butonul, iar sistemul face o detecție simplă;
  5. în modul 2, utilizatorul alege culoarea țintă, apoi apasă butonul pentru pornirea scanării;
  6. motorul rotește platforma și sistemul citește periodic senzorul;
  7. dacă este găsită culoarea dorită, motorul se oprește;
  8. LED-ul RGB și LCD-ul afișează rezultatul;
  9. motorul revine în poziția inițială.

Hardware Design

Stadiul actual al implementării hardware

În stadiul actual, au fost conectate și testate principalele componente hardware ale proiectului. LCD-ul 1602 cu interfață I2C afișează mesaje de stare, senzorul TCS230 este folosit pentru citirea componentelor de culoare, LED-ul RGB oferă feedback vizual, iar motorul pas cu pas este controlat prin driverul ULN2003.

Sistemul permite selectarea modului de funcționare prin USART. Butonul conectat pe pinul INT0 este folosit pentru declanșarea detecției sau a scanării. În modul de scanare, motorul rotește platforma până la găsirea culorii țintă sau până la parcurgerea limitei de rotație. Pentru protejarea machetei, după scanare motorul revine în poziția inițială prin rotirea inversă cu același număr de pași.

Modulul microSD este păstrat conectat la pinii SPI ai microcontrollerului, însă funcția de scriere pe card nu este inclusă în varianta curentă stabilă a proiectului. Acesta rămâne o extensie posibilă pentru jurnalizarea detecțiilor.

Componente folosite

Componentă Cantitate Scop
ATmega328P-XMINI 1 Placa de dezvoltare folosită ca unitate centrală a proiectului.
Senzor de culoare TCS230 1 Detectează culoarea obiectului prin semnal digital cu frecvență dependentă de lumină.
LCD 1602 I2C 1 Afișează meniul, modul curent, culoarea detectată și starea scanării.
LED RGB catod comun 1 Oferă feedback vizual; în modul 1 este controlat prin PWM software.
Rezistențe 220Ω 3 Limitează curentul prin canalele LED-ului RGB.
Buton 1 Declanșează detecția sau scanarea folosind întreruperea externă INT0.
Driver ULN2003 1 Permite controlul motorului pas cu pas din pini digitali ai microcontrollerului.
Motor pas cu pas 28BYJ-48 1 Rotește platforma de scanare în modul de căutare culoare.
Modul microSD 1 Modul conectat prin SPI, păstrat pentru extensie de jurnalizare.
Card microSD 1 Suport de stocare planificat pentru salvarea viitoare a detecțiilor.
Breadboard / fire jumper - Realizează conexiunile dintre placa de dezvoltare și module.
Sursă de alimentare 5V 1 Alimentează placa și modulele conectate.

Conectarea pinilor

Componentă Pin componentă Pin ATmega328P-XMINI Pin microcontroller Rol
LCD 1602 I2C SDA A4 PC4 Linie de date I2C/TWI
LCD 1602 I2C SCL A5 PC5 Linie de ceas I2C/TWI
LCD 1602 I2C VCC 5V - Alimentare
LCD 1602 I2C GND GND - Masă comună
TCS230 S0 5V - Scalare frecvență fixată hardware
TCS230 S1 GND - Scalare frecvență fixată hardware
TCS230 S2 A0 PC0 Selectare filtru culoare
TCS230 S3 A1 PC1 Selectare filtru culoare
TCS230 OUT D8 PB0 Semnal digital de ieșire de la senzor
TCS230 VCC 5V - Alimentare
TCS230 GND GND - Masă comună
LED RGB R D6 PD6 Control canal roșu prin rezistență 220Ω
LED RGB G D5 PD5 Control canal verde prin rezistență 220Ω
LED RGB B D3 PD3 Control canal albastru prin rezistență 220Ω
LED RGB Catod comun GND - Masă comună
Buton start pin 1 D2 PD2 / INT0 Declanșare prin întrerupere externă
Buton start pin 2 GND - Apăsare = nivel logic LOW
ULN2003 IN1 A2 PC2 Control fază motor
ULN2003 IN2 A3 PC3 Control fază motor
ULN2003 IN3 D9 PB1 Control fază motor
ULN2003 IN4 D4 PD4 Control fază motor
ULN2003 VCC 5V - Alimentare driver/motor
ULN2003 GND GND - Masă comună
USART RX D0 PD0 Recepție comenzi din terminal
USART TX D1 PD1 Transmitere mesaje către terminal
microSD CS D10 PB2 Selectare dispozitiv SPI
microSD MOSI D11 PB3 Linie SPI Master Out Slave In
microSD MISO D12 PB4 Linie SPI Master In Slave Out
microSD SCK D13 PB5 Ceas SPI
microSD VCC 5V - Alimentare modul microSD
microSD GND GND - Masă comună

Pinii A4 și A5 au fost aleși pentru LCD deoarece aceștia corespund interfeței hardware I2C/TWI a microcontrollerului. Pinii D10-D13 au fost rezervați pentru modulul microSD, deoarece aceștia corespund interfeței SPI hardware.

Butonul a fost conectat la D2 deoarece acest pin poate fi folosit ca întrerupere externă INT0. Astfel, apăsarea butonului poate declanșa rapid o acțiune, fără a fi necesară verificarea continuă a stării butonului în bucla principală.

Motorul pas cu pas este controlat prin patru pini digitali conectați la intrările IN1-IN4 ale driverului ULN2003. Driverul este necesar deoarece pinii microcontrollerului nu pot furniza direct curentul necesar pentru alimentarea bobinelor motorului.

Pinii S0 și S1 ai senzorului TCS230 au fost fixați hardware la 5V, respectiv GND. Această configurație setează scalarea frecvenței de ieșire la aproximativ 20%, valoare potrivită pentru măsurarea cu microcontrollerul. Pinii S2 și S3 rămân controlați software pentru selectarea filtrului de culoare.

Senzor de culoare TCS230

Senzorul TCS230 este folosit pentru determinarea culorii dominante. Acesta nu transmite direct valori RGB în intervalul 0-255, ci generează un semnal digital pe pinul OUT. Frecvența acestui semnal depinde de intensitatea luminii detectate prin filtrul selectat.

Pinii S2 și S3 sunt folosiți pentru selectarea filtrului roșu, verde sau albastru. Microcontrollerul selectează pe rând fiecare filtru și măsoară semnalul de ieșire folosind Timer1. Valorile obținute sunt valori brute de timp/frecvență, nu valori RGB standard. În cod, o valoare mai mică indică o frecvență mai mare, deci o componentă de culoare mai intensă.

LCD 1602 I2C/TWI

LCD-ul este folosit pentru afișarea meniului, a modului curent și a rezultatelor. Utilizarea interfeței I2C reduce numărul de pini necesari, fiind folosite doar liniile SDA și SCL.

Exemple de mesaje afișate:

ColorTrack
USART: 1 sau 2
Mod 1: detectie
Apasa buton
ALBASTRU gasit
Pas: 2048

LED RGB și PWM software

LED-ul RGB este folosit pentru feedback vizual. În modul de detecție simplă, valorile brute citite de la senzor sunt transformate într-o aproximare de intensitate pentru fiecare canal RGB. Controlul LED-ului se face prin PWM software, folosind o întrerupere periodică generată cu Timer2.

Această metodă nu reproduce perfect culoarea obiectului, deoarece senzorul nu oferă valori RGB calibrate, însă permite afișarea unei nuanțe aproximative și face rezultatul mai intuitiv pentru utilizator.

În modul de căutare, LED-ul rămâne aprins în alb cât timp sistemul scanează. După găsirea culorii țintă, LED-ul se aprinde în culoarea corespunzătoare.

Buton de start

Butonul este folosit pentru declanșarea acțiunii curente. După alegerea modului prin USART, utilizatorul apasă butonul pentru a începe detecția sau scanarea.

Butonul este conectat la pinul D2/PD2, care are funcția INT0. În cod este activat pull-up-ul intern, deci butonul conectează pinul la GND în momentul apăsării.

Driver ULN2003 și motor pas cu pas

Motorul pas cu pas 28BYJ-48 este controlat prin driverul ULN2003. Microcontrollerul comandă intrările IN1-IN4 ale driverului, iar acesta alimentează bobinele motorului.

Motorul este folosit în modul de căutare culoare. Sistemul rotește platforma în pași succesivi, citește culoarea cu senzorul TCS230 și se oprește când detectează culoarea țintă. Pentru a proteja macheta și pentru a evita înfășurarea firelor, după scanare motorul se rotește înapoi cu același număr de pași parcurși.

Modul microSD

Modulul microSD este conectat la interfața SPI hardware a microcontrollerului. În varianta curentă stabilă, cardul nu este folosit pentru salvare de date, dar a fost păstrat conectat pentru o extensie ulterioară a proiectului.

Funcția planificată pentru acest modul este salvarea detecțiilor într-un fișier de tip CSV, care ar putea conține timpul detecției, culoarea detectată și valorile brute citite de la senzor.

Interfață USART

Interfața USART este folosită pentru alegerea modului de funcționare și pentru afișarea mesajelor de debugging. Utilizatorul poate trimite următoarele comenzi:

1 - Modul detectie simpla
2 - Modul cautare culoare
M - Afisare meniu

În modul 2, după trimiterea comenzii `2`, utilizatorul trimite culoarea țintă:

R - rosu
G - verde
B - albastru

Alimentare

Sistemul este alimentat la 5V prin placa de dezvoltare. Toate modulele au masă comună. Driverul ULN2003 și motorul pas cu pas pot consuma mai mult curent decât celelalte module, motiv pentru care alimentarea trebuie verificată în timpul funcționării. Dacă apar resetări ale plăcii, motorul poate fi alimentat dintr-o sursă separată de 5V, cu condiția ca GND-ul sursei externe să fie comun cu GND-ul plăcii.

Schema electrică

Schema electrică a fost realizată în EasyEDA. Aceasta prezintă conexiunile dintre placa ATmega328P-XMINI și modulele externe folosite: senzorul TCS230, LCD-ul I2C, LED-ul RGB, butonul de start, driverul ULN2003 cu motor pas cu pas și modulul microSD.

Schema electrică a proiectului ColorTrack

În schemă, modulele externe sunt reprezentate ca blocuri cu pini, deoarece acestea sunt module prefabricate. Scopul schemei este evidențierea conexiunilor dintre placa de dezvoltare și componentele folosite.

Software Design

Această secțiune va fi completată în detaliu în etapa dedicată implementării software.

În stadiul actual, firmware-ul permite testarea integrată a componentelor principale: LCD, senzor de culoare, LED RGB cu PWM software, buton cu întrerupere externă, USART și motor pas cu pas.

Mediul de dezvoltare folosit:

  • PlatformIO;
  • avr-gcc;
  • avr-libc.

Module software utilizate sau planificate:

  • modul pentru inițializarea și controlul pinilor GPIO;
  • modul pentru citirea senzorului TCS230;
  • modul pentru afișarea mesajelor pe LCD prin I2C/TWI;
  • modul pentru controlul LED-ului RGB prin PWM software;
  • modul pentru controlul motorului pas cu pas prin driver ULN2003;
  • modul pentru pornirea acțiunilor folosind întreruperea externă INT0;
  • modul pentru comunicarea cu utilizatorul prin USART;
  • modul pentru comunicația SPI cu cardul microSD, planificat pentru extindere ulterioară.

Logica aplicației este organizată în jurul următoarelor stări:

  • meniu principal;
  • selectare mod prin USART;
  • așteptare apăsare buton;
  • detecție simplă;
  • alegere culoare țintă;
  • scanare cu motor;
  • afișare rezultat;
  • revenire la poziția inițială.

Rezultate Obţinute

Până în acest moment au fost obținute următoarele rezultate:

  • LCD-ul 1602 I2C a fost testat cu succes și afișează mesaje de stare;
  • LED-ul RGB funcționează și poate fi controlat prin PWM software;
  • senzorul TCS230 este integrat în procesul de detecție a culorii;
  • butonul de start declanșează acțiunea curentă folosind întreruperea externă INT0;
  • interfața USART permite alegerea modului de funcționare;
  • motorul pas cu pas 28BYJ-48 este controlat prin driverul ULN2003;
  • sistemul poate funcționa în modul de detecție simplă;
  • sistemul poate funcționa în modul de scanare și se oprește când găsește culoarea țintă;
  • după scanare, motorul revine în poziția inițială;
  • modulul microSD este conectat fizic, dar funcția de jurnalizare este păstrată ca extensie ulterioară.

Exemplu de mesaj afișat pe LCD în meniul principal:

ColorTrack
USART: 1 sau 2

Exemplu pentru modul 1:

Mod 1: detectie
Apasa buton

Exemplu pentru modul 2:

Mod 2: cautare
Tinta: R/G/B

Exemplu de rezultat la detectarea culorii țintă:

ALBASTRU gasit
Pas: 2048

Concluzii

ColorTrack propune un sistem embedded pentru detecția și scanarea automată a culorilor. Proiectul are o utilitate practică în zona de control al calității la scară redusă, unde culoarea unui obiect poate fi un criteriu de validare, sortare sau identificare.

În stadiul actual, proiectul integrează citirea unui senzor de culoare, afișarea rezultatului pe LCD, feedback prin LED RGB, selectarea modului prin USART, pornirea prin buton cu întrerupere externă și controlul unui motor pas cu pas. Prin adăugarea motorului, sistemul nu mai este doar un detector static de culoare, ci poate scana o platformă până la identificarea culorii dorite.

Un element suplimentar al proiectului este controlul LED-ului RGB prin PWM software, care permite aproximarea vizuală a nuanței detectate în modul de detecție simplă.

Modulul microSD a fost păstrat în schema hardware pentru extinderea ulterioară a proiectului cu funcție de jurnalizare, însă funcționalitatea stabilă curentă este detecția, scanarea și afișarea rezultatelor.

Download

Această secțiune va fi completată la finalul proiectului.

Arhiva finală va conține:

  • codul sursă al proiectului;
  • schema electrică;
  • schema bloc;
  • poze cu montajul;
  • fișier README;
  • eventual fișiere auxiliare pentru testare.

Jurnal

Săptămâna 1

Am ales tema proiectului și am stabilit direcția generală: un sistem de verificare a culorilor pentru aplicații simple de control al calității.

Săptămâna 2

Am stabilit componentele principale ale sistemului: ATmega328P-XMINI, senzor TCS230, LCD 1602 I2C, LED RGB, modul microSD și buton de start.

Săptămâna 3

Am definit utilitatea practică a proiectului și am realizat schema bloc inițială. Am testat LCD-ul și LED-ul RGB.

Săptămâna 4

Am integrat senzorul TCS230 și am realizat citirea culorilor folosind semnalul de frecvență al senzorului. Am testat detectarea culorilor principale.

Săptămâna 5

Am conectat motorul pas cu pas 28BYJ-48 prin driverul ULN2003 și am testat rotirea în ambele sensuri.

Săptămâna 6

Am modificat proiectul pentru a avea două moduri de funcționare selectabile prin USART: detecție simplă și scanare automată. Am adăugat revenirea motorului în poziția inițială după scanare.

Săptămâna 7

Am adăugat PWM software pentru controlul LED-ului RGB, astfel încât în modul de detecție simplă LED-ul să aproximeze nuanța detectată de senzor.

Bibliografie/Resurse

Resurse Hardware

  • Datasheet ATmega328P;
  • Datasheet TCS230 Color Sensor;
  • Documentație LCD 1602 cu interfață I2C;
  • Documentație driver ULN2003;
  • Documentație motor pas cu pas 28BYJ-48;
  • Documentație modul microSD;
  • Documentație protocol SPI;
  • Documentație protocol I2C/TWI;
  • Documentație USART pentru microcontrollere AVR.

Resurse Software

  • Documentație avr-gcc;
  • Documentație avr-libc;
  • Documentație PlatformIO;
  • Exemple pentru comunicație I2C/TWI pe AVR;
  • Exemple pentru comunicație USART pe AVR;
  • Exemple pentru controlul motoarelor pas cu pas;
  • Exemple pentru implementarea PWM software pe microcontrollere AVR.

Export to PDF

pm/prj2026/vlad.radulescu2901/ioan_stefan.greere.1778937948.txt.gz · Last modified: 2026/05/16 16:25 by ioan_stefan.greere
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0