Banda de ambalare

Autor

Introducere

Productivitatea și eficiența sunt două trăsături necesare pentru orice sistem din zilele noastre. Lumea în care trăim este dominată de procese automatizate, care preiau taskurile și le asignează sistemelor automate, executând mai rapid și, de multe ori, mai bine respectivele cerințe.

Pornind de la această idee, proiectul pe care l-am ales constă într-un aparat ce automatizează procesul de ambalare a unor produse, realizând simultan și sortarea acestora.

Proiectului se axează pe înțelegerea în amănunt a modului de funcționare al plăcii Arduino și modul în care diferite componente interacționează cu aceasta. Aparatul va sorta obiectele de pe bandă în funcție de culoare și le va grupa în grămezi cu caracteristici comune, semnalând un mesaj de eroare la apariția reboot-urilor (obiectelor cu caracteristici neconforme), eliminand reboot-urile ulterior din banda de ambalare.

Descriere generală

Proiectarea și realizarea benzii de ambalare se concentrează pe elementele centrale ale procesulului de sortare ale obiectelor:

  • Mișcarea obiectelor în diversele puncte ale procesului a fost realizată cu ajutorul a două Servomotoare. Cele două servomotoare acționează două platane suspendate de-a lungul aceluiași ax. Servomotorul care acționează platanul superior va mișca obiectul către punctul de detectare a culorii și punctul de sortare, iar servomotorul care acționeaza planatanul inferior se va ocupa de sortarea efectivă a obiectelor, aducând în punctul de sortare colecția de obiecte corespunzătoare. Tranziția obiectului din platanul superior în platanul inferior se va realiza cu ajutorul unei guri de tranziție în platanul superior.
  • Recunoșterea culorii se va realiza cu ajutorul Senzorului de culoare TCS3200. Acesta va fi configurat pentru identificarea culorilor RED, BLUE, GREEN, YELLOW. Toate obiectele care nu aparțin mulțimilor enumerate anterior vor fi considerate reboot-uri și vor fi eliminate.
  • Feedback-ul către utilizator va fi realizat prin două componente: Banda adresabilă LED își va schimba culoarea în funcție de culoarea identificată de senzor. Buzzerul activ va notifica utilizatorul de apariția unui reboot printr-un mesaj de eroare sonor.

Schema bloc



Hardware Design

Lista de componente

Schema electrică

Software Design

La baza implementării programului dezvoltat pentru banda de ambalare se află idea unui automat de stări finit. Astfel, am proiectat 6 stări diferite prin care un obiect trece până să ajungă în colecția corespunzătoare. Tranziția dintr-o stare în alta se face la intervale egale de timp.

Pentru a realiza acest lucru, am folosit TIMER 2. La intervale egale de timp, prin intermediul intreruperii TIMER2_COMPA, se realizează tranziția dintr-o stare în alta. Am folosit TIMER2, întrucât TIMER0 este folosit pentru banda adresabilă LED, iar TIMER1 este necesar miscării servomotoarelor. Întrucât timpul necesar estimat trecerii dintr-o stare în alta este de aproximativ 4 secunde, obținând o frecvență mult prea mică pentru TIMER2, a trebuit sa folosesc o variabilă volatile timer_count, care va fi incrementată la nivelul întreruperii și care va face posibilă obținerii unei frecvențe mai mici pentru TIMER2.

Starea curentă în care ne aflăm va fi reținută în variabila globală state. Cele 6 stări configurate, în ordine secvențială sunt:

  1. START_STATE: stare de inițializare, servomotoarelor sunt aduse pe pozițiile lor de START.
  2. POSITION_TO_SENSOR_STATE: stare în care servomotorul ce controlozeaza platanul superior aduce obiectul din poziția de start în locul unde se va realiza scanarea culorii obiectului.
  3. SENSOR_STATE: stare în care se realizeaza scanarea culorii obiectului și se determină culoarea. Banda LED se va colora corespunzător culorii identificate, dacă obiectul este conform. Dacă obiectul este neconform, un semnal sonor de eroare va semnala apariția unui rebut, ce va fi aruncat în recipientul pentru rebuturi.
  4. POSITION_COLOR_PACK_STATE: stare în care servomotorul aferent platanului inferior poziționeaza colecția de obiecte corespunzătoare culorii identificate sub gura de evacuare a obiectului din nivelul superior în nivelul inferior.
  5. POSITION_OBJECT_FINAL_STATE: stare în care servomotorul aferent platanului superior aduce obiectul în gura de tranziție între cele doua niveluri.
  6. FINAL_STATE: obiectul ajunge în mulțimea aferentă culorii identificate; platanele se retrag spre poziția inițială.



