This is an old revision of the document!
Scopul principal al proiectului este de a automatiza complet procesul de colectare selectivă la nivel de consumator.
Ideea a plecat de la o problemă reală de zi cu zi: confuzia și comoditatea oamenilor atunci când vine vorba de reciclare.
Cred că acest produs este util pentru că oferă o soluție modernă și ecologică pentru case inteligente, birouri și chiar spații publice.
1. Module Hardware
Alimentare: Sursa 12V DC și modulul Buck Converter LM2596 asigură tensiunile necesare pentru logică (5V) și putere brută pentru motoare.
Procesare: Microcontrolerul ATmega328P este creierul care coordonează tot sistemul.
Senzori (Intrări): Modulul de greutate (HX711) detectează plasarea obiectului. Senzorul inductiv, rețeaua de umiditate și bariera IR colectează date despre proprietățile materialului.
Actuatori (Ieșiri): Servomotorul 1 (Pusher) și Servomotorul 2 (Jgheab) execută acțiunea mecanică de sortare.
2. Module Software
Codul rulat pe microcontroler este format din: bucla de așteptare (declanșată de cântar), algoritmul de achiziție a datelor (care citește senzorii într-o anumită ordine), arborele decizional (care decide tipul de deșeu) și generatorul de semnale PWM (care mișcă motoarele).
3. Interacțiunea (Cum funcționează)
Sistemul stă în așteptare până când senzorul de greutate detectează un obiect. În acel moment, ATmega328P citește starea senzorilor (Inductiv, Umiditate, IR) și folosește logica software pentru a determina categoria deșeului. Microcontrolerul trimite comenzi către Servomotorul 2 pentru a alinia jgheabul cu pubela corectă, iar apoi activează Servomotorul 1 pentru a împinge obiectul de pe trapă. La final, motoarele revin la poziția zero, iar ciclul se reia.
| Componentă | Cantitate | Tip / Model | Rol în proiect |
|---|---|---|---|
| Celulă de sarcină | 1 | Senzor greutate 3kg | Detectează prezența obiectului pe trapă și inițiază ciclul de scanare. |
| Modul HX711 | 1 | Convertor A/D 24-biți | Amplifică semnalul de greutate pentru a putea fi citit de microcontroler. |
| Senzor inductiv de proximitate | 1 | LJ12A3-4-Z | Detectează prezența obiectelor din metal (doze, conserve). |
| LED emițător IR | 1 | 5mm, 940nm | Formează sursa de lumină infraroșie pentru bariera optică. |
| LED receptor IR | 1 | Fototranzistor 5mm, analogic | Măsoară cantitatea de lumină ce trece prin obiect (detecție sticlă/transparență). |
| Servomotor | 2 | MG996R (Metal Gear) | Execută acțiunea mecanică: măturarea trapei (Pusher) și rotirea jgheabului. |
| Bandă adezivă de cupru | 1 rolă | Lățime 10mm | Formează grilajul conductiv pentru senzorul DIY de umiditate (deșeu organic). |
| Condensatori | 2 | Electrolitici (ex: 470µF / 50V) | Protejează placa de resetări, preluând șocurile de curent la pornirea servomotoarelor. |
| Microcontroler | 1 | ATmega328PB / 328P | Unitatea centrală de procesare care rulează codul, citește senzorii și comandă motoarele. |
| Modul alimentare | 1 | Buck Converter LM2596 | Coboară și stabilizează tensiunea de la 12V la 5V pentru logica plăcii și motoare. |
Fiecare pin a fost ales strategic pe baza funcțiilor hardware specifice ale microcontrolerului, pentru a asigura o citire rapidă a senzorilor și un control fin al actuatoarelor.
| Componentă | Pin ATmega328P | Tip Semnal | Justificare Tehnică |
|---|---|---|---|
| Modul HX711 (DT) | PD2 | Digital In (INT0) | Folosește întreruperea hardware (INT0) pentru a detecta instantaneu schimbarea greutății, optimizând codul. |
| Modul HX711 (SCK) | PD3 | Digital Out | Generează semnalul de ceas (clock) pentru sincronizarea citirii datelor de la cântar. |
| Senzor Inductiv | PD4 | Digital In | Citește semnalul binar de prezență metal (0/1), adaptat la 5V prin divizorul de tensiune. |
| Servo 1 (Pusher) | PB1 | PWM (16-bit) | Legat la Timer-ul 1 (OC1A) pe 16 biți, pentru un control PWM mult mai precis și fin al unghiului. |
| Servo 2 (Jgheab) | PB2 | PWM (16-bit) | Legat la Timer-ul 1 (OC1B) pe 16 biți, pentru a preveni tremurul brațului sub greutatea sticlelor. |
| Emițător IR (LED) | PD7 | Digital Out | Control on/off din cod pentru citire diferențială (eliminarea erorilor date de lumina ambientală). |
| Receptor IR (Foto) | PC1 | Analog In (ADC1) | Măsoară exact câtă lumină trece prin obiect, stabilind un prag clar între plastic transparent și metal opac. |
| Senzor Ploaie DIY | PC0 | Analog In (ADC0) | Citește rezistența lichidului. Convertorul ADC permite citirea “gradului de umezeală”, nu doar o valoare binară. |
Proiectul folosește un sistem cu două tensiuni (12V și 5V) pentru a separa partea de forță/detecție de partea logică, protejând astfel microcontrolerul de perturbații și supracurenți.
Notă de Siguranță Hardware: Deoarece senzorul inductiv funcționează la 12V, semnalul său de ieșire este trecut obligatoriu printr-un divizor de tensiune rezistiv (15kΩ / 10kΩ) înainte de a intra în pinul PD4. Astfel, tensiunea este coborâtă la un nivel logic sigur de 4.8V, prevenind distrugerea pinului.
Proiectul se află în faza de achiziție și procesare primară a datelor. Momentan, s-a implementat logica de bază pentru interogarea secvențială a senzorilor, controlată manual printr-un buton (pe pinul PD5). Funcționează complet partea de citire digitală a senzorului inductiv (detectare metalelor) și citirea analogică a senzorului de umiditate (detectare resturi biodegradabile).
===== Biblioteci ======
Singurele headere folosite sunt cele standard din arhitectura AVR: <avr/io.h> pentru accesarea regiștrilor și <util/delay.h> pentru temporizări hardware. Această abordare garantează un control total asupra funcțiilor de nivel scăzut ale microcontrolerului, reduce masiv dimensiunea binarului compilat.
Noutatile sunt atat din categoria hardware cat si din cea software. In partea de hardware am reusit sa fizex burlanul prin care o sa cada gunoiul in ghenele respective si in mare parte toate modulele au fost puse in pozitia finala. La partea de software am facut achizitia de date pentru senzorul de metale si pentru senzorul de umiditate DIY.
Proiectul meu se bazează pe concepte învățate în primele 5 laboratoare, deoarece fiecare componentă are nevoie de un mod diferit de a comunica cu microcontrolerul:
Laboratorul 0: GPIO Îl folosesc pentru componentele care trimit sau primesc semnale simple de tip “1 sau 0”. Concret, prin GPIO citesc butonul de Start și senzorul de metal, și tot așa voi aprinde LED-ul Infraroșu.
Laboratorul 1: UART Folosesc UART ca să trimit datele măsurate de senzori direct pe ecranul laptopului, așa pot verifica dacă totul merge bine.
Laboratorul 2: Întreruperi Acestea sunt rezervate pentru cântar (modulul HX711). Folosind o întrerupere, cântarul trimite un semnal (întrerupe codul) doar în momentul în care un obiect a căzut pe trapă.
Laboratorul 3: Timere și PWM Semnalul PWM, generat cu ajutorul Timerelor, este cel care îmi permite să controlez cu mare precizie unghiul la care se rotesc brațele de sortare și viteza lor de mișcare.
Laboratorul 4: ADC Este esențial pentru senzorul de umiditate și cel de lumină (Receptorul IR). Acești senzori trimit tensiuni variabile. ADC-ul transformă aceste tensiuni în numere (de la 0 la 1023), ca să pot ști exact “cât de ud” este obiectul sau câtă lumină trece prin el.
1. Scheletul Proiectului Proiectul are o arhitectură secvențială, semi-automată. Scheletul logic este următorul:
Starea de repaus: Sistemul nu face nimic până când utilizatorul pune un obiect pe trapa de plexiglas și apasă butonul de Start.
Achiziția de date: Imediat după apăsarea butonului, microcontrolerul face un “tur” al tuturor senzorilor, într-o ordine strictă:
Verifică senzorul inductiv (este metal sau nu?).
Verifică senzorul de umiditate (este obiectul murdar/ud sau uscat?).
Verifică bariera IR (trece lumina prin el, adică e plastic/sticlă?).
Verifică senzorul de greutate (cântărește obiectul).
Decizia și Execuția: Microcontrolerul adună toate aceste 4 informații și le trece printr-un set de reguli (ex: dacă e ud, îl aruncă la biodegradabil; dacă e curat și e metal, îl aruncă în alta publema). La final, comandă servomotoarele să direcționeze obiectul în coșul potrivit.
2. Interacțiunea dintre funcționalități Toate modulele din laboratoare interacționează ca un lanț de comandă:
Intrarea: Totul pornește de la pinul digital (GPIO) al butonului. Când acesta este apăsat, deblochează restul codului.
Procesarea: Mai departe, funcționalitățile GPIO și ADC lucrează împreună. Senzorii digitali (metal) dau răspunsuri scurte de “Da/Nu”, în timp ce ADC-ul (umiditate și lumină) dă valori exacte (0-1023) pentru a înțelege exact starea obiectului. Toate aceste date sunt combinate în algoritmul principal.
Ieșirea: Rezultatul deciziei finale interacționează direct cu Timerele microcontrolerului, generând semnalul PWM necesar pentru a roti mecanic servomotoarele.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.