Rezumat în limba engleză [302379]

Rezumat în limba engleză

Planificarea activității

Stadiul actual

Automatizarea poate fi definită ca fiind tehnologia prin care se realizează un proces sau o procedură fără asistență umană. [anonimizat], [anonimizat], [anonimizat], aplicații și vehicule cu intervenție umană minimă sau redusă. Unele procese au fost complet automatizate.

Aceasta a [anonimizat], hidraulice, pneumatice, electrice, [anonimizat]. [anonimizat], [anonimizat]. [anonimizat], de costuri materiale și îmbunătățiri ale calității și preciziei.

Automatizarea industrială încorporează controlere logice programabile în procesul de fabricație. Controlerele logice programabile (PLC) utilizează un sistem de procesare care permite variația comenzilor intrărilor și ieșirilor utilizând programarea simplă. PLC-[anonimizat], secvențierea, sincronizarea, contorizarea etc. [anonimizat] o varietate de intrări și oferă o [anonimizat], supape etc. PLC-urile sunt similare cu computerele. [anonimizat], PLC-urile sunt optimizate pentru sarcini de control și utilizare în medii industriale. [anonimizat], umidității și zgomotului. [anonimizat]. [anonimizat] o gamă de sisteme de control diferite. [1]

Fig. 1.1 Sortator de culori

Sortarea produselor într-o [anonimizat]. Modelarea continuă manuală creează probleme legate de coerența calității. [anonimizat] o mașină, există o posibilitate mai mică de greșeală prin reducerea sau chiar îndepărtarea totală a intervenției umane. [anonimizat], aducând beneficii considerabile companiilor.

Sortatoarele de culori ([anonimizat]) sunt mașini care sunt utilizate pe liniile de producție în procesarea alimentelor în vrac și în alte industrii. [anonimizat] a devia elementele ale căror culori nu se încadrează în intervalul acceptabil sau care se dorește să formeze un grup separat de restul.

Industria cerealelor (produse agricole)

Sortatoarele de culori sunt utilizate mai ales la sortarea cerealelor (produse agricole). Industria de sortare a orezului este prima mare piață. Tehnologia de sortare a orezului este în funcție de diferențele de culoare ale materialelor de orez (cu căpșun cu coajă), folosind un senzor optic CCD de înaltă rezoluție pentru a separa pietre, orez negru, etc. Este ultimul pas după lustruirea orezului cu un lustruitor de orez. A doua piață de sortare este folosită pentru cereale grosiere, precum grâu, porumb, arahide, diferite tipuri de fasole, semințe de susan, etc. Mașinile de sortare îmbunătățesc calitatea produselor și adaugă beneficii sociale.

Fig. 1.2 Sortator de cereale

Industria alimentară

Sortatoarele de culori sunt utilizate pentru industria alimentară, pentru cafea, nuci și culturi de ulei. Scopul este separarea articolelor care sunt decolorate, toxice, nu atât de coapte pe cât este necesar, cum ar fi semințele de floarea soarelui. În comparație cu sortarea manuală, mașinile economisesc forță de muncă și timp, au o eficiență mai mare și au costuri mai mici de procesare. Randamentele au crescut odată cu utilizarea noilor tehnologii CCD și funcționează acum până la 100 t / h.

Fig. 1.3 Sortator alimente – alune

Industria diamantelor și a mineritului

De asemenea, sortatoarele sunt utilizate în industria diamantelor. Transparența diamantului este măsurată de sortatorul de culori și utilizată ca măsurătoare a purității sale. Acest lucru are un avantaj față de metodele de fluorescență cu raze X de detectare robotică a purității, deoarece diamantele mai pure sunt mai puțin susceptibile să fie florescente.

Fig. 1.4 Proces sortare în industria minereurilor

Sortatoarele optice de culori (camera color CCD) combină tehnologia de sortare a razelor X și NIR (aproape de spectrometria infraroșu) pentru a alege impuritățile minereului, mineralelor, produselor din piatră și nisip sau pentru a separa minereul în două sau mai multe categorii. [2]

Separarea bazată pe diferite moduri cum ar fi greutatea, culoarea, tipul de cod de bare necesită separarea obiectelor. Astfel, prin prezentul proiect de diplomă am propus o metodă eficientă care utilizează senzorul de culoare pentru identificarea culorii a fiecărui obiect în parte în mod automat, controlat de controlerul Arduino Uno, afișând rezultatele procesului de separare pe un LCD. Acest lucru este mult mai eficient și optim în prelucrarea obiectelor din industrie, economisind timp și crescând producția considerabil prin înlocuirea procesului manual cu unul automatizat.

Fundamentare teoretică

Arduino Uno

Arduino UNO este o placă bazată pe microcontrolerul Microchip ATmega328P și dezvoltat de Arduino.cc. Placa este echipată cu seturi de pini digitali și analogici de intrare / ieșire (I / O) care poate fi interfațată cu diferite plăci de expansiune (schields) și alte circuite.

Fig. 2. 1 Placă Arduino Uno

Placa are 14 pini digitali, 6 pini analogici și poate fi programată cu IDE Arduino (Integrated Development Environment) prin intermediul unui cablu USB de tip B. Poate fi alimentată de un cablu USB sau de o baterie externă de 9 volți, deși acceptă tensiuni între 7 și 20 de volți. "Uno" înseamnă unul în italiană și a fost ales pentru a marca lansarea lui Arduino Software (IDE) 1.0. Placa Uno și versiunea 1.0 a lui Arduino Software (IDE) au fost versiunile de referință ale Arduino, care au evoluat acum la versiuni mai noi.

Placa Uno este prima dintr-o serie de plăci USB Arduino și modelul de referință pentru platforma Arduino. ATmega328 pe Arduino Uno vine preprogramat cu un bootloader care permite încărcarea unui nou cod fără a utiliza un programator hardware extern. Acesta comunică folosind protocolul STK500 original. De asemenea, Uno diferă de toate plăcile precedente prin faptul că nu utilizează chip-ul FTDI USB-to-serial. În schimb, utilizează Atmega16U2 (Atmega8U2 până la versiunea R2) programată ca un convertor USB-to-serial. [3]

Specificații tehnice:

Microcontroller: ATmega328p;

USB Chip: CH340G;

Operating Voltage: 5V;

Input Voltage (recomandat): 7-9V;

Input Voltage (limite absolute): 6-12V;