Funcții implementate

  • setUpTimer - inițializează TIMER2 în modul CTC, cu prescaler de 1024, activând totodată întreruperea TIMER2_COMPA.
  • setUpSensor - setează pinii utilizați de senzorul de culoare TCS3200 corespunzător, setând în același timp scalarea frecvenței la 20% (valoarea recomandată pentru ARDUINO).
  • setup - inițializează toate componentele ce vor fi utilizate de banda de ambalare. Funcția configurează buzzerul, configurează servomotoarele, inițializează banda LED adresabilă, inițializează senzorul de culoare TCS3200 si TIMER2.
  • colorLedStrip - comandă banda LED să se coloreze într-o culoare dată. Banda LED va aprinde fiecare LED pe rând, dând impresia de curgere.
  • colorLedStripWithRecognisedColor - colorează banda LED în funcție de culoarea recunoscută de senzorul de culoare.
  • readRedFrequency, readGreenFrequency, readBlueFrequency - comandă senzorul să citească și intoarce valorile frecvenței celor trei componente de culoare (roșu, verde, albastru).
  • readColor - realizeasa scanarea culorii cu ajutorul senzorului de culoare TCS3200 (apelând readRedFrequency, readGreenFrequency, readBlueFrequency) și recunoaște culoarea corespunzătoare. Pentru a determina corect culoarea, cele 3 valori ale frecvenței componentelor sunt comparate cu niște valori etalon. Pentru a determina valorile etalon corespunzătoare senzorului meu a trebuit să urmez un proces de configurare și ajustare, în care am realizat 50 de citiri pentru fiecare culoare în parte și le-am transmis pe Interfața serială USART către Serial Monitor prezent în Arduino IDE, salvându-le în fișiere de referință. Prin prelucrarea datelor din aceste fișiere, am determinat valorile etalon specifice senzorului meu.
  • buzzer_beep - comandă buzzerul pentru a da semnalul de eroare sonor
  • rotateFirstServoMotor, rotateSecondServoMotor - comandă mișcarea continuă și cursivă a servomotorului specific din poziția inițială, în poziția finală.
  • loop - funcția principală a programului, în care, în funcție de starea în care ne aflăm, executăm acțiunile corespunzătoare.


OBS! Pentru controlul servomtoarelor am folosit biblioteca Servo.h, iar pentru a comanda banda LED adresabilă am folosit biblioteca FastLED.h Pentru dezvoltare, am folosit doar Arduino IDE.

Rezultate obținute

Concluzii

Proiectul la PM a adus cu sine, fără doar și poate, atât provocări, cât și o imensă satisfacție. A fost interesant să văd cum diferitele soluții mecanice pe care le găseam erau imposibil de realizat fizic, datorită limitărilor componentelor utilizate (de exemplu, rotirea servomotoarelor doar la 180 grade, neavând posibilitatea de a face o rotație completă). Astfel, am înțeles cu adevărat noțiunea de compromis, și am învățat să abordez cât mai creativ problemele care apar. Mai mult, datorită numărului mare si divers de componente utilizate, am înțeles mai în profunzime toate noțiunile parcurse la laboratorul de PM, fiind extrem de încântată de lucrul cu componente reale, față de simulările cu care lucrasem până atunci.

Bibliografie/Resurse

pm/prj2021/amocanu/bandaasamblare.txt · Last modified: 2021/06/21 15:30 by andreea.nica1602
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