Fig.1.1. Figură explicativă tehnologie de forare pe orizontală 2. [305827]
Cuprins
Capitolul 1.
[anonimizat], [anonimizat] o extindere tot mai accentuată. Foarte des apare necesitatea de extindere a [anonimizat], [anonimizat], de televiziune prin cablu etc. De multe ori aceste rețele trebuie să traverseze prin zone deja ocupate cu diverse bariere de tip natural (canale, râuri, lacuri) sau artificial ([anonimizat], șosele). Soluțiile adoptate până recent pentru traversarea acestor blocaje erau soluții scumpe. [anonimizat], se realiza un pod special doar pentru trecerea rețelei luate în considerare. [anonimizat], se îngropa rețeaua în pământ și se monta linia la loc.
În prezent, a apărut o nouă tehnologie de traversare a [anonimizat] [1]. Forarea pe orizontală este o tehnologie prin intermediul căreia se sapă un traseu tubular pe sub obstacolul întâlnit. Prin traseul tubular creat se poate introduce rețeaua care se dorește a fi extinsă. [anonimizat] o deservește respectivul obstacol. O imagine explicativă a ceea ce înseamnă forarea pe orizontală se poate observa în Fig.1.1 [2].
Fig.1.1. Figură explicativă tehnologie de forare pe orizontală [2].
Scopul principal al acestui proiect este acela de a realiza un model la scară redusă a unei mașini de forat pe orizontală pentru a se putea demonstra posibililor clienți modul de funcționare a unei foreze reale.
Ideea de realizare a acestui proiect a pornit de la actualul loc de muncă la care mă ocup de vânzarea și punerea în funcțiune a forezelor pe orizontală. [anonimizat] a [anonimizat] a explica clienților modul de funcționare a echipamentului. Uneori clienții solicitau chiar o [anonimizat] a vedea potențialii clienți sau utilizatori modul de manevrare a acestui echipament.
În aceste condiții am dorit să realizez la scară mică un echipament care să poată demonstra principiul de forare utilizat de aceste foreze. La realizarea modelului se renunță la anumite funcțiuni care nu prezintă importanță pentru demonstrarea funcționării modelului. Astfel, se va implementa funcția de găurire și funcția de înaintare a forezei, alături de modul de control al acesteia care poate fi manual sau automat. [anonimizat] o nouă funcție care se ocupă de direcționarea automată a burghiului pentru situațiile în care trebuie schimbată direcția de forare. În prezent acest lucru se realizează manual de către operatorul de pe mașină.
[anonimizat] 2 se va face o [anonimizat] 3 și 4 conțin partea practică a lucrării. În capitolul 3 se prezintă structura hardware a sistemului, iar în capitolul 4 se prezintă partea de proiectare și implementare software. Ultimul capitol prezintă concluziile finale ale acestei lucrări.
Capitolul 2.
Sisteme de forare pe orizontală pentru instalarea țevilor fără săparea tranșeelor
În cadrul acestui capitol se va face o scurtă prezentare a tehnologie de forare pe orizontală și de asemenea a modului de funcționare a mașinii care se ocupă de acest lucru. Mașina aleasă pentru a fi descrisă este TERRA-JET. În aceste condiții se vor analiza condițiile în care se poate realiza o forare pe orizontală, modul de funcționare a mașinii de forare pe orizontală și modul de conducere a acestei mașini pentru a se putea urmării un traseu prestabilit.
2.1. Tipul solului adecvat pentru sistemele de forare orizontală dirijată
Sistemele de forare orizontală dirijată pot fi utilizate numai în teren care poate fi umezit. Terenul adecvat pentru sistemul de forare orizontală dirijată este format din argilă și nisip. Terenul alcătuit din pietriș și bucăți desfăcute de piatră poate fi în general umezit. Terenul alcătuit din pietre/ roci compacte nu poate fi umezit.
În Tabelul 2.1 se prezintă posibilitatea de utilizare a tehnologiei în funcție de caracteristicile pe care le are solul în care se va executa forarea [3]. Din Tabelul 2.1 se poate deduce dacă pentru o anumită porțiune de teren se poate aplica această tehnologie de forare. Bineînțeles că aceste caracteristici sunt particulare. Ele sunt aferente mașinii de forare analizate.
Tabelul 2.1. Caracteristici sol pentru mașină forare pe orizontală.
LEGENDĂ
2.2. Stabilirea traseului de forare
Traseul de forare depinde de mai multe caracteristici, atât a terenului care urmează a fi forat, cât și a mașinii de forare utilizată. În aceste condiții, în continuare se prezintă câteva elemente de care trebuie să se țină cont la stabilirea traseului de forare [3].
Adâncimea forării este limitată de caracteristicile echipamentului care poate identifica poziția capului de forare. Astfel, capul de forare poate fi localizat până la o anumită adâncime de către un echipament special creat în acest scop. Această adâncime maximă este menționată în manualul operațional al sistemului.
Deplasarea depinde de asemenea de posibilitatea de monitorizare a poziției capului de forare. Astfel, în timpul forării dirijate este necesar ca operatorul să se poată mișca liber deasupra liniei de forare fără nici un obstacol pentru a putea localiza capul de forare. Unele sisteme de localizare permit localizarea anumitor părți ale forării fără a fi necesară deplasarea deasupra capului de forare.
Spațiul minim pentru sistemul de forare este de asemenea un element important al procesului de forare. Pentru a determina linia de forare este necesar să se ia în considerare spațiul minim pentru sistemul de forare. Dacă nu există un spațiu de manevră în zona în care se montează mașina de forare, aceasta nu va avea posibilitatea de a urmării toți parametrii necesari forării. Acest spațiu minim este menționat în manualele de operare ale sistemului de forare utilizat.
Ținta forării reprezintă capătul final al tunelului săpat. În punctul țintă trebuie să fie suficient spațiu pentru ca sapa de forare să iasă afară. Există posibilitatea ca acest spațiu să fie asigurat prin excavare locală a unei groapă țintă. Groapa țintă trebuie să fie suficient de largă astfel încât să permită tragerea înăuntru a noilor țevi. În plus, trebuie să fie suficient spațiu pentru a așeza țeava în spatele punctului țintă înainte de a începe lărgirea și tragerea țevilor.
Împrejmuire în timpul forării dirijate este obligatorie pentru asigurarea măsurilor de protecție a muncii. Se va împrejmui atât utilajul de forare (mai exact spațiu minim pentru sistemul de forare), cât și locul de pătrundere în sol a forezei.
Rețele existente în pământ sunt un impediment suplimentar în realizarea unei forări adecvate. Pentru a evita orice pagubă, este imperativ necesar să se verifice existența altor cabluri, linii, rețele de țevi sau alte tipuri de servicii în zona de forare. Trebuie să se determine poziția lor exactă. În cazul în care nu se cunoaște poziția exactă, se va săpa o groapă de control. Orice operator este responsabil pentru asumarea acestor riscuri și pentru protecția persoanelor, serviciilor și a altor echipamente împotriva vătămărilor și a defecțiunilor.
Distanța față de rețele paralele este impusă de normative. Linia de forare trebuie determinată astfel încât să existe o distanță de minim 1 m față de rețelele paralele. În cazul rețelelor electrice, distanța trebuie să fie suficient de mare astfel încât cablurile electrice să nu influențeze sistemul de localizare. De obicei această distanță este de minim 1.5 m.
Distanța față de rețelele transversale este de asemenea impusă prin normative. Linia de forare trebuie determinată astfel încât distanța față de rețelele transversale să fie minim 0.5 m în cazul unei forări în linie dreaptă și de cel puțin 1 m în cazul forării în zigzag. Pentru a se înțelege mai bine acest lucru, în Fig.2.1 se prezintă o situație concretă de traseu de forare în zone în care există rețele care trebuie ocolite [4].
Totuși la realizarea forării în zigzag trebuie acordată o atenție deosebită traseului urmărit. Trebuie știut faptul că după realizarea forării, urmează un procedeu de lărgire a găurii de forare și tragere a conductelor necesare realizării noii rețele. Această lărgire poate conduce la reducerea gradului de curbare în anumite zone ale forării, în funcție și de terenul care a fost forat. Acest lucru poate fi observat în Fig.2.2 în care la procedeul de lărgire a găurii, linia de forare nu mai este urmărită în detaliu, apărând o îndreptare a traseului de forare [4].
Fig.2.1. Exemplu de forare prin zonă cu rețele transversale.
Fig.2.2. Exemplu de îndreptare a traseului de forare la etapa de lărgire a traseului.
Pentru evitarea fenomenului de îndreptare a traseului trebuie respectată curbarea maxim permisă pentru prăjina de forare. Linia de forare trebuie stabilită astfel încât prăjinile nu se vor curba mai mult decât maximul permis, prezentat în Tabelul 2.2 [4].
Tabelul 2.2. Raze de curbură acceptate pentru diferite tipuri de prăjini.
Dacă prăjinile se curbează mai mult decât maximul permis, în orice moment al forării, există riscul ca prăjinile să se îndoaie prea mult. Prăjinile îndoite prea mult vor trebui aruncate și înlocuite întrucât există riscul ca acestea să se rupă în timpul unor forări viitoare
Calcularea „curbei de intrare” (schimbarea orizontală a direcției) reprezintă cea mai importantă parte în cadrul etapei de stabilire a traseului de forare. Curba de intrare este formată dintr-o parte dreaptă și o parte curbă. În Fig.2.3 se prezintă modul de stabilire a unghiului de pătrundere în sol în funcție de adâncimea la care se dorește a se ajunge. Aceasta reprezintă partea de „dreaptă” a curbei de forare. Diagrama din Fig.2.3, indică adâncimea atinsă de capul de forare după o anumită lungime parcursă în funcție de înclinația rampei de forare. Partea de curbare se prezintă în Fig.2.4 [4]. Această parte de curbare are rolul de a se atinge nivelul orizontal al forării. În acest scop este necesar să se înceapă ghidajul sapei de forare din timp către suprafață [1].
Fig.2.3. Partea dreaptă de înaintare a prăjinii forezei.
Fig.2.4. Partea de curbare apărută în înaintarea prăjinii forezei.
În Fig.2.4 se poate observa două componente de înaintare. Unghiul α reprezintă unghiul față de sol de intrare a prăjinii în sol. Raza de curbură Rmin reprezintă raza stabilită pentru realizarea aducerii la orizontală a prăjinii. Raza de curbură depinde de grosimea prăjinii de forare. Astfel, cu cât grosimea prăjinii de forare este mai mare cu atât aceasta va avea o rază de curbare mai mare. Acest lucru se datorează în mare parte faptului că se dorește luarea tuturor măsurilor necesare pentru a împiedica îndoirea prăjinii pe timpul forării.
În funcție de cele două componente se poate stabilii și traseul pe care trebuie să îl urmărească prăjina. Acest traseu este descris de două coordonate (a și b), care pot fi identificate în Fig.2.4.Valorile minime a acestor două coordonate în funcție de cele două componente de înaintare sunt prezentate în Tabelul 2.3 [4].
Tabelul 2.3. Distanțele minime (adâncime și lungime) de deplasare a prăjinii în funcție de raza de curbură și unghiul de pătrundere în sol.
În funcție de grosimea prăjinii și în funcție de unghiul de intrare în sol se poate determina și adâncimea minimă la care se va realiza forarea pe orizontală. De exemplu, pentru o prăjină cu diametru de 40/30 mm la care îi corespunde o rază de curbură de 15 m, se poate stabilii adâncimea minimă de forare ca și funcție de unghiul de atac al solului [3]. Acestea sunt prezentate în Fig.2.5.
Fig.2.5. Adâncimea minimă de forare funcție de unghiul de atac al solului.
Pentru orice schimbare a adâncimii de forare, ce se va realiza pe parcursul forării orizontale, trebuie să se țină cont de aceste considerente. Practic, trecerea de la o adâncime la alta necesită un spațiu de manevră care depinde în mod direct de raza de curbură pe care o suportă prăjina utilizată.
2.3. Forarea dirijată
Forarea dirijată reprezintă procedeul prin intermediul căruia se stabilesc toți pașii care trebuie urmați, astfel încât prăjina utilizată să urmărească în detaliu traseul proiectat [1].
Forarea dirijată și tragerea țevilor sunt posibile doar prin utilizarea fluidului de forare. Fluidul de forare îndeplinește următoarele scopuri:
desfacerea pământului în timpul forării dirijate;
reducerea frecării dintre canalul săpat și instrumentele de forare și, în timpul tragerii țevilor, între canalul săpat și țevi;
stabilizarea canalului săpat pentru a evita prăbușirea acestuia;
transportarea pământului prin canalul forat.
Aceste cerințe pot fi îndeplinite prin utilizarea bentonitei sau a unor polimeri speciali. Sistemele de forare orizontală dirijată TERRA-JET, TERRA CITY-JET și TERRA MINI-JET pot fi utilizate cu toate fluidele de forare tradiționale. Pompele de înaltă presiune pentru lichidul de forare sunt echipate cu pistoane și prin urmare pot să funcționeze și cu mixturi de bentonită cu vâscozitate mare.
În continuare se vor prezenta toate etapele care trebuie parcurse pentru realizarea unei forări dirijate.
1. Începerea forării dirijate. Pentru a începe forarea dirijată capul de forare trebuie montat pe prima prăjină de forare (Fig.2.6). Între capul de forare și prima prăjină poate fi asamblat un filtru. Un cartuș filtrant și o garnitură de cauciuc cu rol de etanșare vor fi introduse în capul de forare și în filtrul prăjinii. Aceste cartușe filtrante au o plasă de 0.5 mm în cazul în care se folosește ca fluid de forare TERRA-EJACTOMER [4]. Dacă se folosește bentonită vor fi utilizate cartușe filtrante cu plasă de 1.0 mm.
Fig.2.6. Montarea capului de forare pe prima prăjină.
2. Testarea curgerii fluidului de forare. Înainte de a introduce capul de forare în pământ, trebuie testată curgerea fluidului de forare. Astfel, se pornește fluidul de forare pentru aproximativ 10 secunde, cu o presiune de 50 bari. Fluidul de forare trebuie să curgă prin toate cele 4 duze ale capului de forare. În caz contrar, duzele vor fi curățate sau înlocuite
3. Pătrunderea în pământ. După efectuarea testului privind curgerea fluidului de forare se poate începe forarea. Atunci când forarea începe de la suprafață este necesar să se sape o groapă mică de pornire. Peretele frontal al acestei gropi de pornire trebuie să fie în unghi drept față de axa prăjinii. Vârful sapei trebuie să fie la cel puțin 200 mm adâncime față de punctul de pornire așa cum se poate observa și în Fig.2.7.
Dacă groapa de start se face într-un drum, va trebui dat la o parte asfaltul (pavelele, după caz). Capul de forare este împins până când vârful acestuia atinge peretele gropii de start. Se pornește fluidul de forare, iar capul de forare, care acum a început să se rotească, este introdus în pământ. Capul de forare se apasă ușor cu o bucată de lemn care va împiedica ridicarea sau devierea capului. Ca o regulă, la începutul forării capul de forare nu este suficient acoperit și prin urmare nu poate fi centrat. Aceasta se poate realiza de obicei după 0.5 m [4].
Fig.2.7. Realizarea gropii de începere a unei forări.
După introducerea capului de forare în sol, se poate trece la stabilirea adâncimii de forare așa cum s-a prezentat în paragraful precedent. Se va stabilii până la nivel înaintează freza drept, după care se începe procedeul de curbare. În cazul în care forare se realizează la adâncimi mici, se poate excava pământul pentru verificarea poziționării prăjinii așa cum se poate observa în Fig.2.8. În cazul în care traseul nu este cel corespunzător se poate realiza mici ajustări prin repoziționarea capului de forare.
Fig.2.8. Realizarea gropii de începere a unei forări.
4. Protocolul de localizare și de forare. În scopul de a direcționa cu precizie capul de forare, acesta trebuie localizat la fiecare metru din linia de forare. Se poate realiza localizarea și la 1.5 m sau la 3 m, în funcție de acuratețea dorită a forării și de viteza de forare. Banda pentru măsurare de 50 m va fi așezată de-a lungul liniei de forare. Ca regulă, poziția zero este exact punctul de la suprafață, unde prăjina atinge pământul (Fig.2.9).
Fig.2.9. Poziționarea benzii de măsurare a traseului de forare.
Toate rețelele transversale din zona liniei de forare vor fi desenate în protocolul de forare înainte de a începe forarea dirijată. Fiecare punct de localizare este înscris în protocolul de forare (adâncimea și poziția), așa cum se poate observa în Fig.2.10 [4].
Fig.2.10. Protocol forare: trasarea poziției reale a capului de forare.
5. Schimbarea direcției. Vârful sfredelului avansează prin pământ datorită combinării următoarelor:
Împingere: împingere statică (fără rotație) a capului de forare cu ajutorul prăjinilor;
Rotație: pentru a fora drept, capul de forare se rotește și găurește pământul;
„Cu jet”: fluidul de forare este pompat prin duzele din vârful capului cu mare presiune. Fluidul de forare iese din duze frontal și în laterale. Fluidul de forare disloca astfel pământul, ceea ce face împingerea și rotația mai ușoară.
În primul rând la stabilirea direcție de forare trebuie stabilit presiunea lichidului de forare. Astfel, în funcție de condițiile (caracteristicile) terenului este necesară o presiune mai mare sau mai mică a fluidului de forare în timpul forării. În cazul în care terenul este moale și umed, presiunea fluidului de forare este reglată la 20-30 bari. Fluidul de forare umezește tunelul forajului și împiedică înfundarea duzelor. În cazul unui teren tare, jetul de fluid trebuie să disloce pământul și să umezească tunelul forajului. Prin urmare presiunea necesară a fluidului de forare este de 50-125 bari.
Forarea în linie dreaptă. Pentru forarea în linie dreaptă, sapa de forare este rotită către dreapta („rotație înainte”) la turație maximă și simultan este împins înainte [Fig.2.11]. Presiunea fluidului de forare este la 20-125 bari [4].
Fig.2.11. Forarea în linie dreaptă (simultan ÎMPINGERE + ROTAȚIE + CU JET).
Prăjina de forare trebuie să se rotească întotdeauna în sensul acelor de ceasornic („rotație înainte”) în timpul forării. Dacă se rotesc la stânga (în sens invers acelor de ceasornic), se poate deschide cuplajul prăjinilor și se pot pierde capul de forare sau prăjinile.
Ghidare (schimbarea direcției). Pentru a schimba direcția de forare, zona direcțională a sapei de forare trebuie poziționată în direcția dorită (Fig.2.12). În momentul în care sapa de forare este îndreptată în direcția dorită, aceasta este împinsă în pământ înainte (THRUST – împingere) fără a se roti. În plus, se pompează fluidul de forare prin capul de forare. Unghiul de rotire al capului de forare este măsurat de sonda din capul de forare. Acesta este indicat pe ecranul sistemului de localizare și pe monitor. Ordinele de corecție sunt denumite după cadranul ceasului. Vorbim de „timp” după ceas (Fig.2.13) [4]:
corecție în sus = ora 12;
corecție în jos = ora 6;
corecție la stânga = ora 9;
corecție la dreapta = ora 3;
Fig.2.12. Ghidarea capului de forare (numai ÎMPINGERE + CU JET, fără ROTAȚIE).
Fig.2.13. Setarea direcție de forare în funcție de ceas.
În timpul acestui proces, forța de împingere poate determina îndoirea prăjinilor de la suprafață. Ancorarea sistemului de forare trebuie supravegheată permanent. Rezistența prea mare a terenului poate îndoi prăjinile și poate scoate sistemul de forare din poziția sa ancorată.
În cazul unei rezistențe foarte mari, se rotește capul de forare pentru o perioadă scurtă de timp și apoi se împinge iar în poziția dorită. Această procedură se poate repeta de mai multe ori până când se realizează corecția direcției. În cazul unui teren tare (de exemplu pietriș) capul de forare este ghidat prin poziționarea lui în poziția dorită de rotire. Apoi este împins în teren prin rotirea lui ușoară cu +/- „o oră” până la atingerea „timpului” dorit. În același timp este împins înainte.
Intensitatea corecției la schimbarea direcției. Corecția dorită a direcției este obținută prin virări ușoare sau puternice, în funcție de condițiile terenului. Pentru a vira puternic, capul de forare este împins în pământ pe o lungime de prăjină, fără a fi rotit. Pentru viraj lent, capul de forare este rotit pentru 1/3 lungime prăjină, a doua treime este împinsă (fără rotație) și ultima treime este rotită din nou.
În Fig.2.14 se reprezintă 5 intensități diferite ale corecțiilor direcției. Prima variantă prezentată în Fig.2.14 reprezintă varianta în care se înaintează fără a se modifica direcția de deplasare a forării. Această situație corespunde momentului în care foreza este setată în poziție orizontală și se dorește doar înaintarea pe această direcție. Următoarele patru exemple prezintă stabilirea modului de înaintare pe durata realizării virajelor. Astfel că dacă se dorește viraje lente se apelează la una din variantele 2 sau 3. Acestea combină înaintarea forțată cu înaintarea prin rotație, cea din urmă fiind predominantă. Dacă se dorește o curbare mai forțată se apelează la variantele 4 sau 5 [3], [4].
Fig.2.14. Exemple de stabilire a Intensitatea corecției la schimbarea direcției.
Varianta 4 seamănă cu variantele 2 și 3 cu precizarea că partea de înaintare forțată este predominantă. Varianta 5 conține doar parte de înaintare forțată care asigură cel mai ridicat nivel de cotire. Această variantă trebuie supravegheată atent, pentru că efortul la care sunt supuse părțile metalice pot conduce la deteriorarea acestora.
2.4. Exemplu de forare. Traversarea albiilor de râu.
Se ia în considerare un exemplu de traversare a albiei unui râu. În acest sens se va considera situația de la fața locului descrisă de Fig.2.15 [4].
Fig.2.15. Desenarea terenului ce urmează a fi traversat împreună cu rețelele transversale din zonă.
Așa cum se observă în Fig.2.15, în cazul unui teren neregulat, suprafața terenului și poziția rețelelor transversale din pământ vor fi desenate în protocolul de forare înainte de începerea forajului. Linia efectivă de forare în timpul forării se marchează întotdeauna ținând cont de suprafața terenului (și nu de nivelul zero).
Următorul pas care trebuie parcurs înainte de începerea forării este acela de realizare a planului de lucru. Planul de lucru reprezintă un grafic cotat, din care reiese care trebuie să fie poziția capului de forare față de nivelul solului la diverse distanțe depărtare de punctul de începere a forării. Acest grafic se prezintă în Fig.2.16 și se va folosi pe toată durata forării pentru ghidarea prăjinilor în procesul de forare [4].
Fig.2.16. Desen la scară a terenului și a traseului forajului.
Un factor important pe durata forării este acela de identificarea poziției de capului de forare la diverse distanțe față de punctul de începere a operației. Pentru realizarea acestui lucru trebuie parcurși mai mulți pași care vor fi descriși în continuare.
1. Localizare pe un teren neregulat. În situația în care terenul este neregulat, măsurătoarea care determină adâncimea la care se află capul frezei poate fi eronată. Pentru eliminarea erorilor, și doar în situațiile în care se impune, se va folosi o scândură de lemn pentru poziționarea exactă a terasamentului și a pantei, așa cum se poate observa în Fig.2.17 [4].
Fig.2.17. Metodă de măsurare a adâncimii la care se află capul frezei de forare pe teren neregulat.
2. Localizare în timpul traversării albiilor de râu. Unele sisteme de localizare permit localizarea capului de forare de pe ambele părți ale râului în timpul traversării acestuia. În acest caz nu este necesară folosirea unei bărci pentru localizarea capului de forare.
Dacă sistemul de localizare nu este echipat cu această caracteristică, capul de forare va trebui localizat în timpul traversării albiilor de râu cu ajutorul unei platforme de lucru din lemn care să stea pe apă deasupra capului de forare (Fig.2.18). Această platformă de lucru măsoară aproximativ 2m x 2m. Poate fi folosită și o barcă din material non-metalic în locul platformei din lemn (din plută sau plastic) [4].
Fig.2.18. Metodă de măsurare a adâncimii la care se află capul frezei de forare în zona albiei râului.
Adâncimea totală de localizare este:
înălțimea platformei de lucru deasupra nivelului apei;
adâncimea apei;
adâncimea forării sub nivelul râului
În timpul traversării albiilor de râu linia de forare trebuie să fie la cel puțin 2 metri sub nivelul albiei (fundul) râului.
Pentru localizarea exactă, platforma de lucru va fi mutată de-a lungul unui cablu sau funii fixate. Aceasta va fi ținută în poziție de alte 4 funii. Poziția platformei de lucru trebuie să fie deasupra liniei de forare (Fig.2.19) [4].
Fig.2.19. Ancorarea platformei de localizare pentru a elimina erorile ce pot apărea datorită curenților de apă.
După ce forarea s-a finalizat cu succes trebuie trecută la următoarea etapă care constă din lărgirea traseului prin intermediul unui lărgitor special. Tunelul forat trebuie lărgit pentru a trage o țeavă. Lărgitorul (freza de lărgire) trebuie să fie mai mare decât noua țeavă. Diametrul minim al lărgitorului este determinat prin următoarea regulă:
tunel cu lungimea de până la 120 m: diametrul lărgitorului cu minim 50 mm mai mare decât al țevii PE;
tunel cu lungimea de peste 120 m: diametrul lărgitorului cu minim 100 mm mai mare decât al țevii PE
O imagine orientativă privind legătura dintre diametrul țevii care va fi instalată, distanța forată și diametrul lărgitorului care va fi folosit se poate vedea în Tabelul 2.4 [4].
Tabelul 2.4. Distanțele minime (adâncime și lungime) de deplasare a prăjinii în funcție de raza de curbură și unghiul de pătrundere în sol.
În cazul unor lărgitoare de diametre mici (160 – 215 mm, în funcție de sistemul de forare) este posibil, de obicei, să se lărgească forajul imediat la diametrul necesar și să se tragă țeava simultan. Tragerea imediată a țevilor nu este permisă pentru lărgitoare de diametre mai mari (mai mari de 160 – 215 mm, în funcție de sistemul de forare)
În cazul unor lărgitoare de diametre mari (mai mari de 160 – 215 mm, în funcție de sistemul de forare) și în cazul unui teren tare este necesară lărgirea intermediară. În plus, lărgitorul cu diametrul final va fi tras fără țeavă. După această operație finală de lărgire țeava sau legătura de țevi poate fi trasă.
De exemplu, dacă este necesară atingerea unui diametru de 300 mm pentru tunelul de forare, sunt necesare următoarele operații de lărgire intermediară:
în cazul unui teren moale:
lărgire intermediară cu lărgitor cu diametrul 215 mm, fără țeavă;
lărgire intermediară cu lărgitor cu diametrul de 300 mm, fără țeavă;
tragerea țevilor cu lărgitor cu diametrul de 300 mm sau 260 mm.
în cazul unui teren tare:
lărgirea intermediară cu lărgitor cu diametrul 160 mm, fără țeavă;
lărgirea intermediară cu lărgitor cu diametrul 215 mm, fără țeavă;
lărgirea intermediară cu lărgitor cu diametrul 260 mm, fără țeavă;
lărgire intermediară cu lărgitor cu diametrul 300 mm, fără țeavă;
tragerea țevilor cu lărgitor cu diametrul de 300 mm sau 260 mm.
Se recomandă tragerea țevilor cu un lărgitor care are diametrul puțin mai mic decât diametrul tunelului forat. Cu toate acestea, trebuie să fie mai mare decât diametrul exterior al manșonului de tragere.
În timpul lărgirilor intermediare, pivotul este asamblat în spatele lărgitorului. Prăjinile sunt conectate la pivot. Prăjinile din spatele lărgitorului nu trebuie să se răsucească în timpul lărgirii. Viteza de retragere în timpul lărgirilor intermediare fără țeavă nu trebuie să fie prea mare.
2.5. Comentarii privind sistemul analizat.
În urma analizei sistemului de forare s-a ajuns la concluzia că pentru modelarea completă a acestuia trebuie avut în discuție următoarele:
utilajul de forare poate fi realizat în structură fixă sau mobilă. Pentru a transporta varianta fixă este necesar ca autovehiculul de transport să dețină o macara de încărcare. Varianta mobilă conține roți de deplasare cu ajutorul cărora utilajul poate fi încărcat pe platforma de transport;
utilajul de forare trebuie să structură prin intermediul căreia de poate asigura unghiul de pătrundere în solul ce urmează a fi forat;
utilajul de forare trebuie să aibă funcția de burghiu. Prin intermediul acestei funcții se realizează dislocarea terenului pentru realizarea tunelului în conformitate cu proiectul stabilit. Totodată această funcție trebuie să permită rotirea cu precizie a capului de forare pentru a se putea realizarea schimbărilor de direcție;
utilajul de forare trebuie să aibă funcția de împingere a ansamblului prăjină-cap forare. Această funcție se utilizează atât la înaintarea în tunel cu funcția de burghiu activată , cât și la realizarea schimbărilor de direcție programate.
În aceste condiții, modelul ce se va implementa poate să aibă implementat aceste patru funcții, alături de alte funcții auxiliare cu rol de manevrare ușoară.
Capitolul 3.
Proiectarea modelului utilajului de forare pe orizontală
Proiectarea modelului utilajului de forare pe orizontală pornește de la premisele deduse în capitolul anterior. Așa cum s-a stabilit la partea teoretică a lucrării, modelul utilajului de forare este format din partea activă care simulează procesul de forare propriu-zis și partea secundară care se ocupă de interfața om-mașină a sistemului.
Pentru realizarea modelului utilajului de forare pe orizontală au fost respectate următoarele etape [5], [6]:
proiectarea și realizarea părții mecanice și de acționare electrică;
proiectarea și realizarea părții electronice, respectiv asamblarea întregului model;
proiectarea și implementarea părții software;
testarea sistemului.
În cele ce urmează se va face o prezentare detaliată a acestor patru etape urmărite pe durata proiectării și realizării sistemului.
3.1. Proiectarea și realizarea părții mecanice și de acționare electrică.
Partea activă a modelului poate avea patru funcții de mișcare și anume: funcția de deplasare, funcția de înclinare, funcția de burghiu și funcția de împingere. La realizarea modelului s-a renunțat la implementarea primelor două funcții. Funcția de deplasare nu prezintă interes deoarece multe utilaje de forare pe orizontală nu au în realitate această funcție. De asemenea s-a renunțat și la implementarea funcție de inclinare. Acest lucru se datorează faptului că era dificil de testat modelul. De fiecare dată când se testa modelul acesta trebuia să fie poziționat astfel încât să aibă spațiu în partea de jos pentru funcția de împingere. S-a ales implementarea celor două funcții de bază ale utilajului și anume funcția de burghiu și funcția de împingere.
Așa cum s-a precizat, funcția de împingere reprezintă funcția prin intermediul căreia prăjinile utilizate în procesul de forare sunt împinse în față pentru a se asigura înaintarea în tunelul forat. Utilajul real are un braț de care se prinde prăjina de forat, care este împins în față pe o anumită distanță. Poziția maximă de deplasare a brațului este determinată cu ajutorul unui senzor. Când brațul ajunge în această poziție, se oprește pentru a desface prinderea prăjinii, este adus în poziția de bază și se prinde din nou prăjina pentru a se putea efectua următoarea împingere. Atingerea poziției de bază în procesul de retragere se determină de asemenea cu ajutorul unui senzor.
Pentru implementarea acestei funcții a trebuit realizat partea mecanică a sistemului de împingere. Din cauza timpului redus avut la dispoziție s-a ales utilizarea carcasei interioare a unui CD-ROM, mai concret s-a utilizat mecanismul de scoatere a CD-ului. Acest mecanism este format din scheletul de plastic care susține întreaga structură și tăvița pe care se pune CD-ul Fig.3.1. Tăvița CD-ului este acționată cu ajutorul unei acționări formate din: motor de curent continuu [6], curea de distribuție și sistem de angrenare cu roți dințate (Fig.3.2).
Fig.3.1. Carcasa și suportul de tip tăviță a unui CD-ROM.
Fig.3.2. Mecanismul de acționare a suportului de tip tăviță a unui CD-ROM.
Cureaua de distribuție și sistemul de roți dințate au rol de a reduce turația aplicată de către motorul de curent continuu sistemului de acționare. În același timp, ultima roată dințată are rolul de a mișca tăvița pentru CD.
A doua funcție implementată este funcția de burghiu. Această funcție este una particulară deoarece ea trebuie să respecte mai multe cerințe. Prima cerință importantă este aceea de a asigura rotirea în ambele direcții. Acest lucru se poate realiza cu ajutorul unui motor de curent continuu.
A doua cerință impusă este aceea de a putea poziționa cu precizie orientarea capului de forare cu scopul de a se putea asigura funcția de curbare (așa cum se poate vedea în capitolul precedent). Pentru a se asigura această funcție era necesar ori utilizarea unei cutii de viteze pentru a reduce foarte mult viteza de rotație a burghiului, ori utilizarea unui motor pas cu pas care permite poziționarea într-o anumită poziție a capului de forare. Fiecare dintre cele două variante au avantaje și dezavantaje. Sistemul format din „motor de curent continuu + cutie de viteză” permite realizarea unor viteze de rotație mari pentru burghiu, dar alinierea corectă a capului de forare este dificil de realizat. Capul de forare poate fi aliniat doar manual (varianta automată necesită senzori suplimentari montați în capul de forare). Utilizarea unui motor pas cu pas are avantajul că se poate poziționa capul de forare cu precizie ridicată (atât manual cât și automat) și dezavantajul că nu se pot realiza viteze de rotație ridicate.
Datorită faptului că forarea pe orizontală nu necesită viteze mari de rotație a burghiului, se poate apela la utilizarea unui motor pas cu pas model 28BYJ-48 [7], așa cum se poate observa în Fig.3.3.
Fig.3.3. Motorul pas cu pas care asigură funcția de burghiu.
Așa cum s-a precizat anterior, sistemul trebuie să conțină și doi senzori pentru determinarea pozițiilor extreme ale sistemului de împingere. În acest sens s-au utilizat două variante. Prima variantă de senzor este de fapt un contact electric de tip push-buton cu lamelă care este montat astfel încât să determine poziția maximă de deplasare a sistemului de împingere (Fig.3.4).
Fig.3.4. Contact mecanic cu lamelă pentru determinarea poziției de maxim a sistemului de împingere.
Al doilea senzor este unul de tip senzor optic cu fantă [8]. În condiția în care sistemul este în orice poziție în afară de poziția limită de bază, ledul luminează fototranzistorul și acesta intră în conducție. Acest lucru semnalează că sistemul nu este în poziția de bază. Când mecanismul de împingere pătrunde în fanta senzorului acesta întrerupe polarizarea fototranzistorului care semnalează faptul că sistemul a ajuns în poziție de bază.
După montarea tuturor elementelor mecanice și de acționare electrică s-a ajuns la forma finală care este prezentată în Fig.3.6. În Fig.3.6 se poate observa mai bine locul de montare a motorului pas cu pas și a celor doi senzori care determină pozițiile extreme ale sistemului.
Fig.3.5. Senzor optic cu fantă pentru determinarea poziției de bază.
Fig.3.6. Partea mecanică și de acționare electrică a machetei.
După finalizarea părții mecanice și de acționare electrică a machetei s-a trecut la proiectarea electronică a sistemului.
3.2. Proiectarea și realizarea părții electronice, respectiv asamblarea întregului model.
Așa cum s-a precizat la începutul capitolului sistemul conține două părți majore: partea activă și partea de interacțiune om-mașină. Deoarece aceste două părți pot fi separate fizic, ele vor fi prezentate de asemenea separat. Proiectarea electronică s-a realizat în concordanță cu precizările din [5], [6], [9], [10].
Partea electronică are la bază o placă cu microcontroler denumită Arduino Mega [11]. Acest model de placă de dezvoltare prezintă avantajul că are mai mulți pini digitali și analogici, nemaifiind necesar realizarea unei părți electronice de multiplexare a pinilor de date.
În aceste condiții, structura hardware a modelului utilajului de forare pe orizontală este prezentă în schema bloc din Fig.3.7.
Fig.3.7. Structura părții electronice a modelului unui utilaj de forare pe orizontală.
Din Fig.3.7 rezultă că din punct de vedere al structurii electronice, modelul realizat are trei componente:
unitatea centrală realizată cu o placă de dezvoltare Arduino Mega;
interfața om-mașină, formată dintr-un joystick și un afișaj LCD tip 16×2;
interfața cu procesul, formată din senzori pentru pozițiile extreme și comenzi pentru acționarea motoarelor.
În continuare se vor prezenta pe rând aceste părți.
3.2.1. Unitatea centrală a modelului unui utilaj de forare pe orizontală.
Unitatea centrală utilizată este formată dintr-o placă de dezvoltare de tip Arduino Mega 2560 (Fig.3.8) bazată pe microcontrolerul ATmega1280 [9], [10], [11].
Fig.3.8. Placă de dezvoltare Arduino Mega 2560.
Arduino Mega 2560 oferă 54 de intrări/ieșiri digitale (din care 14 pot fi utilizate ca ieșiri PWM (Pulse-Width Modulation), 16 intrări analogice, precum și 4 porturi seriale. De asemenea, conține un oscilator de 16 MHZ, o conexiune USB, precum si o intrare jack pentru o sursă de alimentare externă care asigură o putere de alimentare mai mare.
Pinii digitali sunt bidirecționali, sensul de circulație al datelor (de intrare sau ieșire) realizându-se prin folosirea funcțiilor pinMode() pentru stabilirea direcției de circulație a informației, digitalRead() pentru citirea unei intrări digitale, respectiv digitalWrite() pentru scrierea unei ieșiri digitale. Fiecare pin acceptă un curent de maxim 40mA.
O parte din pini sunt realizați astfel încât să poată realiza și funcții standard speciale:
Porturi seriale (R-reciver, T-transmitter):
0 (RX) și 1 (TX);
19 (RX) și 18 (TX);
17 (RX) și 16 (TX);
15 (RX) și 14 (TX)
Întrerupătoare externe (funcția folosită pentru întreruperi este attachIntreruupt()):
2 (întrerupe 0);
3 (întrerupe 1);
21 (întrerupe 2)
20 (întrerupe 3);
19 (întrerupe 4);
18 (întrerupe 5).
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Acești pini suportă protocolul de comunicare SPI, care, momentan, deși are oferit suport hardware, nu este inclus în limbajul de programare folosit de Arduino;
LED 13: este un LED încorporat pe plăcuța de dezvoltare, conectat totodată la pinul digital 13. Când pinul ia valoarea 1 logic LED-ul este aprins;
I2C: 20 (SDA) și 21 (SCL).
Pe lângă intrările/ieșirile digitale, Arduino Mega oferă și 16 pini analogici, fiecare cu o rezoluție de 10 biți, rezultând 1024 de valori diferite.
Placa de dezvoltare are în dotare doi pini speciali și anume: AREF (reference voltage for the analog inputs) care oferă informații despre tensiunea de referință a intrărilor analogice, respectiv pinul de RESET.
Alimentarea sistemului: Placa de dezvoltare poate fi alimentată atât prin intermediul USB, cât și prin intermediul unei surse externe de putere. Sursa de putere este selectată în mod automat. La rândul ei, sursa externă de alimentare poate fii atât o sursă dotată cu o punte pentru a redresa curentul alternativ în curent continuu, cât și o baterie. Sistemul poate fi alimentat extern, la o tensiune cuprinsă între 7 și 20 V. Nu se recomandă utilizarea unei tensiunii mai mici de 7V pentru sursa externă deoarece tensiunea la bornele pinilor microcontrolerului ar putea să scadă sub 5 V. Acest lucru se întâmplă din cauza electronii folosite pentru stabilizarea nivelului de tensiune
Memoria: ATmega1280 are o memorie flash de 128kB, utilizată la stocarea codului sursă (dintre care 4kB sunt rezervați pentru bootarea sistemului), 8kB SRAM și 4KB de EEPROM (pentru scrierea acestei memorii se folosește librăria EEPROM).
3.2.2. Interfața om-mașină a modelului unui utilaj de forare pe orizontală.
Interfața om-mașină a sistemului este formată din trei elemente (Fig.3.9) – realizată în Fritzing [12]: un joystick [13], un afișaj LCD de tipul 16×2 [14] și un push-button .
Joystick-ul se folosește în primul rând pentru a controla meniul. Prin deplasarea în sus sau în jos a acestuia se realizează navigarea prin meniul sistemului proiectat. Prin deplasarea în stânga și în dreapta se realizează modificarea valorilor unor parametrii prestabiliți în meniu. Deplasarea în stânga și în dreapta are efect doar în locațiile de meniu care permit modificarea unor valori. Apăsarea pe butonul aferent Joystick-ul are ca și efect accesarea poziției curente din meniu. În cazul în care meniul se află în poziția de modificare a unor parametrii, apăsarea butonului are ca și efect salvarea valorilor introduse.
În al doilea rând, Joystick-ul se folosește pentru a controla mașina în modul „manual”. Prin deplasarea cursorului în sus și în jos se crește, respectiv se descrește viteza de înaintare a burghiului în pământ. Prin deplasare în dreapta și în stânga se crește, respectiv se descrește viteza de rotație a burghiului. În cele din urmă, prin apăsarea butonului aferent joystick-ului se oprește funcționarea mașinii fără a părăsii funcția de conducere manuală a forajului.
Fig.3.9. Schema de principiu a interfeței om-mașină.
Afișajul LCD are ca și rol, afișarea informațiilor utile în timpul funcționării sistemului și de asemenea afișarea meniului în timpul navigării prin acesta.
Push-butonul suplimentar are rol dublu. În primul rând se comportă ca și un STOP DE URGENȚĂ care are ca și efect imediat oprirea celor două funcții ale mașinii (împingere și burghiu). În al doilea rând, activează meniul pentru a permite operatorului să selecteze o nouă configurație de operare a mașinii.
Schema electrică rezultată în urma conectării celor trei elemente la placa de dezvoltare se poate observa în Fig.3.10 de asemenea generată cu Fritzing [12].
În Fig.3.10 se poate observa că implementarea celor două butoane (cel de stop și cel de la joystick) se realizează cu ajutorul rezistențelor de pull-up de 1 kΩ. Datorită acestui mod de legare a butoanelor se poate spune că acestea sunt conectate în logică negativă. În cazul în care butonul nu este acționat microcontrolerul va primii „1 logic”, iar în cazul în care se apasă pe buton microcontrolerul va primii „o logic”. Pentru buton s-a folosit pinul D30 ca și pin de intrare, iar pentru butonul aferent joystick-ului s-a folosit pinul D29 ca și pin de intrare.
Tot în schema electrică se poate observa că bornele de semnal ale Joystick-ului se leagă la intrările analogice (A0 și A1) ale plăcii de dezvoltare.
Afișajul este însoțit de o rezistență variabilă (10 kΩ) care permite reglarea contrastului acestuia. În situații în care se dorește un control mai bun al contrastului, se poate renunța la rezistența variabilă și se va lega borna respectivă la un pin al microcontrolerului care suportă PWM.
Fig.3.10. Schema electrică a interfeței om-mașină.
Pentru transmiterea datelor spre afișajul LCD se folosesc 6 pini de ieșire de pe placa de dezvoltare. Aceștia sunt pinii de la D44 la D49.
3.2.3. Interfața cu procesul a modelului unui utilaj de forare pe orizontală.
Interfața cu procesul este formată din 4 elemente: senzor poziție de maxim, senzor poziție de bază, motor acționare împingere și motor acționare burghiu (Fig.3.11).
Senzorul de poziție de maxim este format dintr-un buton cu lamelă și un holtzsurub montate astfel încât în poziția de maxim a sistemului de împingere holtzsurubul să acționeze lamela butonului. Activarea acestui senzor va bloca rotația în față a motorului de împingere. Senzorul de poziție de bază este un senzor optic cu fantă care va fi acționat de revenirea în poziție de bază a sistemului de împingere. Activarea acestui senzor va bloca rotația în spate a motorului de împingere.
Motorul de împingere este un motor de curent continuu a cărui direcție de rotație poate fi controlată cu ajutorul unei punți în H [15]. Schimbarea direcției de rotație a motorului este necesară pentru a se putea asigura atât funcția de împingere a prăjinii cât și retractarea în poziție inițială a sistemului de împingere cu scopul de a se realiza o nouă împingere. Viteza de rotație a motorului poate fi de asemenea controlată cu ajutorul semnalului PWM aplicat pe borna de alimentare. Acest lucru este necesar pentru a permite sistemului de împingere să funcționeze cu viteză variabilă. Așa cum s-a prezentat în capitolul teoretic, în sol moale sau nisipos se poate înainta cu viteză mai mare, iar în sol tare se va înainta cu viteză redusă.
Fig.3.11. Schema de principiu a interfeței cu procesul.
Motorul de acționare a burghiului este un motor de tip pas cu pas care permite rotația burghiului cu turație controlabilă. Acesta este interfațat cu ajutorul unui circuit integrat de tip ULN2003 [16] cu rol de amplificator al semnalului. La acest tip de motor se poate controla viteza de rotație prin variația vitezei de transmitere a semnalelor de alimentare a bornelor acestuia. Totuși mai important este faptul că se poate seta cu precizie, poziția capului de forare, lucru necesar pentru implementarea funcției de curbare a traseului de forare.
Schema electrică rezultată în urma conectării celor patru elemente la placa de dezvoltare se poate observa în Fig.3.12.
În Fig.3.12 se poate observa că implementarea senzorului de poziție de maxim se realizează cu rezistență de pull-up la fel ca și la butoanele folosite de interfața cu procesul. Acesta este conectat la pinul D12, care atunci când va recepționa „0 logic” va semnala că sistemul de împingere este în poziția de maxim.
Senzorul optic cu fantă a cărui schemă internă este prezentată în Fig.3.13 [8] funcționează pe principiul optocuplorului și este format dintr-un led care este în permanență alimentat și un fototranzistor care este polarizat de lumina dată de led. În momentul în care în fantă se introduce un obturator, lumina nu mai ajunge la fototranzistor și acesta iese din conducție.
Fig.3.12. Schema electronică a interfeței cu procesul.
Din punct de vedere electric, ledul este în permanență alimentat prin intermediul unui rezistor de limitare a curentului prin el, iar partea de tranzistor este conectată într-o schemă de tip pull-down. Astfel, colectorul tranzistorului este alimentat de la sursa de 5 V, iar emitorul este pus la masă prin intermediul unui rezistor de limitare a curentului. În aceste condiții, în momentul în care fanta este liberă, tranzistorul este în conducție și la borna de intrare în microcontroler (D28) va apărea „1 logic”. În momentul în care fanta este obturată, tranzistorul se blochează și la borna D28 a microcontrolerului va apărea „o logic”.
Fig.3.13. Schema internă a senzorului optic cu fantă.
Motorul de curent continuu este acționat prin intermediul unei punții în H realizată cu circuitul integrat L298N a cărui schemă internă este prezentată în Fig.3.14 [15]. Circuitul integrat L298N poate comanda în același timp două motoare de curent continuu. Important de știut este faptul că circuitul are două borne de alimentare cu tensiune, una pentru nivelul logic (5 V) și una pentru nivelul de alimentare al motorului (5 – 32 V). Datorită dimensiunii motorului utilizat, ambele borne au fost conectate la 5 V. Pentru comanda rotirii motorului se folosesc două borne, In1 și In2, conectate la pinii D2 respectiv D3 de la Arduino. Prin intermediul acestor borne se poate da sensul de rotație al motorului. Trebuie știut că pentru a funcționa motorul, una din borne va trebui să primească „0 logic”, iar cealaltă „1 logic”. Controlul turației motorului de curent continuu se face prin intermediul bornei EnA care este conectată la pinul D8 al plăcii Arduino. Dacă acest pin este pus pe „0 logic”, motorul va staționa, dacă se pune pe „1 logic” motorul se va învârtii cu turație maximă, iar dacă se comandă în PWM atunci motorul se va roti cu turație mai mică care depinde în mod direct de valoarea setată pentru semnalul PWM.
Fig.3.14. Schema internă a circuitului L298N.
Motorul pas cu pas este un motor alimentat la 5 V, care are un număr de 4 faze, o cutie de viteză de 1/64 (necesită 64 de rotații ale motorului pentru o rotație completă a axului extern) la care îi corespunde un unghi de modificare pe rotație completă de 5.625°. Acesta este alimentat prin intermediul unei plăcuțe electronice (SBT0811) bazată pe integratul ULN2003 cu rol de amplificator de semnal (Fig.3.15) [16].
Fig.3.15. Schema electronică a Plăcii SBT0811 cu circuit integrat ULN2003.
Plăcuța SBT0811 se conectează la pinii D4, D5, D6 și D7 ai plăcii Arduino prin intermediul cărora se va controla motorul pas cu pas. Datorită puterii mici necesare motorului utilizat (model 28BYJ-48) și alimentarea acestuia se va realiza tot de la placa Arduino.
3.2.4. Varianta finală a modelului realizat.
Ținând cont de toate considerentele prezentate anterior s-a trecut la realizarea practică a modelului utilajului de forare pe orizontală. Etapele de realizare a modelului au fost:
s-au fixat cei doi senzori pe partea fixă a carcasei de CD-ROM.
s-a fixat motorul pas cu pas și electronica aferentă acestuia pe partea mobilă a carcasei de CD-ROM;
s-a montat carcasa de CD-ROM pe o placă de plexiglas;
s-a lipit pe aceiași placă de plexiglas, placa Arduino, breadboard-ul și joystick-ul;
s-au implementat cele două scheme electronice prezentate anterior.
Varianta finală rezultată este prezentată în Fig.3.16. Pe aceasta se pot identifica toate componentele prezentate anterior.
Fig.3.16. Varianta finală a modelului utilajului de forare pe orizontală.
3.3. Proiectarea și implementarea părții software.
Proiectarea software se referă la stabilirea arhitecturii software a sistemului. Aceasta se realizează conform principiilor prezentate în [5], [9], [10], [17], [18] În acest sens, se pornește de la cerințele impuse de principiu de funcționare a sistemului de forare și anume:
sistemul trebuie să poată fi controlat atât manual cât și automat;
la control automat acesta trebuie să aibă funcție de forare clasică cu burghiu și funcție de curbare a traseului prin poziționarea capului de forare și prin împingerea acestuia;
sistemul trebuie să detecteze pozițiile limită pe care le întâlnește și să ia decizii pentru rezolvarea acestor probleme.
3.3.1. Arhitectura software.
Pornind de la aceste precizări s-a realizat arhitectura software din Fig.3.17. Așa cum era de așteptat, există un bloc principal denumit MAIN care va fi format dintr-o buclă infinită. Acesta activează blocul MENIU în care se selectează cu ajutorul blocului JOYSTICK modul de acționare „Manual” sau „Automat”. În cazul modului „Automat” se va selecta dacă se înaintează prin metoda burghiu sau dacă se înaintează pentru curbare prin metoda de împingere.
Fig.3.17. Arhitectura software a modelului utilajului de forare pe orizontală.
În cazul în care s-a ales modul de funcționare „Manual” se va apela blocul aferent care la rândul său apelează funcția JOYSTICK. În cazul în care se selectează modul de funcționare „Automat” se transmit parametrii necesari funcției AUTOMAT.
Fiecare bloc prezentat în arhitectura software este realizat din una sau mai multe funcții specifice. În continuarea capitolului se vor prezenta pe rând schemele logice aferente fiecărui bloc în parte.
3.3.2. Funcția MAIN.
În cadrul funcției MAIN s-a implementat structura de bază a programului descrisă prin intermediul schemei logice din Fig.3.18. Funcția începe cu un set de inițializări și continuă cu urmărirea butonului cu dublu rol (Stop de urgență și Acces meniu). Rolul pe care îl îndeplinește acest buton depinde în mod direct de starea în care se află sistemul la apăsare. Dacă în momentul acționării sistemul se afla în repaus, acest buton va apela funcția de MENIU, prin intermediul căreia se va stabilii modul de conducere a utilajului. Dacă în momentul acționării butonului sistemul se află în funcțiune (indiferent de modul de funcționare a său), se va executa un stop de urgență, prin intermediul căruia se vor reseta toate variabilele care intervin în proces.
Pentru varianta în care se apelează funcția MENIU, aceasta va genera un set de variabile care se vor folosi pentru conducerea operativă a utilajului. Variabilele generate sunt prezentate în cadrul descrierii meniului. După ce au fost generate variabilele necesare, se trece mai departe la testarea primei variabile, cu scopul de a depista modul de conducere a utilajului. În urma testării acestei variabile se va apela una dintre cele trei funcții de conducere disponibile: una manuală și două automate (înaintare prin forare și înaintare prin curbare).
Odată apelate una dintre aceste funcții, se va rula programul aferent funcție respective până la apăsarea butonului cu rol dublu, buton care va îndeplinii funcția de stop de urgență.
Fig.3.18. Ordinograma funcției MAIN.
3.3.3. Meniul. Funcția MENIU și funcția JOYSTICK.
La realizarea meniului s-a apelat la crearea a două funcții:
funcția MENIU care se ocupă de realizarea propriu-zisă a meniului, generarea variabilelor și afișarea informației pe LCD;
funcția JOYSTICK care se ocupă de gestionarea dispozitivului de comandă.
Funcția MENIU este o funcție care pe baza rezultatelor furnizate de către funcția JOYSTICK, activează un anumit nivel al meniului. Practic prin mișcarea în sus sau în jos a manetei joystick-ului se va naviga între cele trei meniuri disponibile ale acestei funcții. În momentul în care se dorește activarea unuia dintre cele trei meniuri se va apăsa pe maneta joystick-ului care este echivalentă cu o tastă de ENTER. La apăsarea manetei se va apela o nou subfuncție special creată pentru fiecare meniu în parte. În cadrul acestei subfuncții se va urmării din nou joystick-ul. Prin mișcarea în sus sau în jos a manetei se va naviga prin submeniul activat, iar prin mișcarea spre dreapta sau spre stânga se va mării sau micșora valoarea alocată variabilei corespunzătoare submeniului activ. Pentru validarea alegerii s-a creat la fiecare meniu de bază o funcție prin intermediul căreia se poate porni utilajul în modul setat sau se poate renunța la setările aplicate. Singura excepție de la această regulă este dată de meniul MANUAL care va activa direct funcția de conducere manuală. Schema logică care exemplifică cel mai bine funcția MENIU este prezentată în Fig.3.19.
Fig.3.19. Ordinograma funcției MENIU.
Așa cum se poate observa și din ordinograma din Fig.3.18, această funcție returnează mai multe variabile, după cum urmează:
variabilă de funcționare se va folosi pentru a memora tipul de conducere a utilajului:
valoarea 1 – utilajul va fi condus în mod manual;
valoarea 2 – utilajul va fi condus în mod automat prin forare pentru înaintare;
valoarea 3 – utilajul va fi condus în mod automat prin împingere pentru curbare;
variabilă de viteză rotire: se folosește pentru a seta viteza de rotire a burghiului, doar în situația în care din meniu s-a ales „conducere în mod automat prin forare pentru înaintare”;
variabilă de unghi rotire: se folosește pentru a seta unghiul de înaintare în sol, doar în situația în care din meniu s-a ales „conducere în mod automat prin împingere pentru curbare”;
variabilă de înaintare: se folosește pentru înaintarea platformei prin împingere indiferent de care dintre cele două moduri automate au fost selectate.
Funcția JOYSTICK este o funcție mai simplă formată din două subfuncții, una care urmărește modificarea unui semnal de la joystick și a doua care definește un set de variabile în funcție de comanda primită de la joystick. Din acest motiv nu mai este necesară realizarea unei ordinograme care să prezinte modul de funcționare a acestei funcții.
3.3.4. Funcția MANUAL.
Funcția MANUAL va fi apelată din funcția MAIN, atunci când meniul returnează valoarea 1 pentru variabila Funcționare. În cadrul funcție MANUAL se trece la conducerea operativă manuală a utilajului. Acest lucru înseamnă că cele două motoare car deservesc utilajul se vor comanda cu ajutorul joystick-ului. Pe lângă joystick, funcția mai urmărește cei doi senzori de poziție limită și butonul de START/STOP. Schema logică aferentă este prezentată în Fig.3.20.
Fig.3.20. Ordinograma funcției MANUAL.
Din ordinograma din Fig.3.20 se poate observa că această funcție este părăsită doar în cazul în care este acționat butonul de START/STOP.
3.3.5. Funcția AUTOMAT și CURBARE.
Aceste două funcții se folosesc pentru conducerea automată a sistemului de forare. Cele două funcții sunt asemănătoare cu funcția MANUAL, diferența dintre ele fiind dată de modul de comandă a motoarelor. Practic în ordinograma din Fig.3.20 se înlocuiește apelarea funcției JOYSTICK și testarea comenzii primite cu instrucțiunea de aplicare a setărilor primite prin intermediul variabilelor generate de meniu.
De remarcat este faptul că pentru funcția AUTOMAT se transmite viteza de rotație a burghiului și viteza de înaintare a platformei, iar pentru funcția CURBARE se transmite unghiul la care să se rotească capul forezei și viteza de înaintare a platformei. Ambele funcții vor fi părăsite în momentul în care se acționează butonul de START/STOP sau în momentul în care la retragerea platformei se atinge poziția de bază. Această alegere de oprire este justificată de faptul că la reîntoarcerea în poziție inițială, operatorul trebuie să aștepte montarea unei noi prăjini pentru prelungirea brațului de forare. Ordinograma care deservește aceste două funcții se prezintă în Fig.3.21.
Fig.3.21. Ordinograma funcției AUTOMAT sau CURBARE.
Din Fig.3.21 se poate observa că la atingerea poziției de maxim a brațului de împingere viteaza de înaintare devine negativă și brațul se va extrage până în poziția de bază.
3.3.6. Diagrama de secvență a aplicației.
Funcționarea programului se poate înțelege mult mai bine cu ajutorul diagramei de secvență prezentate în Fig.3.22.
Fig.3.22. Diagrama de secvență a programului.
Așa cum se poate deduce și din Fig.3.22 la apăsarea butonului START/STOP se va apela funcția MENIU care la rândul ei apelează funcția JOYSTICK. După alegerea unei obținui se setează variabila Refresh, care afișează noul mesaj pe LCD, iar la final se reîntoarce în MAIN.
În MAIN se verifică selecția făcută care apelează una din funcțiile MANUAL sau AUTOMAT (CURBAT), care activează afișarea noii informații pe LCD și pornește cele două motoare în funcție de setările alese. La varianta MANUAL, înainte de pornirea motoarelor se apelează funcția JOYSTICK, pentru stabilirea vitezelor. Indiferent de varianta aleasă, aceasta se părăsește prin apăsarea butonului START/STOP care va reîntoarce programul în MAIN.
Codul sursă realizat conform algoritmilor prezentați poate fi analizat în Anexa 1.
3.4. Testarea modelului utilajului de forare pe orizontală.
Testarea modelului presupune verificarea funcționării fiecărei funcții în parte. Se va verifica existența în meniu a fiecărei funcții, după care se va testa executarea corectă a funcțiilor. Lansarea fiecărei funcții în parte este urmată imediat de acționarea motorașelor în concordanță cu setările realizate. În cazul în care acestea funcționează corect, se verifică dacă cei doi senzori de poziție își fac funcțiile conform descrierilor prezentate.
Alimentarea modelului conduce la inițializarea sistemului în urma căreia va apărea de LCD mesajul „Proiect licență” Fig.3.23.
Fig.3.23. Inițializarea sistemului.
Apelarea meniului sistemului se va realiza în momentul în care operatorul apasă pe butonul de START/STOP. Odată apelat meniul, acesta va afișa mesajul prin care solicită operatorului să selecteze o anumită funcție de operare a mașinii. Operatorul va trebui să navigheze prin meniu, cu ajutorul joystick-ului, selectând una dintre cele trei funcții disponibile (Fig3.24).
Fig.3.24. Meniul principal al utilajului de forare pe orizontală.
Activarea submeniului unei anumite funcții se realizează prin selectarea acesteia urmată de validarea ei prin apăsarea butonului de pe joystick. Funcția „Manual” are un singur submeniu prin intermediul căruia se poate valida activarea acesteia sau se poate anula și revenii în meniul principal (Fig.3.25). Acest submeniul se poate identifica în cadrul tuturor celor trei funcții pe care le are meniul principal. Navigarea în submeniul unei funcții se realizează cu ajutorul joystick-ului, astfel: acționarea în sus și în jos realizează navigarea prin submeniu (nu este cazul la meniul „Manual”), acționarea în stânga și dreapta modifică valorile alocate fiecărei funcții în parte, iar apăsarea butonului aplică setările realizate. Pentru ca funcția să fie validată și aplicația să ruleze conform funcției respective, operatorul trebuie să se asigure că a selectat în submeniul corespunzător acest lucru.
Fig.3.25. Submeniu de validare sau renunțare la setările aplicate într-un meniu.
Funcția „Automat” are trei submeniuri, unul folosit pentru selectarea valorii vitezei de înaintare, unul pentru selectarea vitezei burghiului și unul care este prezentat în Fig.3.25. Primele două se pot observa în Fig.3.26 cu precizarea că fiecare dintre acesta poate seta patru valori după cum urmează:
– 1 la viteza de înaintare reprezintă deplasarea în spate, iar la viteza burghiului reprezintă învârtirea în sens opus;
0 înseamnă staționare la ambele categorii de variabile;
1 și 2 reprezintă două trepte de viteză, la viteza de înaintare pentru deplasare în față, iar la viteza burghiului reprezintă învârtirea în normal.
Fig.3.26. Primele două submeniuri ale funcției Automat.
Ultima funcție implementată este funcția „Curbare” care are de asemenea trei submeniuri. Primul submeniu este identic cu cel de la funcția „Automat” și are rol de a seta viteza de înaintare la împingere. A doua funcție are rol de a selecta unghiul la care să se poziționeze capul de forare astfel încât să se poată schimba direcția de forare în sensul planificat de către proiectant, iar ultimul este identică cu cel de la meniurile precedente prezentată în Fig.3.25. Primele două submeniurile ale funcției „Curbare” sunt prezentate în Fig.3.27.
Fig.3.27. Primele două submeniuri ale funcției Automat.
Submeniul unghi burghiu din funcția „Curbare” poate de asemenea să implementeze patru valori cu precizarea că aceste valori sunt puțin diferite. Asfel:
0 semnifică faptul că burghiul se poziționează cu înclinația spre ora 12 ceea se înseamnă că acesta va curba în sus (spre ieșirea din sol);
90 semnifică faptul că burghiul se poziționează cu înclinația spre ora 3 ceea se înseamnă că acesta va curba în dreapta;
180 semnifică faptul că burghiul se poziționează cu înclinația spre ora 6 ceea se înseamnă că acesta va curba în jos (intră mai adânc în sol);
270 semnifică faptul că burghiul se poziționează cu înclinația spre ora 9 ceea se înseamnă că acesta va curba spre stânga.
În cazul în care la unul dintre cele trei meniuri s-a selectat din submeniul trei opțiunea „START” (vezi Fig.3.25), aceasta va genera părăsirea meniului, afișarea setărilor efectuate și apelarea funcției corespunzătoare care va comanda cele două motorașe în funcție de setările aplicate. Rezultatul pe LCD a celor trei funcții posibile poate fi observat în Fig.3.28, în care se constată:
în cazul activării meniului „Manual”, pe LCD va apărea textul Manual, urmat de recomandarea Use Joystick, care îi sugerează operatorului că trebuie să folosească joystick-ul pentru manevrarea utilajului;
în cazul activării meniului „Automat”, pe LCD va apărea textul A, sugerând că este vorba de modul automat, urmat de afișarea valorilor vitezei de înaintare (Vi) și a vitezei de rotație a burghiului (Vb);
în cazul activării meniului „Curbare”, pe LCD va apărea textul C, sugerând că este vorba de modul curbare, urmat de afișarea valorilor vitezei de înaintare (Vi) și a unghiului de rotație a burghiului (Unghi).
Fig.3.28. Informații afișate pe durata rulării celor trei funcții ale utilajului.
Rezultatul final al acestei operații este dat de acționarea celor două motorașe în concordanță cu setările aplicate. Din păcate acest lucru nu poate fi prezenta prin imagini sugestive.
Funcția de burghiu nu este condiționată în timpul realizării sale. În schimb funcția de împingere este condiționată de ajungerea platformei la capăt de cursă. Dacă se atinge poziția de maxim platforma se va oprii și va apărea pe display o informație prin intermediul căreia se solicită apăsarea butonului de pe Joystick pentru continuarea procesului automat în direcția opusă. În această situație, se oprește rotirea burghiului, se setează viteza de deplasare în spate și se acționează motorul platformei. Dacă la retur se va atinge poziția de bază (minim) se va oprii platforma și va apărea pe display o informație prin intermediul căreia se solicită apăsarea butonului de pe Joystick pentru continuarea procesului automat în direcția înainte. În această situație, se setează din nou ultima viteză de înaintare și ultima viteză a burghiului și se vor comanda cele două motoare. În orice moment, se poate apăsa butonul de START/STOP prin care opresc cele două motorașe și se reapelează meniul principal al sistemului.
În finalul capitolului se poate spune că după o proiectare completă în care s-au realizat părți mecanice, părți electronice și părți software, s-a asamblat întreg sistemul și s-a trecut la partea de testare. Pe parcursul testării au fost identificate și anumite dificultăți cum ar fi de exemplu faptul că partea inițială a unui SMS nu rămâne în permanență constantă. Pentru rezolvarea unor astfel de probleme s-a apelat la implementarea unor algoritmi așa cum se poate observa și din consultarea codului sursă realizat.
Capitolul 4.
Concluzii
Lucrarea de față implementează un model funcțional al unui utilaj de forare pe orizontală, comandabil atât în mod manual în care operatorul are decizia totală în ceea ce înseamnă comanda sa, cât și în mod automat în care operatorul setează funcțiile pe care trebuie să le îndeplinească iar acestea se vor executa în consecință.
Lucrarea începe cu un o prezentare teoretică atât a tehnologiei de forare pe orizontală cât și a unui utilaj care realizează această funcție. În cadrul acestei prezentări teoretice s-a determinat care sunt elementele pe care trebuie să le conțină modelul realizat, astfel încât comportarea acestuia să fie cât mai apropiată de comportarea utilajului real. Practic s-au identificat patru funcții pe care un utilaj real le poate avea, dintre care s-au implementat doar două, acestea fiind considerate funcțiile de bază ale utilajului.
Proiectarea modelului s-a executat în mai mulți pași. În primul rând s-a analizat posibilitatea de realizare mecanică a sistemului. În acest scop s-au analizat mai multe soluții de realizare a acestei părți, soluția finală aleasă fiind formată dintr-o carcasă de CD-ROM. Această alegere a fost făcută datorită faptului că CD-ROM-ul avea realizată partea mecanică de conversie a mișcării de rotație în mișcare liniară (de deplasare). Pentru mișcarea de rotație s-au analizat mai multe soluții prin intermediul cărora să se poată controla cu cât mai multă precizie poziția de înaintare a capului de forare. Soluția finală aleasă a fost un motor pas cu pas, la care poziția finală se poate determina prin numărarea pașilor executați de motor.
Partea mecanică a condus implicit la realizarea unei părți de automatizare. Soluția aleasă pentru această parte este formată dintr-un sistem cu microcontroler și din electronica aferentă comenzii elementelor de execuție. Datorită ușurinței de utilizare s-a ales folosirea platformei Arduino. Comanda celor două motoare care acționează partea mecanică a fost efectuată cu ajutorul unor drivere electronice specifice. Important este faptul că sistemul a fost dezvoltat prin utilizarea unor senzori de poziție care să determine pozițiile limită ale utilajului.
Totodată, partea hardware a fost dotată cu elemente specifice interfeței om-mașină, formată din LCD, Joystick și butoane de comandă.
Proiectarea software a sistemului a pornit de la proiectarea interfeței HMI. Prin utilizarea elementelor electronice avute la dispoziție s-a realizat un meniu cu ajutorul căruia să se poate controla toate funcțiile pe care le are utilajul. Partea software s-a continuat cu implementarea celor trei funcții stabilite pentru utilajul luat în considerare, funcții care au rolul de a comanda elementele de execuție, de a urmării senzorii de poziție limită și de a lua decizii în consecință.
Ultima etapă de execuție a fost aceea de verificare a funcționării modelului utilajului. S-au testat toate meniurile și submeniurile implementate și s-au prezentat poze demonstrative a funcționării acestora. În partea de testare s-au identificat și câteva probleme de funcționare care a condus automat la implementarea unei funcții de utilizarea a timerului electronic prin intermediul sistemului de întreruperi. Sistemul de întreruperi s-a folosit ulterior și pentru urmărirea butonului de START/STOP al sistemului.
Analizând cele prezentate până acum se poate spune că proiectul și-a atins scopul. Au fost implementate toate funcțiile principale ale sistemului, iar acestea funcționează în condiții corecte. În plus se poate spune că pe durata realizării sistemului s-au atins diverse noțiuni de utilizarea a microcontrolerelor. Astfel:
au fost utilizate toate funcțiile de comandă a pinilor: intrări și ieșiri digitale, intrări analogice, respectiv ieșiri analogice (care reprezintă de fapt generare de semnale de PWM);
s-au generat semnale PWM atât în mod direct cu funcția de ieșire analogică, cât și în mod indirect, acestea fiind implementate prin generarea de semnale dreptunghiulare cu periodicitate stabilită software;
s-au utilizat toate modurile de realizare a unei pauze: pauze software care împiedică rularea altor funcții (delay), pauze software pe baza ceasului intern (millis) care permite rularea altor funcții pe durata pauzelor, pauze hardware implementate cu ajutorul timerelor;
s-a utilizat sistemul de întreruperi atât pentru implementarea timerelor hardware cât și pentru generarea de întreruperi de către senzorii de poziție și de către butonul de START/STOP.
Modelul realizat se va folosi în activitatea vânzare a utilajului de forare, cu scopul de a demonstra principiului de funcționare a acestuia.
Limitări și posibile implementări ulterioare
Modelul utilajului de forare pe orizontală are mai multe limitări. În primul rând, modelul a pornit de la renunțarea la implementare a două funcții ale acestuia și anume: funcția de deplasare și funcția de înclinare a unghiului de pătrundere în sol. În al doilea rând, modelul a fost creat cu echipamente de foarte mică putere care a asigurat un cost de realizare scăzut, ceea ce nu îi oferă posibilitatea să poată fi folosit în sarcină.
În aceste condiții modelul va putea fi dezvoltat în primul rând prin rezolvarea celor două probleme prezentate anterior. Prima se rezolvă prin utilizarea a două motoare care să comande un sistem de șenile, precum și a unui motor liniar care să permită înclinarea întregii structuri. A doua problemă poate fi rezolvată doar prin reproiectarea integrală a părții mecanice și de acționare electrică.
De asemenea și partea de interfață HMI poate fi îmbunătățită. De exemplu se poate utiliza un afișaj grafic cu ajutorul căruia să se poată urmării poziția reală (distanțe de orizontală și verticală față de utilaj) a capului de forare.
Bibliografie
Energy Information Administration, Drilling Sideways – A Review of Horizontal Well Technology and Its Domestic Application, April 1993
J.A. Platosh, Trenchless Technology Helps Force Main Cross Harbor, online version – http://www.waterworld.com/articles/print/volume-26/issue-6/editorial-features/trenchless-technology.html – consultat la date de 12.02.2016.
G.A. Stangl, R. Levings, Horizontal Directional Drilling (HDD) Systems for Pilot Bore Drilling in Mixed Soil Conditions and Rock, Mega Drill Show, 4-5 December 2008, New Delphi, India.
TERRA-JET®, TERRA CITY-JET®, TERRA MINI-JET, Sisteme de Forare Orizontală Dirijată, Manual de utilizare.
Molnar-Matei, F., Sisteme încorporate, notițe de curs, 2013
Stanciu, I.R., Molnar-Matei, F., Sisteme de monitorizare și control în timp real, Editura Eurostampa, Timișoara 2013, ISBN 978-606-569-542-9
28BYJ-48, Motor pas cu pas – 5V, Datasheet, http://robocraft.ru/files/datasheet/28BYJ-48.pdf
TCST2103, Senzor optic cu fantă, Datasheet, http://www.vishay.com/docs/81147/tcst2103.pdf
L. Darcey, S. Conder, Sams Teach Yourself Android Application Development in 24 Hours, Second Edition, Sams Publishig House, 2012.
D. Wilcher, Learn Electronics with Arduino, Apress Access, 2012.
Arduino Mega, http://www.arduino.cc/en/Main/ArduinoBoardMega2560
Software proiectare electronică, http://fritzing.org/home/
Modul Joystick, http://tinkbox.ph/sites/mytinkbox.com/files/downloads/JOYSTICK_MODULE.pdf
HD44780, Afișaj LCD 16×2, https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
L298B, Punte în H, https://www.sparkfun.com/datasheets/Robotics/L298_H_Bridge.pdf
ULN 2003, Amplificator semnal, http://www.ti.com/lit/ds/symlink/uln2003a.pdf
H. Ciocârlie; Universul limbajelor de programare. Ed. A 2-a rev. – Timișoara: Orizonturi Universitare, 2013,
Brian W. Evans, Arduino programming notebook, August 2007
Anexa 1.
Codul sursă aferent întregului sistem este:
//–––––––––––––––––-
// 1. Libraries
//–––––––––––––––––-
#include <TimerOne.h>
#include <LiquidCrystal.h>
#include <Stepper.h>
//–––––––––––––––––-
// 2. Pines
//–––––––––––––––––-
//declare Joystick pins
#define xPin A1
#define yPin A0
#define kPin 29
//declare interrupt pins
#define maxPositionPin 18
#define basePositionPin 19
#define StartStopPin 20
//declare Steper Motor pins
#define motorPin1 7 // Blue – 28BYJ48 pin 1
#define motorPin2 6 // Pink – 28BYJ48 pin 2
#define motorPin3 5 // Yellow – 28BYJ48 pin 3
#define motorPin4 4 // Orange – 28BYJ48 pin 4
// Declare DC Motor pins
#define dir1PinA 2
#define dir2PinA 3
#define speedPinA 8 // Needs to be a PWM pin to be able to control motor speed
//–––––––––––––––––-
// 3. Variables
//–––––––––––––––––-
int tCount1;
//leerJoystick
int joyRead;
int joyPos;
int lastJoyPos;
long lastDebounceTime = 0;
long debounceDelay = 70; //user define
//Control Joystick
bool PQCP;
bool editMode;
//Menu variables
int mNivel1 = 0;
int mNivel2 = 0;
//editmode
int lastN;
int lcdX;
int lcdY;
bool exiT;
//action variables
int forwardVelocity;
int drillVelocity;
int drillAngle;
int oldForwardVelocity;
int oldDrillVelocity;
int command;
int manualActive;
int automatActive;
int curbareActive;
int speedForwardValue = 0;
int speedDrillValue = 0;
int drillDirection = 0;
int drillPosition =0;
int drillAngleTarget = 0;
//declare variables for the Steper Motor
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
//declare variables for interrups
int timerFlag = 0;
volatile byte lastButonStart = LOW;
volatile byte refresh;
volatile byte lastButonMax = LOW;
volatile byte lastButonBase = LOW;
const int stepsPerRevolution = 64; // change this to fit the number of steps per revolution
//–––––––––––––––––-
// 4. Objects define
//–––––––––––––––––-
LiquidCrystal lcd(44, 45, 46, 47, 48, 49);
Stepper small_stepper(stepsPerRevolution, 7,5,6,4);
//========================================
// SETUP
//========================================
void setup() {
//–––––––––––––––––-
// S1. Pins
//–––––––––––––––––-
//declare the Steper motor pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
//declare the DC motor pins as outputs
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
//declare joystick and interrupts pins as inputs
pinMode(kPin, INPUT_PULLUP);
pinMode(maxPositionPin, INPUT_PULLUP);
pinMode(basePositionPin, INPUT);
pinMode(StartStopPin, INPUT_PULLUP);
//–––––––––––––––––-
// S2. Start Interrupts
//–––––––––––––––––-
attachInterrupt(digitalPinToInterrupt(StartStopPin), StartStopIsr, FALLING);
attachInterrupt(digitalPinToInterrupt(basePositionPin), basePositionIsr, FALLING);
attachInterrupt(digitalPinToInterrupt(maxPositionPin), maxPositionIsr, FALLING);
//initializare Timer 1
Timer1.initialize(500); // setare interval de timp in microsecunde
Timer1.attachInterrupt( timerIsr );//atasare intrerupere
//–––––––––––––––––-
// S3. equipments
//–––––––––––––––––-
Serial.begin(9600);
lcd.begin(16, 2);
// Afisare mesaj initial pe display:
lcd.print("Proiect Licenta");
delay(1000);
}
//=========================================
// LOOP
//=========================================
void loop() {
delay(20);
if (lastButonStart){
if (refresh){lcd.clear();refresh=0;}
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
command = 0;
forwardVelocity = 0;
drillVelocity = 0;
drillAngle = 0;
manualActive = 0;
automatActive = 0;
curbareActive = 0;
controlJoystick();
menu();
} else {
if (refresh){lcd.clear();refresh=0;}
if (manualActive){
lcd.setCursor(0,0);
lcd.print("Manual");
lcd.setCursor(0,1);
lcd.print("Use Joystick");
manual ();
}//end if manualActive
if (automatActive){
lcd.setCursor(0,0);
lcd.print("A: Vi= ");
lcd.setCursor(10,0);
lcd.print(forwardVelocity);
lcd.setCursor(5,1);
lcd.print("Vb= ");
lcd.setCursor(10,1);
lcd.print(drillVelocity);
switch (forwardVelocity){
case -1:
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
speedForwardValue = 40;
break;
case 0:
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, LOW);
speedForwardValue = 0;
break;
case 1:
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
speedForwardValue = 10;
break;
case 2:
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
speedForwardValue = 40;
break;
}//end switch forwardVelocity
switch (drillVelocity){
case -1:
drillDirection = -1;
small_stepper.setSpeed(200);
break;
case 0:
drillDirection = 0;
small_stepper.setSpeed(0);
break;
case 1:
drillDirection = 1;
small_stepper.setSpeed(200);
break;
case 2:
drillDirection = 1;
small_stepper.setSpeed(400);
break;
}//end switch drillVelocity
automat ();
}//end if automatActive
if (curbareActive){
lcd.setCursor(0,0);
lcd.print("C: Vi= ");
lcd.setCursor(10,0);
lcd.print(forwardVelocity);
lcd.setCursor(2,1);
lcd.print("Unghi= ");
lcd.setCursor(10,1);
lcd.print(drillAngle);
switch (forwardVelocity){
case -1:
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
speedForwardValue = 2;
break;
case 0:
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, LOW);
speedForwardValue = 0;
break;
case 1:
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
speedForwardValue = 1;
break;
case 2:
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
speedForwardValue = 2;
break;
}//end switch forwardVelocity
switch (drillAngle){
case 0:
drillAngleTarget = 0;
break;
case 90:
drillAngleTarget = 512;
break;
case 180:
drillAngleTarget = 1024;
break;
case 270:
drillAngleTarget = 1536;
break;
}//end switch drillAngle
small_stepper.setSpeed(200);
curbare ();
}//end if automatActive
if (!manualActive && !automatActive && !curbareActive){
lcd.setCursor(0,0);
lcd.print("Push Start/Stop");
lcd.setCursor(0,1);
lcd.print(" –>> Acces Menu");
refresh = 0;
}
}//else lastButonStart
}//loop
//=========================================
//Rutine de intrerupere: timer, buton Start/Stop, senzori pozitie
//=========================================
void timerIsr() {
timerFlag = 1;
}//end Timer subrutine
void StartStopIsr() {
lastButonStart = !lastButonStart;
refresh = 1;
}//end Start/Stop subrutine
void basePositionIsr() {
lastButonBase = 1;
}//end basePosition subrutine
void maxPositionIsr() {
lastButonMax = 1;
}//end maxPosition subrutine
//=========================================
// Menu
//=========================================
void menu(){
switch (mNivel1){
case 0:
menu0(); //stare initiala
break;
case 1:
menu1(); //operare manuala
break;
case 2:
menu2(); //operare automata
break;
case 3:
menu3(); //meniu curbare
break;
}//switch mNivel1
}
//–––––––––––––––––-
// Meniu initial
//–––––––––––––––––-
void menu0(){
if (refresh){lcd.clear();refresh=0;}
lcd.setCursor(0,0);
lcd.print("Setati modul");
lcd.setCursor(0,1);
lcd.print("de operare");
}
//–––––––––––––––––-
// Menu 1
//–––––––––––––––––-
void menu1(){
int oldLcdX0 = 0;
int oldLcdX1 = 0;
int oldLcdX2 = 0;
int oldLcdX3 = 0;
if (refresh){lcd.clear();refresh=0;}
lcd.setCursor(0,0);
lcd.print("Manual");
lcd.setCursor(0,1);
lcd.print("Push –>> Acces");
while(editMode){
controlJoystick();
switch (lcdY){
case 0:
if (refresh){
lcd.clear();
refresh=0;
lcd.setCursor(0,0);
lcd.print("Comanda");
lcdX = oldLcdX0;
}
lcd.setCursor(0,1);
lcd.print("Comanda= ");
switch (lcdX){
case 0:
command=0;
lcd.setCursor(9,1);
lcd.print("STOP");
break;
case 1:
command=1;
lcd.setCursor(9,1);
lcd.print("START");
break;
case 2:
lcdX –;
break;
}
oldLcdX0 = lcdX;
break;
case 1:
lcdY –;
break;
}//switch lcdY
}//while
if (command == 1){
lastButonStart = !lastButonStart;
manualActive = 1;
refresh = 1;
mNivel1 = 0;
mNivel2 = 0;
lcdX = 0;
lcdY = 0;
} //if command
}//menu 1
//–––––––––––––––––-
// Menu 2
//–––––––––––––––––-
void menu2(){
int oldLcdX0 = 0;
int oldLcdX1 = 0;
int oldLcdX2 = 0;
int oldLcdX3 = 0;
if (refresh){lcd.clear();refresh=0;}
lcd.setCursor(0,0);
lcd.print("Automat");
lcd.setCursor(0,1);
lcd.print("Push –>> Acces");
while(editMode){
controlJoystick();
switch (lcdY){
case 0:
if (refresh){
lcd.clear();
refresh=0;
lcd.setCursor(0,0);
lcd.print("Viteza inaintare");
lcdX = oldLcdX0;
}
lcd.setCursor(0,1);
lcd.print("Vi= ");
switch (lcdX){
case 0:
forwardVelocity=-1;
break;
case 1:
forwardVelocity=0;
break;
case 2:
forwardVelocity=1;
break;
case 3:
forwardVelocity=2;
break;
}
lcd.setCursor(7,1);
lcd.print(forwardVelocity);
oldLcdX0 = lcdX;
break;
case 1:
if (refresh){
lcd.clear();
refresh=0;
lcd.setCursor(0,0);
lcd.print("Viteza burghiu");
lcdX = oldLcdX1;
}
lcd.setCursor(0,1);
lcd.print("Vb= ");
switch (lcdX){
case 0:
drillVelocity=-1;
break;
case 1:
drillVelocity=0;
break;
case 2:
drillVelocity=1;
break;
case 3:
drillVelocity=2;
break;
}
lcd.setCursor(7,1);
lcd.print(drillVelocity);
oldLcdX1 = lcdX;
break;
case 2:
if (refresh){
lcd.clear();
refresh=0;
lcd.setCursor(0,0);
lcd.print("Comanda");
lcdX = oldLcdX2;
}
lcd.setCursor(0,1);
lcd.print("Comanda= ");
switch (lcdX){
case 0:
command=0;
lcd.setCursor(9,1);
lcd.print("STOP");
break;
case 1:
command=2;
lcd.setCursor(9,1);
lcd.print("START");
break;
case 2:
lcdX –;
break;
}
oldLcdX2 = lcdX;
break;
}//switch lcdY
}//while
if (command == 2){
lastButonStart = !lastButonStart;
automatActive = 1;
oldForwardVelocity = forwardVelocity;
oldDrillVelocity = drillVelocity;
refresh = 1;
mNivel1 = 0;
mNivel2 = 0;
lcdX = 0;
lcdY = 0;
}// if command
}//menu 2
//–––––––––––––––––-
// Menu 3
//–––––––––––––––––-
void menu3(){
int oldLcdX0 = 0;
int oldLcdX1 = 0;
int oldLcdX2 = 0;
int oldLcdX3 = 0;
if (refresh){lcd.clear();refresh=0;}
lcd.setCursor(0,0);
lcd.print("Curbare");
lcd.setCursor(0,1);
lcd.print("Push –>> Acces");
while(editMode){
controlJoystick();
switch (lcdY){
case 0:
if (refresh){
lcd.clear();
refresh=0;
lcd.setCursor(0,0);
lcd.print("Viteza inaintare");
lcdX = oldLcdX0;
}
lcd.setCursor(0,1);
lcd.print("Vi= ");
switch (lcdX){
case 0:
forwardVelocity=-1;
break;
case 1:
forwardVelocity=0;
break;
case 2:
forwardVelocity=1;
break;
case 3:
forwardVelocity=2;
break;
}
lcd.setCursor(7,1);
lcd.print(forwardVelocity);
oldLcdX0 = lcdX;
break;
case 1:
if (refresh){
lcd.clear();
refresh=0;
lcd.setCursor(0,0);
lcd.print("Unghi burghiu");
lcdX = oldLcdX1;
}
lcd.setCursor(0,1);
lcd.print("Unghi= ");
switch (lcdX){
case 0:
drillAngle=0;
break;
case 1:
drillAngle=90;
break;
case 2:
drillAngle=180;
break;
case 3:
drillAngle=270;
break;
}
lcd.setCursor(7,1);
lcd.print(drillAngle);
oldLcdX1 = lcdX;
break;
case 2:
if (refresh){
lcd.clear();
refresh=0;
lcd.setCursor(0,0);
lcd.print("Comanda");
lcdX = oldLcdX2;
}
lcd.setCursor(0,1);
lcd.print("Comanda= ");
switch (lcdX){
case 0:
command=0;
lcd.setCursor(9,1);
lcd.print("STOP");
break;
case 1:
command=3;
lcd.setCursor(9,1);
lcd.print("START");
break;
case 2:
lcdX –;
break;
}
oldLcdX2 = lcdX;
break;
}//switch lcdY
}//while
if (command == 3){
lastButonStart = !lastButonStart;
curbareActive = 1;
oldForwardVelocity = forwardVelocity;
refresh = 1;
mNivel1 = 0;
mNivel2 = 0;
lcdX = 0;
lcdY = 0;
}//if command
}//menu 3
//=========================================
// Control Joystic
//=========================================
void controlJoystick(){
leeJoystick();
if(PQCP) {
PQCP=0;
if (joyPos==5){editMode=!editMode;}
switch (editMode){
case 1:
lcd.blink();
refresh=1;
if (joyPos==4&&lcdY<2){lcdY++; refresh=1;}
if (joyPos==3&&lcdY>0){lcdY–; refresh=1;}
if (joyPos==1&&lcdX<3){lcdX++; refresh=0;}
if (joyPos==2&&lcdX>0){lcdX–; refresh=0;}
break;
case 0:
lcd.noBlink();
refresh=1;
if (mNivel1<3&&joyPos==3){mNivel1++; mNivel2=0; refresh=1;}
if (mNivel1>0&&joyPos==4){mNivel1–; mNivel2=0; refresh=1;}
if (mNivel2<3&&joyPos==1){mNivel2++; refresh=1;}
if (mNivel2>0&&joyPos==2){mNivel2–; refresh=1;}
break;
}//end switch !editMode
}//end if PQCP
}//end controlJoystick
int leeJoystick(){
int x = analogRead(xPin);
int y = analogRead(yPin);
int k = digitalRead(kPin);
if(x>900){joyRead=1; //x+
}else if(x<100){joyRead=2; //x-
}else if(y>900){joyRead=3; //y+
}else if(y<100){joyRead=4; //y-
}else if(!k){joyRead=5;
}else{joyRead=0;}
if (joyRead != lastJoyPos){lastDebounceTime = millis();}
if(((millis() – lastDebounceTime) > debounceDelay)&&(joyRead!=joyPos)){
joyPos=joyRead;
if(!PQCP){PQCP=1;}
}
if(((millis() – lastDebounceTime) > (5*debounceDelay))&&(joyPos==3||joyPos==4)){
joyPos=joyRead; //repeat time only for UP/DOWN
if(!PQCP){PQCP=1;}
}
lastJoyPos=joyRead;
} //leeJoystick
//=========================================
// Manual control of drilling machine
//=========================================
void manual (){
analogWrite(speedPinA, 220);
small_stepper.setSpeed(400); // set first stepper speed
while (!lastButonStart){
int sensorReading0 = analogRead(A0); // read value from joystick X-axis
int sensorReading1 = analogRead(A1); // read value from joystick X-axis
if (sensorReading0 < 400) {
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
} else{
if (sensorReading0 > 600) {
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
} else{
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, LOW);
}
}
if (sensorReading1 < 400) { small_stepper.step(1); } // step left
if (sensorReading1 > 600) { small_stepper.step(-1); } // step right
if (sensorReading1 < 600 && sensorReading1 > 400) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
} // step right
}
manualActive = !manualActive;
}
//=========================================
// Automat control of drilling machine – advance
//=========================================
void automat(){
int speedForward = 0;
int speedDrill = 0;
int speedActivate = 0;
int i = 0;
int j = 7;
int btnContinue = 1;
if (lastButonBase) {lastButonBase=0;}
if (lastButonMax) {lastButonMax=0;}
while (!lastButonMax && !lastButonBase && !lastButonStart){
if (timerFlag){
speedForward++;
timerFlag=0;
}//end if timerFlag
if (drillDirection == 1){
small_stepper.step(1);
drillPosition++;
if (drillPosition == 2048) {drillPosition = 0;}
}//end if drillDirection
if (drillDirection == -1){
small_stepper.step(-1);
drillPosition–;
if (drillPosition == -1) {drillPosition = 2048;}
}//end if !drillDirection
if (speedForward == speedForwardValue){
speedActivate = !speedActivate;
speedForward=0;
digitalWrite( speedPinA, speedActivate);
}//end if speedForward
}//end while (!lastButonMax && !lastButonBase && !lastButonStart)
digitalWrite(speedPinA, LOW);
if (lastButonMax){
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
lastButonMax = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Start/Stop->END");
lcd.setCursor(0,1);
lcd.print("BtnJ->Continue");
while (!lastButonStart && btnContinue){
btnContinue = digitalRead(kPin);
delay(200);
}//end while (!lastButonStart && btnContinue)
if (!btnContinue){
forwardVelocity = -1;
drillVelocity = 0;
refresh=1;}
}//end if lastButonMax
if (lastButonBase){
lastButonBase = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Start/Stop->END");
lcd.setCursor(0,1);
lcd.print("BtnJ->Continue");
while (!lastButonStart && btnContinue){
btnContinue = digitalRead(kPin);
delay(200);
}//end while (!lastButonStart && btnContinue)
if (!btnContinue){
forwardVelocity = oldForwardVelocity;
drillVelocity = oldDrillVelocity;
refresh=1;
}
}//end if lastButonBase
if (lastButonStart){
automatActive = !automatActive;
}
}// end automat
//=========================================
// Automat control of drilling machine – change direction
//=========================================
void curbare(){
int speedForward = 0;
int speedDrill = 0;
int speedActivate = 0;
int i = 0;
int j = 7;
int btnContinue = 1;
while (drillPosition != drillAngleTarget){
small_stepper.step(1);
drillPosition++;
if (drillPosition == 2048) {drillPosition = 0;}
}// end while drillPosition
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
if (lastButonBase) {lastButonBase=0;}
if (lastButonMax) {lastButonMax=0;}
while (!lastButonMax && !lastButonBase && !lastButonStart){
Serial.println ("Start");
if (timerFlag){
speedForward++;
timerFlag=0;
}// end if timerFlag
if (speedForward == 2*speedForwardValue){
speedActivate = !speedActivate;
speedForward=0;
digitalWrite( speedPinA, speedActivate);
}// end if speedForward
}//end while (!lastButonMax && !lastButonBase && !lastButonStart)
digitalWrite( speedPinA, LOW);
if (lastButonMax){
lastButonMax = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Start/Stop->END");
lcd.setCursor(0,1);
lcd.print("BtnJ->Continue");
while (!lastButonStart && btnContinue){
btnContinue = digitalRead(kPin);
delay(200);
}//end while (!lastButonStart && btnContinue)
if (!btnContinue){forwardVelocity = -1;refresh=1;}
}//end if lastButonMax
if (lastButonBase){
lastButonBase = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Start/Stop->END");
lcd.setCursor(0,1);
lcd.print("BtnJ->Continue");
while (!lastButonStart && btnContinue){
btnContinue = digitalRead(kPin);
delay(200);
}//end while (!lastButonStart && btnContinue)
if (!btnContinue){
forwardVelocity = oldForwardVelocity;
refresh=1;
}
}//end if lastButonBase
if (lastButonStart){
curbareActive = !curbareActive;
}
}// end curbare
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: Fig.1.1. Figură explicativă tehnologie de forare pe orizontală 2. [305827] (ID: 305827)
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.