Digital I/O Pins: 14 (of which 6 provide PWM output);

Analog Input Pins: 6;

DC Current per I/O Pin: 40 mA;

DC Current for 3.3V Pin: 50 mA;

Flash Memory: 32 KB (ATmega328);

SRAM: 2 KB (ATmega328);

EEPROM: 1 KB (ATmega328);

Clock Speed: 16 MHz. [4]

Arduino este un microcontroler open source, care poate fi ușor programat, șters și reprogramat în orice moment. Introdusă în 2005, platforma Arduino a fost concepută pentru a oferi un mod ieftin și ușor pentru pasionați, studenți și profesioniști să creeze dispozitive care să interacționeze cu mediul lor folosind senzori și actuatori. Bazat pe plăci simple de microcontroler, este o platformă de calcul open source care este utilizată pentru construirea și programarea dispozitivelor electronice. Este, de asemenea, capabil să acționeze ca un mini computer la fel ca și alte microcontrolere, controlând ieșirile pentru o varietate de dispozitive electronice.

De asemenea, este capabil să primească și să trimită informații prin internet cu ajutorul diferitelor shield-uri Arduino. Arduino utilizează un hardware cunoscut ca placă de dezvoltare și software-ul pentru dezvoltarea codului cunoscut ca Arduino IDE (Integrated Development Environment). Construit cu microcontroler Atmel AVR pe 8 biți, care sunt fabricate de Atmel sau de un Atmel ARM pe 32 de biți, aceste microcontrolere pot fi programate cu ușurință folosind limbajul C sau C ++ în IDE-ul Arduino.

Spre deosebire de celelalte plăci de microcontrolere din India, plăcile Arduino au intrat pe piața electronică doar cu câțiva ani în urmă și au fost limitate doar la proiecte de mici dimensiuni. Persoanele asociate cu electronica se apropie treptat și acceptă rolul lui Arduino pentru propriile proiecte. Această placă de dezvoltare poate fi, de asemenea, utilizată pentru a încărca un nou cod pe placă prin simpla folosire a unui cablu USB. Arduino IDE oferă o platformă simplificată integrată care poate rula pe calculatoare și permite utilizatorilor să utilizeze limbaje de programare pentru Arduino folosind C sau C ++.

Arduino se împarte în două categorii:

Hardware;

Software.

Hardware

Placa de dezvoltare Arduino constă în multe componente care, împreună, o fac să funcționeze. Fiecare contribuie la funcționarea acesteia, astfel:

Microcontroler: Acesta este nucleul plăcii de dezvoltare, care funcționează ca un mini-computer și poate primi și trimite informații sau comenzi către dispozitivele periferice conectate la acesta. Microcontrolerul folosit diferă de la placă la placă; de asemenea, are propriile sale specificații diferite.

Alimentare externă: este utilizată pentru alimentarea plăcii de dezvoltare Arduino cu o tensiune reglată de 9-12 volți.

Conector USB: Acest conector este un port foarte important în această placă. Este folosit pentru a încărca un program pe microcontroler utilizând un cablu USB. De asemenea, are o putere reglată de 5V care, de asemenea, acționează placa Arduino în cazurile în care sursa externă de alimentare este absentă.

Programator intern: Codul software dezvoltat poate fi încărcat pe microcontroler prin portul USB, fără un programator extern.

Buton de resetare: Acest buton este prezent pe placă și poate fi utilizat pentru resetarea microcontrolerului Arduino.

Pini analogici: Există niște pini de intrare analogici, variind de la A0 – A7. Aceștia sunt utilizați pentru intrarea / ieșirea analogică.

Pinii I / O digitali: Există și niște pini de intrare digitali care variază de la 2 la 16. Aceștia sunt utilizați pentru intrarea / ieșirea digitală.

Pinii power și GND: pe placa de dezvoltare există pini care livrează 3.3, 5 volți și GND.

2.1.2 Software-ul

Codul programului scris pentru Arduino este cunoscut ca o schiță. Software-ul utilizat pentru dezvoltarea unor astfel de schițe pentru un Arduino este cunoscut sub numele de Arduino IDE. Acest IDE conține următoarele părți:

Editor de text: Aici codul simplificat poate fi scris folosind o versiune simplificată a limbajului de programare C ++.

Zona mesajului: afișează eroarea și oferă, de asemenea, un feedback privind salvarea și exportul codului.

Text: Consola afișează textul de ieșire de către mediul Arduino, inclusiv mesaje de eroare complete și alte informații

Bara de instrumente a consolei: Aceasta conține butoane precum Verify, Upload, New, Open, Save și Serial Monitor. În colțul din dreapta jos al ferestrei se afișează placa de dezvoltare și portul serial în uz. [5]

Servomotor

Servomotorul este un dispozitiv electric care poate împinge sau roti un obiect cu o mare precizie. Este compus doar dintr-un motor simplu, care rulează prin servo mecanism. Dacă motorul este alimentat cu curent continuu, se numește servomotor DC, iar dacă acesta este alimentat cu curent alternativ, se numește servomotor AC. Putem obține un servomotor de cuplu foarte mare într-un pachet mic și ușor. Datorită acestor caracteristici, acestea sunt utilizate în multe aplicații cum ar fi mașinile de jucărie, elicoptere RC și avioane, robotică, mașini etc.

Fig. 2.2 Servomotor

Servomotoarele sunt evaluate în kg / cm (kilograme pe centimetru). Cele mai multe servomotoare sunt evaluate la 3kg / cm sau 6kg / cm sau 12kg / cm. Acest kg / cm arată cât de mult poate ridica servomotorul la o anumită distanță. De exemplu: Un motor Servo de 6 kg / cm ar trebui să poată ridica 6 kg dacă încărcarea este suspendată la o distanță de 1 cm de arborele motoarelor, cu cât distanța este mai mare cu cât este mai mică capacitatea de încărcare a greutății.

Poziția unui servomotor este stabilită de un impuls electric și circuitele sale sunt amplasate lângă motor.

Mecanismul servo-ului se compune din trei părți:

Dispozitiv controlat

Senzor de ieșire

Sistem de feedback

Este un sistem cu buclă închisă care utilizează un sistem de feedback pozitiv pentru a controla mișcarea și poziția finală a arborelui. Aici dispozitivul este controlat de un semnal de feedback generat prin compararea semnalului de ieșire și a semnalului de intrare de referință.

