Capitolul 2. Sinteza bibliografica si studiul actual al tehnicilor de stingere a incendiilor 5 2.1. Sisteme robotice pentru stingerea incendiilor 5… [309245]
CURPINS
_Toc12096550
Capitolul 1. Introducere 3
Capitolul 2. Sinteza bibliografica si studiul actual al tehnicilor de stingere a incendiilor 5
2.1. Sisteme robotice pentru stingerea incendiilor 5
2.2. Senzori pentru detecția incendiilor 7
Capitolul 3. Platforma robotică pentru detecție și stingere incendiu FIRE-X-BOOT 9
3.1. Proiectarea schemei electronice a sistemului 9
3.1.1. Blocul de alimentare 10
3.1.2. Pinul MCLR 12
3.1.3. Conexiunea de programare ICSP 13
3.1.4. Modulul de comunicație bluetooth 13
3.1.5. LCD-ul alfanumeric 15
3.1.6. Driver-ul L298 16
3.1.7. Dispozitive de acționare 18
3.1.8. Senzorii sistemului robotic 19
3.2. Fabricarea cablajelor imprimate 21
3.3. Asamblarea părții hardware a sistemului 26
3.3.1. Montarea motoarelor de tracțiune și directivitate 27
3.3.2. Pompa de apă pentru stingerea incendiului 28
3.3.3. Placa de bază și unitatea centrală de procesare 29
3.3.4. Asamblarea finală a sistemului 29
3.4. Descrierea software a sistemului 30
3.4. Testarea sistemului robotic 36
Capitolul 4. Concluzii și rezultate 42
Bibliografie 44
Anexa 1. Codul sursa MIKROC 45
Capitolul 1.
Introducere
Obiectivul proiectului consta în implementarea practica a unui sistem robotizat inteligent ce are la baza microcontrolerul din familia Microchip PIC18F46K80 (8 bit, 64Mhz) [1] ce este capabil să comunice cu utilizatorul prin intermediul comunicației seriale wireless de tip bluetooth. S-a [anonimizat] o scară mult mai mare. Adițional se pot adaugă sisteme precum camere/camere în infraroșu (cu vedere pe timp de noapte) pentru a eficientiza controlul și detecția în cazuri extreme ( ex. persoane aflate într-o încăpere în flăcări). Utilitatea poate fi extinsa și mai mult putând fi adăugați și alți senzori precum senzori de fum/monoxid de carbon/gaz, [anonimizat]) [anonimizat]/deflagrații ce urmează a se întâmpla.
[anonimizat], permițând acestuia să trimită comenzi de directivitate și acționare dispozitive (ex. pompă de apă) către platforma robotică în timp real. Totodată trebuie amintit faptul că sistemul robotic dispune de două modalități de funcționare și anume modul manual și modul automat. În modul manual robotul este controlat direct de către utilizator iar în modul automat robotul face uz de semnalele provenite de la cei 3 senzori de proximitate și cei 3 senzori pentru detecția flăcării/incendiului. [anonimizat] (valabil pentru senzorii de proximitate). În ceea ce privește senzorii utilizați în detecția flăcării/incendiului, aceștia lucrează pe baza detecției undei în infraroșu emisă de o flacăra ( lungimea de undă de 600-700nm), ceea ce înseamnă că elementul fotosensibil se va activa doar în momentul în care se realizează o detecție pe această lungime de unda și va fi inactivă în rest. Semnalele provenite de la acești senzori sunt semnale de tip digital (0,5V), iar achiziția acestora se realizează prin intermediul convertorului ADC al microcontrolerului pentru un control cât mai precis. Senzorii utilizați în acest sistem robotic sunt dispuși frontal și lateral pentru o detecție cât mai bună a obstacolelor și a unei eventuale flăcării/incendiului.
Modul în care este realizată stingerea unui eventual incendiu detectat de către sistem se realizează foarte simplu și anume prin intermediul a doua electroventilatoare și a unei pompe de apă. Ca și mod decizional în cazul detecției unui obstacol lateral, robotul se va opri și își va schimba direcția în partea opusă obstacolului, rotindu-se pe loc. Dacă detecția unui obstacol s-a realizat frontal, robotul se va opri, va rula cu spatele pentru 200ms și la final își va schimba poziția rotindu-se pe loc aproximativ 60 grade. În cazul în care platforma robotică va detecta o flacăra laterală, acesta se va opri, și își va alinia poziția pe direcția flăcării și în final va acționa cele doua electroventilatoare împreuna cu pompa de apă. Dacă detecția se realizează frontal, robotul se va opri pur și simplu și va acționa elementele de stingere a incendiului.
Afișarea mesajelor și datelor de interes provenite de la sistem se realizează prin intermediul unui LCD alfanumeric de tip 2004 ( 4 linii si 20 coloane), LCD pe care sunt afișate valori ale tensiunii acumulatorilor, viteza de deplasare exprimată în unități, etc.
Pachetul de acumulatori constă în 8 elemenți de tipul Li-Ion ce au (individual) o tensiune de 3.7V si 2000mA și sunt grupați în sistem serie-paralel pentru a spori capacitatea de livrare a curentului nominal către sistemul robotic. Cu acest pachet de acumulatori, platforma robotica este capabilă să ruleze fără procedură de încărcare aproximativ o oră. Vârful de curent consumat de către sistem este în momentul în care se acționează electropompa de apă și cele două electroventilatoare.
În ceea ce privește locomoția, platforma robotică se deplasează cu ajutorul a două motoare de curent cotinuu (cu reductor) ce au rol de tracțiune dar și de directivitate, platforma fiind construită în configurație de 3 ( 2 roți în față, 1 roată mobilă în spate). Motoarele sunt comandate de către microcontroler prin intermediul unui driver de putere (dublă punte H) ce are la bază circuitul specializat L298 [2] și comunică cu microcontrolerul prin intermediul a 6 biți de date.
În urma rezultatelor practice robotic s-a ajuns la concluzia că un singur element stabilizator de tensiune de 5V nu este îndeajuns pentru alimentarea tuturor senzorilor ( din cauza numărului ridicat de LED-uri, LED-uri IR) și sub acest aspect s-a înlocuit elementul stabilizator pozitiv de tensiune cu un modul convertor de tip DC-DC buck (randament 95%), problema fiind rezolvată în acest fel.
În ceea ce privește structurarea lucrării, în capitolul numărul doi s-a realizat un studiu al sistemelor curente robotice utilizate în detecția și stingerea incendiilor. În capitolul numărul 3 este descrisă platforma robotică pe module dar și ce materiale au fost utilizate în construcția sa. Capitolul 4 tratează partea HW de electronica din cadrul proiectului, explicând în detaliu modul de funcționare al acesteia, având la bază schema electronică generală pentru analiză. Următorul capitol nr.5 face referire la partea software a sistemului, unde se explică în detaliu pe baza diagramelor de proces modul în care platforma robotică a fost gândita și programată.
Capitolul 2.
Sinteza bibliografica si studiul actual al tehnicilor de stingere a incendiilor
Lupta împotriva incendiilor în ultima perioadă a devenit din ce în ce mai dificilă și periculoasă fie că este vorba de un incendiu apărut la o casa veche, bloc sau chiar incendiu de pădure, factorul definitoriu în aceste cazuri fiind cel de salvare de vieți. Pe de altă parte o mare problema în acest caz o reprezintă pierderea de vieți omenești din cadrul echipelor de salvare și stingere a incendiilor (pompierilor) care inevitabil își pun viață în pericol. Considerând acest aspect, ideal ar fi ca operațiunile de salvare și stingere incendii să fie realizate de către roboti specializați autonomi sau controlați remote de operatori, reducând la minim sau chiar la zero pierderile omenești din rândul salvatorilor [3].
Un aspect pozitiv în privința utilizării platformelor robotice pentru stingerea incendiilor este acela că aceste sisteme mobile pot fi folosite cu succes în medii cu grad mare de hazard precum în centralele nucleare, rafinăriile de petrol sau tanc-uri de gaz, unde riscul de pierderi omenești din rândul salvatorilor ar fi foarte mare. Pe lângă detecția incendiilor, aceste sisteme robotice specializate trebuie să îndeplinească și o serie de alte sarcini importante precum exploatarea ruinelor și obstacolelor în scopul salvării de vieți omenești [3].
Există o diversitate ridicată a roboților de tip firefighter datorată multiplelor oportunități/scenarii de apariție a incendiilor ( ex. incendii ce pot să apară la autovehicule, diferite structuri, avioane, vapoare, etc). În ciuda diferitelor scenarii in care un incendiu poate apare, la baza acestor sisteme robotice se afla un set de task-uri de baza definit prin abilitatea de a repera incendiu, de a identifica victimele incendiului și cele blocate/prinse /imobilizate, de a controla extinderea incendiului și nu în ultimul rând de a monitoriza condițiile din mediu în timp real.
În principiu există două tipuri de sisteme inteligente capabile să detecteze și să stingă un incendiu și anume sistemul fix și sistemul mobil. Sistemele fixe de stingere a incendiilor sunt montate în zonele în care riscul de hazard este foarte ridicat, acestea fiind capabile să detecteze un eventual incendiu și în final să îl suprime. Ca și exemplu, aceste sisteme de combatere a incendiilor sunt montate în zone precum locații de stocare, tunele sau zone de aterizare.
2.1. Sisteme robotice pentru stingerea incendiilor
În privința sistemelor robotice mobile capabile să detecteze și să stingă o flacăra, datorită tehnologiei din ce în ce mai evoluate și a puterii de procesare foarte mari, acestea pot înlocui cu succes intervenția umană. Aceste sisteme robotice pot fi de mai multe tipuri și diferite modele, după cum urmează a fi prezentate în continuare.
1. THERMITE RS1-T3
Sistemul robotic de stingere a incendiiilor THERMITE RS1-T3 (Fig.2.1) se găsește pe piața și este des utilizat în operațiunile dificile de stingere a incendiilor. Acest sistem este echipat cu un motor diesel cu răcire pe aer și 25 cai putere, având în componența sa materiale și componente industriale de mare fiabilitate. Controlul acestuia se realizează wireless (distanță maximă de acționare de 1000m) de către un utilizator specializat și are în dotare și un sistem puternic de iluminare pentru operațiunile ce se desfășoară pe timp de noapte [4].
Fig.2.1. Robot stingere incendii – THERMITE
2. SAFFiR
Acest tip de robot este de tip umanoid si special conceput pentru manipularea elementelor de stingere (precum stingătoarele de incendiu) cu ajutorul mâinilor (Fig.2.2). Deși se afla în stadiul de prototip și faza de testare, un sistem robotic de acest tip ar fi în viitor foarte util în orice casă, deoarece poate salva vieți omenești. Pe lângă sarcina de manipulare și stingere incendiu acest sistem robotic poate fi utilizat și în alte sarcini precum manipularea obiectelor [5].
Fig.2.2. Robot de tip umanoid firefighter
3. TAF20
Sistemul robotic din Fig.2.3 are la baza o locomoție pe șenile și spre deosebire de restul roboților prezentați, acesta utilizează o turbină puternică pentru a dispersa jetul de apă către sursa de foc/incendiu. Acest robot nu este de tip autonom, ci este controlat direct de către un operator specializat în incendii. Avantajul în acest caz este acela că turbina robotului poate dispersa nu numai apa ci și material special (spumă) pentru stingerea incendiului, având capabilitatea de a sufla jetul de soluție pe o distanta de 60-90m [6].
Fig.2.3. Robot incendiu turbionar
4. Drone pentru stingere incendiu
În ultimul timp dronele autonome (Fig.2.4) dar și cele controlate au o utilitate din ce în ce mai mare. Un bun exemplu în acest sens îl reprezintă capabilitatea acestora de a fi utilizate în cazul unui incendiu, acolo unde accesul uman sau al altui tip de sistem robotic nu se poate face ( ex. incendiul apărut la o centrală eoliană). Avantajul acestor roboți de stingere a incendiului este acela că nu intră în contact direct cu sursa de foc, iar stingerea se realizează pe partea superioară a incendiului, aria de acoperire cu apă/spumă fiind foarte mare. În acest caz nu se poate vorbi de o autonomie a aparatului de zbor deoarece alimentarea sistemului se realizează de la sol prin intermediul cablurilor de alimentare [7].
Fig.2.4. Dronă stingere incendii
2.2. Senzori pentru detecția incendiilor
Senzorii integrați în sistemele de stingere a incendiilor sunt senzori ce lucrează în infraroșu, UV, senzori de „miros” sau senzori termici. Câteva exemple din aceste tipuri de senzori sunt prezentate în cele ce urmează.
1. Senzor UV detectie flacara
Acest tip de senzor [8] este capabil sa detecteze radiația ultravioleta emisa de o flamă de combustie și este prezentat Fig.2.5.
Fig.2.5. Senzor UV detecție flacără.
2 Senzor IR pentru detecție flacăra
Acest tip de senzor (Fig.2.6) este utilizat pe scara larga pentru a detecta radiația luminoasă emisă de o flacăra, radiație a cărei lungime de undă are o valoare de 600-700nm și nu se încadrează în spectrul luminos vizibil. Senzorul are o sensibilitate ridicată la detecție dar dezavantajul este acela că poate fi perturbat și de lumina naturală care conține în spectrul său și radiație IR.
Fig.2.6. Senzor IR pentru detecție flacăra
3. Senzor IR/UV detecție flacără
Acest tip de senzor (Fig.2.7) are capabilitatea de a detecta energia radiantă din cadrul ambelor spectre electromagnetice corespunzătoare radiațiilor IR și UV. Semnalele provenite de la ambii senzori sunt analizate în funcție de frecvență, amplitudine și durată. O detecție simultană în cazul ambilor senzori IR și UV va conduce la acționarea unei alarme corespunzătoare [8].
Fig.2.7. Senzor IR/UV detecție flacără
4. Senzor detecție fum
Acest tip de senzor (Fig.2.8) se utilizează preponderent în combinație cu un senzor pentru detecția flăcării și pe lângă faptul că poate detecta fum, acest tip de senzor mai poate detecta gaz (Metan, Butan și LPG).
Fig.2.8. Senzor fum/gaz
Capitolul 3.
Platforma robotică pentru detecție și stingere incendiu
FIRE-X-BOOT
Realizarea platformei robotice pentru detecția și stingerea incendiului pornește de la stabilirea structurii sistemului. Așa cu se poate observa în Fig.3.1, aceasta conține un sistem cu microcontroler de tip PIC18F46K80 [1] la care se conectează partea activă formată din senzorii de evitare a obstacolelor, senzorii de detecție foc și motoarele electrice necesare pentru deplasarea platformei și acționarea elementelor de stingere a incendiului. Tot la microcontroler se conectează o structura HMI formată din modul Bluethoot și afișaj LCD.
Fig.3.1. Structura părții hardware a platformei.
3.1. Proiectarea schemei electronice a sistemului
Proiectarea schemei electronice a sistemului pornește de la microcontrolerul PIC18F46K80. În practică există două soluții posibile pentru realizarea unui astfel de sistem, și anume: utilizarea unui sistem de dezvoltare care conține microcontrolerul, respectiv proiectarea unui sistem cu microcontroler dedicat pentru aplicația dorită. Prima soluție este una practică, pentru că are avantajul că elementele de interfațare respectiv de alimentare a sistemului sunt gata dimensionate și implementate. Utilizatorul trebuie doar să conecteze structurile electronice dorite la mufele aflate pe placa de dezvoltare și să dezvolte aplicația conform specificațiilor. Dezavantajul major al unei astfel de soluții este acela că unele echipamente electronice nu pot fi conectate în mod direct la sistem ceea ce conduce la proiectarea individuală a sistemului de conectare dintre componenta electronică și placa de dezvoltare.
A doua variantă este mai complexă pentru că necesită realizarea unui cablaj imprimat dezvoltat într-un mediu de dezvoltare specializat. Avantajul major al acestei soluții este faptul că dezvoltatorul poate să aloce orice facilități dorește sistemului proiectat. De cele mai multe ori, alimentarea cu energie electrică a sistemului este o problemă, pentru că sursele stabilizate de pe plăcile de dezvoltare nu suportă alimentarea unor consumatori mari de energie. Acest lucru conduce la utilizarea mai multor surse de alimentare, crescând costul proiectului.
Așa cum se poate vedea din Fig.3.2, în cadrul prezentului proiect s-a ales a doua soluție, și anume, proiectarea unui cablaj imprimat special pentru proiectul executat. Schema electrică a fost realizată în mediul de dezvoltare Easy EDA, ținându-se cont de cele prezentate în [9], [10], [11], [12], [13].
Fig.3.2. Schema electronica generala (EASY EDA).
În cele ce urmează se va detalia modul de funcționare a subansamblelor electronice componente ale platformei.
3.1.1. Blocul de alimentare
În ceea ce privește partea de alimentare a sistemului electronic s-a utilizat un circuit de stabilizare pe ramura pozitivă de tensiune, acest lucru însemnând că indiferent de tensiunea de alimentare aplicată la intrarea acestuia, tensiunea din ieșire va fi tot timpul constantă și de valoare 5V (Fig.3.3). În scopul filtrării tensiunii de alimentare s-au utilizat condensatori de 100 de nF pentru ambele elemente stabilizatoare, atât pe partea de intrare în modulul stabilizator, cât și în partea de ieșire (5V). Condensatoarele de 100uF vor filtra fluctuațiile tensiunii de alimentare la frecvență joasă, iar condensatorii de valoare mai mică (100nF) vor filtra variațiile de frecvență mai mare ale tensiunii de alimentare. Un alt aspect ce trebuie menționat este acela că variațiile în frecvență sunt introduse în mare parte de către microcontroler la executarea instrucțiunilor de lucru.
Fig.3.3. Blocul de alimentare al sistemului electronic.
În scopul protecției întregului modul electronic la o eventuală alimentare cu tensiune inversă, s-a utilizat o metodă simplă de protecție, și anume, introducerea în paralel cu tensiunea de alimentare a unei diode schottky în configurație inversa (anodul conectat la GND). Astfel, când polaritatea tensiunii de alimentare este respectată, dioda se va comporta ca un contact deschis cu o rezistență ohmica foarte mare. În momentul în care sistemul electronic s-a alimentat invers, dioda va intra în conducție și va închide circuitul prin ea, nelăsând ca tensiunea inversă să ajungă pe circuitul principal de procesare cu microcontroler. S-a ales diodă schottky deoarece este mai rapidă ca o diode normala redresoare și începe să intre în conducție de la tensiunea de aproximativ 0.3V.
De asemenea pentru a se indica faptul că sistemul electronic este sub tensiune, s-a integrat în sistemul de alimentare la ieșirea stabilizatorului, două LED-uri de culoare verde pentru ambele stabilizatoare, alimentate prin intermediul a doua rezistoare de 100 de ohm cu scop de limitare a curentului de polarizare. S-au utilizat două elemente stabilizatoare de acest gen pentru a se evita resetarea microcontrolerului în momentul creșterii consumului de curent la activarea motoarelor DC sau servomecanismelor. Acest lucru s-a determinat în mod empiric, atunci când microcontrolerul se reseta în momentul în care utilizatorul trimitea comenzi de directivitate către platforma robotică. În momentul În care consumul de curent crește la acționarea motoarelor de curent continuu/ acționarea electroventilatoarelor sau mai ales la acționarea pompei de apă, tensiunea de alimentare de pe microcontroler scade proporțional, iar această variație este sesizată de microcontroler care răspunde cu un impuls de reset. În scopul evitării acestei probleme s-a implementat în circuitul de alimentare un alt stabilizator pozitiv de tensiune care alimentează separat partea de acționare (motoare DC, servomecanisme). Pe parcursul dezvoltării sistemului electronic automatizat, s-a realizat o serie de teste legate de consumul maxim de curent și a reieșit faptul că stabilizatorul pozitiv de tensiune ce alimentează în mod continuu sistemul cu microcontroler se încălzește foarte tare din cauza consumului constat de curent provenit de la cele 6 LED-uri în infraroșu (IR-TX), aceasta pe lângă restul de consum de putere generat de celelalte elemente/module electronice.
Circuitul stabilizator este de tip Stabilizator 7805 (Fig.3.4). Acest circuit electronic stabilizator de tensiune este capabil să genereze la ieșire un curent de vârf de maximum 2A, iar în mod continuu de funcționare un curent de 1A. Având în vedere că valorile puterilor însumate ale elementelor de circuit consumatoare se apropie de valoarea de 1A/h, reiese faptul că acest circuit va merge în continuu aproape de ratingul maxim de curent de ieșire și implicit la puterea maxima la ieșire.
Fig.3.4. Circuitul stabilizator 7805.
Sub acest considerent și în urma testelor realizate prin experimente și testare, s-a decis înlocuirea acestui element stabilizator liniar cu un modul step down DC-DC (modul convertor coborator de tensiune) care sa genereze la ieșire o tensiune constanta de 5V, necesară alimentării parții electronice de procesare. Modulul de tip step down DC-DC este prezentat în Fig.3.5.
Fig.3.5. Modul convertor DC-DC.
Performantele electrice ale acestui modul sunt net superioare stabilizatorului pozitiv de tensiune, inclusiv randamentul (96%) și pierderile.
În urma utilizării acestui modul DC-DC în locul stabilizatorului pozitiv de tensiune 7805, s-a observat o scădere a temperaturii pe modulul de conversie (temperatură aproape insesizabilă), iar curentul de ieșire de 3A este suficient pentru alimentarea constantă a întregului modul de procesare, fără pierderi de putere, temperatură, etc. Acest modul convertor a fost adaptat și montat exact în locul elementului stabilizator, nefiind necesare alte operațiuni suplimentare.
3.1.2. Pinul MCLR
Rezistorul ce se regăsește la pinul numărul 1 (MCLR) al microcontrolerului este utilizat ca rezistor de pull-up în scopul evitării unei posibile resetări. Atunci când pinul de MCLR este conectat la masă sau tensiunea de pe acesta scade sub o anumită valoare minimă, se declanșează mecanismul de resetare a sistemului, proces în care registri interni vor fi setați la valori inițiale de startare. Pinul MCLR, pe lângă funcția de I/O și de Reset, mai are și funcția de pin de programare (VPP) și este utilizat în funcția de încărcare a codului software în microcontroler. Funcția de programare propriu zisă a microcontrolerului se realizează tot prin intermediul acestui pin cu funcții speciale și anume la o tensiune de aproximativ 13V, tensiune ce este generată de către programatorul PICKIT3 prin intermediul unui modul de conversie DC-DC de la 5V la 13V. Modul de conectare a acestuia în schema electronică realizată se poate observa în Fig.3.6.
Fig.3.6. Pinul de reset si programare MCLR.
3.1.3. Conexiunea de programare ICSP
Așa cum a fost amintit și anterior în cadrul acestui proiect, programarea propriu zisă a microcontrolerului se realizează prin intermediul conexiunii de date ICSP și a programatorului PICKIT2, în acest tip de comunicație pinul mai sus menționat (MCLR) fiind utilizat în această funcție de programare. Astfel mufa de programare de tip ICSP implementată în schema electronică poate fi observată în Fig.3.7.
Fig.3.7. Conexiunea ICSP de programare.
3.1.4. Modulul de comunicație bluetooth
Modulul bluetooth (Fig.3.8) utilizat este de tipul HC-05 [14] și este setat la o viteza de transmisie a datelor de 9600 baud(biti/secunda) și este alimentat la tensiunea stabilizata de 5V.
Fig.3.8. Modulul bluetooth HC-05.
În ceea ce privește aria de acoperire, utilizatorul se poate conecta la acest modul prin intermediul smartphone-ului de la o distanță de maxim 20m. În cazul în care modulul wireless bluetooth i se atașează și o antenă suplimentară (Fig.3.8), atunci aria de acoperire se va mări. În următoarea etapă se va analiza funcționalitatea din punct de vedere electronic și în acest sens, modulul bluetooth este conectat la microcontroler așa cum este descris în Fig.3.9.
Fig.3.9. Conexiunea modulului Bluetooth.
După cum se poate observa din Fig.3.9, modulul bluetooth HC-05 ce comunică prin protocol UART asincron conține doi pini de alimentare Vcc și GND, tensiune ce provine de la elementul de conversie DC-DC de 5V. Pe lângă acești doi pini de alimentare se mai observă doi pini utilizați în transmisia de date și anume Tx și Rx ce vin conectați la pinii microcontrolerului Rx și respectiv Tx (se poate observa faptul ca Tx Rx și RxTx). Acest tip de comunicație se spune că este de tip asincron deoarece în procesul de comunicație cu microcontrolerul nu există implicat nici un semnal de clock CLK ci doar cei doi pini Rx și TX, viteza comunicației wireless prin bluetooth fiind de 9600 baud. În cazul de față, pentru amplificarea semnalului de transmisie/recepție, s-a implementat o antena de aproximativ 5 cm. Totodată dispunerea acestui modul de comunicație s-a efectuat ținând cont de influențele și perturbațiile electromagnetice generate de motoare și drivere, deoarece orice variație a tensiunii poate reseta (în cel mai bun caz) sau distruge modulul electronic. În cazul proiectului de față, pentru setup-ul modulului Bluetooth mai sus descris, s-a utilizat un modul special de tip PL2303 (Fig.3.10) care face posibilă transmisia datelor sub protocol serial UART prin intermediul conexiunii de date USB.
Fig.3.10. Modulul PL2303.
Interconexiunea de fază de setup a modulului HC-05 și PL2303 s-a realizat conform schemei din Fig.3.11.
Fig.3.11. Conectivitate bluetooth-PL2303.
Totodată, pentru a putea intra în meniul modulului de comunicații Bluetooth, pe lângă acest modul PL2303 s-a utilizat și un terminal special care permite operațiunea de scriere-setare a modulului Bluetooth, și anume TERATERM (Fig.3.12).
Fig.3.12. GUI terminal programare comenzi AT.
În linii mari, modulul bluetoooth se comporta ca o transmise normală de date pe protocol serial UART dar cu avantajul ca datele pot fi transmise / recepționate wireless prin radiofrecvență. În cazul de față datele sunt trimise către un terminal instalat pe un Smartphone și oferă avantajul unei comunicații mobile la o distanță de peste 10 m. Frecvență de lucru a modulului Bluetooth este standard de 2.4 Ghz, iar ca sensibilitate ajunge la -80dBm. Antena utilizată de acest modul este deja integrată de cablaj, iar tensiunea de alimentare este cuprinsă între 3.3V-5V. În cazul de față, în faza de testare și mai apoi în faza de implementare, s-a utilizat tensiunea de alimentare de 5V deoarece se elimină astfel posibilele erori de nivele logice care pot devia de la diferența de 5V la 3.3V. În ceea ce privește vitezele de baud acceptate de modul, acestea sunt de 9600, 19200, 38400, 57600,115200,230400, 460800 bps.
În ceea ce privește modul în care s-a realizat SETUP-ul modulului bluetooth prin interfațarea cu modulul PL2303 și trimiterea comenzilor de tip AT, aceasta s-a realizat utilizând câteva din comenzi identificate în [14].
În ceea ce privește modul de funcționare, imediat ce sistemul robotic este alimentat, modulul bluetooth va fi văzut pe smartphone de către utilizator și va trebui să se conecteze la sistem introducând parola din 4 cifre. După ce s-a realizat paringul și conectarea utilizatorului la sistemul robotic, acesta va trebui să intre în aplicația de pe smartphone și să trimită comenzi către sistemul robotic prin intermediul interfeței grafice. Modulul bluetooth va funcționa în continuu, așteptând comenzi de la utilizator, comenzi în funcție de care platforma robotică va executa mișcări, stinge incendiu, acționa electroventilatoare/ electropompa, etc.
3.1.5. LCD-ul alfanumeric
LCD-ul utilizat în acest proiect este unul de tip alfanumeric cu 4 linii si 20 coloane (Fig.3.13), iar comunicarea cu microcontrolerul se realizează printr-o interfața de 6 biți. Alimentarea modulului LCD se face cu 5V, iar intensitatea luminoasa a pixelilor poate fi ajustata prin intermediul unei intrări de control. Această intrare de control accepta o tensiune variabilă, tensiune obținuta prin intermediul unui divizor rezistiv ce are la bază un semireglabil de 10 kΩ.
Fig.3.13. LCD cu 4 rânduri și 20 coloane.
Pentru comunicarea microcontrolerului cu afișajul alfanumeric se utilizează 4 biți de date și 3 biți de control. Astfel pinul de RS este utilizat pentru ca afișajul să recunoască dacă i s-a trimis o “comandă instrucțiune” sau o “dată” de afișat. Pinul R/W este utilizat pentru a selecta dacă urmează să se afișeze sau să se citească de pe display-ul alfanumeric. Pinul E reprezintă pinul de activare care permite execuția tuturor acestor operațiuni, ceea ce înseamnă că doar atunci când valoarea e 1L (5V) se permite citirea și interpretarea cuvântului de date (4 biți) primit în configurație de tip paralel.
Afișajul funcționează la tensiunea maxima de 5V și este astfel complet compatibil pe nivele logice cu microcontrolerul utilizat – PIC18F46K80. Schema electronică ce descrie conexiunea microcontroler-LCD este prezentată în Fig.3.14.
Fig.3.14. Conexiune LCD-microcontroler.
După cum se poate observa din schema electronică din Fig.3.14, pinul de RW este conectat în permanență la masa circuitului, în acest mod LCD-ul fiind setat în permanență pe funcția de W(write). Prin variația tensiunii la pinul V0 al LCD-ului se va modifica proporțional cu rotația semireglabilului, contrastul pe display. Acest semireglabil se comportă în prealabil ca un divizor rezistiv de tensiune controlat de către utilizator și prin care se poate regla intensitatea luminoasa a caracterelor de afișat pe LCD. Transmisia propriu zisă a tipului de dată/comandă este realizată prin intermediul a 4 biți DB4-DB7, primii patru biți DB0-DB3 fiind conectați împreuna cu pinul de R/W la GND-ul sistemului electronic.
3.1.6. Driver-ul L298
Așa cum a fost menționat și anterior în proiect, sistemul utilizează configurația de “differential drive”, ce înseamnă că motoarele sunt comandate independent unul față de celălalt, permițând astfel rotirea pe loc. În acest caz, rotirea pe loc, un motor se va învârti într-o direcție, iar celălalt motor se va învârti în cealaltă direcție, platforma fiind ajutată în mare măsura și de roata mobilă multidirecționala dispusă în spate, pe centru. Comanda motoarelor de curent continuu se realizează prin intermediul unui driver specializat ce are în structura sa internă 2 punți de tip H ce permit alimentarea independentă a două motoare cu posibilitate de comandă în regim PWM. Comanda în impuls PWM este de o importanță majoră în cadrul acestui proiect deoarece permite, pe lângă rotirea în ambele sensuri, și modularea vitezei de rotație.
La baza circuitului driver pentru motoarele DC stă circuitul integrat L298 ce are configurația internă prezentată în Fig.3.15.
Fig.3.15. Configurație internă circuit L298.
Deoarece motoarele de curent continuu funcționează la o tensiune de alimentare de maxim 6 V, circuitul L298 este alimentat la tensiunea de 5V prin intermediul unui stabilizator pozitiv de tensiune. Din punctul de vedere al conectării modulului L298 la microcontroler, aceasta se realizează așa cum reiese din Fig.3.16.
Fig.3.16. Configurație internă circuit L298.
Dupa cum se poate observa din Fig.3.16, comunicația cu driver-ul L298 utilizat în comanda celor două motoare de curent continuu DC este realizată prin intermediul a 6 biți de date dintre care 2 sunt pinii de enable ENA și ENB pentru activarea independenta a celor doua punți H bridge, iar 4 sunt biții de comanda (2 pentru prima punte și 2 pentru a doua punte). Acești biți de comandă sunt utilizați pentru controlul direcție de învârtire a motoarelor DC, comanda în regim de semnal PWM realizând-se pe pinii de enable ENA și ENB. În ceea ce privește modul de alimentare al modulului driver L298, aceasta se realizează direct din partea de alimentare a platformei robotice, direct de la elementul stabilizator de tensiune ce alimentează întreaga parte de putere (LM7805), ieșirea acestui element stabilizator fiind notată sugestiv cu „V_cons” ce provine de la denumirea de V consumatori. Controlul în semnal al modulului L298 este realizat prin intermediul microcontrolerului care generează prin intermediul întreruperilor și a timer-elor un semnal modulat în lățime de tip PWM. Acest semnal compus din perioada de OFF și perioada de duty cycle este modificabil de către utilizator prin intermediul interfeței grafice de pe smartphone sau în altă ordine de idei, utilizatorul poate controla viteza de deplasare a celor două motoare de curent continuu DC.
Dispunerea fizica a modulului L298 pe platforma robotica mobilă a fost realizată sub considerentul de a fi cât mai departe de circuitul central al sistemului cu scopul de a se evita transmisia de perturbații către sistemul de procesare și control. Astfel, după cum a fost menționat anterior în cadrul proiectului, pe lângă poziționarea fizică la distanță față de mainboard, s-a mai montat și un element din tablă de Aluminiu ce ajută la protecția împotriva perturbațiilor și descărcărilor electrostatice ESD. În Fig.3.17 se poate observa modul în care modulul L298 a fost integrat și dispus fizic pe platforma robotică mobilă.
Fig.3.17. Dispunere modul L298 în sistem.
Curentul maxim consumat de cele două motoare DC împreuna cu driver-ul L298 și pierderile pe elementele de putere nu depășește valoarea de 200mA în regimul normal de funcționare.
3.1.7. Dispozitive de acționare
În cadrul acestui proiect s-au utilizat diferite metode de stingere a unei flăcări/incendiu atunci când se realizează o detecție în acest sens. Astfel în prima fază se vor utiliza electroventilatoarele în scopul stingerii incendiului și mai apoi pompa de apă. Am numit aceste dispozitive ca fiind dispozitive de putere deoarece în momentul în care sunt acționate prin intermediul tranzistorilor de medie putere, aceste consumă un curent semnificativ de la sursa de alimentare. Așa cum am amintit, cele doua electroventilatoare împreuna cu pompa de apă sunt comandate independent prin intermediul a trei tranzistori de medie putere de tip BD139, conectați conform celor din Fig.3.18.
Tranzistorii de medie putere sunt utilizați în cadrul acestui sistem în configurație de amplificator de tensiune și de curent. Configurația de amplificator de tensiune și curent este utilizată în comanda pompei de apă deoarece aceasta se alimentează cu polul pozitiv direct de la tensiunea generată de pachetul de acumulatori, iar cu polul negativ în colectorul tranzistorului, tranzistor ce joacă rol de amplificator de tensiune și switch ON/OFF.
Fig.3.18. Tranzistorii de comanda de medie putere.
In linii mari, rolul tranzistorului este de a amplifica semnalul de 5V și 20mA din baza acestuia, semnal ce provine de la ieșirea de comandă a microcontrolerului. Rezistorul din baza tranzistorului are rol de limitare de curent și protecție a tranzistorului. În anti-paralel cu pompa de apă, așa cum a fost amintit anterior în cadrul acestui proiect, este conectată o diodă de tip schottky ce are rol de a proteja tranzistorul in momentul în care este setat pe OFF. Protecția constă în faptul că prin intermediul acestei diode, energia electromagnetică înmagazinata în bobinele rotorului, care tinde să colapseze în momentul în care tranzistorul întrerupe circuitul, nu va mai trece prin colectorul tranzistorului ci se va închide direct prin dioda schottky. De asemenea firele de alimentare au un diametru sporit pentru a suplini corect consumul de curent și pentru a se evita pierderile prin căldură. Dispunerea acestor tranzistori pe cablajul sistemului este realizata conform Fig.3.19.
Fig.3.19. Dispunerea tranzistorilor pe PCB.
3.1.8. Senzorii sistemului robotic
Senzorii cu care este echipat sistemul robotic sunt de tipul analogic și sunt alimentați la tensiunea nominal pozitiv stabilizată de 5V. Acest lucru înseamnă că la pinul de ieșire al acestora amplitudinea tensiunii va fi direct proporționala cu valoarea fizică măsurata și anume distanța. În cazul senzorilor de proximitate, elementul receptor fotosensibil specializat va genera un semnal de 1L la ieșire în cazul în care nu se detectează un obstacol frontal și 0L în cazul în care se face o detecție în acest sens. Senzorii de proximitate sunt 3 la număr, iar ieșirile în tensiune sunt conectate la intrarea convertorului ADC al microcontrolerului, convertite și în final procesate. Senzorii de proximitate sunt dispuși/montați pe platforma robotică așa cum se poate observa în Fig.3.20.
Fig.3.20. Senzorii de proximitate.
Schema electronică și PCB-urile acestor senzori au fost proiectate cu ajutorul mediului EASY EDA și sunt prezentate în Fig.3.21.
Fig.3.21. Schemă electronică și cablaj pentru senzorii de proximitate.
Scopul integrării acestui tip de senzori a fost făcut în ideea în care s-a dorit eliminarea perturbațiilor induse de către lumina exterioară ambientală sau orice sursă adiționala de lumină, deoarece lumina naturală conține în spectrul său invizibil și radiație în infraroșu. Sub acest considerent s-a utilizat senzorul de tip TSOP sensibil la radiația în infraroșul cu frecvența de (38kHz) și care conține în structura sa internă o serie de filtre ce elimină perturbațiile luminoase adiționale de orice tip. Circuitul integrat de tip 555 funcționează pe post de generator de semnal dreptunghiular, ceea ce însemna ca LED-rile în infraroșu vor emite cu frecvența purtătoare de 38Khz și factor de umplere de 50%. Pe partea de alimentare a circuitului electronic s-au adăugat pentru protecția la variațiile de tensiune și la glitch-uri în frecvență un etaj buffer de deparazitare cu ajutorul a doi condensatori de 100nF și respectiv 100uF, dar și un circuit pentru indicarea status-ului alimentării format dintr-un rezistor și un LED de culoare verde. Tranzistorul de tip NPN din componența senzorului are rolul de amplificator de curent și de tensiune, oferind posibilitatea de a adaugă în circuit mai multe diode LED IR pentru a mări distanța la care se realizează detecția obstacolului. În cazul de față au fost utilizate 2 diode IR emițătoare ce oferă performanța detecției obstacolului la o distanță de aproximativ 15cm.
La ieșirea senzorului în infraroșu TSOP s-a introdus în circuit și un LED pentru a se putea observa fizic momentul în care se face detecția obstacolului (în momentul detecției LED-ul de culoare roșie se va aprinde). Așa cum a fost menționat anterior, în momentul în care elementul receptor în infraroșu nu detectează nici un fascicol în infraroșu, valoarea la ieșire va fi de 5V și viceversa. În scopul eliminării perturbațiilor ce pot apărea la ieșirea senzorului, s-a montat și un rezistor de pull-up (10K), așa cum recomandă și producătorul. Rezistorii adiționali folosiți în circuit au rolul de a calibra circuitul NE555 pe frecvența de 38kHz, spectru al frecvenței în care elementul TSOP devine sensibil și generează la pinul de ieșire semnale proporționale cu distanța de detecție. Au fost montați 3 senzori de acest fel în cadrul acestui proiect în scopul de a eficientiza detecția laterală a obstacolelor.
3.2. Fabricarea cablajelor imprimate
Partea hardware a sistemului a fost realizată cu ajutorul semiconductorilor și componentelor pasive de tipul THD (through hole devices) care au fost plantate pe circuitul imprimat, respectând îndeosebi schema electronica și desing-ul inițial al proiectului. Pentru realizarea propriu zisă a PCB-ului s-a pornit de la proiectarea inițiala schemei electronice în programul/interfața online denumita “Easy EDA”. S-a optat pentru utilizarea acestei platforme software deoarece este ușor de utilizat și accesul la baza de date cu footprinturile componentelor este facil și diversificat, fiind foarte ușor de identificat aproape orice componenta electronică de pe piață. Interfața software permite în primă fază proiectarea schemei electronice dorite și mai apoi generarea și dezvoltarea particulară a PCB-ului sistemului electronic. Interfața software în care a fost proiectată schema electronică a sistemului automatizat este cea prezentată în Fig.3.22 [15].
Fig.3.22. Pagina principala Easy EDA.
În urma proiectării schemei electronice s-a continuat cu pasul următor și anume convertirea automata a schematicului în format PCB, urmat de aranjarea/plasarea manuală a componentelor în aria delimitată de PCB (Fig.3.23).
Următoarea etapă în proiectarea PCB-ului a constat în routarea manuală a traseelor pentru o acuratețe cât mai mare, deși este posibil ca această funcție să fie realizată și în mod automat prin opțiunea de “autorouting” în care programul va executa și genera traseele electrice după reguli de routare impuse de utilizator, așa cum se poate observa și în Fig.3.24.
Fig.3.23. Desenarea schemei electronice.
Fig.3.24. Posibilitate de routare automată a cablajului imprimat.
S-a optat pentru realizarea manuală a traseelor PCB-ului sistemului deoarece s-a utilizat un PCB simplu stratificat (1 singură față), iar dimensiunea dintre liniile de conexiune și GND s-a dorit a fi foarte mică ( în cazul de față clearance-ul este de 0.3mm). Realizarea manuală a PCB-ului permite un mai bun control asupra poziționării componentelor dar și asupra traseelor de semnal. Tot în acest sens, o routare manuala dezvoltă un PCB particularizat exact cum dorește utilizatorul dar dezvoltă în același timp și abilitățile de proiectare în domeniul PCB-urilor.
De asemenea s-a utilizat și planul de masă pentru o mai bună calitate a transmisiei semnalelor în frecvență dar și pentru eliminarea eventualelor perturbații electromagnetice, plan ce este încadrat și înconjoară toate traseele electrice, ca în Fig.3.25.
Fig.3.25. Planul de masă al cablajului imprimat.
Pe lângă lista de avantaje ale utilizării acestui program în scopul generării de PCB-uri mai există și avantajul că la finalizarea PCB-ului când toate funcțiile de DRC (design rule check) sunt îndeplinite se poate comanda contracost fabricarea PCB-ului realizat într-un mod profesional direct de la o firma subcontractoare. În cazul de față s-a evitat utilizarea acestei funcții, preferând-se realizarea “in house” a PCB-ului cu metode proprii și calitate maximă. Realizarea practica a PCB-ului a durat o perioadă destul de îndelungată de timp, perioada în care s-au efectuat numeroase teste practice pentru a ajunge la o calitate mulțumitoare a rezoluției PCB-ului. Aceste teste de producție au constat în principiu în determinarea timpului ales pentru expunerea la lumină ultravioletă și la timpul de acționarea a soluției de developare asupra stratului fotorezistiv. Continuând seria de procese, următoarea etapă în realizarea PCB-ului a fost printarea circuitului electronic pe o folie transparentă de retroproiector cu amendamentul că s-au efectuat ajustări ale contrastului și rezoluției imprimantei pentru a se obține în final o calitate maximă a imprimării. Printarea circuitului din format .pdf pe folia de retroproiector s-a realizat la un furnizor de servicii de printare, unde se știe faptul că rezoluția de printare este foarte ridicată. În același timp, pentru creșterea contrastului circuitului imprimat pe folia de retroproiector, s-a efectuat operațiunea de dublare, acest lucru însemnând că s-au suprapus 2 folii una peste cealaltă, crescând în acest mod contrastul dintre zona translucidă și zona opacă (reprezentată de traseele electrice ale PCB-ului). În Fig.3.26 este reprezentat un exemplu de cum arată o mască utilizată în metoda foto-lito de realizare a cablajului.
Fig.3.26. Măști producție PCB.
Un accent important trebuie pus pe claritatea zonei translucide, zona prin care va trece, la procesul foto, lumina ultravioletă care va afecta stratul de fotorezist. Înainte de procesul de expunere a măștii și cablajului la ultraviolete vor trebui foarte bine curățate măștile printate și sticla de expunere care vine plasată peste mască și PCB. În cazul de față s-au utilizat două sticle subțiri care provin de la două mini tablouri de perete (grosime ~3mm, L x l = 25cm X 25cm) între care vin poziționate în regim sandwitch PCB-ul și masca printată. Ca și observație experimentală, dacă sticla de expunere nu este curată și există particule, vor fi șanse mari ca PCB-ul să nu aibă calitatea dorită sau chiar să fie compromis la final. Un factor important la realizarea cablajului imprimat este tipul de PCB folosit care în cazul de față este produs de compania BUNGARD. Aceste PCB-uri vin acoperite cu un strat uniform de fotorezist care garantează implicit o calitate ridicată la transferul/ imprimarea măștii pe PCB. Unele dintre caracteristicile acestui PCB fotosensibil utilizat în dezvoltarea proiectului de față sunt prezentate în Fig.3.27.
Fig.3.27. Caracteristici PCB utilizat.
Pentru exemplificare, pregătirea sticlei, a măștii printate și a PCB-ul fotosensibil ce urmează a fi expus la lumină ultravioletă .Se folosește metoda de tip sandwitch pentru a facilita presarea măștii imprimate pe PCB-ul fotosensibil de către sticla de presiune. În cazul de față s-au utilizat două sticle, una care vine poziționata peste mască și PCB și una care vine montată pe partea opusă a PCB-ului(spate), presarea PCB-ului și măștii între cele două sticle realizând-se cu ajutorul a două cleme/cârlige, ca în Fig.3.28.
Fig.3.28. Pregătire PCB pentru expunere.
Odată sistemul fixat între cele două sticle și prins ferm cu cele două cleme, acesta va fi expus la lumină ultravioletă timp de două minute și 20 de secunde (timp determinat experimental), timp în care fororezistul expus în zonele translucide ale măștii va fi afectat de lumina ultravioletă. De menționat este faptul că toate aceste procese explicate până în momentul de față, precum și expunerea la ultraviolet trebuie să fie realizate într-un mediu lipsit de lumină naturală pentru a se evita developarea accidentală a PCB-ului (se știe că lumina naturală conține în spectrul său și radiație ultravioletă care poate contribui negativ la procesul de developare a PCB-ului). Expunerea ansamblului PCB fotosensisbil s-a realizat la o distanță de aproximativ 15 cm față de neonul UV, așa cum este exemplificat și în Fig.3.29.
Imediat după finalizarea procesului de expunere la ultraviolete ansamblului compus din cablaj, masca imprimată și foaia de sticlă, PCB-ul este extras din sandwitch și este imediat scufundat în soluție de developare specială, în cazuri extreme se poate utiliza și sodă caustică dar aceasta este foarte periculoasă. În cazul de față s-a utilizat soluția specială de developare numita SENO-4007 care este o soluție specializată destinată exclusiv procesului de developare a PCB-urilor, neconținând în compoziția sa elemente periculoase precum soda caustică. Această soluție se găsește în comerț sub forma de pulbere împachetată pliculețe de 22g, cantitate suficientă pentru a fi dizolvată în jumătate de litru de apă. Trebuie specificat faptul că soluția obținuta trebuie încălzita la temperatura de aproximativ 50 grade pentru o eficiență ridicată a procesului de developare. Astfel, în urma procesului de developare a PCB-ului cu fotorezist, zonele întunecate (sau traseele de pe cablaj) vor rămâne neafectate de soluție (Fig.3.30).
Fig.3.29. Etapa de expunere la lumina UV.
Fig.3.30. Soluție pulbere de developare (SENO 4007).
La finalul procesului de developare cu agentul special, cablajul imprimat va avea zone închise la culoare acolo unde fotorezistor a rămas intact dar și zone deschise la culoare acolo unde agentul de developare a acționat și dizolvat fotorezistul (Fig.3.31).
Fig.3.31. PCB-ul dupa procesul de developare.
Imediat după finalizarea procesului de developare, care încă o dată de menționat, s-a realizat într-o încăpere cu luminozitate foarte scăzută, cablajul nu mai este sensibil la lumina exterioară și la ce UV și acesta va trebui spălat bine sub jet de apă pentru a îndepărta în totalitate resturile de fotorezist rămase în urma procesului. Ultima etapă în construcția prototipului de PCB este cea de etching sau de corodare, unde cablajul este scufundat și agitat în soluție specializata de corodare FeCl3 (clorură ferică), dar se mai poate folosi și persulfat de sodiu sau acid azotic. Și de această dată, s-a stabilit pe bază experimentală timpul și temperatura agentului de corodare pentru o performață crescută a procesului de corodare. S-a observat de asemenea faptul că atunci când se utilizează persulfatul de sodiu, claritatea în privința preciziei traseelor este mult mai crescută, comparativ cu FeCl3 deoarece persulfatul este o soluție chimică nu foarte corozivă și atacă materialul de Cupru cu o viteza mult mai lentă și pe toată suprafața PCB-ului în același timp.
Sumarizând, procese de construcție a PCB-ului au fost: realizare mască, imprimare pe PCB la lumină UV, developare și etching (corodare PCB).
3.3. Asamblarea părții hardware a sistemului
În cadrul acestui proiect, partea practică a fost realizată în întregime cu materiale ușor prelucrabile, unde cea mai mare importanță o are materialul tip FOREX, un material cu proprietăți mecanice și de rezistență foarte bune. Acest material a fost prelucrat mecanic cu ușurința utilizând doar un cutter și traforaj. Printre elementele platformei robotice realizate din acest material se numără cadrul de bază al platformei dar și elementele de fixare ale modulelor electronice componente (Fig.3.32). FOREX-ul a fost utilizat datorită faptului că se prelucrează mecanic foarte ușor și este rezistent la temperatură și umiditate în același timp.
Fig.3.32. Materiale utilizate în construcția platformei robotice (FOREX).
Avantajul utilizării acestui material este acela că se poate lipi foarte bine cu adeziv, prinderea rezultată fiind de foarte bună calitate și foarte rezistentă la stres din punct de vedere mecanic. Fixarea modulelor electronice pe cadrul de FOREX se realizează prin intermediul șuruburilor și a distanțierelor realizate tot din acest material. Dimensionarea bazei de FOREX pe care s-au montat toate modulele electronice s-a realizat imediat după ce partea HW a fost finalizată, moment în care toate modulele au fost suprapuse pe materialul de FOREX rezultând în final dimensiunile necesare sau altfel spus suprafața necesară pentru dispunerea modulară a ansamblelor electronice. Așa cum a fost menționat anterior în cadrul proiectului, prinderea ansamblelor pe baza platformei robotice s-a realizat prin intermediul materialelor din Aluminiu precum pofilele de tip bandă și L, iar prinderea propriu zisă s-a efectuat cu ajutorul șuruburilor, piulițelor, șaibelor, dar și a substanțelor chimice de lipit.
Tabla și pofilele din Aluminiu s-au utilizat în mod preponderent în cadrul acestui sistem robotizat așa cum se poate observa și în Fig.3.33.
Fig.3.33. Materiale utilizate în construcția platformei robotice (Aluminiu).
S-a optat pentru folosirea Aluminiului în cadrul acestui proiect deoarece este un material ușor prelucrabil din punct de vedere mecanic și oferă o rezistență sporită în sistem. Astfel s-au folosit profiluri de tip L la montarea LCD-ului alfanumeric, dar și profiluri dreptunghiulare pentru prinderea și montarea acumulatorilor în sistemul robotic. Aluminiul debitat sub formă de tablă de 0.3mm a fost integrat în sistem pentru protecția fizică a acumulatorilor dar și pentru ecranarea ESD a modulului driver față de restul ansamblelor electronice. Așa cum a fost descris și anterior, conexiunea elementelor din aluminiu cu cele din FOREX s-a realizat prin elemente precum șuruburi/piulițe/șaibe, holtzșuruburi, cleme și coliere din plastic.
3.3.1. Montarea motoarelor de tracțiune și directivitate
Platforma robotică este dotată cu două motoare de tip DC ce lucrează la tensiunea de 5V și sunt comandate în regim PWM de către driverul L298 în dublă punte H. S-a optat pentru folosirea acestor motoare DC datorită reductorului mecanic pe care îl au în construcție și prin intermediul căruia oferă robotului o viteză și putere de locomoție foarte ridicată. Cele două motoare DC sunt dispuse pe platforma de bază a robotului conform Fig.3.34.
Așa cum se poate observa și din Fig.3.34, alimentarea acestor motoare de curent continuu se realizează cu ajutorul unor fire de conexiune cu dimensiuni sporite, cu scopul de a suplini fără probleme consumul ridicat de curent în momentul în care sunt acționate. În partea posterioară a platformei a fost montată o roată mobilă cu o libertate de 360 grade în scopul de a oferi celor doua motoare DC posibilitatea de directivitate și tracțiune. Montarea motoarelor s-a realizat prin lipire cu ajutorul unei soluții cu aderență mare la contact.
Fig.3.34. Ansamblul motor-roată.
3.3.2. Pompa de apă pentru stingerea incendiului
Așa cum a fost menționat anterior în cadrul proiectului, încă de la faza de proiectare a acestuia, s-a optat ca stingerea incendiului să se realizeze prin intermediul unei pompe de apă cu motor, cu sorb submersibil. În acest sens cea mai buna variantă a fost cumpărarea unei pompe-spălător din domeniul auto datorita tensiunii de alimentare comparativă cu cea a sistemului proiectat și anume în jurul valorii de 12V. Pentru evitarea fenomenelor de interferență electromagnetică și totodată pentru protecția tranzistorului de comandă a pompei, s-a utilizat un filtru în frecvență pe partea de alimentare ce constă dintr-un condensator nepolarizat de 100nF și unul polarizat de 100uF care atenuează variațiile de tensiune și curent produse la acționare. În scopul protecției tranzistorului de putere s-a utilizat o diodă de redresare pe partea de alimentare a pompei, prin intermediul căreia în momentul întreruperii circuitului de către tranzistori, back EMF (electromagnetic force) înmagazinata în bobina rotorului se va închide prin diodă și nu prin tranzistor. Montarea pompei de apă în pe cadrul realizat se poate observa în Fig.3.35.
Fig.3.35. Pompa de apă a sistemului.
3.3.3. Placa de bază și unitatea centrală de procesare
La baza achiziției semnalelor analogice provenite de la senzori dar și a procesării de date se află microcontrolerul PIC18F46K80 ce lucrează la frecvența de 64 Mhz și este alimentat la o tensiune stabilizată de 5V. Acest microcontroler este poziționat central pe placa electronică centrală a sistemului(mainboard), așa cum se poate observa în Fig.3.36.
Fig.3.36. MAIBOARD sistem robotic.
În partea centrală a plăcii de bază se poate observa microcontrolerul PIC18F46K80, în partea dreapta se află elementele stabilizatoare de tensiune ale sistemului. Conectorul albastru este utilizat în scopul alimentarii modulului driver de motoare L298 (duble punte H). În partea de sus a PCB-ului se află conexiunile (mulele) de alimentare și semnal ale celor 6 senzori în infraroșu (IR) și anume a celor 3 senzori de proximitate și a celor 3 senzori de flacăra. Imediat în proximitatea acestor conexiuni de semnal se poate observa și contactul pentru „hard reset” a microcontrolerului, iar în partea din stânga a plăcii de bază se afla conexiunea (BUS-ul) de date a comunicației dintre microcontroler – LCD alfanumeric, comunicație realizată prin intermediul a unui BUS de date pe 9 fire de conexiune tip panglică. Se poate observa faptul că firele de conexiune din partea de jos a PCB-ului sunt de grosime un pic mai mare deoarece acestea sunt utilizate în alimentarea controlată a celor două electroventilatoare. Semireglabilul din partea stânga-jos este utilizat în sistem pentru a regla contrastul pe display-ul alfanumeric. În imediata apropiere a stabilizatoarelor pozitive de tensiune se afla montată și o fâșie din material de Aluminiu în scopul protecției întregii părți electronice împotriva fluctuațiilor electromagnetice (perturbațiilor) provenite de la elementele de acționare precum pompa de apă dar și de la modulul driver L298 a celor două motoare DC.
3.3.4. Asamblarea finală a sistemului
Platforma finală asamblată rezultată în urma proceselor descrise anterior este prezentată în Fig.3.37. Din Fig.3.37 se poate observa construcția șasiului cu 3 roți, amplasarea sistemului cu microcontroler, a senzorilor, a elementelor de stingere a incendiului și nu în ultimul rând a sistemului de alimentare format din cele 8 acumulatoare. Se poate observa că Afișajul alfanumeric a fost poziționat în partea superioară, având un anumit unghi de înclinare, astfel încât mesajele care apar în timpul funcționării să poată fi citite cu ușurință.
Fig.3.37. Forma finală a sistemului.
3.4. Descrierea software a sistemului
Așa cum a fost menționat anterior în cadrul acestui proiect, sistemul robotic rulează în două moduri distincte și anume modul manual și modul automat. În Fig.3.38 se observă schema logică software ce prezintă structura programului care rulează în microcontrolerul PIC18F46K80 în timp real.
Considerând flowchart-ul sistemului din Fig.3.38, platforma robotică în momentul startării va începe prin afișarea pe LCD-ul alfanumeric de 20×4 caractere a unor mesaje de informare ce fac referire la numărul și tipul de module electronice cu care este echipat sistemul. Aceste mesaje au rolul de a informa utilizatorul de la bun început de complexitatea sistemului electronic robotizat și ce tip de module electronice sunt utilizate în cadrul sistemului. La finalul secvenței de enumerare și informare în legătura cu numărul de module electronice utilizat, platforma robotică va intra în funcția de selftest, acolo unde toate sistemele vor fi testate pe rând (LED RGB, electroventilatoare, pompa de apă, motoarele de tracțiune și directivitate). În momentul În care funcția a fost executată, sistemul intră automat în regimul manual de lucru unde se va afișa pe LCD-ul alfanumeric tensiune de alimentare a acumulatorilor, se va indica pe LCD dacă s-a detectat un eventual obstacol și nu în ultimul rând viteza de deplasare exprimată în unități. În tot acest timp utilizatorul este capabil să trimită comenzi robotului de directivitate (înainte/înapoi/stânga/dreapta), de acționare a electroventilatoarelor și a pompei de apă. De asemenea utilizatorul poate selecta din interfața de pe smartphone modul de lucru al robotului, manual sau automat. Dacă s-a făcut selecția modului automat, atunci sistemul electronic va intra în regimul de lucru automat, unde pe baza senzorilor de proximitate IR se va deplasa și va evita obstacolele.
Fig.3.38. Schema logică de funcționare a sistemului la inițializare și în modul manual.
În același timp robotul poate detecta și o eventuală flacară frontală prin intermediul celor 3 senzori frontali, moment în care se va opri, se va îndrepta pe direcția sursei de incendiu și în cele din urmă va acționa dispozitivele de stingere a incendiului (electroventilatoarele și pompa de apă). În paralel, un LED RGB va fi comandat să se aprindă de către microcontroler pe culoarea roșie, avertizând optic în acest mod utilizatorul. Dacă se dorește dezactivarea senzorilor de flacăra, atunci aceasta poate fi făcută direct din interfață de către utilizator prin apăsarea unui singur buton.
Așa cum a fost menționat și anterior în cadrul acestui proiect, dezvoltarea/testarea proiectului s-a realizat cu ajutorul compilatorului MikroC, iar programarea propriu zisă (încărcarea .hex-ului) a microcontrolerului s-a efectuat cu programatorul PicKit2. Descrierea sistemului software este realizată pe module, pornindu-se de la atribuirea de nume specifice pentru elementele ce vor fi folosite în mapare/interfațare și acționare, utilizând-se sistemul de preprocesare și comenzi de tipul #define. (Anexa 1).
Astfel, atribuirea de nume specifice s-a realizat pentru comanda motoarelor de tracțiune și directivitate (driver-ul L298), pentru comanda electroventilatoarelor de stingere a incendiului, a pompei de apă, dar și a LD-ului de tip RGB prin intermediul căruia se indică starea sistemului.
Așa cum bine se poate observa din Anexa 1, pentru comanda și afișarea pe LCD se utilizează pinii specifici I/O ai LATCH-ului LATD (sau PORTD). Prin intermediul acestor comenzi specifice se asignează fiecărui pin de comandă și control ai LCD-ului (RS,EN/RW, D4-D7) câte un pin al microcontrolerului din registrul D4-D7. Astfel comanda pe pinul RS al LCD-ului va dicta faptul că acesta va interpreta setul de date primit pe D4-D7 ca pe un set de date pentru afișare sau ca pe o “comanda”(ex. afișare pe LCD).
În cadrul acestui proiect s-a utilizat o serie larga de variabile pentru sistemul de achiziționare și procesare de date. După cum se poate observa și din Anexa 1, variabilele de tip float sunt utilizate în procesarea valorii tensiunii acumulatorilor, deoarece aici este necesara o rată mai mare de acuratețe în calculul cu virgulă.
Tot în Anexa 1 se poate observa că sistemul folosește un set de 4 funcții: funcția de inițializare ADC, funcția de activare afișaj alfanumeric, funcția de verificare sistem și funcția de resetare.
Pentru funcția de inițializare ADC sunt setati registrii ADCON0, ADCON1, ADCON2 ce au rol în setarea modului de lucru a convertului ADC pe 12 biți. Registrul aferent codului ADC este setat în scopul definirii timpului de achiziție și conversie dar și a tipului de oscilator și modul de divizare a CLK utilizat.
În momentul startarii platformei robotizate, pe LCD-ul alfanumeric se vor afișa mesaje de informare dar se va executa si procedura de selftest ce cuprinde toate dispozitivele de acționare. In prima faza, pe LCD-ul alfanumeric se vor afișa toate modulele electronice de care dispune sistemul. Funcția de reset a tuturor device-urilor a fost creată în special pentru a atribui valoarea de 0L tuturor dispozitivelor de acționare în momentul în care platforma robotica este startata. Printre dispozitivele ce sunt resetate se numără modulul L298 driver al motoarelor DC, electroventilatoarele pentru stingerea incendiului, LED-ul RGB de indicare a stării sistemului și nu în ultimul rând pompa de apă. În funcția de selftest sau de check la startarea sistemului se testează toate aceste mecanisme enumerate în flowchart. În timpul execuției funcție de testare, robotul va afișa pe LCD diferite mesaje cu scop informativ, va porni electroventilatoarele, pompa de apă dar se va mișca și în cele 4 direcții.
Funcția MAIN a sistemului este prezentată în schema logică din Fig.3.39.
Fig.3.39. Schema logică de funcționare a funcției main.
Următoarea funcție este funcția principala „main” în care se vor seta parametri precum viteza de operare a clock-ului sistemului, directivitatea pinilor I/O dar și sistemul de întreruperi.
Registrul utilizat în setarea clock-ului de funcționare a microcontrolerului este OSCCON.
Astfel, după cum se poate observa și în cadrului codului sursă din Anexa 1, în acest registru sunt setați doar biții IRCF, ceea ce înseamnă că va fi selectat prin intermediul unui sistem cu multiplexare clock-ul cu frecvența de bază de 16Mhz. Prin intermediul registrului OSCTUNE, bitul6 (PLLEN), frecvența clock-ului este multiplicată de 4.
Regiștri utilizați in directivitatea porturilor sunt registrii TRISX prin intermediul cărora un pin de I/O poate fi transformat într-un pin de ieșire sau de intrare. Pinii registrului TRISA sunt analogici, iar în momentul în care sunt setați ca pini de intrare (1), aceștia devin pini de intrare analogici ce vor fi utilizați în sistem la achiziționarea semnalelor analogice.
Înainte de momentul în care sistemul intră în regim de buclă închisa/loop, se vor apela toate funcțiile de inițializare ale modulelor componente, inclusiv a modulului bluetooth care comunică cu microcontrolerul printr-o comunicație serial asincronă de tip UART:
Modul de funcționare al sistemului este structurat în două parți și anume modul automat și modul manual. În modul automat robotul rulează în mod independent, evita obstacolele și în momentul în care detectează o flacăra, se oprește, se poziționează pe direcția acesteia și în final o stinge utilizând sistemele din dotare.
Variabila „mode” este utilizată pentru a defini modul în care sistemul rulează automat/manual și această variabilă este setată de către utilizator direct de pe smartphone. În momentul În care acestă variabilă are valoarea 1, sistemul se afla în modul de lucru automat și acest lucru va fi afișat pe display-ul alfanumeric. Tot în acestă etapă se achiziționează semnalul analogic provenit de senzorul de tensiune, semnal ce este convertit, procesat și în final afișat pe display-ul alfanumeric ca și mesaj de interes pentru utilizator pentru a ști momentul în care sistemul trebuie reîncărcat.
În această etapă de cod se citesc toate semnalele provenite de la senzorii sistemului (3 senzori proxi și 3 senzor flacără) și atât timp cât nici un semnal nu depășește valoarea de prag setată, platforma robotică va rula pe direcția de „înainte”. Valorile de prag sunt 4000 (ce reprezintă valoarea semnalului analogic în format digital).
Sistemul robotic mai dispune de o funcționalitate și anume de anulare/activare a senzorilor de flacăra, ceea ce înseamnă că utilizatorul poate opri senzorii de flacăra și robotul va rula în felul acesta bazând-se doar pe senzorii de proximitate IR. În momentul în care platforma robotică detectează o flacăra/incendiu cu senzorul din partea dreaptă, acesta își va mări insesizabil viteza de deplasare, se va orienta în partea sursei de lumină (dreapta).
În momentul în care robotul s-a orientat pe poziția flăcării și atât timp cât valoarea tensiunii de ieșire a senzorului de flacăra este peste pragul maxim, microcontrolerul va comanda electroventilatoarele dar și pompa de apă.
Când senzorul frontal de flacăra este activat, platforma robotica se oprește și atât timp cât valoarea tensiunii din ieșire este peste pragul de 4000 (format digital), microcontrolerul va comanda /acționa cele două electroventilatoare , împreuna cu pompa de apă.
Sub același considerent/design flow funcționează și senzorul din partea opusă și anume senzorul din stânga. În momentul în care senzorul este activat, platforma robotică înaintează foarte puțin și se rotește în direcția flăcării. Atât timp cât valoarea tensiunii din ieșire a acestui senzor este mai mare decât 4000 (valoare digitala generata de convertorul ADC), microcontrolerul menține electroventilatoarele și pompa de apă pornite până în momentul în care incendiul a fost oprit.
În permanență, în acest mod de lucru al platformei, se interoghează feedback-ul provenit de la utilizator. Dacă utilizatorul dorește să schimbe modul de lucru de pe automat pe manual, acesta o face foarte simplu, dintr-un buton, direct de pe interfața software de pe smartphone:
În ceea ce privește modul de evitare al obstacolelor, în momentul în care, spre exemplu, senzorul din partea dreapta detectează un obstacol, platforma se va deplasa înapoi și direcția opusă până în momentul în care valoarea tensiunii din ieșire a senzorului revine la valoarea normală de non-detecție. Pentru detecția obstacolelor pe partea dreaptă se urmează același flow.
Dacă obstacolul este detectat frontal, robotul se va îndrepta înapoi-stânga până în momentul în care valoarea amplitudinii tensiunii din ieșirea senzorului revine la valoarea nominală de non-detecție. Atunci când sistemul robotizat trece în modul de lucru manual, utilizatorul îl va putea comanda în toate direcțiile, va putea acționa electroventilatoarele și pompa de apă, direct de pe interfața de pe smartphone (comunicație serială UART prin bluetooth).
În momentul în care platforma robotică, comandată fiind de către utilizator, detectează un obstacol, pe LCD-ul alfanumeric se va afișa acest lucru dar în paralel se va comanda și aprinderea LED-ului RGB pe culoarea roșie. Valoarea amplitudinii tensiunii de alimentare este afișata în permanență pe toată durata funcționații platformei în modul de lucru manual.
Achiziția semnalului analogic corespunzător tensiunii de alimentare se realizează pe canalul 6 (AN6) al convertorului ADC. Rezultatul conversiei în format digital este înmulțit cu rezoluția convertorului (1.22mV/bit) și apoi împărțita la factorul de divizare 0.317 al rețelei de divizare rezistivă. În final rezultatul este împărțit la 1000 pentru obținere valorii tensiunii de alimentare exprimata în V. În modul de lucru manual, utilizatorul este capabil să modifice în timp real de pe smartphone viteza de deplasare a platformei prin modificarea pragului de ON al semnalului de comanda de tip PWM.
În alte cuvinte uilizatorul modifică viteza de deplasare prin modificarea factorului de umplere ce comandă motoarele DC de tracțiune și directivitate.
Tot în cadrul secvenței de cod mai sus descrise sunt implementate și funcțiile prin intermediul cărora utilizatorul poate comanda electroventilatoarele și pompa de apă. Comenzile de la utilizator constau în caractere codate în modul ASCII.
Funcția de întrerupere este programată să se execute la fiecare 100us utilizând în acest scop timer-ul TIMER1 al microcontroler-ului. În prima secvența de cod din funcția de întrerupere este definit modul în care LED-ul RGB și anume culoarea verde a acestuia este activată în permanență la fiecare 10ms. Semnalul PWM necesar deplasării platformei robotice este obținut tot în aceasta funcție de întrerupere prin intermediul unui numărător (counter) și a unui etaj comparator. Astfel semnalul PWM este creat pas cu pas, la fiecare întrerupere. În ultima parte a secvenței de cod din cadrul funcției de întrerupere se resetează regiștrii de 8 biți utilizați în numărarea pașilor de execuție a instrucțiunilor.
În Fig.3.40 se prezintă diagrama de secvență a programului.
Fig.3.40. Diagrama de secvență a programului.
În Fig.3.41 se prezintă diagrama de comunicații dintre telefonul mobil platforma de stingere a incendiilor. Așa cum se poate observa, comunicația este unidirecțională prin intermediul comunicației bluetooth.
Fig.3.41. Diagrama de comunicație a programului.
3.4. Testarea sistemului robotic
În ceea ce privește testabilitatea sistemului se poate afirma în primă instanța faptul că aceasta se împarte în două mari părți și anume partea de testare hardware și partea de testare software. Per ansamblu cele două tipuri de testare au fost implementate pe tot parcursul construcției proiectului deoarece în permanență au trebuit operate modificări pentru a se ajunge în final la rezultatul dorit. Deoarece senzorii cu care este echipat sistemul reprezintă un factor sensibil dar și foarte important în funcționalitatea sistemului robotic, se poate afirma că aproximativ 15% din timpul total asignat construcției platformei robotice a fost îndreptat către calibrarea, programarea și testarea acestor senzori. Astfel, dacă se face referire la senzorii de proximitate, așa cum a fost amintit și anterior în cadrul acestui proiect, aceștia lucrează la frecventa de 38Khz și emit pe o lungime de unda de 940nm în infraroșu. Senzorul receptor în infraroșu este un senzor specializat ce sesizează frecvențe de unde în infraroșu numai pe o frecvență centrală de 38Khz, iar în această direcție s-au întâmpinat câteva probleme. Una dintre problemele ce afectează funcționalitatea senzorului în infraroșu a fost aceea ca circuitul oscilant realizat cu circuitul integrat NE555 nu genera corect semnalul de 38Khz ci unul de 32.7Khz, iar acest lucru tradus în distanță a însemnat scăderea sensibilității și deci a distanței de detecție a obstacolelor. Pentru rezolvarea acestei probleme s-a utilizat un osciloscop specializat, iar reglajul în frecvență a fost ușor de operat doar prin modificare valorii unui rezistor din circuit. O a doua problemă întâmpinată la acest tip de senzor a fost detectată măsurând cu osciloscopul faptul că deși elementului emițător îi era aplicat un semnal de 38Khz cu factor de umplere de 50% la ieșirea elementului receptor nu se modifica amplitudinea în nici un fel. Problema în acest caz a fost chiar dioda emițătoare în infraroșu, care în pofida faptului că era alimentată în frecvență corespunzător, aceasta nu emitea în infraroșu. Faptul că deși era alimentată în frecvență și nu emitea în infraroșu a fost verificat cu camera de luat vederi a smartphone-ului care poate detecta și afișa pe display chiar și lumina emisă în infraroșu. Acest tip de probleme au fost întâmpinate la 2 din 3 senzori de proximitate, senzori care au fost realizați integral de la zero.
O altă nu neapărat problemă ci mai mult timp de lucru, a fost atribuit părții de programare și interpretare a semnalelor provenite de la senzori, precum și la luarea deciziilor în timp real. Astfel, făcând referire tot la senzorii de proximitate ai sistemului robotic, s-au făcut multiple teste în legătura cu luarea de decizii în momentul în care robotul detectează un obstacol. În momentul în care robotul detectează un obstacol lateral, în primă instanța s-a implementat în codul sursă ca acesta să își schimbe direcția prin a bloc roata de pe partea obstacolului și de a învârti spre spate roata opusă obstacolului. Acest mecanism nu a funcționat așa cum s-a dorit la început, obstacolele fiind evitate la o distanță foarte mică, așadar s-a implementa o nouă logică conform căreia în momentul în care se detectează un obstacol lateral, robotul să se învârtă pe loc în direcția opusă, rezultatul fiind în final foarte satisfăcător. Același lucru s-a întâmplat și la detecția unui obstacol frontal, unde inițial, robotul se deplasa doar în spate și apoi își continua deplasarea înainte, dovedindu-se în final că acest mecanism funcționează doar în momentul în care obstaculul nu este perfect perpendicular pe senzor. În momentul în care acest lucru se petrece, obstaculul este perpendicular pe senzorul frontal de proximitate, robotul va intra într-o buclă închisă de mișcări și anume față-spate. Observând-se acest comportament în faza de testare, s-a implementat un nou mecanism software la detecția unui obstacol frontal și anume în momentul în care se detectează obstacolul frontal, robotul se va deplasa pe direcția „spate” și în final se va roti stânga aproximativ 20 grade de cerc pe loc. În acest fel platforma robotică își schimbă direcția față de obstacol, nu mai este perpendicular în privința senzor-obstacol, iar la a doua iterație obstacolul va fi detectat cu senzorul frontal stânga, evitând-se în acest mod intrarea în buclă închisă (spate-față) așa cum a fost anterior descris.
În ceea ce privește senzorii utilizați în detecția flăcării, aceștia generează la ieșire o valoare digitală direct proporționala cu detecția unui eveniment. Astfel în momentul în care senzorul detectează o flacără/incendiu la ieșirea senzorului se generează un semnal digital 0V, iar reglajul distanței de detecție se realizează în mod direct prin varierea unui semireglabil de pe PCB-ul senzorului. Și în acest caz, un timp destul de mare a fost alocat părții software, unde se realizează sistemul decizional în funcție de semnalul primit de la acești senzori. Astfel, sistemul a fost gândit să utilizeze inițial un singur senzor de flacăra, dar ulterior s-a dovedit ineficient prin faptul că nu s-ar putea detecta un eventual incendiu/flacără frontală. În acest sens s-au utilizat 3 senzori de flacără pentru detecție, eficiență detecției crescând în mod exponențial. Odată cu cei 2 senzori de flacără adiționali, s-a modificat în mare parte și structura software deoarece cu un singur senzor logica era foarte simplă și anume robotul se oprea și comanda acționarea doar a electroventilatoarelor și a pompei de apă. În momentul în care cei doi senzori laterali pentru detecția flăcării au fost adăugați, s-a modificat și sistemul software decizional în sensul că în momentul în care robotul detectează o flacără cu unul din senzorii laterali, atât timp cât senzorul central nu detectează flacără, robotul se va învârti spre direcția flăcării. Următorul pas va fi cel de acționare a celor doua electroventilatoare și a pompei de apă până în momentul în care senzorul frontal de flacără nu mai detectează nici un eveniment în acest sens.
O a doua faza de testabilitate sistemică este cea referitoare la modul de locomoție al platformei robotice și anume prin intermediul celor doua motoare de curent continuu ce au în arhitectura lor internă un mecanism reductor de multiplicare a puterii și scădere a vitezei (în alte cuvine au integrat în structura lor o cutie de viteze). Faza de testare în acest caz a fost predominantă pe partea software unde, prin intermediul întreruperilor și a timer-ului TIMER 1 al microcontrolerului, s-a lucrat și testat partea de generare PWM necesar controlului vitezei celor două motoare. Acest tip de testare și integrare a codului compilat și modificat în microcontroler s-a realizat relativ ușor, utilizând conexiunea de date de tip ICSP și programarea hex.-ului în microcontroler în timp real.
Ultima parte a testării a fost testarea funcțională. În cadru acestei testării s-a activat sistemul și s-a urmărit comportarea corectă a acestuia. Așa cum s-a prezentat de mai multe ori în această lucrare, la pornirea sistemului, pe ecranul LCD se va afișa pe rând toate componentele sistemului. Acest lucru se poate vedea în Fig.3.42 și Fig.3.43.
Fig.3.42. Afișarea primelor elemente componente ale sistemului.
Fig.3.43. Afișarea ultimelor elemente componente ale sistemului.
După afișarea elementelor de sistem se trece la testarea funcțională a principalelor componente. Pe durata testării, pe afișajul alfanumeric va fi afișat mesajul din Fig.3.44. După testarea sistemului pe ecran va apărea denumirea sistemului.
Fig.3.44. Mesaj de testare a sistemului.
După ce s-a finalizat etapa de testare a sistemului se va ajunge la meniul principal în care robotul așteaptă conectarea s-a în modul manual sau în modul automat. Acest lucru se realizează prin intermediul comenzii executate de către operator cu ajutorul telefonului mobil prin intermediul conexiunii bluetooth. În momentul în care selecția a fost realizată, pe ecran va apărea unul dintre mesajele din Fig.4.45.
Fig.3.45. Mesaje afișate pentru a ști în ce mod este setat sistemul.
În situația în care sistemul este setat în mod manual, acesta trebuie condus cu ajutorul smartphone-ului. Pe durata deplasări în direcțiile comandate, el poate întâlnii obstacole care vor fi sesizate de cei trei senzori, așa cum se poate observa în Fig.3.46.
Fig.3.46. Mesaje afișate în situația în care sistemul detectează obstacole.
Din punct de vedere al telefonului mobil se poate spune că acesta conține o aplicație dezvoltată pentru comunicare prin intermediul bluetooth. La activarea aplicației se va seta utilizarea modului de comunicare Bluetooth Clasic, așa cum se observă în Fig.3.47.
Fig.3.47. Pagina de conectare a comunicației bluetooth.
Următorul pas este acela de identificare a sistemului cu care se împerechează în vederea comunicării. Dacă lista conține mai multe sisteme bluetooth în zonă, se va selecta „robot firefigher” așa cum se observă în Fig.3.48.
Fig.3.48. Identificarea echipamentului cu care se face împerecherea.
Odată realizată împerecherea, va apărea pagina principală a aplicației din care se pot executa diverse comenzi. Conținutul paginii se poate observa în Fig. 3.49.
Fig.3.49. Pagina principală a aplicației de comunicare prin bluetooth.
În cadrul paginii principale se poate selecta pagini particulare din care se pot executa comenzi funcționale pentru sistemul cu microcontroler (Fig.3.50).
Fig.3.50. Pagini de comandă a platformei de stingere incendii.
Prin urmare se poate spune că sistemul proiectat este funcțional în întregime. Se precizează că au fost realizate și alte teste funcționale cum ar fi intervenția la flacără, dar acestea nu pot fi surprinse prin intermediul imaginilor.
Capitolul 4.
Concluzii și rezultate
Se poate afirma faptul ca implementarea practica a sistemului robotic de tip firefighter a fost realizată cu succes, robotul funcționând în parametrii impuși de design. Pe parcursul construcției acestui proiect s-au realizat o multitudine de modificări și testări cu scopul de a eficientiza modul de funcționare al robotului. Spre exemplu, o îmbunătățire adusă sistemului pe parte de electronică este aceea că s-a înlocuit elementul stabilizator pozitiv de tensiune ce alimentează întreaga parte de putere cu un modul convertor DC-DC de tipul buck (reducător de tensiune) din cauza faptului că stabilizatorul liniar de tensiune este limitat la o valoare a curentului de aproximativ 1.5A. Aplicând aceasta modificare, probleme legate de supracurent la acționarea dispozitivelor de putere au dispărut deoarece convertorul utilizat are o capabilitate în curent de aproximativ 3A și randament ridicat (97%). De asemenea, în prima fază de construcție a platformei robotice s-a utilizat un singur element stabilizator de tensiune de 5V, ceea ce a condus la multiple resetări ale microcontrolerului în momentul în care un dispozitiv de putere era acționat. Acest fapt era cauzat de creșterea curentului consumat peste limită superioară a elementului stabilizator pozitiv de tensiune ceea ce conducea la scăderea tensiunii de alimentare a controlerului și în final la resetarea acestuia.
O altă problemă întâmpinata în faza de construcție a robotului a fost legată de partea hardware și mai precis de senzorii de proximitate ai sistemului. Calibrarea acestor senzori a fost consumatoare mare de timp deoarece a trebuit realizată prin reglaj fin și control osciloscopic din cauza faptului că acești senzori lucrează pe frecvența de 38Khz, frecvența generată de un circuit timer de tipul ne555.
Pe partea de software s-au operat constat multiple modificări în faza de design și de testare, cu preponderență în faza de calibrare, așa cum a fost amintit mai sus. Testarea propriu zisă și calibrarea sistemului a fost realizate în timp real, mai precis în momentul în care robotul funcționa și se dorea o implementarea unei noi funcționalități. În ceea ce privește partea de senzoristică, s-a dorit ca senzorii pentru detecția flăcării să fie mai sensibili decât senzorii pentru detecția obstacolelor pentru ca robotul să stingă flacăra la detecție și nu să o ocolească considerând-o un obstacol. Programarea propriu zisă în timp real a sistemului robotic s-a realizat cu programatorul Pickit2 care permite programarea propriu zisă a fișierului .hex în microcontroler în timp real, chiar și în timpul regimului normal de funcționare al robotului. Conexiunea de date pe baza căreia s-a programat memoria microcontrolerului este de tipul ICSP și are la bază 5 pini, din care 3 pini de date și 2 pini de alimentare.
Se poate menționa faptul căun senzor de temperatură care să lucreze simbiotic cu senzorii de flacără ar duce la îmbunătățirea sistemului deoarece ar exista două tipuri de surse de semnal pentru microcontroler la procesul detecție a flăcării/incendiului.
O altă îmbunătățire ar consta în implementarea unor senzori de gaz/fum și avertizare cu buzzer în momentul ce precedă un eventual incendiu. Astfel dacă elementul sensibil la dioxid/monoxid de carbon/fum detectează un eveniment probabil de incendiu, microcontrolerul va (pre)informa utilizatorul de eventualitatea unui incendiu prin emiterea unui semnal sonor de înalta frecvență dar în același timp se va putea degaja și fumul din încăpere/zonă prin acționarea electroventilatoarelor. Sistemul de față poate fi îmbunătățit cu o serie largă de senzori pentru a-i crește performantă la detecție dar și pentru a-i adaugă noi funcționalități.
În urma testărilor practice, pachetul de acumulatori utilizat are o capacitate în curent suficientă pentru a oferi platformei robotice o autonomie de aproximativ 1h în regimul de lucru normal, iar senzorii utilizați în detecția obstacolelor nu sunt afectați de lumina ambiantă deoarece lucrează pe frecventa de 38Khz pe lungime de unda de 900nm, fiind foarte greu de interferat.
Bibliografie
[1] PIC18F66K80 Family documentation,
http://ww1.microchip.com/downloads/en/devicedoc/pic18f66k80%20family%20enhanced%20flash%20mcu%20with%20ecan%20xlp%20technology%2030009977g.pdf
[2] Circuit integrat L298, https://www.st.com/en/motor-drivers/l298.html
[3] Informații incendii, https://www.isutimis.ro/
[4] Robot THERMITE RS1-T3 AND RS2-T2, http://www.roboticfirefighters.com/
[5] Robot SAFFiR, https://edition.cnn.com/2015/02/12/tech/mci-saffir-robot/index.html
[6] Robot TAF 20, https://www.emicontrols.com/
[7] Drona stingere incendii, https://www.wetalkuav.com/can-firefighting-drones-help-combat-wildfires/
[8] Detector flacără UV, http://www.tpub.com/celec/97.htm
[9] 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
[10] D. W. Smith, PIC in Practice. A Project-Based Approach, ISBN: 978-075-066-826-2, Second edition 2006
[11] J. Ganssle, T. Noergaard, F. Eady, L.A.R.W. Edwards, D.J. Katz, R. Gentile, K. Arnold, K. Hyder, and B. Perrin, Embedded Hardware: Know It All, ISBN: 978-0-7506-8584-9, April 2006.
[12] F. Molnar-Matei, I.R. Stanciu, Introducere în electronică analogică și digitală. Note de curs și îndrumător de laborator, Ed. Eurostampa, Timișoara, ISBN: 978-606-569-968-7, 2015
[13] I.R. Stanciu, F. Molnar-Matei, Sisteme de monitorizare și control în timp real, Ed. Eurostampa, Timișoara, ISBN: 978-606-569-542-9, 2013
[14] Bluetooth HC-05, http://www.electronicaestudio.com/docs/istd016A.pdf
[15] Mediu dezvoltare Easy EDA: https://easyeda.com/
[16] 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, 2008.
[17] 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.
[18] 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.
[19] Microchip, Compiled Tips ‘N Tricks Guide, 2009 Microchip Technology Inc, DS01146B
[20] John Morton , The PIC Microcontroller:Your Personal Introductory Course, Third edition, ISBN 0 7506 66641, 2005
Anexa 1.
Codul sursa MIKROC
//********DEFINE CONECTIVITY ACCORDING. TO SCHEMATIC**************//
# define ENA LATB.f3
# define IN1 LATB.f4
# define IN2 LATB.f5
# define IN3 LATD.f6
# define IN4 LATD.f7
# define ENB LATE.f2
# define COOL1 LATB.f0
# define COOL2 LATB.f1
# define RGB_B LATC.f5
# define RGB_G LATC.f4
# define RGB_R LATC.f3
# define POMPA LATB.f2
//************LCD CONECTIVITY DEFINITION [4-bit on D4-D7]****************//
sbit LCD_RS at LATD0_bit;
sbit LCD_EN at LATD1_bit;
sbit LCD_D4 at LATD2_bit;
sbit LCD_D5 at LATD3_bit;
sbit LCD_D6 at LATD4_bit;
sbit LCD_D7 at LATD5_bit;
sbit LCD_RS_Direction at TRISD0_bit;
sbit LCD_EN_Direction at TRISD1_bit;
sbit LCD_D4_Direction at TRISD2_bit;
sbit LCD_D5_Direction at TRISD3_bit;
sbit LCD_D6_Direction at TRISD4_bit;
sbit LCD_D7_Direction at TRISD5_bit;
//*******************GLOBAL VARIABLES****************//
/*char range [-128………..127]
signed int [-32768…….32767]
unsigned int [0…………65535]
float range [1.2E-38…+3.4E+38]*/
unsigned int i=0,IR_sen_dr=0,IR_sen_cen=0,IR_sen_st=0, FL_dr=0,FL_centr=0, FL_st=0,
aer=0, iteratie=0, iteratie_bec=0, contor_temp =0, contor_temp1 =0,
contor_interrupt=0, contor_pompa=0, contor_pompa1=0,
cntr_acc=0, contor_PWM=0, fl_sen = 1, PWM_speed=10;
float tensiune_acc=0;
char text[20], // numbers on LCD
conversion[30],// conversion for accelerometer
uart_rd=0, // read from UART communication
syst =0, mode=0;
//***************FUNCTION DECLARATIONS**************************//
void ADC_initialization();
void MPU6050_initialization();
void STARTUP_display();
void system_check();
void reset_dev();
//*************FUNCTION DEFINITIONS****************************//
void ADC_initialization(){
ADCON0 =0x00; // select channel 0 (AN0)
ADCON1 =0; // reset registru ADCON1 in prima faza
ADCON2 =0; // reset registru ADCON2 in prima faza
ADCON2.ADFM =1; // right justified
ADCON2.ACQT2=1; // 110 => 16 Tad (setare timp achizitie = 16 x Timp de conversie ADCON2.ACQT1=1; // 110 => 16 Tad (setare timp achizitie = 16 x Timp de conversie ADCON2.ACQT0=0; // 110 => 16 Tad (setare timp achizitie = 16 x Timp de conversie ADCON2.ADCS2=0; // 000 => FOSC /2
ADCON2.ADCS1=0; // 000 => FOSC /2
ADCON2.ADCS0=0; // 000 => FOSC /2
}
void CustomChar(const char *def, unsigned char n, char pos_row, char pos_char){
char i ;
LCD_Cmd(64 + n * 8) ;
for(i = 0 ; i<=7 ; i++){
LCD_Chr_Cp(def[i]) ;
}
LCD_Cmd(_LCD_RETURN_HOME) ;
LCD_Chr(pos_row, pos_char, n) ;
}
void STARTUP_display(){
Lcd_Out(2,3, "-FIREFIGHTENING-");
Lcd_Out(3,8, "ROBOT");
Delay_ms(4000);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1, "––-SENSORS––");
Delay_ms(600);
Lcd_Out(2,1, "1. Voltage ");
Delay_ms(600);
Lcd_Out(3,1, "2. Obstacle");
Delay_ms(600);
Lcd_Out(4,1, "3. Flame ");
Delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1, "––-MODULES––");
Delay_ms(600);
Lcd_Out(2,1, "4. Bluetooth ");
Delay_ms(600);
Lcd_Out(3,1, "5. Motor driver ");
Delay_ms(600);
Lcd_Out(4,1, "6. PIC18F46K80");
Delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1, "––-MODULES––");
Delay_ms(600);
Lcd_Out(2,1, "7. Water pump ");
Delay_ms(600);
Lcd_Out(3,1, "8. DC motors ");
Delay_ms(600);
Lcd_Out(4,1, "9. Coolers");
Delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1, "––-MODULES––");
Delay_ms(600);
Lcd_Out(2,1, "10. LCD 2004 ");
Delay_ms(600);
Lcd_Out(3,1, "11. RGB LED ");
Delay_ms(600);
Lcd_Out(4,1, "12. Battery pack");
Delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
}
void reset_dev(){
ENB=0; // L298 driver
ENA=0; // L298 driver
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
COOL1=0; // cooler 1
COOL2=0; // cooler 2
RGB_R =0; // RGB rosu
RGB_G =0; // RGB verde
RGB_B =0; // RGB albastru
POMPA =0; // comanda pompa apa
}
void system_check(){
Lcd_Out(1,1, "–-SYSTEM CHECK–-");
for(i=0;i<=2;i++){
RGB_R =1;
RGB_G =0;
RGB_B =0;
Delay_ms(200);
RGB_R =0;
RGB_G =1;
RGB_B = 0;
Delay_ms(200);
RGB_R =0;
RGB_G =0;
RGB_B = 1;
Delay_ms(200);
RGB_R =0;
RGB_G =0;
RGB_B =0;
Delay_ms(200);
}
COOL1=1;
COOL2=0;
Delay_ms(2000);
COOL1=0;
COOL2=0;
Delay_ms(2000);
COOL1=0;
COOL2=1;
Delay_ms(2000);
COOL1=0;
COOL2=0;
Delay_ms(2000);
COOL1=1;
COOL2=1;
Delay_ms(2000);
COOL1=0;
COOL2=0;
for(i=0;i<3;i++){
POMPA =1;
RGB_R=1;
Delay_ms(200);
POMPA=0;
RGB_R=0;
Delay_ms(500);
}
for(i=0;i<100;i++){
ENA=1; // L298 driver
ENB=1; // L298 driver
IN1=1; // L298 driver
IN2=0; // L298 driver
IN3=1; // L298 driver
IN4=0; // L298 driver
Delay_us(1900);
ENA=0; // L298 driver
ENB=0; // L298 driver
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
Delay_us(3000);
}
Delay_ms(500);
for(i=0;i<100;i++){
ENA=1; // L298 driver
ENB=1; // L298 driver
IN1=0; // L298 driver
IN2=1; // L298 driver
IN3=0; // L298 driver
IN4=1; // L298 driver
Delay_us(1900);
ENA=0; // L298 driver
ENB=0; // L298 driver
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
Delay_us(3000);
}
Delay_ms(500);
for(i=0;i<100;i++){
ENA=1; // L298 driver
ENB=1; // L298 driver
IN1=1; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=1; // L298 driver
Delay_us(2500);
ENA=0; // L298 driver
ENB=0; // L298 driver
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
Delay_us(3000);
}
Delay_ms(500);
for(i=0;i<100;i++){
ENA=1; // L298 driver
ENB=1; // L298 driver
IN1=0; // L298 driver
IN2=1; // L298 driver
IN3=1; // L298 driver
IN4=0; // L298 driver
Delay_us(2500);
ENA=0; // L298 driver
ENB=0; // L298 driver
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
Delay_us(3000);
}
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR);
}
void main() {
//BASIC SETTINGS ON SFR REGISTERS:
//***************************INTERNAL OSCILATOR 64 Mhz**************************
OSCCON = 0b01110000;
OSCTUNE.f6 = 1;
//***********************I/O direction set (0=out, 1=in)************************
TRISA = 0b00101111; // AN0-AN3 active as analogic input
TRISC = 0b10000000; // LATC.f7= Rx for UART
TRISB = 0b00000000; // out all
TRISD = 0b00000000; // out all
TRISE = 0b00000011; // out all
//***************************TIMER1 INTERRUPT***********************************
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 = 0b11111001; // SET INITIAL START TIMER VALUE-High (step = 100us)
TMR1L = 0b10110011; // SET INITIAL START TIMER VALUE-Low
PIE1.TMR1IE = 0; // Timer1 DISABLED (0 = disabled)
//*********************RESET all parameters at startup**************************
reset_dev();
//**********************MODULES INITIALIZATION**********************************
Lcd_Init(); // LCD initialization
Lcd_Cmd(_LCD_CLEAR); // functie Clear display after INIT
Lcd_Cmd(_LCD_CURSOR_OFF); // functie Cursor off after INIT
ADC_initialization();
UART1_Init(9600);
//***END SETTINGS***END SETTINGS***END SETTINGS***END SETTINGS***
//***MAIN ROUTINE STARTS:
STARTUP_display();
system_check();
PIE1.TMR1IE = 1;
Lcd_Out(2,1,"Vbat= ");
for(;;){
if (UART1_Data_Ready()) // If data is received execute
uart_rd = UART1_Read();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(2,1,"Vbat= ");
while(mode==1){ //while automat mode
PWM_speed =14;
if (UART1_Data_Ready()) // If data is received,
uart_rd = UART1_Read();
if(uart_rd == 'c')
mode = 1;
if(uart_rd == 'd')
mode = 0;
Lcd_Out(1,6,"[MODE= AUT]");
tensiune_acc = ADC_Read(6) * 1.22 / 0.317/1000;
FloatToStr(tensiune_acc, text);
text[4]=0;
Lcd_Out(2,6, text);
IR_sen_dr= ADC_Read(0);
IR_sen_cen= ADC_Read(1);
IR_sen_st= ADC_Read(2);
FL_dr=ADC_Read(3);
FL_centr = ADC_Read(4);
FL_st= ADC_Read(5);
while (mode==1 && IR_sen_dr>=4000 //atat timp cat nu se face detectie pe senzorii
&& IR_sen_cen >=4000 //de proximitate si detectie flacara
&& IR_sen_st>=4000
&& FL_dr >=4000
&& FL_centr >=4000
&& FL_dr >=4000){
FL_dr=ADC_Read(3); //senzor proxi dreapta
FL_centr = ADC_Read(4); //senzor proxi central
FL_st= ADC_Read(5); //senzor proxi stanga
if (UART1_Data_Ready()) // If data is received,
uart_rd = UART1_Read();
if(uart_rd == 'z')
fl_sen = 1;
if(uart_rd == 'y')
fl_sen = 0;
if (fl_sen == 1)
Lcd_Out(4,1,"Senzori flacara ON ");
else
Lcd_Out(4,1,"Senzori flacara OFF");
if( FL_dr <4000 && fl_sen==1){ //cat timp s-a facut detectie pe senzor flacara dreapta
PWM_speed =14;
IN1=1; // L298 driver
IN2=0; // L298 driver
IN3=1; // L298 driver
IN4=0; // L298 driver
Delay_ms(100);
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
while (FL_centr >400 && fl_sen==1){ //robotul se intoarce in directia flacarii
FL_centr = ADC_Read(4);
IN1=1; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
}
PWM_speed =12;
Delay_ms(300);
while( FL_centr <4000 && fl_sen==1){
FL_centr = ADC_Read(4); // detectie frontala flacara la rotire
COOL1=1; // actionare coolere & pompa
COOL2=1;
POMPA=1;
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
}
COOL1=0;
COOL2=0;
POMPA=0;
}
if( FL_centr <4000 && fl_sen==1){ //detectie centrala a flacarii
while (FL_centr <400 && fl_sen==1){
FL_centr = ADC_Read(4);
COOL1=1;
COOL2=1;
POMPA=1;
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
}
COOL1=0;
COOL2=0;
POMPA=0;
}
if( FL_st <4000 && fl_sen==1){ //detectie flacara senzor stanga
PWM_speed =14;
IN1=1; // L298 driver
IN2=0; // L298 driver
IN3=1; // L298 driver
IN4=0; // L298 driver
Delay_ms(100);
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
while (FL_centr >400 && fl_sen==1){
FL_centr = ADC_Read(4); //rotire in directia flacarii (stanga)
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=1; // L298 driver
IN4=0; // L298 driver
}
PWM_speed =12;
Delay_ms(300);
while( FL_centr <4000 && fl_sen==1){
FL_centr = ADC_Read(4);
COOL1=1;
COOL2=1;
POMPA=1;
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
}
COOL1=0;
COOL2=0;
POMPA=0;
}
IN1=1; // L298 driver //rulare directie inainte
IN2=0; // L298 driver
IN3=1; // L298 driver
IN4=0; // L298 driver
if (UART1_Data_Ready()) // If data is received,
uart_rd = UART1_Read();
if(uart_rd == 'c') //switch mode
mode = 1;
if(uart_rd == 'd')
mode = 0;
IR_sen_dr= ADC_Read(0); //citire valori senzori proxi
IR_sen_cen= ADC_Read(1);
IR_sen_st= ADC_Read(2);
}
if ( IR_sen_dr<700){
while (IR_sen_dr<4000){
PWM_speed =23;
IR_sen_dr= ADC_Read(0);
IN1=0; // L298 driver
IN2=1; // L298 driver
IN3=0; // L298 driver
IN4=0; // L298 driver
Delay_ms(50);
}
}
if ( IR_sen_st<700){
while (IR_sen_st<4000){
PWM_speed =23;
IR_sen_st= ADC_Read(2);
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=1; // L298 driver
Delay_ms(50);
}
}
if ( IR_sen_cen<700){
while (IR_sen_cen<4000){
PWM_speed =23;
IR_sen_cen= ADC_Read(1);
IN1=0; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=1; // L298 driver
Delay_ms(100);
}
}
}
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(2,1,"Vbat= ");
Lcd_Out(1,6,"[MODE= MAN]");// afisare mod pe LCD
while(mode==0){
InttoStr(PWM_speed, text); // afisare viteza pe LCD
Lcd_Out(2,15, text);
if ( ADC_Read(1) <4000 || ADC_Read(0) <4000|| ADC_Read(2) <4000)
RGB_R =1;
else
RGB_R=0;
if ( ADC_Read(1) <4000) // la detectie obst. frontal= afisre pe LCD
Lcd_Out(4,8, "!OBS!");
if ( ADC_Read(1) >=4000)
Lcd_Out(4,8, " ");
if ( ADC_Read(0) <4000) // la detectie obst. frontal= afisre pe LCD
Lcd_Out(4,1, "!OBS!");
if ( ADC_Read(0) >=4000)
Lcd_Out(4,1, " ");
if ( ADC_Read(2) <4000) // la detectie obst. frontal= afisre pe LCD
Lcd_Out(4,16, "!OBS!");
if ( ADC_Read(2) >=4000)
Lcd_Out(4,16, " ");
if(UART1_Data_Ready()) // If data is received,
uart_rd = UART1_Read();
if(uart_rd == 'c') //schimbare mod functionare man-aut
mode = 1;
if(uart_rd == 'd') //schimbare mod functionare man-aut
mode = 0;*/
//–––- citire tensiune acumulatori (AN6)
tensiune_acc = ADC_Read(6) * 1.22 / 0.317/1000;
FloatToStr(tensiune_acc, text);
text[4]=0;
Lcd_Out(2,6, text); //afisare tensiune pe LCD*/
if (UART1_Data_Ready()) { // If data is received,
uart_rd = UART1_Read(); // read the received data,
if(uart_rd == 'c') //schimbare mod functionare man-aut
mode = 1;
if(uart_rd == 'd') //schimbare mod functionare man-aut
mode = 0;
if (uart_rd == 'e'){ // incrementare PWM = viteza de deplasare
PWM_speed ++;
if (PWM_speed>=30)
PWM_speed=30;
delay_ms(90);
}
if (uart_rd == 'f'){ // daca s-a trimis caracterul "f", se decrementeaza PWM
if (PWM_speed==0)
delay_ms(50);
else
PWM_speed –;
delay_ms(50); // delay pentru switch la apasare
}
if(uart_rd == '3') { // directie inainte
IN1=1; // L298 driver
IN2=0; // L298 driver
IN3=1; // L298 driver
IN4=0; // L298 driver
}
if(uart_rd == '5') { //directie inapoi
IN1=0; // L298 driver
IN2=1; // L298 driver
IN3=0; // L298 driver
IN4=1; // L298 driver
}
if(uart_rd == '7') { // directie stanga
IN1=0; // L298 driver
IN2=1; // L298 driver
IN3=1; // L298 driver
IN4=0; // L298 driver
}
if(uart_rd == '6') { //directie dreapta
IN1=1; // L298 driver
IN2=0; // L298 driver
IN3=0; // L298 driver
IN4=1; // L298 driver
}
if(uart_rd == '4') { // momentul in care se face release buttor in interfata
ENA=0; // L298 driver
ENB=0; // L298 driver
}
if (UART1_Data_Ready()) // If data is received,
uart_rd = UART1_Read();
if(uart_rd == '8') { // comanda pornire coolere
COOL1=1;
COOL2=1; // L298 driver
Lcd_Out(3,13, "COOL ON ");
}
if (UART1_Data_Ready()) // If data is received,
uart_rd = UART1_Read();
if(uart_rd == '9') { // comanda oprire coolere
COOL1=0;
COOL2=0; // L298 driver
Lcd_Out(3,13, "COOL OFF");
}
if (UART1_Data_Ready()) // If data is received,
uart_rd = UART1_Read();
if(uart_rd == 'a' ){ //comanda pornire pompa apa
POMPA=1;
Lcd_Out(3,1, "POMP ON ");
}
if (UART1_Data_Ready()) // If data is received,
uart_rd = UART1_Read();
if(uart_rd == 'b'){ //comanda oprire pompa apa
POMPA=0;
Lcd_Out(3,1, "POMP OFF");
}}}}}
//******************inrerupere generata pe TIMER1*****************************//
void interrupt (){
contor_interrupt ++;
contor_PWM ++;
if (contor_interrupt <100) // LED RGB
RGB_G=1;
if (contor_interrupt >=100 && contor_interrupt<=9000)
RGB_G=0;
if (contor_interrupt >9000){
RGB_G=0;
contor_interrupt =0;
}
if(contor_PWM <= PWM_speed && mode==1){
ENA =1;
ENB =1;
}
if(contor_PWM <= PWM_speed && uart_rd !='4'
&& uart_rd !='1'
&& uart_rd !='2'
&& uart_rd !='8'
&& uart_rd !='9'
&& uart_rd !='a'
&& uart_rd !='b'
&& uart_rd !='c'
&& uart_rd !='d'
&& uart_rd !='e'
&& uart_rd !='f'
&& mode==0
){
ENA =1;
ENB =1;
}
if(contor_PWM > PWM_speed && contor_PWM <= 30){
ENA =0;
ENB= 0;
}
if(contor_PWM > 30){
contor_PWM =0;
}
// SET INITIAL START TIMER VALUE-Low
PIR1.TMR1IF = 0; //Clear TMR1IF -> interrupt flag
TMR1H = 0b11111001; // SET INITIAL START TIMER VALUE-High (step = 100us)
TMR1L = 0b10110011; // SET INITIAL START TIMER VALUE-Low
}
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: Capitolul 2. Sinteza bibliografica si studiul actual al tehnicilor de stingere a incendiilor 5 2.1. Sisteme robotice pentru stingerea incendiilor 5… [309245] (ID: 309245)
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.
