This is an old revision of the document!
Sistem embedded pentru identificarea culorilor, control vizual prin LED RGB și scanare automată cu motor pas cu pas
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ă:
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:
Fluxul general de funcționare este următorul:
Î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.
| 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. |
| 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.
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-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-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.
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.
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.
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ț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
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ă 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.
Î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.
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:
Module software utilizate sau planificate:
Logica aplicației este organizată în jurul următoarelor stări:
Până în acest moment au fost obținute următoarele rezultate:
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
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.
Această secțiune va fi completată la finalul proiectului.
Arhiva finală va conține:
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.
Am stabilit componentele principale ale sistemului: ATmega328P-XMINI, senzor TCS230, LCD 1602 I2C, LED RGB, modul microSD și buton de start.
Am definit utilitatea practică a proiectului și am realizat schema bloc inițială. Am testat LCD-ul și LED-ul RGB.
Am integrat senzorul TCS230 și am realizat citirea culorilor folosind semnalul de frecvență al senzorului. Am testat detectarea culorilor principale.
Am conectat motorul pas cu pas 28BYJ-48 prin driverul ULN2003 și am testat rotirea în ambele sensuri.
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.
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.