Aici semnalul de intrare de referință este comparat cu semnalul de ieșire de referință, iar cel de-al treilea semnal este produs de sistemul de feedback. Și acest al treilea semnal acționează ca semnal de intrare pentru dispozitivul de comandă. Acest semnal este prezent atâta timp cât semnalul de feedback este generat sau există o diferență între semnalul de intrare de referință și semnalul de ieșire de referință. Deci, sarcina principală a servomecanismului este de a menține producția unui sistem la valoarea dorită în prezența zgomotelor.

Un servo este alcătuit dintr-un motor (DC sau AC), un potențiometru, ansamblul angrenajelor și un circuit de comandă.

În primul rând, folosim ansamblul angrenajelor pentru a reduce turația motorului și pentru a mări cuplul motorului. La poziția inițială a arborelui servomotorului poziția butonului de potențiometru este astfel încât nu există semnal electric generat la orificiul de ieșire al potențiometrului. Acum, un semnal electric este dat unui alt terminal de intrare al amplificatorului de detector de erori. Acum, diferența dintre aceste două semnale, una provine de la potențiometru și alta provine de la altă sursă, vor fi prelucrate în mecanismul de feedback, iar ieșirea va fi furnizată în termen de semnal de eroare. Acest semnal de eroare acționează ca intrare pentru motor și motorul începe să se rotească. Acum, arborele motorului este conectat cu potențiometrul, iar motorul se rotește astfel încât potențiometrul să genereze un semnal. Deci, când poziția unghiulară a potențiometrului se modifică, semnalul său de feedback de ieșire se modifică. După o anumită dată poziția potențiometrului ajunge într-o poziție în care ieșirea potențiometrului este identică cu semnalul extern furnizat. În această condiție, nu va exista nici un semnal de ieșire de la amplificator la intrarea motorului, deoarece nu există nicio diferență între semnalul extern aplicat și semnalul generat la potențiometru, iar în această situație motorul se oprește din rotire.

Toate motoarele au trei fire care ies din ele. Din care două vor fi utilizate pentru alimentarea (pozitivă și negativă) și unul va fi utilizat pentru semnalul care urmează să fie trimis de la MCU.

Servomotorul este controlat de PWM (Pulse with Modulation) care este furnizat de firele de control. Există un impuls minim, un impuls maxim și o rată de repetiție. Servomotorul poate roti 90 grade din orice direcție din poziția neutră. Servomotorul așteaptă un impuls la fiecare 20 de milisecunde (ms), iar lungimea impulsului va determina cât de departe se rotește motorul. De exemplu, un impuls de 1,5ms va face motorul să se deplaseze la poziția de 90 °, cum ar fi dacă pulsul este mai mic decât arborele de 1,5ms se deplasează la 0 ° și dacă acesta este mai lung de 1,5ms decât se va întoarce servomotorul la 180 °.

Servomotorul funcționează pe principiul PWM, ceea ce înseamnă că unghiul său de rotație este controlat de durata impulsului aplicat la codul PIN de control. Motorul principal este compus din motorul DC care este controlat de un rezistor variabil (potențiometru) și niște trepte de viteză. Forța de mare viteză a motorului DC este transformată în cuplu de către uneltele Gears. Știm că MOTOR = FORȚA X DISTANȚĂ, în motorul DC forța este mai mică și distanța (viteza) este mare, iar în servo, forța este ridicată, iar distanța este mai mică. Potențiometrul este conectat la arborele de ieșire al Servo, pentru a calcula unghiul și a opri motorul DC în unghiul dorit.

Fig. 2.3 PWM pentru servomotoare

Servomotorul poate fi rotit de la 0 la 180 de grade, dar poate merge până la 210 grade, în funcție de fabricație. Acest grad de rotație poate fi controlat prin aplicarea Pulsei electrice la o lățime adecvată, la pinul său de control. Servo verifică pulsul la fiecare 20 de milisecunde. Impulsul de 1 ms (1 milisecundă) lățime poate roti servo la 0 grade, 1.5ms poate roti la 90 de grade (poziția neutră) și pulsul 2 ms poate roti la 180 de grade.

Toate servomotoarele funcționează direct cu șinele de alimentare cu + 5V, dar trebuie să fim atenți la cantitatea de curent pe care o consumă motorul, iar dacă se intenționează utilizarea a mai mult de două servomotoare, ar trebui proiectat un servo scut adecvat. [6]

Senzor de culoare TCS230

TCS230 este un dispozitiv de detectare a culorilor mic, foarte integrat, ambalat într-un SOIC cu 8 pini din plastic transparent. Acesta raportează, ca frecvență analogică, frecvența sursei optice de undă scurtă (albastru), medie (verde), lungă (roșu) și putere optică de bandă largă (alb) care apare pe dispozitiv. Poate fi utilizat într-o varietate de aplicații de detectare a culorii.

Fig. 2.4 Senzor de culoare TCS230

Cu ajutorul modulului TCS230 putem determina intensitatea luminii corespunzătoare fiecărei culori.

Funcționarea senzorului se bazează pe conversia lungimii de undă a luminii într-un semnal dreptunghiular de o anumită frecvență pentru fiecare culoare.

Modulul dispune de 4 led-uri de culori diferite ce pot fi folosite separat. Circuitul integrat dispune si de un pin de enable. În momentul în care circuitul este în modul sleep, consumul scade până la 15 µA.

Modulul TCS230 folosește o matrice de fotodiode. Acestea sunt elemente de circuit ce permit trecerea curentului în prezența unei radiații luminoase de o anumită frecvență (culoarea este dependentă de frecvență).

TCS230 conține o matrice de 8×8 fotodiode, folosind câte 16 diode ce se deschid în prezența luminii roșu, 16 pentru albastru, 16 pentru verde și 16 pentru lumina albă (lumina alba se obține combinând toate culorile).

Modulul va genera la ieșire un semnal dreptunghiular cu o frecvență dependentă de culoare. [7]

Ieșirea este un val pătrat (ciclu de sarcină 50%) cu o frecvență direct proporțională cu intensitatea luminii (iradiere). Frecvența de ieșire la scară largă poate fi scalată cu una din cele trei valori prestabilite prin intermediul a doi pini de intrare de comandă. Intrările digitale și ieșirea digitală permit interfața directă cu un microcontroler sau cu alte circuite logice. Activarea ieșirii (OE) plasează ieșirea în starea de înaltă impedanță pentru partajarea mai multor unități a unei linii de intrare a microcontrolerului.

