Realizarea Sistemului Automatizat de Sortare a Reperelor cu Control la Distanta
Cuprins
1. INTRODUCERE 3
2. ANALIZA CRITICĂ A SOLUȚIILOR EXISTENTE, JUSTIFICAREA SOLUȚIEI PRECONIZATE, OBIECTIVELE ȘI IPOTEZELE CERCETĂRII PRIVIND SISTEMELE AUTOMATIZATE DE SORTARE 4
2.1. Tehnici de proiectare a sistemelor pe platforme robotice 4
2.2. Automate programabile 4
2.3. Platforme mecatronice 5
3. CONSIDERAȚII TEORETICE PRIVIND SISTEMELE AUTOMATIZATE DE SORTARE 10
3.1. Inteligență, autonomie și control 10
3.2. Materiale utilizate în construcția platformelor robotice 11
3.3. Sistemele senzoriale 12
3.4. Sisteme automate 13
3.5. Automatizarea operațiilor de control 14
3.6. Sisteme de sortare 15
3.6.1. Sisteme de sortare cu clapete 15
3.6.2. Sisteme de sortare cu deplasare forțată a piesei 16
3.6.3. Sisteme de sortare cu jgheab rotitor 17
4. PROIECTAREA SISTEMULUI AUTOMATIZAT DE SORTARE A REPERELOR CU CONTROL LA DISTANȚĂ 19
4.1. Structura sistemului 19
4.2. Subsistemul hardware 19
4.2.1. Dispozitive de acționare 20
4.2.2. Senzorul de distanța în IR 22
4.2.2.1 Dioda emițătoare 23
4.2.2.2. Dioda receptoare 24
4.2.3. LCD-ul alpfanumeric 16×2 caractere 26
4.2.4. Modulul de comunicație wireless BLUETOOTH 28
4.2.5. Microswitch-urile pentru comenzile de START si STOP 38
4.2.6. Criterii pentru alegerea unui microcontroller 39
4.1.6.1. Schema bloc a unui microcontroller 40
4.1.6.2. Particularizare. Diagrama bloc a microcontrollerului PIC16F887 41
4.2.7. Dispozitive I/O 41
4.3. Schema electronică generală 42
4.4. Descrierea Software 45
4.4.1. Module Timer 45
4.4.2. Pinul MCLR/Vpp 48
4.4.3. Configurarea modului de lucru al microcontroller-ului 49
4.4.4. Convertoarele ADC 50
4.3.4.1. Considerente software legate de convertorul ADC 52
4.4.5. Microswich-uri 53
4.4.6. Intreruperile pe TIMER1 54
4.4.7. Comanda motoarelor în semnal PWM 55
4.4.8. Descrierea software a sistemului (MIKROC) 56
4.4.9. Descrierea functionalitații software 66
5. REALIZAREA SISTEMULUI AUTOMATIZAT DE SORTARE A REPERELOR CU CONTROL LA DISTANȚĂ 75
5.1. Realizarea proiectului 75
5.2. Motoarele de curent continuu utilizate 76
5.3. Driver-ul pentru motoare 77
5.4. Sonzorii optici 78
5.5. LCD-ul și modul bluetooth 79
5.6. Comunicatia ICSP 79
5.7. Programoatorul Pickit2 80
6. CONCLUZII FINALE, CONTRIBUȚII, PERSPECTIVE 81
6.1. Calculul fiabilitații 81
ANEXA 1 83
BIBLIOGRAFIE 96
INTRODUCERE
Proiectul constă în realizarea unei benzi rulante automatizate la nivel de machetă care are la bază ca procesor digital de semnale microcontroler-ul pe 8 biti PIC 16F887. Sistemul electronic achiziționează si procesează semnalele provenite de la senzorii analogici si digitali cu care este dotat sistemul, având capabilitatea in final de a diferenția o serie de cuburi dupa marime (mic-mare) si culoare (albă-neagră). Toate informațiile despre procesele curente pe care le efectuează sistemul in timp real sunt afișate pe un LCD- display alfanumeric de 16×2 caractere, dar și pe un terminal de comunicații prin intermediul transferului wireless tip bluetooth.
Comenzile principale de START sau STOP bandă pot fi efectuate de la panoul de comandă al sistemului dar si wireless direct din terminal. Motorul de transmisie al benzii automatizate cat și cel al selectorului sunt de tip DC cu reductor de 1:220, intregul sistem electronic alimentându-se la o tensiune maxima de 15V.
Рοrnіnd dе lа асеѕtе сοnѕіdеrаțіі, luсrаrеа „Proiectarea și realizarea unui sistem automat de sortare a reperelor cu control la distanță ” îșі рrοрunе ѕă rеаlіzеzе practic, pornind de la сеrсеtărі tеοrеtісе în domeniile mecanicii, electronicii și informaticii.
Luсrаrеа еѕtе ѕtruсturаtă ре șаѕе саріtοlе, dіntrе саrе patru dіntrе еlе ѕunt dе сοnѕіѕtеnță șі рrеzіntă în mοd grаdаt рrοblеmа șі rеzοlvаrеа еі, іаr сеlеlаltе doua trаtеаză іntrοduсеrеа, сοnсluzііlе, сοntrіbuțііlе οrіgіnаlе șі rеѕресtіv perspective.
Саріtοlul 1 este іntіtulаt "ІNTRΟDUСЕRЕ" înсеаrсă ο ѕсurtă trесеrе în rеvіѕtă а ceea ce se urmareste sa se realize pana la finalul proiectului.
Саріtοlul 2 este intitulat " ANALIZA CRITICĂ A SOLUȚIILOR EXISTENTE, JUSTIFICAREA SOLUȚIEI PRECONIZATE, OBIECTIVELE ȘI IPOTEZELE CERCETĂRII PRIVIND " trаtаtеаză ѕtudіul аnаlіtіс аl sistemelor de sortare.
Саріtοlul 3 еѕtе іntіtulаt " CONSIDERAȚII TEORETICE PRIVIND SISTEMELE AUTOMATIZATE DE SORTARE " șі trаtеаză ѕtudіul tеοrеtіс аl sistemelor automatizate de sortare a reperelor. Pe parcursul acestui capitol vor fi prezentate noțiuni teoretice cu privire la, principiile de funcționare a platformelor automate, a materialelor folosite pentru realizarea sistemelor de sortare și respectiv sistemele de comandă și control.
Саріtοlul 4 іntіtulаt "PROIECTAREA SISTEMULUI AUTOMATIZAT DE SORTARE A REPERELOR CU CONTROL LA DISTANTA" iși propune proiectarea din punct de vedere hardware, a tuturor elementelor mecanice, electronice și optice ce intră în structura de funcționare a unui sistem de sortare automatizat, respectiv din punct de vedere software.
Саріtοlul 5 este intitulat " PROIECTAREA SISTEMULUI AUTOMATIZAT DE SORTARE A REPERELOR CU CONTROL LA DISTANTA” șі еѕtе dеdісаt, аșа сum îі ѕрunе șі numеlе, în ехсluѕіvіtаtе realizarii practice, a sistemului automatizat de sortare a reperelor cu control la distanta.
Саріtοlul 6 еѕtе іntіtulаt „CONCLUZII FINALE, CONTRIBUTII, PERSPECTIVE” șі, duрă сum îі ѕрunе șі numеlе, рrеzіntă сοnсluzііlе gеnеrаlеаlе rеzultаtеlοr οbțіnutе, еlеmеntеlе dе οrіgіnаlіtаtе șі сοntrіbuțііlе аduѕе dе сătrе аutοr în саdrul асеѕtеі luсrărі рrесum șі vаlοrіfісаrеа rеzultаtеlοr șі dіrесțііlе vііtοаrе dе сеrсеtаrе.
ANALIZA CRITICĂ A SOLUȚIILOR EXISTENTE, JUSTIFICAREA SOLUȚIEI PRECONIZATE, OBIECTIVELE ȘI IPOTEZELE CERCETĂRII PRIVIND SISTEMELE AUTOMATIZATE DE SORTARE
Tehnici de proiectare a sistemelor pe platforme robotice
În prezent reglarea automată a sistemelor implică în mod pregnant o abordare integrală a problematicii tehnologice. Mecatronica atrage din ce în ce mai mult atenția. Termenul este tot mai des folosit într-o gamă tot mai largă de produse și aplicații inginerești și se referă la îmbinarea sinergetică dintre ingineria de precizie, controlul electronic și gândirea integratoare în procesul de proiectare al produselor și proceselor de fabricație. Este un subiect cu caracter interdisciplinar ce se bazează pe discipline de bază inginerești dar în același timp include discipline neasociate în mod direct cu disciplinele de bază. Conceptul de bază în această definiție este ideea de abordare a sistemului ca în treg. Acest lucru implică proiectarea și optimizarea sistemului ca un întreg și nu ca o secvență incrementală de pași. În cadrul proiectării produselor mecatronice este esențială munca în echipă. Specialiști din domeniul mecanic, electric, control și știința calculatoarelor trebuie să coopereze în cadrul unei echipe în toate fazele de proiectare pentru a converge la o soluție integrată. Este evident că orice definiție a mecatronicii am alege, într-o accepțiune modernă, aceasta implică procesarea informației ca și ax central.
Automate programabile
“Arhitectura generală a unui automat programabil este desfășurată în jurul unei magistrale de date la care sunt conectate circuitele de intrare ieșire, unitatea centrală și memoria sistemului.
Variabilele de intrare sunt realizate sub forma diverselor elemente de comandă și măsurare incluse în sistemele operaționale și auxiliare: limitatoare de poziție, mărimi mecanice de la traductoare de deplasare incrementale sau absolute sau chiar de la sisteme de măsurare analogică după o conversie analog numerică.
Variabilele de ieșire dirijează acționarea elementelor de execuție de tipul contactelor, electro valvelor, elementelor de afișare etc.
Circuitele de interfață de intrare și ieșire au rolul de a converti semnalele de intrare de diverse forme în semnale logice adaptate unității centrale și de a transforma semnalele logice ale unității în semnale de ieșire corespunzătoare acționării impusă de sistemul de forță al mașinii.
Încorporarea microcontrolerelor pentru modularea puterii mecanice și adaptarea sistemului la diferite puncte de funcționare sunt esența mecatronicii moderne și produselor inteligente. Sistemele mecatronice modulare reproduc la scară redusă diverse funcții existente în procesele industriale.
Prin interconectarea diverselor module se configurează sisteme și procese complexe. Stațiile de lucru permit: reconfigurări în conformitate cu diverse aplicații, dezvoltarea diverselor strategii de control, dezvoltarea conceptelor de control în sistemele integrate, conducerea electronică a sistemelor de tip automat programabil (PLC și PC), optimizarea funcțională a proceselor, implementarea tehnicilor de comunicație standardizate, dezvoltarea tehnicilor de depistare și remediere a disfuncțiunilor. Sunt acoperite următoarele domenii tehnologice: sisteme mecatronice, sisteme de acționare (electrice, pneumatice, hidraulice), modelarea și simularea proceselor mecatronice, programarea PLC-urilor (Programmable Logic Controller), tehnici de control a mișcării/forței, programarea roboților, tehnici de manipulare, tehnologii de asamblare, sensorică, tehnici de măsurare și monitorizare a parametrilor proceselor, comunicația standardizată.
Informația cu privire la valoarea unor mărimi din sistem este indispensabilă, atât la nivelul de bază atehnicilor de control implementate, cât și la nivelul de management a funcționalității sistemelor mecatronice. Utilizarea practică a acesteia implică achiziționarea ei prin intermediul senzorilor, respectiv prelucrarea semnalelor electrice.”[7]
Platforme mecatronice
“Standurile permit studiul independent al unor grupe de senzori specifici sistemelor mecatronice, respectiv achiziția și prelucrarea semnalelor prin intermediul uneltelor software Matlab/Simulink/Signal processing. Standurile includ: senzori analogici inductivi, capacitivi, optici, ultrasonici, traductori/mărci tensometrice, senzori de presiune piezoelectrici, potențiometre liniare, senzori numerici temposonici, encodere etc.
Proiectarea și optimizarea funcțională a sistemelor mecatronice implică proceduri de modelare, identificare, sinteză, analiză și testare a produselor. Tehnica digitală permite implementarea de algoritmi de control care conferă flexibilitate, adaptabilitate și precizii sporite sistemelor. Optimizarea funcțională a servosistemelor fluidice implică construirea modelului matematic și analiza fenomenelor fizice asociate.
Alte abordări în domeniul cercetării vizează tehnici de proiectare a sistemelor mecatronice în care părți ale sistemului sunt reale, altele sunt virtuale astfel încât procedurile de testare și validare a rezultatelor să poată fi derulate chiar în absența unor componente ale sistemului vizat.
Stația de producție modulară prezentată în figura 2.1, utilizează ca tehnologie de control: PLCs (SIMATIC S7-313C, Festo FEC 505Standard), EasyPort, PC. Software: Siemens Step 7, COSIMIR®Robotics, COSIMIR®PLC, FluidSIM®P, Mechatronics Assistant.”[5]
Fig.2.1. Stații de producție modulară: Distribuție, Testare, Procesare,Manipulare, Asamblare, Sortare[13]
Fig.2.2. Sisteme mecatronice pentru studiul și dezvoltarea algoritmilor de control a mișcării[13]
Sistemele prezentate în figura 2.2, conțin motoare de c.a. și pas cu pas, motoare pneumatice, transmisie mecanică prin curea dințată, senzori numerici incrementali de tipul encoderelor, controlere digitale și utilizează tehnologiide controlde tipPLC sau dSPACE, medii de dezvoltare Matlab/Simulink, dSpace, Step 7, Festo FST.Platformele mecatronice constituie o bază ideală pentru instruire, educație și cercetare mecatronică,pentru susținerea procesului de reconversie și orientare profesională în acord cu meseriile și cerințele UE.
Fig.2.3. Metode de dezvoltare a aplicațiilor[13]
“- Prototiparea Controlului (Control Prototyping): procesul este real și este controlat de un sistem de control simulat prin utilizarea unui alt hardware decât cel ce va fi utilizat în final.
– Hardware- In-the-Loop (HIL): procesul este simulat și controlat pe baza unei strategii de control implementată pe un hardware specific (cel care va fi utilizat în controlul sistemului).
-Software-In-the-Loop (SIL): procesul este simulat și este executat în timp real împreună cu algoritmul de control, care este de asemenea simulat.
Tehnicile de dezvoltare amintite mai sus comportă utilizarea unor componente hardware și software dedicate, care să permită rularea în timp real a aplicațiilor.
Din punct de vedere educațional, respectiv din punct de vedere al tehnicilor de cercetare, se identifică trei abordări privind studiul sistemelor:
-studiul pe sistem real (proces real, controler real; componentele sistemului sunt reale);
-studiul pe sistem simulat (proces simulat, controler simulat; toate componentele sistemului sunt simulate –concept SIL);
-studiul pe sistem parțial real -parțial simulat (hibrid –concept HIL).
Tehnologia SIEMENS-FESTO (Siemens Simatic STEP7-Cosimir PLC -FluidSim H/P) permite următoarele abordări:
-proces simulat în Cosimir PLC –controler simulat în Siemens S7-PLCSIM (SIL);
-proces simulat în Cosimir PLC –controler real prin interfața EasyPort (HIL);
-proces simulat în Cosimir PLC –controler simulat în FluidSim H/P (SIL);
-proces simulat în FluidSim H/P –controler simulat în Siemens S7-PLCSIM (SIL);-proces simulat în FluidSim H/P –controler real prininterfața EasyPort (HIL);
-proces simulat în FluidSim H/P –controler simulat în FluidSim H/P (HIL);
-proces real prin interfața EasyPort –controler simulat în Siemens S7-PLCSIM (HIL);
-proces real prin interfața EasyPort –controler simulat în FluidSim H/P (HIL).
Legăturile de date care pentru comunicarea între cele trei medii sunt asigurate prin intermediul unui server OPC, comunicarea dintre medii se face simplu, selectând tipul de simulare dorit.
Cosimir PLCeste un simulator grafic 3D care pune la dispoziția utilizatorului diferite replici ale unor sisteme de producție industriale. Toate aceste aplicații software pot fi conduse prin intermediul unui PLC extern sau a unui PLC simulat, fiind permisă simularea defecțiunilor (defecțiuniale senzorilor, cabluri întrerupte sau alte avarii), testarea diverselor strategii de control, monitorizarea parametrilor etc.
Utilizatorul se familiarizează astfel cu modul de operare și structura unui sistem industrial, programează funcționarea sistemului utilizând tehnologii și limbaje reale specifice mediului industrial, fără riscul de a deteriora instalația (se aduce procesul în laborator în formă simulată).
S7-PLCSIM este simulatorul integrat al mediului de dezvoltare Simatic STEP 7. Funcțiile simulatorului:
-Testarea programelor de control fără a fi necesară conectarea la un PLC real.
-Vizualizarea și modificarea variabilelor programului(temporizatoare, numărătoare etc.)
-Rularea pas cu pas a algoritmului de control.
FluidSIM H/P este un software pentru crearea, simularea și studiul circuitelor electropneumatice, electrohidraulice și digitale. Oferă de asemenea o întreagă gamă de posibilități de comunicare cu alte programe prin intermediul interfețelor standardizate DDE și OPC.
Cu ajutorul interfeței EasyPort D16 se poate asigura legătura cu procesul real.”[7]
Fig.2.4. Interfață S7-PLCSIM
Programarea controlerului utilizând Simatic STEP7. Programarea PLC-ului se va face prin intermediul mediului Simatic STEP7. Programul este unul simplu, având o singură ramură Ladder după cum se poate vedea în figura 2.4.
Fig.2.5. Schema de simulare FluidSIM
Fig.2.6. Diagrama Ladder
Funcționarea programului este una simplă. La apăsarea butonului START din modelul procesului (figura anterioară), PLC-ul sesizează modificarea adresei B_Start și în consecință acționează (24V) electromagnetul distribuitorului E1 și lampa de semnalizare L_Start. Cele două semnale de ieșire sunt transmise către model având ca efect avansul cilindrului cu piston,
La eliberarea butonului START cilindrul se va retrage și lampa nu va mai semnaliza.
CONSIDERAȚII TEORETICE PRIVIND SISTEMELE AUTOMATIZATE DE SORTARE
Utilitatea roboților și micro-roboților este de necontestat atunci când intervenția omului este limitată sau nu este posibilă datorită anumitor factori. Un lucru foarte important în ceea ce privește robotica este autonomia, iar în cele ce urmează se vor aborda câteva caracteristici și noțiuni de bază legate de această funcție.
Inteligență, autonomie și control
Platformele robotice au la bază două caracteristici foarte importante și anume inteligenta și autonomia, acestea fiind foarte strâns corelate. Astfel când se face referire la funcția de autonomie, implicit intră în discuție și termenul de inteligență.
Inteligența unui robot are la bază capabilitățile și sarcinile pe care acesta le poate realiza și se poate defini prin regulile implementate la nivel de software, reguli pe baza cărora robotul își îndeplinește funcția de autonomie. Inteligența unui robot este demonstrată prin modul în care robotul poate lucra eficient în mediu sau altfel spus, modalitatea prin care procesul de lucru diferă de cazul în care acțiunile robotului ar fi controlate de un operator uman.
Când se face uz de termenul de de autonomie, se face referire în principiu la capacitățile robotului de a lua anumite decizii fără a fi prezentă intervenția unui operator uman. Pe baza regulilor implementate la nivel software și în funcție de numărul și complexitatea acestora, robotul are capabilitatea de a realiza anumite sarcini. Din punctul de vedere al funcționării, schema de control a unui robot este compusă din mai mulți pași repetitivi și anume:
in primul rând robotul primește informații din mediul înconjurător prin intermediul senzorilor cu care este echipat;
in următoarea etapă robotul își planifica ce decizii sa ia continuare în funcție de informațiile primite de la senzori, construind astfel un model al lumii înconjurătoare;
Robotul își pune în final în aplicare deciziile, procesul fiind posibil numai cu ajutorul părții electro-mecanice cu care acesta este dotat;
Fiind strâns legate, aceste reguli formează mecanismul care mai este și numit în literatura de specialitate STA (sense-think-act). Astfel blocul de comandă din cadrul unui robot se poate descompune în mai multe blocuri funcționale, cum se prezintă și în figura următoare:
Fig.3.1. Blocuri functionale
Blocul de percepție din cadrul acestei scheme de principiu realizează procesarea datelor provenite de la senzorii de pe robot, iar blocul de planificare are rolul de a decide un plan de acțiune pentru sistem. Pașii prezentați mai sus sunt repetați de robot până în momentul în care sarcina este îndeplinită cu succes.
Materiale utilizate în construcția platformelor robotice
Ca și corpul uman, o platformă robotică va conține părțile vitale ce ajută la buna funcționare a sa. Astfel, structura de bază a corpului unui robot poate fi construită din materiale precum lemn, plastic sau metal și poate lua orice formă și dimensiune. O caracteristică importantă de care trebuie să se țină cont atunci când se aleg dimensiunile și formele materialului este aceea că pe structura corpului vor fi dispuse motoarele/servomotoarele, acumulatorii, plăcile electronice și alte elemente auxiliare. În multe cazuri o carcasă de protecție poate fi plasată peste circuitele electronice și peste anumite componente auxiliare, ajungându-se chiar și la utilizarea de piele artificială, aceasta având un rol pur estetic și nu de protecție. In cazul de fata materialul predominant folosit este lemnul datorita usurintei cu care se prelucreaza. Metalul reprezintă alegerea optimă în construcția structurii de bază a unei platforme robotice, iar printre metalele cel mai des utilizate în acest scop se pot enumera:
– Aluminiul este un material utilizat în construcția roboților de dimensiuni medii și mari și se remarcă duritatea mare raportată la greutate, fiind în același timp ușor de prelucrat dar scump în comparație cu alte materiale.
– Oțelul este deseori utilizat în construcția cadrului unui robot datorită durității ridicate iar ca dezavantaj se remarcă faptul că prelucrarea acestuia necesită scule speciale, oțelul fiind un material mai greu deformabil. Oțelul inoxidabil este utilizat în construcția componentelor de precizie cum ar fi brațe, mâini, angrenaje și alte mecanisme unde aluminiul nu ar putea face față solicitărilor.
– Lemnul este un material utilizat în principal la construcția cadrului unui robot, și apreciat pentru faptul că se prelucrează foarte ușor.Acesta are o duritate slabă raportată la greutate.
– Plasticul este materialul folosit la aproape orice în zilele noastre, inclusiv la construcția roboților. Acesta are o duritate chiar mai mare decât a multor metale și este foarte ușor de prelucrat și de lipit.
Acestea au fost doar câteva exemple de materiale cel mai des utilizate în construcția roboților, dar lista poate continua având în vedere apariția de noi materiale a căror principală caracteristică este duritatea maximă raportată la greutatea minimă. Un material ușor de prelucrat cu greutate mică și duritate mare constituie un avantaj și duce implicit la o proiectare mai bună a tuturor ansamblelor unui ansamblu robotic. În ceea ce privește construcția platformei robotice prezentate, materialele utilizate au fost:
-Plastic, baghete de plastic
-Forex-ul
-Aluminiul;
-Cauciucul
-Buretele
Sistemele senzoriale
Pentru majoritatea sarcinilor atribuie unei platforme robotice, cel mai comun tip de intrare este cel reprezentat de semnalul electric provenit de la sistemul senzorial. Se poate spune faptul că există o gamă largă de sisteme senzoriale de la foarte simple la foarte complexe, toate acestea utilizate cu un sigur scop și anume de a oferi sistemului electronic cu microcontroller semnalul pe baza căruia să poată lua decizii inteligente. Spre exemplu un senzor de temperatura poate oferi robotului informația necesară în scopul de a continua sau nu o anumită acțiune. Senzorii se pot grupa în două mari categorii, și anume:
– Senzori digitali care oferă rezultate la ieșire numai de valori 1 sau 0, on/off sau true/false. Un simplu exemplu în acest sens este un comutator oferind informația necesară în momentul în care acesta este închis sau deschis.De asemenea un sensor sonar sau ultrasonic range finder returnează valori binare, semnalul din ieșire fiind compus dintr-un anumit număr de biți și furnizând informații referitoare la distanță. Senzorii digitali pot fi conectați direct la blocul de procesare și control fără alte blocuri electronice de interfațare.
– Senzorii analogici care oferă la ieșire de obicei o tensiune. În multe cazuri, acest tip de senzori oferă la ieșire o rezistență sau un curent variabil care este convertit mai apoi de către un circuit intermediar într-o tensiune. Un exemplu foarte bun este acela în care un element LDR (foto-rezistor) este expus la lumină.În acest caz, prin construcția unui simplu divizor de tensiune, tensiunea din ieșire variază direct cu lumina care intră în contact cu foto-celula. În cazul senzorilor analogici este deseori nevoie de un bloc de conversie analog-digital care să convertească variația tensiunii de la ieșirea senzorului într-o formă în care unitatea centrală de procesare o poate utiliza. În ceea ce privește tipul senzorilor, se pot enumera:
-Sonar ultrasonic range finder în care undele reflectate sunt folosite pentru a aproxima distanța sau pentru determina dacă robotul este în apropiere de un obiect. Raza de acțiune are o valoare maximă în jur de 10 metri.
-Senzorul cu infraroșu în care undă în infraroșu reflectată este utilizată în scopul de a determina distanța. Raza tipică de acțiune este de la 0 la 2 metri.
-Senzorul de lumină este utilizat în scopul de a detecta prezența sau absența luminii.
-Senzorul piroelectric în infraroșu poate detecta diferențe de temperatură și este foarte utilizat în senzorii de mișcare. Raza de acțiune este cuprinsă de la 0 până în jurul valorii de 15 metri.
-Senzorul de sunet cu ajutorul căruia sursele de sunet pot fi detectate.Se poate regla astfel încât să fie sensibil la anumite frecvente și amplitudini ale semnalului sonor.
-Accelerometrul care este folosit pentru a detecta schimbări de viteză sau deviații de la axa orizontală, cel mai des fiind utilizat pentru a determina viteza de deplasare a robotului.
-Senzorul de temperatura poate fi utilizat pentru a monitoriza temperatura ambiantă sau căldura aplicată.
Sisteme automate
”În evoluția omului se evidențiază trei etape importante:
Etapa mecanizarii – etapa în care s-a trecut la reduceea la minim a efortului fizic. Această etapă a început o dată cu crearea primelor unelte și continuă și în prezent, rolul factorului uman în producția de bunuri materiale fiind direct și nemijlocit legat de realizarea oricărui proces de producție.
Etapa automatizării – etapă în care omul s-a preocupat să gasească soluții care sa reducă sau să elimine complet intervenția sa directă în cadrul proceselor de producție. Factorului uman îi ramane doar rolul de analiză, conducere și determinare a condițiilor proceselor ți controlul activității, adică o activitate de ordin intelectual.
Etapa cibernetizarii – etapă în care s-a urmarit ca pentru procesele automatizate să se reducă sau să se elimine și activitatea de conducere.
Aceste etape au apărut succesiv, pe masura cunoașterii mai profunde a realitații obiective, dar ele nu se elimină, ci se desfașoară în paralel. Sistemele automate sunt sisteme de comandă, deoarece permit să se comande, să se modifice sau să se regleze valoarea unei mărimi oarecare, denumită mărime de comandă, dependentă de valoarea unei mărimi fizice, care la rândul ei este influențată de structura sistemului automat sau instalației automate.
Introducerea mecanizării, automatizării și cibernetizării în industria constructoare de platforme automatizate este diferențiată pe două direcții importante:
cazul proceselor tehnologice existente, care se desfasoară și care au soluțiile limitate de organizare existentă;
cazul proceselor tehnologice nou proiectate, pentru care utilajele urmează a fi proiectate, iar organizarea este concepută astfel încât să favorizeze introducerea automatizării și cibernetizării.
Când se urmarește realizarea unor sisteme automate, proiectarea instalației tehnologice prezintă unele aspecte particulare care, în unele cazuri, o fac diferită de instalația neautomatizată, deoarece însăși proiectarea procesului tehnologic, control sau montaj ca proces susceptibil de automatiare presupune existența unor particularitați, comparativ cu procesul tehnologic neautomatizat.
Succesiunea etapelor ce trebuie parcurse ca și legăturile dintre ele este evidențiată în figura 3.2.
Prima etapă are ca rol evidențierea locurilor de muncă, a proceselor sau a secțiilor în care trebuie să intervină cu măsuri de automatizare în vederea asigurării creșterii productivitații, a scăderii costurilor și asigurarii unei calitați corespunzătoare.
Cea dea doua etapă presupune desfășurarea cercetarilor generale în automatizare, cercetări care prin particularizare pot fi aplicate diferitelor procese.
Etapa a treia presupune elaborarea unor studii tehnice, care justificate economic în etapa patru, conduc la concluzia dacă este oportună sau nu intervenția în procesul considerat și care trebuie să fie complexitatea intervenției.
Proiectarea procesului tehnologic(etapa 5), ca și proiectarea instalației tehnologice(etapa 6), prin principiile de proiectare aplicate, asigură toate condițiile introducerii măsurilor preconizate.
Următoarele etape vizează proiectarea dispozitivului de automatizare, stabilirea efectelor sistemului automatizat și realizarea fizică a mărimilor stabilite.[14]
Fig.3.2. Etape pentru realizarea proceselor automate[14]
Automatizarea operațiilor de control
”Controlul de caliate presupune verificarea prin examinare, măsurare, încercare, analiză etc. a conformității unui produs cu prescripțiile tehnice, cu respetarea regulilor de verificare a calitații și a metodelor de verificare prescrise.
Controlul la care nu se previne la timp execuția necorespunzătoare a reperelor, ci doar se constată calitatea produselor realizate și care, datorită manoperei de control ridicate, prezintă o productivitate scăzută se numește control pasiv.
Controlul care se desfășoară în timpul procesului de producție, preîntâmpinând apariția pieselor necorespunzătoare se numește control activ.
Corecta coordonare a proceselor de fabricație presupune informații prin control-măsurare despre starea sistemului, obținute la timpul și cu cadență corespunzătoare gradului de precizie.
De aici rezultă următoarele:
Controlul trebuie făcut cu o productivitate cel putin egală cu aceea a prelucrării, ceea ce presupune, pentru mijloacele folosite, îndeplinirea unor caracteristici specifice, desigur condiționat de tipul procesului tehnologic de prelucrare și control;
În condițiile specific, precizia de măsurare a mijlocului, cât și a sistemului în ansamblu trebuie să corespundă obiectiv procesului de prelucrare și destinației reperelor prelucrate;
Pentru asigurarea economicitații fabricației, procesele tehnologice trebuie să asigure o calitate corespunzătoare. Între diversele posibilități de control(controlul în afara procesului, în proces și prin selecție) limitele despărțitoare nu sunt rigide.”[14]
Sisteme de sortare
”În cazul automatelor de control pasiv sistemul mecanic finit este constitui din dispozitivul de sortare. Sortatorul asigură sortarea pieselor anterior controlate spre diferite sisteme de sortare, în funcție de rezultatele obținute în urma verificărilor.
Caracteristicile constructive și funcționale ale dispozitivelor de sortare sunt dependente de: dimensiunile și masa piesei, calitatea suprafeței, numărul de grupe de sortare, felul sortării(unidimensională sau multidimensională) și productivitatea impusă de sistemul de control automat.
Productivitatea sortatorului trebuie să fie cel putin la nivelul celorlalte subansamble ale automatului, însa în unele cazuri, datorită ansamblului de condiții de funcționare ce i se impun, sortatorul este cel care limitează productivitatea automatului.
Dirijarea reperelor spre sistemele de stocare specifice fiecarei clasa se realizeaza cu clapete, jgheaburi mobile, cu împingător și în cazul pieselor mici cu aer comprimat. În unele cazuri, pentru simplificarea construcției și când condițiile de funcționare o permit, se poate utiliza același transportor și pentru control și pentru sortare.
Pentru asigurarea unor timpi mici, deci productivitați ridicate, acționarea sortatoarelor este realizată, de cele mai multe ori, cu electromagneți, independent pentru fiecare grupă de sortare.
Pentru cazurile când sunt necesare forțe mari, se utilizează cilindri pneumatici sau motoare electrice cuplate cu reductoare.
Pentru analiza modului de funcționare a dispozitivelor de sortare o importanță deosebită o au: timpul în care o piesă parcurge sortatorul de la nivelul elementului de selecție a grupei dimensionale, până la momentul acționării dispozitivului selector, aflat în mișcare de repaus.
Sisteme de sortare cu clapete
În acest caz sortarea pieselor se face prin devierea traiectoriei sau prin deschiderea-închiderea unor trape sau canale. Piesele pot să fie deplasate pe un plan înclinat, să cadă liber sau să fie transportate pe plan orizontal.
b) c)
Fig.3.3. Sisteme de sortare cu clapete[14]
În figura 3.3, a, b sunt prezentate două sortatoare cu deplasarea pieselor pe plan înclinat. Pe baza rezultatelor furnizate de postul de decizie și control, corespunzător încadrării piesei într-o anumită clasă de sortare, este acționată clapeta de selecție a traseului piesei pentru sortul respectiv, deci clapeta, prin rabatare, blochează jgheabul înclinat, împiedicând trecerea piesei mai departe de poziția canalului spre cutia sortului respectiv.
În cazul sortatoarelor la care piesele se deplasează gravitațional prin cădere liberă, jgheabul principal al sortatorulu este vertical (fig.3.3, c). Piesele în cădere, întâlnesc clapeta sortului din care fac parte și astfel sunt direcționate spre cutia de stocare a grupei din care fac parte.
Sisteme de sortare cu deplasare forțată a piesei
În cazul în care structura sistemului automat de control nu permite utilizarea sortatoarelor în care piesele se deplasează sub acțiunea propriei greutați, se folosesc pentru sortare sisteme care au în componență sau folosesc dispozitive de transport.
Cele mai des utilizate sunt cele cu disc cu cuiburi și cele cu bandă transportoare.
În unele cazuri se utilizeaza același transportor pentru întreg automatul, deci și pentru sistemul de sortare.
Un astfel de caz este prezentat în figura 3.4, unde piesele sunt transportate în automat cu ajutorul unui disc cu cuiburi, iar sortarea se realizează cu trape. Trasportorul rotativ cu cuiburi 1 aduce pisele în dreptul clapetelor 2.
În funție de rezultatul obținut la măsurare și de decizia luată de blocul de analiză și comandă, clapeta 2, corespunzătoare grupei din care face parte piesa, este acționată de electromagnetul 3 și rotită, permitand alunecarea piesei pe jgeabul 5 spre cutia sortului respectiv.
Fig.3.4. Sortator rotativ cu clapeta[14]
Pentru piese grele se utilizează sortatoare cu bandă, sortatoare ce fac parte din categoria sistemelor de sortare cu transportor independent.
În cazul sortatoarelor cu transport independent cu bandă, dirijarea pieselor se realizează cu ajutorul clapetelor sau a impingătoarelor. Sortatorul cu bandă din figura 3.5, a, este prevăzut cu tavițele 2, fixate pe bandă, pe care se găsesc piesele 3. De o parte a benzii se găsec împingătoarele 4 acționate de cilindri pneumatici, iar de cealaltă parte jgheburile de sortare 5. Sortatoarele cu bandă, la care devierea pieselor se face cu ajutorul clapetelor 3 ( fig.3.5, b) au aceste elemente de deviere montate pe marginea benzii 2. Clapetele blochează trecerea pieselor 1 pe bandă și determină intrare acestora în casetele de stocare.
Soluții constructive de mare productivitate utilizează atât devierea pieselor cu clapete cât și cu împingătoare (fig 3.5, c).
În toate variantele de sortatoare cu bandă este necesară corelarea momentului de acționare a elementului de deviere cu viteza de deplasare a pieselor, respectiv momentul în care piesele ajung în dreptul casetelor corespunzătoare sorturilor în care au fost încadrate în urma controlului. În acest sens, informația legată de clasificare a piesei se menține până în momentul când aceasta ajunge în dreptul jgheabului corespunzător grupei din care face parte și unde este trimisă de elementul de deviere aferent.
Fig.3.5. Sortator rotativ cu clapetă[14]
Sisteme de sortare cu jgheab rotitor
Sortarea cu jgheab rotitor (fig. 10) asigură dirijarea pieselor către una din cutiile 2, 3 sau 4, ale grupelor de sortare, cu ajutorul jgheabului rotitor 5, fixat pe arborele 6. Acționarea se realizează cu ajutorul elecromagnetului 7 pentru cutia 2 și cu electromagnetul 8 pentru cutia 4.
Numărul de electromagneți este cu o unitate mai mică decât numărul grupelor de sortare, deoarece poziția neutră a jgheabului rotitor, se obține prin forța unor elemente elastice (arcuri lamelare 9 și 10). Înclinarea jgheaburilor fată de planul orizontal este β = 20˚ pentru a asigura deplasarea gravitațională a pieselor.
Lățimea B a jgeabului se alege în funcție de dimensiunile piesei.”[14]
Fig.3.6 Sortator cu jgheab rotitor[14]
PROIECTAREA SISTEMULUI AUTOMATIZAT DE SORTARE A REPERELOR CU CONTROL LA DISTANȚĂ
Structura sistemului
Platforma rulantă este compusă din mai multe module electronice interconectate ce au ca scop principal achiziția-procesarea-afișarea de semnale și mai apoi acționarea dispozitivelor electromecanice in scopul selecției cuburilor mici-mari si albe-negre. Astfel sistemul electronic este capabil să detecteze urmatoarele tipuri de cuburi : mici albe /mici negre/mari albe/mari negre. Un lucru important referitor la recunoașterea cuburilor este acela că s-a reușit ca prin intemediul a numai doi senzori in infraroșu să se detecteze toate aceste caracteristici și mai apoi să se faca selecția electromecanică. Motorul de selecție de la capăt de linie este tot de acelși tip ca cel de angrenare al benzii si anume motor DC cu reductor 220:1 dar pe langă acesta, pentru determinare pozitiei curente de lucru, s-a mai folosit si două microswitch-uri pe post de encodere simple incrementale. Analiza poziției acestor encodere in funcția de intrerupere face ca viteza de reacție a sistemului să fie net sporită in momentul in care se face o detecție a unui obiect supus analizei senzorilor in IR. Microswitch-urile utilizate ca encodere in sistemul de selecție-capăt de linie sunt conectatate in circuit impreună cu câte un resistor de pull-down, valoarea tensiunii la pinul de input al microcontroller-ului, ce realizează analiza, fiind in momentul acționarii de 1L (5V) și de 0L(0V) în rest. Comanda propriuzisă a motoarelor DC se realizează software, prin intermediul generarii de semnal PWM cu scopul de a controla viteza de deplasare a benzii rulante.
Achiziționarea semnalelor provenite de la senzori, se realizează intern de către microcontroller prin intermediul convertorului ADC pe 10 biti, ce lucrează în regim multiplexat și ce permite achiziția de semnale analogice de la un număr de 14 canale ADC diferite. În urma achiziției și procesarii de semnale, se afișează pe un LCD alfanumeric de 16×2 caractere mesaje de interes ce constau în valori provenite de la senzori, status-ul curent al sistemului, precum și mesaje de așteptare.
Subsistemul hardware
Proiectarea hardware a robotului, s-a axat în principiu, pe ușurința prelucrarii materialelor si duritatea in timp la stress mecanic. Materialele utilizate în construcția robotului, cum ar fi aluminiul, cuprul și plasticul au asigurat această diminuare a greutății și în principiu o optimizare a proiectării hardware. În ceea ce privește plăcile de bază pe care s-au montat componentele electronice, pentru comoditate și rapiditate în execuție, plăcuțele cu găuri au fost alegerea optimă așa cum se poate observa și în figura următoare:
Fig.4.1. Cablaj folosit
Dispozitive de acționare
Motoarele reprezintă o componentă esențială în ceea ce privește mobilitatea roboților, acestea putând diferii între ele, prin dimensiuni, turație, mod de lucru, brushed sau brushless, cu magnet permanent sau nu, de curent continuu sau alternativ. O caracteristică foarte importantă a motoarelor o reprezintă viteza de rotație (RPM) a acestora, majoritatea având o plajă de valori cuprinsă între 2000-9000 RPM. Motoarele sunt utilizate în sistemele robotice prin intermediul mecanismelor de reducție, numite și reductoare, și au ca scop marirea cuplului generat prin transformarea vitezei în putere, în cazul de fată, reductoarele robotului având un factor de 220:1. Comanda motoarelor s-a realizat digital prin intermediul generarii de semnale PWM. Avantajul comenzii motoarelor în regim PWM, este acela că oferă posibilitatea unei viteze de rotație variabile. S-a dorit utilizarea unui semnal PWM pentru comanda motoarelor, pentru un control mai fin al mișcarii, dar scopul principal a fost pentru de a oferi sistemului electronic, timpul necesar de achiziție-procesare-acționare, la detecția unui cub pe banda. Astfel, software, prin schimbare unor parametri de comandă cu directă legatură la tensiunea de alimentare a motoarelor DC, se poate varia viteza de rotație a benzii. Motorul DC ce angrenează banda este cel prezentat în figura urmatoare :
Fig.4.2. Tip motor DC cu reductor utilizat [19]
Comanda motoarelor de current continuu utizate în rularea benzii si în modulul selector sunt acționate prin intermediul unui circuit integrat specializat L293, ce conține în structura sa internă 2 punți H . Motoarele utilizate în cazul de fată sunt de tipul FF-050SH cu perii, și au urmatoarele caracteristici:
Fig.4.3. Detalii tehnice motor DC [19]
Estimând faptul că motoarele funcționează la o turație de 5000 RPM și ținând cont de factorul de 220:1 al reductoarelor, va rezulta o turație maximă a axului de ieșire din reductor, de 23 RPM. Diametrul roții de angrenare fiind de 40mm, va rezulta o viteza maximă a robotului :
v=diametrul.roții * pi*RPM/60=0.0 4*3.14*0.38=0.047m/s;
v=0.33*3600/1000= 1.2km/h.
Așa cum a fost menționat și anterior în proiect, sistemul utilizează configurația de “differential work ”, ce înseamnă că motoarele sunt comandate independent unul fată de celalalt, permițând învârtirea individuală în ambele sensuri ale acestora.
Comanda motoarelor de current continuu se realizează prin intermediul unui driver specializat ce are în structura sa internă 2 punți de tip H ce permit alimentarea independentă a doua motoare cu posibilitatea de comandă în regim PWM. Comanda în PWM, este de o importanță majoră în cadrul acestui proiect, deoarece permite, pe langă rotirea în ambele sensuri, și modularea vitezei de rotație.
La baza circuitului driver pentru motoarele DC, stă circuitul integrat L293, ce are urmatoarea configurație și parametri electrici :
Fig.4.4. Driver-ul L293 [20]
Fig.4.5. L293 –caracteristici electrice [20]
Deoarece motoarele de current continuu funcționează la o tensiune de alimentare de maxim 6 V, circuitul L293 este alimentat la tensiunea de 5V prin intermediul unui stabilizator pozitiv de tensiune.
Comanda modulului driver pentru motoare se realizează pe o interfată de 6 biți :
RD7 -> EN1,2 (enable input 1)
RD6 -> IN1 (directivity select 1)
RD5 -> IN2 (directivity select 1)
RC4 -> IN4 (directivity select 2)
RC5 -> IN3 (directivity select 2)
RD4 -> EN3,4 (enable input 2)
Astfel, pentru comanda unui motor sunt necesari 3 biți, din care 2 pentru direcția de învârtire și unul pentru activare (EN). În cazul de fața, pinul de EN este folosit pentru activarea intrării de comandă în regim PWM. Modulul integrat în schema electronică arată ca în figura urmatoare :
FIG.4.6. Modulul driver L293 integrat în sistem
Senzorul de distanța în IR
Pentru detecția și aproximarea distanțelor s-au utilizat senzorii în infraroșu IR, aceștia comportându-se excelent și dând rezultate mai mult decât satisfăcătoare .
Diodele în IR utilizate sunt de 5mm ca diametru, iar senzorul detectează variația distanței de la o distanță de aproximativ 25 cm față de elementul receptor.
Diodele IR utilizate sunt diode standard de 5mm cu urmatoarele caracteristici :
4.2.2.1 Dioda emițătoare
Fig.4.7. Dioda IR [22]
Fig.4.8. Dioda IR – caracteristici electrice [22]
Fig.4.9. Dioda IR – caracteristici electrice [22]
Fig.4.10. Grafic de funcționare – diode IR [22]
4.2.2.2. Dioda receptoare
Caracteristici:
– Timp de răspuns mic
– Sensibilitate ridicată
– Joncțiune mică
Fig.4.11. Receptor IR
Fig. 13 Receptor IR –caracteristici electrice
Fig.4.12. Receptor IR – spectru și lungime de undă [22]
Fig.4.13. Receptor IR – spectru si lungime de undă[22]
Blocul emițator, cât și cel receptor în infraroșu IR, lucrează la o tensiune maximă de 5V, fiind alimentate de la stabilizatorul general de 5V, destinat alimentarii microcontrollerului. În următoarea schemă se poate observa cum cei doi senzori în infraroșu au fost conectați și utilizați în sistem :
Fig.4.14. Conectivitatea electrică a senzorilor în sistem
Canalele analogice utilizate în citirea valorilor de pe senzori sunt :
RA0/AN0 -> input analogic citire distanța în infraroșu – senzorul de la bază(1);
RA1/AN1 -> input analogic citire distantă în infraroșu – senzorul de sus(2);
Valorile tensiunilor de ieșire ale senzorilor sunt direct proporționale cu raza în infraroșu reflectata și implicit cu distanța pană la obstacol. La bază functionalitații sistemului senzorial în infraroșu stă divizorul rezistiv de tensiune :
Fig4.15. Divizorul rezistiv de tensiune [23]
Extrapolând acest lucru și pastrând funcționalitatea, se poate vedea clar faptul că tensiunea de ieșire a modulului va fi cu atât mai mica, cu cât raza reflectată în infraroșu este mai puternică. Astfel elementul fotosensibil în infraroșu va lucra în mod dinamic, în sensul că rezistența dinamica va oscila și implicit tensiunea de ieșire odată cu intensitatea razei reflectate în infraroșu. Ulterior, în codul software, managementul și deciziile logice pe care le va lua sistemul se vor baza în mare masură pe valorile primite de la acești senzori în infraroșu.
Afișarea datelor provenite de la senzori se realizează pe LCD-ul alphanumeric după ce au fost în prealabil achiziționate și procesate. Comunicarea LCD-microcontroller se axează pe un protocol pe 11 biți, 8 biți (D0-D7) find biți de date/instrucțiuni și 3biți (E, R/W, Rs) având funcția de biți de control. Astfel cei 8 biți de de comunicare pot fi folosiți ca pachet de date dar, și ca instrucțiuni prin setarea corespunzătoare a celor 3 biți de control. Semireglabilul poziționat în alimentarea LCD-ului este utilizat pentru a varia contrastul LCD-ului alfanumeric prin variația tensiunii de alimentare pe pinul CONTR al LCD-ului. Conexiunea ICSP este folosită la programarea microcontrollerului și utilizează pinii de vpp/ MCLR, PGD, PGC, Vdd si VSS. Comunnicarea dintre modulul electronic si soft-ul de programare (PICkit2) se realizează prin conexiune ICPS – USB.
LCD-ul alpfanumeric 16×2 caractere
LCD-ul utilizat în acest proiect este unul de tip alfanumeric, cu 2 linii și 16 coloane, iar comunicarea cu microcontrollerul se realizează printr-o interfață de 8 biți. Alimentarea modulului LCD se face cu 5V, iar intensitatea luminoasă a pixelilor poate fi ajustată prin intermediul unei intrari de control. Această intrare de control acceptă o tensiune variabila, tensiune obtinută prin intermediul unui divizor rezistiv ce are la bază un semireglabil de 50 kohm.
Pinii de interfațare ai LCD-ului conform datasheet-ului sunt :
Fig.4.16. Caracteristici electrice LCD [24]
Pentru comunicarea microcontroller-ului cu display-ul alfanumeric se utilizează 8 biți de date și 3 biți de control. Astfel pinul de RS este utilizat pentru ca display-ul să recunoască dacă i s-a trimis o “comandă instrucțiune” sau o “dată” de afisat.
Pinul R/W este utilizat pentru a selecta dacă urmează sa se afișeze sau să se citească de pe display-ul alfanumeric. Pinul E reprezintă pinul de activare care permite execuția tuturor acestor operațiuni, ceea ce înseamna că doar atunci când valoarea e 1L (5V) se permite citirea și interpretarea cuvantului de date (8 bit) primit în configurație de tip paralel.
Caracteristici electrice:
Display-ul funcționează la tensiunea maximă de 5V și este astfel, complet compatibil pe nivele logice cu microcontroller-ul utilizat – PIC16F887 :
Fig.4.17 Caracteristici electrice LCD [24]
Diagrama bloc a modulului LCD :
Fig.4.18. Configurație internă LCD [24]
Caracterul afișor :
Fig.4.19 Caracterul afisor – LCD [24]
Protocolul de comunicare cu microcontrolerul PIC16f887 este stabilit în conformitate cu timpii de întârziere și semnalele de control/date descrise în datasheet-ul LCD-ului.
Modulul de comunicație wireless BLUETOOTH
Proiectul de fată permite afișarea datelor de interes pe un LCD alfanumeric de 16×2 caractere, dar în același timp și afișarea într-un terminal prin comunicație wireless de tip Bluetooth.
Comunicația între microcontroller și modulul Bluetooth se realizează prin intermediu pinilor specializați PORTC bit 6 și bit 7.
Fig.4.20. Conectare modul Bluetooth la sistem
În compilatorul Mikroc folosit, inițializarea comunicației seriale cu baudrate-ul de 9600 bps s-a realizat astfel :
––––––––––––––––––––––––––––––––––––-
UART1_Init(9600); // Initialize UART module at 9600 bps
––––––––––––––––––––––––––-
În linii mari, modulul bluetoooth se comportă ca o transmie normală de date pe protocol serial UART dar cu avantajul că datele pot fi transmise / receptionate wireless prin radiofrecvența. În cazul de fată datele sunt trimise catre un terminal instalat pe un Smartphone și ofera avantajul unei comunicații mobile la o distantă de peste 10 m.
Frecvența de lucru a modulului Bluetooth este standard de 2.4 GHz, iar ca sensibilitate ajunge la -80dBm. Antena utilizata de acest modul este deja integrată în cablaj, iar tensiunea de alimentare este cuprinsa între 3.3V-5V. În cazul de fată, în faza de testare și mai apoi în faza de implementare, s-a utilizat tensiunea de alimentare de 5V deoarece se elimina astfel posibilele erori de nivele logice care pot devia de la diferența de 5V la 3.3V. În ceea ce privește vitezele de baudrate acceptate de modul, aceaste sunt de 9600, 19200, 38400, 57600,115200,230400, 460800 bps. Câteva detalii tehnice referitoare la modulul Bluetooth sunt urmatoarele :
Caracteristici:
Footprint-ul circuitului integrat specializat :
Fig.4.21. Footprint circuit integrat bluetooth
Descrierea pe pini și funcționalitați :
Fig.4.22. Desciere modul bluetooth [25]
Fig.4.23. Desciere modul Bluetooth [25]
Fig.4.24. Desciere modul Bluetooth [25]
Fig.4.25. Desciere modul Bluetooth [25]
Fig.4.26. Desciere modul Bluetooth [25]
Comenzile AT la nivel de modul, pentru setarea aceastuia sunt urmatoarele:
Fig.4.27. Comenzi pentru setarea modulului bluetooth
Fig.4.28. Comenzi pentru setarea modulului bluetooth
Fig.4.29. Comenzi pentru setarea modulului bluetooth
Fig.4.31. Comenzi pentru setarea modulului bluetooth
Fig.4.32. Comenzi pentru setarea modulului bluetooth
Fig.4.33. Comenzi pentru setarea modulului bluetooth
În proiectul de fată, pentru setarea modulului Bluetooth mai sus descris, s-a utilizat un modul special de tip PL2303 care face posibilă transmisia datelor sub protocol serial UART prin intermediul conexiunii de date USB :
Fig.4.34. Modul serial PL2303
Iar interconexiunea de programare-setare a modulului HC-05 si PL2303 s-a realizat astfel :
Fig.4.35. Conectivitate Bluetooth-PL2303
Totodată, pentru a putea intra în meniul modulului de comunicatii Bluetooth, pe langă acest modul PL2303 s-a utilizat și un terminal special care permite operațiunea de scriere-setare în modulul Bluetooth, și anume TERATERM.
Fig.4.36. Terminal setare bluetooth
Microswitch-urile pentru comenzile de START si STOP
Ca funcționalitate pentru sistemul electronic cu microcontroller primează comanda utilizatorului pe tot parcursul funcționării. Astfel, în momentul în care întreaga platformă robotică este alimentată, se afișează pentru început o serie de mesaje pe LCD-ul alfanumeric de 16×2, se realizează un selftest pentru verificarea funcționalitații sistemelor și se ajunge în final în punctul în care sistemul așteaptă apăsarea butonului de START sau conectarea prin Bluetooth la sistem și startarea acestuia prin apasărea literei “s”. Ca și conectivitate, cele doua butoane de START si STOP sunt conectate dupa cum se poate observa din schema următoare de principiu :
Fig.4.37. Microswitch-urile decizionale
Din schema electronică de mai sus, se observă faptul că microswitch-urile se afla integrate în cate un divizor rezistiv de tensiune, pe ramura pozitiva. Astfel, în momentul în care tasta nu este apăsată, rezistorul cu funcție de pull-down va trage pinul de intrare la masă, sistemul știind astfel ca nu a aparut nici o cerere de schimbare a functionalitatii curente. Când tasta a fost apăsată, pinul digital de intrare este conectat la tensiunea de alimentare de 5V și sistemul își întrerupe starea curenta de lucru .
Criterii pentru alegerea unui microcontroller
Sunt multe aspecte de care trebuie ținut seama la alegerea unui MC pentru o anumită aplicație. Alegerea unui MC potrivit poate duce la succesul proiectului, așa cum o alegere nepotrivită poate duce la eșecul proiectului. Fiecare cititor trebuie să adapteze aceste criterii nevoilor sale și scalei proprii de valori. Obiectivul urmărit în alegerea unui MC este obținerea calității dorite cu un cost cât mai scăzut. Calitățile dorite înseamnă performanță, fiabilitate, calități EMC (de compatibilitate electromagnetică cu mediul), iar costul total include costurile cercetării, proiectării, construcției, testării, reparării produsului. În primul rând se pune problema stabilirii funcției pe care MC trebuie s-o îndeplinească în sistem. Alegerea din catalog a unui MC trebuie făcută în ideea a cât mai puțin hardware suplimentar (din motive economice). Procesul de căutare este dificil din cauza numărului foarte mare de tipuri de MC disponibile pe piață . După stabilirea MC optim se verifică prețurile, dacă este disponibil, suportul acordat de fabricant, existența uneltelor de dezvoltare, stabilitatea firmei constructoare. Un criteriu important este posibilitatea de a fi găsit pe piață (optenabilitatea), mai ales în zone în care circulația mărfurilor este destul de greoaie. Criteriile pentru alegerea unui MC sunt, în ordinea importanței:
1. Posibilitatea folosirii în aplicația dată. Este suficient un MC sau sunt necesare circuite suplimentare;
2. Liniile I/O sunt suficiente (un număr prea mic înseamnă că aplicația nu se poate face cu acest MC, iar un număr prea mare înseamnă un cost excesiv);
3. Există toate interfețele solicitate de aplicație: I/O serial, convertoare A/D, D/A și nu există interfețe în plus;
4. Există capacitatea de memorare suficientă: RAM, ROM;
5. MC are viteza suficientă pentru această aplicație. Se verifică timpul necesar rulării programului, care trebuie să fie mai mic decât intervalul de timp în care trebuie să reacționeze MC.
Un argument pentru alegerea unui tip de MC este existența unui modul de evaluare. Pentru a promova propriile MC, mulți furnizori au creat Kit-uri de evaluare care conține plăci de evaluare și un soft minimal cu care se poate învăța utilizarea MC și se pot pune la punct aplicații. Un kit conține de regulă un program monitor pentru calculator PC, un program de transfer al datelor spre placa de evaluare (prin interfața RS232 sau CENTRONICS), un asamblor și un compilator C. Toate kiturile sunt însoțite de documentație.
Schema bloc a unui microcontroller
Schema este în continuare o reprezentare generalizată :
Fig. 4.38. Schema bloc a unui microcontroller [27]
Se poate observa că un MC este organizat în jurul unei magistrale interne pe care se vehiculează date, adrese și semnale de comandă și control între blocurile funcționale. Unitatea centrală execută instrucțiunile pe care le primește prin magistrala de date din memoria program. Structura Harvard este posibilă și răspândită la MC pentru că de regulă instrucțiunile sunt stocate în memoria ROM, iar datele în cea RAM. Magistrala de date și cea de adrese pot fi separate sau multiplexate. Fiecare MC are un controller de întreruperi care admite atât intrări din exterior cât și de la modulele interne. Unele MC dispun de un controller DMA propriu.Modulele I/O pot fi seriale sau paralele. Fiecare modul transferă date cu exteriorul prin intermediul registrului de date (RD). Modulul este programat (configurat) de unitatea centrală prin intermediul unui registru de comenzi (RC) și se poate citi starea modulului prin registrul de stare (RS). Prin RS se pot genera întreruperi către unitatea centrală. Registrele modulelor I/O pot fi văzute de UC ca locații de memorie sau ca dispozitive de I/O într-un spațiu de adresare separat. Sub numele de dispozitiv I/O, într-o abordare generalizată, sunt cuprinse principalele interfețe ale MC (timer, canal serial UART) și linii I/O grupate în porturi paralele de uz general. Același nume generic poate acoperi și interfețele speciale întâlnite în configurații particulare de MC (convertor A/D, interfață serială sincronă, interfață LCD, interfață USB, etc.
Particularizare. Diagrama bloc a microcontrollerului PIC16F887
Fig. 4.39. Diagrama bloc microcontroller PIC16F887 [30]
Dispozitive I/O
Dispozitivele I/O reprezintă un aspect de mare interes atunci când este vorba de microcontroller, interes rezultat din însăși particularitatea unui MC aceea de a interacționa cu mediul în procesul de control pe care îl conduce.
Dispozitivele I/O implementează funcții speciale degrevând unitatea centrală de toate aspectele specifice de comandă și control în funcția respectivă. Există o varietate mare de dispozitive I/O; dispozitivele I/O conduc operații generale de comunicație (transfer serial sau paralel de date), funcții generale de timp (numărare de evenimente, generare de impulsuri), operații de conversie analog/numerică, funcții de protecție, funcții speciale de comandă, și enumerarea poate continua. Parte din resurse acoperă funcțiile de control propriu-zis, iar o parte asigură funcțiile necesare aplicațiilor în timp real (sistemul de întreruperi, timer). Din această mare varietate, parte din dispozitive se găsesc în configurația tuturor MC sau sunt foarte des întâlnite, iar o altă parte de dispozitive o regăsim doar în MC construite pentru a optimiza aplicații cu un grad mare de particularitate.
În acest capitol, în continuare, vor fi prezentate dispozitive des întâlnite în echiparea MC. Dispozitivele I/O sunt “văzute” de unitatea centrală ca porturi. Există două filozofii de alocare a adreselor (mapare) pentru apelarea porturilor de către unitatea centrală. Porturile sunt mapate fie în spațiul de memorie, fie într-un spațiu propriu.
Avantajele mapării în spații separate:
• Metoda nu este susceptibilă de a provoca erori soft deoarece se
folosesc instrucțiuni diferite pentru a accesa memoria și dispozitivele I/O;
• Dispozitivele I/O nu ocupă spațiu de memorie;
• Decodificatorul de adrese pentru dispozitivele I/O este mai simplu,
deoarece spațiul de adresare al dispozitivelor I/O este mai mic.
Dezavantaje ale mapării în spații separate:
• instrucțiunile I/O sunt mai puțin flexibile în comparație cu
instrucțiunile de lucru cu memoria;
• instrucțiunile I/O nu permit folosirea modurilor de adresare folosite în
lucrul cu memoria.
Avantajul mapării în spațiu comun:
• toate instrucțiunile de lucru cu memoria și toate modurile de adresare
sunt utilizabile și în tratarea dispozitivelo I/O (programarea operațiilor
I/O este foarte flexibilă);
Dezavantajele mapării în același spațiu:
• este susceptibil la erori software;
• spațiul de adresare disponibil pentru memorie este mai mic.
Avantajul mapării într-un spațiu comun este acelă că se poate opera cu porturile la fel ca și cu o locație de memorie; multe operații aritmetice și logice folosesc operanzi direct de la port, datele pot fi mutate între porturi cu o singură instrucțiune, conținutul unui port poate fi citit, incrementat și rezultatul scris din nou la port de asemenea cu o singură instrucțiune.
Schema electronică generală
Fig. 4.40. Schema electronică generală
În partea de alimentare a sistemului electronic s-a utilizat un circuit de stabilizare pe ramura pozitivă de tensiune, acest lucru însemnand că indiferent de tensiunea de alimentare aplicată la intrarea acestuia, tensiunea de ieșire va fi tot timpul constanta si de valoare 5V. În scopul filtrării tensiunii de alimentare, s-au utilizat condensatori de 100 de nF atât pe partea de intrare, în modulul stabilizator, cât și în partea de ieșire (5V).
Fig. 4.41. Modul alimentare
Condensatorul de 100uF va filtra glich-urile tensiunii de alimentare la frecvența joasă, iar condesatorii de valoare mai mică (100nF), vor filtra variațiile de frecvență mai mari, ale tensiunii de alimentare. Un alt aspect ce trebuie menționat este cel că variațiile în frecvență și glich-urile la frecvență mare, sunt introduse în mare parte de catre microcontroller, la executarea instrucțiunilor de lucru, dar și de oscilatorul cu quartz.
În scopul protecției întregului modul electronic la o eventuală alimentare cu tensiune inversă, s-a utilizat o metoda simplă de protecție, și anume, introducerea în paralel cu tensiunea de alimentare a unei diode schottky în configurație inversă (anodul conectat la GND). Astfel, când polaritatea tensunii de alimentare este respectată, dioda se va comporta ca un contact deschis cu o rezistentă ohmică foarte mare. In momentul în care sistemul electronic s-a alimentat invers, dioda va intra în conducție și va închide circuitul prin ea, nelăsând ca inversa tensiune să ajungă pe circuitul principal de procesare cu microcontroller. S-a ales diode schottky deoarce este mai rapidă ca o diodă normală redresoare și începe să intre în conducție de la tensiunea de aproximativ 0.3V :
Fig. 4.42. Caracteristica electrică diode Schottky[21]
De asemenea pentru a se indica faptul că sistemul electronic este sub tensiune, s-a integrat în sistemul de alimentare, la ieșirea stabilizatorului, un LED de culoare verde, împreună cu un resistor de 100 de ohm, cu scop de limitare a curentului prin LED.
O eventuală defecțiune la partea de alimentare a circuitului va determina ne-aprinderea acestui LED.
Rezistorul integrat la pinul numarul 1( MCLR) al microcontrollerului este utilizat ca resistor de pull-up, în scopul evitarii unei posibile resetari. Atunci când pinul de MCLR este conectat la masă, sau tensiunea de pe acesta scade sub o anumita valoare minimă, se declanșează mecanismul de resetare a sistemului, proces în care registri interni vor fi setați la valori inițiale de startare. Pinul MCLR, pe langă funcția de I/O și de reset, mai are și funcția de pin de programare (VPP) și utilizat în funcția de încarcăre a codului software în microcontroller.
Fig. 4.43. MCLR-VPP
Operațiunile de ștergere și scriere în memorie, sunt realizate, așa cum a fost menționat și anterior în cadrul proiectului, prin intermediul comunicației ICSP.
Fig. 4.44. Conexiune ICSP
Descrierea Software
Module Timer
Natura aplicațiilor pentru care s-a născut microcontroller-ul implică o multitudine de funcții de timp puse la dispoziția utilizatorului prin module de timp numite timer. Un MC este echipat în mod obligatoriu cu un astfel de modul, mai mult sau mai puțin complex. Un sistem timer obișnuit pune la dispoziție un set de funcții implementate, pe baza unui numărător liber central și a unor blocuri funcționale pentru fiecare funcție în parte. Timer-ul are în structura sa, dintre toate celelalte subsisteme, cele mai multe registre. Toate funcțiile unui timer pot genera întreruperi independente; fiecare are controlul propriu și propriul vector de întrerupere. Modulele timer complexe sunt construite cu arii de numărare programabile (PCA). Pentru aplicații speciale în timp real s-au construit module timer cu unitate aritmetică și logică proprie. Timer-ul este folosit pentru a măsura timpul și pentru a genera semnale cu perioade și frecvențe dorite. Timer-ele nu sunt doar circuite cu funcții de temporizare; în modulul timer sunt implementate câteva mecanisme care pun la dispoziția utilizatorului funcții specifice. Mecanismul de comparare permite controlul unor semnale de ieșire; mecanismul de captură permite monitorizarea unor semnale de intrare; numărătoarele interne permit generarea de referințe de timp interne, necesare în bucle de întârziere, multiplexarea diferitelor sarcini software, ș.a. Timer-ul poate fi folosit practic pentru orice funcție de timp, inclusiv generarea unor forme de undă sau conversii D/A simple. Funcțiile oferite de un timer sunt:
1. Captură la intrare (IC – input capture) – această funcție se bazează pe posibilitatea de a stoca valoarea numărătorului principal la momentul apariției unui front activ al unui semnal extern. Facilitatea permite măsurarea lățimii unui impuls sau a perioadei unui semnal. Facilitatea poate fi folosită și ca referință de timp pentru declanșarea altor operații.
2. Comparare la ieșire (OC – output compare) – se compară la fiecare impuls de ceas valoarea numărătorului principal cu cea a unui registru. Dacă se constată egalitate, în funcție de programarea anterioară pot avea loc următoarele evenimente: declanșarea unei acțiuni la un pin de ieșire (opțional), setarea unui flag într-un registru sau generarea unei întreruperi pentru unitatea central (opțional). Funcția este folosită pentru a genera întârzieri sau pentru a genera o formă de undă cu valori dorite pentru frecvență și pentru factorul de umplere .
3. Întreruperi în timp real (RTI – real-time interrupt) – într-un sistem există sarcini care trebuiesc executate periodic sau care nu permit depășirea unui interval limită între doua execuții. Aceste sarcini sunt lansate ca rutine de tratare a întreruperii generate de timer.
4. COP (computer operating properly) watchdog – această funcție este folosită pentru a reseta sistemul în cazul în care din erori de programare (bugs) sau erori în desfășurarea programului datorate perturbațiilor mediului, registrul COP nu este accesat într-un interval de timp prescris.
5. Acumulare de pulsuri (pulse accumulator) – este funcția folosită pentru a număra evenimentele ce apar într-un interval de timp determinat sau pentru a măsura durata unui impuls.
Microcontrollerul PIC16F887
Fig. 4.45. Microcontroller-ul PIC16F887 [30]
Microcontrollerul utilizat pentru acest proiect este PIC16F887 și are reprezentarea pinilor ca în figura 1. Așa cum se poate observa și din figura nr.1 pinii microcontrollerului înglobează mai multe funcții, asfel, pinii corespunzători port-ului PORTA pot fi setați și ca pini analogici de intrare, dar și ca pini digitali de intrare/ieșire. De asemenea pinii Vpp , RB7 si RB6 sunt utilizați în programarea memoriei microcontrollerului prin conexiune ICSP, dar pinii RB7 s RB6, pot fi utilizați și ca pini digitali de intrare/ieșire. PIC16F887 conține un număr de 14 canale analogice și pot fi folosite în regim multiplexat, independent unul de celalalt.. Microcontrolerul are la bază arhitectura de tipul Harvard și un număr de 35 de instrucțiuni, putând opera la o frecvența maximă a oscilatorului de 20 Mhz, reprezentând o viteza propriuzisă de lucru de F(clock)/4= 200 nanosecunde.
Fig. 4.46. Arhitectura Harvard [31]
Un aspect important legat de acest tip de arhitectură este acela ca memoria program este separată de memoria de date, în acest fel fiind posibila citirea unei date și a unei instrucțiuni în același timp( memoria de date și memoria program se afla pe BUS-uri diferite). Tehnica pipeline este cea, prin intermediul careia o instrucțiune se executa corect iar în cazul de față, o instrucțiune este corect realizata în 4 perioade de clock, astfel, la o frecvență a oscilatorului de 20 Mhz, frecvența reală de lucru a microcontrolerului va fi de 20/4 = 5 Mhz, sau altfel spus, 5 mips (5 milioane de de instructiuni pe secunda). Această tehnică se regasește și la procesoare și ajută la creșterea vitezei propriuzise de lucru. Fiecare etapă din cele 4 din procesul pipeline, este executată de catre o unitate funcțională a microcontrollerului. Segmentele pipeline sunt conectate între ele, intr-un mod analog asamblarii unei conducte din segmente de teava. Segmentele tipice de execuție ale unei instrucțiuni masină pe microcontroller sunt :
F- fetch – se referă la un ciclu special, în care procesorul citește din memorie codul instrucțiunii ce urmează a fi executată.
D-decode – se referă la procesul de decodare, proces în care instrucțiunea este recunoscută și procesul are tot ce ii trebuie pentru execuția instrucțiunii.
E-execute- reprezintă procesul propriuzis de execuție a instrucțiunii.
W-write-back- scrierea rezultatului înapoi în memorie.
Fig. 4.47. Instrucțiuni de lucru [30]
Referitor la microcontrollerul PIC16F887, acesta, pe langă oscilatorul extern ce poate fi adaugat din punct de vedere hardware, mai contine și un oscilator intern fiind posibilă selectarea unei frecvențe cuprinse între 31kHz-8Mhz. În cazul de față frecvența la care operează microcontrolerul este de 8 Mhz și a fost ales pentru că are integrat în construcția sa o platformă ADC multicanal, platformă ce a corespuns standardelor de design digital alese la inceputul construcției acestui proiect. O serie de caracteristici ce descriu microcontrollerul PIC16F887 sunt prezentate în figura urmatoare :
Fig. 4.48. PIC16F887 [30]
Funcțiile pinilor pentru microcontrolerul PIC16F887:
Fig. 4.49 PIC16F887 funcțiile pinilor [30]
Pinul MCLR/Vpp
Acest pin are rolul de MASTER CLEAR OR RESET .
– MCLR and VPP sunt două funcții reprezentate prin același pin;
– MCLR reprezintă Master Clear, iar funcția de reset pe microcontroller va determina ca microcontrollerul să stea într-o stare de reset atât timp cât MCLR este conectat la GND . Datorita acestui fapt, pentru a se evita eventualele resetari ale microcontrollerului, se utilizează un rezistor de tipul pull-up care mentine în permanentă pinul de MCLR la Vdd. Cand MCLR e conectat la Vdd, atunci microcontrollerul va începe să execute prima instrucțiune din memoria program.
Definiția VPP se traduce ca fiind Voltage for Programming și este utilizat în procesul scrierii memoriei. Atunci când amplitudinea tensiunii de pe pinul Vpp este cuprinsa intre 9-13V microcontrollerul intra într-o stare specială de reset, unde acesta nu funcționează, dar poate fi programat.
Fig. 4.50. Pinul MCLR
Configurarea modului de lucru al microcontroller-ului
În proiectul de față s-au utilizat configurațiile de input-uri digitale, input-uri analogice și output-uri digitale pentru îndeplinirea tuturor funcțiilor proiectului, în urmatorul mod :
––––––––-DSCRIERE PROIECT BANDA RULANTA–––––––-
-Rulează mesaje de informare/avertizare pe LCD-ul alfanumeric de 16×2 caractere;
-Rulează la startare un program de selftest pentru verificarea funcționalitații sistemelor;
-Conectare la bluetooth cu afișare și posibilitate de start-sotop;
-Senzorii în infraroșu detectează dimensiunea și culoarea unui cub;
-Rularea benzii și selectorul au la bază motoarele DC;
-Contorizarea numarului de cuburi și afișarea pe LCD și pe teminal;
-Banda rulantă poate fi oprită din butoanele de comandă și din terminal-bluetooth;
–––––––––––-SETARI DE LUCRU–––––––––––––––-
1.a. INPUT-URI ANALOGICE
RA0/AN0 -> input analogic citire distanța în infraroșu – senzorul de la bază(1);
RA1/AN1 -> input analogic citire distanța în infraroșu – senzorul de sus(2);
1.b. INPUT-URI DIGITALE
RA2 -> encoder -capăt de cursă stânga;
RA3 -> encoder -capăt de cursă dreapta;
RC0 -> microswitch de comandă START;
RC1 -> microswitch de comandă STOP;
2. OUTPUT-URI
RC2 -> LED albastru;
RC3 -> LED roșu;
RD7 -> MOTOR DRIVER ENABLE 1 – pentru selector;
RD6 -> MOTOR DRIVER INPUT 1 – pentru selector;
RD5 -> MOTOR DRIVER INPUT 2 – pentru selector;
RD4 -> MOTOR DRIVER ENABLE 2 – pentru rulare bandă;
RC5 -> MOTOR DRIVER INPUT 3 – pentru rulare bandă;
RC4 -> MOTOR DRIVER INPUT 4 – pentru rulare bandă;
3. CONFIGURARE LCD ALFANUMERIC
PIN NUMBER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
DESCRIPTION Vss Vdd Vo Rs R/W En D0 D1 D2 D3 D4 D5 D6 D7 BA(+) BLK-()
PIC16F887 Vss Vdd Pot RB0 GND RB2 GND GND GND GND RD3 RD2 RD1 RD0 Vdd(R) Vss
4. MODUL BLUETOOTH UART
PIN NUMBER 1 2 3 4 5 6
DESCRIPTION WUP VCC GND TXD RXD STS
PIC16F887 NC VCC GND RX(RC7) TX(RC6) NC
Convertoarele ADC
Intrările/ieșirile analogice și convertoarele A/D nu sunt considerate ca parte definită în contextul unui calculator. Prezența modulelor A/D și D/A în structura unui MC contribuie la “puterea”acestuia în aplicații deoarece interfațarea cu mediul presupune necesitatea de a prelucra sau de a elabora mărimi analogice. Convertoarele A/D sunt des întâlnite printre perifericele on-chip. Convertoarele D/A nu sunt întâlnite în mod uzual printre unitățile componente deoarece sunt relativ ușor implementate în exterior. Un convertor D/A simplu poate fi realizat folosind un timer în mod PWM și integrând pulsul în exterior cu un simplu circuit RC.
Convertoarele A/D integrate pe chip sunt convertoare cu aproximații succesive sau mai rar, convertoare cu integrare. Însușirile convertoarelor nu sunt deosebite; sunt convertoare lente în comparație cu cele implementate în circuite independente. Timpii de conversie obișnuiți sunt plasați în intervalul 10μs-25μs. Rezoluția este de 8, 10 sau 12 biți iar precizia de +/-1/2LSB. Modulul de conversie este prevăzut și cu un multiplexor analogic, astfel sunt disponibile mai multe canale de intrare. Unele MC sunt echipate și cu circuit de eșantionare/memorare. În cazul în care circuitul de eșantionare/memorare lipsește, semnalul analogic trebuie menținut constant pe durata unei conversii. Tensiunea de referință necesară convertorului poate fi generată în circuit sau dacă nu, este necesar să fie furnizată din exterior. În continuare, este prezentată o schemă bloc simplă a unui modul de conversie A/D. Circuitul analogic de intrare constă într-un multiplexor analogic, un circuit de eșantionare/memorare și un convertor A/D cu aproximații succesive. Tensiunea de referință pentru convertor și masa analogică sunt furnizate din exterior la pini speciali. Clock-ul necesar convertorului este generat intern din clock-ul unității centrale.
Fig. 4.51. ADC [33]
În proiectul de fată, PORTA al microcontrolerului este utilizat pe post de convertor cu intrari analogice, intrari ce preiau semnalele generate de senzorii cu care este echipat sistemul. Canalele ADC folosite în conversia analog-numerică, sunt pe 10 biți și sunt utilizate astfel :
INPUT-URI ANALOGICE:
RA0/AN0 -> input analogic citire distanța în infraroșu – senzorul de la bază(1);
RA1/AN1 -> input analogic citire distanța în infraroșu – senzorul de sus(2);
Așa cum a fost menționat și anterior în proiect, pentru achiziția semnalelor analogice provenite de la senzorii sistemului, se utilizează un singur convertor analog-numeric, cu reprezentare a semnalului analogic de intrare în format digital pe 10 biți și rezoluție de 4.88 mV / bit. Convertorul lucrează în regim muliplexat sau altfel spus este utilizat pentru toate semnalele analogice de intrare prin setarea corespunzătoare a registrilor ANSEL, ANSELH. Legatura dintre PORTA, PORTB și registri ANSEL și ANSELH pentru setarea canalelor de intrare analogice este urmatoarea :
Fig. 4.52. ANSEL și ANSELH [34]
Pentru a seta un canal în modul de intrare analogic, de exemplu pentru pinul RA0/AN0, trebuie ca, în prima fază sa se seteze bitul 0 din registrul TRISA cu 1L ( pinul RA0 se face pin de intrare) iar apoi să se seteze bitul 0 din registul ANSEL cu 1L pentru ca pinul RA0 să aibă funcția de intrare analogic. Daca nu se seteaza bitul din registrul ANSEL, atunci intrarea va avea funcția doar de intrare digitala.
Un aspect important legat de acești doi registri (ANSEL și ANSELH) este acela că, setarea valorilor biților din continutul lor nu afectează ieșirile digitale.
Configurația arhitecturală a registrilor ANSEL și ANSELH este urmatoarea :
Fig. 4.53. Corelație ANSEL /TRIS [34]
Considerente software legate de convertorul ADC
În ceea ce privește partea de procesare a semnalelor analogice și ținând cont de formatul, rezoluția, regiștrii implicați în procesul de achiziție a datelor, partea software este baza procesarii semnalelor. În cazul de fată, dacă se face referire la semnalul analogic de pe intrarea RA/AN0, ieșirea divizorului rezistiv are o plaja de valori cuprinsa între 0-5000mV. Valoarea amplitudinii de pe canalul de intrare AN0 este citita și convertită în format digital pe 10 biți de catre convertorul ADC, deci pentru valoarea maximă a tensiunii din intrare (~5V), convertorul ADC va genera un cuvant pe 10 biți de valoare maxima, adică de 1024 (2^10). De aici se poate deduce într-un mod simplu rezoluția, dupa formula :
Rez = Valoarea în fizic (5V) / Valoarea în hex (1024) = 4.88 mv/bit.
În cod, achiziția și procesarea semnalului analogic s-a realizat astfel :
adc_reading_IR_jos= ADC_Read(0);
adc_reading_IR_jos= ADC_Read(1);
S-au utilizat funcțiile predefinite ale compilatorului MikroC pentru citirea semnalelor analogice provide de la senzorii analogic ce lucrează pe principiul reflexiei în infraroșul.
Astfel, după cum se poate observa și în linia de cod expusă mai sus, în prima fază se citește valoarea semnalului de pe canalul 0 al convertorului ADC prin Adc_Read(0). În final, această valoare este copiată în variabila de tip integer, adc_reading_IR_jos și respectiv adc_reading_IR_jos și utilizată ulterior în cod pentru analiza dimensiunii și culorii cuburilor de pe bandă.
Microswich-uri
Din punctul de vedere al conectivitații cu microcontroller-ul, cele două switch-uri sunt conectate astfel :
Reacția sistemului electronic la apăsarea tastei este imediat deoarece această operație de interogare pe pinii digitali de intrare PORTC biți 0 și 1, este efectuată în intrerupere cu o frecvență de 60 us :
––––––––––––––––secventa microswith–––––––––––––––
––––––––––––––end secventa microswith–––––––––––––––
La fiecare 60 us (program counter-ul) PC, sare automat la overflow în funcția de întrerupere aflată la adresa 0x0004h unde în permanență se tratează starea microswitch-ului de funcționalitate. În momentul în care s-a detectat faptul că acesta este apăsat, se schimbă automat starea variabilei ce menține flow-ul sistemului – “start_bandă_normal” ca în urmatoarea secvența de cod :
–––––––––––––––––––––––––––––––––––––––
–––––––––––––––––––––––––––––––––––––––
În funcție de această variabilă “start_bandă_normal”, în programul principal se iau decizii de startare sau oprire a benzii automate. Totodată, așa cum a fost menționat și anterior în cadrul acestui proiect, comenzile de start și respectiv stop, se pot efectua direct din butoanele de START și STOP sau, dacă sistemul de Bluetooth este activat, se poate efectua direct din terminal prin apăsarea tastei “s” pentru stratare sau a tastei “p” pentru oprire a benzii, așa cum se poate observa și din figura urmatoare :
––––––––––––––––––––––––––––––––––––––
––––––––––––––––––––––––––––––––––––––-
Dupa cum se poate observa din imaginea de mai sus, în funcția de intrerupere în permanență sunt interogate butoanele de START și STOP dar, în permaneneța se interoghează și ce s-a trimis de pe serial catre modulul Bluetooth. Astfel, dacă sistemul a recepționat 115 în format zecimal ce înseamna “s” atunci valoarea variabilei start_banda_normal se modifică în valoarea “1” iar în programul principal se schimba funcționalitațile – banda începe să ruleze. Același lucru se întamplă și în momentul în care s-a recepțional “112” în format zecimal, ce înseamnă “p” – în acest caz valoarea variabilei start_bandă_normal devine 0 și banda se va opri.
Intreruperile pe TIMER1
Modulul de TIMER1 este un timer/numerator format din 2 registri de 8 biți TMR1H și TMR1L ce pot fi scriși și citiți. Pentru a se putea utiliza acest timer, se folosește în proces și registrul INTCON cu setari pe biții INTCON.GIE și INTCON.PEIE. Bitul PIE1.TMR1IE este setat pentru începerea întreruperilor, iar PIR1.TMR1IF este resetat, valoarea de start a counter-ului modului TRIMER1 fiind stabilită prin valorile celor 2 registri:
Aceast lucru însemnand începerea numărării de la valoarea counter-ului 65435 până la 65535, deci generarea unei întreruperi la fiecare 100 x 0.5us=50 us. Astfel segmentarea / eșantionarea în timpi de lucru se va realiza cu un pas/rezoluție de 50 us. Prin intermediul TIMER1 se realizează software, procesul de preluare a semnalelor provenite de la tastatura sistemului compusă din microswitch-uri, interogarea buffer-ului sistemului de comunicație serial și nu în cele din urma generarea de semnal PWM pentru comanda motorului ce se ocupă cu angrenarea benzii. Este folosit un semnal de tip PWM pentru comanda motorului de angrenare al benzii, pentru a se putea încetini viteza de învârtire a acestuia.
Comanda motoarelor în semnal PWM
Acest tip de semnal – Pulse Width Modulation este o modalitate de a varia controlat, teniunea de ieșire prin modficarea factorului de umplere “DUTY CYCLE”. Perioada de timp corespunzătoare valorii ON dintr-un ciclu ON-OFF se numește factor de umplere (duty cycle) și reprezintă, în medie, ce tensiune va primi dispozitivul electronic. Astfel, se pot controla circuitele analogice din domeniul digital. Practic, asta înseamnă că un LED acționat astfel se va putea aprinde / stinge gradual, iar în cazul unui motor acesta se va învârti mai repede sau mai încet. Modificand factoul de umplere ce compune semnalul PWM, se va modifica implicit și amplitudinea semnalului continuu de la ieșire:
Fig. 4.54. Semnal PWM
La baza generării acestui tip de semnal stau un numărător și un comparator. Astfel, funcția numărătorului este de a contoriza, pe o anumită frecvența de eșantionare, timpul cât semnalul a rămas în valoarea de 0L sau 1L. În permanență, odată cu contorizarea temporală, se compară valoarea contorului cu valoarea prestabilită a semalului PWM. În momentul în care s-a ajuns la egalitate sau depașire (contor >= valoare prestabilită semnal PWM) se face înversarea de semnal, acest lucru însemnand ca durata componentei semanalului de “duty cycle” a luat sfarșit și se continua cu perioada de 0L, până în momentul în care s-a ajuns la sfarșitul perioadei semnalului. Toata această etapă se repetă în permanență și modificând componenta de “duty cycle” cu perioada semnalului ramânând acceeași se va modifica de fapt amplitudinea semnalului continuu generat în ieșirea sistemului.
Descrierea software a sistemului (MIKROC)
Partea software a sitemului a fost realizata în cod C prin intermediul compilatorului Mikroc, iar codul inscris în memoria flash a microcontrollertului prin intermediul programului software PICkit2. În ceea ce provește strict partea software, au fost utilizate variabile globale, funcții și proceduri de întrerupere. Variabilele utilizate în codul sursă și tipul acesora :
––––––––––––––-variabile––––––––––––––––––––
int i=0; // contor general
int contor_pw =0; // contor generare semnal PWM în întrerupere
int check_ok = 0; // verificare în coditionare IF
int start_banda_normal =0; // trigger acționare semnal PWM pentru rularea benzii;
int valoare_calibrata_IR_jos=0; // valoare calibrată senzor 1
int valoare_calibrata_IR_sus=0; // valoare calibrată senzor 2
int adc_reading_IR_jos =0; // valoare citită de pe ADC de la senzorul IR 1
int adc_reading_IR_sus=0; // valoare citită de pe ADC de la senzorul IR 2
int contoriz = 0; // contorizare număr de cuburi
int check_if=0; // pentru condiționare
int one_time =0; // pentru condiționare
char uart_rd; // valoare citită de pe UART
char conversion[30]; // conversie pentru afișare pe LCD
char msg[16]; // variabilă mesaj afișare pe LCD
const char LCD_txt1[] = "CONVEYER PROJECT";// mesa de interes de afișat pe LCD
const char LCD_txt3[] = " *SELFTEST* "; // mesa de interes de afișat pe LCD
const char LCD_txt4[] = "CHECK BLUETOOTH";// mesa de interes de afișat pe LCD
const char LCD_txt6[] = " CALIBRARE "; // mesa de interes de afișat pe LCD
const char LCD_txt7[] = "––IR–––"; // mesa de interes de afișat pe LCD
const char LCD_txt8[] = "–-cub alb––"; // mesa de interes de afișat pe LCD
const char LCD_txt9[] = "–-CUB ALB––"; // mesa de interes de afișat pe LCD
const char LCD_txt10[]= "–cub negru–-"; // mesa de interes de afișat pe LCD
const char LCD_txt11[]= "–CUB NEGRU–-"; // mesa de interes de afișat pe LCD
const char LCD_txt12[]= " "; // mesa de interes de afișat pe LCD
const char LCD_txt13[] = "CONTOR:"; // mesa de interes de afișat pe LCD
const char LCD_txt133[] = " TIP-CUB "; // mesa de interes de afișat pe LCD
const char LCD_txt14[] ="–BANDA OPRITA–";// mesa de interes de afișat pe LCD
const char UART_txt0[] = " EMPTY"; // mesa de interes de afișat pe LCD
const char UART_txt1[] = " ALB "; // mesa de interes de afișat pe LCD
const char UART_txt2[] = " alb "; // mesa de interes de afișat pe LCD
const char UART_txt3[] = " NEGEU"; // mesa de interes de afișat pe LCD
const char UART_txt4[] = " negru"; // mesa de interes de afișat pe LCD
––––––––––––––––––––––––––––––––––––––
LCD-ul conține un procesor propriu, dar și memorie CGROM, iar programarea microcontrollerului s-a realizat tinând cont de aceste lucruri și utilizând funcții predefinite de afișare și control. Funcțiile corespunzătoare LCD-ului utilizate în proiect sunt :
Configurare display LCD
PIN NUMBER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
DESCRIPTION Vss Vdd Vo Rs R/W En D0 D1 D2 D3 D4 D5 D6 D7 BA(+) BLK-()
PIC16F887 Vss Vdd Pot RD7 RD6 RD5 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 Vdd(R) Vss
Configurare software s-a realizat prin intermediul urmatoarei funcții predefinite:
––––––––––-LCD16x2 CONFIGURARE–––––
//–––––––-Initializare LCD–––––––––––––//
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB2_bit;
sbit LCD_D4 at RD3_bit;
sbit LCD_D5 at RD2_bit;
sbit LCD_D6 at RD1_bit;
sbit LCD_D7 at RD0_bit;
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB2_bit;
sbit LCD_D4_Direction at TRISD3_bit;
sbit LCD_D5_Direction at TRISD2_bit;
sbit LCD_D6_Direction at TRISD1_bit;
sbit LCD_D7_Direction at TRISD0_bit;
–––––––––––––––––––––––––––––––––––
Alte funcții utilizate, cu referire la LCD-ul alfanumeric sunt :
––––––––––––––––––––––––––––––––––––-
Lcd_Cmd(Lcd_CLEAR) ; se sterg caracterele de pe LCD
––––––––––––––––––––––––––––––––––––-
Afișare mesaj linia 1, coloana1:
––––––––––––––––––––––––––––––––––––- strConstCpy(text,mesg1);
Lcd_Out(1,1,text);
––––––––––––––––––––––––––––––––––––-
Mesajele ce ulterior vor fi folosite la rularea sistemului sunt definite astfel :
–––––––––––––––-Mesaje pe LCD––––––––––––––
const char LCD_txt1[] = "CONVEYER PROJECT";
const char LCD_txt3[] = " *SELFTEST* " ;
const char LCD_txt4[] = "CHECK BLUETOOTH";
const char LCD_txt6[] = " CALIBRARE " ;
const char LCD_txt7[] = "––IR–––" ;
const char LCD_txt8[] = "–-cub alb––" ;
const char LCD_txt9[] = "–-CUB ALB––" ;
const char LCD_txt10[]= "–cub negru–-" ;
const char LCD_txt11[]= "–CUB NEGRU–-" ;
const char LCD_txt12[]= " " ;
const char LCD_txt13[] = "CONTOR:" ;
const char LCD_txt133[] = " TIP-CUB " ;
const char LCD_txt14[] ="–BANDA OPRITA–";
const char UART_txt0[] = " EMPTY" ;
const char UART_txt1[] = " ALB " ;
const char UART_txt2[] = " alb " ;
const char UART_txt3[] = " NEGRU" ;
const char UART_txt4[] = " negru" ;
––––––––––––––––––––––––––––––––––––-Funcția de afișare a acestor mesaje se realizează astfel :
––––––––––––––––––––––––––––––––––––
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt1)); // afisare mesaj pe LCD-ul 16×2
––––––––––––––––––––––––––––––––––––-
În această funcție, în prima fazș se copiază mesajul într-o variabilă de tipul char prin funcția “CopyConst2Ram” și ulterior se realizează afișarea propriuzisă a mesajului la linia și coloana definite prin primele doua variabile ale funcției “Lcd_Out”. Definirea funcței de afișare propriuzisa a mesajelor este urmatoarea :
––––––––––––––––––––––––––––––––––––-
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt1)); // afisare mesaj pe LCD-ul 16×2
Delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
Delay_ms(1000);
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt3));
––––––––––––––––––––––––––––––––––––-
Crearea unui character de tip custom ce nu poate fi regasit în memoria microcontrollerului display-ului alfanumeric, se realizează prin intermediul urmatoarei funcții :
––––––––––––––––––––––––––––––––––––-
void CustomChar(const char *def, unsigned char n, char pos_row, char pos_char)
{
char i ;
LCD8_Cmd(64 + n * 8) ;
for(i = 0 ; i<=7 ; i++)
{
LCD8_Chr_Cp(def[i]) ;
}
LCD8_Cmd(LCD_RETURN_HOME) ;
LCD8_Chr(pos_row, pos_char, n) ;
}
––––––––––––––––––––––––––––––––––––-
În prima fază a începerii programării se setează pinii I/O ce vor fi ulterior folosiți în proiect astfel :
––––––––––––––––––––––––––––––––––––-
––––––––––––––––––––––––––––––––––––––
Se utilizeaza AN0-AN1 ca inputuri analogice responsabile cu achiziția semnalelor provenite de la senzori și a AN2-AN3, pentru preluarea semnalelor digitale de intrare. Concomitent cu setarea pinilor din PORTA ca pini de intrare (care momentan sunt pini de intrare digitali), se seteaza si registrul ANSEL cu aceleași valori atribuite port-ului PORTA pentru ca să se producă modificarea din pini de intrare digitali, în pini de intrare analogici.
––––––––––––––––––––––––––––––––––––-
––––––––––––––––––––––––––––––––––––––
Tensiunea de ieșire generată pe port-urile anterior setate ca port-uri cu pini de intrare/ieșire este 0 la alimentarea microcontrollerului. În proiectul de fată s-a utilizat sistemul de întreruperi pe TIMER1 al microcontrollerului pentru managementul stării curente de funcționare a sistemului. Întruperea pe acest timer s-a realizat în modul urmator :
––––––––––––––––-interrupt––––––––––––––––– ––––––––––––––––––––––––––––––––––––––Registri care intră în alcătuirea mecanismului de întrerupere (întrerupere periferică) pentru TIMER1 sunt:
Fig. 4.55 Registrul INTCON
Registrul T1CON :
Fig. 4.56. Registrul T1CON
Registru PIR1 :
Fig. 4.57. Registrul PIR1
Registrul PIE1 :
Fig. 4.58 Registrul PIE1
Registrii de menținere a valorii în format digital pe 16 biți a semnalului analogic din intrarea convertorului sunt TMR1H și TMR1L. Ca și funcționalitate, TIMER1 module este utilizat în citirea permanentă cu o recurentă de 50us a starii microswitch-urilor, în funcție de care se realizează navigarea în meniul sistemului automatizat. Astfel, bazându-ne pe funcția de intrerupere apelată automat în mometul unui overflow pe TIMER1 (funcție aflată în memorie la adresa 0x004h), se poate observa mecanismul de tratare a stării microswitch-ului:
–––––––––––––funcție de întrerupere––––––––––––
//–––––-intrerupere generata pe TIMER1––––––––––-//
void interrupt (){
if(start_banda_normal ==1 ){
PORTC.f2 = 1 ;
}
if(start_banda_normal ==0 ){
PORTC.f2 = 0 ;
PORTC.f3 = 1 ;
}
if (uart_rd == 115) // start banda prin bt
start_banda_normal = 1;
if (uart_rd == 112) // stop banda prin bt
start_banda_normal = 0;
if (PORTC.f0) // start banda prin buton albastru
{
start_banda_normal = 1;
uart_rd = 1;
}
if (PORTC.f1){ // stop banda prin buton rosu
start_banda_normal = 0;
uart_rd = 0;
}
//–––––––-testat banda rulare PWM = ok––––––––-//
if (start_banda_normal == 1 ){
contor_pw = contor_pw+1;
if (contor_pw < 50)
{
PORTD.f4 = 0; // pwm motor banda
PORTC.f5 = 0;
PORTC.f4 = 0;
}
if (contor_pw >=50 && contor_pw<100)
{
PORTD.f4 = 1; // pwm motor banda
PORTC.f5 = 0;
PORTC.f4 = 1;
}
if (contor_pw>=100)
contor_pw = 0;
}
else {
PORTD.f4 = 0;
PORTC.f5 = 0;
PORTC.f4 = 0;
}
//
PIR1.TMR1IF = 0;
TMR1H = 0b11111111;
TMR1L = 0b10011011;
}
––––––––––––––––––––––––––––––––––––-
Bazându-ne pe codul sursă mai sus expus, și referindu-ne strict la tratare stării microswith-urilor, se poate observa că sistemul, la fiecare salt în întrerupere cu o recurentă de 50 us testează dacă s-a apasat microswitch-ul. Tinând cont de starea în care se află sistemul în meniul de bază, exprimat prin variabila check se efectuează modificarea variabilei “start_banda_normal” :
––––––––––––––––––––––––––––––––––––-
––––––––––––––––––––––––––––––––––––––
Aceste variabile, dupa ce program counter-ul PC revine în programul de bază, sunt analizate si in functie de acestea , prin intermediul unor brench-uri si conditionari de tip “ IF “ sistemul stie sa isi schimbe status-ul current.
Descrierea functionalitații software
În prima fază de startare a sistemului, se inițializează LCD-ul alfanumeric și comunicația serial UART :
––––––––––––––––––––––––––––––––––––––
Ulteiror se afiseaza mesajul de tipul :
În etapa imediat următoare, se intițiază procedura de “SELFTEST” în care sistemul își verifică funcționalitatea senzorilor și a mecasnismelor de acționare :
//––––––––-SELFTEST pe LED rosu-albastru–––––––//
for (i=1;i<10;i++){
PORTC.f2 = 0 ;
PORTC.f3 = 1 ;
Delay_ms(50) ;
PORTC.f2 = 1 ;
PORTC.f3 = 0 ;
Delay_ms(50) ;
PORTC.f2 = 1 ;
PORTC.f3 = 1 ;
Delay_ms(50) ;
}
PORTC.f2 = 0 ; // reset 0L on LED's
PORTC.f3 = 0 ; // reset 0L on LED's
//–––––-TEST BANDA RULANTA LA STARTARE SISTEM––––––//
PORTD.f4 =1 ; // rulare banda sens- backward
PORTC.f5 = 1 ;
PORTC.f4 = 0 ;
Delay_ms(1000); // STOP
PORTD.f4 = 0 ;
PORTC.f5 = 0 ;
PORTC.f4 = 0 ;
Delay_ms(1000); // rulare banda sens- forward
PORTD.f4 = 1 ;
PORTC.f5 = 0 ;
PORTC.f4 = 1 ;
Delay_ms(1000); // STOP
PORTD.f4 = 0 ;
PORTC.f5 = 0 ;
PORTC.f4 = 0 ;
//––––––––TEST SELECTOR LA STARTARE SISTEM–––––––//
while (! PORTA.f3 ){
PORTD.f7 = 1 ; // pwm- motor selectie
PORTD.f5 = 0 ;
PORTD.f6 = 1 ;
Delay_us(2000);
PORTD.f7 = 0 ; // pwm- stop motor selectie
PORTD.f5 = 0 ;
PORTD.f6 = 0 ;
Delay_us(3000);
}
PORTD.f7 = 0 ; // stop motor selectie
PORTD.f5 = 0 ;
PORTD.f6 = 0 ;
Delay_ms(3000);
while (! PORTA.f2 ){
PORTD.f7 = 1; // pwm- motor selectie
PORTD.f5 = 1;
PORTD.f6 = 0;
Delay_us(2000);
PORTD.f7 = 0; // pwm- stop motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
Delay_us(3000);
}
PORTD.f7 = 0; // stop motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
Din acest moment sistemul ajunge într-o blucă în care, pentru a începe startarea benzii și a tuturor sistemelor, se așteptă input-ul utilizatorului care poate fi definit ori prin apăsarea butonului de “START”, ori conectarea prin Bluetooth la sistem și apoi apăsarea tastei “s”:
–––––––––––––––––––––––––––––
Din acest moment se începe procedura de calibrare a senzorilor și se activează timer-ul TIMER 1 astfel :
––––––––––––––––––––––––––––––––––––-
Se ajustează poziția selectorului pe cuburi mici(stânga) și se afiseaza pentru început mesajul “contor”.
–––––––––––––––––––––––––––––––––––––
Atâta timp cât nu se detectează nici un cub, contorul ce numară cuburile nu se incrementează și pe LCD se afisează un mesaj nul :
Funcția în programul principal pentru detecția și afișarea pe LCD a tipului de cub negru mic sau mare este :
//––––––––––––cub negru mic-MARE––––––––––
if ((adc_reading_IR_jos > (valoare_calibrata_IR_jos+60)) && (adc_reading_IR_jos < (valoare_calibrata_IR_jos+140))){ // testat ok
Delay_ms(300);
if ((adc_reading_IR_sus > (valoare_calibrata_IR_sus+10)) && (adc_reading_IR_sus < (valoare_calibrata_IR_sus+200))) // testat ok
{
if (!check_if){
contoriz ++;
check_if++;
}
PORTC.f3 = 1 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt11));
}
else
{
if (!check_if){
contoriz++;
check_if++;
}
PORTC.f3 = 1 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt10));
}
}
Definirea funcției de detectare a cubului alb mic sau mare, pe baza informației provenite de la senzorii în infraroșu este:
//––––––––cub alb mic-MARE–––––––––––-//
if (adc_reading_IR_jos > (valoare_calibrata_IR_jos+450)){ // testat ok
if (adc_reading_IR_sus > (valoare_calibrata_IR_sus+450)) // testat ok
{
if (!check_if){
contoriz++;
check_if++;
}
PORTC.f3 = 1 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt9));
}
else
{
if (!check_if){
contoriz++;
check_if++;
}
PORTC.f3 = 1 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt8));
}
}
if ((adc_reading_IR_jos >= (valoare_calibrata_IR_jos+60)) && (adc_reading_IR_sus > (valoare_calibrata_IR_sus+60))){
while (! PORTA.f3 && !one_time ){
PORTD.f7 = 1; // pwm motor banda
PORTD.f5 = 0;
PORTD.f6 = 1;
Delay_us(200);
PORTD.f7 = 0; // pwm motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
Delay_us(10);
}
one_time = 1 ;
}
if ((adc_reading_IR_jos >= (valoare_calibrata_IR_jos+60)) && (adc_reading_IR_sus <= (valoare_calibrata_IR_sus+5))){
while (! PORTA.f2 && (one_time==1) ){
PORTD.f7 = 1; // pwm motor banda
PORTD.f5 = 1;
PORTD.f6 = 0;
Delay_us(200);
PORTD.f7 = 0; // pwm motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
Delay_us(10);
}
one_time = 0;
}
while (!start_banda_normal ){
if (UART1_Data_Ready()== 1)
uart_rd = UART1_Read(); // read the received data
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt14));
}
}
}
Funcția de întrerupere în care se determină starea butoanelor, se generează semnalul PWM pentru comanda motorului de angrenare-bandă și nu în cele din urmă, se realizează un check pe comunicația seriala, este următoarea :
//–––––-intrerupere generata pe TIMER1––––––––––-//
void interrupt (){
if(start_banda_normal ==1 ){
PORTC.f2 = 1 ; // comentat LED rosu ca sa nu fie intrerupt atunci cand detecteaza cubul
}
if(start_banda_normal ==0 ){
PORTC.f2 = 0 ;
PORTC.f3 = 1 ;
}
if (uart_rd == 115) // start banda prin bt
start_banda_normal = 1;
if (uart_rd == 112) // stop banda prin bt
start_banda_normal = 0;
if (PORTC.f0) // start banda prin buton albastru
{
start_banda_normal = 1;
uart_rd = 1;
}
if (PORTC.f1){ // stop banda prin buton rosu
start_banda_normal = 0;
uart_rd = 0;
}
//–––––––-testat banda rulare PWM = ok––––––––-//
if (start_banda_normal == 1 ){
contor_pw = contor_pw+1;
if (contor_pw < 50)
{
PORTD.f4 = 0; // pwm motor banda
PORTC.f5 = 0;
PORTC.f4 = 0;
}
if (contor_pw >=50 && contor_pw<100)
{
PORTD.f4 = 1; // pwm motor banda
PORTC.f5 = 0;
PORTC.f4 = 1;
}
if (contor_pw>=100)
contor_pw = 0;
}
else {
PORTD.f4 = 0;
PORTC.f5 = 0;
PORTC.f4 = 0;
}
PIR1.TMR1IF = 0;
TMR1H = 0b11111111;
TMR1L = 0b10011011;
}
REALIZAREA SISTEMULUI AUTOMATIZAT DE SORTARE A REPERELOR CU CONTROL LA DISTANȚĂ
Realizarea proiectului
Proiectul de față a fost realizat cu scopul de a implementa un sistem electronic cu microcontroller si senzori analogici-digitali care sa fie capabil sa detecteze și să faca selecția obiectelor rulate pe o bandă de transmisie in funcție de marime si culoare. Platforma robotică are la bază microcontroller-ul pe 8 biți PIC16F887 ce functionează la tensiunea de 5V și care reprezintă principalul procesor analog-digital de semnale al sistemului. Afișarea datelor de interes se realizează pe un LCD alfanumeric de 16×2 caractere și un protocol de comunicare cu microcontroller-ul de 11bit (8biți de date + 3biți control) .
Fig. 5.1. Componentele platformei robotice
În cazul de fată, sistemul electronic recunoaște, analizează și afisează pe un LCD alfanumeric numărul total al reperelor ce trec prin fața senzorilor, dar și culoarea acestora (albă sau neagră). Întreg modulul electronic se alimentază la o tensiune maximă de 15V pentru a se evita defectarea stabilizatorului pozitiv de tensiune de 5V, sistemul electronic fiind totodată protejat la inversă tensiune. În scopul comunicarii cu utilizatorul, sistemul de fată dispune de un LCD alfanumeric de 16×2 caractere, pe care sunt afișate datele de interes, dar în același timp afișarea datelor se realizează și wireless, prin comunicație de tip bluetooth. Startarea și oprirea benzii rulante aflată în regim normal de funcționare, se realizează prin intermediul a două butoane (START-STOP) de comandă sau direct din terminal, wireless prin comanda “s” pentru start si “p” pentru stop. Totodată pe teminalul de comunicații seriale este afișată în timp real valoarea contorului ce indică numărul de repere mici și mari analizate. În momentul în care un cub trece prin dreptul senzorilor în infraroșu, se realizează în timp real o analiză ce are ca scop, determinarea tipului de cub, la sfârșitul careia se afisează datele pe terminalalele mai sus amintite dar în același timp se comandă și acționarea motorului DC selector capăt de linie. Motoarele utilizate sunt motoare de curent continuu DC (4-6V) cu reductor 220:1 și sunt comandate software prin semnale în regim PWM. Pentru acționarea celor două motoare s-a utilizat un driver specializat de tipul L293, ce conține în structura sa internă două punți H prin intermediul carora se poate comanda învârtirea unui motor de tip DC în ambele sensuri.
Materialul ce sta la baza constuctiei platformei – machete este FOREX-ul , un material cu caracteristici speciale, ce se face remarcat prin duritate și o foarte mare ușurință în prelucrare. Materialele de construcție pentru banda de rulare și rolele de directivitate ce compun sistemul de angrenare au fost cumparăte ca materiale brute și adaptate sistemului.
Motoarele de curent continuu utilizate
Pentru realizarea machetei sistemului automatizat de sortare a reperelor, s-au folosit două motoare de current continuu, ce funcționează împreună cu câte un reductor de turație, raportul dintre turația axei motorului și cea a axei de ieșire din reductor fiind de 220/1. Datorită faptului ca reductorul modifică planul de rotație a motorului cu 90˚, s-a putut realiza, cu o foarte mare ușurință montarea celor două motoare pe platforma robotică.
Fig. 5.2. Motor pentru angrenarea sistemului selector
Fig. 5.3. Motor pentru angrenarea benzii transportoare
Driver-ul pentru motoare
Deoarece motoarele de current continuu functioneaza la o tensiune de alimentare de maxim 6 V , circuitul L293 este alimentat la tensiunea de 5V prin intermediul unui stabilizator pozitiv de tensiune. Ca si amplasare, modulul driver pentru cele doua motoare este amplasat asa cum reiese si din urmatoarea figura :
Fig. 5.4. Amplasarea driver-ului L293
Pentru alimentarea driver-ului de motoare, s-a decis realizarea unui circuit, alimentat de la sursa de tensiune, în paralel cu unitatea principală a sistemului automatizat de sortare. Împreună cu driver-ul de motoare, s-a montat un nou stabilizator de tensiune și un led, acesta din urmă, indicând alimentarea circuitului cu curent electric.
Sonzorii optici
Ca și dispunere pe platforma robotică mobilă, senzorii IR pot fi localizati astfel :
Fig. 5.5. Poziționarea senzorilor pe platformă
După cum se poate observa și din figura de mai sus, atât dioda emițătoare cât și cea receptoare în infraroșu sunt optic izolate, pentru a nu exista interferențe cu lumina naturală, dar și pentru a nu se afecta una pe cealaltă.
LCD-ul și modul bluetooth
Fig. 5.7. Dispunerea LCD-ului și a modulului bluetooth
Comunicatia ICSP
Ca și orientare pe platforma automatizată, conexiunea ICSP este dispusă așa cum se poate observa și din figura următoare:
Fig.72 Poziționare conexiune ICSP
Programoatorul Pickit2
Pentru scrierea codului sursă, în memoria microcontrolerului, prin intermediul conexunii ICSP, s-a ales folosirea modului Pickit2. Compilarea codului, pentru obținerea fișierului de tip HEX și importarea acestuia în memoria microcontrolerului s-a obținut cu programul PICkit2 v2.61.
Fig. 5.7. Modulul de programare Pickit2
O problemă aparută în timpul construcției a fost resetarea continuă a modulului central cu microcontroller în momentul în care se comanda acționarea motoarelor, problemă ce avea ca și cauză, consumul foarte mare de curent al motoarelor la primul impuls de rulare al benzii. Deoarece stabilizatorul pozitiv de tensiune al sistemului poate debita un maxim de 1.5A, în momentul acționării motoarelor de current continuu, consumul de current crește foarte mult și tensiunea de alimentare de 5V scade proporțional ducând în final la resetarea întregului sistem electronic. Soluția a fost utilizarea a încă unui stabilizator de 5V, separat de unitatea principală de procesare, pentru alimentarea driver-ului ce comandă motoarele de current continuu.
CONCLUZII FINALE, CONTRIBUȚII, PERSPECTIVE
Calculul fiabilitații
Fiabilitatea este o disciplină din domeniul ingineriei care utilizează cunoștințe stiințifice pentru asigurarea unor performanțe ridicate ale funcțiilor unui echipament, într-un anumit interval de timp și condiții de exploatare bine precizate. Aceasta include proiectarea, abilitatea de a întretine, de a testa și a menține echipamentul la parametri acceptabili pe toata durata ciclului de viață. Fiabilitatea unui echipament este descrisă cel mai bine de păstrarea performanțelor acestuia în timp. Performanțele de fiabilitate ale unui echipament sunt concretizate în faza de proiectare prin alegerea judicioasă a arhitecturii echipamentului, a materialelor, a procesului de fabricație, a componentelor – atât soft cât și hard – urmate de verificarea rezultatelor obținute în urma simulărilor și a testelor de laborator.
Fiabilitatea este un atribut al echipamentelor care nu trebuie ignorat. Caracteristicile de fiabilitate reprezintă ”ingredientele” critice pentru orice activitate de proiectare a echipamentelor industriale. Este de preferat să se țină cont de aspectele legate de fiabilitate înca din faza de proiectare, decât să nu se facă acest lucru în speranța că lucrurile vor merge bine.
Apariția unei teorii a fiabilitații a fost determinată de creșterea complexității echipamentelor și de caracterul de masă al producției moderne. Domeniul care a impulsionat dezvoltarea acestei discipline a fost, ca și în alte cazuri, cel militar întrucât în timpul celui de-al doilea razboi mondial s-a constatat ca echipamentele electronice complexe (echipamente de radiocomunicații, sonare etc.) se aflau în stare de defectare un timp sensibil mai mare decât timpul de funcționare normală. Pe baza soluțiilor oferite de catre această nouă disciplină – fiabilitatea – au fost posibile progrese mari și în alte domenii de activitate, precum centralele nucleare, transporturile (navale, terestre, aeriene și în ultimul timp spațiale), prelucrarea și transmisia datelor, producția bunurilor.
”Dupa trecerea de la producția manufacturiera la producția de masă s-a constatat o marire a dispersiei parametrilor echipamentelor datorată atât creșterii complexității cât și micșorarii posibilitaților de control interfazic pe liniile de producție. În cazul producției de masă, datorită modificărilor rapide ale cerințelor tehnice, se constată că nu este necesar întotdeauna să se obțină un nivel maxim posibil de fiabilitate, ci este esențial să se cunoască cu precizie care este nivelul real de fiabilitate, luându-se măsuri pentru deplasarea acestuia catre o valoare optimă. În decursul timpului s-a constat că, în cazul sistemelor și echipamentelor complexe, oricât s-ar investi pentru a obține o fiabilitate ideala, nu se poate obține un echipament care să nu se degradeze în timp. Din aceasta cauză este util să se cunoască nivelul real al fiabilitații, astfel încât, în funcție de acesta, să se stabilească durata misiunii, intervalele de revizie, structura echipamentului.”
Fiabilitatea este unul dintre parametrii determinanți pentru competitivitatea unui produs, întrucât gradul de vandabilitate crește semnificativ pentru produsele fiabile. Este de subliniat faptul că în programul de acțiuni lansate de Guvernul României la sfârsitul lunii august 2001 pentru creșterea exporturilor (și reducerea deficitului comercial al țării), una dintre măsurile propuse se referă la creșterea fiabilității produselor.
Din punct de vedere economic, cu cât un echipament prezintă o fiabilitate mai ridicată, în condiții tehnologice date, costul de investiție este mai ridicat; costurile de mentenanță CM sunt însă mici întrucât defecțiunile sunt rare și de intensitate redusa. Invers, un echipament ieftin și puțin fiabil implică niște costuri de mentenanță mai mari.
Fig. 6.1.
Un sistem este de tip paralel dacă funcționarea unui singur component este suficientă pentru funcționarea sistemului. În acest caz, sistemul va fi în pană (defect) dacă toate elementele sunt defecte. Cum S este evenimentul sistemul funcționează, vom spune că S este evenimentul sistemul nu functionează. Vom avea:
Fig. 6.2.
În cazul de față modulul electronic face parte din clasa sistemelelor serie-paralel (mixte), deoarece, la o defectare a unei componente, există probabilitatea ca sistemul să nu mai funcționeze(de exemplu, la defectarea microcontrollerului sau a stabilizatorului de tensiune LM 7805 sau a quartz-ului). În același timp, în ceea ce privește partea de senzoristică, defectarea unui senzor nu i-ar pune probleme sistemului deoarece acesta va funcționa normal cu semnalele provenite de la ceilalti senzori, lucru ce face ca sistemul sa fie de tipul mixt.
”Fiabilitatea sistemului electronic depinde în foarte mare măsura de calitatea si specificațiile componentelor alese în procesul de dezvoltare hardware-software. Calitatea componentelor diferă de la producător la producător și este de cele mai multe ori proporțională cu prețul acestora.”[28]
ANEXA 1
Codul MicroC
/*
––––––-DSCRIERE PROIECT BANDA RULANTA––––––
-Ruleaza mesaje de informare/avertizare pe LCD-ul alfanumeric de 16×2 caractere; |
-Ruleaza la startare un program de selftest pentru verificarea functionalitatii sistemelor; |
-Conectare la bluetooth cu afisare si posibilitate de start-sotop; |
-Senzorii in infrarosu detecteaza dimensiunea si culoarea unui cub; |
-Rularea benzii si selectorul au la baza motoarele DC; |
-Contorizarea numarului de cuburi si afisarea pe LCD si pe teminal; |
-LED-uri de avertizare-informare de culoare albastra si rosie; |
-Banda rulanta poate if oprita din butoanele de comanda si din terminal-bluetooth; |
–––––––––––-SETARI De LUCRU–––––––––––
1.a. INPUT-URI ANALOGICE
RA0/AN0 -> input analogic citire distanta in infrarosu – senzorul de la baza(1);
RA1/AN1 -> input analogic citire distanta in infrarosu – senzorul de sus(2);
1.b. INPUT-URI DIGITALE
RA2 -> encoder -capat de cursa stanga;
RA3 -> encoder -capat de cursa dreapta;
RC0 -> microswitch de comanda START;
RC1 -> microswitch de comanda STOP;
2. OUTPUT-URI
RC2 -> LED albastru;
RC3 -> LED rosu;
RD7 -> MOTOR DRIVER ENABLE 1 – pentru selector;
RD6 -> MOTOR DRIVER INPUT 1 – pentru selector;
RD5 -> MOTOR DRIVER INPUT 2 – pentru selector;
RD4 -> MOTOR DRIVER ENABLE 2 – pentru rulare banda;
RC5 -> MOTOR DRIVER INPUT 3 – pentru rulare banda;
RC4 -> MOTOR DRIVER INPUT 4 – pentru rulare banda;
3. CONFIGURARE LCD ALFANUMERIC
PIN NUMBER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
DESCRIPTION Vss Vdd Vo Rs R/W En D0 D1 D2 D3 D4 D5 D6 D7 BA(+) BLK-()
PIC16F887 Vss Vdd Pot RB0 GND RB2 GND GND GND GND RD3 RD2 RD1 RD0 Vdd(R) Vss
4. MODUL BLUETOOTH UART
PIN NUMBER 1 2 3 4 5 6
DESCRIPTION WUP VCC GND TXD RXD STS
PIC16F887 NC VCC GND RX(RC7) TX(RC6) NC
*/
int i=0; // contor general
int contor_pw =0; // contor generare semnal PWM in interurpere
int check_ok = 0; // verificare in incoditionare IF
int start_banda_normal =0; // trigger actionare semnal PWM pentru rularea benzii;
int valoare_calibrata_IR_jos=0; // valoare calibrata senzor 1
int valoare_calibrata_IR_sus=0; // valoare calibrata senzor 2
int adc_reading_IR_jos =0; // valoare citita de pe ADC de la senzorul IR 1
int adc_reading_IR_sus=0; // valoare citita de pe ADC de la senzorul IR 2
int contoriz = 0; // contorizare numar de cuburi
int check_if=0; // pentru conditionare
int one_time =0; // pentru conditionare
int cntr_mic = 0; //
int cntr_Mare = 0; //
//int cntr_nm = 0; //
//int cntr_N = 0; //
char uart_rd; // valoare citita de pe UART
char conversion[30]; // conversie pentru afisare pe LCD
char msg[16]; // variabila mesaj afisare pe LCD
//const char LCD_txt1[] = "CONVEYER PROJECT";// mesa de interes de afisat pe LCD
const char LCD_txt3[] = " *SELFTEST* ";// mesa de interes de afisat pe LCD
//const char LCD_txt4[] = "CHECK BLUETOOTH";// mesa de interes de afisat pe LCD
const char LCD_txt6[] = " CALIBRARE ";// mesa de interes de afisat pe LCD
const char LCD_txt7[] = "––IR–––";// mesa de interes de afisat pe LCD
const char LCD_txt8[] = "–-cub alb––";// mesa de interes de afisat pe LCD
const char LCD_txt9[] = "–-CUB ALB––";// mesa de interes de afisat pe LCD
const char LCD_txt10[]= "–cub negru–-";// mesa de interes de afisat pe LCD
const char LCD_txt11[]= "–CUB NEGRU–-";// mesa de interes de afisat pe LCD
const char LCD_txt12[]= " ";// mesa de interes de afisat pe LCD
const char LCD_txt13[] = " M"; // mesa de interes de afisat pe LCD
const char LCD_txt15[] = " m"; // mesa de interes de afisat pe LCD
const char LCD_txt133[] = " CONTOR "; // mesa de interes de afisat pe LCD
const char LCD_txt14[] ="–BANDA OPRITA–";// mesa de interes de afisat pe LCD
const char UART_txt0[] = " EMPTY"; // mesa de interes de afisat pe LCD
const char UART_txt1[] = " ALB "; // mesa de interes de afisat pe LCD
const char UART_txt2[] = " alb "; // mesa de interes de afisat pe LCD
const char UART_txt3[] = " NEGRU"; // mesa de interes de afisat pe LCD
const char UART_txt4[] = " negru"; // mesa de interes de afisat pe LCD
void Lcd8_data_write1 (int , int , int ); // declaratie functie de afisare pe LCD
//–––––––-Initializare LCD–––––––––––––//
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB2_bit;
sbit LCD_D4 at RD3_bit;
sbit LCD_D5 at RD2_bit;
sbit LCD_D6 at RD1_bit;
sbit LCD_D7 at RD0_bit;
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB2_bit;
sbit LCD_D4_Direction at TRISD3_bit;
sbit LCD_D5_Direction at TRISD2_bit;
sbit LCD_D6_Direction at TRISD1_bit;
sbit LCD_D7_Direction at TRISD0_bit;
//–––––––FUNCTIE ELIBERARE RAM LA AFISARE PE LCD––––––//
// copy const to ram string
char * CopyConst2Ram(char * dest, const char * src){
char * d ;
d = dest;
for(;*dest++ = *src++;);
return d;
*dest = 0;
}
//–––––––––WRITE VALUE TO LCD––––––––––//
void Lcd8_data_write1 (int linie, int coloana, int valoare)
{
IntToStr(valoare, msg);
Lcd_Out(linie, coloana , msg);
}
//––––––––––––––––––––––––––––––//
void main() {
//––––––––––PORT SETTINGS–––––––––––//
ANSEL = 0b00000011; // SETARI – intrari analogice
ANSELH = 0; // SETARI – intrari analogice
TRISA = 0b00001111; // SETARI – INPUT/OUTPUT pe TRISA
TRISC = 0b10000011; // SETARI – INPUT/OUTPUT pe TRISC
TRISB = 0b00000000; // SETARI – INPUT/OUTPUT pe TRISB
TRISD = 0b00000000; // SETARI – INPUT/OUTPUT pe TRISD
TRISE = 0b00000000; // SETARI – INPUT/OUTPUT pe TRISE
PORTD = 0b00000000; // SETARI – INPUT/OUTPUT pe TRISD
//–––––––––––––––––––––––––––––//
PORTD.f6 =0; // set on 0 all output's
PORTD.f5 =0; // set on 0 all output's
PORTD.f4 =0; // set on 0 all output's
PORTD.f3 =0; // set on 0 all output's
//––––––––-SETARI INTRERUPERE TIMER1––––––-//
INTCON.GIE = 1; //enable all un-masked interrupts
INTCON.PEIE = 1; //Set PEIE
T1CON = 1; //enable Timer1
PIR1.TMR1IF = 0; // setat pe 50us (60 pe osciloscop)
TMR1H = 0b11111111;
TMR1L = 0b10011011;
PIE1.TMR1IE = 0; // disable Timer1 interrupt
//–––––––––––––––––––––––––-//
PORTC.f5 = 0; // 0 pe driver-ul pentru comanda motoarelor
PORTC.f4 = 0; // 0 pe driver-ul pentru comanda motoarelor
PORTD.f6 = 0; // 0 pe driver-ul pentru comanda motoarelor
PORTD.f5 = 0; // 0 pe driver-ul pentru comanda motoarelor
PORTC.f2 = 0; // 0 pe driver-ul pentru comanda motoarelor
PORTC.f3 = 0; // 0 pe driver-ul pentru comanda motoarelor
//–––––––––INIT LCD–––––––––––––––
Lcd_Init(); // functie de intitializre LCD
Lcd_Cmd(_LCD_CLEAR); // functie Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // functie Cursor off
//–––––––––SETARE UART–––––––––––––//
UART1_Init(9600); // Initialize UART module at 9600 bps
Delay_ms(100); // Wait for UART module to stabilize
//–––––––––MESAJE DE INTAMPINARE PE LCD––––––––
// Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt1)); // afisare mesaj pe LCD-ul 16×2
// Delay_ms(3000);
// Lcd_Cmd(_LCD_CLEAR);
Delay_ms(1000);
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt3)); // afisare mesaj pe LCD-ul 16×2
//––––––––-SELFTEST pe LED rosu-albastru–––––––//
for (i=1;i<10;i++){
PORTC.f2 = 0 ;
PORTC.f3 = 1 ;
Delay_ms(50) ;
PORTC.f2 = 1 ;
PORTC.f3 = 0 ;
Delay_ms(50) ;
PORTC.f2 = 1 ;
PORTC.f3 = 1 ;
Delay_ms(50) ;
}
PORTC.f2 = 0 ; // reset 0L on LED's
PORTC.f3 = 0 ; // reset 0L on LED's
//––––TEST BANDA RULANTA LA STARTARE SISTEM––––––//
PORTD.f4 =1 ; // rulare banda sens- backward
PORTC.f5 = 1 ;
PORTC.f4 = 0 ;
Delay_ms(1000); // STOP
PORTD.f4 = 0 ;
PORTC.f5 = 0 ;
PORTC.f4 = 0 ;
Delay_ms(1000); // rulare banda sens- forward
PORTD.f4 = 1 ;
PORTC.f5 = 0 ;
PORTC.f4 = 1 ;
Delay_ms(1000); // STOP
PORTD.f4 = 0 ;
PORTC.f5 = 0 ;
PORTC.f4 = 0 ;
//–––-TEST SELECTOR LA STARTARE SISTEM–––––––//
while (! PORTA.f3 ){
PORTD.f7 = 1 ; // pwm- motor selectie
PORTD.f5 = 0 ;
PORTD.f6 = 1 ;
Delay_us(2000);
PORTD.f7 = 0 ; // pwm- stop motor selectie
PORTD.f5 = 0 ;
PORTD.f6 = 0 ;
Delay_us(3000);
}
PORTD.f7 = 0 ; // stop motor selectie
PORTD.f5 = 0 ;
PORTD.f6 = 0 ;
Delay_ms(3000);
while (! PORTA.f2 ){
PORTD.f7 = 1; // pwm- motor selectie
PORTD.f5 = 1;
PORTD.f6 = 0;
Delay_us(2000);
PORTD.f7 = 0; // pwm- stop motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
Delay_us(3000);
}
PORTD.f7 = 0; // stop motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
//–––––-CONECTIVITATE BLUETOOTH––––––––––//
Lcd_Cmd(_LCD_CLEAR);
// Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt4));
// Delay_ms(1000);
while (! PORTC.f0 && !check_ok ){
if (UART1_Data_Ready()== 1) { // If data is received,
uart_rd = UART1_Read(); // read the received data,
if (uart_rd == 115) // daca e 's' start
check_ok = 1 ;
}
}
check_ok = 0 ;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CLEAR);
//––––––-start banda rulare slow regim PWM––––––––//
start_banda_normal = 1;
//––––––-calibrare senzori infrarosu––––––––––––//
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt6)); // afisare mesaj pe LCD
Lcd_Out(2,1,CopyConst2Ram(msg,LCD_txt7)); // afisare mesaj pe LCD
Delay_ms(3000);
adc_reading_IR_jos= ADC_Read(0); // citire IR sensor 1
valoare_calibrata_IR_jos = adc_reading_IR_jos;
adc_reading_IR_sus= ADC_Read(1); // citire IR sensor 2
valoare_calibrata_IR_sus = adc_reading_IR_sus;
Delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
Lcd8_data_write1(1, 1,valoare_calibrata_IR_jos); // afisare valoare calibrata IR1
Lcd8_data_write1(1,10,valoare_calibrata_IR_sus); // afisare valoare calibrata IR2
//–––––––START TIMER 1 interrupt–––––––––––//
PIE1.TMR1IE = 1;
//––––––-setare pozitie initiala = cuburi mici––––––-//
while (! PORTA.f2){
PORTD.f7 = 1; // pwm DUTY CYCLE motor banda
PORTD.f5 = 1;
PORTD.f6 = 0;
Delay_us(200);
PORTD.f7 = 0; // pwm OFF motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
Delay_us(10) ;
}
//––––––afisare mesaj contorizare–––––––––––//
Lcd_Out(2,7,CopyConst2Ram(msg,LCD_txt13));
Lcd_Out(2,15,CopyConst2Ram(msg,LCD_txt15));
UART1_Write(10); //0x0A is ascii for new line for UART
UART1_Write(13); //0x0A is ascii for new line for UART
//–––––––––––––––––––––––––//
while (1) {
UART1_Write('\r'); // scriere pe aceeasi linie pe UART
Uart1_Write_Text(CopyConst2Ram(msg,LCD_txt133));
InttoStr(contoriz,conversion);
UART1_Write_Text( conversion);
// Uart1_Write_Text(CopyConst2Ram(msg,LCD_txt15));
//InttoStr(cntr_mic,conversion);
// UART1_Write_Text( conversion);
if (UART1_Data_Ready()== 1) // daca s-a receptionat DATA pe UART
uart_rd = UART1_Read(); // read the received data
// Lcd8_data_write1(2,11,contoriz);
Lcd8_data_write1(2,1,cntr_Mare);
Lcd8_data_write1(2,9,cntr_mic);
adc_reading_IR_jos= ADC_Read(0);
adc_reading_IR_sus= ADC_Read(1);
if ((adc_reading_IR_jos >= (valoare_calibrata_IR_jos-10)) && (adc_reading_IR_jos < (valoare_calibrata_IR_jos+10))){ // testat ok
if ((adc_reading_IR_sus >= (valoare_calibrata_IR_sus-10)) && (adc_reading_IR_sus < (valoare_calibrata_IR_sus+10))) // testat ok
{
PORTC.f3 = 0 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt12));
check_if = 0;
}
}
//–––––––––-cub negru mic-MARE––––––––––//
if ((adc_reading_IR_jos > (valoare_calibrata_IR_jos+60)) && (adc_reading_IR_jos < (valoare_calibrata_IR_jos+140))){ // testat ok
Delay_ms(300);
if ((adc_reading_IR_sus > (valoare_calibrata_IR_sus+10)) && (adc_reading_IR_sus < (valoare_calibrata_IR_sus+200))) // testat ok
{
if (!check_if){
contoriz ++;
cntr_Mare++;
check_if++;
}
PORTC.f3 = 1 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt11));
}
else
{
if (!check_if){
contoriz++;
cntr_mic++;
check_if++;
}
PORTC.f3 = 1 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt10));
}
}
//––––––––cub alb mic-MARE–––––––––––-//
if (adc_reading_IR_jos > (valoare_calibrata_IR_jos+450)){ // testat ok
if (adc_reading_IR_sus > (valoare_calibrata_IR_sus+450)) // testat ok
{
if (!check_if){
contoriz++;
cntr_Mare++;
check_if++;
}
PORTC.f3 = 1 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt9));
}
else
{
if (!check_if){
contoriz++;
cntr_mic++;
check_if++;
}
PORTC.f3 = 1 ;
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt8));
}
}
if ((adc_reading_IR_jos >= (valoare_calibrata_IR_jos+60)) && (adc_reading_IR_sus > (valoare_calibrata_IR_sus+60))){
while (! PORTA.f3 && !one_time ){
PORTD.f7 = 1; // pwm motor banda
PORTD.f5 = 0;
PORTD.f6 = 1;
Delay_us(200);
PORTD.f7 = 0; // pwm motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
Delay_us(10);
}
one_time = 1 ;
}
if ((adc_reading_IR_jos >= (valoare_calibrata_IR_jos+60)) && (adc_reading_IR_sus <= (valoare_calibrata_IR_sus+5))){
while (! PORTA.f2 && (one_time==1) ){
PORTD.f7 = 1; // pwm motor banda
PORTD.f5 = 1;
PORTD.f6 = 0;
Delay_us(200);
PORTD.f7 = 0; // pwm motor banda
PORTD.f5 = 0;
PORTD.f6 = 0;
Delay_us(10);
}
one_time = 0;
}
while (!start_banda_normal ){
if (UART1_Data_Ready()== 1)
uart_rd = UART1_Read(); // read the received data
Lcd_Out(1,1,CopyConst2Ram(msg,LCD_txt14));
}
}
}
//–––––-intrerupere generata pe TIMER1––––––––––-//
void interrupt (){
if(start_banda_normal ==1 ){
PORTC.f2 = 1 ; // comentat LED rosu ca sa nu fie intrerupt atunci cand detecteaza cubul
}
if(start_banda_normal ==0 ){
PORTC.f2 = 0 ;
PORTC.f3 = 1 ;
}
if (uart_rd == 115) // start banda prin bt
start_banda_normal = 1;
if (uart_rd == 112) // stop banda prin bt
start_banda_normal = 0;
if (PORTC.f0) // start banda prin buton albastru
{
start_banda_normal = 1;
uart_rd = 1;
}
if (PORTC.f1){ // stop banda prin buton rosu
start_banda_normal = 0;
uart_rd = 0;
}
//–––––––-testat banda rulare PWM = ok––––––––-//
if (start_banda_normal == 1 ){
contor_pw = contor_pw+1;
if (contor_pw < 3)
{
PORTD.f4 = 0; // pwm motor banda
PORTC.f5 = 0;
PORTC.f4 = 0;
}
if (contor_pw >=3 && contor_pw<33)
{
PORTD.f4 = 1; // pwm motor banda
PORTC.f5 = 0;
PORTC.f4 = 1;
}
if (contor_pw>=33)
contor_pw = 0;
}
else {
PORTD.f4 = 0;
PORTC.f5 = 0;
PORTC.f4 = 0;
}
////////////////////////////////////////////////////////////////////////////////
PIR1.TMR1IF = 0;
TMR1H = 0b11111111;
TMR1L = 0b10011011;
}
////////////////////////////////////////////////////////////////////////////////
BIBLIOGRAFIE
[1] Bishop R.H. – The Mechatronics Handbook, Second Edition, 2007
[2] Martin P. Bates – PIC Microcontrollers: An Introduction to Microelectronics, Third Edition,
Newnes, 2011
[3] Tim Wilmshurst – Designing Embedded Systems with PIC Microcontrollers, Second Edition: Principles and Applications, Newnes, 2009
[4] John Morton – The PIC Microcontroller: Your Personal Introductory Course, Third Edition,
Newnes, 2005
[5] Mătieș,V.,ș. a., Tehnologie și educație mecatronică. Auxiliar curricular pentru liceul tehnologic,Editura economică, București,2007.
[6] Curs 5 -Dezvoltare tehnologică și tehnologii educaționale, UTCN, Cluj Napoca, 2011.
[7] SR EN 61131-3, Automate programabile, partea 3. Limbaje de programare.
[8] www.nxp.com/acobat_download/aplicationnotes/APPCHP3.PDF[5] Bejan, M., În lumea unităților de măsură, ediția a doua revăzută și adăugită. Editura Academiei Române și Editura AGIR, București, 2005.
[9] http://whatis.techtarget.com/definition/machine-vision
[10] http://www.ni.com/white-paper/11564/en/#toc2
[11] http://www.dipolnet.ro/ghid_sisteme_de_supraveghere iluminarea_ir_pentru_sisteme_de_supraveghere_bib21_13.htm
[12] http://www.engineersgarage.com/articles/image-processing-tutorial-applications
[13]http://stiintasiinginerie.ro/wp-content/uploads/2013/12/67-TEHNICI-DE-PROIECTARE-A-SISTEMELOR.pdf
[14]Cristea L.,Ionescu E.,Olteanu C. – Automate de control in industrie. Editura didactica si pedagogica, R.A., Bucuresti,1998.
[15]Ivanescu M. – Sisteme avansate de conducere in robotica. Editura Scrisul Romanesc, Craiova, 2003.
[16] Drimer D, Dorin A. – Roboti industriali si manipulatoare. Editura Tehnica, Bucuresti, 1985.
[17]Căpățână O., Hașeagan.M.C., Pușcă, M., Proiectarea cu micropocesoare. Editura Dacia, Cluj-Napoca, 1983.
[18]Dumitru S., Mihu I., Munteanu F.,Muscă Ghe., Calcev G. – Automatizări Electronice. Editura Didactica și pedagogică, R.A., București.
[19] http://www.robofun.ro/mecanice/motoare/motoreductor-plastic
[20] http://www.alldatasheet.com/datasheet-pdf/pdf/112909/TI/L293.html
[21] http://www.polytech-lille.fr/cours-atome-circuit-integre/unip/unip543.htm
[22] http://www.adafruit.com/datasheets/IR333_A_datasheet.pdf
[23]http://aparate.elth.ucv.ro/TUSALIU/CURSURI/Tehnica%20tensiunilor%20inalte/Laborator/L.12.%20Masurarea%20tensiunilor%20inalte%20cu%20divizoare%20de%20tensiune.pdf
[24] https://www.sparkfun.com/datasheets/LCD/ADM1602K-NSW-FBS-3.3v.pdf
[25] http://www.electronica60norte.com/mwfls/pdf/newBluetooth.pdf
[26]http://www.stkaiser.de/anleitung/files/PL2303.pdf
[27] http://www.unitbv.ro/faculties/biblio/interfete_specializate/curs.pdf
[28] http://193.226.6.120/Miclea/Curs_PDF/FIAB1.pdf
[29]http://www.mikroe.com/chapters/view/2/chapter-1-pic16f887-microcontroller-device-overview/
[30] http://www.futurlec.com/Microchip/PIC16F887.shtml
[31] http://ece.ubm.ro/ea/cursuri/MM/ASM_C3.pdf
[32] http://www.scribd.com/doc/227818941/Microcontrolere-PIC-de-La-a-La-Z#scribd
[33] http://www.etc.ugal.ro/cchiculita/students/pam/L_ADCb.pdf
[34] http://432x.ncss.ro/Anul%20III/SMC/Laboratoare/laborator%201%20-%20Porturi.pdf
[35] http://cs.curs.pub.ro/wiki/pm/lab/lab3?do=export_pd
[36] http://andrei.clubcisco.ro/cursuri/3pm/lab2.pdf
[37] http://www.etc.ugal.ro/cchiculita/students/pam/UART_Seriala_C.pdf
[38] https://en.wikipedia.org/wiki/In-system_programming
[39] http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf
[40] https://en.wikipedia.org/wiki/PICkit
[41] http://www.mikroe.com/chapters/view/64/chapter-1-introduction-to-microcontrollers/
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: Realizarea Sistemului Automatizat de Sortare a Reperelor cu Control la Distanta (ID: 163321)
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.
