Robot Care Urmareste O Linie Realizat cu Microcontrolerul Pic32 [microchip]
Robot care urmareste o linie realizat cu
microcontrolerul PIC32 [Microchip]
Cuprins
CAPITOLUL I : INTRODUCERE……………………………..…….1
CAPITOLUL II: COMPONENTA HARDWARE A PROIECTULUI…………………………………………………………8
2.1 Microcontrolerul PIC32MX320F128H
2.2 ChipKIT Uno32
2.3 Stabilizator de tensiune
2.4 Motoare si drivere de motor
2.5 Controlul cu senzori și utilizarea acestora.
CAPITOLUL III: COMPENENTA SOFTWARE A PROIECTULUI……………………………………………………..…42
3.1 Mediul de programare
3.2 Schema bloc
3.3 Descrierea functiilor
3.4 Codul in anexa
CAPITOLUL IV: IMPLEMENTAREA HARDWARE SI ETAPELE DE REALIZARE.……………………………………..………………50
CAPITOLUL V: CONCLUZII………………………………….…..57
BIBLIOGRAFIE
CAPITOLUL I : INTRODUCERE
În prezent roboții se împart în două mari categorii după utilizarea lor: roboți autonomi cu funcționare generală și roboți dedicați.
Roboții autonomi cu funcționare generală pot îndeplini o varietate de funcții independente. Aceștia pot în general naviga prin spații cunoscute, reușesc să își satisfacă nevoile energetice singuri (fie prin panouri solare sau prin revenirea la stația lor de reîncărcare unde se cuplează singuri), pot interfața cu uși electronice și ascensoare și pot îndeplini alte sarcini elementare. Precum computerele, aceștia se pot conecta la diferite rețele, li se poate schimba sau altera partea software și li se pot atașa accesorii pentru a le crește utilitatea. Roboții autonomi de uz general pot recunoaște persoane sau obiecte, pot răspunde la diferite alarme, pot monitoriza calitatea mediului sau pot avea diferite roluri în diferite părți ale zilei, funcțiile lor fiind însă limitate când aceștia trebuie să rezolve situații noi, de care nu s-au lovit în trecut.
Roboții dedicați sunt cei industriali, în general aceștia sunt imobili și au o funcție specifică în uzine cum ar fi: sudura, lipire, împachetare, amplasare componente electronice în locații specifice cu precizie maximă. Aceștia sunt utilizați în multe sarcini care pentru oameni ar fi prea plictisitoare, murdare sau periculoase de a le face cum ar fi explorarea altor planete, a vulcanilor, curățarea unor țevi lungi ce conțin materiale periculoase, dezamorsare de bombe etc.
Proiectul de licenta presupune construirea unui robot mobil autonom capabil sa urmareasca un traseu reprezentat de o linie (banda) de referinta de culoare inchisa(negru) pe o suprafata plana de culoare deschisa(alb). Traseul ales de mine este unul circular, linia nu prezinta intreruperi , robotul nu este nevoit sa ocoloeasca obstacole plasate pe linie.
Construcția totală a aparatului (doar parte hardware, fără soft) a durat aproximativ 3 luni deoarece majoritatea componentelor au fost comandate din străinătate și transportul durează în general destul de mult.În construcție am folosit materiale precum aluminiu, silicon (hot glue), bandă dublu adezivă, cauciuc și plastic.
Robotul are forma unei mașinuțe cu două roți în față, conectate la două motoare, o bilă rotativă în spate, așezate pe un șasiu din plexiglass, care se ghidează după 3 senzori cu infraroșu, așezați pe o bară, în față.
În Figura I-1: este prezentată schema mecanică a robotului și dimensiunile teoretice dorite în proiectarea sa.
Figura 1-2 : Robotul finalizat
Pentru deplasarea si directionarea robotului au fost folosite doua motoare pe care le-am alimentat de la bateria de 9V, prin intermediul puntii H. Ca microcontroler al acestui modul este folosit PIC32, care ruleaza la o frecventa de 80Mhz , ales datorita dimensiunilor sale reduse si suportului oferit.
Pentru programarea microcontrolerului am folosit uneltele de dezvoltare puse la dispoziție de Arduino® gratuit pe situl http://arduino.cc/en/main/software. Arduino Uno® este un mediu de dezvoltare bazat pe celebra platformă open source C++, care permite dezvoltarea și editarea facilă a programelor și algoritmilor. Cu ajutorul compilatorului inclus în platformă, programul compilează și construiește un program din limbaj C în cod mașină specific microcontrolerului PIC32® folosit în proiect. De asemenea, tot în acest mediu de dezvoltare este posibilă programarea precum și debuggingul software-ului pe microcontroler cu ajutorul unui programator sau emulator.
Motivul pentru care am ales acest proiect este în primul rând pasiunea pentru Inteligența Artificială, robotul meu fiind inteligent prin faptul că raspunde la stimuli (senzori), urmărind astfel traseul, fara a interacționa cu cineva.
CAPITOLUL II: COMPONENTA HARDWARE A PROIECTULUI
Componenta hardware a proiectului este reprezentata de toate componentele fizice folosite in alcatuirea robotului.
Figura II-1:
Am folosit urmatoarele componente:
O bara de senzori QTR-3A(3 senzori analogici),placa de baza PIC32, driver de motoare cu circuit integrat L298N , doua motoare de curent continuu 120:1 Polulu si 6 baterii de 9V.
Se observă împărțirea blocului in 3 module:
Cei 3 senzori IR vor transmite semnale analogice în funcție de ce culoare “văd”: ~200mV (alb) ; 3V-3,5V (negru)
PIC32 va prelua pe portul A semnalul de la senzori și având pragul logic pe la 1,5V-2V, va codifica automat semnalul la 0 sau 1. După aceea determină pe baza algoritmului, modul de comandă al motoarelor.
Microcontrolerul va trimite punții H duala – L298N – direcția și viteza (prin pwm) de rotire a motoarelor, aceasta trimițând semnale analogice celor două motoare.
Alimentarea placutei cu PIC32 si a driverului se face de la 6 baterii de 9V, asezate pe cadrul robotului.
2.1 Microcontrolerul PIC32MX320F128H
PIC este acronimul de la Peripheral Interface Controller, desemnând o familie de microcontrolere produse de Microchip Technology, având la bază PIC 1650 care a fost inițial dezvoltat de către General Instrument’s Microelectronics Division.
Compania Microchip produce o gamă de peste 550 microcontrolere pe 8, 16 sau 32 de biți, destinate unei largi game de aplicații. Pentru a facilita dezvoltarea de aplicații, Microchip oferă în mod gratuit mediul de dezvoltare MPLAB, ce asigură suport pentru toată gama de microcontrolere Microchip.
Microcontrolerele pe 8 biți din familia PIC produsă de către firma Microchip au o arhitectură Harvard modificată, cu magistrala memoriei de date separată de magistrala memoriei pentru program, având lărgimea magistralei memoriei de program de 12, 14 sau 16 biți.
În această familie vom găsi o gamă variată de microcontrolere, cu 6 până la 80 pini și cu o memorie pentru program între 384 B (octeți) și 128 KB. Cele mai simple microcontrolere din familia PIC de 8 biți au un set de instrucțiuni restrâns, cu numai 33 de instrucțiuni. Acest set de instrucțiuni se regăsește la majoritatea microcontrolerelor pe 8 biți, în acest fel fiind facilitată migrarea de la un model la altul. Aceasta permite ca programele scrise pentru un anumit microcontroler să poată fi rulate pe modele cu o arhitectură similară fără a fi necesare modificări ale codului.
Caracteristicile PIC32:
Arhitectură RISC cu un set redus de instrucțiuni;
Capacitate de procesare de până la 20 MIPS la 20 MHz;
Multiplicator de 2-cicluri prezent pe chip;
Conține 32 de regiștri de uz general de 8 biți
Prezintă 131 de instrucțiuni în set, majoritatea executându-se într-un singur ciclu de ceas;
-segmente de memorie nonvolatile de anduranța ridicată:
512 KB de memorie nonvolatilă (FLASH) de program auto programabilă din care 12 KB sunt ocupați de bootloaderul de arduino;
Porturi I/O digitale, care suportă curenți mari de intrare/ieșire (maxim 25mA);
Memorie RAM internă;
1 KB de memorie EEPROM sau FLASH;
Blocare de programare pentru motive de siguranță;
Controler programabil pentru intreruperi vectoriale;
-caracteristica perifericelor:
Două timere/countere pe 8 biți cu mod de comparare și separator de prescalare;
Timer/counter pe 16 biți cu separator de prescalare, mod de comparare și mod captură;
Counter în timp real cu oscilator separat;
Interfața serială SPI;
Interfața serială orientată de byți pe 2 fire compatibilă I2C;
Watchdog timer programabil cu oscilator pe chip, separat;
Comparatoare analogice;
Întreruperi interne și externe;
Ieșiri PWM (Pulse Width Modulation);
-caracteristici speciale ale microcontrolerului:
Interfață CAN (Controller Area Network);
Interfață bus I2C (Inter-Integrated Circuit);
Interfață serială SPI;
Interfață dedicată pentru afișaj LCD;
Interfață USB;
Funcții specifice pentru controlul motoarelor.
-32 de linii de intrare/ieșire programabile;
-Temperatura de funcționare: -40ºC -> +105ºC;
Figura II-2: Schema bloc a microcontrolerului PIC32
Familia microcontrolerelor pe 8 biți conține peste 400 de variante, grupate în trei categorii, după lungimea cuvântului instrucțiune, respectiv microcontrolere cu lungimea cuvântului instrucțiune de 12, 14 sau 16 biți (familiile reprezentative pentru acestea sunt PIC10, PIC12, PIC16, PIC18 si PIC32).
Familia PIC10 cuprinde unele din cele mai simple microcontrolere, în capsulă cu 6 sau 8 pini, destinate în special aplicațiilor cu alimentare de la baterie și aplicațiilor unde sunt impuse dimensiuni reduse. (Figura II-3)
Figura II-3: PIC10F200 în capsula SOT23
Familia PIC12 cuprinde microcontrolere în capsulă cu 8 pini, cu un preț de cost redus (0,41 USD/bucata). (Figura II-4)
Figura II-4: PIC12F508
Familia PIC16 conține microcontrolere cu performanțe medii, cu un set extins de dispozitive periferice, realizate în capsule cu 14 ÷ 64 pini.
Figura II-5: PIC16F505 în capsula cu 14 pini
Microcontrolerele din seria PIC18, disponibile în capsule cu 18 până la 100 pini, constituie versiunea cea mai performantă a microcontrolerelor de 8 biți Microchip, având câteva îmbunătățiri semnificative față de generațiile anterioare: multiplicator hardware, un set mai bogat de instrucțiuni, un număr mai mare de registre interne, ș.a..
Figura II-6: PIC18F97J60
Din familia PIC16 fac parte microcontrolerele cu o arhitectură pe 16 biți PIC24H și PIC24F, precum și procesoarele de semnal pe 16 biți dsPIC30F și dsPIC33F.
Figura II-7 : DSPIC33FJ256MC710
Familia PIC32 cuprinde o serie de microcontrolere cu performanțe înalte, în capsulă cu 64 sau 100 de pini, compatibile la nivel de pini cu microcontrolerele pe 16 biți dsPIC. Aceasta facilitează migrarea de la dsPIC la noile procesoare.
Figura II-8: PIC32MX3XXL
Microcontrolerele pe 8 biți din familia PIC produsă de către firma Microchip au o arhitectură Harvard modificată, cu magistrala memoriei de date separată de magistrala memoriei pentru program, având lărgimea magistralei memoriei de program de 12, 14 sau 16 biți.
În această familie vom găsi o gamă variată de microcontrolere, cu 6 până la 80 pini și cu o memorie pentru program între 384 B (octeți) și 128 KB. Cele mai simple microcontrolere din familia PIC de 8 biți au un set de instrucțiuni restrâns, cu numai 33 de instrucțiuni. Acest set de instrucțiuni se regăsește la majoritatea microcontrolerelor pe 8 biți, în acest fel fiind facilitată migrarea de la un model la altul. Aceasta permite ca programele scrise pentru un anumit microcontroler să poată fi rulate pe modele cu o arhitectură similară fără a fi necesare modificări ale codului.
Convertorul Analog-Digital :
Conversie prin registru de aproximări succesive
Durata unei conversii este de 1 Msps
16 pini analogi de intrare
Circuit unipolar , diferențial Sample&Hold
Mod automat de scanare a canalelor
Funcționează în timpul somnului și modul Idle
Convertorul A/D intern permite achiziționarea de semnale analogice direct de către microcontroler. La majoritatea microcontrolerelor PIC, portul PORTA este utilla altul. Aceasta permite ca programele scrise pentru un anumit microcontroler să poată fi rulate pe modele cu o arhitectură similară fără a fi necesare modificări ale codului.
Convertorul Analog-Digital :
Conversie prin registru de aproximări succesive
Durata unei conversii este de 1 Msps
16 pini analogi de intrare
Circuit unipolar , diferențial Sample&Hold
Mod automat de scanare a canalelor
Funcționează în timpul somnului și modul Idle
Convertorul A/D intern permite achiziționarea de semnale analogice direct de către microcontroler. La majoritatea microcontrolerelor PIC, portul PORTA este utilizat ca intrare analogică acești pini putând fi configurați fie pentru funcționare ca I/O digitală, fie ca intrare analogică. Modul de funcționare al convertorului A/D este controlat cu ajutorul regiștrilor speciali asociați
Pentru funcționarea convertorului A/D este necesară o tensiune de referință. Aceasta este programată cu ajutorul registrelor de control și valoarea tipică este de +5V. Funcționarea convertorului A/D este controlată cu ajutorul regiștrilor ADCON0 și ADCON1. Registrul ADCON0 îndeplinește următoarele funcții: selectează sursa de semnal de tact (bitul 7 – ADCS1), selectează canalul (bitul 6 – ADCS0), activează/dezactivează conversia (bitul 5/4 – CHS2/CHS1), comandă începutul conversiei (bitul 3 – CHS0). Bitul 2 (GO/DONE) al regiștrului ADCON0 îndeplinește următoarea funcție: prin setarea acestui bit se începe conversia A/D. Acest bit este pus pe 0 logic la finalizarea conversiei și poate fi testat din program pentru a determina dacă conversia a fost finalizată sau nu. Rezultatul conversiei A/D este stocat în regiștrii ADRESH și ADRESL. ADRESL conține biții cei mai puțin semnificativi, iar ADRESH conține cei doi biți mai semnificativi în cazul conversiei pe 10 biți. Registrul de control ADCON1 specifică modul de configurare al portului PORTA și formatul datelor de ieșire.
O caracteristica importata a unui convertor analog-digital o constituie rata de esantionare. Aceasta depinde de timpul dintre doua conversii succesive si afecteaza modul in care forma de unda originala va fi redata dupa procesarea digitala. Figura II-9 arata modul in care semnalul esantionat va fi reconstituit in urma trecerii printr-un convertor digital – analog (DAC). Dupa cum se poare observa, semnalul reprodus nu este identic cu cel original. Daca rata de esantionare ar creste este de la sine inteles ca semnalul reprodus ar aproxima din ce in ce mai bine originalul.
Figura II-9 Reconstrucția semnalului eșantionat
PWM (Pulse Width Modulation)
PWM (Pulse Width Modulation) este o tehnică folosită pentru a varia în mod controlat tensiunea data unui dispozitiv electronic. Această metodă schimbă foarte rapid tensiunea oferită dispozitivului respectiv din ON în OFF și invers. Perioada de timp corespunzătoare valorii ON dintr-un ciclu ON-OFF se numește factor de umplere (duty cycle) și reprezintă, in medie, ce tensiune va primi dispozitivul electronic. Astfel, se pot controla circuitele analogice din domeniul digital. Practic, asta înseamnă că un LED acționat astfel se va putea aprinde / stinge gradual, iar în cazul unui motor acesta se va învârti mai repede sau mai încet.
Figura II-10 : Schema logică a unui circuit PWM
Factorul de umplere se exprimă în procente și reprezintă cât la sută din perioada unui semnal acesta va fi pe nivelul ON. În Figura 1 se pot observa semnale PWM cu factori de umplere diferiți. Astfel, se poate deduce foarte ușor formula pentru a obține valoarea factorului de umplere (D).
Având un semnal dreptunghiular de frecvență cunoscută, singurul parametru care poate fi variat este “Duty Cycle”. Acesta reprezintă procentul din perioada semnalului în care acesta este pe nivelul “high”. In figura II-11 de mai jos sunt prezentate formele de undă cu un duty cycle de 10 , 50 respectiv 90%. Duty Cycle descrie lățimea unui puls în procente. Un Duty Cycle de 75% inseamnă că timp de 75% dintr-un cicle generatorul nostru primește curent față de 25% din timp când nu primește. Un Duty Cycle de 100% inseamnă că generatorul nostru primește curent tot timpul și nu am avea nevoie de un PWM.
Figura II-11 Forme de undă cu diferiți factori de umplere
Modularea folosește variația factorului de umplere a unei forme de undă dreptunghiulară pentru a genera la ieșire o tensiune analogică. Considerând o formă de undă dreptunghiulară f(t) cu o valoare minimă ymin și o valoare maximă ymax și factorul de umplere D valoarea medie a formei de undă e dată de relația:
Pentru a controla turația motoarelor de current continuu există mai multe metode. Cea mai simplă ar fi înserierea unui rezistor variabil in circuitul de alimentare al motorului. Prin modificarea valorii rezistenței se modifică tensiunea aplicată motorului. Variația tensiunii nu este proporțională cu varianția rezistenței ci depinde si de curentul absorbit de motor. Această metodă nu este eficientă, având in vedere faptul că se pierde foarte multă energie prin disipare de căldură.
Cea mai des utilizată metodă de control a turației este comanda cu impulsuri modulate în lățime PWM (Pulse Width Modulation).
Variația turației motorului se face prin cresterea sau micsorarea timpului în care semnalul de comandă are valoarea 1 logic (tON). Astfel la un factor de umplere de 100%, motorul are turația maximă, deci tON este maxim tOFF este zero. La un factor de umplere de 50 %, motorul are jumatate dinn turația nominal deci tON = tOFF. Iar la un factor de umplere de 0%, motorul este oprit deci tOFF este maxim iar tON este 0.
Majoritatea microcontrolerelor pot genera semnale PWM. Pentru măsurarea timpului cât semnalul este în 1 logic si al timpului cât stă în 0 logic, se foloseste un Timer. Pentru a genera un astfel de semnal numărătorul este incrementat periodic si este resetat la sfârsitul fiecărei perioade a PWM-ului. Când valoarea numărătorului este mai mare decat valoarea de referință, iesirea PWM trece din starea 1 logic in starea 0 logic (sau invers).
In cazul microcontrolerului PIC32, pentru a genera semnale PWM, este nevoie de programarea pinului RC5/CCP1 sau RD7/CCP2. Desigur, pinul folosit pentru generarea PWM (RC5 sau RD7) se va lega la pinul PWM (3 sau 4) al punții H (de pe J3).
Avantajele comenzii PWM sunt:
Putere consumată și debitată, mai mică. Puterea disipată pe dispozitivele electronice de putere care lucrează în comutație este mult mai mică decât puterea disipată pe elementele de reglare serie;
Puterea consumată este cu atât mai mică cu cât dispozitivul electronic de putere care lucrează în comutație se apropie de performanțele unui comutator electric ideal;
Ca o consecință a celor de mai sus, avem randament energetic ridicat;
volum redus;
posibilitatea includerii ușoare în scheme de automatizare, care reprezintă o cerință importantă a circuitelor electronice de putere;
prin controlul factorului de umplere, circuitele de comandă PWM pot furniza tensiuni de iesire dintr-o gama mare;
tensiunile stabilizate de la ieșire sunt izolate galvanic față de tensiunea de la intrare.
Deoarece alimentarea se face în mod frecvent de la un acumulator, conservarea energiei electrice este o problemă foarte importantă. Acest lucru se face printr-o tehnică specifică de comandă care să limiteze la minim consumul de putere pentru acționarea motorului. Soluția cea mai eficientă, cu avantaje diverse, implementată la ora actuală în tehnică, pentru rezolvarea respectivei probleme este utilizarea modulației PWM pentru comandă motorului de curent continuu.
Comanda PWM a motorului asigură o reglare a vitezei motorului într-o gamă foarte largă, cu un consum energetic redus. Implementarea algoritmului se face folosind microcontrolere din familia PIC. Soluția aleasă este una care optimizează la maxim consumul energetic necesar comenzii motorului dar asigură în același timp o flexibilitate și o adaptabilitate crescută pentru respectiva schema de comandă. Modificând algoritmul scris în microcontroller se poate comanda motorul cu viteză variabilă, în funcție de diverși factori externi sau în ambele direcții de deplasare.
2.2 ChipKIT Uno32
Aplicatia in sine , foloseste un mediu de dezvoltare bazat pe un microcontroler Arduino modificat pentru a suporta microcontrolerul PIC32. Este compatibila cu multe exemple de cod existente pe Arduino, materiale de referinta si alte resurse. Microprocesorul PIC32 poate fi programat folosind aplicatie MPLAB.
ChipKIT Uno32 se bazeaza pe clasicele platforme Arduino, dar are performante mai mari pe microcontrolerul PIC32. Acesta dispune de o interfață port serial USB pentru conectarea la IDE și poate fi alimentat prin USB sau o sursă de alimentare externă. Placuta Uno32 este avantajata de microcontrolerul PIC32. Acest microcontroler dispune de un procesor pe 32 de biti , ruleaza la o viteza de 80Mhz , are o memorie flash de 128K si o memorie de date SRAM de 16K.
Uno32 poate fi programat folosind un mediu de dezvoltare bazat pe Arduino, modificat pentru a susține PIC32. În plus, Uno32 este pe deplin compatibil IDE Microchip MPLAB și PICKit3 în sistem programator / depanator.
MPLAB este un pachet de program Windows ce face scrierea și dezvoltarea unui program mai ușoară. Poate fi descris cel mai bine ca un mediu de dezvoltare pentru un limbaj de programare standard ce este folosit pentru programarea unui computer PC. Unele operații ce erau făcute din linia de instrucțiuni cu un număr mare de parametri până la descoperirea IDE-ului, "Integrated Development Environment", sunt acum făcute mai ușoare prin folosirea MPLAB. În orice caz, programul scris este ușor de citit, și este disponibil un help bine documentat. MPLAB constă din câteva părți:
– Gruparea fișierelor aceluiași proiect într-un singur proiect (Project Manager);
– Generarea și procesarea unui program (Text Editor);
– Simulator de program scris, folosit pentru simularea funcționării programului în microcontroler.
2.4 Motoare și drivere de motor
Pentru ca robotul să se poată deplasa sau să își poată mișca vreun membru trebuie să amplasăm și să controlăm diverse motoare care au atașate fie roți care pot servi ca principalul mijloc de locomoție sau diverse roți zimțate care pot produce deplasarea unui braț sau strângerea unui clește.
Motoarele sunt dispozitive care în funcție de funcția robotului pot fi ori hidraulice, ori electrice. Motoarele hidraulice sunt folosite la roboții care au rolul de a acționa asupra unor obiecte de greutate mare, deoarece motoarele electrice nu pot face față la asemenea sarcină. Acestea din urmă sunt în schimb folosite când vine vorba de sarcini care au nevoie de exactitate mare, de precizie, deoarece ele pot fi controlate la un nivel mult mai bun decât motoarele hidraulice.
În construcția unui linefollower sunt necesare 2 motoare pe spate și un punct de sprijin în fața, care poate fi fie o bilă de metal/plastic, fie un obiect mic cu aderența scazută, fie chiar senzorii robotului. Motoarele în sine sunt foarte importante deoarece ele asigură cel mai important lucru într-un concurs de linefollower: viteza. Viteza este dată de numărul de rotații ale motorului (rpm) și de mărimea roții atașate axului motorului. Evident, o roata mai mică va oferi o viteza mai mică. Pentru linefollower se utilizează în general motoare în curent continuu (DC motors).
În practică se intâmpină multe dificultăți în utilizarea motoarelor. Din punct de vedere al vitezei, cu cât motorul are mai multe rpm, cu atât necesită un voltaj mai mare si un curent mai mare, deci alimentarea (bateria) trebuie să fie de putere mai mare, iar driverul de motoare trebuie să suporte curenții ce trec prin motoare. Pe lângă aceste lucruri, cu cât viteza este mai mare cu atât controlul unui linefollower devine mai dificil, in principal la curbe unde din cauza inerției robotul nu reușește să se mențină pe traseu la viteză mare. Pentru a rezolva această problemă se utilizează roți speciale (pentru a evita alunecarea), de grosimi mai mari pentru a asigura un contact mai bun cu solul. În continuare, se pot amplasa greutați pe motoare pentru a apăsa pe roți, sau chiar o pompă de aer, care sa tragă aerul de sub robot făcându-l astfel aparent mai greu.
În general, motoarele sunt utilizate impreună cu cutiile de reducție. Rolul acestora este de a reduce rpm-ul motorului pentru a beneficia de un cuplu mai mare. Cuplul unui motor este determinat practic de forța maximă necesara pentru a bloca motorul. Astfel, daca un motor nu are destul cuplu, acesta riscă să nu pună în mișcare un robot, dacă robotul este destul de greu. În principiu, dacă mărim viteza, pierdem din cuplu, iar cuplul este necesar pentru a nu bloca motorul. În cazul în care motorul este blocat spunem că acesta a intrat in stall, iar curentul ce trece prin motor în această situație este la valoarea maximă admisă.
Cel mai simplu de comandat, pentru a obține o viteză variabilă, sunt motoarele de c.c. deoarece cu cât tensiunea aplicată este mai mare cu atât viteza este mai mare.O mișcare de poziționare este compusă dintr-o accelerare, dintr-o deplasare cu viteză constantă și o frânare, conform unei traiectorii de viteză ca în figura II- .
Figura II-12 Traiectoria de viteză
Timpul de deplasare este td= ta+ tc +tf , iar timpul de poziționare este suma dintre timpul de
deplasare și timpul de stabilire (de amortizare a oscilațiilor sistemului de poziționare după atingerea poziției finale), tp= td+ ts.
Pentru a obține viteza variabilă este suficient să aplicăm o tensiune variabilă. Tensiunea
variabilă poate fi aplicată în mai multe feluri:
informația numerică este convertită într-o informație analogică și este aplicată unui tranzistor (pentru comanda într-un sens) sau la doi tranzistori (pentru comanda în ambele sensuri). Tensiunea variabilă astfel obținută se aplică motorului de c.c. Un dezavantaj este folosirea unui convertor D/A și puterea pierdută în tranzistorii care lucrează în zona liniară.
informația numerică creează un semnal PWM, cu frecvența destul de mare ca motorul,
datorită inerției, să integreze impulsurile. Motorul va avea o viteză proporțională cu
factorul de umplere. Acest mod de comandă este mult mai simplu și tranzistorul, fiind
în regim de comutație nu disipă inutil.
Figura II-13: Comanda unui motor de curent continuu
De obicei pentru a alimenta un asemenea motor avem nevoie de o tensiune de până la 20V și un curent între 500 mA și 8A, iar comandă lor necesită un curent de 20 mA, deci pentru a le putea controla pe circuitul nostru este nevoie de un montaj special cunoscut în mod uzual ca o punte H descrisă în Figură 2-12.
Figura II-14: Proiectarea Punții H
O punte H este un circuit electronic care permite unei tensiuni să fie aplicată pe un consumator în orice direcție. Aceste circuite sunt folosite deseori în robotică sau alte aplicații asemănătoare pentru a permite unui motor de curent continuu să se rotească atât înainte cât și înapoi (în sens invers). Punțile H sunt disponibile ca și circuite integrate, sau pot fi construite din componente distincte.
Termenul de punte H este derivat din reprezentarea grafică uzuală a circuitului. O punte H este construită din patru comutatoare (mecanice sau electronice, în cazul nostru niște tranzistoare). Când comutatoarele T1 și T4 (conform Figurii II-3a) sunt închise, iar T2 și T3 sunt deschise o tensiune pozitivă va fi aplicată asupra motorului. Prin deschiderea T1 și T4 și închiderea T2 și T3, aceasta tensiune este inversată, permițând astfel o operare opusă a motorului.
Utilizând figura de mai sus observăm că comutatoarele T1 și T2 nu ar trebui niciodată să fie închise în același timp, deoarece asta ar cauza un scurt circuit la sursa de tensiune. Aceiași condiție se aplică și pentru comutatoarele T3 și T4.
Astfel dacă particularizăm circuitul din Figura 2-12 pe cazul nostru particular, când pentru comutatoare folosim tranzistoare, putem spune că el funcționează în felul următor: dacă tranzistorii T1 și T4 sunt în regim normal de funcționare, curentul de la sursa de alimentare alimentează motorul. În acest timp tranzistoarele T2 și T3 sunt în blocare și putem să ne gândim la ele ca și cum nu ar exista în circuit. Prin alegerea perechii de tranzistoare care va funcționa și care va fi în blocare controlăm direcția tensiunii care străbate motorul. Deoarece motoarele cu magneți permanenți își schimbă direcția de rotire în funcție de tensiunea ce îi străbate putem controla dacă motoarele noastre se învârtesc înainte sau înapoi, deci putem controla sensul de deplasare a robotului. Dacă ne gândim la mișcare și robotul nostru are cel puțin 2 roți, fiecare atașată unui motor controlat de o punte H, putem să controlăm mișcarea astfel: pentru ca robotul să meargă înainte la ambele punți H activăm tranzistoarele T1 și T4, dacă dorim că robotul să meargă înapoi activăm doar tranzistoarele T2 și T3, iar dacă dorim că acesta să se întoarcă la o punte H activăm T1 și T4, iar la cealaltă T2 și T3. Turația motorului este dată de factorul de umplere a semnalului PWM dat de microcontroller. Cu cât factorul de umplere este mai mare cu atât turația este mai mare. Prin extensie dacă ne gândim la mișcarea robotului dacă ambele motoare funcționează în același sens, dar unul are o turație mai mare și celălalt mai mică, robotul va avea o traiectorie curbată.
Figura II-15: Stările Punții
Aranjamentul punții H este folosit în general să inverseze polaritatea motorului, dar de asemenea aranjamentul poate fi folosit și pentru frânarea motorului, unde motorul ajunge la o oprire rapidă, când terminalele motorului sunt supuse unui scurt circuit, sau să i se permită motorului un mers în gol până la oprire, când motorul este efectiv deconectat de la circuit.
Tabelul din Figura 2-14 sumarizează aceste operații cu T1 -> T4 ce corespund Figurii 2-11.
Figura II -16: Tabelul de stări ale Punții
O punte H este de obicei construită folosind dispozitive de polaritate opusă cum ar fi PNP BJT-uri (tranzistoare bipolare de joncțiune) sau MOSFET-uri (tranzistoare cu semiconductor de metal-oxid cu efect de câmp) pe canal P conectate la o magistrală de tensiune mare și NPN BTJ-uri sau MOSFET-uri pe canal N conectate la o magistrală de tensiune mică.
Proiectarea cea mai eficienta cu MOSFET-uri folosește MOSFET-uri de canal N atât pe partea ridicată cât și pe partea scăzută deoarece în mod uzual au o treime din rezistență de ON a unui MOSFET pe canal P. Aceasta necesită un design mai complex deoarece porțile parții înalte ale MOSFET-urilor trebuie să fie acționate pozitiv, cu privire la sursa de alimentare de curent continuu.
Modul cel mai utilizat de control al motoarelor este prin folosirea circuitului integrat SGS Thompson L298N care încorporează 2 punți H într-o singură capsulă, deci cu acest circuit se pot controla simultan independent 2 motoare.
Figura II-17: Circuitul integrat L298
În primul rând, nu putem conecta un motor direct la microcontroller deoarece acesta nu poate asigura curentul necesar pentru funcționarea motorului. Prin urmare, controlul motoarelor este realizat folosind o punte H. Puntea H primește input de la microcontroller și generează output-ul corespunzător pentru motoare. Aceasta permite controlarea vitezei și a sensului de rotație a motoarelor.
Placuța cu driverul a fost corodată și conține:
3 conectori cu șurub (cate unul pentru motoare si unul pentru alimentare)
1 condesator de 1000uF, cu suport de până la 35V
7 pini de intrare (1 Vcc + câte 3 pentru fiecare motor: PWM, Input1, Input2)
Punte H duală: L298N : Aceasta permite cuplarea celor două motoare datorită existentei a 2 canale de control. Un canal se activează prin pinii de enable (EN), pe care se da PWM-ul pentru a stabili viteza motoarelor (pwm=0 → turatie=0% ; pwm=255 → turatie=100%). L298 are 4 intrari si 4 iesiri . Pinii de input reprezinta output-ul de la microcontroller, iar pinii de output reprezinta input-urile pentru motoare. VSS va decide valorile high/low pentru tensiunea de intrare, iar VS este tensiunea la care dorim sa functioneze motoarele.
Circuitul L298 trebuie să aibă pinii conectați la alimentarea de la baterie, pinul de tensiune de referință la 5V adică la tensiunea de pe placă PCB, un pin la masă și 6 pini trebuie să fie conectați la microcontroler la pinii de ieșire digitali ai acestuia prin care va primi comenzile de funcționare. Cei 6 pini legați la microcontroler sunt de fapt 2 perechi de 3 pini, pentru cele 2 punți H încorporate ce au următoare semnificație: enable motor, direcția A (înainte) și direcția B (înapoi). Pinul care va intra în circuitul L298 trebuie conectat la un pin digital de ieșire al microcontrolerului care suportă funcția de PWM ceea ce înseamnă că poate trimite un semnal dreptunghiular al cărui factor de umplere poate fi modificat după nevoile noastre pentru a determina viteză de rotație a motorului. Deasemenea pentru ca întregul circuit de comandă al motoarelor să funcționeze în mod corect trebuie adăugată o punte de diode care să absoarbă fluctuațiile de tensiune create de motor când își schimbă sensul de funcționare. Această punte de diode este creată prin amplasarea pentru fiecare din tranzistorii din puntea H a unei diode în sens invers tranzistorului. Deoarece nu creăm noi puntea H, ci folosim circuitul L298 ce are 2 punți H încorporate și nu putem avea acces direct la ele să amplasăm diodele va trebui să creăm o punte de diode externă cum este prezentat în figura II-18.
Figura II-18: Puntea de diode și comandarea circuitului integrat L298
Figura II-19: Conexiunile pinilor la L298
Parametri de funcționare maximi:
Vs – sursa de alimentare: 50V;
Vss – sursa logică de tensiune: 7V;
VI, Ven – tensiune de intrare și de activare: de la -0.3 la 7 V;
Io – Curentul de vârf la ieșire (pe fiecare canal):
Non repetitiv (t = 100ms): 3 A;
Repetitiv (80% on -20% off; ton=10ms): 2.5 A;
Operații cu curent continuu: 2 A;
Ptot – Putere totală disipată: 25 W
Top – Temperatura de funcționare a joncțiunii: de la –25 la 130 °C;
T stg, Tj – Temperatura de depozitare și a joncțiunii: de la –40 la 150 °C;[13]
2.5 Controlul cu senzori și utilizarea acestora
Pentru a se putea deplasa fără să se izbeasca de primul obiect întâlnit în cale, robotul folosește diversi senzori.Ultima dintre părțile esențiale pentru a construit un robot este sistemul de senzori prin care acesta își poate analiza împrejurimile și să acționeze asupra acestora. Un senzor este un convertor care măsoară o mărime fizică și o convertește într-un semnal analogic sau digital care poate fi interpretat de microcontroler. Senzorii analogici vor trimite către microcontroler un semnal cu tensiune variabilă depinzând de ce citesc aceștia. Acești tipi de senzori trebuiesc conectați la un microcontroler la un convertor analogic digital deoarece acesta nu poate lucra decât cu biți. Ieșirea senzorului digital va fi o serie de biți care reprezintă codarea valorii citite. Senzorul pentru a fi exact trebuie să fie sensibil numai la proprietatea mărimii rezolvate și insensibil, adică să nu fie deloc influențat, la orice alt factor cu care se poate întâlni când măsoară proprietatea dorită. Sensibilitatea sa este definită că raportul dintre semnalul de ieșire și proprietatea măsurată.
Senzorii au rolul de a prelua informația primară referitoare la mărimile măsurate (achiziționate) din sistem, mărimi care sunt în general de natură neelectrică și de a converti această informație într-o mărime de natură electrică.
Rolul senzorului este de a transforma o mărime fizică de intrare (energie), provenită din mediu, într-o mărime electrică (de obicei) de ieșire, mărime ce poate fi măsurată, prelucrată și afișată. Senzorul măsoară forțele de interacțiune dintre robot și obiectele înconjurătoare, verifică corectitudinea traiectoriei descrisă de organului terminal și "percepe", vizual sau tactil, obiectele din mediul înconjurător.
Depinzând de ce dorim ca robotul nostru să facă trebuie să ne decidem ce senzori și ce microcontroler să alegem deoarece fiecare microcontroler are un număr limitat de porturi de intrare/ieșire la care putem conecta senzorii, în special că fiecare tip de senzor are nevoie de un anumit tip de pin: analogic sau digital depinzând de tipul său.
Pentru dezvoltarea proiectului de line follower a fost ales senzorul QTR-3A. Modulul este compus din 3 IR emitoare și receptoare. Fiecare fototranzistor este conectat la un resistor pentru a forma un divizor de tensiune, care produce o tensiune de ieșire analogică intre 0 și 5 V, in funcție de IR reflectat .
Figura II-20 Principiul de funcționare sensor IR
Singurii senzori necesari unui robot de linefollowing sunt cei care detecteaza linia neagra. Acestia sunt senzori infrarosii de distanta foarte mica (3-5mm). Emitatorul senzorului trimite lumina infrarosie care se reflecta pe suprafata podelei si ajunge inapoi la receptor. Avand in vedere ca un obiect negru absoarbe mai multa lumina decat un obiect alb, lumina infrarosie reflectata pe suprafata neagra va fi mai putina decat cea reflectata de suprafata alba a terenului. Se face astfel distinctia intre culoarea neagra si alba a terenului prin cantitatea de lumina primita inapoi la receptor, adica se poate distinge traseul de culoare neagra.
Atât emițătorul cât și detectorul au o rază de acțiune. În funcție de distanța traiectoriei și senzor, poate fi depistată sau nu.
Robotul proiectat de mine conține o baretă de senzori astfel încât traiectoria pe care o urmărește este mai mica decât linia de senzori. Asta mă ajută sa știu când drumul se curbează, astfel atunci când senzorii cei mai din margine detectează traiectoria înseamnă că drumul se curbează; dacă depistează senzorul cel mai din stânga, înseamnă că drumul face o curbă la stânga, iar dacă depistează cel mai din dreapta traiectoria este curbată spre dreapta.
Informațiile primite de la senzorii IR sunt susceptibile la erori dacă în încăperea respectivă există o valoare mai mare decât o valoare prag de lumină naturală (provenită de la soare). Senzorii IR au o rază de acțiune relativ scurtă datorită fapului că intensitatea semnalului IR este invers proporțională cu pătratul distanței. Cu toate acestea senzorii IR sunt des folosiți în realizarea roboților de tip line follower, roboți care depistează obstacole, care ies din labirint, deoarece au un preț redus.
Senzorul de linie QTR-3A
Senzor de reflexie QTR-3A este conceput ca un senzor de linie, dar poate fi folosit si ca senzor de reflexie.
Senzorul de linie este utilizat în menținerea robotului pe traseul dorit. El detectează marginea albă a traseului și transmite microcontrolerului acest lucru pentru că acesta să decidă acțiunea robotului. Modulul este un purtator convenabil pentru 3 emitatoare IR si perechi de receptoare (fototranzistoare).
Senzorul este format din două componente: un led IR și un fototranzistor sensibil la IR. Când se aplică 5V pe pinul VCC și GND led-ul IR va transmite o lumină infraroșie. În serie cu led-ul IR este plasată o rezistență de 100Ohm pentru a limita curentul. O rezistență de 10kOhm pune pinul de output pe HIGH, dar când lumina emisă de led-ul IR este reflectată înapoi în fotorezistor pinul de output coboară către LOW. Cu cât fototranzistorul primește mai multă lumină cu atât scade tensiunea pe pinul de output. Acesta va da la ieșire o valoare de tensiune care va fi transformată de către un convertor ADC într-o valoare între 0 și 1024, 0 pentru negru și 1024 pentru alb. Cu senzorii spatiati la intervale de 0.375'( 9.525 mm) de-a lungul axului placii,aceasta matrice functioneaza bine ca un detector de line-follower pentru roboti, traseul de linii fiind confectionat in mod obisnuit folosind banda electrica neagra de dimensiune 3/4”(19mm). Senzorul din mijloc este pozitionat de alungul axului scurt al placii.
Interfațare cu ieșirile QTR-3A
Există mai multe moduri în care puteți interfață cu ieșirile QTR-3A:
-Putem folosi un microcontroler ADC pentru a măsura tensiuni
-Putem utiliza un comparator cu un prag reglabil pentru a converti fiecare tensiune analog într-un (de exemplu, negru / alb) semnal digital care poate fi citit de linia de I/O digitală
– Putem conecta fiecare ieșire direct la un port de I / O digital al microcontrolerului.
Specificații:
Tensiune de alimentare: 5V
Curent: 50 mA
Dimensiuni: 1.25″ × 0.3″ × 0.1″ (32 × 8 × 3 mm)
Formatul de ieșire: 3 tensiuni analogice
Gama tensiunii de ieșire: 0 V la tensiunea furnizată
Figura II- 21 Senzorul de reflexie , dimensiunile acestuia
Figura II-22: Diagrama schematică a modulului
2.3 Stabilizatorul de tensiune
Stabilizatorul de tensiune sau regulatorul de tensiune este un aparat electric ce are rolul de a stabiliza tensiunea electrică de alimentare, protejând astfel echipamentele împotriva fluctuațiilor. Fluctuațiile de tensiune pot induce funcționarea defectuoasă sau chiar defectarea echipamentelor conectate la rețeaua electrică de alimentare. Stabilizatorul de tensiune cu servomotor este caracterizat de faptul că transformatorul este echipat cu un servomotor care, la valori diferite ale tensiunii de intrare, poate accesa valori intermediare de tensiune pe ieșire, fapt ce face ca marja de eroare a stabilizării sa fie foarte mică, în jurul valorii de 3 %. Stabilizatorul de tensiune își găsește utilitatea intr-o multitudine de situații, dat fiind faptul că majoritatea echipamentelor electrice, electronice sunt sensibile la fluctuațiile de curent.
Una dintre primele provocări ale 3,3V este generarea tensiunii de 3,3V. Prin aceasta se înțelege interfațarea unor sisteme de 5V la sisteme de 3,3V, pornind de la existența unei surse stabile de 5 VDC. Această secțiune prezintă soluții de stabilizatoare de tensiune proiectate pentru trecerea de la 5V la 3,3V. Un design cu cerințe modeste de curent poate fi realizat prin utilizarea unui stabilizator liniar simplu. Curenții mai mari pot cere soluții de stabilizatoare în comutație.
Un circuit electronic este alimentat, de regula, la una sau doua surse de alimentare cu tensiune continua, cel mai adesea de la una singura. Diferitele component au inca nevoie de tensiuni de valori diferite si este total neeconomic sa utilizam cate o sursa de alimentare pentru fiecare. Divizorul rezistiv ne permite realizarea, pornind de la o sursa de alimentare cu tensiunea Valim, a unei surse echivalente, cu orice tensiune Thevenin dorim, între zero si Valim. Vom vedea însă că noua sursă nu mai este una ideală de tensiune; putem micșora rezistența ei echivalentă prin trecerea unui curent de intensitate mare prin rezistențele divizorului.
În figura 2.14 , divizorul rezistiv este conectat la sursa de alimentare,între bornele sale de acces , masă și nodul A. În gol, același curent străbate rezistențele.
Rezistența echivalentă se calculează ușor prin pasivizare, sursa ideală de tensiune este legată la un capat la masă. Astfel, rezistența echivalentă a divizorului rezistiv este egală cu combinația paralel a celor doua rezistențe.
Toate componentele electrice folosite de către robot au nevoie de o sursă de tensiune, incluzând senzorii, microcontroler-ul, driverul de motoare și motoarele. Fiecare componentă, insă, poate necesita tensiune de alimentare diferită.
Pe un robot este de preferat să existe o singură alimentare, adică o singură baterie, si să se poată modifica tensiunea pentru ca toate elementele robotului să funcționeze corect. În acest sens se folosesc circuite electrice care pot modifica tensiunea la valorile necesare (ex: stabilizatoare de tensiune, diode zener, divizoare de tensiune, punți redresoare, etc.) . Motoarele au un consum foarte mare de curent și de aceea este nevoie de o baterie cu rată mare de descărcare. Se folosește o baterie Li-Po (litiu-polimer) care este pe deasupra și foarte usoară.
Pentru circuitele electronice de putere mai mare, principala sursă de energie este rețeaua de curent alternativ de 50Hz, dar unele circuite nu acceptă direct curent alternativ, ci o tensiune
continuă simetrică(amplificatoare audio) sau o tensiune de 3 ori mai mică decât cea de la rețea,
pentru asta utilizăm o sursă în comutație(cele mai des folosite în ziua de astăzi) corect dimensionată pentru alimentarea acesteia.
În proiectarea unei surse de alimentare de calitate, fiabilă și cu randament ridicat se
iau în vedere următoarele cerințe:cost de producție mic,să utilizeze tehnologie modernă, dimensiuni
și greutăți cât mai reduse și stabilitate în timp.
O sursă liniară poate produce doar o tensiune mai mică ca tensiunea de intrare. Să luăm drept exemplu un dispozitiv care necesită o tensiune de 5V la un curent de circa 1A și dispunem doar de o sursă de alimentare de 12V. Dacă folosim un circuit integrat dedicat, gen LM7805,acesta are nevoie de o tensiune de minim 7.5V la intrare pentru a asigura cei 5V și 1A la ieșire. Diferența dintre tensiunea de intrare și cea de ieșire se numește Voltage drop și influențează direct randamentul sursei, în cazul de față circuitul integrat va trebui să disipe 7W pentru a asigura cei 5W necesari dispozitivului ceea ce oferă o eficiență de circa 41%. Dacă utilizăm o sursă în comutație randamentul ei depăsește 80% deoarece pierderile sunt minime pe elementele de putere.
Funcționarea circuitului de alimentare
O altă parte importantă din componența unui robot este sursa de tensiune prin care este alimentat tot sistemul și datorită căreia robotul prinde viață. Deoarece acumulatorul pe care îl folosim are tensiunea de 18 V și intensitatea de 4000 mA trebuie ca între acesta și circuitele care dorim să le alimentăm să întrepunem un regulator de tensiune care va transforma tensiunea de la intrare într-o tensiune de 5V pe care noi putem să o utilizăm. Cu tensiunea rezultată putem alimenta atât microcontrolerul cât și sensorii și driverele de motor.
Circuitul integrat utilizat la acest robot este LM2940CT-5 care se implementează conform figurii 2-
Figura II-23: Proiectarea sursei de alimentare
În figură 2- este prezentat modul dorit de proiectare al sursei de alimentare pentru ca aceasta să funcționeze la parametri doriți. Design-ul ne cere în mod specific amplasarea condensatorilor în acest fel și cu aceste valori, puși atât pe intrarea cât și pe ieșirea regulatorului de tensiune și au rolul de a filtra tensiunea de elemente parazite care ar putea duce la oscilația tensiunii cu care se va alimenta circuitul nostru: Cout trebuie să fie de cel puțin 22µF pentru a se menține stabilitatea. Această valoare poate fi crescută fără margine pentru a se menține tensiunea de ieșire la valoarea dorită în timpul regimurilor tranzitorii. Acesta trebuie să fie localizat cât mai aproape de regulatorul de tensiune. Condensatorul trebuie să aibă parametrii de operare în funcție de temperatură în aceiași parametri cu cei ai regulatorul pentru o bună funcționare. Acestă oscilație nu va apărea pe un voltmetru deoarece acestea au viteza de reacție mică, dar dacă analizăm semnalul cu un osciloscop putem observa că tensiunea are o oscilație de frecvența mare în lipsa condensatoarelor.
Figura II-24 : LM2940CT-5
LM2940CT-5 este un regulator pozitiv de tensiune ce are încorporează abilitatea de a scoate la ieșire un curent de 1A cu o cădere de tensiune de obicei de 5V pe toată gama de temperatură suportată. Deasemenea acesta prezintă posibilitatea de a reduce curentul de masă când diferența dintre tensiunea de intrare și cea de ieșire depășește 3V.
Caracteristici:
Căderea de tensiune este de 5V la Io=1A;
Curentul de ieșire depășește 1 A;
Tensiunea de ieșire este tăiată înainte de asamblare;
Protecție a bateriei prin oprirea regulatorului când este depășită tensiunea maximă;
Limita internă a curentului de scurt circuit;
Interval de temperatură: 0 ̊C≤TJ≤125 ̊C;
Tensiune maximă de intrare: 26V;[12]
Figura II-25: Caracteristicile LM2940CT-5
Figura II-26: Schema echivalentă a LM2940CT-5
Un radiator poate fi necesar în funcție de puterea maximă disipată și temperatura ambiantă maximă a aplicației. În toate condițiile de operare posibile, temperatura internă a joncțiunii trebuie să fie în intervalul specificat, sub maxima absolută. Pentru a se stabili dacă este necesar un radiator, puterea disipată de către regulator, PD, trebuie să fie calculată. Figura de mai jos prezintă tensiunile și curenți care sunt prezente în circuit, precum și formula de calcul pentru puterea disipată în regulator:
Figura II-27: Diagrama pentru puterea disipată
CAPITOLUL III: COMPENENTA SOFTWARE A
PROIECTULUI
3.1 Mediul de programare
Robotul mobil creat de mine are ca scop deplasarea pe un traseu reprezentat de o linie (banda) de referinta de culoare inchisa(negru) pe o suprafata plana de culoare deschisa(alb).Linia neagra se traseaza cu o banda izoliera pe o bucata de carton duplex. Traseul ales de mine este unul circular, linia nu prezinta intreruperi , robotul nu este nevoit sa ocoloeasca obstacole plasate pe linie. Citirea traiectoriei dupa care se deplaseaza robotul se face cu ajutorul senzorului QRT format din 3 senzori ce contin led-uri cu infrarosu si fototranzitori sensibili la lumina infrarosie.
Inteligenta oricarui robot tine de programul pe care acesta il executa, acesta fiind incarcat pe microcontroller care este asemenea unui procesor.
Programul pe care il executa robotul trebuie in primul rand sa nu aiba erori. Daca programul nu acopera toate cazurile posibile in care s-ar putea gasi la un moment dat robotul (denumite generic stari), acesta ar putea intra intr-o stare necunoscuta si nu ar mai sti ce sa faca.
Pentru programarea microcontrolerului am instalat pe acesta un bootloader pentru Arduino, pentru a mă putea utiliza de librăriile, funcțiile și de modul de codare creat de acesta companie. Limbajul de codare este o derivație a codului C, adaptat pentru codarea microcontrolerelor.
Cu ajutorul compilatorului inclus în platformă pusă de dispoziție de Arduino, am compilat și am construit dintr-un program scris în limbaj C într-un program scris în cod mașină specific microcontrolerului PIC32® folosit în proiect.
Dezvoltarea software-ului a durat aproximativ 3 luni, fiind începută imediat după terminarea proiectării parții hardware, dar înainte de a o avea realizată fizic 100%. Primii pași au reprezentat configurarea perifericelor microcontrolerului și stabilirea unei structuri schelet, precum și a câtorva mașini de stare pe care acesta să ruleze. In mediul de programare Arduino, codarea se face in doua parti: una care se executa o singura data, la initializare, si cealalta care se executa la infinit, denumita rutina microcontroller-ului. In plus se mai pot declara librarii, neaparat la inceputul programului, sau alte functii si variabile globale.
Initializarea se face folosind functia void setup(){…} in care, de obicei, se declara tipul pinilor (de iesire sau de intrare) cu functia pinMode (nr_pin,INPUT/OUTPUT); , obiectele librariilor sau alte instructiuni ce se doresc a fi executate o singura data.
Codul rutinei microcontroller-ului se scrie in interiorul functiei void loop(){…}, imediat dupa functia setup(). Cele mai importante functii in Arduino, pe care le folosim in mod uzual pentru a pune efectiv robotul sa faca ceva, sunt functiile de citire si de scriere a pinilor. Functiile de scriere digitala sau analogica a pinilor (care sunt setati ca fiind de iesire) sunt digitalWrite() si analogWrite(). Functiile de citire a pinilor (care sunt setati in acest mod ca fiind de intrare) sunt digitalRead() si analogRead() in care se precizeaza numarul pinului. digitalRead() returneaza o valoare logica de 0 sau 1 pe cand analogRead returneaza valori pe 10 biti, intre 0 si 1023, in functie de cat de puternic este semnalul venit de la senzor. Citirea semnalului de la un pin inseamna transformarea tensiunii de pe acesta in numar, folosind un convertor digital-numeric sau analog-numeric ce sunt integrate in microcontroller.
3.2 Schema bloc a robotului
Pentru implementarea acestei strategii am creat robotului niste stări principale care au următoarele roluri:
Initial, robotul se deplaseaza inainte, cele doua linii negre ce descriu traiectoria fiind in stanga, respectiv in dreapta sa. Atata timp cat nici unul dintre cei doi senzorii laterali nu va detecta o linie neagra, robotul se va deplasa inainte. In caz contrar, acesta va vira la stanga/dreapta (in functie de senzorul care a detectat linia neagra).
Figura III-1 Schema logică a programului
Am determinat cel mai din dreapta și cel mai din stânga senzor ce detectează linia de culoare neagră și am urmărit următorul algoritm:
dacă toți senzorii detecteaza alb, robotul merge înapoi pentru a găsi linia neagră
dacă senzorul din mijloc detectează linia neagră, robotul merge înainte pentru a o urma
dacă senzorul din stânga robotului detectează linia neagră, acesta virează stânga
dacă senzorul din dreapta robotului detectează linia neagră, acesta virează dreapta
3.3 Descrierea funcțiilor
Funcția loop () descrie mișcările robotului . În interiorul ei se analizează citirile făcute de senzori și se transpun intr-o instrucțiune de tip switch cu mai multe cazuri .
După cum se observă, informațiile de la senzorii R,L,C ( dreapta, stânga,centru) sunt preluate in variabilele senzorL, senzorC, senzorR . În funcție de valorile acestora, variabila “citit” devine fie 1 , fie 2 , fie 4 sau rămâne neschimbată , adica 0, comparată fiind cu o variabilă “prag” ( exemplu : if (senzorL>prag) citit=1; ).
void loop()
{
senzorL = analogRead(analogL);
senzorC = analogRead(analogC);
senzorR = analogRead(analogR);
citit=0;
if (senzorL>prag) citit=1;
if (senzorC>prag) citit|=2;
if (senzorR>prag) citit|=4;
switch (citit) {
În acest caz , senzorul “stânga” a detectat negru , în timp ce ceilalți doi senzori se află pe suprafața albă. Instrucțiunile ce se execută determină robotul să vireze la stânga, pentru a rămâne și continua traseul.
case 1: // L
digitalWrite(dir_l,HIGH);
digitalWrite(dir_r, LOW);
analogWrite(pwm_l, vmed);
analogWrite(pwm_r, vmed);
break;
În această stare, senzorul “dreapta” a detectat negru , în timp ce ceilalți doi senzori se află pe suprafața albă. Instrucțiunile ce se execută determină robotul să vireze la dreapta, pentru a rămâne si continua traseul.
case 4: //R
digitalWrite(dir_l, LOW);
digitalWrite(dir_r, HIGH);
analogWrite(pwm_l, vmed);
analogWrite(pwm_r, vmed);
break;
În starea numărul “0” , robotul se află pe suprafața albă , așadar instrucțiunile care se execută sunt menite a-l readuce pe traseu.
case 0: //RLC inapoi pe alb
digitalWrite(dir_l, HIGH);
digitalWrite(dir_r, HIGH);
analogWrite(pwm_l, vmed);
analogWrite(pwm_r, vmed);
delay(100);
break;
Când toți senzorii transmit simultan informația că se află pe traseul negru , atunci robotul se oprește , intrând în starea de repaus.
default:
digitalWrite(dir_l, LOW);
digitalWrite(dir_r, LOW);
analogWrite(pwm_l, 0);
analogWrite(pwm_r, 0);
4.4 Codul în Anexă
//int pwm_l = 10; //PWM control for motor outputs 1 and 2 is on digital pin 10
const int pwm_l = 3; //PWM control for motor outputs 1 and 2 is on digital pin 3
const int pwm_r = 10; //PWM control for motor outputs 3 and 4 is on digital pin 11
const int dir_l = 12; //direction control for motor outputs 1 and 2 is on digital pin 12
const int dir_r = 13; //direction control for motor outputs 3 and 4 is on digital pin 13
const int analogL = A5;
const int analogC = A3;
const int analogR = A0;
const int prag=400;
const int vmin=60, vmed=120, vmax=255;
int senzorL=0;
int senzorC=0;
int senzorR=0;
int citit=0;
void setup()
{
pinMode(pwm_l, OUTPUT); //Set control pins to be outputs
pinMode(pwm_r, OUTPUT);
pinMode(dir_l, OUTPUT);
pinMode(dir_r, OUTPUT);
Serial.begin(9600);
analogWrite(pwm_l, 100); //set both motors to run at (100/255 = 39)% duty cycle (slow)
analogWrite(pwm_r, 100);
}
void loop()
{
senzorL = analogRead(analogL);
senzorC = analogRead(analogC);
senzorR = analogRead(analogR);
citit=0;
if (senzorL>prag) citit=1;
if (senzorC>prag) citit|=2;
if (senzorR>prag) citit|=4;
switch (citit) {
case 2: //C
digitalWrite(dir_l, LOW);
digitalWrite(dir_r, LOW);
analogWrite(pwm_l, vmax);
analogWrite(pwm_r, vmax);
break;
case 1: // L
digitalWrite(dir_l,HIGH);
digitalWrite(dir_r, LOW);
analogWrite(pwm_l, vmed);
analogWrite(pwm_r, vmed);
break;
case 4: //R
digitalWrite(dir_l, LOW);
digitalWrite(dir_r, HIGH);
analogWrite(pwm_l, vmed);
analogWrite(pwm_r, vmed);
break;
case 3: //LC
digitalWrite(dir_l, LOW);
digitalWrite(dir_r, LOW);
analogWrite(pwm_l, vmin);
analogWrite(pwm_r, vmed);
break;
case 6: //CR
digitalWrite(dir_l, LOW);
digitalWrite(dir_r, LOW);
analogWrite(pwm_l, vmed);
analogWrite(pwm_r, vmin);
break;
case 0: //RLC inapoi pe alb
digitalWrite(dir_l, HIGH);
digitalWrite(dir_r, HIGH);
analogWrite(pwm_l, vmed);
analogWrite(pwm_r, vmed);
delay(100);
break;
default:
digitalWrite(dir_l, LOW);
digitalWrite(dir_r, LOW);
analogWrite(pwm_l, 0);
analogWrite(pwm_r, 0);
};
Serial.print("s " );
Serial.print(senzorL);
Serial.print(" c " );
Serial.print(senzorC);
Serial.print(" d " );
Serial.println(senzorR);
//delay(20);
//
// delay(1000);
//
// digitalWrite(dir_l, HIGH); //Reverse motor direction, 1 high, 2 low
// digitalWrite(dir_r, HIGH); //Reverse motor direction, 3 low, 4 high
//
// delay(1000);
// analogWrite(pwm_l, 100); //set both motors to run at (100/255 = 39)% duty cycle
// analogWrite(pwm_r, 100);
// delay(1000);
}
CAPITOLUL IV: IMPLEMENTAREA HARDWARE ȘI ETAPELE DE REALIZARE
Primul pas în construirea robotului a reprezentat crearea design-ului logic, ce urmează a fi implementat. Pentru crearea acestuia am folosit programul Fritzing. Acesta deține librăriile cu toate componentele folosite de mine pentru acest robot și crearea propriu-zisă a layout-ului constă în adăugarea pieselor ce vor fi folosite și crearea de conexiuni între ele, piese și conexiuni explicate în capitolele anterioare, cu valori extrase din fișele de catalog pentru a asigura o funcționare optimă.
Figura IV-1: Schema de proiectare a divizorului rezitiv și a senzorilor
Figura IV-2 : Schema divizorului rezistiv
În Figura IV-2 este descrisă schema divizorului rezistiv în urma proiectării layout-ului, în care observăm în partea de jos a schemei microcontrolerul și cu conexiunile sale către senzorii de linie. Deasemenea în partea superioară a schemei găsim reprezentarea conectorilor senzorilor.
Figura IV-3 : Schema conexiunilor driverelor de motor
În aceasta schema sunt descrise conexiunile driverelor de motor, cu toate componentele anexe pentru a elimina spike-urile de tensiune și pentru a proteja restul plăcuței de zgomot și tensiuni și curenți paraziți proveniți de la motoare.
Următorul pas în crearea plăcutei a fost trecerea de la design-ul logic la cel fizic prin alegerea locației fizice unde vor fi amplasate componentele propriu-zis. Acest lucru a fost făcut cu ușurință prin crearea unor margini de dimensiunea plăcuței, componentele își știu deja legăturile, deci singura problemă este reprezentată de grija pentru ca traseele să nu se suprapună, și grosimea acestora pentru a ne asigura că prin ele poate trece un curent de valorile cerute.
Pentru acest proiect am folosit o plăcută PCB Ardumoto .Am decis să trag majoritatea dintre traseele dintre componente pe partea superioara a acesteia, iar componentele să fie adăugate tot pe partea superioară. Singurele elemente fizice de pe partea inferioară sunt conectorii către motoare și către acumulator. În figura următoare este prezentată partea superioară a designului fizic a plăcutei utilizate în crearea robotului.
Figura IV-4 : PCB Ardumoto
Acum că m-am asigurat că toate traseele sunt funcționale prin întărirea lor și testarea conectivității cu ajutorul unui multimetru, am trecut la etapa următoare de adăugarea componentelor și lipirea lor cu fludor.
Figura IV-5 : Plăcuța prezentată în urma procesului de montare a circuitelor
În acest punct toată partea electronică este terminată și pregătită pentru atașarea la robotul final. Pentru partea mecanică am folosit motoarele “Gold Spark” .Acestea au tensiunea optimă de operare intre 3V și 22V, dar cea nominală este de 6Vdc. Raportul cutiei de viteze este de 63:1, asta oferindu-le la o tensiune de 5V o viteză de 125 de rotații pe minut și un cuplu de 1,98 de kg-cm.
Dimensiunile sale fizice sunt:
• Lungimea cutiei de viteze: 11,6mm;
• Lungimea motorului: 28,7 mm;
• Lungimea axului: 3mm;
Partea fizică a robotului, carcasa, constă dintr-un kit ce cuprinde platforma pe care se atașează motoarele și senzorii de linie și roțile ce se atașează motoarelor. Acesta este cumpărat de pe www.robofun.ro și este prezentată în capitolul introducere.
Figura IV-6 : Kitul finalizat cu motoarele amplasate
După ce am terminat crearea plăcuței am început să lucrez la asamblarea robotului și la montarea senzorilor de linie ce sunt alcătuiți dintr-un emițător (o diodă LED ce emite în infraroșu) și un fototranzistor ca și receptor.
Figura IV-7: Kitul finalizat in stare intermediară
Etapa următoare pentru a finaliza cu senzorii de linie constă în amplasarea lor în poziția corespunzătoare pe partea inferioară a kitului robotului și crearea de conexiuni cu fire ce duc la microcontroler.
Figura IV-8 : Poziționarea senzorului de linie pe robot
Figura IV-9 : Robotul finalizat cu placuțe și senzori montați
CAPITOLUL V: CONCLUZII
Lucrarea „ Robot pentru urmărirea unei linii, implementat cu microcontroler PIC (Microchip)” ce a fost tratată în aceste pagini este o lucrare complexă, cu referire în multe domenii reale: electronică, matematică, mecanică și robotică. Aparatul rezultat în urma acestei lucrări prezintă din punct de vedere electronic o complexitate sporită, fiind utilizate elemente din circuitistică digitală, microprocesoare, semnale, proiectare asistată de calculator, precum și programare.
În această lucrare am realizat aparatul, urmărind pașii necesari: proiectare, construire, asamblare, și apoi implementare. Proiectarea am realizat-o folosind programul Fritzing .Construirea și asamblarea a fost realizată prima, pentru ca mai apoi să urmeze implementarea cu programarea software a microcontrolerului. Implementarea algoritmului principal de control al robotului a constat în mai multe părți: comunicația cu driverele de motor și implicit cu motoarele, comunicația cu microcontrolerului cu senzorii, comunicația microcontrolerului cu calculatorul.
Contribuția mea a constat în analizarea sistemelor asemănătoare, proiectarea unui sistem asemănător dar cu elemente proprii, sinteza în realizarea controlului și a comenzii electronice, conceperea modelului experimental prin împletirea de elemente existente pe piață, precum și conceperea și realizarea totală a părții software a proiectului. Pentru construcția și montajul elementelor fizice am consultat diverse persoane pricepute în domeniul mecanic, iar aparatul a ieșit foarte rigid, cu elemente plastic și aluminiu.
În urma acestui proiect, am ajuns la concluzia că, la realizarea unui robot line follower performant, trebuie sa fie avute în vedere următoarele puncte:
La procurarea mașinii ce va fi folosită ca suport (sau la construcția ei, în cazul în care se construiește și partea mecanică), a necesitat mai multă atenție la angrenajul roților; acesta trebuie să permită luarea curbelor largi, deci o rază mare de cotire la stânga/dreapta.
Este necesară o viteză medie a mașinii; dacă merge prea repede poate rata luarea anumitor curbe.
Am căutat să construiesc cât mai modularizat robotul, astfel încât atașarea unui alt modul cu o altă funcționalitate să fie cât mai simplă. De aceea, pe viitor, robotului îî pot fi adăugate cu ușurință noi funcționalități.
BIBLIOGRAFIE
Florescu A., “Switching Power Supply with Monoloithic Switching Regulator Subsystems and DC-DC Step-Up Converter – Part A: Descrip tio n of Switching Regulator Subsystemes and mathemayical Theory of DC-DC Step-Up Converter Contro ller by them”, Proceedings of 4th International Symposium “Advanced Topics in Electrical Engineering” (ATEE 2004). ISBN 973-7728-31-9, November 25-26, 2004, Bucuresti, Romania, pp. 249-255.
Florescu A., “Switching Power Supply with Monolithic Switching Regulator Subsystems and DC-DC Step-Up Converter – Part B: Design Examp le, Psp ice S imulation, Practical Consid erations, Experimental Results”, Proceedings of 4th Internatio nal Symposium„ Advanced Topics in Electrical Engineering” (ATEE 2004), ISBN 973-7728-31-9, November 25-26, 2004, Bucuresti, Romania, pp.255-262.
Tim Wilmshurst, “Designing Embedded Systems with PIC Microcontrollers, Second Edition: Principles and Applications” ISBN 978-1856177504 , Newnes, 2009
Richard H. Barnett, Sarah Cox, Larry O'Cull , “Embedded C Programming and the Atmel AVR”, ISBN 978-1418039, Cengage Learning, 2006
ChipKIT , http://chipkit.net/started/install-chipkit-software.
ChipKIT , http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,892&Cat=18.
History of robots. Wikipedia. http://en.wikipedia.org/wiki/History_of_robots.
History of artificial intelligence. Wikipedia http://en.wikipedia.org/wiki/History_of_artificial_intelligence.
Texas Instruments. Wikipedia. http://en.wikipedia.org/wiki/Texas_Instruments.
Fritzing .http://fritzing.org/building-circuit/#anchor3
Polulu. http://www.pololu.com/product/2456/
PIC32 DataSheet. http://www.microchip.com/TechDoc.aspx?type=datasheet
LM298 Datasheet, http://www.alldatasheet.com/datasheet-pdf/pdf/22437/STMICROELECTRONICS/L298.html.
H Bridge. Wikipedia .http://en.wikipedia.org/wiki/H_bridge.
QTR-3A Sensor. Polulu. http://www.pololu.com/file/0J214/PING_documentation.pdf.
CH Robotics UM6-LT. CH Robotics. [Interactiv] CH Robotics. http://www.chrobotics.com/index.php?main_page=product_info&products_id=9.
Lets Make Robots http://letsmakerobots.com/node/37526.
INTRUCTABLES : http://www.instructables.com/id/Line-following-Robot-with-Arduino/?ALLSTEPS
BIBLIOGRAFIE
Florescu A., “Switching Power Supply with Monoloithic Switching Regulator Subsystems and DC-DC Step-Up Converter – Part A: Descrip tio n of Switching Regulator Subsystemes and mathemayical Theory of DC-DC Step-Up Converter Contro ller by them”, Proceedings of 4th International Symposium “Advanced Topics in Electrical Engineering” (ATEE 2004). ISBN 973-7728-31-9, November 25-26, 2004, Bucuresti, Romania, pp. 249-255.
Florescu A., “Switching Power Supply with Monolithic Switching Regulator Subsystems and DC-DC Step-Up Converter – Part B: Design Examp le, Psp ice S imulation, Practical Consid erations, Experimental Results”, Proceedings of 4th Internatio nal Symposium„ Advanced Topics in Electrical Engineering” (ATEE 2004), ISBN 973-7728-31-9, November 25-26, 2004, Bucuresti, Romania, pp.255-262.
Tim Wilmshurst, “Designing Embedded Systems with PIC Microcontrollers, Second Edition: Principles and Applications” ISBN 978-1856177504 , Newnes, 2009
Richard H. Barnett, Sarah Cox, Larry O'Cull , “Embedded C Programming and the Atmel AVR”, ISBN 978-1418039, Cengage Learning, 2006
ChipKIT , http://chipkit.net/started/install-chipkit-software.
ChipKIT , http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,892&Cat=18.
History of robots. Wikipedia. http://en.wikipedia.org/wiki/History_of_robots.
History of artificial intelligence. Wikipedia http://en.wikipedia.org/wiki/History_of_artificial_intelligence.
Texas Instruments. Wikipedia. http://en.wikipedia.org/wiki/Texas_Instruments.
Fritzing .http://fritzing.org/building-circuit/#anchor3
Polulu. http://www.pololu.com/product/2456/
PIC32 DataSheet. http://www.microchip.com/TechDoc.aspx?type=datasheet
LM298 Datasheet, http://www.alldatasheet.com/datasheet-pdf/pdf/22437/STMICROELECTRONICS/L298.html.
H Bridge. Wikipedia .http://en.wikipedia.org/wiki/H_bridge.
QTR-3A Sensor. Polulu. http://www.pololu.com/file/0J214/PING_documentation.pdf.
CH Robotics UM6-LT. CH Robotics. [Interactiv] CH Robotics. http://www.chrobotics.com/index.php?main_page=product_info&products_id=9.
Lets Make Robots http://letsmakerobots.com/node/37526.
INTRUCTABLES : http://www.instructables.com/id/Line-following-Robot-with-Arduino/?ALLSTEPS
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: Robot Care Urmareste O Linie Realizat cu Microcontrolerul Pic32 [microchip] (ID: 123640)
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.