Convertorul de lumină-frecvență citește o serie de fotodiode de 8 x 8. Șaisprezece fotodiode au filtre albastre, 16 fotodiode au filtre verzi, 16 fotodiode au filtre roșii și 16 fotodiode sunt clare fără filtre. Cele patru tipuri (culori) ale fotodiodelor sunt interdigitate pentru a minimiza efectul neuniformității iradierii incidentului. Toate cele 16 fotodiode de aceeași culoare sunt conectate în paralel și tipul de fotodiode pe care dispozitivul le folosește în timpul funcționării este selectabil cu pin. Fotodiodele au o dimensiune de 120 μm x 120 μm și se află pe centre de 144 μm.

Frecvența de ieșire este controlată de două intrări logice, S0 și S1. Convertorul intern între frecvență și frecvență generează un tren impulsiv cu impuls fix. Scalarea se realizează prin conectarea internă a ieșirii puls-tren a convertorului la o serie de separatoare de frecvență. Rezultatele divizate sunt valuri pătrate cu ciclu de acțiune de 50% cu valori relative ale frecvenței de 100%, 20% și 2%.

Deoarece divizarea frecvenței de ieșire este realizată prin numărarea impulsurilor frecvenței interne principale, perioada de ieșire finală reprezintă o medie a perioadelor multiple ale frecvenței principale. Regiștrii contorului scării de ieșire sunt șterși la următorul impuls al frecvenței principale după orice trecere a liniilor S0, S1, S2, S3 și OE. Ieșirea este ridicată la următorul puls ulterior al frecvenței principale, începând o nouă perioadă validă. Aceasta minimizează întârzierea dintre o schimbare pe liniile de intrare și noua perioadă de ieșire rezultată.

Timpul de răspuns la o schimbare de programare de intrare sau la o schimbare în etapa de iradiere este o perioadă de frecvență nouă plus 1 μS. Ieșirea scalată modifică atât frecvența la scară largă, cât și frecvența întunecată de factorul de scalare selectat. Funcția de scalare a frecvenței permite optimizarea intervalului de ieșire pentru o varietate de tehnici de măsurare. Ieșirile scalate pot fi utilizate în cazul în care este disponibil doar un contor de frecvență mai lent, cum ar fi microcontrolerul cu cost redus sau unde se utilizează tehnici de măsurare a perioadei.

Alegerea interfeței și tehnica de măsurare depinde de rezoluția dorită și de rata de achiziție a datelor. Pentru rata maximă de achiziție a datelor, se utilizează tehnici de măsurare a perioadei. Datele de ieșire pot fi colectate la o rată de două ori mai mare decât frecvența de ieșire sau un punct de date în fiecare microsecundă pentru ieșirea la scară largă. Măsurarea perioadei necesită utilizarea unui ceas de referință rapid, cu o rezoluție disponibilă direct legată de rata ceasului de referință.

Fig. 2. 5 Caracteristici TCS230

Scalarea de ieșire poate fi utilizată pentru a mări rezoluția pentru o anumită rată de ceas sau pentru a maximiza rezoluția pe măsură ce se modifică intrarea luminii. Măsurarea perioadei este utilizată pentru a măsura nivelurile de lumină variabile rapid sau pentru a efectua o măsurare foarte rapidă a unei surse luminoase constante. Rezoluția maximă și precizia pot fi obținute prin utilizarea tehnicilor de măsurare a frecvenței, acumulării impulsurilor sau integrare. Măsurările de frecvență oferă avantajul suplimentar de a măsura variațiile aleatorii sau ale frecvențelor înalte (jitter) rezultate din zgomot în semnalul luminos.

Rezoluția este limitată în principal de contoarele disponibile și timpul de măsurare admisibil. Măsurarea frecvenței este potrivită pentru niveluri ușoare de variație sau constantă a luminii și pentru citirea nivelurilor medii de lumină pe perioade scurte de timp. Integrarea (acumularea impulsurilor într-o perioadă foarte lungă de timp) poate fi utilizată pentru a măsura expunerea, cantitatea de lumină prezentă într-o zonă într-o anumită perioadă de timp. [8]

LCD

Ecranul LCD (ecran cu cristale lichide) este un modul electronic de afișare și găsește o gamă largă de aplicații. Un afișaj LCD de 16×2 este un modul foarte simplu și este foarte frecvent utilizat în diverse dispozitive și circuite. Aceste module sunt preferate pe șapte segmente și alte LED-uri cu mai multe segmente. Motivele sunt: ​​LCD-urile sunt economice; ușor de programat; nu au nici o limitare de a afișa caractere speciale și chiar personalizate (spre deosebire de șapte segmente), animații și așa mai departe.

Un ecran LCD de 16×2 înseamnă că poate afișa 16 caractere pe linie și există 2 astfel de linii. În acest ecran LCD fiecare caracter este afișat în matrice de 5×7 pixeli. Acest LCD are două registre, și anume Command și Data.

Registrul de comandă stochează instrucțiunile de comandă date pe ecranul LCD. O comandă este o instrucțiune dată LCD pentru a efectua o sarcină predefinită, cum ar fi inițializarea acesteia, ștergerea ecranului, setarea poziției cursorului, controlul afișajului etc. Registrul de date stochează datele care urmează să fie afișate pe ecranul LCD. Datele reprezintă valoarea ASCII a caracterului care trebuie afișat pe ecranul LCD. [9]

16 × 2 LCD este numit astfel deoarece are 16 coloane și 2 rânduri. Există o mulțime de combinații disponibile, cum ar fi, 8 × 1, 8 × 2, 10 × 2, 16 × 1, etc, dar cea mai utilizată una este LCD 16 × 2. Deci, va avea (16 × 2 = 32) 32 de caractere în total și fiecare caracter va fi format din 5 × 8 puncte Pixel. [10]

Fig. 2.6 Model de modul LCD 16×2 2D

Caracteristici ale modulului LCD 16 × 2:

Tensiunea de operare este de la 4.7V la 5.3V;

Consumul curent este de 1mA fără iluminare din spate;

Afișaj LCD alfanumeric;

Constă din două rânduri și fiecare rând poate imprima 16 caractere;

Fiecare caracter este construit pe un pătrat de 5 × 8 pixeli;

