Aplicatie de Sortare Realizata cu Arduino
Aplicație de sortare realizată cu Arduino
Introducere
Noțiunea de automatizare în cadrul domeniului industrial actual reprezintă un concept cheie al oricărui proces de producție. Automatizarea proceselor industriale aduce cu sine creșterea productivității și siguranței în operare. De asemenea, creșterea gradului de autonomie a proceselor aduce cu sine o ușurare a muncii depuse de operatorii implicați în producție.
În contextul actual al dezvoltării industriale, inginerii tehnologi lucrează îndeaproape cu inginerii automatiști pentru a găsi noi soluții de aplicare a tehnicilor din automatică pentru a eficientiza procesele de producție și a spori gradul de siguranță în operare a echipamentelor.
Sistemele de conducere automată, pe scurt sistemele automate, sunt un tip particular de sisteme al căror scop este să funcționeze bine, fără intervenția omului, realizând anumite performanțe în diferite regimuri de funcționare: urmărirea unui program sau a variației unei valori de referință, reglarea pentru înlăturarea perturbațiilor, filtrarea zgomotelor, sau insensibilitatea la variația parametrilor procesului condus de instalație.
Sistemele automate au elemente și structuri specifice. Un sistem automat tipic este format din următoarele elemente sau componente:
1. elemente de conducere (automate, termostate, presostate, regulatoare, controlere, calculatoare, etc.);
2. elemente de execuție (servomotoare, pompe, robinete, rezistoare, etc.);
3. elemente de măsură (traductoare, detectoare);
4. elemente conduse (echipamente, instalații, procese).
Elementele componente ale sistemului automat pot fi de natură termică, hidraulică, electrică, mecanică, chimică sau pneumatică. Principalele probleme referitoare la sistemele automate sunt: analiza, sinteza, testarea, optimizarea, identificarea și proiectarea.
Tema proiectului
În cadrul acestei lucrări este prezentată modalitatea de abordare pentru rezolvarea unei probleme de automatizare a producției aplicând tehnici din automatică asupra procesului de sortare a unor bile după culoarea acestora. Pentru realizarea acestui proiect am utilzat următoarele componente:
Arduino uno
4 Servo motoare 9G
1 senzor de culoare TCS3472
Structura lucrării
Lucrarea este structurată după cum urmează:
În capitolul de introducere se regaște o scurtă descrire despre porcesele de automatizare și câteva studii actuale în domeniul proiectului.
În capitolul doi se prezintă câteva aspecte privind aplicațiile industriale de sortare și componentele de baza, exemplificate prin imagini.
În capitolul trei este descrisă proiectare unei aplicații de sortare impreună cu componentele necesare pentru aceasta. Tot în acest capitol sunt descrise individula și exemplificate componentele sistemeului de sortare proiectat de mine.
Capitolul patru cuprinde descrierea si funcționare unei aplicții de sortare implementată pe microcontrolerul Arduino. În acest capitol mai sunt descries conesiunile fizice și sistemul de programare software.
În ultima parte a proiectului se află capitolul concluzii in care sunt enumerate câteva posibilităție de dezvoltare ulterioară a sitemul de sortare
Aspecte privind aplicații industriale de sortare
Prin sortare se înțelege în general ordonarea unei mulțimi de elemente, cu scopul de a facilita căutarea ulterioară a unui element dat. Sortarea este o activitate fundamentală cu caracter universal. În zilele noastre majoritatea intreprinderile și uzinele caută să utilizeze această metodă pentru un randament mai bun.
În industrie există mai multe metode de sortare:
Sortare prin comparare
Sortare prin aflarea minimului
Sortare prin numărare
Sortare prin inserție directă
Sortare prin inserție binară
O dată cu progresul omenirii, tehnolgia caută să facă față tuturor progreselor din toate deminiile inclusiv cele de sortare a diferitelor materiale. Cerințele umane fiind tot mai mari, au făcut ca tehnologia să fie adaptată acestora. Un pas spre realizarea acestora, sunt sistemele de sortare automată implementate în diferite tipuri de activitate.
Câteva exemple în care se aplică sortara industrială:
Stație de sortare deșeuri
Stație de sortare pietriș
Stație de sortare și procesare ouă
Stație de sortare medicamente
Stație de sortare produse metalice
Stație de sortare colete
Stație de sortare și ambalare fructe
Pentru a ușura munca umană in sortarea oualor, un domeniu migălos si solicitant, a fost implementat un sistem autormat de sortare a acestor, după cum se vede in urmatoarea figura.
Figura 2.1. Stație de sortare ouă
Stația de sortare a ouălor din figura 2.1. este prevazuta cu două metode de sortare diferite:
După marimea acestora(mari, mici);
După culoare(albe, galbene )
Un alt domeniu care a solicitat implementarea unui sistem de automatizare este domeniul telefoniei mobile.
În figura de mai jos avem prezentat un sistem de sortare, etichetare si paletizare a cartelelor prepay
Figura 2.2. Utilaj pentru sortare, etichetare si paletizare
Schema general
Schema din figura 2.1 reprezintă un sistem automat de sortare generalizat alcătuit din PC (unitate de procesare) care preia valori de la senzori și de la automat programabil (controler), acesta le prelucrează, apoi acționează asupra elementului de execuție.
Figura 2.1 Schemă generala a aplicațiilor de sortare
Pc sau unitatea de stocare este locul unde sunt implementate programele, de unde pleacă toate comenzile și tot aici se întorc toate răspunsurile și valorile primite de la senzori controller sau alte componente. Are un rol important în acest proces deoarece face legatura între componete și utilizator, permițându-i acestuia să controleze și să programeze întregul sistem.
Automatele programabile, microcontrollerele, regulatoarele au funcția de a comanda elementul de execuție și de ai răspunde comenzilor primite de la pc sau unitatea de procesare. Acestea comunică și cu senzorii care trimit valori spre interpretare pentru controlul elementului de execuție.
Proiectarea unei aplicații de sortare
Schema bloc
ÎN FIGURA 2.1 SE PREZINTĂ SCHEMA BLOC ………
Figura 3.1. Schema bloc a aplicației de sortare
MAI POȚI ADĂUGA UN CHENAR PE CARE SĂ PUI INSTALAȚIE TEHNOLOGICĂ DE SORTARE
La acest capitol aș avea nevoie de cateva indicați.
KIT DE DEZVOLTARE ARDUINO
Arduino este o platformă gratuită destinată celor pasionați de electronică, studenți și ingineri din domeniu dar și celor care doar au ca hobby construirea de montaje electronice. Arduino este atât un produs software cât și un concept, extinzând conceptul open source și asupra realizărilor tehnice concrete.
Partea de software a platformei este integrată într-o interfață grafică de tip IDE bazată pe limbajul de programare processing. Programarea controllerului de pe platforma fizică se face folosind limbajul de programare Arduino. Proiectele fizice realizate pe platformele Arduino pot funcționa de sine stătător dar pot și interacționa cu aplicații care funcționează pe un calculator precum Flash, Processing, MaxMSP.
Mediul integrat de dezvoltare Arduino este destinat scrierii programelor ce pot fi
încărcate pe platformele fizice Arduino. Interfața este scrisă în Java și mediul de programare folosește limbaje de programare de tip open source precum Processing, avr-gcc. Interfața este multiplatformă, putând rula în Windows©, Mac OS X© și Linux. Programul poate fi obținut atât ca executabil specific platformei de lucru dar și sub formă de cd sursă care se poate compila conform condițiilor specifice.
Pe scurt, platforma hardware este o placă (de test, de circuit imprimat, etc.) de diferite forme fizice și design care are ca element central un circuit integrat programabil. Atât placa de bază cât și circuitul integrat programabil pot fi diferite.
Figura 3.2. Platforma de dezvoltare Arduino uno
Specificații tehnice ale plăcii de dezvoltare:
MAI POȚI ȘI FORMULA PRINTRE ELE NIȘTE PROPOZIȚII (EX. PRINCIPALELE CARACTERISTICI TEHNICE ……)
Microcontroller: ATmega328
Tensiune de lucru: 5V
Tensiune de intrare (recomandată): 7-12V
Tensiune de intrare (limită): 6-20V
Pini digitali: 14 (6 PWM output)
Pini analogici: 6
Intensitate de ieșire: 40 mA
Intensitate de ieșire pe pinul de 3.3V: 50 mA
Flash Memory 32 KB (ATmega328) 0.5 KB pentru bootloader
SRAM: 2 KB (ATmega328)
EEPROM: 1 KB (ATmega328)
Clock Speed: 16 MHz
Schema bloc a platformei Arduino
Figura 3.3. Schema bloc a platformei Arduino
SCHEMA BLOC A PLĂCII DE DEZVOLTARE DIN FIGURA 2.2 EVIDENȚIAZĂ …..
Aceasta schemă exemplifică comunicația între componentele de pe placa Arduino
precum și principalele componente.
Funcții și facilități
Funcțiile si posibilitățile de dezvoltare a proiectelor pe placa Arduino sunt multiple.
Un proiect bazat pe platforma Arduino constă din mai multe module conectate între ele. Modulele pot fi categorisite în funcție de diverse criterii, iar în continuare vor fi prezentate modalități de conectare cu diverse module la platforma de dezvoltare.
Această platformă de dezvoltare este o placă electronică ce conține microcontroller-ul („creierul”) programabil. Deoarece platforma Arduino este open source, sunt disponibile platforme Arduino originale, fabricate în Italia. Există mai multe modele de astfel de platforme, modele care diferă atât în ceea ce privește capabilitățile cât și în ceea ce privește dimensiunile fizice. Totuși limbajul de programare, mediul de dezvoltare și interconectarea diverselor module sunt practic identice, indiferent de modelul specific al platformei.
-Module de intrare – numite și senzori, acestea sunt module care se conectează la
platforma Arduino pentru a trimite date către aceasta (de exemplu butoane, senzori de
temperatură, senzori de distanță, potențiometre etc.)
-Module de ieșire – acestea sunt module care se conectează la platforma Arduino pentru a permite acesteia să transmită informații către lumea exterioară. Acestea pot fi relee, afișaje, difuzoare etc.
-Modulede date – modulele de date permit platformei Arduino să comunice direct cu alte dispozitive digitale (inclusiv cu alte module Arduino). Modulele de date pot fi
module Ethernet, care permit comunicația prin Internet sau printr-o rețea locală,
module radio, care pot comunica cu computere sau alte platforme Arduino, module
USB, module GSM.
Accesorii- acestea nu sunt în general considerate module Arduino, însă sunt o parte uzuală a proiectelor de acest gen. Există diferite accesorii, de la soluții de alimentare cu curent electric până la cele mai diverse accesorii.
Mediul de dezvoltare
Un mediu de dezvoltare este un set de programe care ajută programatorul în scrierea programelor și combină toți pașii necesari creării unui program (editarea codului sursă, compilarea, depanarea, testarea, generarea de documentație) într-un singur soft care, de regulă, oferă o interfață grafică prietenoasă. Principalele componente ale unui mediu de dezvoltare sunt editorul de cod sursă și debugger-ul.
Placa hardware Arduino este programată utilizând un limbaj foarte similar cu C / C++.De fapt, mediul este bazat pe această extensie Java (Processing) și celebrul compilator gcc (GNU C Compiler din mediul Linux, care rulează în fundal). Limbajului i s-au adus câteva simplificări și modificări, respectiv constituie un mediu de dezvoltare integrat (IDE).
Arduino este simplu pentru începători, dar este însă foarte bun și pentru profesioniști,
aceștia putând programa în C++ sau o combinație între limbajul Arduino și C++. Conceptul este unul de mare succes, comunitatea este numeroasă și foarte puternică și în acest sens există mii de proiecte ce pot fi utilizate pentru inițiere, nefiind practic domenii în care entuziaștii Arduino să nu fi abordat deja aplicații.
Plăcile de dezvoltare Arduino se bazează pe comunicarea USB, iar o soluție foarte
cunoscută este utilizarea chip-urilor FTDI (FT232). Deoarece în regim de amator nu este
comodă realizarea cablajelor pentru lipire de dispozitive SMD (surface-mounted device), o
idee la îndemână este utilizarea unui “clasic” modul de dezvoltare USB, numit FT232RL.
Între timp, există soluții mai noi, mai simple și mai moderne. În rest, de-a lungul timpului,
mai multe MCU din gama AVR cu memorii Flash din ce în ce mai mari, au fost folosite
(ATMega 8 / 168 / 328, apoi ATMega 1280 / 2560).
În privința plăcilor de extensie, conceptul (Arduino) se bazează pe așa-numitele “shield”-uri. Acestea sunt plăci cu conectoare mamă cu pini lungi (aliniate cu cele ale plăcii “de bază”), care se pot plasa deasupra plăcii Arduino. Rezultă un avantaj în privința spațiului și un design foarte compact.
Kitul software de dezvoltare Arduino
Pentru realizarea aplicației software se va descarca programul Arduino de pe site-ul official (http://arduino.cc/en/Main/Software), versiunea 1.0.5 este disponibilă pentru sisteme de operare Windows, Mac OS si Linux
Odată ce programul a fost instalat va trebui să se copieze librăriile care sunt folosite de senzor de culoare si servomotoare.
Biblioteca pentru senzorul de culoare este: Adafruit_TCS34725
Biblioteca pentru servomotoare este: Servo.h
In figura de mai jos este exemplificat cum se realizează verificarea și transferul codului pe placa de dezvoltare:
Figura 3.4. Verficarea și încarcarea codului
SISTEMUL SENZORIAL
Senzorul este definit ca fiind un dispozitiv care detectează sau măsoară unele proprietăți sau condiții și înregistrează informația primită. Senzorii au funcția de a converti un stimul într-un semnal măsurabil, cuprinzând atât traductorul, care transformă mărimea de intrare în semnal electric util, cât și circuite pentru adaptarea și conversia semnalelor. Stimulii pot fi mecanici, termici, electromagnetici, acustici sau chimici la origine, în timp ce semnalul măsurabil este tipic de natură electrică.
Alegerea senzorilor trebuie făcută ținând cont de domeniul în care variază mărimea
măsurată, de dimensiunile ce trebuie respectate, de condiții speciale de mediu sau de lucru, de tipul mărimii de ieșire și nu în ultimul rând de cost.
Astfel, varietatea de mărimi fiind mare, se găsesc senzori distanță, poziție, umiditate, magnetic, gaz, optici, vibratie, ultrasunete, capacitive.
Figura 3.5. Tipuri de senzori
Caracteristicile senzorilor:
Principalele caracteristici ale senzorilor pot fi definite prin următorii parametrii:
Domeniul de utilizare
Sensibilitatea (rezoluția)
Precizia
Timpul de răspuns
Durata de viață
Costul
Stabilitatea
Senzorul de culoare RGB TCS34725
Senzorul este dotat cu un filtru IR (infla roșu) in capsula de sezor, acesta este localizat în așa fel încât fotodiodele care citesc culorile sa fie direcționate spre filtru, pentru a minimiza componenta spectrală infra-roșie a luminii de intrare din înprejurime, astfel detectarea culorii este făcută cu o acuratețe mare. Alt factor care influențează acuratețea masurării culorilor este distanța dintre senzor și suprafața de unde este citită culoarea.
Figura 3.6. Senzor de culoare RGB -TCS34725
Acest senzor fiind dotat cu filtrul IR permite detectarea luminii ambientale, care în ultima perioadă este utilizat într-o gama largă de telefoane mobile, tablete, notebook-uri și televizoare care au funcția de a-și autoregla luminozitatea displeiului.
Schema electric a senzorului TCS3472
Figura 3.7 Schema electrică senzorului de culoare
În figura 3.7. se poate vedea schema electrică a senzorului de culoare. Acesta este realizat cu un traductor color TCS34725. Se mai poate observa și un led alb care are ca scop diminuarea nuanțelor de lumină captate din mediul înconjurător. LED-ul ajută la micșorarea erorilor de citire. Inițial ledul este reglat la intensitate maximă, însă aceasta se poate regla prin primul pin al modulului de senzor RGB și anume pinule “LED”.
Servomotoare
Elementul de antrenare din cadrul elementului de execuție este un servomotor electric de curent continuu, de curent alternativ de tip sincron sau asincron. Din punct devedere constructiv servomotorul prezintă o serie de particularități care urmăresc în principal obținerea unor performanțe dinamice cât mai bune. Datorită regimurilor specifice de funcționare datele nominale principale (parametrii de bază) sunt diferite față de cele ale mașinilor electrice uzuale
Servosistemele (sau servomecanismele) reprezintă sisteme automate care au ca parametru reglat o marime de natură mecanică cum ar fi cuplul (forța), accelerația, viteza sau poziția. În majoritatea cazurilor denumirea de servosistem se referă la un sistem automat de reglare a poziției. În mod elementar se poate spune că un servomecanism este un mecanism automatizat care “servește” pentru obținerea unei anumite deplasări, interpunându-se între mâna omului și obiectul care trebuie deplasat. Servosistemele electrice sunt sisteme de reglare automată a mărimilor mecanice, care utilizează, pentru antrenarea obictului reglat, mașini electrice speciale numite servomotoare.
Figura 3.6. Servomotor
Servomotorul este un element component al unui sistem care funcțional implică poziții relative reglabile între anumite elemente componente ale sale. Acesta poate avea pozițtie fixă, blocat pe sistem în imediata lui apropiere sau poate fi continut în subsistemul unui element cu poziție reglabilă.
Puterea servomotorului determină viteza de modificare a poziției reletive și frecvența de modificare a poziției relative, astfel puterea servomotorului este invers proporțională cu nivelul de precizie al acestuia.
Soluția tehnică care definește servomotorul, implică soluții constructive simple, care funcțional, impun un consum redus de energie, o cinematică definită de mișcări lineare, circulare sau combinări, având o arie largă de aplicabilitate, fiind concepută pentru o multitudine de sisteme, prin aceasta inducând soluțiile tehnice și constructive pentru sistemele în care este agreat funcțional, rezultatul global fiind soluții constructive compacte, modulate, interschimbabile, standardizate pentru servomotoare.
Compnentele unui servomotor:
circuit de comnada;
motor;
ax iesire;
angrenaj;
carcasă;
potențiometru;
Figura 3.7. Componentele unui servomotor
Servo motorul conține 3 fire:
– negru – reprezintă masa
-roșu – alimentarea
-galben – se utilizează pentru transmiterea semnalului de comandă.
Micro servomotorul 9G
Micro servomotorul 9G este un servo cu o putere mare de ieșire, acesta se poate roti aproximativ 180 0, 900 în fiecare direcție și functionează la fel ca servomotoarele normale doar că are dimensiuni reduse.
Figura 3.8 Micro servomotor 9G
Principale caracteristici ale micro servomotorului 9G sunt urmatoarele:
Greutate: 9g
Dimensiune: 22.2 x 11.8 x 31 mm approx
Cuplu: 1.8kg/cm
Viteză de rotație: 0.1s/600
Tensiune de alimentare: 4.8v(~5v)
Mișcările servo motoarelor sunt realizate pe baza unor impulsuri, iar în funcție de acestea sunt determinate pozițiile fiecărui servo motor, după cum se observă în figura 3.9.
Figura 3.9. Poziția servomotoarelor în funcție de impulsurile transmise
Tehnologii de realizare grafică(medii de dezvoltare grafice)
Orice sistem de operare deține o interfață prin intermediul căreia realizează comunicarea cu operatorul uman. Primele sisteme de operare aveau interfețe foarte simple, formate dintr-un set mic de comenzi de bază. Spre exemplu, CP/M, un sistem destinat microcalculatoarelor cu procesoare pe 8 biți avea aproximativ 5 comenzi. Odată cu trecerea timpului, interfețele dintre sistemele de operare și utilizator au devenit din ce în ce mai complexe, oferind mai multe facilități și ușurând munca de configurare și întreținere a calculatoarelor pe care le deservesc.
Interfețe software.
Acestea sunt reprezentate de sisteme de programe care, sub o formă sau alta, inițiază și întrețin un dialog cu utilizatorul calculatorului, în scopul utilizării și / sau configurării acestuia. Ele formează cvasitotalitatea interfețelor cu utilizatorul, incluse în sistemele de operare, deci ne vom ocupa numai de ele.
Interfețele software pot fi:
Monitoare. Unele calculatoare conțin, stocat într-o memorie ROM internă, un program numit monitor, care se lansează automat la pornirea calculatorului și îi permite utilizatorului să efectueze operații simple asupra sistemului de calcul, cum ar fi: inspectarea și modificarea regiștrilor procesorului, vizualizarea și alterarea conținutului memoriei etc. De obicei, programul monitor pornește în cazul în care nu a putut fi încărcat sistemul de operare.
Interfețe în linie de comandă (sau interfețe text). Acestea sunt reprezentate, în general, de un program numit interpretor de comenzi, care afișează pe ecran un prompter, primește comanda introdusă de operator și o execută. Comenzile se scriu folosind tastatura și pot fi însoțite de parametri. Aproape toate sistemele de operare includ o interfață în linie de comandă, unele foarte bine puse la punct (cazul sistemelor Unix) iar altele destul de primitive (MS-DOS și MS-Windows).
Interfețe grafice. Sunt cele mai populare interfețe cu utilizatorul și se prezintă sub forma unui set de obiecte grafice (de regulă suprafețe rectangulare) prin intermediul cărora operatorul poate comunica cu sistemul de operare, lansând aplicații, setând diferite opțiuni contextuale etc. Dispozitivul cel mai folosit în acest caz este mouse-ul, de aceea acest tip de interfață este utilă în primul rând utilizatorilor neexperimentați și neprofesioniștilor.
Interfețele bazate pe web (web user interfaces – WUI) acceptă intrări și furnizează ieșiri prin generarea de pagini web care sunt transmise via Internet și vizualizate de utilizator cu ajutorul unui browser web. Implementările mai noi folosesc Java, Ajax, Abobe Flex, Microsoft .NET sau alte tehnologii similare pentru a asigura control în timp real într-un program separat, eliminând nevoia de “refresh” a browsere-lor web bazate pe HTML.
Pentru creerea unei interfețe de programare se pot folosi mai multe medii de programare. Câteva exemple sunt:
Visual Studio
MATLAB GUIDE (Graphical User Interfaces Development Environment)
CVI
Scada (Supervisory Control and Data Acquisition)
Visual Studio
Microsoft Visual Studio este un mediu de dezvoltare integrat (integrated development environment-IDE) de la Microsoft. Acesta poate fi folosit pentru a dezvolta aplicații consolă și aplicații cu interfață grafică pentru toate platformele suportate de Microsoft Windows (ex..NET Framework, Windows Mobile etc).
Figura 3.10. Microsoft Visual Studio 2008
Microsoft Visual Studio oferă editor, compilator/debugger și mediu de proiectare (designer) pentru mai multe limbaje de programare. Limbaje de programare incluse: Microsoft Visual C++, Microsoft Visual C#, Microsoft Visual Basic, Microsoft Visual Web Developer, Team Foundation Server.
Figura 3.11. Microsoft Visual Studio 2008, medii de programare
Utilizând „Windows Forms Application” se proiectează interfața, generându-se în mod automat funcții „callback” pentru fiecare buton de pe interfață. Utilizatorul definește comenzile care trebuie executate în urma apăsării unui buton.
De exemplu, liniile de cod de mai jos aparțin funcției generată de plasarea unui buton pe interfață.
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
} } }
Figura(3.2) reprezintă un exemplu de interfață în care am introdus câte un „button1”, „check Box1”, „ radioButton1” și un „text box”. Și după cum se poate observa în meniul din partea stângă există o varietate de componente care se pot utiliza.
Figura 3.12 Interfața Visual Studio
Limbajul C#
Limbajul C# a fost dezvoltat de o echipă de ingineri de la Microsoft în frunte cu Anders Hejlsberg (autorul limbajului Turbo Pascal și membru al echipei care a proiectat Borland Delphi).C# este un limbaj simplu, cu circa 80 de cuvinte cheie și 12 tipuri de date predefinite. El permite programarea structurată, modulară și orientată obiectual, conform perceptelor moderne ale programării profesioniste. Principiile de bază ale programării orientate pe obiecte (încapsulare, moștenire, polimorfism) sunt elemente fundamentale ale programării C#.
La baza acestuia stă limbajul C dar sunt preluate și principiile de programare din C++. Sintaxa este apropiată și limbajului Java.
Au fost adăugate o serie de tipuri noi de date sau funcțiuni diferite ale datelor din C++, iar în spiritul realizării unor secvențe de cod sigure (safe), unele funcțiuni au fost adăugate (de exemplu, interfețe și delegări), diversificate (tipul struct), modificate (tipul string) sau chiar eliminate (moștenirea multiplă și pointerii către funcții). Unele funcțiuni (cum ar fi accesul direct la memorie folosind pointeri) au fost păstrate, dar secvențele de cod corespunzătoare se consideră „nesigure”.
În momentul în care Microsoft a decis să susțină și să dezvole C# s-a hotărât ca acesta să aibă o legatură deosebită cu mediul sau de rulare, arhitectura .NET. Pe de o parte, C# a fost dezvoltat pentru crearea codului pentru arhitectura .NET, iar pe de altă parte bibliotecile utilizate de C# sunt cele ale arhitecturii .NET. Atunci când este compilat un program C#, rezultatul compilării nu este un cod executabil ci se se produce un fișier
într-un limbaj. Acest fișier IL poate fi copiat în orice calculator care dispune de .NET CLR, prin intermediul compilatoruluiJIT (Just In Time), motorul comun de pogramare transformă codul intermediar în cod executabil.
.
Aplicație de sortare implementată pe microcontrolerul Arduino
În acest capitol este prezentat modul de realizare al sistemului de sortare, folosind kit-ul de dezvoltarea Arduino Uno prin descrierea celor două componente:
proiectarea și executarea părții hardware (schema de conectare a componentelor)
realizarea aplicației software
Figura 4.1.Sistem de sortare
Arhitectura sistemului de sortare
Figura 4.2. Arhitectura sistemului de sortare
În figura 4.2 se prezintă arhitectura sistemului iar în continuare vor fi explicate blocurile și importanța lor în sistem.
Chitul de dezvoltare Arduino uno comunică cu toate perifericele sitemului de sortare. Acesta este conectat cu interfața, de unde primește comenzi de la utilizator, care poate alege modul de sortare.
Aplicație Hard
Pentru realizarea părții hardware sunt folosite următoarele component:
Platforma de dezvoltare Arduino
Senzor de culoare RGB TCS34725
4 microservomotoare 9G
PC
Conexiunile fizice între chitul de dezvotare și PC se face cu ajutorul un cablu USB setându-se viteza de comunicație (numită și debit binar) și viteza de modulație
Chitul de dezvoltarare comunicăa cu cele patru servomotoare prin semnale PWM astfel:
servomotor 1-pin 3
servomotor 2-pin 5
servomotor3-pin 6
servomotor4-pin 9
Figura 4.3. Conectare servomotor-Arduino
Comnada servomotoarelor se face astfel:
Servo myservo;
int pos = 0;
void setup()
{
myservo.attach(9);
}
void loop()
{
for(pos = 10; pos < 150; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 150; pos>=10; pos-=1)
{
myservo.write(pos);
delay(15); } }
Cele patru servomotoare sunt alimentate și legate la masă tot pe placa de dezvoltare Arduino la pini 5v respectiv GND. Deoarce placa Arduino Uno are doar o singura ieșier de 5 v am multiplicat-o la fel și cea de masă. Fiindcă servomotoarele nu funcționează simultan, ci doar alternator, chitul de dezvoltare nu are nevoie de alimentare externă fiind suficientă alimentarea prin cablul USB.
Figura4.4 Schema de conectare servomotor-arduino
La fel ca și servomotoarele, senzorul de culoare TCS34725 comunică tot cu chitul de dezvoltare Arduino, de unde este alimentat și unde transmite valorile recepționate. Acest senzor de culoare are cinci parametri care se modifică în funcție de valorile recepționate. Acestea sunt:
Color Temp
Lux
Red (R)
Green (G)
Blue (B)
În funcție de acești parametri microcontroller-ul interpretează culoarea obiectelor aflate în raza de acțiune a senzorului de culoare și comandă servomotoarele pentru sortarea acestora.
Roșul este culoarea cea mai ușor de măsurat . Verde și albastru au valori mai apropiate și poate fi imposibil de distins dacă eșantionul de culoare este prea departe de senzor, de aceea am ales sa folosesc ca și culori prestabilite pentru sortare roșu, albastru și alb
Figura 4.5. Răspunsul fotodiodel spectrale
Pentru realizarea conexiunilor fizice între senzorul de culoare si placa de dezvoltare am folosit pinii SCL (serial clock) și SDA (serial data) conectații la pini analogi A4 respectiv A5 ai plăcii de dezvoltare
În acest proiect am setat microcontroller-ul ca pentru urmatoare valori:
Color Temp: “5731 K – Lux: 552 – R: 895 G: 891 B: 770 C: 2485” citețe de la senzorul de culoare, să știe ca în raza de acțiune a acestuia nu se află nici un obiect, sau obiectul are culoare necunoscută și nu participă la sistemu de sortare implementat.
Pentru următoarele valori „Color Temp: 6885 K – Lux: 517 – R: 853 G: 877 B: 806 C:2475” am setat microcontroller-ul să interpreteze că în raza de acțiune se află un obiect de culoare albastră, această culoare fiind predefinită să participe la sistemul de sortare.
După citirea culori, microcontroller-ul comandă servomotoarele setate pentru a sorta această culoare pe poziția necesară. Ciclul se repeta pentru culorile roșu și alb fiecare dintre ele având la fel ca celelate două cazuri valori citite de senzorul de culoare, și anume pentru roșu valorile „Color Temp: 4264 K – Lux: 467 – R: 1152 G: 897 B: 784 C: 2709” iar pentru alb “Color Temp: 5240 K – Lux: 814 – R: 1343 G: 1298 B: 1090 C: 3669 „
Pentru ca microcontroller-ul să poată difernția aceste valori, am introdus următoarele secvențe de cod:
void citeșteCuloarea(void) {
uint16_t r, g, b, c, colorTemp, lux;
tcs.getRawData(&r, &g, &b, &c);
colorTemp = tcs.calculateColorTemperature(r, g, b);
lux = tcs.calculateLux(r, g, b)ș
//citirea culorilor
if ((r<1000) && (g<1000) && (b<1000)) {
if (colorTemp < 7200) mycolor = 0; //gol
if (colorTemp >= 7200) mycolor = 2; //albastru
}
if ((r>1000)&&(g<1000)&&(b<1000)) mycolor = 3; //rosu
if ((r>1000)&&(g>1000)&&(b>900)) mycolor = 4; //alb
}
Conectarea fizică a senzorului de culoare și chitul de dezvoltare este făcută după cum urmează în figura:
Figura 4.6. Schema de conectare senzor de culoare-arduino
Aplicație software
În primă fază utilizatorul trebuie să seteze conexiunea prin alegerea portului de comunicare între Pc (interfață) și chitul de dezvoltare Arduino.
Programul este structurat în trei stări:
Starea “a” sau starea ințială este starea în care programul intra automat după deschiderea portului de comunicare
Figura 4.3. Setarea conexiunii
Starea ințiala a programului constă în realizarea conmunicării între PC și chitul de dezvoltare, reglarea servomotoarelor în pozițiile de start și anume: primul servomotor cu tija introdusă în totalitate iar celelalt trei cu tijele retrase.
Pentru realizarea acestei stări am folosit următoarele secvențe de cod:
if (stare == 'a') {
if (Serial.available() > 0)
stare = (char)Serial.read();
myservo1.write(110);
myservo2.write(20);
myservo3.write(20);
myservo4.write(20);
stopc = 'a';
În momentul în care starea ințială devine activă, butonele “Start Sortare definita” și “ Start Sortare aleatorie” se activează și permit utilizatorului să selecteze una dintre cele 2 metode de sortare.
Sortare definta constă în faptul ca programul așteaptă ca utilizatorul să introduca în casuțele din față tabelelor colorate numărul de bile dorite spre a fi sortate.
Figura 4.4 Sortare defintă
După completarea celor trei câmpuri și apăsarea butonului “Start Sortare definita” PC trimite microcontrolle-uli comanda dorită de utilizator, acesta comută din starea ințială în starea “b” și anume starea în care începe sortarea defintă
. Pentru aceasta am folosit următoarea secvență de cod:
private void button1_Click(object sender, EventArgs e)
{
int nr_rosi, nr_albastri, nr_albi;
nr_rosi = Convert.ToInt32(numericUpDown1.Value);
nr_albastri = Convert.ToInt32(numericUpDown2.Value);
nr_albi = Convert.ToInt32(numericUpDown3.Value);
stare = 'b';
this.serialPort1.Write(stare.ToString());
this.serialPort1.Write(nr_rosi.ToString());
this.serialPort1.Write(nr_albastri.ToString());
this.serialPort1.Write(nr_albi.ToString());
După comutarea microcontrolle-uli din stare ințială în satarea de sortare defintă, acesta citește și prelucrează valorile trimise de senzorul de culoare, pentru a afla nuanța primei bile. Dacă aceasta este selectată de utilizator spre a fi sortată se acționează servomotoarele necesare pentru a fi direcționată spre tubul destinat colorii respective. Dacă numărul introdus de bile sprea a fi selectat, de o anumită culoare, a fost atins, atunci microcontrolle comandă servomotoarele în așa fel încât la întâlnirea unei bile de culoarea respectivă, să o direcționeze spre rezervorul din partea inferioară a standului.
Figura 4.5 Diagrama fazorială
Codul sursă pentru a crea această stare de sortare defintă este:
if (stare == 'b') { //starea când sortează numărul introdus
while (contor <= 3) {
if (Serial.available() > 0) {
if (contor == 3) {
inChar = Serial.read();
if (isDigit(inChar)) {
inString += (char)inChar;
}
valoare = inString.toInt();
inString = "";
contor++;
for (int i=1; i<=valoare; i++) {
nr_albi++; } }
if (contor == 2) {
inChar = Serial.read();
if (isDigit(inChar)) {
inString += (char)inChar;
}
valoare = inString.toInt();
inString = "";
contor++;
for (int i=1; i<=valoare; i++) {
nr_albastri++; } }
if (contor == 1) {
inChar = Serial.read();
if (isDigit(inChar)) {
inString += (char)inChar;
}
valoare = inString.toInt();
inString = "";
contor++;
for (int i=1; i<=valoare; i++) {
//Serial.print("Test rosi. ");
nr_rosi++; } }
Când toate sortările impuse de utilizator au fost realizate, în interfața programul se afișează un tabel cu mesajul “sortare finalizată” și programul este comutat automat în starea ințială și anume starea “a”.
Va fi inlocuita la facultate
Figura 4.6 Finalizarea sortării definite
După revenirea programului in starea ințială “a” utilizatorul are posibilitatea din nou de a alege metoda de sortare dorită. Poste să reia sortarea defintă sau poate alege a doua metoda de sortare si anume sortarea aleatorie.
Sortarea aleatorie constă în faptul ca programul nu mai aștaptă de la utilizator un numar exact de bile spre a fi sortate, acesta executa o sortare pe baza culori bilelor pană la golirea rezervorului.
Figura 4.7 Sortare aleatorie
Metoda de sortare aleatorie, este la fel ca celelalte doua metode, definte printr-o stare, si anume starea “c”. În momentu apasari butonului “Start sortare aleatori” interfata ii trimite microntrolerului o secventa de cod prin care ii transmite acestuia starea dorita de utilizator. Realizarea acestei comenzi se realizează cu urmoarele lini de cod:
private void button5_Click(object sender, EventArgs e)
{
stare = 'c';
serialPort1.Write("c");
textBox2.Text = "0";
textBox3.Text = "0";
textBox4.Text = "0"; }
Acesta metoda de sortare mai poate fi oprita prin apasarea butonuli “Stop” care comuta automat programul in starea ințială “a” și resetează cele trei textboxu-ri în care au fost afisate numarul de bile sortate din fiecare culoare. La apasarea butonului Stop interfata transmite microntroller-lui un caracter “s”, dupa care butonu devine inactive.
private void button6_Click(object sender, EventArgs e)
{
button6.Enabled = false;
button5.Enabled = true;
serialPort1.Write("s");
stare = 'a';
textBox2.Text = "0";
textBox3.Text = "0";
textBox4.Text = "0";
}
La fel ca si interfata microntroller-ul interpreteaza caracterel primite si execut[ comenzile programate pentru fiecare dintre acestea. Pentru starea “c” acesta este programat astfel:
if (stare == 'c') { //starea cand numara sortarea
citesteCuloarea();
if (Serial.available() > 0)
stopc = Serial.read();
if (stopc != 's') {
if (mycolor == 2){
//Serial.println("Albastru");
bagaAlbastru();
nr_ab_c++;
Serial.print(String("albastre"));
Serial.println(String(nr_ab_c));
}
if (mycolor == 3){
bagaRosu();
nr_r_c++;
Serial.print(String("rosii"));
Serial.println(String(nr_r_c));
}
if (mycolor == 4){
bagaAlb();
nr_al_c++;
Serial.print(String("albe"));
Serial.println(String(nr_al_c)); }
} //end stare c
Urmatoare secventa de cod defineste condițea de oprire la apasarea butonului “Stop”
else {
stare = 'a';
nr_r_c = 0;
nr_ab_c = 0;
nr_al_c = 0;
}
Diagrama de stare a programului
Start
DA NU
CONCLUZII
BIBLIOGRAFIE:
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Aplicatie de Sortare Realizata cu Arduino (ID: 149429)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
