-Sistem robotic automatizat – [604049]
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
1
Universitatea Tehnică de Construcții București
Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
-Sistem robotic automatizat –
LINER ROBOT
Îndrumător : Ș.I. Dr. Ing. Robert Pecsi
Absolvent: [anonimizat] – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
2
București , 2020
Cuprins
1. OBIECTIV ………………………….. ……………… 3
2. DESCRIERE A MODULAR Ă A SISTEMULUI ROBOTIC ……………… 4
3. FABRICAREA PCB -urilor ………………………….. …. 15
4. SCHEMA ELECTRONIC Ă A SISTEMULUI …………………….. 21
4.1. MICROCONTROLLER -ul PIC18F46K80 …………………… 22
4.2. ETAJUL DE STABILIZARE ………………………….. . 23
4.3. ETAJUL DE PROTEC ȚIE LA INVERSA TENSIUNE …………… 25
4.4. PINUL DE HW -RESET ȘI PROGRAMARE: VPP/MCLR …………. 26
4.5. SISTEMUL DE AFI ȘARE CU LCD ………………………. 28
4.6. SENZORUL DE TENSIUNE ………………………….. .. 31
4.7. MODULUL PENTRU COMUNICA ȚIA WIRELESS BLUETOOTH ……… 32
4.8. DRIVERUL MOTOARELOR DC(MX1508) …………………… 39
4.9. SISTEMUL DE M ĂSURARE AL VITEZEI CU ENCODER ………… 40
5. DESIGN-ul BRAȚULUI ARTICULAT CU SERVOMECANISM ………… 42
6. DESIGN-UL SOFTWARE AL SISTEMULUI ……………………. 46
7. CODUL SURS Ă AL SISTEMULU ROBOTIC ……………………. 65
8. BIBLIOGRAFIE ………………………….. …………. 84
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
3
1. OBIECTIV
Scopul p roiectului este acela de a implementa practic un sistem robotic ce este capabil
să traseze linii prin intermediul unui ansamblu mecatronic realizat cu servomecanism RC.
Platforma robotic ă are la baz ă o arhitectur ă de locomo ție în 3 puncte, ceea ce înseamn ă două
roți directoare de trac țiune pe puntea fa ță și o roat ă mobil ă 360 grade pe puntea spate. Cele
două motoare de curent continuu sunt comandate independent de c ătre un driver specializat ce
conține în structura sa intern ă două punți H și permite robotului o mi șcare circular ă (robotul se
poate învârti pe loc). Cele dou ă motoare de curent continuu conțin intern câte un mecanism de
convertire a cuplu lui (cutie viteze/ reductor) și au un factor de reduc ție de 49:1. Pe platforma
robotic ă am implementat un sistem articulat cu amortizare , cu scopul de a se evita presiune a
supli mentar ă pe servomecanismul ce ac ționeaz ă sistemul de marcaj. În ceea ce prive ște
comanda robotului , aceasta se realizeaz ă prin intermediul comunica ției wireless de tip
bluetooth cu utilizatorul, acesta din urm ă având posibilitatea s ă comande platforma înainte –
înapoi -stânga-dreapta, s ă acționeze mecanismul de marcaj dar s ă și execute în mod automat
trasarea unor modele predefinite precum : cerc, p ătrat sau linii discontinue pe distan țe
predefinite. Utilizatorul dispune de o interfa ță realizat ă pe smartphone și poate trimite robotului
comenzi în timp real prin simpla ap ăsare de butoane, comenzi ce vor fi recep ționate și decodate
de către microcontroller. Comunica ția wireless -utilizator -sistem robotic este posibil ă datorit ă
modulului wire less bluetooth HM -10 ce interac ționeaz ă cu microcontroller -ul prin intermediul
unei comunica ții serial -asincrone care mai este denumit ă și UART. Modulul bluetooth este
alimentat la tensiunea stabilizat ă de 5V iar distan ța de interceptare la care modulul functioneaz ă
optim este de maxim 15m. În ceea ce prive ște partea de afi șare a sistemului automatizat, aceasta
se realizeaz ă prin intermediul unui LCD aflanumeric de 20×4 caractere pe care se vor afi șa
mesaje de interes și parametri de proces (precum viteza d e deplasare sau tensiunea
acumulatorului). Conexiunea LCD -ului cu microcontroller -ul este realizat ă printr -un BUS de
date pe 6 bi ți dintre care 2 sunt utiliza ți în sectorul de comand ă iar restul de 4 în transmisia
propriu -zisă a cuv ântului de date. Microcontroller -ul utilizat face parte din familia Microchip,
este de tip PIC18F46K80, are la baz ă o arhitectur ă de tip Harward și ruleaz ă la frecven ța de 64
Mhz, ceea ce înseamn ă o vitez ă reală de execu ție a instruc țiunilor de 16MIPS (16 milioane de
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
4
instrucțiuni pe secund ă). Viteza de deplasare a robotului este citit ă cu ajutorul unui encoder
digital ce trimite impulsuri de 0L și 1L microcontroller -ului în func ție de distan ța parcurs ă în
unitatea de timp.
2. DESCRIERE A MODULAR Ă A SISTEMULUI ROBOTIC
FIG.1 Descrierea modular ă a sistemului robotic
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
5
MICROCONTROLLER -UL PIC18F46K80
Sistemul electronic automatizat este format din mai multe blocuri electronice iar la baza
proces ării semnalelor digitale și arhitecturii software se afl ă microcontroller -ul PIC18F46k80.
Acesta lucreaz ă la frecven ța de 64Mhz care semnific ă o frecven ță reala de execu ție a
intruc țiunilor de 16MIPS (16 milioane de instructiuni pe secunda) deoarece microcontroller –
ului îi sunt necesare 4 fronturi de clock pentr u execu ția unei singure instruc țiuni. În cazul de
față microcontroller -ul lucreaz ă la o frecven ță de clock de 64Mhz iar tensiunea de alimentare
este de 5V . Microcontroller -ul con ține 40 de pini iar tensiunea de alimentare a acestuia este
obținută prin intermediul unui element stabilizator pozitiv de tensiune de 5V. Alimentare a
microcontroller -ului este realizat ă separat de partea electronic ă de putere cu scopul de a se evita
secvențele de reset la sc ăderea tensiunii de alimentare (în momentul ac ționării dispozitivelor
de putere curentul consumat cre ște semnificativ, duc ând în final la o sc ădere a tensiunii de
alimentare). Ca și arhitecura intern ă acest microcontroller con ține urm ătoarele blocuri
funcționale:
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
6
FIG.2 Arhitctura intern ă a microcontroll er-ului PIC18F46K80(da tasheet)
Microcontroller -ul PIC18F46K80 are la baz ă o arhitec tură de tip Harward, ceea ce
înseamn ă că memoria program este separat ă de memoria de date, facilit ând în acest sens
scăderea timpului de execu ție a unei instruc țiuni, a șa cum va fi prezentat și în urm ătorii pa și ai
proiectului.
FIG.3 Microcontroler -ul PIC18F46K80
Așa cum a m menționat, m icrocontrollerul utilizat pentru acest proiect este
PIC18F46K80 și are reprezentarea pinilor ca în figura de mai sus . Pinii I/O ai microcontroller –
ului înglobeaz ă mai multe func ții, as tfel, 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
și RB6 sunt utiliza ți în progr amarea memoriei microcontroller -ului prin conexiune ICSP, dar
pinii RB7, RB6 pot fi utiliza ți și ca pini digitali de intrare/ie șire. Microcontroller -ul
PIC18F46K80 conține un num ăr de 1 1 canale analogice și pot fi folosite în regim multiplexat,
independe nt unul de celalalt. Microcontroller -ul are la baz ă arhitectur ă de tipul Harvard și un
număr de 35 de instruc țiuni, put ând opera la o frecven ță maxim ă de 64 Mhz , reprezent ând o
vitez ă propriu -zisă de lucru de F(clock)/4= 16Mhz . Acest lucru înseamn ă că microcontroller -ul
are capabilitatea de a executa un num ăr de 16 milioane de instruc țiuni pe secund ă, lucru ce il
recomand ă în proiecte de acest gen. În urm ătoarea figur ă este descris ă arhitectura de tip
Harvard unde memoria de date și memoria de program sunt complete diferen țiate, acest lucru
ajutând la m ărirea vitezei de procesare. În compara ție cu arhitectura de tip Von Neumann care
folose ște acela și bus de comunica ție pentru citirea unei date și a unei instruc țiuni de executat,
arhitectura de tip Harwa rd constituie un avantaj deoarece procesorul poate citi o instruc țiune și
o dat ă în acela și timp , deoarece comunica ția se realizeaz ă prin intermediul a dou ă BUS -uri de
date separate, a șa cum se poate observa și din urmatoarea figur ă:
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
7
FIG.4 Arhitectura Harvard
Un aspect important legat de acest tip de arhitectura este acela ca memoria program
este separata de memoria de date , in acest fel fiind posibila citirea unei date si a unei
instructiuni in acelasi timp( memoria de date si memoria pr ogram se afla pe BUS -uri diferite).
Tehnica pipeline este cea prin intermediul careia o instructiune se executa corect iar in cazul
de fata , o instructiune este corect realizata in 4 perioade de clock, astfel , la o frecventa a
oscilatorului de 64 Mhz, f recventa reala de lucru a microcontrolerului va fi de 2 64/4 = 16 Mhz,
sau altfel spus, 16 mips ( 16 milioane de de instructiuni pe secunda) Aceasta tehnica se
regaseste si la procesoare si ajuta la cresterea vitezei propriuzise de lucru. Fiecare etapa din
cele 4 din procesul pipeline este executata de catre o unitate functionala a microcontrollerului.
Segmentele pipeline sunt conectate intre ele intr -un mod analog asamblarii unei conducte din
segmente de teava. Segmentele tipice de executie ale unei inst ructiuni masina pe
microcontroller sunt :
F- fetch – citireadin din memorie codul instruct iunii ce urmeaza a fi executata;
D-decode – se refera la procesul de decodare , proces in care instructiunea este recunoscuta si
procesul are tot ce ii trebui e pentru executia instructiunii;
E-execute – reprezinta procesul propriuzis de executie a instructiunii ;
W-write -back – scrierea rezultatului inapoi in memorie;
FIG.5 Executia unei instructiuni
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
8
In ceea ce priveste microcontrollerul PIC1 8F46K80 , acesta, pe langa oscilatorul extern
ce poate fi adaugat din punct de vedere hardware, mai contine si un oscilator intern fiind
posibil astfel prin intermediul multiplicatorului PLL atingerea unei frecvente de pana la 64
Mhz. In cazul de fata frecventa la care opereaza microcontrolerul este de 64 Mhz (oscilator
intern) si a fost ales pentru ca are integrat in constructia sa o platforma ADC multicanal,
platforma ce a corespuns standardelor de design digital alese la incepu tul constructiei acestui
proiect. Un avantaj net fata de alte microcontrollere este acela referitor la viteza mare de
executie a instructiunilor si totodata numarul mare de canale I/O de care dispune. Pe langa toate
aceste caracteristici superioare se mai adaga faptul ca microcontrollerul dispune side o serie
larga de modul de comunicatie serial -sincrona si asincrona, I2C, CAN, convertor analogic pe
12 bit si este totodata versatil din punctul de vedere al alimentarii deoarece poate fi alimentat
cu o tens iune de 3.3V pana la 5V. Programarea microcontroller -ului se realizeaza prin
intermediul conexiunii de tip ICSP ce este compusa din 5 pini (Vpp, Vdd, Vss, DAT si CLK).
O serie de caracteristici ce descriu microcontrollerul PIC1 8F46K80 sunt prezentate in figura
urmatoare :
FIG.6 Caracteristici PIC18F46K80
Micocontroller -ul PIC18F46K80 dispunde de urmatoarele sisteme implementate:
• Power -Saving modul Sleep
• Gamă largă de tensiune gama de operare (2.0V -5.5V)
• Power -on Reset (POR)
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
9
• Power -up Temporizator (PWRT) și Oscilator Start -up Temporizator (OST)
• Brown -out Reset (BOR)
• Low-curent watchdog timer (WDT)
• Anduranță mare in scrierea Flash -ului / EEPROM -ului pe celulă :
– 100.000 cicluri Flash
– 1.000.000 cicluri EEPROM
– Flash / date EEPROM de retenție :> 40 ani
• Memoria program de citire / scriere în cursul timpului de funcționare
• In-Circuit Debugger
• Pana la 64 Kbytes de flash program memory
• Pana la 1024 Kbytes de memorie EEPROM (100000 de cicli de scriere/citire)
• Pana la 3.6 Kbytes de memorie SRAM
Functiile pinilor de I/O (datasheet)
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
10
FIG.7 Descriere pini I/O –PIC18F46K80 (datasheet)
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
11
SENZORUL DE TENSIUNE
Un prim tip de senzor utilizat in cazul acestui proiect in reprezinta senzorul de tensiune
care functioneaza pe principiul divizorului rezistiv de tensiune si accepta la intrare o
amplitudine de maxim 1 8V si genereaza la iesire o tensiune ce variaza proportional cu cea din
intrare dar intr -un mod divizat. Factorul de divizare al acestui senzor este de 4.7/14.7=0.319,
ceea ce insemna ca la iesirea acestuia nu se va genera o tensiune mai mare de 5V daca se
respecta parametri din intrare.Acest senzor este montat in circuit in blocul de alimentare, direct
pe tensiunea de alimentare provenita de acumulato rii sistemului. Rolul senzorului de tensiune
este acela de a citi tensiunea provenita de la acumulatorii sistemului, tensiune care ulterior este
procesata si folosita ca input in blocul decizional. In momentul in care tensiunea de alimentare
scade sub prag ul minim acceptabil, pe LCD -ul sistemului se va afisa un mesaj de atentionare
cu referire la faptul ca acesta trebuie reincarcat . In acelasi timp un LED de culoare rosie va fi
comandat de catre microcontroller, atentionand (optic) in acest mod utilizatorul ca sistemul
functioneaza pe acumulatori descarcati . Este recomandat in cazul acestui proiect ca
acumulatorul sa fie incarcat regulat si sa se tina cont de mesajele afisate de sistem pe LCD -ul
alfanumeric.
ANSAMBLUL DIRECTOR
Sistemul de directie si cel director au la baza motoarele DC ce lucreaza la tensiunea de 5V si
sunt comandate in regim PWM cu factor de umplere (duty cycle) variabil pentru a obtine un
control variabil al vitezei de deplasare. Incorporat in structura interna a motoarelor DC se af la
un sistem reductor(cutie de viteza) prin intermediul caruia se obtine un cuplu semnificativ ce
faciliteaza sistemul de locomotie. Totodata pe axul unuia dintre motoarele mai sus mentionate
se afla montat un encoder digital rotativ care trimite impulsuri de 1L si 0L catre microcontroller
cu scopul de a esantiona si calcula viteza de deplasare a platformei robotice.
MODULUL DE COMANDA AL MOTOARELOR
Cele doua moare DC sunt comandate in frecventa si duty cycle variabil prin intermediul unui
modul driver de tip MX1508 care are la baza o arhitectura formata din doua punti H cu rol de
inversare a tensiunii de comanda dar si cu rol de amplificator de tensiune si curent. Acest modul
driver primeste la intrare 4 biti de date de la microcontroller si poate comanda independent cele
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
12
doua motoare DC in semnal PWM. Pentru ca cele doua motoare sa nu fie private de curent in
momentul cand sunt comandate , conexiunile dintre modul si motoare s-au realizat cu fire de
conexiune cu diamteru sporit. Asa cum a fost amintit anter ior in cadrul proiectului, comanda
motoarelor DC se realizeaza prin modulul driver al motoarelor DC cu cei 4 biti de comanda
prin care se ajusteaza directia dar si viteza de invartire a motoarelor.
PACHETUL DE ACUMULATORI
Are la baza celule de tip Li-Ion conectate intr -o arhitectura de tip serie -paralel care genereaza
la iesire o tensiune de 16.8V si 4800mAh dupa faza incarcare si asigura robotului o autonomie
in regimul normal de functionare de aproximativ 2h. Incarcarea acumulatorilor se realizez a la
conectorul de incarcare al sistemului si trebuie avuta in vedere evitarea inversarii polaritatii
tensiunii de incarcare. Incarcarea se realizeaza in doua trepte, prima fiind incarcarea cu un
curent constant si tensiune variabil crescatoare iar cea de -a doua fiind incarcarea cu tensiune
constanta si curent variabil in scadere.
CONEXIUNEA ICSP
Prin intermediul acestei conexiune de date se realizeaza programarea propriuzisa a
microcontroller -ului sau in alte cuvinte scrierea memoriei microcontroller -ului. Din
componenta acestei conexiuni de date fac parte pinii Vpp(programare), Vdd, Vss, Vdat, Vclk
iar ca programator s -a utilizat modulul electronic specializat „PicKit2” dar si software -ul care
poarta acelasi nume. Pinul Vpp ce face parte din arhitectura microcontroller -ului are dubla
functionalitate si anume cea de programare a memoriei dar totodata si functia de RESET
hardware in momentul in care este conectat la GND -ul sistemului. Programare propriuzisa a
memoriei se realizeaza la tensiunea de aproxima tiv 13V si nu la cea standard de functionare de
5V.
SERVOMECANISMUL RC
In cadrul acestui proiect s -a optat pentru utilizarea unui servomecanism RC cu rolul de a
controla mecanismul de marcare. Acest servomecanism este de tip SG90 si este controlat in
regim PWM, cu factor de umplere variabil si frecventa stabilizata de 50Hz(20ms). Tensiunea
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
13
de alimentare a acestui mcanism este cea de 5V stabilizata si difera de cea care alimenteaza
maiboard -ul central (microcontroller -ul) cu scopul de a se evita secventele de reset la
supraconsum in momentul actionarii motoarelor DC. Prinderea servomecanismului pe
structura de baza a robotului s -a realizat prin suruburi si material de tip FOREX.
MECANISMUL DE AMORTIZARE
Acest mecanism a fost special creat si adaptat in sistemul mecatronic pentru a amortiza
miscarea de impact a servomecanismului la contactul elementului de marcaj cu solul. Acest
sistem de amortizare a fost realizat cu o articulatie mobila intr -un puct si e lement din cauciuc
care tine articulatia flexata spre directia de marcare. In momemntul in care elementul de marcaj
atinge solul, servomecanismul va depunde un mic efort pentru indreptarea articulatiei pe care
o va tine tensionata, garantand in acest mod c ontactul permanent si tensionat al marker -ului pe
suprafata de imprimat.
SISTEMUL D E MARCARE
Este compus dintr -un element de tip marker prin intermediul caruia se imprima vopseaua pe in
punctul de contact. Mecanismul de prindere pe sistemul robotic este u nul versatil, permitand
interschimbarea marker -ului cu usurinta.
CONECTORUL PENTRU INCARCARE
Acumulatorul cu care este alimentat intreg sistemul electronic trebuie in permanenta incarcart
cu o tensiune maxima de 16.8V iar acest lucru se realizeaza prin in termediul conectorului de
incarcare plasat in laterala sistemului robotic. Trebuie avut in vedere faptul ca inversarea
tensiunii de incarcare poate duce la distrugerea ireversibila a pachetului de acumulatori dar si
la accidentari prin explozie. Conectare a firelor de incarcare se realizeaza cu prindere in
suruburi cu scopul de a elimina pierderile de curent in timpul acestui proces iar curentul de
incarcare poate depasi valoarea de 1A. Din acest considerent sursa de alimentare ce incarca
pachetul de acumul atori trebuie sa aiba o capabilitate in curent de minim 2000mAh.
LED-ul RGB
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
14
Este utilizat in procesul de indicare a diferitelor stari ale sistemului sau la avertizare(spre
exemplu scaderea tensiunii acumulatorilor sub pragul minim acceptat). Acest LED RGB este
de tip catod (K) comun iar comanda acestuia este realizata de catre mic rocontroller prin
intermediul a 3 pini I/O ce corespund celor 3 culori – R, G, B .
LCD-UL ALFANUMERIC
Este utilizat in afisarea diferitelor mesaje de atentionare si de informare dar in acelasi timp se
afiseaza si parametri de functionare ai sistemului(prec um tensiunea de incarcare sau viteza de
deplasare a robotului). Acest LCD este de tip alfanumeric si este compus din 4 linii si 20 de
coloane disponibile pentru afisare , este alimentat la tensiunea stabilizata de 5V si comunicatia
cu microcontroller -ul se realizeaza prin intermediul unui protocol de date pe 6 biti dintre care
2 sunt pentru control iar 4 sunt pentru date.
MODULUL BLUETOOTH
Modulul bluetooth este de tip HM -10 si comunica cu microcontroller -ul printr -un protocol de
date serial -asincron de ti p UART. Acest lucru inseamna faptul ca nu exista semnal de clock
(sincronizare) intre emitator si receptor ci doar volumul de transmisie de date denumit baudrate.
In cazul de fata viteza seriala de comunicatie cu microcontroller -ul a fost setata la valoare a de
9600baud ceea ce inseamna un numar de 9600 de caractere pe secunda. In esenta acest modul
a fost integrat in sistem pentru a facilita comunicatia wireless a utilizatorului cu
microcontroller -ul si pentru a trimite comenzi comenzi de pe interfata creat a pe
smartphone.Alimentarea modulului de comunicatie wireless bluetooth se realizeaza la
tensiunea stabilizata de 5V iar prin intermediul acestui modul platforma robotica va primi
comenzi de directivitate(inainte -inapoi -stanga -dreapta) , de miscare a articulatiei mobile si de
ajustare a vitezei de deplasare de la utilizator in timp real. Acest modul electronic permite
utilizatorului sa comunice cu robotul wireless pana la o distanta de 15 metri in camp inchis( in
incapere cu pereti) si aproximativ 20 d e metri in camp deschis. In momentul startarii, sistemul
robotic va ramane in starea de asteptare pana in momentul in care utilizatorul se va conecta
prin intermediul smartphone -ului si va trimite comenzi catre acesta .
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
15
3. FABRICAREA PCB -urilor
Partea hardawa re a sistemului a fost realizata cu ajutorul semiconductorilor si
componenelor pasive de tipul THD(through hole devices) care au fost plantate pe circuitul
imprimat, respectand indeosebi schema electronica si desing -ul initial al proiectului. Pentru
realiz area propriuzisa a PCB -ului s -a pornit de la proiectarea initiala schemei electronice in
programul/interfata online denumita “Easy EDA”. S -a optat pentru utilizarea aceastei
platforme software deoarece este usor de utilizat si accesul la baza de date cu footprinturile
componentelor este facil si diversificat, fiind foarte usor de identificat aproape orice
componenta electronica de pe piata. Interfata software in care a fost proiectata schema
electronica a sistemului automatizat este cea prezentata in figu ra urmatoare :
FIG.8 Referinta -pagina principala Easy EDA: https://easyeda.com/
In urma proiectarii schemei electronice s -a continuat cu pasul urmator si anume convertirea
automata a schematicului in format PCB , ur mat de aranjarea/plasarea componentelor in aria
delimitata de PCB :
FIG. 9 Referinta -pagina principala Easy EDA: https://easyeda.com/
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
16
Urmatoarea etapa in proiectarea PCB -ului a constat in routarea manuala a traseelor pentru
o acuratete cat mai mare, desi este posibil ca aceasta functie sa fie realizata si in mod automat
prin optiunea de “autorouting” in care programul va executa si genera traseele electrice dupa
reguli de routare impuse de utilizator, asa cum se poate obsera si in figura urmatoare:
FIG.10 Referinta -pagina principala Easy EDA: https://easyeda.com/
De asemenea s -a utilizat si planul de masa pentru o mai buna calitate a transmisiei semnalelor
in frecventa dar si pent ru eliminarea eventualelor perturbatii electromagnetice , plan ce este
incadrat si inconjoara toate traseele electrice, ca in figura urmatoare:
FIG.11 Referinta -pagina principala Easy EDA: https://easyeda.com/
Pe lan ga lista de avantaje ale utilizarii acestui program in scopul generarii de PCB -uri
mai exista si avantajul ca la finalizarea PCB -ului cand toate functiile de DRC(design rule
check) sunt indeplinite se poate comanda contracost fabricarea PCB -ului realizat intr-un mod
professional direct de la o firma subcontractoare. In cazul de fata s -a evitat utilizarea acestei
functii, preferandu -se realizarea “in house” a PCB -ului cu metode proprii si calitate maxima.
Realizarea practica a PCB -ului a durat o perioada destul de indelungata de timp, perioada in
care s -au efectuat numeroase teste practice pentru a ajunge la o calitate multumitoare a
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
17
rezolutiei PCB -ului. Aceste teste de productie au constat in principiu in determinarea timpului
ales pentru expunerea la lu mina ultravioleta si la timpul de actionarea a solutiei de developare
asupra stratului de fotorezist. Continuand seria de procese, urmatoarea etapa in realizarea PCB –
ului a fost printarea circuitului electronic pe o folie transparenta de retroproiector cu
amendamentul ca s -au efectuat ajustari ale contrastului si rezolutiei imprimantei pentru a se
obtine in final o calitate maxima a inmprimarii. Printarea circuitului din format .pdf pe folia de
retroproiector s -a realizat la un furnizor de servicii de print are, unde se stie faptul ca rezolutia
de printare este foarte ridicata. In acelasi timp, pentru cresterea contrastului circuitului
imprimat pe folia de retroproiector, s -a efectuat operatiunea de dublare, acest lucru insemnand
ca s-au suprapus 2 folii una peste celelalta, crescand in acest mod contrastul dintre zona
translucida si zona opaca (reprezentata de traseele electrice ale PCB -ului). In urmatoarea figura
este reprezentat un exemplu de cum arate o masca utilizata in metoda foto -lito de realizare a
cablajului:
FIG.12 Masti productie PCB
Un accent important trebuie pus pe claritatea zonei translucide, zona prin care va trece,
la procesul foto, lumina ultravioleta care va afecta stratul de fotorezist. Inainte de procesul de
expunere a mastii si cab lajului la ultraviolete vor trebui foarte bine curatate mastile printate si
sticla de expunere care vine plasata peste masca si PCB. In cazul de fata s -au utilizat doua sticle
subtiri care provin de la doua mini tablouri de perete (grosime ~3mm, L x l = 2 5cm X 25cm)
intre care vin pozitionate in regim sandwitch PCB -ul si masca printata. Ca si observatie
experimentala, daca sticla de expunere nu este curata si exista particule, vor fi sanse mari ca
PCB -ul sa nu aiba calitatea dorita sau chiar sa fie comprom is la final. Un factor important la
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
18
realizarea cablajului imprimat este tipul de PCB folosit care in cazul de fata este produs de
compania BUNGARD. Aceste PCB -uri vin acoperite cu un strat uniform de fotorezist care
garanteaza implicit o calitate ridica ta la transferul/ imprimarea mastii pe PCB. Unele dintre
caracteristicile acestui PCB fotosensibil utilizat in dezvoltarea proiectului de fata, sunt
urmatoarele :
FIG.13 Caracteristici PCB utilizat
Pentru exemplificare, pregatirea sticlei, a mastii printate si a PCB -ul fotosensibil ce urmeaza
a fi expus la lumina ultravioleta.Se foloseste metoda de tip sandwitch pentru a facilita presarea
mastii imprimate pe PCB -ul fotosensibil de catre sticla de presiune. In cazul de fata s -au utilizat
doua sticle, una care vine pozitionata peste masca si PCB si una care vine montata pe partea
opusa a PCB -ului(spate), presarea PCB -ului si mastii intre cele doua sticle realizandu -se cu
ajutorul a doua cleme/carlige:
FIG.14 Pregatire PCB pentru expunere
Odata sistemul fixat intre cele doua sticle si prins ferm cu cele doua cleme, acesta va fi
expus la lumina ultravioleta timp de doua minute si 20 de secunde(timp determinat
experimantal), timp in care fororezistul expus in zonele translucide ale mastii va fi afectat de
lumina ultravioleta. De mentionat este faptul ca toate aceste procese explicate pana in
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
19
momentul de fata, precum si expunerea la ultraviolet trebuie sa fie realizate intr -un mediu lipsit
de lumina/lumina naturala pentru a se Evita developarea a ccidentala a PCB -ului (se stie ca
lumina naturala contine in spectrul sau si radiatie ultravioleta care poate contribui negative la
procesul de developare a PCB -ului). Expunerea ansambulului PCB fotosensisbil s -a realizat la
o distanta de aproximativ 15 cm fata de neonul UV, asa cum este exemplificat si in urmatoarea
figura:
FIG.15 Etapa de expunere la lumina UV
Imediat dupa finalizarea procesului de expunere la ultraviolete ansamblului compus din
cablaj, masca imprimata si foaie de sticla, PCB -ul este e xtras din sandwitch si este imediat
scufundat in solutie de developare speciala, in cazuri extreme se poate utiliza si soda caustica
dar aceasta este foarte periculoasa. In cazul de fata s -a utilizat solutia speciala de developare
numita SENO -4007 care est e o solutie specializata si destinata exclusive procesului de
developarea a PCB -urilor, necontinand in compozitia sa elemente periculoase precum soda
caustica. Aceasta solutie se gaseste in comert sub forma de pulbere impachetata plictulete de
22g, cantita te suficienta pentru a fi dizolvata in jumatate de litru de apa. Trebuie specificat
faptul ca solutia obtinuta trebuie incalzita la temperature de aproximativ 50 grade pentru o
eficienta ridicata a procesului de developare. Astfel, in urma procesului de de veloparea a PCB –
ului cu fotorezist, zonele intunecate (sau traseele de pe cablaj) vor ramane neafectate de soluti e.
FIG.16 Solutie pulbere de developare (SENO 4007)
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
20
La finalul procesului de developare cu agentul special, cablajul imprimat va avea zone
inchise la culoare acolo unde fotorezistul a ramas intact dar si zone deschise la culoare acolo
unde agentul de developare a actionat si dizolvat fotorezistul:
FIG.17 PCB -ul dupa procesul de developare
Imediat dupa finalizarea procesului de developar e, care inca odata de mentionat, s -a
realizat intr -o incapere cu luminozitate foarte scazuta, cablajul nu mai este sensisbil la lumina
exterioara si la ce UV si acesta va trebui spalat bine sub jet de apa pentru a indeparta in totalitate
resturile de fotor ezist ramase in urma procesului. Ultima etapa in constructia prototipului de
PCB este cea de etching sau de corodare, unde cablajul este scufundat si agitat in solutie
specializata de corodare FeCl3(clorura ferica), dar se mai poate folosi si persulfat de sodiu sau
acid azotic.Si de aceasta data, s -a stabilit pe baza experimentala timpul si temperatura agentului
de corodare pentru o performata crescuta a procesului de corodare. S -a obseravat deasemenea
faptul ca atunci cand se utilizeaza persulfatul de sodi u, claritatea in privinta preciziei traseelor
este mult mai crescuta, comparativ cu FeCl3 deoarece persulfatul este o solutie chimica nu
foarte coroziva si ataca materialul de Cu cu o viteza mult mai lenta si pe toata suprafata PCB –
ului in acelasi timp.Sum arizand, procese de constructie a PCB -ului au fost : realizare masca,
imprimare pe PCB la lumina UV, developare si corodare(etching). In ceea ce priveste proiectul
de fata, cablajul propriuzis dar si pozitionarea pieselor pe acesta este urmatorul:
FIG.18 PCB -ul(cablajul) sistemului
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
21
4. SCHEMA ELECTRONICA A SISTEMULUI
FIG.19 Schema electronica generala
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
22
4.1. MICROCONTROLLER -ul PIC18F46K80
Schema electronica a sistemului automatizat are la baza microcontroller -ul
PIC18F46K80 ce este alimentat la tensiunea stabilizata de 5V si ruleaza la frecventa de operare
de 64Mhz. Acest lucru semnifica o viteza reala de 16MIPS(milioane de instructiuni pe
secunda) deoarece executia unei instructiuni este realizata in 4 fronturi de clock (64Mhz/4).
Acest microcon troller dispune de un numar total de 40 de pini, unii dintre acestia dispunand de
functii speciale, precum cea de programare (inscriere cod .hex in memoria microcontroller –
ului). Diagrama microcontroller -ului si dispunerea pinilor de comunicatie este cea d in figura
urmatoare :
FIG.20 Microcontroller -ul PIC18F46K80
Asa cum se poate observa si din figura de mai sus, pinul numarul 1 al microcontroller –
ului este este marcat corespunzator in partea stanga sus, pinul MCLR avand in acest context
doua functii : cea de hardware reset si cea de programare propriuzisa. In modul normal de
functionare al microcontroller -ului, pinul MCLR (master clear reset) este in permanenta
mentinut la tensiune de alimentare prin intermediul unui rezistor cu functie de pull -up, asa cum
se poate observa si pe schema electronica generala de mai sus. Acest microcontroller nu
necesita in mod obligatorul cristal de quartz pentru generarea clock -ului deoarece acesta este
intern generat si ridicat la freventa de 64Mhz prin intermediul unui sistem de multiplicare de
frecventa.Asa cum a fost anterior mantionat in cadrul acestui proiect, tensiune de alimentare a
microcontroller -ului are valoarea de 5V si se aplica la pinii 11,12 si 31,32 (Vdd si Vss) iar pe
langa aceasta tensiune, la pinul num arul 6 trebuie implementat un sistem capacitiv de filtrare
(nu in mod obligatoriu) pentru filtrarea tensiunii de alimentare ce alimenteaza core –
ul(procesorul) microcontroller -ului.
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
23
4.2. ETAJUL DE STABILIZARE
In cadrul proiectului de fata tensiunea de alimentare este obtinuta prin intermediul a
doua stabilizatoare de tensiune de tip 7805 ce genereaza la iesire o tensiune de 5V.Pe langa
elementul stabilizator, in circuitul electronic de alimentare sunt implementati o serie de
condensatori de filtrare la intrarea si iesirea acestuia:
FIG.21 Etajul de stabilizare cu 7805
Asa cum se poate observa si din figura de mai sus, la intrarea si respectiv iesirea acestuia sunt
integrati o serie de condesatori pentru filtrarea elementelor parazitare din componenta tensiunii
de alimentare, asa cum recomanda si producatorul:
FIG.22 Mecanismul de filtrare al semnalelor parazitare
Se cunoaste faptul ca la inalta frecventa capacitorul se comporta ca un scurt -circuit iar
rolul codensatorului de intrare este acela de a reduce impendanta vazuta de elementul
stabilizator la pinul de intrare. Acest lucru conduce la reducerea fluctuatiilor tensiunii din
intrarea circuitului 7805 ce apar din cauza consumului variat de curent (putere) la iesire,
fluctuatii asupra carora eleme ntul stabilizator nu are nici un control. Functia pe care o poate
realiza cu succes acest stabilizator este de a mentine tensiune de iesire la o valoare stabila, atat
timp cat tensiunea din intrare este fara variatii. Privit dintr -un alt punct de vedere,
condensatorul din intrare joaca un rol de filtru trece jos, ceea ce ajuta la reducerea
perturbatiilor/fluctuatiilor de inalata frecventa, perturbatii pe care elementul stabilizator nu le
poate elimina. Diagrama bloc a elementului stabilizator pozitiv de ten siune este cea din
urmatoarea figura :
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
24
FIG.23 Arhitectura interna modul stabilizare 7805
Printre functiile speciale ale acestui circuit se numara si protectie la supra -temperatura,
protectie la scurt -circuit, protectie la depasirea SOA(safe operating are a) si 2% toleranta la
tensiunea stabilizata de iesire. Capabilitatea in curent la iesire este de aproximativ 1.5A,
confom datasheet -ului garantat de catre producator. La iesirea elementului stabilizator pozitiv
de tensiune sunt conectati doi condesatori ce au acelasi rol de filtrare in circuit ca si cei din
intrarea circuirului 7805. Condensatorul de 100nF va filtra componentele perturbatoare din
tensiune de iesire la inalta frecventa pe cand condensatorul de 100µF va filtra vaariatiile de
joasa frecventa a le tensiunii de iesire. In urma testelor realizate pe platforma robotica s -a
observat faptul ca circuitul integrat stabilizator pozitiv de tensiune nu poate oferi un curent
indeajuns de mare pentru comanda motoarelor la putere maxima. Acest lucru se traduc e in
faptul ca in momentul in care robotul este comandat pentru locomotie la viteza maxima de
deplasare curentul maxim oferit de stabilizatorul ce alimenteaza acesta parte de putere are
valoarea sub cerinta de consum a motoarelor.In acest sens s -au inlocui t cele doua stabilizatoare
liniare de tensiune cu doua convertoare de tip buck(step down) a caror valoare de iesire a fost
ajustata la 5V pentru alimentarea microcontroller -ului si a blocului de putere in acest mod
cerinta de curent fiind indeplinita. Totd ata cand vine vorba de convertoarele DC -DC,
randamentul acestora este mult mai ridicat decat cel al stabilizatoarelor liniare de tensiune
clasice, ceea ce insemana o pierdere de putere si de temperatura semnificativ scazuta.In final
aceasta metoda a dat re zultate, modulele buck DC -DC oferind la iesire un curent de 3A
individual, suplinind in acest mod cerinta ridicata de putere la pornire a celor doua motoare de
tractiune. Servomecanismul RC utilizat in miscarea bratului de marcare este deasemenea
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
25
alimentat de catre unul din convertoarele DC ale sistemului. Modulul buck utilizat in cadrul
acestui proiect este cel din urmatoarea figura :
FIG.24 Convertorul buck DC -DC
Se poate remarca faptul ca la intrare acest modul acepta o plaja a tensiunii de 7-28V, generand
la iesire o tensiune stabilizata in frecventa 5V cu posibilizate de ajustare.
4.3. ETAJUL DE PROTECTIE LA INVERSA TENSIUNE
De asemenea se poate observa si faptul ca in circuitul electronic al sistemului este
integrata si o dioda de protectie la inversa tensiune(alimentare circuit in sens invers) notata cu
D2:
FIG.25 Protectie cu dioda la inversa tensiune
Desi in circuitul electronic aceasta dioda este o dioda normala cu jonctiune PN, in cadrul acestui
proiect si anume in dezvoltarea practica a a cestuia s -a utilizat o dioda specializata de tip
Schottky a carei descriere va fi abordata in urmatoarea secventa a proiectului.Ca principiu de
functionare al protectiei la inversa tensiune, dioda in regim normal de functionare este
alimentata in „reversed ”, ceea ce insemna faptul ca polul pozitiv al tensiunii de alimentare este
aplicat pe catorul (K) al diodei si in consecinta aceasta nu va conduce. In momentul in care
tensiunea de alimentare este accidental inversata, dioda va intra in conductie, nepermit and
inversei tensiuni sa ajunga pe elementul stabilizator si implicit in circuitul central cu
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
26
microcontroller. Pentru o protectie rapida la inversa tensiune se recomanda utilizarea diodelor
de tip Schottky deoarece sunt mai rapide decat diodele cu joncti une PN:
FIG.26
Dioda P -N si dioda Schottky
Asa cum se poate observa si din figura de mai sus, dioda uzuala functioneaza pe baza unei
jonctiuni de tip PN, pe cand in arhitecura diodei Schottky se utilizeaza metal si din aceasta
cauza vor exista electroni in exces. Datorita faptului ca mobilitatea electronilor este mai rapida
decat golurile in materialul P, dioda Schottky va inchide mai repede. Implementat pe partea de
alimentare -stabilizare este si sistemul de informare optica implementat cu ajutorul unui LED
de culoare verde si a unui rezistor pentru limitarea curentului de polarizare. Prin intermediul
acestui simplu sistem utilizatorul primeste informatii referitoare la functionarea corecta a
modulului de stabilizare iar in momentul in care LED -ul nu mai functioneaza sau functioneaza
partial inseamna ca exista defectiuni in aceasta aria de stabilizare.
4.4. PINUL DE HW -RESET SI PROGRAMARE: VPP/MCLR
Asa cum a fost amintit anterior in cadrul acestui proiect, programarea memoriei
microcontroller -ului se realizea za prin intermediul functiei specializate a pinului numarul 1 ce
poarta denumirea de Vpp/MCLR. Acest pin ce face parte din arhitectura microcontroller -ului
are dubla functionalitate si anume pe cea de master clear reset (reset -ul hardware al
microcontrolle r-ului prin conectarea pinului la masa sistemului) dar in acelasi timp permite si
programarea memoriei microcontroller -ului (incarcarea codului in format .hex in memoria
program a microcontroller -ului). In figura de mai jos se indica modalitatea in care ci rcuitul
auxiliar electronic a fost conectat la acest pin :
FIG.27 Pinul de reset si programare Vpp/MCLR
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
27
In momentul in care acest pin este activat prin intermediul unui rezistor de pull -up,
microcontroller -ul va rula in modul normal de functionare, exe cutand codul inscris in memoria
program. Acest pin este conectat la tensiunea de alimentare de 5V prin intermediul unui rezistor
de valoare 4.7K dar exista si un microswitch in sistem prin intermediul caruia se poate realiza
functia de RESET hardware, ceea ce inseamna ca program counter -ul va face salt la adresa de
startare a programului de executie(locatia de memorie 0x00). MCLR nu va re -initializa toate
functiile interne precum Power On Reset sau Brown -Out Reset ci va triggera un reset
software.Asa cum a fost amintit si anterior in cadrul acestui proiect, pe langa functia de reset,
pinul de Vpp/MCLR are functie si in procesul de programare propriuzisa a microcontroller –
ului. Programarea memoriei microcontroller -ului si realizeaza prin conexiunea specializa ta de
date ce poarta denumirea de ICSP, asa cum este prezentata si in figura de mai jos:
FIG.28 Programarea memoriei microcontroller -ului
Conexiunea de date utilizata in procesul de scriere a memoriei poarta denumirea de ICSP si
contine Vpp/MCLR, Vdd, Vss, Vdat si Vclk, amplitudinea tensiunii de programare fiind de
aproximativ 13V. Pe langa pinul numarul 1 al conexiunii ce reprezinta pinul de Vpp/MCLR,
aceasta comunicatie speciala de programare mai utilize aaza tensiunea de alimentare (Vdd, Vss)
dar si pinul de date si cel de clock al microcontroller -ului (RB6/ICSPCLK si RB7ICSPDAT).
Tensiunea de programare aplicata pe pinul Vpp/MCLR este ridicata la valoarea de aproximatix
13V prin intermediul conevertorului DC -DC boost, parte din arhitectura programatorul
PicKit2. In ceea ce priveste partea proriuzisa de programare, dupa ce codul sursa a fost compilat
corect, programatorul Pickit2 va incarca fisierul .hex in memoria microcontroller -ului. De
asemenea pentru inscrierea codului sursa (.hex) in microcontroller s -a utilizat interfata
specializata cu acelasi nume „PicKit 2 ” si comunica cu mirocontroller prin comunicatia
specializata ICSP unde scrierea efectiva a memoriei se realizeaza la tensiunea de aproximativ
13V, tensiune mult diferita de tensiunea de lucru in regim normal a microcontroller -ului.
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
28
4.5. SISTEMUL DE AFISARE CU LCD
Pentru afisarea diferitelor mesaje de informare si atentionare s -a utilizat un LCD
aflanumeric de tip 20×04, ceea ce insemna 4 linii si 20 de coloane disponibile.Acest sistem de
afisare com unica cu microcontroller -ul prin intermediul unui protocol de comunicatie format
din 2 pini de comanda si 4 pini de date, prin intermediul carora pe LCD -ul alfanumeric se pot
afisa mesaje sau trimite instructiuni de executat(precum clear screen).In cazul g eneral exista si
pinul R/W prin intermediul caruia se poate seta ca pe LCD -ul alfanumeric sa se afiseze mesaje
sau sa se citeasca mesaje. In cazul specific pinul de comanda R/W a fost conectat la masa
electrica a sistemului deoarece se doreste ca pe LCD -ul alfanumeric doar sa se afiseze mesaje,
fara posibilitatea de a fi citite. Schema electronica de conectare a LCD -ului la microcontroller
este urmatoarea:
FIG.29 Conectarea LCD -ului la sitem
In scopul modificarii contrastului pe LCD -ul alfanumeric s -a utilizat un semireglabil de 10kΩ
ce functioneaza pe principiul divizorului rezistiv de tensiune, asa cum este prezentat in figura
urmatoare :
FIG.30 Reglarea contrastului pe LCD
Comunicatia cu microcontroller -ul se realizeaza prin intermediul pinilor Rs, RW(GND), En si
D4-D7 iar pinii D0 -D4 sunt conectati la masa sistemului. In cadrul proiectului comunicatia
LCD -microcontroller este realizata pe 4 bit, dar exista si posibilitatea de a fi folosita in
configuratie de 8 bit, aceasta din urma utilizand prea multe resurse hardware(pini I/O) si nefiind
pretabila de a fi utilizata in proiectul de fata. S -a dorit implementarea in sistem a unui element
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
29
de afisare alfanumeric de tip 20×4 cu scopul de a permite afisarea intregul ui set de date
achizitionat de la senzorii cu care este echipat sistemul si de a se evita utilizarea microswitch –
urilor de navigare in sistem.Pinii de interfatare cu microcontroller -ul sunt prezentati in
urmatoarea figura :
FIG.31 Semnificatia pinilor L CD-ului 20×04
Asa cum se poate observa si in figura de mai sus, pentru functionarea LCD -ului
alfanumeric sunt necesari pinii de alimentare (Vdd si Vss), pinul Vo prin intermediul caruia se
poate ajusta contrastul pe display, pinul Rs care comunica LCD -ului daca setul de date
reprezinta o comanda sau o data de afisat, pinul R/W care in circuit este conectat la masa
sistemului si semnifica scriere (R/W=0L) sau citire (/W=1L) pe LCD -ul alfanumeric, pinii de
date D0 -D3 care sunt conectati la masa(deoarece comu nicatia cu microcontroller -ul se
realizeaza pe baza unui protocol de 4bit si nu in ultimul rand pinii D4 -D7 care sunt pinii utilizati
specific in transmisia cuvantului de date pe lungime de 4 biti. LCD -ul alfanumeric dispune
totodata si de un LED cu functi e de iluminare -backlight, care de regula este alimentat printr –
un rezistor auxiliar de 100Ω cu scop de limitare a curentului de polarizare si implicit de
protectie a diodei LED. In ceea ce priveste valorile maxime admise de catre producator, acestea
sunt d escrise in urmatoarea figura :
FIG.32 Valori maxim admise (acc. to datasheet)
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
30
Drept urmare se recomanda sa nu se depaseasca valoarea de 7V a tensiunii de alimentare si
implicit a tensiunii de pe canalul de comunicatie. Un avantaj in utilizarea comunicatiei pe 4 biti
in detrimentul comunicatiei pe 8 biti ar fi faptul ca timpul de transmisie si de procesare este
mult mai scurt si in esenta LCD -ul alfanumeric va reactiona intr -un mod mai rapid la setul de
date trimis de catre microcontroller. In ceea ce prives te setul de intructiuni acceptat de LCD -ul
alfanumeric, acesta este in stransa legatura cu starea pinilor Rs si En si cu timing -ul recomandat
de catre producator:
FIG.33 Set comenzi LCD20x04
FIG.34 Set comenzi LCD20x04
In momentul in care e pinii de cont rol ai LCD -ului alfanumeric sunt mapati in codul sursa al
sistemului, in cod se vor putea apela functiile predefinite de comanda si control de care dispune
compilatorul.
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
31
4.6. SENZORUL DE TENSIUNE
FIG.35 Senzorul pentru citirea tensiunii de alimentare/incarcar e
Senzorul de tensiune a fost implementat in cadrul acestui proiect pentru a monitoriza
tensiunea provenita de la acumulatori si pentru a informa utilizatorul cu privire la incarcarea
acestora. Principiul de functionare al acestui senzor se bazeaza pe conf iguratia de divizor
rezistiv de tensiune care preia la intrare tensiunea de pe acumulatori si gereneaza la iesire o
tensiune proportional -divizata. In cazul proiectului de fata tensiunea din intrare maxim admisa
este de aproximativ 15V iar la iesire, tensi unea maxim obtinuta in urma divizarii va fi de 5V.
Principiul si calculul divizorului rezistiv de tensiune este urmatorul :
FIG.36 Principiul divizorului rezistiv de tensiune
In cazul de fata s -au utilizat 2 rezistori de 10 si respectiv 4.7kΩ, unde aceasta din urma este
conectata pe ramura negativa de tensiune ( spre masa electrica a circuitului). Astfel,
considerand faptul ca la intrare se va aplica un maxim de Vin=15V, la iesire, amplitudinea
tensiunii va deveni Vout= Vin *4.7KΩ/(10KΩ+4.7KΩ), de un de va rezulta valoarea de 4.79V
cosiderand cazul ideal. Informatia provenita de la acest senzor (Vout) este aplicata
convertorului ADC care lucreaza in regim multiplexat. Canalul utilizat pentru achizitionarea
acestei valori analogice este AN0 ( PORTA, bi tul0).
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
32
4.7. MODULUL PENTRU COMUNICATIA WIRELESS BLUETOOTH
Modulul bluetooth utilizat este de tipul HM10 , este setat la o viteza de transmisie a
datelor de 9600 baud(biti/secunda) si este alimentat la tensiunea stabilizata de 5V.
FIG.37 Modulul bluetooth HM10
In ceea ce priveste aria de acoperire, utilizatorul se poate conecta la acest modul prin
intermedi ul smartphone -ului de la o distanta de maxim 20m. In cazul in care modulului wireless
bluetooth i se ataseaza si o antena suplimentara, atunci aria de acoperire se va mari.In
urmatoarea etapa se va analiza functionalitatea din punct de vedere electronic si in acest sens,
modulul bluetooth este conectat la microcontroller asa cum este descris in figura urmatoare:
FIG.38 Conectare in circuit
Dupa cum se poate observa din figura de mai sus, modulul bluetooth HC -05 ce
comunica prin protocol UART asincron conti ne doi pini de alimentare Vccsi GND, tensiune
ce provine de la elementul de conversie DC -DC de 5V. Pe langa acesti doi pini de alimentare
se mai observa doi de pini utilizati in transmisia de date si anume Tx si Rx ce vin conectati la
pinii microcontroller -ului Rx si respectiv Tx (se poate observa faptul ca Tx → Rx si
Rx→Tx).Acest tip de comunicatie se spune ca este de tip asincron deoarece in procesul de
comunicatie cu microcontroller -ul nu exista implicat nici un semnal de clock CLK ci doar cei
doi pini R x si TX, viteza comunicatiei wireless prin bluetooth fiind de 9600 baudrate. In cazul
de fata, pentru amplificarea semnalului de transmisie/receptie. Totodata dispunerea acestui
modul de comunicatie s -a efectuat tinand cont de influientele si perturbatiile electromagnetice
generate de motoare si drivere, deoarece orice variatie a tensiunii poate reseta (in cel mai bun
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
33
caz) sau distruge modulul electronic. In cazul proiectului de fata , pentru setup -ul modulului
Bluetooth mai sus descris , s -a utilizat un modul special de tip PL2303 care face posibila
transmisia datelor sub protocol serial UART prin intermediul conexiunii de date USB :
FIG.39 Modul de setup PL2303
Interconexiunea de faza de setup a modulului HC -05 si PL2303 s -a realizat astfel :
FIG.40 Conectivitate bluetooth -PL2303
Totodata , pentru a putea intra in meniul modulului de comunicatii Bluetooth , pe langa acest
modul PL2303 s -a utilizat si un terminal special care permite operatiunea de scriere -setare in
modulul Bluetooth, si anume TERATERM
FIG.41 GUI terminal programare comenzi AT
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
34
In linii mari, modulul bluetoooth se comporta ca o transmie normala de date pe protocol
serial UART dar cu avantajul ca datele pot fi transmise / receptionate wireless prin
radiofrecventa. In cazul de fat a datele sunt trimise catre un terminal instalat pe un Smartphone
si ofera avantajul unei comunicatii mobile la o distanta de peste 10 m. Frecventa de lucru a
modulului Bluetooth este standard de 2.4 Ghz iar ca sensibilitate ajunge la -80dBm. Antena
utilizata de acest modul este deja integrate de cablaj iar tensiunea de alimentare este cuprinsa
intre 3.3V -5V. In cazul de fata , in faza de testare si mai apoi in faza de implementare, s -a
utilizat tensiunea de alimentare de 5V deoarece se elimina astfel pos ibilele erori de nivele
logice care pot devia de la diferenta de 5V la 3.3v. In ceea ce priveste vitezele de baudrate
acceptate de modul , aceaste sint de 9600, 19200, 38400, 57600,115200,230400, 460800 bps.
Cateva detalii tehnice referitoare la modulul Bluetooth sunt urmatoarele :
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
35
Descrierea functionalitatii pinilor (modul HC -05):
FIG.42 Descriere functionalitate pini
In ceea ce priveste modul in care s -a realizat SETUP -ul modulului bluetooth prin interfatarea
cu modulul PL2303 si trimiterea comen zilor de tip AT, aceasta s -a realizat utilizand cateva din
urmatoarele comenzi :
FIG.43 Comenzi AT catre modulul bluetooth
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
36
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
37
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
38
FIG.44 Comenzi AT catre modulul bluetooth (continuare)
In ceea ce priveste modul de functionare, imediat ce sistemul robotic este alimentat,
modulul bluetooth va fi vazut pe smartphone de catre utilizator si va trebui sa se conecteze la
sistem printr -un proces de peering . Dupa ce s -a realizat peeringul si cone ctarea utilizatorului la
platforma robotica , acesta va trebui sa intre in aplicatia de pe smartphone si opereze sistemul.
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
39
4.8. DRIVERUL MOTOARELOR DC(MX1508)
Pentru moanda celor doua motoare DC s -a utilizat un driver specializat in configuratie
de punte H car e permite controlul motoarelor in regim PWM. Comunicatia dintre modulul
specializat si microcontroller se realizeaza printr -un protol de 4 biti prin intermediul caruia se
paote controla sensul si viteza de invartire a celor doua motoare. Driverul MX1508 a fost
conectat in schema electronica generala dupa cum urmeaza :
FIG.45 Conectare modul MX1508 in circuit
Dupa cum se poate remarca din figura mai sus expusa, pinii de control ai modulului sunt
conectati la pinii LATB bitii f0 -f3 si comanda pe 5V. Astfel intrarile IN1 si IN2 controleaza
primul motor iar intrarile IN3 -IN4 controleaza pe cel de -al doilea motor, comanda realizandu –
se in regim PWM pentru controlul vitezei. Tabelul de adevar in care se descrie modul de
functionare al modulului este urmatorul:
FIG.46 Tabel adevar modul driver MX1508
Pe langa regimul normal de functionare in cele doua directii de inva rtire, modulul MX1508
accepta la intrare si semnal PWM, ceea ce inseamna ca la iesirea acestuia se va regasi forma
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
40
semnalului modulat in durata dar cu amplificare in curent pentru alimentarea motoarelor. In
cadrul acestui proiect comanda celor doua motoare in regim PWM s -a realizat prin generarea
acestui tip de semnal cu timer -ul TIMER1 al microcontroller -ului si regimul de intreruperi. Sub
acest aspect constructia semnalului PWM are la baza un etaj numarator si unul comparator
realizate prin design softwar e in functia generala de intrerupere. Pragul de comutare al
semnalului este determinat de input -ul utilizatorului, prag care poate fi modificat de la valoarea
de 0 pana la valoarea de 30. Acest prag a fost denumit generic in acest proiect ca „treapta de
viteza” . Avantajul utilizarii acestui modul in detrimentul clasicului circuit L298 este acela ca
in pofida dimensiunilor reduse curentul de iesire poate atinge un maxim de 2.4A, arhisuficient
alimentarii celor doua motoare DC .Un alt avantaj este acela ca cir cuitul integrat MX1508
contine in arhitectura sa interna doua punti de tip H care sunt realizate cu tranzistori de tip
MOSFET care permit tranzitii mult mai rapide in semnal si implicit un semnal PWM mult mai
precis decat in cazul clasicului L298 a carui a rhitectura este realizata cu tranzitori bipolari. Asa
cum a fost amintit anterior in cadrul proiectului, pentru alimentarea motoarelor DC de tractiune
s-au utilizat fire electrice cu sectiune sporita cu scopul de a suplini cererile de curent la pornire
a celor doua motoare. Plasarea modulului pe platforma robotica este urmatoarea :
FIG.47 Incorporarea modulului pe platforma robotica
Modulul driver MX1508 contine deasemenea si doi condensatori de filtrare pe partea de
alimentare dar si condensatori pentru deparazitare la alimentare motoarelor(output).
4.9. SISTEMUL DE MASURARE AL VITEZEI CU ENCODER
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
41
Sistemul robotic achizitioneaza semnale digitale de la encoderul sistemului prin
intermediului PORT -ului PORTB, bitul 5 cu scopul de a evalua distanta exprimata in impulsuri
pe perioada de timp (viteza de deplasare a robotului). Encoderul este montat pe unul dintre
motoarele de tractiune astfel:
FIG.48 Montarea encoder -ului in sistem
Encoderul este de tip digital si genereaza la iesire impulsuri digitale consecuti ve de 0 si
respectiv 5V, impulsuri de sunt interpretate si calculate de catre microcontroller pentru a oferi
la final informatia referitoare la viteza.In sistemul de intreruperi, pinul digital de intrare este
interogat la intervale fixate de timp iar in mo mentul in care s -a depasit o perioada de 1 secunda,
numarul de tranzitii este evaluat prin impartire la 2 (prin masurare si avand ca referinta
diametru rotii, o tranzitie reprezinta jumatate de centimetru), rezultand in final distanta
parcursa in timp si deci, viteza de deplasare a platformei robotice. Alimentare encode -ului se
realizeaza la tensiunea nominala de 5V obtinuta prin intermediul convertorului DC -DC de tip
step-down(buck). In ceea ce priveste conectarea encoder -ului in circuit, aceasta s -a real izat
astfel:
FIG.49 Conectarea encoder -ului in circuit
Dupa cum se poate observa din schema bloc de mai sus, iesirea senzorului de distanta digital
este conectata la intrarea PORTB a microcontroller -ului ( bitul 5 al registrului) pin-ul I/O prin
intermediul caruia se realizeaza numararea impulsurilor generate de acest modul.
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
42
5. DESIGN-ul BRATULUI ARTICULAT CU SERVOMECANISM
Scopul proiectului este acela de a implementa practic un mecanism auxiliar montat pe
platforma roborica, care sa fie capabil sa se articuleze pentru efectuarea procesului de marcare:
FIG.50 Mecanismul de marcare
Acest sistem articulat este comandat manua l de catre utilizator prin intermediul comenzilor
trimise de pe smartphone in modul manual de functionare si este actionat in mod automat in
timpul functionarii automate.Pentru a se evita suprasarcina pe servomecanism la contactul cu
solul, s -a implementat un sistem de amortizare pe articulatia intr -un punct a bratului care ii
permite acestuia o flexare de aproximativ 3cm. In momentul in care bratul este actionat pentru
marcare, servomecanismul va fi actionat partial pana la ¾ din cursa totala pentru a dimi nua
impactul cu solul iar ulterior, in a doua etapa de control, bratul este actionat intr-un mod lent
pana in momentul in care acesta atinge solul iar bratul se flexeaza. In acest mod
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
43
servomecanismul nu este suprasolicitat iar marker -ul atinge solul si est e tinut intr -o tensiune
usoara de catre ansam blul de amortizare:
FIG.51 Bratul articulat
Sistemul de amortizare lucreaza pe baza unui element din cauciuccu prindere in doua puncte
iar articulatia propriuzisa este formata dintr -un ax central care int erconecteaza cele doua
elemente consitutive.Materialul utilizat in prelucrarea elementelor bratelor este denumit
FOREX si are avantajul unei prelucrari usoare prin taiere. Transmisia fortei servomecanismului
catre brat se realizeaza prin elementul de conec tivitate special cu caneluri pentru evitarea
invartirii in gol. Servomecanismul utilizat in cadrul acestui proiect este de tip SG90:
FIG.52 Servomecanismul RC
Acest servomecanism este alimentat la tensiunea stabilizata de 5V, obtinuta prin intermediul
conv ertorului DC -DC de tip book, tensiune care este separata de tensiunea de alimentare a
microcontroller -ului cu scopul de a se evita eventualele resetari ale microcontroller -lui in
momentul in care consumul de curent creste semnificativ la pornire iar tensiu nea de alimentare
scade proportiona. Ca si arhitectura interna, servomecanismul contine un motor DC de mica
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
44
putere care actioneaza un reductor/cutie de viteze/ schimbator de cuplu cu scopul de a mari
puterea de ridicare a servomecanismului:
FIG.53 Redu ctor servomecanism
Cand vine vorba de servomecanisme, puterea acestora se masoara in viteza de invartire a axului
si cuplu/torque. In cazul de fata servomecanismul urmatoarele caracteristici:
FIG.54 Caracteristici servomecanism RC
Deoarece greutatea bratului si a elmentului de marcaj nu depasesc valoarea de 300g, s -a
considerat faptul ca servomecanismul RC SG90 este ideal pentru implementarea in
aplicatie(considerand ca torque -ul este de 2.5 kg/cm).Ca si modalitate de testare a cuplului
servomecanismului, pe axul acestuia se ataseaza o greutate si mai apoi se actioneaza invartirea
acestuia, asa cum se prezinta in urmatoarea figura:
FIG.55 Determinare cuplu servomecanism
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
45
Asa cum a fost menti onat anterior in cadrul proiectui, servomecanismul dispune de un reductor
de cuplu in scopul de a mari cuplul si a scadea viteza de invartire a axului de iesire. Comform
datasheet -ului si specificatiilor tehnice, reductorul servomecanismului are un factor de reductie
de 250:1, ceea ce inseamna ca la 250 rotatii ale axului motor, axul de iesire va realiza o singura
rotatie. Controlul servomecanismului este realizat prin generarea unui semnal PWM de catre
microcontroller care are la baza o frecventa fixa de ap roximativ 50Hz si un duty cycle variabil:
FIG.56 Semnal de comanda servomecanism
In functie de duty cycle -ul generat(1 -2ms), axul servomecanismului se va repozitiona prin
miscare de rotatie la stanga sau la dreapta. Servomecanismul dispune de 3 conexiuni dintre
care 2 sunt pentru alimentare si una pentru controlul modulat in PWM:
FIG.57 Conexiune servomecanism
Montarea servomecanismului pe cadrul platformei robotice s-a realiz at cu ajutorul prinderii in
suruburi dar si prin lipire cu adeziv:
FIG.58 Fixar e servo pe plarforma robotica
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
46
6. DESIGN-UL SOFTWARE AL SISTEMULUI
In ceea ce priveste design -ul software al sistemului, s -a utilizat limbajul de programare
C implementat cu ajutorul compilatorului MikroC.In faza de preprocesare s -au atribuit
denumiri specific e pentru mecanismele utilizate dar si pentru input -uri digitale(precum
encoder -ul folosit in achizitia vitezei de deplasare a platformei):
//**********[DEFINE CONECTIVITY ACCORDING. TO SCHEMATIC]***// atribuire de nume in faza de preprocesare
# define RGB_B LATC.f5 // definire masti LED RGB – culoarea albastra
# define RGB_G LATC.f4 // definire masti LED RGB – culoarea verde
# define RGB_R LAT C.f3 // definire masti LED RGB – culoarea rosie
# define IN1 LATB.f0 // intrara1 de comanda in driver pentru motor 1
# define IN2 LATB.f1 // intrara2 de comanda in driver pentru motor1
# define IN3 LATB.f2 // intrara3 de comanda in driver pentru motor 2
# define IN4 LATB.f3 // intrara4 de comanda in driver pentru motor2
# define encoder PORTB.f5 // intrare encoder(definire PORTB – digital input)
# define servo LATB.f4 // iesire servomecanism(semnal PWM)
Secventa de cod utilizata in mask -area pinilor de conexiune ai LCd -ului alfanumeric a fost
realizata in urmatorul mod:
//*************LCD CONECTIVITY DEFINITION [4 -bit on D4 -D7]* *************// definire masti conectivitate LCD
sbit LCD_RS at LATD0_bit; // bitul 0 din PORTD(LATD) reprezinta RS (LCD)
sbit LCD_EN at LATD1_bit; // bitu l 1 din PORTD(LATD) reprezinta EN (LCD)
sbit LCD_D4 at LATD2_bit; // bitul 2 din PORTD(LATD) reprezinta bitul D 4 (LCD)
sbit LCD_D5 at LATD3_bit; // bitul 3 din PORTD(LATD) reprezinta bitul D5 (LCD)
sbit LCD_D6 at LATD4_bit; // bitul 4 din PORTD(LATD) reprezinta bitul D 6 (LCD)
sbit LCD_D7 at LATD5_bit; // bitul 5 din PORTD(LATD) reprezinta bitul D7 (LCD)
sbit LCD_RS_Direction at TRISD0_bit; // bitul 0 din PORTD(LATD) reprezinta RS (LCD)
sbit LCD_EN_Direction at TRISD1_bit; // bitul 1 din PORTD(LATD) reprezinta EN (LCD)
sbit LCD_D4_Direction at TRISD2_bit; // bit 2 din PORTD(LATD) reprezinta bitul D4 (LCD)
sbit LCD_D5_Direction at TRISD3_bit; // bit 3 din PORTD(LAT D) reprezinta bitul D5 (LCD)
sbit LCD_D6_Direction at TRISD4_bit; // bit 4 din PORTD(LATD) reprezinta bitul D6 (LCD)
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
47
sbit LCD_D7_Direction at TRISD5_bit; // bit 5 din PORTD(LATD) rep rezinta bitul D7 (LCD)
In cadrul acestui proiect s -au utilizat specific variabile globale ce au uramtoarele tipuri si
functionalitati in codul sursa:
//************************GLOBAL VARIABLES*****************// definire variabile globale utilizate in cod
unsigned int// ––––––– RANGE ––––––– >[0…65535]
one_time_voltage=0, // utilizat in controlul sampling -ului tenisiunii
contor_encoder=0, // contor pulsuri de la encoder in unitate de timp
encoder_prev=0, // valoarea precedenta a semnalului de la e ncoder
puls_linie=0, // control servo in modul automat de trasare linii
pulses=0, // contor pulsuri in unitate de tim p
i=0,j=0, // contori generali loop -uri
inainte=0, // directie miscare platforma
inapoi=0, // directie miscare platforma
stanga=0, // directie miscare platforma
dreapta=0, // directie miscare platforma
contor_PWM=0, // variabila generare semnal PWM
perring=0, // conectivitate bl uetooth
mode=0, // mod de functionare sistem(manual -automat)
pwm_speed=10, // viteza de deplasare exprimata in perio ada de duty -cycle
contor_interrupt=0, // management timing pentru functia de intrerupere
iteratie_tensiune=0; // contor timing cicluril or tensiunii de alimentare
float// ––––––––– RANGE –––––––––––––- >[1.2E -38 to 3.4E+38]
tensiune_bat=0, // pastrare valoare tensiune de alimenta re
pulses_per_sec=0; // variabila pastrare valoarii vitezei exprimata in cm/sec
char// –––––––––- RANGE –––––––––––––- >[-128 to 127]
text[20], // variabila vector pentru conversie si afisare pe LCD
uart_rd=0; // variabila pastrare valoare de pe UART
In ceea ce func tiile implementate in sistem, aceastea au fost in prima faza declarate si mai
apoi definite dupa cum urmeaza:
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
48
//********************[FUNCTION DECLARATIONS]************* *****// bloc pentru declararea functiilor
void ADC_initialization(); // initializarea convertorului ADC
void reset_dev(); // resetare valori consumatori la startup sistem
void STARTUP_display(); // functie de afisare mesaje la startup sistem
void bluetooth_peering(); // peering cu utilizatorul
//void system_check(); // functie self -test la startare
Pentru ca microcontroler -ul sa recunoasa semnalele analogice, se utilizeaza initializarea
modulului de conversie ADC, modul ce lucreaza in regim multiplexat pe 11 canale . S-au
initializat registrii cu functii speciale de tip SFR ADCON0, ADCON1 si ADCON2 dupa cum
urmeaz a:
//**************************[FUNCTION DEFINITIONS]***********// bloc pentru definirea functiilor
void ADC_initialization(){ // functie de initializare a modului ADC
ADCON0 =0x00; // select channel 0 by default (AN0)
ADCON1 =0; // reset registru ADCON1 in prima faza
ADCON2 =0; // reset registru ADCON2
ADCON2.ADFM =1; // right justified
ADCON2.ACQT2=1; // 110 => 16 Tad
ADCON2.ACQT1=1; // 110 => 16 Tad
ADCON2.ACQT0=0; // 110 => 16 Tad
ADCON2.ADCS2=0; // 000 => FOSC /2
ADCON2.ADCS1=0; // 000 => FOSC /2
ADCON2.ADCS0=0; // 000 => FOSC /2
} // end functie initializare ADC
La startarea sistemului toate dispozitivele de actionare vor fi resetate(0L) pentru a se evita
eventualele actionari accidentale la initializare:
//***************[FUNCTIE RESETARE DISPOZITIVE]******// functie de reset (de 0) pentru dispozitivele de putere
void reset_dev(){ // functie de reset cu apel la startare
RGB_R=0; // reset RGB -red
RGB_G=0; // reset RGB -green
RGB_B=0; // reset RGB -blue
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
49
IN1=0; // reset intare de comanda -1 a modulului driver DC
IN2=0; // reset intare de comanda -2 a modulului dr iver DC
IN3=0; // reset intare de comanda -3 a modulului driver DC
IN4=0; // reset intare de comanda -4 a modu lului driver DC
servo=0; // reset pentru servomecanism
} // end functie de reset
In momentul startarii s istemului electronic, se va apela functia de start -up in care se vor actiona
si testa toate sistemele constitutive ( LED, servo brat, deplasare) :
//**************************[FUNCTIE STARTUP]***********************************// functie de selftest
apelata la startare
STARTUP_display(){ // functie a selftest si afisare
Lcd_Out(2,1,"S "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Cmd(_LCD_CLEAR); // clear screen
Lcd_Out(2,1,"CS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"ICS "); // afisare mobila a mesajului " ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"TICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"OTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"BOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"OBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
50
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(220 0); // Delay de 2.2s
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(2,1," SYSTEM SELFTEST "); // afisare mesaj"selftest"
Delay_ms(2000); // Delay de 2s
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(1,1," [RGB TEST] "); // afisare pe display linia1, coloana1
for(i=0;i<5;i++){ // bucla de test pentru LED -ul RGB
RGB_R=1; // actionare LED rosu RGB timp de 250ms
RGB_G=0; // reset led verde RGB
RGB_B=0; // reset led albastru RGB
Delay_ms(100); // delay 250ms cu LED rosu activat
RGB_R=0; // reset led rosu
RGB _G=1; // actionare LED verde RGB timp de 250ms
RGB_B=0; // reset led albastru
Delay_ms(100); // delay 250 ms
RGB_R=0; // reset led rosu -RGB
RGB_G=0; // reset led verde -RGB
RGB_B=1; // actionare LED albastru RGB timp de 250ms
Delay_ms(100); // delay 250ms cu led albastru ac tivat
} // repetare bucla de 5 ori
RGB_R=0; // actionare LED rosu RGB timp de 250ms
RGB_G=0; // reset led verde RGB
RGB_B=0; // reset led albastru RGB
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(1,1," [SERVO TEST] "); // afisare mesaj pe LCD
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
51
for(i=0;i<50;i++){ // transmisie 50 perioade semnal PWM
servo=1; // activare semnal servo
Delay_us(2000); // duty cycle 2ms (miscare brat in jos)
servo=0; // dezactivare servo cu 0L
Delay_ms(17); // perioada 0L semnal PWM de 17ms
} // end structura repetitiva for
for(i=0;i<50;i++){ // transmisie 50 perioade semnal PWM
servo=1; // activare semnal servo
Delay_us(650); // duty cycle 650us (miscare brat in sus)
servo=0; // dezactivare servo cu 0L
Delay_ms(19); // perioada 0L semnal PWM de 17ms
} // end structura repetitiva for
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(1,1," [DRIVE TEST] "); // afisare mesaj pe LCD
for(i=0;i<300;i++){ // generare 300 perioade PWM (inapoi)
IN1=1; // configuratie mers inapoi
IN2=0; // configuratie mers inapoi
IN3=1; // configuratie mers inapoi
IN4=0; // configuratie mers inapoi
Delay_us(500); // duty cycle de 0.5ms
IN1=0; // dezactivare intrar i de comanda driver
IN2=0; // dezactivare intrari de comanda driver
IN3=0; // dezactivare intrari de coman da driver
IN4=0; // dezactivare intrari de comanda driver
Delay_ms(1); // perioada 0L a semnalului PWM
} // end structura repetitiva
Delay_ms(400); // delay repaus 400ms
for(i=0;i<300;i++){ // generare 300 perioade PWM
IN1=0; // configuratie mers inainte
IN2=1; // configuratie mers inainte
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
52
IN3=0; // configuratie mers inainte
IN4=1; // configuratie mers inaint e
Delay_us(500); // duty cycle de 0.5ms
IN1=0; // dezactivare intrari de comanda driver
IN2=0; // dezactivare intrari de comanda driver
IN3=0; // dezactivare intrari de comanda
IN4=0; // dezactivare intrari de comanda
Delay_ms(1); // perioada 0L a semnalului PWM
} // end structura repetitiva
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(2,1," [SYSTEM OK] "); // afisare mesaje pe LCD
Delay_ms(1 000); // delay 1 secunda
Lcd_Cmd(_LCD_CLEAR); // clearscreen
} // end functie de afisare la startare
Functia de conectare a utilizatorului la sistem este o functie de asteptare a procesului de peering
cu mesaje de informare la conectare reusita si a fost implementata in urmatorul mod:
//*********************[BLUETOOTH PEERING]************ *******// functie de asteptare si peering cu utilizatorul
bluetooth_peering(){ // definire functie de conectare la BT
while(!uart_rd) { // atat timp cat utilizatorul nu s -a conectat
i++; // pentru timing afisare pe LCD
uart_rd = UART1_Read(); // se asteapta utilizatorul
if ((i>=0 && i<=20 ) || // secvente comanda LED RGB rosu
(i>=100 && i<=120) || // secvente comanda LED RGB rosu
(i>=200 && i<=220) || // secvente comanda LED RGB rosu
(i>=300 && i<=320 ) || // secvente comanda LED RGB rosu
(i>=400 && i<=420) || // secvente comanda LED RGB rosu
(i>=500 && i<=520) ) // secvente comanda LED RGB rosu
RGB_R=1; // setare RGB_R =1 (LED rosu)
else // ramura else
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
53
RGB_R=0; // reset pe LED RGB_R (LED rosu)
if (i<=200) // secventa afisare pe LCD mod dinamic
Lcd_Out(1,1,"Connect to BT. "); // un singur punct pentru mesaj
if (i>200 && i<=400) // timing afisare mesaj
Lcd_Out(1,1,"Connect to BT.. " ); // doua puncte pentru mesaj
if (i>400 && i<570) // timing afisare mesaj
Lcd_Out(1,1,"Connect to BT…"); // 3 puncte pentru mesaj
if (i>570 && i<600) // timing afisare mesaj
Lcd_Out(1,1,"Connect to BT "); // 0 puncte pentru mesaj
if (i>=600) // contorizare
i=0; // reset contor iteratie afisare
} // end structura while
RGB_R=0; // reset RGB_R dupa peering cu succes
RGB_G=0; // reset RGB_G dupa peering cu succes
RGB_B=0; // reset RGB_B dupa peering cu succes
Lcd_Out(1,1," [Connection OK] "); // mesaj pe LCD – conexiu ne bluetooth reusita
for(i=0;i<=20;i++){ // indicare prin LED verde conexiune reusita
RGB_G=1; // LED verde RGB activat
Delay_ms(20); // Delay mentinere 20ms
RGB_G=0; // reset LED RGB -verde
Delay_ms(70); // delay 50 ms
} // end structura for
Lcd_Cmd(_LCD_CLEAR); // clear display
RGB_R=0; // reset LED rosu RGB
RGB_G=0; // reset LED verde RGB
RGB_B=0; // reset LED albastru RGB
} // end functie peering
void main() { // functia principala main
ct Setarea oscilatorului a fost realizata la frecventa de 64Mhz, ceea ce inseamna o viteza
efectiva de executie a instructiunilor de 16 MI PS, setand registri speciali de tip SFR OSCCON
si OSCTUNE:
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
54
//***************[INTERNAL OSCILATOR 64 Mhz]********// setare oscilator intern pe 64 Mhz(16MIPS)
OSCCON = 0b01110000; // SFR oscillator r egister
OSCTUNE.f6 = 1; // SFR oscillator register
Registri de directivitate seteaza port -urile corespunzatoare pinilor I/O ca iesiri sau ca intrari
astfel:
//*****************************[D IRECTIVITATE I/O]**************************// setare directivitate pini I/O
TRISA = 0b00000001; // AN0 active as analogic input
TRISC = 0b10000000; // LATC.f7=1=Rx, pentru comunicatia seriala UART
TRISB = 0b00100000; // RB5=input digital achizitie encoder
TRISD = 0b00000000; // all port pins are outputs
TRISE = 0b00000000; // all port pins are outputs
Vitate Timer -ul TIMER1 este utilizat in generarea semnalului PWM necesar comenzii
motoarelor DC dar si aprinderea LED -ului RGB in cazul diferitelor evenimente in urmatorul
mod:
//***************************[TIMER1 INTERRUPT]*********************************// setare interupere
TIMER1(comanda motoarelor)
INTCON.GIE = 1; // enable all un -masked interrupts
INTCON.PEIE = 1; // set PEIE
T1CON = 1; // enable Timer1
PIR1.TMR1IF = 0; // clear TMR1IF -> interrupt flag
TMR1H = 0b11111011; //SET INITIAL START TIMER
TMR1L = 0b10110011; // SET INITIAL START TIMER VALUE
PIE1.TMR1IE = 0; // Timer1 DISABLED (0 = disabled)
Lor Inainte de executia buclei principale de for a sistemului software, se vor apela functiile de
reset, de disaply, ADC -ului la start -up si de initializare LCD astfel:
//*****************************[STARTUP RESET]********* **// Reset dispozitive la startup -ul sistemului
reset_dev(); // apel functie resetare dispozitive de actionare
//************** ***********[MODULES INITIALIZATION]***** // apelul functiilor de initializare la startare sistem
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
55
Lcd_Init(); // apelare functie de intializare LCD
Lcd_Cmd(_LCD_CLEAR); // functie Clear display after INIT
Lcd_Cmd(_LCD_CURSOR_OFF); // functie Cursor off after INIT
ADC_initialization(); // functie de initializare a modulului ADC
UART1_Init(9600); // apelare functie initializare modul UART
//STARTUP_display(); // apelare functie de afisare la startare sistem
bluetooth_peering(); // apelare functie bluetooth peering
PIE1.TMR1IE = 1; // Timer 1 interrupt enabled (activare TIMER1)
In bucla principala de for se va evalua daca sistemul trebuie sa ruleze in modul manual sau
automat prin input de la utilizator prin intermediul comunicatiei seriale:
for(;;){ // main for loop
if(UART1_Data_Ready()) // Daca s -a receptionat mesaj pe comunicati e
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
In modul manual de functionare a robotului se va evalua in prima faza tensiunea de alimentare
de la acumulatori si se vor emite mesaje de informare si atentionare pe LCD -ul alfanumeri c :
while(mode==0){ // atat timp cat modul de lucru este manual(mode==0)
iteratie_tensiune ++; // citire tensiune 1 la 40 cicluri de while
if(UART1_Data_Ready()) // daca s -au receptionat date pe comunicatia bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
if(one_time_voltage==0){ // afisare pe LCD mesaje doar 1 data la intrare
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
56
tensiune_bat=Adc_read(0)* 0.00383; // calibrat cu agilent keysight
FloatToStr(tensiune_bat, text); // conversie din flo at in string
text[4]=0; // eliminare zecimale
Lcd_Out(1,8,text); // afisare tensiune ;a pozitia : linia 1, coloana 8
Lcd_Out(1,1,"V_bat:"); // afisare mesaj specific pe LCD
Lcd_Chr(1,12,'V'); // afisare mesaj specific pe LCD
Lcd_Out(2,1,"Gear :" ); // afisare mesaj specific pe LCD
Lcd_Out(2,15," level"); // afisare mesaj specific pe LCD
Lcd_Out(3,1,"Speed:"); // afisare mesaj specific pe LCD
Lcd_Out(3,15,"cm/sec"); // afisare mesaj specific pe LCD
Lcd_Out(4,1," [MANUAL] "); // afisare mesaj specific pe LCD
one_time_voltage=1; // conditie pentru afisare singulara
} // end bucla afisare singulara
if(iteratie_tensiune==40){ // citire tensiune 1 data la 40 cucluri executie
tensiune_bat=Adc_read(0)* 0.00383; // calibrat cu agilent keysight
FloatToStr(tensiune_bat, text); // conversie din float in string a tensiunii
text[4]=0; // eliminare zecimale
Lcd_Out(1,8,text); // afisare valoare la pozitie specificata
} // end iteratie valoare tensiune
if(iteratie_tensiune>=100){ // iteratie indicatori tensiune 1 la 100 cicluri
if(tensiune_bat>=14.8) // daca tensiunea > 14.8V
Lcd_Out(1,13," [OK]"); // afisare mesaj de OK
if(tensiune_bat>=14 && tensiune_bat<14.8) // avertizare tensiune scaz uta
Lcd_Out(1,13," [LOW]"); // mesaj de tensiune scazuta pe LCD
if(tensiune_bat<14) // tensiune <14V
Lcd_Out(1,13," [ATT] "); // avertizare pentru incarcare acumulatori
iteratie_tensiune=0; // reset variabila iteratie pentru conditionare
} // end iteratie afisare mesaje
Modul in care se realizeaza afisare vitezei de deplasare dar si valoarea treptei de viteza sunt
dependente de intreuperile genereate de TIMER1, unde se genereaza si calculul dista ntei
parcurse in unitatea de timp :
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
57
if(pulses_per_sec==0) // afisare valoare 0 cand nu se invart rotile
Lcd_Out(3,9,"0.00"); // afisar e valoare 0 cand nu se invart rotile
FloatToStr(pulses_per_sec/2.1, text); // 2 pulsuri encoder=1cm
text[4]=0; // eliminare zecimale
Lcd_out(3,9, text); // afisare la pozitie specificata
IntToStr(PWM_speed, text); // conversie treapta viteza din int in string
Lcd_out(2,7, t ext); // afisare trapta viteza la pozitie specificata
if(uart_rd=='e'){ // incrementare PWM = viteza de deplasare
PWM_speed ++; //incrementare duty cycle
if(PWM_speed>=30) // maximul de duty cycle este 30
PWM_speed=30; // limitare valoare la 30 unitati
Delay_ ms(100); // delay pentru switch la apasare
} // end comanda incrementare viteza
In urmatoarea secventa de cod se evalu eaza input -ul primit de la utilizator si pe baza acestuia
se actioneaza directia si bratul de marcare. Informatia primita de la utilizator prin intermediul
comunicatiei bluetooth este decodificata si mai apoi evaluata in blocuri decizionale astfel:
if(uart_rd=='E') // release la butorul de incrementare
Delay_ms(50); // delay intre apasari
if(uart_rd=='f' && PWM _speed>0){ // "f"= se decrementeaza PWM
PWM_speed –; // decrementare duty cycle
Delay_ms(100); // delay 100ms
} // end structura decrementare viteza
if(uart_rd=='F') // release la butorul d e decrementare
Delay_ms(50); // delay 50ms
if(uart_rd=='3') { // comanda directie inainte
inainte=1; // variabila stocare directie deplasare
inapoi= 0; // variabila stocare directie deplasare
dreapta=0; // variabila stocare directie deplasare
stanga= 0; // variabila stocare directie deplasare
} // end structura comanda inainte
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
58
if(uart_rd=='5'){ // comanda directie inapoi
inainte=0; // varia bila stocare directie deplasare
inapoi= 1; // variabila stocare directie deplasare
dreapta=0; // variabila stocare directie deplasare
stanga= 0; // variabila stocare directie deplasare
} // end structura comanda inapoi
if(uart_rd=='7'){ // directie stanga
inainte=0; // variabila stocare directie deplasare
inapoi= 0; // variabila stocare directie deplasare
dreapta=0; // variabila stocare directie deplasare
stanga= 1; // variabila stocare directie deplasare
} // end structura comanda stanga
if(uart_rd=='6'){ // directie dreapta
inainte=0; // variabila stocare directie deplasare
inapoi= 0; // variabila stocare directie deplasare
dreapta=1; // variabila stocare directie deplasare
stanga= 0; // variabila stocare directie deplasare
} // end structura comanda dreapta
if(uart_rd=='4' && uart_rd !='3' && uart_rd !='5' && uart_rd !='7'&& uart_rd !='6'){
inainte=0; // oprire comanda motoare
inapoi= 0; // daca s -a detectat orice release de buton
dreapta=0; // de control al directiei
stanga= 0; // anulare comanda motoare
servo=0; // anulare comanda servomecanism
} // end structura anulare comenzi directivitate
if(uart_rd=='S'){ // daca s -a trimis caracterul 'S'
for(i=0;i<20;i++){ // tran smisie 20 perioade semnal PWM
servo=1; // activare servo
Delay_us(1100); // duty cycle 1.1 secunde(coborare brat)
servo=0; // dezactivare servo
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
59
Delay_ms(50); // delay semiperioada 0L a semnalului PWM
} // end structura semi -coborare brat
Delay_ms(300); // perioada reapau stabilizare brat
for(i=0;i<20;i++){ // transmisie 20 perioade semnal PWM
servo=1; // activare servo
Delay_us(1370); // duty cycle semnal PWM
servo=0; // dezactivare servo
Delay_ms(40); // delay semiperioada 0L a semnalului PWM
} // end semi -structura final coborare brat
} // end structura coborare brat
if(uart_rd=='s'){ // daca s -a transmis caracterul 's'
for(i=0;i<20;i++){ // transmisie 20 perioada semnal PWM
servo=1; // activare servo
Delay_us(555); // duty cycle semnal PWM
servo=0; // dezactivare semnal servo
Delay_ms(19); // semiperioada 0L semnal PWM
} // end structura ridicare brat
} // end structura ridicare brat
} // end structura comanda manuala
one_time_voltage=0; // reset valoare afisare singulara mod maual
Lcd_Cmd(_LCD_CLEAR); // clearscreen
La fel ca si in modul manual, in modul automat pe LCD se vor afisa valorile tensiunii, treptei
de viteza, viteza de deplasare dar si modul de lucru(manual sau automat). Pe display -ul
alfanumeric v or fi afisate in timp real valorile provenite de la senzorii sistemului:
while(mode==1){ // mod de operare automat
if(UART1_Data_Ready()) // daca se receptioneaza date pe uart bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
60
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
iteratie_tensiune ++; // citire tensiune 1 data la 40 cicluri de while
if(one_time_voltage==0){ // variabila pentru executie singula pe LCD
tensiune_bat=Adc_read(0)* 0.00383; // calcul tensiune acumulatori
FloatToStr(tensiune_bat, text); // conversie tensiune in string
text[4]=0; // eliminare zecimale
Lcd_Out(1,8,text); // afisare tensiune la pozitie specificata
Lcd_Out(1,1,"V_bat:"); // afisare mesaje pe display
Lcd_Chr(1,12,'V'); // afisare mesaje pe display
Lcd_Out(2,1,"Gear :"); // afisare mesaje pe display
Lcd_Out(2,15," level"); // afisar e mesaje pe display
one_time_voltage=1; // conditie pentru executie singulara pe LCD
Lcd_Out(3,1,"Speed:"); // afisare mesaje pe displ ay
Lcd_Out(3,15,"cm/sec"); // afisare mesaje pe display
Lcd_Out(4,1," [AUTOMAT] "); // afisare mesaje pe display
one_time_voltage=1; // conditie pentru executie afisare pe LCD
PWM_speed=9; // viteza de deplasare prestabilita
} // end ciclu de afisare singular
if(iteratie_tensiune==5){ // citire tensiune alimentare o data la 5 cicluri
tensiune_bat=Adc_read(0)* 0.00383; // achizitie tensiune de alimentare canalul AN0
FloatToStr( tensiune_bat, text); // conversie tensiune de alimentare
text[4]=0; // eliminare zecimale
Lcd_Out(1,8,text); // afisare pe LCD a valorii la pozitie specificata
} // end citire tensiune in conditie de iteratie
if(iteratie_tensiune>=5){ // daca numarul de iteratii >= 5
if(tensiune_bat>=14.8) // tens iunea citita >14.8V
Lcd_Out(1,13," [OK]"); // afisare mesaj pe LCD la pozitie specificata
if(tensiune_bat>=14 && tensiune_bat<14.8) // tensiunea citita este i ntre 14 si 14.8
Lcd_Out(1,13," [LOW]"); // afisare mesaj de tensiune scazuta
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
61
if(tensiune_bat<14) // daca tensiunea <14V
Lcd_Ou t(1,13," [ATT]"); // afisare mesaj de atentionare pentru incarcare
iteratie_tensiune=0; // reset contor iterativ gestiune cicluri
} // end afisare mesaje gestiune acumulator
if(pulses_per_sec==0) // nu se detecteaza pulsuri de la encoder
Lcd_Out(3,9,"0.00"); // afisare valoare 0.00
FloatToStr(pulses_per _sec/2.1, text); // conversie pulsuri encoder in viteza(cm/sec)
text[4]=0; // eliminare zecimale
Lcd_out(3,9, text); // afisare la pozitie specifica
IntToStr(PWM_speed, text); // conversie treapta viteza in format string
Lcd_out(2,7, text); // afisare treapta viteza la pozitie specificata
inainte=1; // in modul automat robotul se deplaseaza
inapoi=0; // in modul automat robotul se deplaseaza
stanga=0; // in modul automat robotul se deplaseaza
dreapta=0; // in modul automat robotul se deplaseaza
In modul automat de lucru, platforma robotica se va deplasa constant inainte si va trasa linii
discontinue in functie de numarul de impulsuri primite de la encoder -ul sistemului.Miscarea
bratului va fi limitata si nu se va ridica pana la capat de linie(pozitia initiala):
while(puls_linie>=0 && puls_linie<=30 && mode==1){ // atat timp cat se numara 30 pulsuri de la en cooder
servo=1; // brat directionat in sus
Delay_us(1100); // duty cycle semnal PWM de comanda servo
servo= 0; // dezactivare servo
Delay_ms(50); // semi -perioada 0L a semnalului PWM
if(UART1_Data_Ready()) // daca s -a receptionat transmisie date pe serial bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de relare
} // end secventa ridicare brat in regimul automat
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
62
while(p uls_linie>30 && puls_linie<=100 && mode==1){// numarul de pulsuri de la encoder este 30 -100
servo=1; // bratul este lasat in jos
Delay_us(1300); // duty cycle semnal de comanda PWM pentru servo
servo=0; // dezactivare servo
Delay_ms(40); // semi -perioada 0L a semnalului PWM
if(UART1_Data_Ready()) // daca s -a receptionat transmisie date pe serial bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de ru lare
} // end secventa marcare(brat in pozitia de jos)
if(UART1_Data_Ready()) // daca s -a receptionat transmisie date p e serial bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
} // end secventa de selectie a modului de rulare
for(i=0;i<20;i++){ // SERVO TEST = OK
servo=1; // la comutarea bratul la pozitia initiala
Delay_us(555); // duty cycle semnal PWM
servo=0; // dezactivare servo
Delay_ms(19); // semi -perioada 0L a semnalului PWM
} // end secventa ridicare brat
inainte=0; // reset directie de deplasare
inapoi=0; // reset directie de deplasare
stanga=0; // reset directie de deplasare
dreapta=0; // reset directie de deplasare
one_time_voltage=0; // reset variabila iterativa de control afisare
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
63
Lcd_Cmd(_LCD_CL EAR); // clearscreen
} // end main for
} // end main loop
Ma Asa cum a fost amintit anterior in cadrul acestui proiect, in functia de intrerupere se
genereaza semnalul PEM necesar controlului motoarelor DC prin utilizareaa unui mecanism
software compus dintr -un numarator si comparator. Totdata in fu nctia de intrerupere se
gestioneaza si aprinderea intermitenta a LED -ului RGB:
//******************[intrerupere generata pe TIMER1]****************************//sectiune de intrerupere
void interrupt (){ // functia de intrerupere(salt automat la overflow)
contor_encoder++; // contor de iteratii pentru timing la calculul vitezei
contor_interrupt++; // contor intrerupere
contor_PWM++; // contor generare semnal PWM
if(encoder != encoder_prev){ // valoarea precede nta si actuala de la encoder
puls_linie++; // incrementare contor utilizat in controlul marcajului
pulses++; // numaru l de pulsuri de la encodet
encoder_prev=encoder; // valoarea precedenta copie valoarea actuala
} // end citire pulsuri encoder
if(puls_linie > 100) // controlul marcajului in modul automat de lucru
puls_linie=0; // reset valoare, limitare la 100 p ulsuri pentru trasare linie
if(contor_encoder==13333){ // s -a numarat o secunda
pulses_per_sec= pulses; // asignare valoare pentru utilizare in progr amul principal
pulses=0; // reset numar de pulsuri
contor_encoder=0; // reset contor gestionare timp
} // end numarare impulsuri in unitatea de timp
if(contor_interrupt <100) // setare perioaa duty cycle RGB
RGB_G=1; // aprindere RGB – verde
if(contor_interrupt >=100 && contor_interrupt<=9000) // setare perioada 0L semnal PWM
RGB_G=0; // dezactivare LED RGB -verde
if(contor_interrupt >9000){ // limitare valori
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
64
RGB_G=0; // dezactivare LED RGB
contor_interrupt =0; // resetare counter RGB
} // end secventa gestionare LED RGB
if(contor_PWM <= PWM_speed && inainte==1){ // semnal PWM deplasare –> diferential
IN1=0; // se imprima directia inainte
IN2=1; // in perioada se duty cycle PWM
} // end duty cycle motor simplu
if(contor_PWM <= PWM_speed+ 3 && inainte==1){ // semnal PWM deplasare
IN3=0; // while contorul de intreruperi < PWM speed
IN4=1; // primit prin interfata de la utilizator
} // end duty cycle pentru motorul cu encoder
if(contor_PWM <= PWM_speed && inapoi==1){ // semnal PWM deplasare inapoi
IN1=1; // se imprima directia inapoi
IN2=0; // in perioada se duty cycle PWM
} // end duty cycle motor simplu si directie inapoi
if(contor_PWM <= PWM_speed+3 && inapoi==1){ // semnal PWM deplasare
IN3=1; // while contor de intreruperi < PWM speed
IN4=0; // primit prin interfata de la utilizator
} //end constructie duty cycle PWM
if(contor_PWM <= PWM_speed && mode==0 && stanga==1){ // semnal PWM deplasare
IN1=0; // se imprima directia stanga
IN2=1; // in perioada se duty cycle PWM
IN3=1; // while contor de int reruperi < PWM speed
IN4=0; // primit prin interfata de la utilizator
} // end constructie duty cycl e pe stanga
if(contor_PWM <= PWM_speed && mode==0 && dreapta==1){ // semnal PWM deplasare –> directie dreapta
IN1=1; // se imprima directia dreapta
IN2=0; // in perioada se duty cycle PWM
IN3=0; // atat timp cat contorul de intreruperi < PWM speed
IN4=1; // primit prin interfata de la utilizator
} // end constructie semnal PWM pentru directia dreapta
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
65
if(co ntor_PWM > PWM_speed && contor_PWM <= 30){ // perioada 0L din semnalul PWM
IN1=0; // semnal 0 catre motoare
IN2=0; // semnal 0 catre motoare
IN3=0; // semnal 0 catre motoare
IN4=0; // semnal 0 catre motoare
} // end semiperioada 0L a semnalului PWM
if(contor_PWM > 30){ // limitare valoare maxima counter
contor_PWM =0; // reset counter
} // end limitare counter constructie semnal PWM
if(uart_rd =='4'){ // daca s -a detectat release de buton la deplasare
IN1=0; // oprire deplasare
IN2=0; // oprire deplasare
IN3=0; // oprire deplasare
IN4=0; // oprire deplasare
servo=0; // dezactivare servomecanism RC
} // end interogare release buton de pe interfata
//*************************[setare perioada timer]******************************//
PIR1.TMR1IF = 0; // Clear TMR1IF -> interrupt flag
TMR1H = 0b11111011; // SET INITIAL START TIMER VALUE -High
TMR1L = 0b10110011; // SET INITIAL START TIMER VALUE -Low
}
7. CODUL SURSA AL SISTEMULU ROBOTIC
//*******************[DEFINE CONECTIVITY ACCORDING. TO SCHEMATIC]***************// atribuire
de nume in faza de preprocesare
# define RGB_B LATC.f5 // definire masti LED RGB – culoarea albastra
# def ine RGB_G LATC.f4 // definire masti LED RGB – culoarea verde
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
66
# define RGB_R LATC.f3 // definire masti LED RGB – culoarea rosie
# define IN1 LATB.f0 // intrara1 de comanda in driver pentru motor1
# define IN2 LATB.f1 // intrara2 de comanda in driver pentru motor 1
# define IN3 LATB.f2 // intrara3 de comanda in driver pentru motor2
# define IN4 LATB.f3 // intrara4 de comanda in driver pentru motor 2
# define encoder P ORTB.f5 // intrarea de semnal pentru encoder(definire PORTB –
digital input)
# define servo LATB.f4 // iesirea de comanda pentru servomecanism(se mnal PWM)
//*****************LCD CONECTIVITY DEFINITION [4 -bit on D4 -D7]******************// definire masti
conectivitate LCD
sbit LCD_RS at LATD0_bit; // bitul 0 din PORTD(LATD) reprezinta RS (LCD )
sbit LCD_EN at LATD1_bit; // bitul 1 din PORTD(LATD) reprezinta EN (LCD)
sbit LCD_D4 at LATD2_bit; // bitul 2 din PORTD(LATD) reprezinta bitul D 4 (LCD)
sbit LCD_D5 at LATD3_bit; // bitul 3 din PORTD(LATD) reprezinta bitul D 5 (LCD)
sbit LCD_D6 at LATD4_bit; // bitul 4 din PORTD(LATD) reprezinta bitu l D6 (LCD)
sbit LCD_D7 at LATD5_bit; // bitul 5 din PORTD(LATD) reprezinta bitul D 7 (LCD)
sbit LCD_RS_Direction at TRISD0_bit; // bitul 0 din PORTD(LATD) repre zinta RS (LCD)
sbit LCD_EN_Direction at TRISD1_bit; // bitul 1 din PORTD(LATD) reprezinta EN (LC D)
sbit LCD_D4_Direction at TRISD2_bit; // bitul 2 din PORTD(LATD) reprez inta bitul D4
(LCD)
sbit LCD_D5_Direction at TRISD3_bit; // bitul 3 din PORTD(LATD) reprezinta bitul D 5
(LCD)
sbit LCD_D6_Direction at TRISD4_bit; // bitul 4 din PORTD(LA TD) reprezinta bitul D6
(LCD)
sbit LCD_D7_Direction at TRISD5_bit; // bitul 5 din PORTD(LATD) reprezinta bitul D 7
(LCD)
//***************************GLOBAL VARIABLES***********************************// definire
variabile globale utilizate in cod
unsigned int// ––––––– RANGE –––––––––––––- >[0…65535]
one_time_voltage=0, // utilizat in controlul sampling -ului tenisiunii
contor_encoder=0, // contor pulsuri de la encoder in unitate de timp
encoder_prev=0, // valoarea preceden ta a semnalului de la encoder
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
67
puls_linie=0, // control servo in modul automat de trasare linii
pulses=0, // contor puls uri in unitate de timp
i=0,j=0, // contori generali loop -uri
inainte=0, // directie miscare platforma
inapoi=0, // directie miscare platforma
stanga=0, // directie miscare platforma
dreapta=0, // directie miscare platforma
contor_PWM=0, // variabila generare semnal PWM
perring=0, // conectivitate bluetooth
mode=0, // mod de functionare sistem(manual -automat)
pwm_speed=10, // viteza de deplasare expr imata in perioada de duty -cycle
contor_interrupt=0, // management timing pentru functia de intrer upere
iteratie_tensiune=0; // contor pen tru timingul ciclurilor tensiunii de alimentare
float// ––––––––– RANGE –––––––––––––- >[1.2E -38 to 3.4E+38]
tensiune_bat=0, // variabila pastrare valoa re tensiune de alimentare
pulses_per_sec=0; // variabila pentru pastrarea valoarii viteze i exprimata in
cm/sec
char// –––––––––- RANGE –––––––––––––- >[-128 to 127]
text[20], // variabila vector pentru conversie si afisa re pe LCD
uart_rd=0; // variabila pastrare valoare de pe UART
//**************************[FUNCTION DECLARATIONS]*****************************// bloc pentru
declararea functiilor
void ADC_initialization(); // initializarea convertorului ADC
void reset_de v(); // resetare valori consumatori la startup sistem
void STARTUP_display(); // functie de afisare mesaje la startup siste m
void bluetoot h_peering(); // peering cu utilizatorul
//void system_check(); // functie self -test la startare
//**************************[FUNCTION DEFINITIONS]******************************// bloc pentru
definirea functiilor
void ADC_initialization(){ // functie de initializare a modului ADC
ADCON0 =0x00; // select channel 0 by default (AN0)
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
68
ADCON1 =0; // reset registru ADCON1 in prima faza
ADCON2 =0; // reset registru ADCON2
ADCON2.ADFM =1; // right justified
ADCON2.ACQT2=1; // 110 => 1 6 Tad (setare timp achizitie = 16 x Timp de
conversie pe 1 bit
ADCON2.ACQT1=1; // 110 => 16 Tad (setare timp achizitie = 16 x Timp de
conversie pe 1 bit
ADCON2.ACQT0=0; // 110 => 16 Tad (setare timp achizitie = 16 x Timp de
conversie pe 1 bit
ADCON2.ADCS2=0; // 000 => FOSC /2
ADCON2.ADCS1=0; // 000 => FOSC /2
ADCON2.ADCS0=0; // 000 => FOSC /2
} // end functie initiali zare ADC
//**********************[FUNCTIE RESETARE DISPOZITIVE]**************************// functie de
reset (de 0) pentru dispozitivele de putere
void reset_dev(){ // functie de reset cu apel l a startare
RGB_R=0; // reset RGB -red
RGB_G=0; // reset RGB -green
RGB_B=0; // reset RGB -blue
IN1=0; // reset intare de comanda -1 a modulului driver DC
IN2=0; // reset intare de comanda -2 a modulului driver DC
IN3=0; // reset intare de comanda -3 a modulului driver DC
IN4=0; // reset intare de comanda -4 a modulului driver DC
servo=0; // reset pentru servomecanism
} // en d functie de reset
//**************************[FUNCTIE STARTUP]***********************************// functie de
selftest apelata la startare
STARTUP_display(){ // functie a selftest si afisare l a startarea sistemului
Lcd_Out(2,1,"S "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Cmd(_LCD_C LEAR); // clear screen
Lcd_Out(2,1,"CS "); // afisare mobila a mesajului "ROBOTICS"
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
69
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"ICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"TICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"OTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"BOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"OBOTICS "); // afisare mobila a me sajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1,"ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(200); // Delay de 230ms
Lcd_Out(2,1," ROBOTICS ") ; // afisare mobila a mesajului "ROBOTICS"
Lcd_Out(2,1," ROBOTICS "); // afisare mobila a mesajului "ROBOTICS"
Delay_ms(2200); // Delay de 2.2s
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(2,1," SYSTEM SELFTEST "); // afisare mesaj"selftest"
Delay_ms(2000); // Delay de 2s
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(1,1," [RGB TEST] "); // afisare pe display linia1, coloana1
for(i=0;i<5;i++){ // bucla de test pentru LED -ul RGB
RGB_R=1; // actionare LED rosu RGB timp de 250ms
RGB_G=0; // reset led verde RGB
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
70
RGB_B=0; // reset led albastru RGB
Delay_ms(100); // delay 250ms cu LED rosu activat
RGB_R=0; // reset led rosu
RGB_G=1; // actionare LED verde RGB timp de 250ms
RGB_B=0; // reset led albastru
Delay_ms(100); // delay 250 ms
RGB_R=0; // reset led rosu -RGB
RGB_G=0; // reset led verde -RGB
RGB_B=1; // actionare LED albastru RGB timp de 250ms
Delay_ms(100); // delay 2 50ms cu led albastru activat
} // repetare bucla de 5 ori
RGB_R=0; // actionare LED rosu RGB timp de 250ms
RGB_G=0; // reset led verde RGB
RGB_B=0; // reset led albastru RGB
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(1,1," [SERVO TEST] "); // afisare mesaj pe LCD
for(i=0;i<50;i++){ // transmisie 50 perioad e semnal PWM catre servo
servo=1; // activare semnal servo
Delay_us(2000); // duty cycle 2ms (miscare brat in jos)
servo=0; // dezactivare servo cu 0L
Delay_ms(17); // perioada 0L semnal PWM de 17ms
} // end structura repetitiva for
for(i=0;i<50;i++){ // transmisie 50 perioade semnal PWM catre se rvo
servo=1; // activare semnal servo
Delay_us(650); // duty cycle 650us (miscare brat in sus)
servo=0; // de zactivare servo cu 0L
Delay_ms(19); // perioada 0L semnal PWM de 17ms
} // end structura repetitiva for
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(1,1," [DRIVE TEST] "); // afisare mesaj pe LCD
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
71
for(i=0;i<300;i++){ // generare 300 perioade PWM catre motoare(inapoi)
IN1=1; // configuratie mers inapoi
IN2=0; // configuratie mers inapoi
IN3=1; // configuratie mers inapoi
IN4=0; // configuratie mers inapoi
Delay_us(500); // duty cycle de 0.5ms
IN1=0; // dezactivare intrari de comanda driver(semi 0L)
IN2=0; // dezactivare intrari de comanda driver(semi 0L)
IN3=0; // dezactivare intrari de comanda driver(semi 0L)
IN4=0; // dezactivare intrari de comanda driver(semi 0L)
Delay_ms(1); // perioada 0L a semnalului PWM
} // end structura repetitiva
Delay_ms(400); // delay repaus 400ms
for(i=0;i<300;i++){ // g enerare 300 perioade PWM catre motoare(inainte)
IN1=0; // configuratie mers inainte
IN2=1; // configuratie mer s inainte
IN3=0; // configuratie mers inainte
IN4=1; // configuratie mers inainte
Delay_us(500); // duty cycle de 0.5ms
IN1=0; // dezactivare intrari de comanda driver(semi 0L)
IN2=0; // dezactivare intrari de comanda driver(semi 0L)
IN3=0; // dezactivare intrari de comanda driver(semi 0L)
IN4=0; // dezactivare intrari de comanda driver(semi 0L)
Delay_ms(1); // perioada 0L a semnalului PWM
} // end structura repetitiva
Lcd_Cmd(_LCD_CLEAR); // clearscreen
Lcd_Out(2,1," [SYSTEM OK] "); // afisare mesaje pe LCD
Delay_ms(1000); // delay 1 secunda
Lcd_Cmd(_LCD_CLEAR); // clearscreen
} // end functie de afisare la startare
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
72
//****************************[BLUETOOTH PEERING]*******************************// functie de
asteptare si peering cu utilizatorul
bluetooth_peering(){ // definire functie de conectare la BT
while(!uart_rd) { // atat timp cat utilizatorul nu s -a conectat
i++; // pentru timing afisare pe LCD
uart_rd = UART1_Read(); // atat timp cat buffer=ul este empty, se asteapta
utilizatorul
if ((i>=0 && i<=20 ) || // secvente comanda LED RGB rosu aprindere intermitenta
(i>=100 && i<=120) || // secvente comanda LED RGB rosu aprindere intermiten ta
(i>=200 && i<=220) || // secvente comanda LED RGB rosu aprindere intermitenta
(i>=300 && i<=320) || // secvente comanda LED RGB rosu aprindere intermiten ta
(i>=400 && i<=420) || // secvente comanda LED RGB rosu aprindere intermitenta
(i>=500 && i<=520) ) // secvente comanda LED RGB rosu aprindere intermiten ta
RGB_R=1; // setare RGB_R =1 (LED rosu)
else // ramura else
RGB_R=0; // reset pe LED RGB_R (LED rosu)
if (i<=200) // secventa afisare pe LCD mod dinamic
Lcd_Out(1,1,"Connect to BT. "); // un singur punct pentru m esaj
if (i>200 && i<=400) // timing afisare mesaj
Lcd_Out(1,1,"Connect to BT.. "); // doua puncte pentru mesaj
if (i>400 && i<570) // timing afisare mesaj
Lcd_Out(1,1,"Connect to BT…"); // 3 puncte pentru mesaj
if (i>570 && i<600) // tim ing afisare mesaj
Lcd_Out(1,1,"Connect to BT "); // 0 puncte pentru mesaj
if (i>=600) // contorizare
i=0; // reset contor iteratie afisare
} // end structura while
RGB_R=0; // reset RGB_R dupa peering cu succes
RGB_G=0; // reset RGB_G dupa peering cu succes
RGB_B=0; // reset RGB_B du pa peering cu succes
Lcd_Out(1,1," [Connection OK] "); // mesaj pe LCD – conexiune bluetooth reusita
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
73
for(i=0;i<=20;i++){ // indicare prin LED verde co nexiune reusita
RGB_G=1; // LED verde RGB activat
Delay_ms(20); // Delay mentinere 20ms
RGB_G=0; // reset LED RGB -verde
Delay_ms(70); // delay 50 ms
} // end st ructura for
Lcd_Cmd(_LCD_CLEAR); // clear display
RGB_R=0; // reset LED rosu RGB
RGB_G=0; // reset LED verde RGB
RGB_B=0; // reset LED albastru RGB
} // end funct ie peering
void main() { // functia principala main
//**************************[INTERNAL OSCILATOR 64 Mhz]*************************// setare
oscilator intern pe 64 Mhz(16MIPS)
OSCCON = 0b01 110000; // SFR oscillator register
OSCTUNE.f6 = 1; // SFR oscillator register
//*****************************[DIRECTIVITATE I/O]***** *************************// setare
directivitate pini I/O
TRISA = 0b00000001; // AN0 active as analogic input
TRISC = 0b10000000; // LAT C.f7=1=Rx, pentru comunicatia seriala UART
TRISB = 0b00100000; // RB5=input digital achizitie encoder
TRISD = 0b00000000; // all port pi ns are outputs
TRISE = 0b00000000; // all port pins are outputs
//***************************[TIMER1 INTERRUPT]*********************************// setare
interupere TIMER1(comanda motoarelor)
INTC ON.GIE = 1; // enable all un -masked interrupts
INTCON.PEIE = 1; // set PEIE
T1CON = 1; // enable Timer1
PIR1.TMR1IF = 0; // clear TMR1IF -> interrupt flag
TMR1H = 0b11111011; // SET INITIAL START TIMER VALUE -High (step =
100us)
TMR1L = 0b10110011; // SET INITIAL START TIMER VALUE -Low
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
74
PIE1.TMR1IE = 0; // Timer1 DIS ABLED (0 = disabled)
//*****************************[STARTUP RESET]**********************************// Reset
dispozitive la startup -ul sistemului
reset_dev(); // apel functie resetare disp ozitive de actionare
//*************************[MODULES INITIALIZATION]*****************************// apelul
functiilor de initializare la startare sistem
Lcd_Init(); // apelare functie de intializare LCD
Lcd_Cmd(_LCD_CLEAR); // functie Clear display after INIT
Lcd_Cmd(_LCD_CURSOR_OFF); // functie Cursor off after INIT
ADC_init ialization(); // apelare functie de initializare a modulului ADC
UART1_Init(9600); // apelare functie initializare modul UART
//STARTUP_ display(); // apelare functie de afisare la startare sistem
bluetooth_peering(); // apelare functie bluetooth peering
PIE1.TMR1IE = 1; // Timer 1 interrupt enabled (activare TIMER1)
for(;;){ // main for loop
if(UART1_Data_Ready()) // Daca s -a receptionat mesaj pe comunicatia BT
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
while(mode==0){ // atat timp cat modul de lucru este manual(mode ==0)
iteratie_tensi une ++; // citire tensiune 1 la 40 cicluri de while
if(UART1_Data_Ready()) // daca s -au receptionat date pe comunicatia bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
if(one_time_voltage==0){ // afisare pe LCD mesaje doar 1 data la intrare in mo dul
manual
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
75
tensiune_bat=Adc_read(0)* 0.00383; // calibrat cu agilent keysight
FloatToStr(tensiune_bat, text); // conversie din float in string
text[4]=0; // eliminare zecimale
Lcd_Out(1,8,text); // afisare tensiune ;a pozitia : linia 1, coloana 8
Lcd_Out(1,1,"V_bat:"); // afisare mesaj specific pe LCD
Lcd_Chr(1,12,'V'); // afisare mesaj specific pe LCD
Lcd_Out(2,1,"Gear :"); // afisare mesaj specific pe LCD
Lcd_Out(2,15," level"); // afisare mesaj specific pe LCD
Lcd_Out(3,1,"Speed:"); // afisare mesaj specific pe LCD
Lcd_Out(3,15,"cm/sec"); // afisare mesaj specific pe LCD
Lcd_Out(4,1," [MANUAL] "); // afisare mesaj specific pe LCD
one_time_voltage=1; // conditie pentru afisare singulara in intrare mod manual
} // end bucla afisare singulara la intrarea in modul a utomat
if(iter atie_tensiune==40){ // citire tensiune 1 data la 40 cucluri executie in mod
manual
tensiune_bat=Adc_read(0)* 0.00383; // calibrat cu agilent keysight
Float ToStr(tensiune_bat, text); // conversie din float in string a tensiunii pentru afisare
text[4]=0; // eliminare zecimale
Lcd_Out(1,8,text); // afisare valoare la pozitie specificata
} // end iteratie valoare tensiune
if(iteratie_tensiune>=100){ // iteratie indicatori tensiune 1 la 100 cicluri
if(tensiune_bat>=14.8) // daca tensiunea > 14.8V
Lcd_Out(1,13," [OK]"); // afisare mesaj de OK
if(tensiune_bat>=14 && tensiune_bat<14.8) // tensiune in plaja 14 -14.8 = avertizare tensiune
scazuta
Lcd_Out(1,13," [LOW]"); // mes aj de tensiune scazuta pe LCD
if(tensiune_bat<14) // tensiune <14V
Lcd_Out(1,13," [ATT]"); // mesaj de avertizare pentru incarcare acumulato ri
iteratie_tensiune=0; // reset variabila iteratie pentru conditionare execu tie
} // end iteratie afisare mesaje
if(pulses_per_sec==0) // afisare valoare 0 cand nu se invart rotile
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
76
Lcd_Out( 3,9,"0.00"); // afisare valoare 0 cand nu se invart rotile
FloatToStr(pulses_per_sec/2.1, text); // 2 pulsuri encoder=1cm, conversie in string si afis are
viteza
text[4]=0; // eliminare zecimale
Lcd_out(3,9, text); // afisare la pozitie specificata
IntToStr(PWM_speed, text); // conversie treapta viteza din int in string
Lcd_out(2,7, text); // afisare trapta viteza la pozitie specificata
if(uart_rd=='e'){ // incrementare PWM = viteza de deplasare
PWM_speed ++; // incrementare duty cycle utilizat in intrerupere
if(PWM_speed>=30) // maximul de duty cycle este 30(viteza maxima)
PWM_speed=30; // limitare valoare la 30 unitati
Delay_ms(100); // delay pentru switch la apasare
} // end comanda incrementare viteza prin bluetooth
if(uart_rd=='E') // momentul in care se face release la butorul de incrementare
Delay_ms(50); // delay intre apasari
if(uart_rd=='f' && PWM_speed>0){ // dac a s-a trimis caracterul "f", se decrementeaza
PWM
PWM_speed –; // decrementare duty cycle
Delay_ms(100); // delay 100ms
} // end structura decrementare viteza prin bluetooth
if(uart_rd=='F') // momentul in care se face release la butorul de decrementare
Delay_ms(50); // delay 50ms
if(uart_rd=='3') { // comanda directie inainte
inainte=1; // variabila stocare directie deplasare
inapoi= 0; // variabila stocare directie deplasare
dreapta=0; // variabila stocare directie deplasare
stanga= 0; // variabila stocare directie deplasare
} // end structura comanda inainte
if(uart_rd=='5'){ // comanda directie inapoi
inainte=0; // variabila stocare directie deplasare
inapoi= 1; // variabila stocare directie deplasare
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
77
dreap ta=0; // variabila stocare directie deplasare
stanga= 0; // variabila stocare directie deplasare
} // end structura comanda inapoi
if(uart_rd=='7'){ // directie stanga
inainte=0; // variabila stocare directie deplasare
inapoi= 0; // variabila stocare directie deplasare
dreapta=0; // variabila stocare directie deplasare
stanga= 1; // variabila stocare directie deplasare
} // end structura comanda stan ga
if(uart_rd=='6'){ // directie dreapta
inainte=0; // variabila stocare directie deplasare
inapoi= 0; // variabila stocare directie deplasare
dreapta=1; // variabila stocare directie deplasare
stanga= 0; // variabila stocare directie deplasare
} // end structura comanda dreapta
if(uart_rd=='4' && uart_rd !='3' && uart_rd !='5' && uart_rd !=' 7'&& uart_rd !='6'){
inainte=0; // oprire comanda motoare
inapoi= 0; // daca s -a detectat orice release de buton pe co menzile
dreapta=0; // de control al directiei
stanga= 0; // anulare comanda motoare
servo=0; // anulare comanda servomecanism
} // end structura anulare comenzi directivitate
if(uart_rd=='S'){ // daca s -a trimis caracterul 'S'
for(i=0;i<20;i++){ // transmisie 20 perioade semnal PWM
servo=1; // activare servo
Delay_us(1100); // duty cycle 1.1 secunde(coborare brat)
servo=0; // dezactivare servo
Delay_ms(50); // delay semiperioada 0L a semnalului PWM
} // end structura semi -coborare brat
Delay_ms (300); // perioada reapau stabilizare brat
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
78
for(i=0;i<20;i++){ // transmisie 20 perioade semnal PWM
servo=1; // activare servo
Delay_us(1370); // duty cycle semnal PWM
servo=0; // dezactivare servo
Delay_ms(40); // delay semiperioada 0L a semnalului PWM
} // end semi -structura final coborare brat
} // end structura coborare brat
if(uart_rd=='s'){ // daca s -a transmis caracterul 's'
for(i=0;i<20;i++){ // transmisie 20 perioada semnal PWM
servo=1; // activare servo
Delay_us(555); // duty cycle semnal PWM
servo=0; // dezactivare semnal servo
Delay_ms(19); // semiperioada 0L semnal PWM
} // end structura ridicare brat
} // end structura ridicare brat
} // end structura comanda manuala
one_time_voltage=0; // reset valoare afisare singulara mod maual
Lcd_Cmd(_LCD_CLEAR); // clearscreen
while(mode==1){ // mod de operare automat
if(UART1_Data_Ready()) // daca se receptioneaza date pe ua rt bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
iteratie_tensiune ++; // citire tensiune 1 data la 40 cicluri de while
if(one_time_voltage==0){ // variabila pentru executie singula a afisarii pe LCD
tensiune_bat=Adc_read(0)* 0.00383; // calcul tensiune acumulatori
FloatToStr(tensiune_bat, text); // conversie tensiune in string
text[4]=0; // eliminare zecimale
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
79
Lcd_Out(1,8,text); // afisare tensiune la pozitie specificata
Lcd_Out(1,1,"V_bat:"); // afisare mesaje pe display la pozitii specificate
Lcd_Chr(1,12,'V'); // afisare mesaje pe display la pozitii specificate
Lcd_Out(2,1,"Gear :"); // afisare mesaje pe display la pozitii specificate
Lcd_Out(2,15," level"); // afisare mesaje pe display la pozitii specificate
one_time_voltage=1; // conditie pentru executie singulara a afisarii pe L CD
Lcd_Out(3,1,"Speed:"); // afisare mesaje pe display la pozitii specificate
Lcd_Out(3,15,"cm/sec"); // afisare mesaje pe display la pozitii specificate
Lcd_Out(4,1," [AUTOMAT] "); // afisare mesaje pe display la pozitii specificate
one_time_voltage=1; // conditie pentru executie singulara a afisarii pe L CD
PWM_s peed=9; // viteza de deplasare prestabilita
} // end ciclu de afisare singular in mod automat
if(iteratie_tensiune ==5){ // citire tensiune alimentare o data la 5 cicluri de executie
tensiune_bat=Adc_read(0)* 0.00383; // achizitie tensiune de alimentare canalul AN0 al
converto rului
FloatToStr( tensiune_bat, text); // conversie tensiune de alimentare in format string
text[4]=0; // eliminare zecimale
Lcd_Out (1,8,text); // afisare pe LCD a valorii la pozitie specificata
} // end citire tensiune in conditie de iteratie
if(itera tie_tensiune>=5){ // daca numarul de iteratii >= 5
if(tensiune_bat>=14.8) // tensiunea citita >14.8V
Lcd_Out(1,13," [OK]"); // afisare mesaj pe LCD la pozitie specificata
if(tensiune_bat>=14 && tensiune_bat<14.8) // tensiunea citita este intre 14 si 14.8
Lcd_Out(1,13," [LOW]"); // afisare mesaj de tensiune scazuta
if(tensiune_bat<14) // daca tensiunea <14V
Lcd_Out(1,13," [ATT]"); // afisare m esaj de atentionare pentru incarcare
iteratie_tensiune=0; // reset contor iterativ gestiune cicluri
} // end afisare mesaje de gestiune a acumulatorului
if(pulses_per_sec==0) // nu se detecteaza pulsuri de la encoder
Lcd_Out(3,9,"0.00"); // afisare valoare 0.00
FloatToStr(pulses_per_sec/2. 1, text); // conversie pulsuri encoder in viteza(cm/sec)
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
80
text[4]=0; // eliminare zecimale
Lcd_out(3,9, text); // afisare la pozitie specifica
IntToStr(PWM_speed, text); // conversie treapta viteza in format string
Lcd_out(2,7, text); // afisare treapta viteza la pozitie specificata
inainte=1; // in modul automat robotul se deplaseaza inainte
inapoi=0; // in modul automat robotul se deplaseaza inainte
stanga=0; // in modul automat robotul se deplaseaza inainte
dreapta=0; // in modul automat robotul se deplaseaza inainte
while(puls_linie>=0 && puls_linie<=30 && mode==1){ // atat timp cat se numara 30 pulsuri de la
encooder
servo=1; // brat directionat in sus
Delay_us(1100); // duty cycle semnal PWM de comanda servo
servo=0; // dezactiv are servo
Delay_ms(50); // semi -perioada 0L a semnalului PWM
if(UART1_Data_Ready()) // daca s -a receptionat transmisie date pe serial bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de relare
} // end secventa ridicare brat in regimul automat
while(puls_linie>30 && puls_linie<=100 && mode==1){ // numarul de pulsuri de la encoder este
30-100
servo=1; // bratul este lasat in jos
Delay_us(1300); // duty cycle semnal de comanda PWM pentru servo
servo=0; // dezactivare servo
Delay_ms(40); // semi -perioada 0L a semnalului PWM
if(UART1_Data_Ready()) // daca s -a receptionat transmisie date pe serial bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
81
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
} // end secventa marcare(brat in pozitia de jos)
if(UART1_Data_Ready()) // daca s -a receptiona t transmisie date pe serial bluetooth
uart_rd = UART1_Read(); // update UART buffer
if(uart_rd == 'c') // selectie mod manual / automat
mode = 1; // mod automat de rulare
if(uart_rd == 'd') // selectie mod manual / automat
mode = 0; // mod manual de rulare
} // end secventa de selectie a modului de rula re
for(i=0;i<20;i++){ // SERVO TEST = OK
servo=1; // la comutarea modului de functionare bratul se ridica la pozitia
initiala
Delay_us(555); // duty cycle semnal PWM
servo=0; // dezactivare servo
Delay_ms(19); // semi -perioada 0L a semnalului PWM
} // end secventa ridicare brat
inainte=0; // reset directie de deplasare
inapoi=0; // reset directie de deplasare
stanga=0; // reset directie de deplasare
dreapta=0; // reset directie de deplasare
one_time_voltage=0; // reset variabila iterativa de control afisa re
Lcd_Cmd(_LCD_CLEAR); // cl earscreen
} // end main for
} // end main loop
//******************[intrerupere generata pe TIMER1]****************************//sectiune de intrerupere
void interrupt (){ // functia de intrerupere(salt automat la ove rflow)
contor_encoder++; // contor de iteratii pentru timing la calculul vitezei
contor_interrupt++; // contor intrerupere
contor_PWM++; // contor generare semnal PWM
if(encoder != encoder_prev){ // valoarea precedenta si actuala de la encod er
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
82
puls_linie++; // incrementare contor utilizat in controlul marcajului
pulses++; // numarul de pulsuri de la encodet
encoder_prev=encoder; // valoarea precedenta copie valoarea actuala pentru
validarea pulsului
} // end citire pulsuri encoder
if(puls_linie > 100) // controlul marcajului in modul automat de lucru
puls_linie=0; // reset valoare, limitare la 100 pulsuri pentru trasare linie
if(contor_encoder==13333){ // s-a numarat o secunda
pulses_per_sec= pulses; // asignare valoare pentru utilizare in programu l principal
pulses=0; // reset numar de pulsuri
contor_encoder=0; // reset contor gestionare timp
} // e nd numarare impulsuri in unitatea de timp
if(contor_interrupt <100) // setare perioaa duty cycle RGB
RGB_G=1; // aprindere RGB – verde
if(contor_interrupt >=100 && contor_interrupt<=9000) // setare perioada 0L semnal PWM
RGB_G=0; // dezactivare LED RGB -verde
if(contor_interrupt >9000){ // limitare valori
RGB_G=0; // dezactivare LED RGB
contor_interrupt =0; // r esetare counter RGB
} // end secventa gestionare LED RGB
if(contor_PWM <= PWM_speed && inainte==1){ // semnal PWM deplasare –> diferential
IN1=0; // se imprima directia inainte (pentru motorul simplu)
IN2=1; // in perioada se duty cycle PWM
} // end duty cycle motor simplu
if(contor_PWM <= PWM_speed+3 && inainte==1){ // semnal PWM deplasare pentru motorul
cu encoder –> constructie duty cycle
IN3=0; // atat timp cat contorul de intreruperi < PWM speed
IN4=1; // primit prin interfata de la utiliz ator
} // end duty cycle pentru motorul cu encoder
if(contor_PWM <= PWM_speed && inapoi==1){ // semnal PWM deplasare –> constructie
duty cyc le, directie inapoi
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
83
IN1=1; // se imprima directia inapoi pentru motorul si mplu
IN2=0; // in perioada se duty c ycle PWM
} // end duty cycle motor simplu si directie in apoi
if(contor_PWM <= PWM_speed+3 && inapoi==1){ // semnal PWM deplasare –> constructi e
duty cycle motor cu encoder
IN3=1; // atat timp cat contorul de intreruperi < PWM speed
IN4=0; // primit pri n interfata de la utilizator
} // end constructie duty cycle PWM pentru moto rul cu encoder
if(contor_PWM <= PWM_speed && mode==0 && stanga==1){ // semn al PWM deplasare –>
constructie duty cycle
IN1=0; // se imprima directia stanga
IN2=1; // in perioada se duty cycle PWM
IN3=1; // atat timp cat contorul de intreruperi < PWM speed
IN4=0; // primit prin interfata de la ut ilizator
} // end constructie duty cycle pentru directia stanga
if(contor_PWM <= PWM_speed && mode==0 && dreapta==1){ // semnal PWM deplasare –>
constru ctie duty cycle in modul manual si directie dreapta
IN1=1; // se imprima directia dreapta
IN2=0; // in perioad a se duty cycle PWM
IN3=0; // atat timp cat contorul de intreruperi < PWM speed
IN4=1; // primit prin interfat a de la utilizator
} // end constructie semnal PWM pentru directia dreapta
if(contor_PWM > PWM_speed && contor_PWM <= 30){ // perioada 0L din semn alul PWM
IN1=0; // semnal 0 catre motoare
IN2=0; // semnal 0 catre motoare
IN3=0; // semnal 0 catre motoare
IN4=0; // semnal 0 catre motoare
} // end semiperioada 0L a semnalului PWM
if(contor_PWM > 30){ // limitare valoare maxima counter
contor_PWM =0; // reset counter
} // end limitare counter constructie semnal PWM
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
84
if(uart_rd =='4'){ // daca s -a detectat release de buton la deplasare
IN1=0; // oprire deplasare
IN2=0; // oprire deplasare
IN3=0; // oprire deplasare
IN4=0; // oprire deplasare
servo=0; // dezactivare servomecanism RC
} // end interogare release buton de pe interfa ta
//*************************[setare perioada timer]******************************//
PIR1.TMR1IF = 0; // Clear TMR1IF -> interrupt flag
TMR1H = 0b11111011; // SET INITIAL START TIMER VALUE -High (step =
100us)
TMR1L = 0b10110011; // SET INITIAL START TIMER VALUE -Low
}
8. BIBLIOGRAFIE
[1] Ibrahim, Dogan , Advanced PIC microcontroller projects in C: from USB to RTOS with
the PIC18F series/Dogan Ibrahim , ISBN -13: 978 -0-7506 -8611 -2 (pbk. : alk. paper) 1.
Progra mmable controllers. 2. C (Computer program language) I. Title. TJ223.P76I268 2008 .
[2] Wilmshurst, Tim, Designing embedded systems with PIC microcontrollers:principles and
applications , ISBN -13: 978 -0-7506 -6755 -5, ISBN -10: 0 -7506 -6755 -9, First edition 2007 .
[3] D. W. Smith, PIC in PracticeA Project -Based Approach , ISBN 13: 978 -0 75-066826 -2,
First published 2002, Reprinted 2003 (twice), 2005, Second edition 2006 .
[4] Lucio Di Jasio, Tim Wilmshurst, Dogan Ibrahim, John Morton, Martin Bates, Jack Smith,
D.W. Smith, and Chuck Hellebuyck , PIC Microcontrollers: Know It All , ISBN: 978 -0-7506 –
8615 -0, Jun2012.
[5] Jean Labrosse, Jack Ganssle, Tammy Noergaard, Robert Oshana, Colin Walls, Keith Curtis,
Jason Andrews, David J. Katz, Rick Gentile, Kamal Hyder, and Bob Perrin, Embedded
Software: Know It All , ISBN: 978 -0-7506 -8583 -2, First edition 2012.
[6] Jack Ganssle, Tammy Noergaard, Fred Eady, Lewin A.R.W. Edwards, David J. Katz, Rick
Gentile, Ken Arno ld, Kamal Hyder, and Bob Perrin, Embedded Hardware: Know It All , ISBN:
978-0-7506 -8584 -9, April 2006.
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
85
[7] Praphul Chandra, Daniel M. Dobkin, Alan Bensky, Ron Olexa, David Lide, and Farid
Dowla, Wireless Networking: Know It All , ISBN: 978 -0-7506 -8582 -5.
[8] Microchip, Compiled Tips ‘N Tricks Guide , 2009 Microchip Technology Inc, DS01146B
[9] John Morton , The PIC Microcontroller:Your Personal Introductory Course
Third edition, ISBN 0 7506 66641 , First published 1998 ,Second edition 2001 ,Third edition
2005
[10] JOSÉ BRAZ , HELDER ARAÚJO , BRUNO ENCARNAÇÃO Informatics in Control,
Automation and Robotics I , ISBN -10 1-4020 -4136 -5 (HB), 2006
[11] Stroustrup, Bjarne , The C++ programming language / Bjarne Stroustrup. —Fourth
edition., ISBN 978 -0-321-56384 -2, QA76.73.C153 S77 2013
[12] Brown, Marty. Power supply cookbook / Marty Brown. —2nd ed. p. cm, ISBN 0 -7506 –
7329 -X, TK7868.P6 B76 2001
[13] Z. Yuanyuan, X. Kai, L. Deshi, Monitoring Technologies in Mission -Critical Environment
by Using Wireless Sensor Networks – cap 11 , Wireless Sensor Networks – technology and
applications, Edited by Mohammad A. Matin, ISBN 978 -953-51-0676 -0, 2012,
http://d x.doi.org/10.5772/1100
[14] Yi-Wei Ma, Jiann -Liang Chen, Yueh -Min Huang, Mei -Yu Lee, An Efficient Management
System for Wireless Sensor Networks , Sensors Journal, no 10, 11400 -11413;
doi:10.3390/s101211400, 2010
[15] O. Diallo, JJPC. Rodrigues, M. Sene, Real-time data management on wireless sensor
networks: A survey , Journal of Network and Computer Applications, May, 2012; 35; 3; p1013 –
p1021
[16] W. Znaidi, M. Minier, Key establishment and management for WSNs , Telecommunication
Systems. Jun2012, Vol. 50 Iss ue 2, p113 -125. 13p. DOI: 10.1007/s11235 -010-9391 -2.
[17] G. Fersi, W. Louati, M. Ben Jemaa, Distributed Hash table -based routing and data
management in wireless sensor networks: a survey , Wireless Networks (10220038). Feb2013,
Vol. 19 Issue 2, p219 -236. 18p. DOI: 10.1007/s11276 -012-0461 -0.
[18] I.F. Akyildiz, W. Su*, Y. Sankarasubramaniam, E. Cayirci, Wireless sensor networks: a
survey , Computer Networks 38 (2002) 393 –422
Universitatea Tehnică de Construcții București – Facultatea de Utilaj Tehnologic
PROIECT DE DIPLOMĂ
86
[19] Waspmote, http://www.libelium.com/products/waspmote/ , accesed in 15.03.2013
Online:
[20] online MikroC forum https://forum.mikroe.com/
[21] official MikroC website https://www.mik roe.com/ .
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: -Sistem robotic automatizat – [604049] (ID: 604049)
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.