Poate funcționa atât pe 8 biți, cât și pe 4;

De asemenea, poate afișa orice caracter generat personalizat.

Un ecran LCD 16X2 are două registre, și anume comanda și datele. Selecția registru este utilizată pentru a comuta de la un registru la altul. RS = 0 pentru registrul de comandă, în timp ce RS = 1 pentru registrul de date.

Comandă Registru: Registrul de comandă stochează instrucțiunile de comandă date pe ecranul LCD. O comandă este o instrucțiune dată LCD pentru a efectua o sarcină predefinită, cum ar fi inițializarea acesteia, ștergerea ecranului, setarea poziției cursorului, controlul afișajului etc. Prelucrarea comenzilor se face în registrul de comandă.

Înregistrarea datelor: Registrul de date stochează datele care vor fi afișate pe ecranul LCD. Datele reprezintă valoarea ASCII a caracterului care trebuie afișat pe ecranul LCD. Când trimitem date către LCD, acesta merge în registrul de date și este procesat acolo. Când RS = 1, este selectat un registru de date.

Generarea de caractere personalizate pe ecranul LCD nu este foarte grea. Aceasta necesită cunoștințe despre memoria de acces aleatorie generată personalizat (CG-RAM) a LCD-ului și a controlerului cu cip LCD. Majoritatea ecranelor LCD conțin controler Hitachi HD4478. CG-RAM este componenta principală în realizarea de caractere personalizate. Se stochează caracterele personalizate odată declarate în cod. Dimensiunea CG-RAM este de 64 octeți, oferind opțiunea de a crea opt caractere la un moment dat. Adresa CG-RAM pornește de la 0x40 (Hexadecimal) sau 64 în zecimal. Se pot genera caractere personalizate la aceste adrese. După ce ne generăm caracterele la aceste adrese, acum le putem imprima pe ecranul LCD în orice moment prin trimiterea de comenzi simple pe ecranul LCD. [11]

I2C este un protocol serial pentru interfața cu două fire pentru a conecta dispozitivele de viteză redusă, cum ar fi microcontrolerele, EEPROM-urile, convertoarele A / D și D / A, interfețele I / O și alte periferice similare în sistemele încorporate. A fost inventat de Philips și acum este folosit de aproape toți producătorii importanți de IC. Fiecare dispozitiv slave I2C are nevoie de o adresă – acestea trebuie încă obținute de la NXP (semiconductori anteriori Philips).

Fig. 2.7 Schema de conectare la I2C

I2C este popular deoarece este simplu de utilizat, pot fi mai mult de un master, doar viteza bus superioară este definită și sunt necesare numai două fire cu rezistențe de tracțiune pentru a conecta un număr nelimitat de dispozitive I2C. I2C poate folosi microcontrolere mai lente cu pinii I / O de uz general, deoarece au nevoie numai de generarea de condiții corecte de pornire și oprire în plus față de funcțiile de citire și scriere a unui octet.

Fiecare dispozitiv slave are o adresă unică. Transferul de la și la dispozitivul principal este serial și este împărțit în pachete pe 8 biți. Toate aceste cerințe simple fac foarte ușoară implementarea interfeței I2C chiar și cu microcontrolerele ieftine care nu au controler hardware special pentru I2C.

Specificațiile inițiale ale I2C au definit frecvența maximă a ceasului de 100 kHz. Acest lucru a fost ulterior crescut la 400 kHz ca mod rapid. Există, de asemenea, un mod de mare viteză care poate merge până la 3,4 MHz și există, de asemenea, un mod ultra-rapid de 5 MHz.

I2C utilizează numai două fire: SCL (ceas serial) și SDA (date seriale). Ambele trebuie să fie trase cu un rezistor la + Vdd. Există, de asemenea, schimbători de nivel I2C care pot fi utilizați pentru conectarea la două magistrale I2C cu tensiuni diferite.

Comunicarea de bază I2C utilizează transferuri de 8 biți sau octeți. Fiecare dispozitiv slave I2C are o adresă pe 7 biți care trebuie să fie unică pe magistrală. Unele dispozitive au adresa I2C fixă, în timp ce altele au câteva linii de adresă care determină biții inferiori ai adresei I2C.

Adresa pe 7 biți reprezintă 7 biți până la 1, în timp ce bitul 0 este folosit pentru a semnala citirea de pe dispozitiv sau pentru a scrie. Dacă bitul 0 (în octetul de adresă) este setat la 1, atunci dispozitivul principal va citi de pe dispozitivul slave I2C.

Dispozitivul principal nu are nevoie de nici o adresă deoarece generează ceasul (prin SCL) și se adresează dispozitivelor slave I2C.

Fig. 2.8 Protocolul I2C

În starea normală, ambele linii (SCL și SDA) sunt mari. Comunicarea este inițiată de dispozitivul principal. Aceasta generează starea de pornire (S) urmată de adresa dispozitivului slave (B1). Dacă bitul 0 al byte-ului de adresă a fost setat la 0, dispozitivul principal va scrie dispozitivului slave (B2). În caz contrar, următorul octet va fi citit de pe dispozitivul slave. După citirea sau scrierea tuturor octeților (Bn), dispozitivul principal generează o condiție Stop (P). Aceasta semnalizează altor dispozitive din magistrală că comunicarea s-a încheiat și un alt dispozitiv poate utiliza magistrala.

Majoritatea dispozitivelor I2C suportă o stare de pornire repetată. Aceasta înseamnă că înainte ca comunicarea să se încheie cu o condiție de oprire, dispozitivul master poate repeta condiția de pornire cu octetul de adresă și poate modifica modul de la scriere la citire.

Receptorul I2C este utilizat de multe circuite integrate și este ușor de implementat. Orice microcontroler poate comunica cu dispozitivele I2C chiar dacă nu are interfață specială I2C. Specificațiile I2C sunt flexibile – magistrala I2C poate comunica cu dispozitive lente și poate utiliza și moduri de mare viteză pentru a transfera cantități mari de date. Datorită multor avantaje, magistrala I2C va rămâne una dintre cele mai populare interfețe seriale pentru conectarea circuitelor integrate pe bord. [12]

Implementarea soluției adoptate

3.1 Schema bloc a sistemului

Figura 3.1 se observa schema bloc a sistemului, ea este formata din mai multe blocuri functionale. Arduino nano primește informații de la senzor, iar pe baza acestor informații transmite mai departe către servo motoare și către LCD. Fiecare dintre aceste blocuri sunt descrise într-o forma mai amplă.

Fig 3. 1 Schema bloc a sistemului

Schema electrică

Schema electrica a fost realizată cu ajutorul programul easyeda.com.

EasyEDA un program online open source, care permite utilizatorilor să proiecteze și să simuleze în mod public și privat. EasyEDA permite crearea și editarea schemelor electrice, simularea circuitelor analogice și digitale și editarea pentru a crea PCB-uri. Fiecare componentă a fost legata în program pentru a ușura realizarea circuitului.

Fig 3. 2 Schema electrică

3.3 Arduino Nano

Tensiunea de alimentare a plăcuței Arduino Nano trebuie sa fie cuprinsă între 1.8V și 5.5V, iar consumul este de 40mA.

Fiecare componentă este legată la microcontroller prin pini specifici. Programarea microcontroller-ului are loc prin intermediul unui adaptor USB la TTL, PL2303, pinul TX din TTL conectându-se la pinul PD0, iar RX-ul din TTL la pinul PD1 al microcontroller-ului.

Fig 3. 3 Arduino Nano. Harta pinilor

Pentru o alimentare la o tensiune mai mare se folosește pinul Vin. Tensiunea de alimentare suportată de limitator este cuprinsă între 7V-12V.

Alimentarea se face din cablul USB (5V) pentru Arduino cât și pentru celelalte componete din circuit.

Placa de dezvoltare este echipată cu același microcontroller performant (ATmega328p) de pe Arduino Uno. Programarea dispozitivului se realizează prin intermediul unui cablu USB, nefiind nevoie de un programator special deoarece este instalat și un bootloader.

Fig 3. 4 Arduino Uno Schema internă

Rularea în timp real a microcontrollerului Atmega328p este dată de un quartz extern de 16 Mhz împreună cu 2 condesatoare de 22pF.

În acest proiect s-a folosit un arduino nano pentru a reduce dimensiunile circuitului, acesta fiind programat printr-un cablu USB mini, cu ajutorul programului Arduino IDE.

Fig 3. 5 Poziționarea Arduino

3.4 LCD cu modul I2C

LCD-ul se conectează prin comunicare serială I2C, acest lucru reduce numărul de fire pe care lcd-ul îl folosește pentru a comunica cu Arduino.

Fig 3. 6 LCD-ul împreună cu modulul I2C

Cei 16 pini ai LCD-ului sunt conectați într-un modul, care folosește un circuit integrat PCF8574A, reprezentând totodată un Bus bidirecțional de 8 biți. Acestuia îi este atribuită o adresă prin care are loc recunoașterea de către microcontroler.

I2C-ul este utilizat în mod obișnuit pentru atașarea circuitelor integrate periferice de viteză mică la procesoare și microcontrolere în comunicații pe distanțe scurte. Pinii pentru transmisia serială ai microcontroller-ului se află în A5 (SCL) și A4 (SDA).

Fig 3. 7 Conectarea modulului i2c

Fig 3. 8 Afișarea pe LCD a datelor

Dispune de 8 adrese distincte, ceea ce înseamnă că se poate comanda până la 8 LCD-uri folosind doar doi pini Arduino. Pe LCD apar informații referitoare numărul de bile din fiecare culoare și totalul acestora.

Pentru a putea rula corect lcd-ul împreună cu modului I2C s-au folosit următoarele librării și codul de inițializare:

Fig 3. 9 Codul pentru LCD

Modulul i2c s-a folosit cu scopul de a diminua numărul de pini de folosiți de Arduino pentru a afișa informații pe LCD. Cu ajutorul protocolului I2C se pot realiza in teorie 128 de conexiuni cu senzori și dispositive care folosesc interfața i2c adica comunică prin adrese. Adresa cu care Arduino comunică cu LCD-ul este 0x27.

LCD-ul are 16 caractere poziționate pe 2 coloane. Fiecare character poate fi selectat în parte din cod.

3.5 Senzorul de culoare TCS230

Fig 3. 10 Conectare senzor culoare la Arduino Nano

Cu ajutorul modulului TCS230 putem determina intensitatea luminii corespunzătoare fiecăre culori.

Funcționarea senzorului se bazează pe conversia lungimii de undă a luminii într-un semnal dreptunghiular de o anumită frecvență pentru fiecare culoare.

Modulul dispune de 4 led-uri de culori diferite ce pot fi folosite separat. Circuitul integrat dispune si de un pin de enable. În momentul în care circuitul este în modul sleep, consumul scade până la 15 µA. [14]

Fig 3. 11 Blocuri interne senzor culoare

Modulul TCS230 folosește o matrice de fotodiode. Acestea sunt elemente de circuit ce permit trecerea curentului în prezența unei radiații luminoase de o anumită frecvență (culoarea este dependentă de frecvență).

Fig 3. 12 Grafic în funcție de culoare

Pentru a putea detecta culoarea obiectelor, în vederea separării acestora, s-a folosit senzorul TCS230. Acesta are în componență 4 LED-uri albe pentru o mai bună sortare a culorilor. Se conectează la Arduino prin 5 pini, S0, S1, S2, S3 și OUT și alimentarea VCC și GND. Aceștia sunt așezați pe pinii S0-D4, S1-D5, S2-D6, S3-D8 și OUT D10.

Fig 3. 13 Testare culori

Pentru fiecare culoare in parte s-au facut teste și s-a determinat valoarea citita de senzorul TCS230. Fiecare drops modifică cele 3 valori din senzor. În tabelul urmărtor se afișează intervalele valorilor pentru determinarea exacta a culorii.

Tabel1. Valori în funcție de culoare

Senzorul de culoare se află poziționat cu fața în jos pe al 2-lea etaj al machetei pentru a putea citi culorile dropsurilor. Acesta dispune de 4 leduri, ajutând la iluminarea mai bună a obiectului și implicit în detectarea mai optimă a frecvenței fiecărei culori. Pentru a nu rata citirea corectă s-a aplicat peste acest senzor un strat de bandă adezivă neagră deoarece orice lumină externă, fie ea de la soare sau de la becurile din interior pot modifica drastic verdictul final.

În arduino s-a folosit următoarea secevență de cod pentru a putea determina culorile, a incremeta fiecare valoare, a o afișa pe LCD și pentru a da comanda servomotorului:

Pe scurt, dacă se detectează un drops de o anumită culoare programul intră în bucla respectivă respectând fiecare linie de comandă în ordinea scrierii acestora. Spre exemplu dacă senzorul detectează culoarea galbenă a dropsului variabila ”y” se incrementează, al 2-lea servo motor cel care stabilește unde trebuie sa cadă dropsul se activează și ajunge poziția de 80 de grade, așteaptă 500 ms apoi se dezactiveză pentru a economisi curent.

Dacă nu se detectează nici o culoare sau se așează un drops de altă culoare, servo motorul 2 duce ”toboganul” către un alt recipient în care v-or cădea dropsurile nedetectate. Această operațiune nu afectează cu nimic număratoarea finală a dropsurilor.

3.6 Servo motor

Cele doua Servo motore au rolul de a ajuta la pozitionarea dropsurilor colorate sub senzorul de culoare respectiv orientarea unui „tobogan” deasupra fiecărui recipeint destinat culorii respective, iar controlul servo motorului se realizează cu ajutorul unui semnal de tip PWM.

Fig 3. 14 Semnal PWM pentru rotirea servomotorului

De asemenea, alimentarea acestui produs face direct de la Arduino iar comada se face pe pinii digitali D3 respectiv D9.

Pentru alimentarea s-a folosit direct conexiunea din Arduino deși nu este foarte indicat deoarece servomotoarele au un consum destul de ridicat de curent. Având în vedere cosumul mic al celorlalte componete s-a reușit conectarea servomotoarelor la arduino fără a afecta funcționaliatea corecta.

Servomotoarele folosite au un unghi de rotație de doar 180 de grade fiind ideale pentru acest proiect în care nu este nevoie de un unghi mai mare.

Fig 3. 15 Conectarea servomotorului la Arduino

Pentru controlul motorului se utilizează tehnica PWM la fel ca la motoarele de curent continuu. În funcție de factorul de umplere al semnalului de control motorul se va mișca fie în sens orar, fie în sens opus. După fiecare operațiune a servomotorului acesta din cod se dezactivează pentru a nu forța motorașul intern. Servomotoarele sunt foarte precise deoarece au în interior un potențiometru care ajută la poziționarea corectă a axului motorului. Pentru a demonstra cum s-a folosit semnalul PWM, cu ajutorul unui mini oscilosop au fost măsurate valorile și implicit semnalul dreptunghiular.

Fig 3. 16 Semnalul PWM pentru controlul Servomotorului

Răspunsul motorului la anumite valori ale semnalului PWM. Când lățimea pulsului este sub 1 ms motorul va trece la 0°. La o valoare de 1,5 ms acesta se va roti cu 90°, iar la o valoare mai mare de 1,5 ms rotirea va fi mai accentuată ajungând la o valoare de 180°.

Fig 3. 17 Semnalul PWM pentru controlul Servomotorului

3.8 Construcția platformei

Pentru realizarea machetei s-a folosit un material bazat pe plastic cartonat de culoare galbenă, acesta fiind taiat în bucăți și lipite între ele cu silicon cald. Plăcile au fost măsurate inainte de lipire si taiate cu precize cu un cutter fin. Acest material este deosebit în realizarea machetelor. Poate fi folosit inclusv in machete de arhitectură fiind cel mai vândut și apreciat pentru asemenea proiecte.

Fig 3. 24 Cartonul plasticat

Fig 3. 25 Lipirea machetei

Sistemul de preluare al dropsului a fost decupat în formă de sfert de cerc cu o gaură pentru a putea colecta dropsurile care cad automat din teava de pvc. Acesta a fost lipit de axul servomotorului pentru a ajuta la preluarea și transportarea dropsurilor.

Fig 3. 26 Sistemul de preluare al dropsului

Toate dropsurile v-or fi puse într-o pâlnie de deasupra machetei pentru a putea fi separate pe urmă.

Fig 3. 27 Pâlnia de ghidare

Sistemul de poziționare și sortare a fost construit sub forma unui ”tobogan” iar sub acesta a fost lipit un motor servo pentru a putea roti toboganul în funcție de culoarea pe care senzorul o detectează.

Fig 3. 28 ”Tobogan” poziționare

Fig 3. 29 ”Tobogan” poziționare

Fig 3. 30 ”Tobogan” poziționare

Funcționarea sistemului

Primul pas pentru a porni sistemul este de a rosti cuvântul ”START”.

Primul servo motor primiște comada de a se roti pentru a prelua dropsul din teava PVC.

Dropsul ajutat de primul servomotor este așezat sub senzorul de culoare pentru ai putea fi citită culoarea.

După citirea culorii al dolilea servomotor poziționează toboganul desupra recipientului destinat culorii.

Priumul servomotor aduce dropsul spre tobogan.

Dropsul cade în recipientul destinat.

Fiecare culoare este numărată și este afișată pe LCD împreună cu suma totală a dropsurilor căzute.

Dacă se introduce un drops de altă culoare față de cel înregistrat sau senzorul nu poate citi culoarea toboganul o să se deplaseze spre un recipient separat.

Pentru oprirea sistemului se ține apăsat butonul roșu.

Fig 3. 31 Recipentele finale

Fig 3. 32 Machetă finală

Rezultate experimentale

Concluzii

Bibliografie

Stadiul actual

[1] https://en.wikipedia.org/wiki/Automation.

[2] https://en.wikipedia.org/wiki/Colour_sorter?fbclid=IwAR2KwpZYpO3eC4r-gdYyaZM4Maltk7NDWYKZyM25Sygw4q9fKk3NZZvkH3I

Arduino Uno

[3] https://en.wikipedia.org/wiki/Arduino_Uno.

[4] https://ardushop.ro/ro/home/29-placa-de-dezvoltare-uno-r3.html?gclid=Cj0KCQjw_r3nBRDxARIsAJljleFMDMsMtHWYshP81KXuCEVZPlQ_2x8ICadjRGNQOVtmRaFdgRQ_so4aAhsgEALw_wcB.

[5] L. Louis, "Working principle of Arduino and using it," International Journal of Control, Automation, Communication and Systems, Vols. I, nr. 1, 2016.

Servomotor

[6] https://circuitdigest.com/article/servo-motor-basics, 2015.

Senzor de culoare TCS230

[7] https://www.optimusdigital.ro/ro/senzori-senzori-optici/111-modul-senzor-de-culoare-tcs230.html?gclid=EAIaIQobChMIsNfw1qbz2gIVkcmyCh2pHgwNEAAYASAAEgJ6PvD_BwE.

[8]http://www.w-r-e.de/robotik/data/opt/tcs230.pdf.

LCD

[9] https://www.engineersgarage.com/electronic-components/16×2-lcd-module-datasheet.

[10] https://components101.com/16×2-lcd-pinout-datasheet.

[11] https://electronicsforu.com/resources/learn-electronics/16×2-lcd-pinout-diagram.

[12] https://i2c.info/.

Anexe

#include "Arduino.h"

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <Servo.h>

LiquidCrystal_I2C lcd(0x27,16,2);

int pornire=0;

int button_pin=2;

int button=0;

Servo myservo;

Servo myservo2;

int var=0;

#define S0 4

#define S1 5

#define S2 8

#define S3 7

#define sensorOut 10

int pos=0;

int pos2=0;

int y=0;

int r=0;

int o=0;

int g=0;

int p=0;

int frequency = 0;

int bfrequency = 0;

int gfrequency = 0;

int rfrequency = 0;

void setup()

{

lcd.init();

lcd.backlight();

pinMode(button_pin,INPUT_PULLUP);

lcd.setCursor(0,0);

lcd.print(" ");

lcd.setCursor(0,1);

lcd.print(" ");

lcd.setCursor(0,0);

lcd.print("O=");

lcd.setCursor(5,0);

lcd.print("G=");

lcd.setCursor(11,0);

lcd.print("Y=");

lcd.setCursor(0,1);

lcd.print("R=");

lcd.setCursor(5,1);

lcd.print("P=");

lcd.setCursor(10,1);

lcd.print("Su=");

Serial.begin(9600);

pinMode(S0, OUTPUT);

pinMode(S1, OUTPUT);

pinMode(S2, OUTPUT);

pinMode(S3, OUTPUT);

pinMode(sensorOut, INPUT);

digitalWrite(S0,HIGH);

digitalWrite(S1,LOW);

myservo.attach(9);

myservo2.attach(3);

}

void loop()

{

button=digitalRead(button_pin);

Serial.println(button);

if (pornire==0)

{

if (button==HIGH)

{

pornire=1;

}

y=r=o=g=p=0;

myservo.detach();

myservo2.detach();

}

if (pornire==1)

{

myservo.attach(9);

for (pos = 50; pos <= 150; pos += 1) {

myservo.write(pos);

delay(2);

}

delay(200);

for (pos = 150; pos >= 87; pos -= 1) {

myservo.write(pos);

delay(5);

}

delay(500);

myservo.detach();

digitalWrite(S2,LOW);

digitalWrite(S3,LOW);

frequency = pulseIn(sensorOut, LOW);

rfrequency = map(frequency, 25,72,255,0);

delay(100);

digitalWrite(S2,HIGH);

digitalWrite(S3,HIGH);

frequency = pulseIn(sensorOut, LOW);

gfrequency = map(frequency, 30,90,255,0);

delay(100);

digitalWrite(S2,LOW);

digitalWrite(S3,HIGH);

frequency = pulseIn(sensorOut, LOW);

bfrequency = map(frequency, 25,70,255,0);

delay(100);

if ((bfrequency<0) && ((rfrequency>50)) && ( gfrequency<30))

{

o++;

Serial.println("orange");

myservo2.attach(3);

myservo2.write(30);

delay(500);

myservo2.detach();

}

else if ((bfrequency<20) && (rfrequency>-150)&&(rfrequency<0) && (gfrequency>10)&&(gfrequency<200) )

{

g++;

Serial.println("green");

myservo2.attach(3);

myservo2.write(50);

delay(500);

myservo2.detach();

}

else if ((bfrequency<20) && (rfrequency>80) && (gfrequency>70)&&(gfrequency<240) )

{

y++;

Serial.println("yellow");

myservo2.attach(3);

myservo2.write(70);

delay(500);

myservo2.detach();

}

else if ((bfrequency>-300) && (bfrequency<60) && (rfrequency>0) && (gfrequency<-50) )

{

r++;

Serial.println("red");

myservo2.attach(3);

myservo2.write(90);

delay(500);

myservo2.detach();

}

else if ((bfrequency<-200) && (rfrequency>-260)&& (rfrequency<-110) && (gfrequency>-350 )&& (gfrequency<-150 ) )

{

p++;

Serial.println("mov");

myservo2.attach(3);

myservo2.write(110);

delay(500);

myservo2.detach();

}

else

{

Serial.println("NULL");

myservo2.attach(3);

myservo2.write(130);

delay(500);

myservo2.detach();

}

Serial.print("b=");

Serial.print(bfrequency);

Serial.print(" ");

Serial.print("r=");

Serial.print(rfrequency);

Serial.print(" ");

Serial.print("g=");

Serial.print(gfrequency);

Serial.print(" "); // put your main code here, to run repeatedly:

Serial.print(" ");

Serial.print("y=");

Serial.print(y);

Serial.print(" ");

Serial.print("g=");

Serial.print(g);

Serial.print(" ");

Serial.print("r=");

Serial.print(r);

Serial.print(" ");

Serial.print("o=");

Serial.print(o);

Serial.print(" ");

Serial.print("p=");

Serial.print(p);

Serial.print(" ");

int suma=y+g+o+p+r;

Serial.print("suma=");

Serial.print(suma);

Serial.print(" ");

Serial.print(var);

lcd.setCursor(0,0);

lcd.print(" ");

lcd.setCursor(0,1);

lcd.print(" ");

lcd.setCursor(0,0);

lcd.print("O=");

lcd.print(o);

lcd.setCursor(5,0);

lcd.print("G=");

lcd.print(g);

lcd.setCursor(11,0);

lcd.print("Y=");

lcd.print(y);

lcd.setCursor(0,1);

lcd.print("R=");

lcd.print(r);

lcd.setCursor(5,1);

lcd.print("P=");

lcd.print(p);

lcd.setCursor(10,1);

lcd.print("Su=");

lcd.print(suma);

myservo.attach(9);

for (pos = 87; pos >= 50; pos -= 1) {

myservo.write(pos);

delay(2);

}

delay(1000);

myservo.detach();

if (button==LOW)

{

pornire=0;

}

}

}

Similar Posts