Controlul Unei Drone Prin Bluetooth
Controlul unei Drone prin Bluetooth
Introducere
Scopul prezentei lucrări este realizarea unui robot de tip dronă, controlat cu ajutorul unui dispozitiv portabil ce dispune de o interfață de comunicație tip bluetooth, în cazul de față, un telefon mobil având sistemul de operare Android.
Domeniile in care se poate folosi acest robot sunt multiple, câteva exemple mai importante sunt enumerate în cele ce urmează:
1. Domeniul militar/apărare
2. Ajutorarea persoanelor cu dizabilități
3. Industrie
4. Spionaj
5. Activități de căutare
1. Una din cele mai mari amenințări pentru populație este un atac terorist. Cu ajutorul unei drone comandate la distanță, se pot inspecta pachetele suspecte abandonate în locuri publice și aglomerate, precum stații de tren, aeroporturi, cladiri importante, etc. Astfel, nu se pun în pericol vieți omenești.
2. Un robot inteligent, comandat pentru ușurința utilizării prin o interfață de tip wireless poate fi folosit cu succes pentru ajutorarea persoanelor în vârstă sau a persoanelor cu dizabilități. Acesta poate înlocui cu succes locul unui câine dresat special pentru ajutorarea acestor persoane, avantajele constând în primul rând în prețul mai redus al robotului, faptul că robotul nu necesită îngrijire și nu în ultimul rând, poate fi achiziționat în orice moment, spre deosebire de câini, pentru care sunt întocmite lungi liste de așteptare. De asemenea, câinele trebuie dresat pentru o perioadă îndelungată, care se poate extinde pe durata câtorva ani.
3. Nu de puține ori apar situații neprevăzute în locuri cu acces dificil, spații strâmte sau cu posibil potențial periculos. Pentru a venii în ajutorul operatorului uman, se poate controla de la distanță o drona pentru a inspecta locurile în care se bănuiește că există probleme. Spre exemplu, un robot poate fi comandat din camera de comandă către zone în care accesul uman este condiționat de factori ce pot dăuna sănătății, locuri cu scurgeri de gaze sau de substanțe periculoase/radioactive. De asemenea se pot inspecta de la distanță diferite instalații, bazine, încăperi, pentru a se verifica starea acestora.
4. O altă posibilă aplicație a proiectului prezentat este spionajul. Cu un aparat comandat la distanță, căruia i se pot adăuga componente cu felurite funcționalități, cel mai comun exemplu fiind o cameră de fotografiat, un aparat de înregistrat imagine sau sunet, se pot obține informații audio și/sau video foarte importante. În acest mod se pot obține detalii legate de rețele de trafic uman, trafic de droguri, criminali, furturi, atentate și alte crime împotriva cetățenilor sau a instituțiilor unui stat.
5. În cazul unor dezastre naturale, precum cutremurele, un astfel de dispozitiv comandat de la distanță, modificat corespunzător pentru a avea acces ușurat în zone dificile, poate fii folosit pentru căutarea supraviețuitorilor prin dărâmături și spațiile înguste. De exemplu, adăugându-se dispozitive de înregistare audio, video, infraroșu și alți senzori necesari, precum și modificarea sistemului de conducere (elicii mai mari sau brate de prindere, motoare mai puternice, acumulatori cu durată de viață mult mărită), sistemul poate fi folosit cu succes pentru detectarea persoanelor blocate.
Cu alte cuvinte, lucrarea practică poate fii folosită în scopuri mulitple, putându-se adauga multe alte funcționalități față de cele incorporate în momentul de față, în funcție de necesități. Practic, aceasta reprezintă baza oricărui sistem condus de la distanță, la care se poate adăuga o multitudine de senzori, elemente auxiliare, echipamente de monitorizare și așa mai departe, în funcție de scopul destinat aplicației. Lucrarea poate fi dezvoltată foarte ușor către specializarea către un anumit domeniu, singurul impas fiind resursele necesare pentru achiziționarea echipamentelor necesare, reprezentând sume destul de mari.
CAPITOLUL I
Programare în Java
1.1 Tehnologii de programare
La începuturile sale programarea se făcea “după ureche” în funcție de talentul, experiența și de capacitatea de analiză și sinteză a programatorului. La proiectarea programului se pornea de la reprezentarea grafică (numită schemă logică) a algoritmului de rezolvare a problemei. O astfel de schemă logică este de fapt un graf orientat ale cărui noduri sunt operațiile de prelucrare a datelor reprezentate prin simboluri grafice adecvate. Nodurile sunt conectate prin arcuri orientate care stabilesc succesiunea de efectuare a operațiilor. O astfel de abordare oferă prea multă libertate în proiectarea algoritmului. Nu întâmplator, în acea vreme cea mai importantă instrucțiune abordată în manualele de programare era instrucțiunea de salt GOTO. Limbajul FORTRAN avea o mulțime de variante ale acestei instrucțiuni. Datorită acestei lipse de restricții în proiectarea fluxului de calcul adeseori codul sursă devenea foarte “încâlcit”, greu de înțeles, de modificat și mai ales nesigur, în special în cazul programelor cu complexitate mare. Activitatea de cercetare a dus la apariția în anii ’60 a conceptelor programării structurate care introducea o anumită disciplină în elaborarea programelor. Respectând principiile programării structurate programele capată o structură precisă, sunt mai ușor de înțeles, de testat, depanat și de modificat. În această abordare, la proiectarea programului nu mai este necesară elaborarea schemelor logice. Deoarece în acea perioadă nu existau limbaje de programare care să ofere suport pentru programarea structurată, Nicklaus Wirth a elaborat în 1971 limbajul de programare Pascal (după numele matematicianului Blaise Pascal – creator al primei mașini mecanice de calcul) pentru a fi folosit la predarea programării în mediile academice. Cu acest limbaj, Wirth a introdus și conceptul de structură de date – indisolubil legat de algoritmul ce stă la baza programului. Pascal a devenit în scurt timp limbajul preferat predat în universități. Conceput în scopuri didactice limbajul avea o serie de slăbiciuni care au facut să nu fie agreat pentru dezvoltarea aplicațiilor comerciale, industriale și guvernamentale. În anii ’70-’80 Departamentul Apărarii al S.U.A. (DOD) a lansat o cerere pentru elaborarea unui limbaj de programare ce urma să înlocuiască sutele de limbaje de programare folosite la acea data în sistemele sale. Noul limbaj urma să devină unicul limbaj de programare folosit în sistemele sale de calcul. Limbajul astfel obținut s-a numit Ada (după numele primului programator al unei mașini de calcul – construită de matematicianul Charls Babbage – Lady Ada Lovelace, fiica poetului englez Lord Byron). Chiar dacă este un urmaș al Pascalului, limbajul Ada este mult diferit de acesta. El introduce printe altele mecanismul de multitasking care permite programatorului să definească procesări ale datelor care decurg în paralel. C++ și Java prevăd și ele acest mecanism sub denumirea de multithreading. Am văzut că C++ și Java introduc în plus conceptul de programare orientată pe obiecte oferind și suportul necesar implementării acestuia. Conceptul de obiect “încapsulează” la un loc datele și procedurile de prelucrare a acestora într-o singură entitate, extinzând astfel conceptul de structură de date din Pascal.
1.2 Mediul de dezvoltare a aplicațiilor Java
Programele Java parcurg cinci faze de dezvoltare: editare, compilare, încărcare, verificare și execuție.
Schematic aceste etape pot fi reprezentate ca în figura 1.1. Prima fază constă în editarea programului folosind un editor de text (cum ar fi Notepad-ul din Windows sau vi-ul din UNIX). Programul sursă va fi salvat într-un fișier cu extensia Java (de exemplu prg1.java)
În a doua fază programul Java este compilat folosind comanda javac (de exemplu javac prg1.java) pentru a lansa compilatorul. Acesta “traduce” programul sursă în cod binar (byte code) – limbaj înțeles de interpretor. Acest cod intermediar este salvat într-un fișier cu extensia class (de exemplu prg1.class).
Faza a treia constă în amplasarea codul binar din fișierul class în memorie de către încărcător. Încărcarea se poate face de pe discul local sau prin rețea. Există două tipuri de programe java – aplicații și applet-uri. În cazul aplicațiilor Java această operație este inițiată de comanda java (de exemplu java prg1). Applet-urile sunt destinate execuției de către o mașină virtuală java implementată de un browser (de exemplu Internet Explorer sau Netscape Navigator) în cadrul unui document HTML ( HyperText Markup Language). Un applet poate fi executat și local cu ajutorul programului appletviewer.
Figura 1.1 Mediul de dezvoltare al programelor Java
1.3 Clase și obiecte Java
În Java un program este constituit dintr-o comunitate de obiecte care interacționează între ele în timpul execuției programului. Fiecare obiect component al programului are propriile sale proprietăți și un anumit comportament specific.
Un program este un sistem de procesare a datelor. Putem spune că este similar unui storcător de fructe. Așa cum introducând portocale în storcător și cu ajutorul energiei electrice obținem la ieșire suc, tot așa introducând în program datele inițiale obținem la ieșire rezultate. Un program de calculator este o mașină de prelucrare a informației asemănător storcătorului de fructe dar cu deosebirea că este mult mai versatil. Un storcător de fructe, oricât de perfecționat este, nu știe să facă decât un singur lucru. Un program de calculator poate să fie proiectat astfel încât să modeleze nu numai procese și sisteme existente în lumea reală dar și lucruri care nu au existat și nu ar putea exista în realitate.
La fel ca majoritatea mașinilor, un program de calculator este făcut din diferite repere (părți) componente care interacționează într-un mod definit cu precizie. O astfel de colecție de componente constituie un sistem, motiv pentru care programele de calculator sunt numite uneori și sisteme informatice. În mod tradițional, la elaborarea unui astfel de sistem de procesare a informației, proiectantul se concentrează în special pe ce prelucrări trebuie să facă programul. În cazul programelor complexe, problema este descompusă în subprobleme ce urmează a fi abordate separat. Dacă unele din aceste subprobleme au încă un grad ridicat de complexitate, ele sunt la rândul lor descompuse în subprobleme mai simple. O astfel de abordare de la complex la simplu prin detalieri succesive se numește metodologie top-down de dezvoltare a programelor. Detalierea continuă până când fiecare subproblemă poate fi rezolvată de un subprogram numit subrutină, funcție sau procedură în funcție de limbajul de programare folosit. Programul obținut are drept componente aceste proceduri care la execuție interacționează pentru obținerea rezultatului. În cazul unui program procedural datele sunt prelucrate similar cu prelucrarea unor piese într-o linie de producție fiind transmise ca în figura 1.2 de la un punct de prelucrare la altul (de la o procedură la alta) până la procesarea completă.
Figura 1.2 Prelucrarea procedurală a datelor
În cazul programelor orientate pe obiecte lucrurile stau oarecum diferit. Și aceste programe sunt sisteme constituite din componente care interacționează între ele dar aceste componente nu implementează algoritmi de rezolvare a unor subprobleme ca procedurile. Aceste componente reunesc datele cu procedurile de prelucrare ale acestora într-o singură entitate denumită obiect. La fel ca și obiectele din lumea reală, un astfel de obiect are o serie de proprietăți – de exemplu culoare, dimensiune, coordonate. Totodată obiectul are un comportament specific fiind capabil de a efectua în anumite condiții o serie de acțiuni care îi modifică starea. Așa cum în cazul unei mașini comanda de accelerare îi modifică parametrii de stare, viteza si coordonatele, tot așa acțiunile obiectului îi modifică valorile proprietăților. Putem reprezenta un obiect ca în figura 1.3.
Figura 1.3 Reprezentarea unui obiect
Obiectul execută acțiunile 1, 2 și 3 asupra proprietăților la solicitări venite din exterior de la alte obiecte. Spunem că aceste acțiuni sunt publice, fiind accesibile din afara obiectului.
Acțiunea 4 este “internă” obiectului și nu poate fi solicitată din exterior. Se spune despre ea că este o acțiune privată. Proprietățile obiectului sunt și ele private, valorile lor neputând fi modificate direct din exterior ci numai prin acțiunile obiectului însuși.
Proprietățile obiectului se numesc variabile reprezentând de fapt datele supuse prelucrării. Acțiunile de care obiectul este capabil și care definesc comportamentul său sunt de fapt proceduri ce se execută la apel asupra datelor interne ale obiectului. Aceste proceduri se numesc metode. Variabilele și metodele se numesc membri ai obiectului. Mai multe obiecte pot “coopera” între ele pentru rezolvarea unei probleme așa cum motorul cooperează cu carburatorul, pompa de benzină și rezervorul de combustibil, pentru a deplasa un autoturism. În altă ordine de idei obiectele simple pot fi “asamblate” împreună pentru a crea un obiect mai complex, la fel cum obiectul autoturism se obține din asamblarea împreună a caroseriei, motorului, carburatorului, pompelor de apă și benzină, rezervorului și a altor repere. Motorul este la rândul său constituit din mai multe repere simple.
Un program Java este el însuși un obiect complex care poate fi construit folosind o serie de obiecte de complexitate mai redusă compuse la rândul lor din obiecte mai simple. Toate aceste obiecte componente cooperează la rezolvarea problemei. În această abordare, proiectarea unui program orientat pe obiecte diferă fundamental de proiectarea unui program procedural. Se pornește de la realizarea sau refolosirea unor obiecte simple pentru a construi obiecte din ce în ce mai complexe, obiectul rezultat în final fiind capabil să prelucreze datele de intrare în modul dorit. Astfel proiectarea unui program orientat pe obiecte se aseamănă cu proiectarea hardware. Circuitele integrate sunt obiecte cu un anumit comportament care se asamblează pe plăci de textolit cu cablaj imprimat rezultând un modul, care el însuși este un obiect cu comportamentul dorit. Mai multe astfel de module se pot asambla împreună pe un șasiu (sertar cu sloturi) pentru a forma un obiect mai complex. Mai multe sertare pot fi asamblate împreună într-un dulap cablat corespunzător rezultând un obiect și mai complex. La rândul său mai multe dulapuri de acest tip pot fi asamblate împreună într-o cameră de comandă și interconectate între ele rezultând un sistem extrem de complex care în esență este și el un obiect. O astfel de abordare de la simplu la complex se numește metodologie down-top de proiectare software (total diferită de metodologia top-down folosită la proiectarea programelor procedurale).
La creare, obiectele sunt personalizate printr-un nume (identificator) cu ajutorul căruia ne putem referi la obiectul respectiv. Pentru a crea un obiect trebuie să definim care sunt proprietățile și comportamentul acestuia. Această definire se numește clasă. Obiectele sunt instanțieri ale clasei date. Așa cum toate autoturismele pot fi încadrate într-o clasă de obiecte numită autovehicule caracterizate prin proprietățile: model, capacitate cilindrică, culoare, număr locuri etc. și capabile de acțiunile: accelerare, frânare, schimbare a direcției, aprindere faruri, semnalizare, etc. și obiectele software se încadrează într-o clasă.
Crearea obiectului se face pe baza definiției clasei căreia aparține obiectul prin alocarea unui bloc de memorie și completarea acestuia cu datele și codul corespunzător. Zona de date a blocului de memorie se inițializează cu valorile specificate la crearea obiectului.
Avantajele programării orientate pe obiecte sunt multiple:
obiectele construite pot fi testate ușor fiecare în parte astfel ca la folosirea lor pentru realizarea unor obiecte mai complexe putem fi siguri de buna lor funcționare. Aceasta duce la o mai mare siguranță a programelor.
obiectele odată realizate, pot fi refolosite și în alte aplicații.
munca în echipă este evident mai eficientă.
programele orientate obiect sunt mai ușor de modificat prin simpla înlocuire a unora din obiectele componente. Așa cum pe placa de baza a unui PC putem înlocui un procesor mai lent cu altul mai rapid fără a modifica celalalte componente, tot așa putem înlocui un obiect cu altul având același comportament, dar la realizarea căruia s-au folosit algoritmi mai performanți. Noul obiect fiind compatibil la nivel de “interfață” cu obiectul înlocuit, celalalte obiecte componente nu trebuiesc modificate. Programul însă va fi mai eficient beneficiind de performanțele îmbunătățite ale noului obiect introdus.
programele orientate pe obiecte complexe sunt mult mai ușor de proiectat și de înțeles.
1.4 Moștenirea
Unul din avantajele majore al programării orientate obiect îl constituie moștenirea. Aceasta îi permite programatorului să nu reinventeze roata de fiecare dată când începe să lucreze la un nou program. De ce să fii nevoit să rezolvi probleme pe care le-ai rezolvat o dată sau pe care alți programatori le-au rezolvat deja înaintea ta? În cazul programării procedurale această problemă era soluționată prin existența unor biblioteci de funcții. Funcțiile și procedurile de bibliotecă pot fi apelate din programul nou creat de noi, codul acestora fiind căutat și extras din fișierul de bibliotecă corespunzător și adăugat programului în cod mașină obținut la compilare prin operația de editare a legăturilor (linkeditare). Utilizarea bibliotecilor de funcții are însă o mare limitare – ea nu oferă un mecanism de extindere a capabilităților funcțiilor conținute, acestea fiind deja în cod mașină și neputând fi modificate. POO oferă un mecanism elegant și revoluționar, numit moștenire, de a depăși această limitare. Locul bibliotecilor de funcții este luat în cazul POO de bibliotecile de clase. Clasele pot fi extinse prin adăugare de noi proprietăți și metode fără a modifica codul lor inițial. Aceasta se bazează pe definirea unei clase derivate din clasa de bază conținută eventual de bibliotecă. Noua clasă “moștenește” proprietățile și metodele clasei de bază cărora li se adaugă proprietățile și metodele specificate la definirea clasei de bază. O astfel de clasă derivată din clasa de bază se numește subclasă a acesteia. O parte din bibliotecile de clase Java sunt standard, însoțind compilatorul și interpretorul Java, altele putând fi furnizate de alți producători de software independenți. De asemenea, programatorul poate să creeze propriile sale biblioteci,clase pe care să le folosească în diferite aplicații.
1.5 Crearea unui program Java
Vom începe prin a dezvolta o aplicație Java extrem de simplă (tradiționalul HalloWorld) pentru a exemplifica structura unui astfel de program și etapele ce trebuiesc parcurse pentru a-l executa.
Începem prin a edita cu un program editor de text codul sursă al aplicației. Așa cum am precizat anterior, un program Java este el însuși un obiect. Vom porni prin a defini clasa a cărei instanțiere este aplicația noastră:
class HalloWorld {
//Aici se vor adauga membrii clasei
}
Pentru ca această clasă să definească o aplicație, ea trebuie obligatoriu să conțină metoda main care este apelată la lansarea în execuție a programului. Metoda main este de fapt o funcție (similară cu funcțiile C) care primește ca parametri un vector de șiruri de caractere reprezentând argumentele din linia de comandă cu care a fost lansat programul. În Java șirurile de caractere sunt (ca toate datele de altfel) obiecte aparținând clasei String. Un vector de astfel de obiecte este definit ca String[]. Această funcție trebuie să fie: accesibilă din exteriorul obiectului pentru ca interpretorul să poată cere execuția acesteia, să fie publică, motiv pentru care este declarată de tip public. Codul acestei funcții este comun tuturor instanțelor clasei metoda fiind declarată din acest motiv static. De asemenea main nu întoarce nimic fiind deci declarată void.
Vom avea deci:
class HalloWorld {
public static void main(String[] arguments){
//Aici se va adauga codul funcției main
}
}
În cazul exemplului nostru, dorim ca funcția să afișeze mesajul Hallo world!. Pentru afișare vom solicita serviciile obiectului System care gestionează relațiile cu sistemul. Acesta are în componență un obiect out care gestionează afișarea. Accesul la membrul out al lui System cu operatorul de acces “.” (la fel cum se accesau membrii unei structuri în C): System.out . Acestei componente îi vom solicita să afișeze mesajul nostru prin apelul metodei sale println. Vom obține deci:
class HalloWorld {
public static void main(String[] arguments){
System.out.println(“Hallo world!”);
}
}
Se observă că instrucțiunea adaugată de noi la corpul funcției trebuie terminată ca și în limbajul C cu caracterul ";".
Textul programului îl vom salva într-un fișier având același nume cu clasa și extensia java (HalloWorld.java).
Vom compila programul cu comanda javac HelloWorld.java rezultând fișierul HelloWorld.class conținând byte-codul programului. Acest byte-cod îl vom executa cu interpretorul java prin comanda java HelloWorld. Programul va afișa în fereastra DOS în care a fost executat mesajul Hello world! și se va termina (figura 1.4).
Figura 1.4 Compilarea și execuția unui program java
1.6 Algoritmi și structuri de control
Înainte de a începe scrierea unui program care să rezolve o anumită problemă, programatorul trebuie să analizeze și să înțeleagă pe deplin în ce constă problema, care sunt datele inițiale, care sunt rezultatele ce trebuiesc obținute și ce prelucrări trebuie să sufere datele inițiale pentru a se obține rezultatele cerute. La proiectarea programului este esențial atat să determinăm ce blocuri componente vom folosi pentru a construi programul cât și ce metodologie de elaborare vom utiliza pentru aceste blocuri.
Metodologia prezentată în continuare de proiectare a structurii programelor este aplicabilă nu numai limbajului java ci și în cazul majorității limbajelor de programare de nivel înalt. Orice problemă de calcul poate fi rezolvată prin efectuarea unor anumite operații asupra datelor într-o succesiune dată. O astfel de succesiune de efectuare a operațiilor asupra datelor inițiale care duce la soluționarea unei probleme date (prin obținerea rezultatelor dorite) se numește algoritm.
Să analizăm pe un exemplu importanța succesiunii corecte a efectuării a operațiilor în rezolvarea corectă a problemei. Fie algoritmul de deșteptare și plecare la cursuri a unui student:
Trezirea și jos din pat.
Dezbracă-ți pijamaua.
Fă un duș.
Îmbracă-te.
Ia micul dejun.
Pleacă la cursuri.
Executarea în această ordine a operațiilor descrise mai sus face ca studentul nostru să ajungă la cursuri într-o formă corespunzătoare. Acum să presupunem că studentul ar executa aceleași operații într-o ordine puțin modificată:
Trezirea și jos din pat.
Dezbracă-ți pijamaua.
Îmbracă-te.
Ia micul dejun.
Fă un duș.
Pleacă la cursuri.
Aplicând acest algoritm, studentul nostru va ajunge la cursuri ud. Specificarea ordinii în care se execută diferitele instrucțiuni ale programului se face prin instrucțiuni de control.
Înainte de a trece la scrierea programului este necesar deci să determinăm operațiile ce trebuiesc efectuate de acesta și succesiunea acestora adică să determinăm algoritmul de rezolvare a problemei care urmează să fie implementat în final în limbajul de programare ales. Inainte de a fi transpus în program, algoritmul trebuie reprezentat într-o formă sau alta pe hârtie. Folosirea limbajului natural nu este cea mai bună soluție pentru descrierea algoritmului. O soluție o constituie utilizarea pseudocodului – un limbaj artificial neformal apropiat de un limbaj de programare dar mai puțin rigid în ceea ce privește respectarea regulilor sintactice. Pseudocodul nu este un limbaj de programare propriu-zis, servind numai pentru reprezentarea algoritmului ceea ce reprezintă o etapă intermediară în elaborarea programului. El permite programatorului să analizeze și să proiecteze structura și componentele viitorului program. Implementarea algoritmului reprezentat astfel în program se face foarte ușor prin înlocuirea instrucțiunilor scrise în pseudocod cu instrucțiunile echivalente ale limbajului de programare ales. Pseudocodul conține doar instrucțiuni executabile. Instrucțiuni declarative de forma int i; nu apar în această etapă de proiectare a programului. O astfel de instrucțiune declarativă este de fapt o directivă data compilatorului pentru a aloca memorie variabilei în care să se păstreze în timpul execuției valorile luate de aceasta. Deoarece programul în pseudocod nu va fi compilat, nu va fi necesară în această fază de concepție declararea variabilelor ce intervin în program. Cu toate acestea unii programatori preferă să specifice la începutul pseudocodului programului lista variabilelor folosite și destinația acestora.
În mod normal, instrucțiunile sunt executate succesiv, una dupa alta în ordinea în care apar în program. O astfel de execuție se numește secvențială. Multe instrucțiuni Java pe care le vom discuta permit programatorului să determine executarea (să transfere controlul) unei alte instrucțiuni decât instrucțiunea imediat următoare din secvență. Abuzul în folosirea acestor instrucțiuni poate să altereze grav structura programului ridicând mari dificultăți în întelegerea, depanarea și modificarea acestuia. Am vorbit anterior de blamata instrucțiune goto care permițând transferul controlului în orice punct al programului, utilizată fără discriminare poate complica inutil programul.
Cercetarile lui Bohm și Jacopini au dovedit prin enunțarea și demonstrarea în 1966 a teoremei de structură. Această teoremă afirmă că orice algoritm poate fi construit fără utilizarea lui goto folosind numai trei structuri de control: secvența, selecția și repetiția. Renunțarea la instrucțiunea goto a fost o adevarată provocare adresată producătorilor de software, aceștia trebuind să–și modifice fundamental modul de gândire și stilul de programare. Analizele făcute au demonstrat că aplicarea principiilor programării structurate au dus la o creștere impresionantă a eficienței producției de software (reducerea timpului de elaborare a software-ului și implicit a cheltuielilor). Explicația acestui fenomen constă în îmbunătățirea substanțială a structurii programelor ceea ce făcea ca acestea să fie mai clare, mai ușor de depanat, testat și modificat. Deși limbajele C, C++ și Pascal mai păstrează instrucțiunea goto, limbajul Java nu o mai conține în setul său de instrucțiuni.
1.7 Secvența
Structura secvența este implicită în Java. Dacă nu se specifică altfel, instrucțiunile sunt executate secvențial, una după alta în ordinea în care apar în program. Fragmentul de schemă logica din figura 1.4 exemplifică o astfel de structură de control de tip secvență tipică, în care două operații de calcul sunt executate succesiv.
O schemă logică este o reprezentare grafică a unui algoritm folosind diferite simboluri grafice pentru reprezentarea operațiilor (dreptunghiuri, romburi, cercuri, elipse). În schema logică din figura 1.4 dreptunghiurile reprezintă blocuri de calcul (specificând o acțiune/operație executată de program) iar cercurile reprezintă noduri de conectare la restul schemei logice. Săgețile indică ordinea în care operațiile sunt efectuate.
Figura 1.4 Secvența
Întâi valoarea variabilei unghi este adăugată la variabila total, iar apoi variabila contor este incrementată cu 1. Java ne permite să prevedem oricâte instrucțiuni succesive într-o secvență.
1.8 Selecția
Selecția este o instrucțiune care introduce o ramnificație în fluxul de execuție al instrucțiunilor programului. Execuția instrucțiunilor se va desfășura pe o ramură sau alta în funcție de îndeplinirea unei condiții specificate.
Java prevede trei tipuri de instrucțiuni de tip selecție: structura de selecție if , selecția dublă if/else și selecția multiplă switch.
Selecția simplă if determină execuția unei operații dacă este adevarată o condiție dată. În cazul în care condiția nu este îndeplinită (este falsă) se sare peste operația condiționată trecându-se la execuția operației imediat următoare. O astfel de structură se numește selecție simplă și poate fi reprezentată grafic prin schema logică din figura 1.5.
Figura 1.5 Selecția simplă
Aici simbolul romb este un bloc de decizie. Dacă valoarea de adevăr a expresiei relațională înscrisă în acest bloc este adevărat ( variabila unghi are valoarea mai mare sau egală cu 60), se execută acțiunea din blocul următor (afișarea mesajului “Mai mare”). Dacă valoarea de adevăr este fals, atunci se sare peste acest bloc. De remarcat că și această structură de control if ca și secvența are un singur punct de intrare și un singur punct de ieșire. Astfel de structuri cu un singur punct de intrare și un singur punct de ieșire prezintă avantajul ca programatorul să le poate conecta unul la altul folosindu-le ca elemente de construcție a programului la fel ca într-un joc de cuburi. Aceasta conferă algoritmului o structură clară, ușor de înțeles și modificat.
Mai există o singură metodă de combinare a structurilor de control de acest tip și anume incuibarea. Structura descrisă mai sus poate fi transpusă în Java astfel:
…
if(unghi >= 60)
System.out.println(“Mai mare”);
…
Se observă că limbajul java corespunde foarte bine pseudocodului folosit în descrierea algoritmului ceea ce face ca utilizarea pseudocodului la proiectarea algoritmilor să fie un instrument extrem de util. Ca argument al instrucțiunii de selecție if poate fi prevăzută orice expresie care returnează la evaluare o valoare de tip boolean.
1.9 Selecția dublă
Structura de selecție dublă if/else permite programatorului să specifice o acțiune alternativă care se execută în cazul condiția nu este îndeplinită. Aceasta structură se scrie în pseudocod astfel
…
if(unghi >= 60)
print “Mai mare”
else
print “Mai mic”
…
Schema logică corespunzătoare acestei structuri este prezentată în figura 1.6.
Figura 1.6 selecția dublă
Structura descrisă mai sus poate transpusă în Java astfel:
…
if(unghi >= 60)
System.out.println(“Mai mare”);
else
System.out.println(“Mai mic”);
…
Pe lângă instrucțiunea if/else limbajul java mai prevede operatorul condițional ?: similar celui din limbajul C, având sintaxa:
<expresie booleana>?<expresie1>:<expresie2>
Dacă la evaluarea expresiei booleene rezultă valoarea adevărat, operatorul evaluează și întoarce valoarea expresiei 1, iar în caz contrar valoarea expresiei 2. Astfel instrucțiunea java:
…
System.out.println(unghi>=60? “Mai mare”:”Mai mic”);
…
va avea același efect cu instrucțiunea if/else din exemplul anterior. Putem incuba structurile de selecție duble ca în exemplul următor:
…
if(unghi < 90)
System.out.println(“Ascutit”);
else if (unghi == 90)
System.out.println(“Drept”);
else
System.out.println(“Obtuz”);
…
Schema logica corespunzătoare acestei secvente de instrucțiuni este cea din figura 1.7.
Figura 1.7 Incuibarea selecțiilor duble
Este important de subliniat că componenta else a structurii este întotdeauna asociată de compilator cu ultimul if, indiferent de indentarea textului. Indentarea are doar rolul de a îmbunătăți claritatea programului.
Dacă dorim să asociem o componentă else cu un alt if decât cel precedent trebuie să folosim acoladele ca în exemplul următor.
Secvența de mai jos:
…
if(x > 10)
if(y > 10)
System.out.println(“x si y sunt mai mari ca 10”);
else
System.out.println(“x este mai mic sau egal cu 10”);
…
va funcționa incorect afișând mesajul x este mai mic sau egal cu 10 chiar dacă x are valoarea 12 dar y este 5.
Aceasta se datorează faptului că else este asociat cu if( y > 10) și nu cu if(x > 10), secvența corespunzând schemei logice din figura 2.5. care?
Versiunea corectă se obține folosind acoladele:
…
if(x > 10){
if(y > 10)
System.out.println(“x si y sunt mai mari ca 10”);
}else
System.out.println(“x este mai mic sau egal cu 10”);
…
Acoladele {} indică compilatorului că cel de al doilea if este incuibat în corpul primului și deci componenta else aparține primului if.
1.10 Instrucțiuni compuse
În mod normal instrucțiunea if acceptă în corpul său o singură instrucțiune. Dacă prelucrarea ce trebuie executată este mai complexă și necesită mai multe instrucțiuni, acestea pentru a fi incluse în corpul lui if trebuiesc grupate într-un bloc de instrucțiuni prin încadrarea între acolade. Un astfel de bloc de instrucțiuni se numește instrucțiune compusă. Exemplul următor prezintă utilizarea instrucțiunilor compuse în corpul unei selecții duble:
…
if(unghi >= 60)
System.out.println(“Mai mare”);
else{
System.out.println(“Mai mic”);
System.out.println(“Mai mariți unghiul!”);
}
…
În acest exemplu dacă variabila unghi are valoarea mai mică decât 60 este executat blocul de două instrucțiuni încadrate de acolade, afișându-se pe două rânduri mesajele: Mai mic și Mai măriți unghiul! .
Dacă nu s-ar fi folosit acoladele mesajul Mai măriți unghiul! ar fi fost afișat în oricare din situații.
1.11 Selecția multiplă
Fie următoarea instrucțiune formată din mai multe instrucțiuni de selecție incuibate:
…
if(unghi == 30)
System.out.println(“Unghi=30”);
else if (unghi == 45)
System.out.println(“Unghi=45”);
else if (unghi == 60)
System.out.println(“Unghi=60”);
else if (unghi == 90)
System.out.println(“Unghi=90”);
else
System.out.println(“Alte valori”);
…
Pentru astfel de cazuri, în funcție de valoarea întreagă pe care o ia o variabilă, trebuie selectată și executată o anumită acțiune din mai multe posibile (selecție multiplă) limbajul java prevede instrucțiunea switch având sintaxa:
switch ( <expresie întreaga> ){
case <val 1>: <acțiune 1>;
break;
case <val 2>: <acțiune 2>;
break;
…
case <val n>: <acțiune n>;
break;
default:<acțiune implicită>;
break;
}
Aici dacă valoarea întreaga obținută prin evaluarea <expresie întreagă> este <val 1> se va efectua <acțiune 1>, dacă este <val 2> se va efectua <acțiune 2>, etc. Dacă valoarea obținută nu este egală cu nici una din valorile <val1>, <val2>,…,<val n> se va efectua <acțiune implicită> specificată cu eticheta default.
Folosind această instrucțiune, instrucțiunea compusă din exemplul precedent poate fi înlocuită cu:
…
switch(unghi){
case 30: System.out.println(“Unghi=30”);
break;
case 45: System.out.println(“Unghi=45”);
break;
case 60: System.out.println(“Unghi=60”);
break;
case 90: System.out.println(“Unghi=90”);
break;
default: System.out.println(“Alte valori”);
break;
}
…
1.12 Structura de control repetitivă while
O structură de control repetitivă determină calculatorul să repete ciclic o acțiune atât timp cât o anumită condiție este îndeplinită (este adevărată). Un exemplu de astfel de operație repetată ar fi descris de :
Cât timp mai sunt obiecte de cumparat pe lista mea de cumparaturi
Cumpară urmatorul obiect din lista
Instrucțiunea while corespunde lui “Cât timp”. Acțiunea este descrisă de directiva “Cumpără următorul obiect din listă”. Condiția verificată de fiecare dată înaintea efectuării acestei acțiuni este “mai sunt obiecte de cumpărat pe lista mea de cumpărături?”. Dacă această condiție este satisfăcută se execută o nouă cumpărătură. Repetarea continuă până la epuizarea listei de cumpărături, caz în care evaluarea condiției întoarce un rezultat fals. O astfel de structură repetitivă se numește ciclu cu testul la început.
Acțiunea constituie corpul ciclului iar condiția se numește invariantul ciclului (denumire justificată de faptul că acest ciclu se execută atât timp cât valoarea rezultată din evaluarea condiției este invariant adevărat). Ciclul se numește ciclu cu testul la început deoarece evaluarea condiției se face înainte de a se executa acțiunea din corpul ciclului. Astfel este posibil ca această acțiune să nu se execute nici o dată (dacă condiția are din start valoarea fals). Sintaxa instrucțiunii while este:
while (<expresie booleana>)
<instrucțiune>
Instrucțiunea <instrucțiune> se repetă cât timp valoarea booleana obținută din evaluarea expresiei <expresie booleana> este adevărat. Instrucțiunea <instrucțiune> poate fi simplă sau compusă (bloc de instrucțiuni).
Exemplul următor prezintă utilizarea instrucțiunii while:
…
while(unghi < 360)
unghi = unghi + 10;
…
În acest exemplu variabila unghi este mărită ciclic cu 10 până când valoarea acesteia depășește 360o. Dacă valoarea inițială a acestei variabile a fost 5, valoarea la ieșirea din ciclu va fi 365o. Dacă valoarea inițială este un multiplu de zece dar mai mică de 360o, valoarea finală obținută este 360o. Dacă însă valoarea inițială este egală sau mai mare ca 360o, acțiunea de incrementare a sa cu 10 nu are loc, ciclul terminându-se fără a se mai executa corpul său deoarece condiția unghi < 360 este evaluată la valoarea fals de la început.
Schema logică din figura 1.8 reprezintă structura repetitivă while din exemplul de mai jos.
Figura 1.8 Structura repetitivă while
1.13 Structura de control repetitivă while
Figura 1.9 structura repetitiva do/while
CAPITOLUL II
Sistemul de operare Android
2.1 Instalarea SDK Android și precondițiile
Instalarea cu succes a Android SDK are nevoie de alte două sisteme software care fac parte din acesta: Kit Dezvoltare Java (JDK) și Eclipse (IDE) mediu integrat de dezvoltare. Aceste două sisteme nu sunt livrate ca parte a Android SDK, pentru că pot fi utilizate și în alte scopuri în afară de software-ul Android dezvoltare, sau pentru că acestea pot fi deja instalate în sistemul dumneavostră, și instalarea acestora poate provoca ciocniri de versiuni.
Android SDK este compatibil cu o gamă de versiuni recente ale JDK și IDE Eclipse.
Cea mai corectă alegere este instalarea ultimei versiuni de instrumente. Cerințele minime de sistem se vor găsi pe site-ul Dezvoltatorilor Android: http://developer.android.com/sdk/requirements.html.
Se poate utiliza decât Eclipse IDE în dezvoltarea de software Android, și informații pe utilizarea altor IDE este prevăzut în documentația Android la http: // developer .android.com / ghid / dezvoltarea / alte-ide.html.
Am ales Eclipse ca IDE pentru această lucrare deoarece pe deoparte Eclipse susține cel mai mare număr de instrumente SDK Android și alte plug-in-uri, iar pe de altă parte Eclipse este cel mai utilizat pe scară largă Java IDE, dar IntelliJ IDEA este o alternativă preferată de ceilalti programatori.
2.2 Eclipse Mediu de dezvoltare integrat (IDE)
Eclipse este o platformă de tehnologie de uz general. Acesta a fost aplicată la o varietate de IDE-uri pentru mai multe limbi și în crearea de IDE-uri personalizate pentru mai multe SDK-uri specializate, precum și pentru a fi utilizate în afara de unelte de dezvoltare software, cum ar fi furnizarea unei platforme RCP (Rich Client Platform) pentru Lotus Notes și alte câteva aplicații.
Eclipse este de obicei folosit ca un IDE pentru scris, testare și depanare software, în special Software-ul Java. Există, de asemenea mai multe IDE derivate și SDK-uri pentru diferite softuri de dezvoltare Java. În acest caz vom utiliza Eclipse și vom adauga un plug-in pentru a-l face utilizabil pentru dezvoltarea de software Android.
Eclipse poate fi descărcat de pe http://www.eclipse.org/downloads.
Veți vedea o selecție de pachete Eclipse cel mai frecvent folosite în această pagină. Un pachet Eclipse este o colecție de-a gata de module Eclipse care-l face mai potrivit pentru anumite tipuri de dezvoltare de software. De obicei, utilizatorii Eclipse încep cu unul din pachetele disponibile pe pagina de descărcare și-l personalizează cu plug-in-uri, lucru pe care-l vom face și noi atunci când vom adăuga plug-in-ul Android instrument de dezvoltare (ADT) pentru instalarea Eclipse. Articolul Cerințele de sistem, de pe Site-ul Android Developers enumeră trei opțiuni de pachete Eclipse ca bază pentru instalarea Eclipse :
• Eclipse Classic (pentru Eclipse 3.5 sau mai târziu)
• IDE Eclipse pentru Java Developers
• Eclipse pentru RCP / Plug-in Developers
Oricare dintre acestea vor funcționa, dar trebuie să instalăm plug-in-ul pe care dorim să-l dezvoltăm, cel Clasic sau pachetul Java Developers (EE sau Standard). Site-ul de download Eclipse va determina automat specificațiile sistemului dumneavostră de operare deși va trebui să aleageți între 32 și 64 de biți in funcție de sistemul de operare. Fișierul descărcat este o arhivă. Pentru a instala Eclipse, deschideți arhiva și copiați folderul Eclipse în dosarul special creat. Fișierul executabil pentru lansarea Eclipse pe sistemul dumneavoastră va fi găsit în folderul tocmai extras din arhivă.
Pentru a confirma că Eclipse este instalat corect și că aveți un JRE care acceptă Eclipse, lansați fișierul executabil în dosarul Eclipse. Este mai convenabil să creați o comandă rapidă pentru a lansa Eclipse. Ar trebui să vedeți Ecranul de întâmpinare ca în figura 2.1. Eclipse este implementat în Java și necesită un JRE. JDK-ul instalat anterior oferă un JRE. Dacă Eclipse nu se execută, trebuie să verificați că JDK este corect instalat.
Figura 2.1 Ecran de întâmpinare Eclipse
2.3 Android SDK
Cu JDK și Eclipse instalate aveți premisele pentru Android SDK și sunteți gata pentru a instala SDK. Android SDK este o colecție de fișiere: biblioteci, executabile, scripturi, documentare și așa mai departe. Instalarea SDK înseamnă descărcarea versiunii de SDK pentru platforma dumneavoastră și punerea fișierelor SDK într-un folder în directorul creat. Pentru a instala SDK, descărcați pachetul SDK care corespunde sistemului dumneavoastră de la http://developer.android.com/sdk/index.html. Descărcarea este o arhivă. Deschideți arhiva și extrageți dosarul din arhivă în folderul dumneavoastră.
SDK-ul conține unul sau două dosare pentru unelte: una cu numele de unelte începând din versiunea 8 din SDK și cealaltă denumită platformă-unelte. Aceste dosare trebuie să fie pe calea curentă, care este o listă de dosare căutări de sistem pentru fișierele executabile folosite atunci când se invocă un executabil de la linia de comandă. Pe sistemele Macintosh și Linux, setarea Variabilă de mediu PATH se face în .profile (Ubuntu) sau .bash_profile (Mac OS X) fișier creat de dumneavostră. Adăugați o linie la acel fișier care stabilește variabila de mediu PATH pentru a include directorul unelte din SDK (intrări individuale din lista sunt separate prin două puncte). De exemplu, ați putea utiliza următoarea linie (dar înlocuiți ambele cazuri de ~ / Android-SDK-ARCH cu calea completă pentru SDK-ul Android instalat):
export: PATH=$PATH:~/android-sdk-ARCH/tools:~/android-sdk-ARCH/platform-tools.
Pe sistemele Windows, faceți clic pe Start → clic dreapta pe Computer și selectați Properties. Apoi faceți clic pe Setări avansate de sistem și faceți clic pe butonul Variabile de Mediu. Dublu Click pe variabila de sistem calea, și se adaugă calea pentru dosarele de a merge până la sfârșitul valorii acestei variabile (nu se schimbă nimic din ceea ce este deja acolo!) și adăugarea celor două căi la sfârșit, separate prin punct și virgulă, fără spațiu, înainte de a le.
De exemplu:
C:\android-sdk-windows\tools;C:\android-sdk-windows\platform-tools.
După ce ați editat calea pe Windows, Mac sau Linux, închideți și redeschideți orice comandă solicitare sau terminale pentru a configura noua setare PATH (pe Ubuntu, ar putea fi necesară deconectarea și relogarea cu excepția cazului în care programul dumneavoastră terminal este configurat ca un shell de login).
2.4 Adăugarea de obiective de construi în SDK
Înainte de a putea construi o aplicație Android, sau chiar a crea un proiect care încercă să construiască o aplicație Android, trebuie să instalați unul sau mai multe ținte de construire. Pentru a face acest lucru vom folosi SDK și AVD Managerul. Acest instrument vă permite să instalați pachete în SDK-ul care va sprijini mai multe versiuni ale sistemului de operare Android și nivelurile multiple API.
Odată ce ADT plug-in este instalat în Eclipse, SDK și AVD Manager poate fi invocat din cadrul Eclipse. Acesta poate fi, de asemenea invocat de la linia de comandă.
Managerul de la linia de comandă, emite această comandă: Android screenshot din Figura 2.2 arată SDK și AVD Manager, cu toate versiunile SDK disponibile selectate pentru instalare.
Figura 2.2 SDK și AVD Manager, care permite instalarea de niveluri API Android
Pachetele etichetate "platformă SDK" aplicații de construcții sprijin compatibile cu diferite niveluri API Android. Ar trebui să instalați, cel puțin, cea mai recentă versiune, dar instalați toate nivelele API disponibile, precum și toate pachetele API Google add-on, este o alegere bună dacă s-ar putea dori într-o zi pentru a construi aplicații care să ruleze pe versiuni mai vechi de Android. De asemenea, trebuie să instalați, cel puțin, cel mai recente versiuni de pachete pentru exemple de aplicații. Trebuie să instalați, de asemenea și pachetul unelte pentru platforma Android SDK.
2.5 Dezvoltarea Toolkit Android (ADT) Plug-in pentru Eclipse
Acum, că aveți fișierele SDK instalate, împreună cu Eclipse și JDK, există o parte mai critică pe care trebuie să o instalați : Android Developer Toolkit (ADT) plug-in. ADT plug-in adaugă funcționalitate Android specifică Eclipse.
Software-ul din plug-in permite aplicației Eclipse să construiască aplicații Android, să lanseze emulatorul Android, să se conecteze la servicii de depanare pe emulator, să editeze fișierele XML Android, să editeze și să compileze fișierele Android Interface Definition Language (AIDL), să creeze pachete Android de aplicatii (fisirele.apk), și să efectueze alte sarcini Android specifice.
2.6 Configurarea plugin-ul ADT
Încă un pas, și ați terminat instalarea. Odată ce ați instalat ADT plug-in, va trebui să-l configurați. Instalarea plug-in-ului înseamnă că diferite părți ale aplicatiiei Eclipse conțin dialoguri de dezvoltare de software specific Android, comenzi de meniu, și alte instrumente, inclusiv dialogul va folosi acum pentru a configura ADT plug-in. Start Dialog pentru Preferințe folosind fereastra → Preferences (Linux și Windows) sau Eclipse Preferințe → (Mac) opțiunea de meniu. Faceți clic pe elementul marcat Android în panoul din stânga de dialog Preferințe. Un dialog cu setările Android este afișat imediat. În acest dialog, un câmp de introducere a textului etichetate "Locul de amplasare SDK" apare în partea de sus. Trebuie să introduceți calea către locul unde vom instala SDK-ul, sau puteți utiliza browserul de fișiere pentru a selecta directorul, așa cum se arată în figura 2.3. Faceți clic pe Aplicare.
Figura 2.3. Configurarea locației SDK în Eclipse ADT plug-in folosind Preferințe Android
Dialog
Instalarea dvs. SDK Android este acum completă.
2.7 Test Drive: Confirmarea că aplicația funcționează
Dacă ați urmat pașii din acest capitol, precum și instrucțiunile online, instalarea de Android SDK este acum completă. Pentru a confirma că ați instalat tot, să creăm o simplă aplicație Android.
2.8 Efectuarea unui proiect Android
Primul pas în crearea unei simple aplicații Android este de a crea un proiect Android. ECLIPSE organizează munca în "proiecte", și prin desemnarea proiectul dumneavoastră ca un Proiect Android, vă spun că Eclipse ADT plug-in și alte instrumente Android vor fi utilizate în combinație cu acest proiect.
Începe noul proiect cu File → New → Project Android. Localizează opțiunea Android proiect în fereastra nou aparută New Project (ar trebui să fie o subsecțiune numită Android). Faceți clic pe Următorul, iar dialogul New Project apare așa cum se arată în figura 2.6. Pentru a crea proiectul Android, vă pun la dispoziție următoarele informații:
Numele proiectului
Acesta este numele proiectului ( nu al aplicației) care apare în Eclipse.
Tastează TestProject așa cum se arată în figura 2.4.
Spațiul de lucru
Un spațiu de lucru este un dosar care conține un set de proiecte Eclipse. În crearea unui nou proiect, aveți posibilitatea de a alege de a crea proiectul în spațiul de lucru curent, sau specificând o locație diferită în sistemul de fișiere pentru proiectul dumneavoastră. Dacă nu aveți nevoie să puneți acest proiect într-o anumită locație, utilizați valorile implicite ("Creare nou proiect în spațiu de lucru "și" Utilizare locație implicită").
Numele țintă
Imaginile de sistem Android instalate în SDK sunt prezentate în lista de ținte de construire. Puteți alege una din aceste imagini de sistem, precum și furnizorul corespunzător, platforma (Numărul versiunii sistemului de operare Android), și nivelul API ca țintă pentru care aplicație dumneavoastră este construită. Platforma și Nivelul API sunt cei mai importanți parametri aici: ei guvernează biblioteca platformă Android care va fi compilată cu aplicația dumneavoastră, și nivelul API suportat. Pentru moment, alegeți cele mai recente versiuni pentru sistemul de operare Android și nivel API instalate.
Numele de aplicatiei
Acesta este numele aplicației, pe care utilizatorul il va vedea. Tastați Test Aplication.
Numele Pachetului
Numele pachetului creează un pachet spațiu de nume Java care identifică în mod unic pachete în cererea dumneavoastră, și trebuie să identifice în mod unic, de asemenea, tot aplicația Android printre toate celelalte aplicații instalate. Se compune dintr-un nume unic al domeniului și un nume specific al aplicației. Nu toate spațiile denumite pachet sunt unice în Java, dar convențiile utilizate pentru aplicațiile Android fac conflictele namespace mai puțin probabile. În exemplul nostru am folosit com.oreilly.testapp, dar puteți pune ceva mai potrivit pentru domeniul dumneavoastră unde (puteți utiliza, de asemenea, com.example.testapp, deoarece example.com este un nume de domeniu rezervat pentru exemple, cum ar fi acesta).
Figura 2.4. Panoul de dialog pentru noul proiect
Activitate
O activitate este o unitate de interfață cu utilizatorul interactivă într-o aplicație Android, de obicei, corespunzând unui grup de obiecte de interfață utilizator care ocupă întregul ecran. Opțional, atunci când creați un proiect, puteți avea o activitate schelet creată pentru voi. Dacă creați o aplicație vizuală (în contrast cu un serviciu, care poate fi "fără cap" -fără o interfață vizuală), acesta este un mod convenabil de a crea activitatea aplicația va începe cu. În acest exemplu, trebuie să creați o activitate numită TestActivity.
Versiunea minimă SDK
Câmpul marcat Min SDK Version ar trebui să conțină un număr întreg care corespunde versiunii minime SDK cerută de dumneavoastră, și este folosit pentru a inițializa folosește-SDK atribut în manifest al aplicației, care este un fișier care stochează cerere atribute. Consultați "Android Manifest Editor" la pagina 24. În cele mai multe cazuri, acest lucru ar trebui să fie același ca nivelul API al țintei construi selectat, care este afișată în coloana din dreapta a listei de obiective construite, așa cum se arată în figura 2.6.
Faceți clic pe Finish pentru a crea proiectul Android, și veți vedea listat în fereastra din Eclipse IDE stânga, așa cum se arată în figura 2.7.
Figura 2.5 Punctul de vedere Pachetul Explorer, care arată fișierele, și componentele acestora, care fac parte din proiect.
Dacă vă extindeți punctul de vedere al ierarhiei proiectului făcând click pe "+" (Windows) sau triunghiul (Mac și Linux) de lângă numele proiectului, veți vedea diferite părți ale unui Proiect Android. Extindeți folderul src și veți vedea un pachet Java cu numele pe care l-ați introdus în expertul. Expand că pachetul și veți vedea clase de activitate creată de expertul. Faceți dublu click pe care, și veți vedea codul Java de dumneavoastră primul program de Android:
package com.oreilly.demo.pa.ch01.testapp;
import android.app.Activity;
import android.os.Bundle;
import com.oreilly.demo.pa.ch01.R;
public class TestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Dacă ați fost în urmă de-a lungul și a vedea același lucru pe computer, SDK-ul instalare este probabil funcționează corect. Dar să vă asigurați, și de a explora SDK doar un pic mai departe, prin rularea primul program într-un emulator și pe un Android dispozitiv dacă aveți unul la îndemână.
CAPITOLUL III
Platforma Arduino si mediul de dezvoltare integrat
Ce este Arduino?
Arduino este una dintre cele mai simplu de utilizat platforme cu microcontroller. Te poți gândi la el ca la un minicalculator (are puterea de calcul a unui computer obișnuit de acum 15 ani), fiind capabil sa culeagă informații din mediu și să reacționeze la acestea.
In jurul lui Arduino există un ecosistem de dispozitive extrem de bine dezvoltat. Orice fel de informație ți-ai dori să culegi din mediu, orice fel de conexiuni cu alte sisteme ai avea nevoie, există o șansă foarte mare să gășesti un dispozitiv pentru Arduino capabil să iți ofere ceea ce ai nevoie.
Astfel, dacă discutăm despre preluarea de informații din mediu, mai jos sunt doar câteva exemple de senzori: senzori ce determină nivelul de alcool în aerul respirat, senzori de incediu, gaz GPL, monoxid de carbon, accelerații ale dispozitivelor în mișcare, curent consumat de diverse dispozitive casnice, forța de apăsare, gradul de rotire, cartele RFID, distanțe, nivel de iluminare, direcția nordului, prezența umană, sunet, temperatură, umiditate, presiune atmosferică sau video. Dacă ne referim la posibilitatea de a ne conecta cu alte sisteme, există plăci de rețea Ethernet pentru Arduino capabile să comunice informații prin Internet, dispozitive capabile să transmită date prin conexiune radio, plăci de rețea WIFI, dispozitive GSM pentru Arduino (capabile să trimită / recepționeze SMS-uri, să inițieze apeluri de voce sau să trimită date prin reteaua 3G) sau conectori Bluetooth pentru conectarea Arduino cu telefonul mobil sau laptop. In zona mecanică, există motoare de curent continuu (utilizate pentru robotica), motoare pas cu pas (utilizate de obicei în zona industriala) sau servomotoare, controlate foarte exact. Pentru afișarea informațiilor preluate, există ecrane LCD pentru Arduino, începând cu cele mai simple (LCD text cu 16 caractere) până la ecrane LCD grafice. In prima parte a acestei cărți vom dezvolta integrarea Arduino cu fiecare dintre dispozitivele pe care le-am amintit mai sus (și alte cateva în plus). In cea de-a doua parte vom prezenta pe larg o serie de proiecte interesante realizate prin combinarea Arduino cu unul sau mai multe dispozitive dintre cele enumerate mai devreme.
Pentru a-ți face o idee despre ceea ce se poate face cu Arduino, iată în continuare câteva exemple de proiecte care se pot realiza cu Arduino:
senzor de alcool conectat la Arduino, Arduino conectat la PC; atunci când nivelul de alcool în aerul expirat depășește un anumit nivel prestabilit, computerul iți dă un avertisment când incerci să postezi lucruri pe Facebook;
robot autonom care ocolește obstacole;
robot controlat prin Bluetooth folosind telefonul mobil sau laptop-ul;
dispozitiv pentru pictat ouă ("the EggBot");
Arduino + senzor temperatură + senzor umiditate + senzor presiune atmosferică + placă de rețea Ethernet care transmite datele de mediu pe Google Docs, la fiecare 10 secunde;
mână robotică, bazată pe o manusă cu senzori de îndoire și servomotoare;
Quadcopter-e;
OpenEnergyMonitor, sistem bazat pe Arduino care monitorizează energia electrică consumată în casă;
praștie reală (din lemn) combinată cu Arduino, un accelerometru și Bluetooth, pentru jucat Angry Birds pe PC;
acces bazat pe cartele RFID + notificări prin Twitter.
In cazul Arduino, totul este foarte simplu de utilizat. Ai nevoie de circa 5 minute ca să iți instalezi mediul de dezvoltare și să scrii primul tău program pe Arduino. Nu este necesar să lipesti fire, tot ce ai nevoie este un port USB liber.
Instalare Drivere Arduino
Primul lucru pe care trebuie să îl faci înainte de a putea programa placa Arduino, este să îi instalezi driverele pe PC. Dacă rulezi pe Linux sau MAC, ai scăpat, nu ai nevoie de drivere. Daca însă rulezi pe Windows, va trebui să instalezi și driverele ca pentru orice alt dispozitiv hardware. Driverele sunt disponibile în mediul de dezvoltare, pe care îl vei descărca de la adresa http://arduino.cc/en/Main/Software. Descarcă arhiva .zip și dezarhiveaz-o într-un director la alegerea ta. Conectează apoi placa Arduino la portul USB. PC-ul va detecta că ai un nou dispozitiv și iți va cere să instalezi drivere pentru el. Alege opțiunea de instalare prin care ii spui Windows-ului că ai tu drivere și îi ceri să nu se conecteze la Internet pentru a căuta în mod automat. Selectează directorul "drivers" din directorul unde ai dezarhivat arhiva .zip de la pasul precedent (NU directorul "FTDI Drivers"!). Procesul continuă apoi cu "Next". In final, dacă deschizi Device Manager, în secțiunea "Ports (COM & LPT)" ar trebui să vezi o intrare numită "Arduino UNO".
Aici – http://arduino.cc/en/Guide/Windows – găsesti un ghid mai detaliat, cu screenshot-uri referitor la instalarea driverelor pentru Arduino.
Arduino IDE, Program Arduino, Upload
Dupa ce ai instalat driverele, următorul pas este să iți programezi placa Arduino. Rulează programul "arduino", din mediul de dezvoltare pe care tocmai l-ai descărcat la pasul precedent (vezi screenshot-ul de mai jos). Arduino se conectează la PC prin intermediul unui port serial. Primul pas pe care îl ai de făcut este să determini acest port. Cea mai simplă cale este să conectezi placa, astepti circa 30 de secunde – 1 minut, ca să fii sigur că a fost detectată de PC, iar apoi deschizi meniul "Tools -> Serial Port". Ar trebui să vezi una sau mai multe intrari. Memorează-le (sau scrie-le pe o foaie de hârtie / fă un screenshot). Deconectează placa Arduino din portul USB (scoate cablul din PC). Deschide din nou meniul "Tools -> Serial Port". Acel port care a dispărut este portul asociat plăcii Arduino. Conectează din nou placa Arduino la PC, asteaptă să fie recunoscută de PC, și apoi selectează portul respectiv din meniul "Tools -> Serial Port". Următorul pas este selectarea tipului de placă cu care lucrezi. Din meniul "Tools -> Board", selecteaza tipul de placa cu care lucrezi (Arduino Uno, Leonardo, Mega, etc).
Figura 3.1 Sketch Arduino
Anatomia unui program Arduino
Orice program Arduino are două secțiuni. Secțiunea "setup", care este rulată doar o singură dată, atunci când placa este alimentată (sau este apăsat butonul "Reset"), și secțiunea "loop", care este rulată în ciclu, atât timp cât este alimentată placa. Să luăm un exemplu:
void setup() {
//codul scris aici ruleaza o singura data
}
void loop() {
//codul scris aici ruleaza tot timpul
}
Astfel, în rutina "setup" vom pune de obicei cod de inițializare, iar în rutina "loop" vom scrie partea principală a programului nostru. Este interesant să dai acum câteva pagini mai departe și să urmărești acest lucru pe exemplele din capitolele următoare.
Microcontrollerul ATmega 168
Microcontrollerele din familia AVR prezintă o organizare de tipul RISC executând o instucțiune per ciclu mașină. Prezența unor blocuri interne ca: oscilator intern, timere, unitate UART, SPI, rezistoare pull-up, PWM (pulse widith modulation), ADC, comparatoare, determină utilizarea acestor microcontrollere într-o gamă foarte largă de aplicații.
O altă calitate remarcabilă a acestor microcontrollere este consumul foarte mic de energie.
Domeniul tensiunilor de alimentare este cuprins între 1.8V și 5V. Prezintă 6 moduri diferite de stand-by ceea ce ne asigură că aceste microcontrollere nu vor consuma energie decât atunci când este nevoie.
Controlul software al frecvenței garantează o viteză maximă de execuție atunci când este nevoie, iar în restul timpului microcontrollerul poate trece în stand-by, unde consumul de energie este minim.
Utilizarea acestor microcontrollere poate reduce semnificativ timpul de dezvoltare a unei aplicații datorită prezenței pe acestea a unui bloc de depanare în timp real, circuitul aflându-se chiar pe placa ce reprezintă aplicația. Se pot face în timp real operații de “watch” asupra unor regiștri, operații de rulare pas cu pas, operații de oprire în breakpoint.
Există produse microcontrollere de uz general precum și microcontrollere cu funcții specializate.
Printre cele mai utilizate microcontrollere de uz general putem specifica: ATmega8 , ATmega16 , ATmega128, ATmega162. etc.
Microcontrollerele cu funcții specializate se împart în mai multe categorii :
Ligthing AVR : conțin un procesor de semnal și este special conceput pentru controlul motoarelor de curent continuu.
LCD AVR : conțin un controller pentru adresarea dispozitivelor LCD
CAN AVR : conțin implementată hardware o interfață CAN.
ATmega 168 este un microcontroller de consum mic, pe 8 biți, produs de compania Atmel, bazat pe arhitectura AVR RISC.
Figura 3.2 Microcontroller ATmega 168
Dispune de un set de 131 de instrucțiuni și 32 de registre de uz general. Cele 32 de registre sunt direct adresabile de Unitatea Logică Aritmetică (ALU), permițând accesarea a două registre independente într-o singură instrucțiune. Se obține astfel o eficiență sporită în execuție (de până la zece ori mai rapide decât microcontrollerele conveționale CISC).
Caracteristicile principale ale acestuia sunt:
16KB de memorie Flash reinscriptibilă pentru stocarea programelor;
1KB de memorie RAM;
512B de memorie EEPROM;
două numărătoare/temporizatoare de 8 biți;
un numărător/temporizator de 16 biți;
conține un convertor analog – digital de 10 biti, cu intrări multiple;
conține un comparator analogic;
conține un modul USART pentru comunicație serială (port serial);
dispune de un cronometru cu oscilator intern;
oferă 32 de linii I/O organizate în patru porturi (PA, PB, PC, PD).
ATmega168 are două spații de memorie principală, spațiul pentru Memoria de Date și pentru Memoria de Program. În plus, are și o memorie nevolatilă EEPROM pentru memorarea datelor. Toate cele trei tipuri de memorie sunt cu adresare liniară.
ATmega 168 conține o memorie flash reprogramabilă (In-system On-chip) de 16 Ko pentru programe. Deoarece toate comenzile pentru AVR sunt de 16 și 32 de biți, Flash-ul este organizat ca 8Kx16. Pentru securitatea software-ului, spațiul pentru memoria de programe Flash este impărțită în două secțiuni: secțiunea de program boot și secțiunea pentru programe de aplicație.
Memoria Flash suportă cel puțin 10000 de cicluri de scriere/ ștergere. Counter-ul permite adresarea unei memorii de 8*1024 locații de 16 biți.
Figura 3.3 Organizarea memoriei microcontrollerului ATmega168
Figura 3.4 Configurația pinilor microcontrollerului ATmega 168
Descrierea pinilor:
VCC
Tensiunea de alimentare:
GND
Ground:
Port B (PB 7:0)
Portul B este un port de 8 biți intrare-ieșire bidirecțional cu rezistori pull-up interni. PB6 poate fi folosit ca intrare pentru oscilator sau intrare pentru ceasul intern al circuitului.
Port C (PC 5:0)
Portul C este un port de 7 biți de intrare-ieșire cu rezistori pull-up interni.
PC6/RESET
PC6 poate fi programat ca pin input/output sau ca pin de Reset.
Port D (PD 7:0)
Portul D este un port de 8 biți intrare-ieșire bidirecțional cu rezistori interni pull-up.
AVcc
AVcc este tensiunea de alimentare pentru convertorul analog-numeric și pentru pinii PC3:0.
AREF
AREF este pinul de referință analogică pentru convertorul analog-numeric.
Diagrama bloc a microcontrollerului este prezentată în imaginea următoare:
Figura 4.5 Diagrama bloc a microcontrollerului ATmega16
Arduino UNO R3
Figura 3.6 Schemă electrică Arduino Uno R3
Figura 3.7 Placa Arduino Uno văzută de sus
Figura 3.8 Spatele plăcii Arduino Uno
Arduino Uno este o placa bazată pe microcontrollerului ATmega328. Ea are 14 pini digitali de intrare / ieșire (dintre care 6 pot fi utilizați ca ieșiri pentru PWM), 6 intrari analogice, un rezonator ceramic de 16 MHz, o conexiune USB, un jack de putere și un buton de resetare. Acesta conține tot ce este necesar pentru a sprijini microcontroler. Pur și simplu conectați-l la un computer cu un cablu USB sau alimentațil cu un adaptor AC-DC sau o baterie pentru a începe.
Uno diferă față de toate plăcile precedente care nu utilizează chip driver FTDI USB-to-serial. În schimb, este dotat cu Atmega16U2 (Atmega8U2 până la versiunea R2), programat ca un convertor USB-to-serial.
"Uno" înseamnă unul în italiană și este numit pentru a marca lansarea viitoare de Arduino 1,0.Uno și Versiunea 1.0 va fi versiunile de referință ale Arduino, merge mai departe.Uno este ultimul dintr-o serie de placi Arduino USB, iar modelul de referință pentru platforma Arduino.
3.6.1 Detalii Tehnice
Microcontroler ATmega328
Tensiune de operare 5V
Tensiune de intrare (recomandat) 7-12V
Tensiune de intrare (limite) 6-20V
Digital I / O Pins 14 (din care 6 prevăd PWM de ieșire)
Pini de intrare analogici 6
DC curent pe I / O Pin 40 mA
DC curent pentru 3.3V Pin 50 mA
Memorie flash 32 KB (ATmega328) din care 0,5 KB utilizate de bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz
Lungime 68,6 mm
Lățime 53,4 mm
Greutate 25 g
3.6.2 Alimentarea
Arduino Uno poate fi alimentat prin intermediul conexiunii USB sau cu o sursă de alimentare externă. Sursa de alimentare este selectat automat.
Alimentarea externa (non-USB) poate veni fie de la un adaptor AC-la-DC sau baterie. Adaptorul poate fi conectat printr-un conector de 2.1mm cu centru-pozitiv. Conectare de la o baterie poate fi realizata legand la GND si V’in capetele de la conectorii de alimentare.
Placa de dezvoltare poate opera pe o sursa externa de 6-20 volti. Daca este alimentata la mai putin de 7V, exista posibilitatea, ca pinul de 5V sa furnizeze mai putin de cinci volti si placa sa devina instabila. Daca se alementeaza cu mai mult de 12V, regulatorul de tensiune se poate supra-incalzi acest lucru ducand la deteriorarea placii. Intervalul de tensiune recomandat de catre producator este de 7-12 volti.
Pinii de tensiune si alimentarea sunt dupa cum urmeaza:
– V’in. Tensiune de intrare pe placa de dezvoltare atunci cand este utilizata o sursa de alimentare externa (spre deosebire de 5 volti de la conexiunea USB sau alte surse de energie stabilizata). Puteti introduce tensiuni de alimentare prin intermediul acestui pin, sau, in cazul in care tensiunea de alimentare se face prin intermediul conectorului de alimentare externa, o puteti accesa prin acest pin.
– 5V. Regulator de tensiune utilizat pentru alimentarea microcontrolerului si a altor componente de pe placa de dezvoltare. Aceasta poate fi alimenta fie de la VIN printr-un regulator de pe placa de dezvoltare, fie furnizat de catre USB sau de o alta sursa de tensiune de 5V.
– 3V3. O alimentare de 3.3 volti generat de catre regulatorul de tensiune de pe placa. Curentul maxim ca il furnizeaza este de 50 mA.
– GND. Pini de impamantare.
3.6.3 Memoria
ATmega328 are 32 KB (cu 0,5 KB folosi bootloader). De asemenea, are 2 KB de SRAM și 1 KB de EEPROM (care poate fi citit și scris cu biblioteca EEPROM).
3.6.4 Intrări și ieșiri
Fiecare dintre cei 14 pinii digitali de pe Uno poat fi utilizati ca intrare sau ieșire, folosind funcțiile pinMode (), digitalWrite () și digitalRead (). Ele funcționează la 5 volți. Fiecare pin poate oferi sau primi un maxim de 40 mA și are o rezistență pull-up intern (deconectată implicit) de 20-50 kohmi.
3.6.5 Comunicații
Arduino Uno are o serie de facilități pentru comunicarea cu un calculator, o altă Arduino, sau alte microcontrolere.ATmega328 oferă UART TTL (5V) serial de comunicare, care este disponibil pe pinii digitale 0 (RX) și 1 (TX). Un ATmega16U2 pe canalele bord acest serial de comunicare pe USB și apare ca un port com virtual pentru software-ul pe calculator."Firmware 16U2 foloseste driverele standard de USB COM, și nu este nevoie driver extern. Cu toate acestea, pe Windows, este necesar un fișier .inf. Software-ul Arduino include un monitor serial care permite date textuale simple pentru a fi trimise la și de la bord Arduino. RX și TX LED-urile de pe bord va clipi atunci când datele sunt transmise prin intermediul cip și USB conexiunea USB-to-serial la computer (dar nu pentru comunicare serial de pe pinii 0 și 1). O bibliotecă SoftwareSerial permite comunicarea în serie pe oricare dintre pini digitale ONU de.
ATmega328 sprijină, de asemenea I2C (DST) și SPI comunicare. Software-ul Arduino include o bibliotecă de sârmă pentru a simplifica utilizarea de autobuz I2C; consultați documentația pentru detalii. Pentru SPI comunicare, utilizați biblioteca SPI.
3.6.6 Programare
Arduino Uno poate fi programat cu software-ul Arduino. Selectați "Arduino Uno din Instrumente> meniul Board (în funcție de microcontroler de pe bord).
ATmega328 pe Arduino Uno vine preburned cu un bootloader care vă permite să încărcați codul nou fără să folosiți un programator hardware extern. Acesta comunică folosind protocolul inițial STK500.
Puteți trece, de asemenea, aplicația bootloader și programa microcontrolerul prin ICSP (In-Circuit Serial Programare) în afara folosind Arduino ISP sau similare; vedea aceste instrucțiuni pentru detalii.
ATmega16U2 (sau 8U2 în rev1 și plăci REV2) codul sursă firmware este disponibil. ATmega16U2 / 8U2 este încărcat cu un bootloader DFU, care pot fi activate prin:
Pe panourile REV1: conectare jumper lipire pe spatele plăcii (lângă harta Italiei) și apoi resetarea 8U2.
Pe panouri REV2 sau mai târziu: este un rezistor care trage linia 8U2 / 16U2 CAF la sol, ceea ce face mai ușor pentru a pune în modul DFU.
Puteți utiliza apoi software-ul Atmel FLIP (Windows) sau programator DFU (Mac OS X și Linux) pentru a încărca un nou firmware. Sau puteți utiliza antet ISP cu un programator extern (suprascrierea bootloader DFU). Vezi acest tutorial de la utilizatori pentru mai multe informații.
3.6.7 Resetare automata
Mai degrabă decât să solicite o presă fizică a butonului reset înainte o încărcare, Arduino Uno este conceput într-un mod care îi permite să fie resetat prin software-ul care rulează pe un calculator conectat. Una dintre liniile de control al debitului de hardware (DTR) ale ATmega8U2 / 16U2 este conectat la linia de resetare a ATmega328 printr-un condensator 100 nanofarad. Când această linie este afirmat (ia scăzut), linia de resetare scade suficient de mult pentru a reseta cip. Software-ul Arduino utilizează această capacitate pentru a vă permite să încărcați codul prin simpla apăsare a butonului de încărcare în mediul Arduino. Acest lucru înseamnă că aplicația bootloader pot avea un timeout mai scurt, deoarece scăderea DTR poate fi bine coordonate cu începerea încărcării.
Această configurare are alte implicații. Atunci când Uno este conectat fie la un calculator care rulează Mac OS X sau Linux, se resetează de fiecare dată când o conexiune este făcută de la software-ul (prin USB). Pentru următoarea jumătate de secundă, bootloader-ul se execută pe Uno. În timp ce este programat să ignore datele malformat (de exemplu, nimic în afară de o încărcare de nou cod), se va intercepta primele bytes de date trimise la bord după ce se deschide o conexiune. Dacă o funcționare schiță pe placa primește de configurare o singură dată sau alte date atunci când pornește în primul rând, asigurați-vă că software-ul cu care comunică asteapta un al doilea după deschiderea conexiunii și înainte de a trimite aceste date.
Uno conține o urmă care poate fi tăiat pentru a dezactiva auto-resetare. Plăcuțele de pe fiecare parte a urmelor pot fi lipite împreună pentru a reactiva. Este etichetat "RESET-EN". Ați putea fi, de asemenea, posibilitatea de a dezactiva auto-resetarea prin conectarea unui 110 ohm rezistor la 5V la linia de resetare.
3.6.8 Protectie de supracurent prin usb
Arduino Uno are o siguranțe poly resetabile care protejează porturile USB ale computerului de la scurtcircuit și supracurent. Deși cele mai multe calculatoare asigură propria lor protecție internă, siguranța oferă un strat suplimentar de protecție. Dacă mai mult de 500 mA este aplicată portului USB, siguranța va rupe automat conexiunea până cand scurtul sau suprasarcina este eliminată.
CAPITOLUL IV
Dronă
4.1 Ce este o dronă ?
Drona este un dispozitiv folosit în diverse scopuri, de la colectarea de informații de către armată la filmarea orașelor de la înălțime. Totuși, ce este drona și cum a ajuns aceasta atât de populară?
Figura 4.1 Dronă cu camera video
Dacă te întrebi ce este drona, în primul rând trebuie să știi că aceasta nu este o creație a ultimilor doi-trei ani de când ai început să auzi despre cele comerciale și, eventual, de transportul cu drone. Drona este un UAV (n.r. – unmanned aerial vehicle, adică vehicul capabil să zboare pilotat sau nepilotat de către un om) și a pornit ca proiect al armatei.
Deși noi, oamenii obișnuiți, am început să folosim drone în ultimii ani, armatele lumii (mai ales cea a Statelor Unite ale Americii) au acces la ele de dinainte de anii 2000. Principalele lor utilități în armată sunt colectarea de informații și bombardarea anumitor puncte strategice, iar asta fără a risca viața vreunui soldat. Mai mult, cele responsabile de colectarea de informații sunt capabile de autonomii impresionante, fiind alimentate și cu energie solară. Totuși, aceste modele costă zeci de milioane de dolari.
Figura 4.2 Dronă folosită de armata SUA în misiunile sale
Mult mai ieftine sunt dronele civile. Ele au intrat în atenția publicului pe măsură ce anumite companii au fabricat și le-au comercializat pentru uz civil. În 2014 însă au intrat în dezbaterea parlamentelor din anumite țări ale lumii pentru a le crea un cadru legislativ în care oamenii le pot folosi. Spre exemplu, în România un proiect de lege prevedea ca cele care filmează să nu mai zboare fără aprobare. Nu s-a materializat acel plan, lovindu-se mai ales de opoziția proprietarilor care câștigă bani din videoclipurile realizate cu astfel de dispozitive. În SUA a fost fixat termenul de 30 septembrie 2015 pentru a întocmi legile potrivite. Acolo, companii precum Amazon vor să înceapă transportul cu așa echipamente.
Potrivit textului de lege din România apărut la începutul acestui an, la articolul 5 se face referire la dronele folosite de utilizatori pentru a filma sau fotografia de la câteva zeci de metri înălțime. „[Art. 5, litera b.; Prezentul ordin nu se aplică] aeronavelor civile motorizate fără pilot la bord și cu masa maximă la decolare mai mică sau egală cu 1 kg, atât timp cât sunt operate într-o zonă deschisă, fără construcții cu destinația de locuință, sunt operate fără depășirea câmpului vizual al persoanei care asigură comanda aeronavei de la sol, dar nu mai mult de 150 m distanță pe orizontală și de 100 m distanță pe înălțime față de această persoană și nu au montate pe ele aparatură pentru filmare sau transmisie de date“.
4.2 Drone civile
Dacă inițial dronele erau fabricate în exclusivitate de companiile din domeniul apărării, costul acestora ridicându-se la câteva milioane de dolari, astăzi există pe piață numeroase variante, inclusiv drone mici și ieftine, ce pot fi controlate cu ajutorul smartphone-ului.
Ca urmare a costului redus al achiziționării unei drone simple (sau al construirii ei), aceste aeronave fără pilot încep să fie folosite tot mai mult și în afara forțelor armate.
În SUA, numeroși amatori și-au construit drone sau au cumpărat astfel de aparate. Mulțumită lor au fost identificate utilizări ale dronelor în scopuri publice. În Texas, un pasionat al tehnologiei a descoperit cu ajutorul dronei sale că o uzină de procesare a cărnii deversa ilegal tone de sânge de porc într-un pârâu din apropiere. Imaginile surprinse de camera atașată dronei au susținut plângerea înaintată de persoana respectivă agenției de mediu, care a sancționat compania.
În California, agențiile imobiliare au început să folosească dronele pentru a filma și fotografia din aer proprietățile de lux, materialele mult mai convingătoare permițându-le să obțină un preț mai bun pentru acestea. Practica este atât de răspândită, încât poliția din Los Angeles s-a văzut nevoită să lanseze un avertisment, cerând operatorilor dronelor să nu încalce legislația FAA (agenția federală ce reglementează spațiul aerian). Totuși, polițiștii nu au cum să sancționeze operatorii dronelor dacă acestea zboară sub plafonul de 120 de metri (400 de picioare), unde regulile FAA nu se aplică.
Ca urmare a unei legi adoptate recent de Congresul american, spațiul aerian care este astăzi rezervat avioanelor cu pilot va deveni disponibil, începând cu 2015, dronelor civile și militare. Odată ce dronele vor avea acces la spațiul aerian disponibil astăzi avioanelor, se așteaptă ca numărul acestora să crească exponențial. Conform specialiștilor FAA, în 2020 peste 30.000 de drone vor survola teritoriul Statelor Unite.
Dronele sunt deja folosite pentru paza granițelor SUA și urmează să fie folosite în scurt timp și de organizațiile de pompieri (spre exemplu, pentru a lupta împotriva incendiilor de pădure).
FBI-ul și organizațiile de poliție din Statele Unite folosesc deja dronele. În iunie 2011 a fost înregistrată o premieră: prima arestare asistată de o dronă. Poliția din Dakota de Nord dorea să găsească 3 infractori probabil înarmați, membri ai unei grupări antiguvernamentale, ce se puteau afla oriunde pe o suprafață de 12 kilometri pătrați. Pentru că doreau să evite o confruntare armată, au solicitat Agenției Vămilor și Patrulelor de Frontieră să trimită una din cele 8 drone Predator, dronele-spion folosite de armata SUA în Afganistan și Pakistan.
Drona trimisă de agenția federală i-a găsit rapid pe infractori, iar senzorii atașați au descoperit că aceștia nu erau înarmați, astfel că poliția s-a putut apropia pentru a-i aresta.
De atunci, dronele Predator au efectuat peste 25 de zboruri pentru forțele de poliție, FBI și DEA (agenția antidrog). Pentru că nu pot fi auzite sau văzute, ele oferă avantaje considerabile departamentelor de poliție în comparație cu elicopterele, astfel că experții se așteaptă ca dronele să fie adoptate pe scară largă, numărul dronelor civile urmând să-l depășească în scurt timp pe cel al dronelor militare.
Un alt avantaj al dronelor îl reprezintă costul. Recent, departamentul de poliție din Los Angeles a achiziționat 12 elicoptere noi la prețul unitar de 1,7 milioane de dolari. Spre comparație, o dronă de tip Qube concepută de compania AeroVironment special pentru forțele de ordine costă doar 40.000 de dolari. "În mod cert, vrem să folosim drone, și o vom face îndată ce FAA va clarifica regulile de utilizare a acestora", a declarat comandantul Bob Osborne.
Anul acesta, dronele vor fi folosite pentru asigurarea securității în cadrul unor evenimente de amploare, precum Olimpiada de Vară ce va avea loc la Londra sau convenția Partidului Republican din SUA, al cărei scop este alegerea candidatului partidului la președinția SUA.
4.3 Dronele în alte domenii
În Uniunea Europeană există deja planuri pentru folosirea dronelor în scopul monitorizării modului de utilizare a subvențiilor de către agricultori. În 2011, Uniunea Europeană a plătit 44 de miliarde euro ca subvenții agricole, iar conform legilor comunitare trebuie inspectate anual cel puțin 5% din suprafețele cultivate cu ajutorul acestor fonduri.
Dacă inițial aceste inspecții erau efectuate de personal autorizat, tot mai multe țări au apelat la imaginile din satelit pentru a verifica dacă fermierii îndeplinesc condițiile pentru acordarea subvențiilor și apoi dacă le folosesc conform condițiilor stabilite. Inspecțiile din satelit sunt de 3 ori mai ieftine decât cele efectuate la fața locului de inspectori, astfel că în 2010 peste 70% dintre verificări au fost realizate cu ajutorul imaginilor surprinse de sateliți. Acestea pot fi uneori înșelătoare, însp, fiind totodată greu de obținut în țările cu vreme în general nefavorabilă.
Acum, dronele încep să fie văzute ca o potențială soluție pentru inspecțiile agricole. Spre deosebire de sateliți, acestea pot fotografia din diferite unghiuri, iar imaginile surprinse sunt mai detaliate. Dronele au început deja să fie testate în Catalonia, în sudul Franței și în Italia, urmând să fie folosite la scară largă în anii următori. Pentru aceasta, însă, va fi nevoie de schimbarea legislației europene, momentan fiind permisă utilizarea dronelor doar până la o distanță de 500 de metri de operator.
Dronele au început să fie folosite și în Japonia, dovedindu-se utile atât în agricultură, unde au ajutat la automatizarea procesului de stropire a recoltelor cu pesticide, cât și în investigarea accidentelor, precum în cazul centralei nucleare de la Fukushima, unde au fost folosite pentru a evalua în condiții de siguranță problemele întâmpinate.
O altă întrebuințare a dronelor vine din Rusia, unde arheologii folosesc aceste aeronave pentru a filma siturile cu ajutorul camerelor cu infraroșii, materialele obținute fiind utilizate pentru crearea unor modele 3D computerizate ale structurilor identificate sub sol.
Sea Shepherd, o organizație ecologistă ce militează împotriva vânătorii de balene, folosește începând cu acest an drone pentru a identifica vasele japoneze ce capturează și ucid cetaceele. Noua tehnologie le-a permis ecologiștilor să descopere anul acesta flota japoneză înainte ca aceasta să-și înceapă misiunea de cercetare. "Putem acoperi sute de kilometri de ocean cu aceste drone, ce s-au dovedit a fi un instrument esențial", a explicat Paul Watson, comandantul vasului Steve Irwin, folosit de Sea Shepherd pentru a împiedica vânătoarea de balene.
4.3.1 Noua eră a jurnalismului – "drone journalism"
Un alt domeniu pe care dronele promit să-l transforme este cel al jurnalismului. În Statele Unite, țara cu cele mai multe drone, facultățile de jurnalism au început deja să pregătească studenții pentru această nouă etapă a meseriei de ziarist.
Ideea «jurnalismului cu drone» nu datează de mai mult de un an. Prima oară când am văzut această idee aplicată a fost în Polonia, în timpul unui protest, când cineva a folosit un mini-elicopter controlat de la distanță pentru a filma evenimentul", a explicat Profesorul Matt Waite, fondatorul Drone Journalism Lab din cadrul Universității din Nebraska.
Cu ajutorul dronelor se pot obține imagini inaccesibile reporterilor aflați la sol, iar prețul acestor aeronave este unul rezonabil. Recent, dronele au fost folosite pentru a capta imagini în timpul protestelor desfășurate în capitala rusă, Moscova, împotriva fraudelor electorale.
Una dintre primele instituții media care au folosit dronele în cadrul reportajelor a fost ziarul digital The Daily, care a obținut cu ajutorul acestora imagini video extraordinare în care se putea observa efectul devastator al unei tornade ce a lovit Alabama.
Dronele au fost adoptate și de către paparazzi, care au descoperit că pot obține cu ajutorul lor imagini la care altfel nu ar avea acces. Pe Coasta de Azur, unde își petrec vara numeroase celebrități, dronele sunt deja un instrument esențial în arsenalul fotografilor.
4.3.2 Afectează dronele dreptul la intimitate?
Unii activiști se tem că răspândirea dronelor va conduce la încălcarea dreptului la intimitate.
Raoul Felder, un avocat din New York specializat în divorțuri, afirmă că "dacă israelienii pot folosi dronele pentru a da de urma teroriștilor, atunci cu siguranță un soț va putea folosi o dronă pentru a-și urmări soția când aceasta pleacă din casă la ore târzii".
De altfel, specialiștii care lucrează la conceperea dronelor pentru armată se gândesc deja la modul în care acestea pot fi utilizate de către populație.
Missy Cummings, un fost pilot al marinei SUA, actualmente profesor la MIT (Massachusetts Institute of Technology), lucrează alături de studenții săi la conceperea unei drone personale, de dimensiunile unei cutii de pizza. Rolul dronei comandate de compania Boeing este de a însoți soldații pe câmpul de luptă și de a-i avertiza atunci când identifică un potențial pericol. Cummings afirmă că aceeași dronă ar putea avea nenumărate aplicații civile. "Un părinte ar putea să o folosească pentru a urmări copiii în drum spre școală, ca să se asigure că ei ajung acolo în siguranță, iar școlile ar putea folosi dronele pentru a-și supraveghea perimetrul".
Dacă dronele ar putea afecta dreptul la intimitate prin omniprezența lor, același lucru ar putea avea și consecințe pozitive. Andrew Stobo Sniderman și Mark Hanis, cofondatorii Genocide Intervention Network, au argumentat într-un articol publicat recent în New York Times că dronele ar putea servi la prevenirea genocidelor prin faptul că pot filma din aer incidentele în care sunt încălcate drepturile omului, făcând imposibil de ascuns masacrele precum cel petrecut în Srebrenica în 1995.
4.3.3 Viitorul dronelor – roboții autonomi?
Următorul pas pe care armata americană îl are în vedere este dotarea dronelor cu capacitatea de a indentifica singure țintele inamice, fără asistență umană.
Momentan, armele cu care sunt dotate dronele ce patrulează câmpurile de luptă sunt lansate doar în urma comenzilor piloților, însă cercetătorii americani lucrează la conceperea unor sisteme capabile de a lua decizii autonome.
La granița dintre Coreea de Sud și Coreea de Nord există deja "paznici robotizați" capabili de decizii autonome. Turetele "Super aEgis 2" pot detecta un om de la 2,2 kilometri distanță, indiferent de vreme, atacând inamicii cu o mitralieră de calibrul 12,7 milimetri.
Specialiștii consideră că nu va dura mult până când și dronele vor deveni autonome, urmând să identifice inamicii cu ajutorul algoritmilor sofisticați și apoi să-i atace cu armele din dotare.
Ronald C. Arkin, autorul studiului "Governing Lethal Behavior in Autonomous Robots" finanțat de aripa de cercetare a armatei americane, afirmă că "autonomia letală este inevitabilă". SUA nu este singura țară în care se desfășoară cercetări în acest domeniu, China investind de asemenea sume importante.
Armata SUA estimează că în 2030 drone de dimensiunea insectelor, dotate cu camere și senzori, vor fi folosite pentru spionaj. Această previziune ar putea deveni realitate chiar mai devreme de 2030: o echipă de cercetători de la laboratorul de microrobotică al Harvard a creat, cu ajutorul unei imprimante 3D, o mini-dronă de dimensiunile unei monede, numită Mobee.
Toate aceste eforturi par să contureze un viitor în care cerul va împânzit de mii de drone, ce vor fi integrate în viața de zi cu zi, în ceea ce se anunță a fi "epoca dronelor".
4.4 Dronele interzise in România
Reglementarea vizavi de folosirea dronelor a fost făcută publică de puțin timp și a trezit interesul multor pasionați și producători independenți de conținut video. Este legal să deții o dronă, atât timp cât nu zbori cu ea în mediul rural/urban și nu are cameră instalată pe ea.
Dronele comerciale au fost create și utilizate în ultimii ani cu un scop prioritar: acela de filmare aeriană. Au fost dezvoltate sisteme complexe pentru stabilizarea unei camere foto, inclusiv a unui DSLR de greutate mare, sisteme de control și transmisie wireless a imaginii camerei direct pe un ecran extern montat pe telecomanda ”pilotului”. Filmările realizate cu dronele sunt nu numai spectaculoase, ci și din ce în ce mai cerute de companii, atât pentru promovare, cât și pentru distracția publicului larg. Pasiunea unora pentru aceste aparate de zbor este de admirat. Răzvan Baciu este unul dintre acești pasionați și cel de la care am primit și eu această informație legată de noua reglementare.
Era normală o reglementare și, în mod sigur, în toate țările cu acces la internet și curent electric se discută această problemă, iar aici insist pe acel ”se discută”. Înțeleg, această reglementare nu vizează decât un număr restrâns de utilizatori, pasionații sau profesioniștii. Nu era însă normal să se discute și la noi această problemă? Pentru că, după cum pare din textul de mai jos, am pus problema în cui și așteptăm o rezolvare… de la Uniunea Europeană.
Ca să nu ne pierdem în detalii, iată aici tot textul legii ce limitează folosirea dronelor. Apoi, voi dezvolta câteva idei în baza acestei legi.
Ministerul Transporturilor Ordinul nr. 8/2014 pentru stabilirea condițiilor de operare în spațiul aerian național a aeronavelor civile motorizate fără pilot la bord.
În vigoare de la 21.01.2014 Publicat în Monitorul Oficial, Partea I nr. 50 din 21.01.2014.
Având în vedere dezvoltarea continuă a industriei aeronautice în ceea ce privește fabricația și utilizarea aeronavelor fără pilot la bord, luând în considerare faptul că pe plan internațional nu au fost stabilite încă standarde comune de certificare și operare a aeronavelor civile fără pilot la bord, ținând cont de faptul că la nivelul Uniunii Europene pachetul de reglementări în domeniului aeronavelor civile fără pilot la bord, cu masa maximă la decolare mai mare de 150 kg, urmează să fie finalizat până în anul 2016, în timp ce aeronavele civile fără pilot la bord, cu masa maximă la decolare mai mică de 150 kg, rămân sub incidența reglementărilor naționale emise de statele membre ale Uniunii Europene, pentru a permite operarea în spațiul aerian național a aeronavelor civile motorizate fără pilot la bord, până la emiterea pachetului de reglementări europene și naționale specifice care să acopere atât domeniul certificării, cât și domeniul operării acestor aeronave, în temeiul prevederilor art. 4 lit. b.) și f.) din Ordonanța Guvernului nr. 29/1997 privind Codul aerian civil, republicată, cu modificările și completările ulterioare, și ale art. 5 alin. (4) din Hotărârea Guvernului nr. 24/2013 privind organizarea și funcționarea Ministerului Transporturilor, cu modificările și completările ulterioare, ministrul transporturilor emite următorul ordin:
Art. 1.
Operarea aeronavelor civile motorizate fără pilot la bord în spațiul aerian național este permisă numai în zone de spațiu aerian segregat temporar, înființate, alocate și activate conform reglementărilor aplicabile în vigoare.
Zonele prevăzute la alin. (1) se stabilesc în întregime în spațiul aerian de clasă G, iar limita verticală superioară a acestora trebuie să fie cu cel puțin 150 m sub limita minimă a spațiului aerian controlat.
Cererea pentru înființarea zonei prevăzute la alin. (1) se transmite de către operatorul aeronavei Autorității Aeronautice Civile Române cu cel puțin 45 de zile înainte de data prevăzută pentru începerea activității. Modelul cererii și informații privind documentele-suport care trebuie anexate acesteia se publică pe pagina proprie de internet a Autorității Aeronautice Civile Române http://www.caa.ro.
Alocarea și activarea zonelor prevăzute la alin. (1) se efectuează în conformitate cu reglementările aeronautice aplicabile.
Art. 2.
În sensul prezentului ordin, termenii și expresiile de mai jos au următoarele semnificații:
a.) operator al aeronavei – persoană fizică sau juridică care efectuează operațiuni aeriene cu o aeronavă civilă motorizată fără pilot la bord și care solicită în acest scop înființarea unei zone de spațiu aerian segregat temporar conform prevederilor prezentului ordin;
b.) spațiu aerian de clasă G – zonă delimitată de spațiu aerian în care nu sunt furnizate servicii de control al traficului aerian.
Art. 3.
O aeronavă civilă motorizată fără pilot la bord și cu masa maximă la decolare mai mare de 150 kg poate fi operată în spațiul aerian național, în condițiile respectării cerinței prevăzute la art. 1 alin. (1) și (2), numai dacă sunt îndeplinite cumulativ următoarele condiții:
a.) deține un certificat de înmatriculare;
b.) deține un certificat de tip și un certificat de navigabilitate, conform cu reglementările europene emise în aplicarea Regulamentului (CE) nr. 216/2008 al Parlamentului European și al Consiliului din 20 februarie 2008 privind normele comune în domeniul aviației civile și instituirea unei Agenții Europene de Siguranță a Aviației și de abrogare a Directivei 91/670/CEE a Consiliului, a Regulamentului (CE) nr. 1.592/2002 și a Directivei 2004/36/CE;
c.) operatorul aeronavei este certificat, după caz, în funcție de operațiunile aeriene civile desfășurate, în conformitate cu reglementările aeronautice aplicabile emise la nivel național sau cu cele emise la nivelul Uniunii Europene;
d.) aeronava este asigurată, conform legii, pentru daune produse terților.
Art. 4.
O aeronavă civilă motorizată fără pilot la bord și cu masa maximă la decolare mai mică sau egală cu 150 kg poate fi operată în spațiul aerian național, în condițiile respectării cerinței prevăzute la art. 1 alin. (1) și (2), numai dacă sunt îndeplinite cumulativ următoarele condiții:
a.) deține un certificat de identificare emis de Autoritatea Aeronautică Civilă Română sau un certificat de înmatriculare ori un document echivalent emis de alt stat;
b.) în cazul în care aeronava are o masă maximă la decolare mai mare de 15 kg, deține un permis de zbor național emis de Autoritatea Aeronautică Civilă Română sau un document de certificare tehnică echivalent emis de alt stat, recunoscut de Autoritatea Aeronautică Civilă Română;
c.) aeronava este asigurată, după caz, conform legii, pentru daune produse terților.
Art. 5.
Nicio prevedere a prezentului ordin nu exonerează operatorul unei aeronave civile motorizate fără pilot la bord de obligația respectării prevederilor Hotărârii Guvernului nr. 912/2010 pentru aprobarea procedurii de autorizare a zborurilor în spațiul aerian național, precum și a condițiilor în care decolarea și aterizarea aeronavelor civile se pot efectua și de pe/pe alte terenuri sau suprafețe de apă decât aerodromurile certificate, cu modificările și completările ulterioare, atunci când efectuează operațiuni aeriene civile în spațiul aerian național.
Prezentul ordin nu se aplică:
a.) aeromodelelor, așa cum acestea sunt definite și clasificate de către Federația Internațională de Aeromodelism și de către Federația Română de Modelism, atunci când sunt utilizate în cadrul competițiilor, demonstrațiilor aeriene sau al altor manifestații oficiale organizate de Federația Română de Modelism;
b.) aeronavelor civile motorizate fără pilot la bord și cu masa maximă la decolare mai mică sau egală cu 1 kg, atât timp cât
– sunt operate într-o zonă deschisă, fără construcții cu destinația de locuință;
– sunt operate fără depășirea câmpului vizual al persoanei care asigură comanda aeronavei de la sol, dar nu mai mult de 150 m distanță pe orizontală și de 100 m distanță pe înălțime față de această persoană;
– nu au montate pe ele aparatură pentru filmare sau transmisie de date.
Răspunderea pentru eventuale daune provocate ca urmare a operării aeromodelelor și aeronavelor prevăzute la alin. (2) revine în totalitate persoanelor care asigură comanda acestora de la sol.
Art. 6.
În termen de 30 de zile de la intrarea în vigoare a prezentului ordin, Autoritatea Aeronautică Civilă Română publică pe propria pagină de internet, http://www.caa.ro, documentele și informațiile prevăzute la art. 1 alin. (3).
Până la data de 30 iunie 2015, Autoritatea Aeronautică Civilă Română va elabora și va supune aprobării ministrului transporturilor proiectele reglementărilor aeronautice civile naționale privind operarea în spațiul aerian național a aeronavelor civile motorizate fără pilot la bord și care au masa maximă la decolare mai mică sau egală cu 150 kg.
Art. 7.
Prezentul ordin se publică în Monitorul Oficial al României, Partea I, și intră în vigoare la 30 de zile de la data publicării.
Art. 8.
Prezentul ordin se aplică până la data de 30 ianuarie 2016.
CAPITOLUL V
DESCRIEREA APLICAȚIEI: CONTROLUL UNEI DRONE PRIN BLUETOTH
5.1 PREZENTAREA GENERALĂ A APLICAȚIEI
Prezint astfel macheta realizată practic, de control a unei drone prin bluetooth, pentru a proteja circuitul electronic dar și pentru aspectul vizual.
Figura 5.1 Prezentarea generală a dronei
Figura 5.2 Schemă electrică aplicație
Principalele componente folosite pentru realizarea montajului sunt:
Arduino UNO, model R3;
Driver motoare L298 versiunea 2, tip shield;
Conector Bluetooth Mate Silver pentru Arduino (clasa 2, 10 metri);
Mini-Dronă.
La acestă listă se adaugă elementele auxiliare:
Alimentator extern Arduino, reglabil;
Elemente luminoase tip LED;
Elemente de conexiune – mufe;
Radiator driver de motoare.
Macheta a fost realizată pe o placă din plagaj de dimensiuni: 60 cm x 40 cm, pe care au fost montate elementele precizate mai sus, în următoarea ordine:
Mini – dronă cu elementele de conexiune;
Arduino UNO, model R3;
Driver motoare L298 versiunea 2, tip shield;
Conector Bluetooth Mate Silver pentru Arduino;
Elemente luminoase tip LED, conectate la alimentator extern Arduino, reglabil.
5.2 COMPONENTE HARDWARE
5.2.1. Arduino UNO, model R3
Arduino UNO, are în componență microntrollerul ATmega 168 în care voi încărca codul pentru comanda mini – dronei.
5.3 Placa Arduino Uno văzută de sus
5.4 Spatele plăcii Arduino Uno
5.5 Placa Arduino Uno văzută din față
5.6 Placa Arduino Uno și Shield-ul de motoare L298N
În placa Arduino se va conecta driverul de motoare de tip shield, având rolul de a transmite funcțiile de control pentru motoarele mini – dronei.
5.2.2. Shield driver de motoare L298N
Prezint descrierea driverului de motoare L298N.
Figura 5.7 Driver de motoare văzut de sus
Figura 5.8 Driver de motoare văzut din față
Figura 5.9 Driver de motoare cu radiator văzut de sus
Driverul de motoare L298N incorporează 2 punți H intr-un singur pachet de 15 pini, așa cum este prezentat în imaginile următoare :
Figura 5.10 Driverul de motoare L298N
Figura 5.11 Schemă electrică Driver de motoare L298N
Schema următoare prezintă cum este controlat un astfel de modul. 6 biți sunt folosiți pentru a controla cele două motoare. 4 biți determină direcția motoarelor și 2 biți determină starea motoarelor (pornit/oprit). 1 bit este folosit pentru voltajul de referință, alt bit pentru alimentarea motoarelor. Incă 4 biți sunt folosiți pentru conexiunea motoarelor, iar restul de 3 biți sunt GND.
Driverul L298N constă în 4 amplificatoare operaționale, folosite în pereche două câte două pentru a modifica polaritatea și pentru a controla motoarele .
Trebuie menționat că un dezavantaj al acestei unități este lipsa protecției la spikuri de voltaj. Pentru aceasta, pe placă au fost folosite 8 diode Schotky 1N5819, câte 4 pentru fiecare motor.
Viteza de rotație a motoarelor este controlată prin PWM, așa cum este explicat în capitolul următor.
Valorile maxime absolute ce se pot aplica acestei unități sunt:
Tabel 5.1
Figura 5.12 Schemă electrică Punte H Driver de motoare L298N
Funcțiile pinilor sunt explicate în tabelul următor:
Tabel 5.2
Conectarea și controlul motoarelor se realizează astfel:
Figura 5.13 Schemă electrică control motoare
Tabel 5.3
5.2.3. Modulul Bluetooth RN-42
Figura 5.14 Modul Bluetooth RN-42 văzut din lateral
Figura 5.15 Modul Bluetooth RN-42 văzut de sus
Figura 5.16 Spatele Modulului Bluetooth RN-42
Acest model de modem Bluetooth funcționează excelent și este foarte ușor de utilizat, datele scrise pe pinii RX/TX sunt disponibile la receptor. Din acest punct de vedere se poate considera ca și cum pinii RX/TX sunt conectați prin fire obișnuite între emițător și receptor.
Modemul dispune de un modul de clasă 2 RN-42 și are regulatoare de tensiune pe placă, astfel încât poate fi alimentat între 3.3V și 6 V.
Specificații:
– modem Bluetooth clasa 2;
– 10-20 metri distanță de transmisie;
– consum mediu 25 mA;
– 4 dBm ieșirea transmițătorului;
– 80 dBm sensivitate pentru recepție;
– conexiune sigură, criptare 128 biți;
– frecvență 2402~2480 MHz;
– modulare FHS/GFSK : 79 de canale la intervale de 1MHz;
– tensiune de alimentare 3.3 – 6 V;
– rată de transfer între 2400-115200 bps;
– antena inclusă pe placă;
– auto-descoperire/conectare;
Dispozitivul a fost configurat cu rata de transfer de 115200 bps.
Modulul bluetooth este conectat la placa Arduino prin shield-ul de motoare având următoarele conexiuni:
Pentru alimentare VCC la VCC-ul lui Arduino;
GND-GND a lui Arduino;
RTS-0 și CTS-1sunt conectați în scurt;
TX la RX a lui Arduino;
RX la TX a lui Arduino;
Configurația pinilor acestui modem este prezentată în imaginea următoare:
Figura 5.17 Schemă electrică Modul Bluetooth RN-42
Figura 5.18 Schemă electrică Modul Bluetooth RN-42
5.2.4.Comunicația Bluetooth RN-42
“Bluetooth” este o tehnologie wireless pentru schimb de date pe distanțe mici, între dispozitive fixe sau mobile, folosind unde radio criptate, în banda ISM, între 2400 și 2480 MHz, prin crearea unei rețele personale (PAN-Personal Area Network) cu grad ridicat de securitate. A fost creată în anul 1994, de către compania de telefonie mobilă Ericsson și a fost inițial concepută ca o alternativă wireless pentru cablurile seriale RS-232.
Figura 5.19 Emblema Bluetooth
Cu ajutorul unei rețele de tip Bluetooth se poate face schimb de informații între dispozitive electronice ce au implementată această tehnologie, precum laptopuri, calculatoare personale, telefoane mobile, camere foto/video, imprimante.
Bluetooth este un protocol standard de înlocuire a comunicației prin fir proiectat pentru consum mic de putere și pe distanțe mici, care depind de clasa de putere, așa cum e prezentat în tabelul de mai jos:
Tabel 5.4
Raza efectică depinde de condițiile de propagare, configurarea antenei, baterie și alte influențe. De obicei, raza de comunicație a unui aparat înzestrat cu un modul de clasă 2 poate fi mărită atunci când comunică cu un aparat cu modul de clasă 1, prin mărirea sensibilității dispozitivului de clasă 1.
Versiuni :
Bluetooth v1.0 și v1.0B
aceste versiuni au avut multe probleme tehnice și producătorii au avut mari probleme pentru a face dispozitivele interconectabile;
Bluetooth v1.1
ratificat ca standard IEEE 802,15,1-2002 ;
au fost corectate multe erori;
a fost adăugat un indicator al puterii semnalului;
a fost adăugată posibilitatea de folosire a canalelor necriptate;
Bluetooth v1.2
conexiune mai rapidă;
descoperire mai rapidă;
a fost mărită viteza de transmisie, până la 721 kbit/s;
Bluetooth v2.0
implementată în 2004;
viteză de transmisie de până la 3 ori mai mare, teoretic de 3,2Mbps, dar rata de transfer efectivă de 2,1 Mbit/s;
consum de energie mai mic, aproape la jumătate;
rata erorilor de transmisie mult mai scăzută;
Bluetooth v2.1
implementată în 2007;
securitate mai simplu de implementat, dar mai eficientă;
îmbunătățirea legăturii între dispozitive;
reducerea consumului;
Bluetooth v3.0
implementată în 2009;
viteză de transmisie mult mărită, de până la 24Mbit/s;
Bluetooth v4.0
implementată în iunie 2010;
consum de energie redus;
reducerea costurilor de fabricare;
securitate îmbunătățită;
Pentru a evita interferența cu alte protocoale ce folosesc banda 2.45GHz, protocolul Bluetooth divide banda în 79 de canele, fiecare având 1MHz și schimbă canalele, în medie, de 800 de ori pe secundă.
Figura 5.20 Logo-ul Bluetooth
5.3 Aplicații
5.3.1 Amarino
Amarino este un toolkit dezvoltat pentru smartphonuri bazate pe sistemul de operare Android.
Acest pachet include o aplicație Android și o bibliotecă ce se atașează softului Arduino, cu ajutorul căruia se programează microcontrollerul ATmega168, așa cum este descris în capitolul următor.
Amarino este constituit practic din 3 mari părți:
aplicația pentru telefon – ”Amarino 2.0”
biblioteca pentru Arduino – ”MeetAndroid”
o bibliotecă de evenimente pentru aplicația Android – ”Amarino Plug-in Bundle”
Pentru interconectarea telefonului cu circuitul din mașină, se urmăresc următorii pași:
1. Se intalează aplicația ”Amarino” în telefon
2. Se deschide aplicația ”Amarino”
Figura 5.21 Aplicatia Amarino 2.0
Figura 5.22 Adăugarea modulului Bluetooth RN-42
5.3.2 Android BluetoothDronă
Am realizat aceasta aplicatie in mediul de programare Eclipse Juno având rolul de a comanda turațiile motoarelor și direcția de mișcare a mini-dronei.
Pentru a porni aplicația apăsăm pe BluetoothDronă.
Figura 5.23 Aplicația BluetoothDronă
Figura 5.24 Conectarea aplicației la modulul Bluetooth RN-42
Figura 5.25 Nu sunt conexiuni active
Figura 5.26 Conexiunea la arduino a eșuat
In imaginea de mai sus este prezentată încercarea de conexiune al modului Bluetooth RN-42 cu adresa de mac specifică.
Pentru crearea aplicației a fost nevoie de adăugarea de librării specifice fiecărei componente:
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
Libraria widget este folosită pentru skeebar-uri având rolul de a seta direcția de mers, turația motoarelor și intensitatea ledului. Codul folosit pentru butoanele de comandă este următorul:
private void updateRed(){
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'o', red);
Trimite comanda către arduino în funcție de cum este deplasat butonul de față-spate.
}
private void updateGreen(){
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'p', green);
Trimite comanda către arduino în funcție de cum este deplasat butonul pentru deplasare sau staționare.
}
private void updateBlue(){
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'q', blue);
Trimite comanda către arduino pentru a varia tensiunea ledului și implicit intensitatea luminoasă a acestuia.
}
import at.abraxas.amarino.Amarino;
Libraria amarino este folosita pentru comunicația între aplicația android și placa arduino.
private static final String DEVICE_ADDRESS = "00:06:66:71:54:AE"; // TOROBOT
final int DELAY = 150;
SeekBar redSB;
SeekBar greenSB;
SeekBar blueSB;
//View colorIndicator;
int red, green, blue;
long lastChange;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Amarino.connect(this, DEVICE_ADDRESS);
// get references to views defined in our main.xml layout file
redSB = (SeekBar) findViewById(R.id.SeekBarRed);
greenSB = (SeekBar) findViewById(R.id.SeekBarGreen);
blueSB = (SeekBar) findViewById(R.id.SeekBarBlue);
//colorIndicator = findViewById(R.id.ColorIndicator);
// register listeners
redSB.setOnSeekBarChangeListener(this);
greenSB.setOnSeekBarChangeListener(this);
blueSB.setOnSeekBarChangeListener(this);
}
@Override
protected void onStart() {
super.onStart();
// load last state
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
red = prefs.getInt("red", 0);
green = prefs.getInt("green", 0);
blue = prefs.getInt("blue", 0);
// set seekbars and feedback color according to last state
redSB.setProgress(red);
greenSB.setProgress(green);
blueSB.setProgress(blue);
//colorIndicator.setBackgroundColor(Color.rgb(red, green, blue));
new Thread(){
public void run(){
try {
Thread.sleep(6000);
} catch (InterruptedException e) {}
Log.d(TAG, "update colors");
updateAllColors();
}
}.start();
}
@Override
protected void onStop() {
super.onStop();
// save state
PreferenceManager.getDefaultSharedPreferences(this)
.edit()
.putInt("red", red)
.putInt("green", green)
.putInt("blue", blue)
.commit();
// stop Amarino's background service, we don't need it any more
Amarino.disconnect(this, DEVICE_ADDRESS);
}
In codul prezentat mai sus avem setarea adresei mac a modulului bluetooth RN-42 și etapele de inițializare pentru aplicație, conectarea la modul, activarea bluetooth-ului telefonului, activarea butoanelor de comandă în ultima lor poziție și oprirea aplicației prin deconectarea de la modulul bluetooth.
Pentru conectarea la arduino BluetoothDrona folosește în spate aplicația Amarino instalată pe telefonul cu android având rolul de a realiza transferul de date între aplicația android și arduino.
5.3.3 Sketch-ul BluetoothDronă
Figura 5.27 Sketch-ul pentru codul Arduino
In codul următor voi prezenta funcțiile care execută comenzile de control a dronei.
Codul pentru control fata:
if (speedValue) {
ValM1 = 100;
digitalWrite(PoM1, LOW); // Fata
analogWrite(PWM1, ValM1);
Codul pentru control spate:
else if (speedValue) {
ValM2 = 200;
digitalWrite(PoM2, HIGH); // Spate
analogWrite(PWM2, ValM2);
Codul control stat :
if (dirValue) {
ValM1 = 20;
ValM2 = 200;
digitalWrite(PoM1, HIGH); // Stat
digitalWrite(PoM2, HIGH);
analogWrite(PWM1, ValM1);
analogWrite(PWM2, ValM2);
Codul pentru control deplasare :
else if (dirValue ) {
ValM1 = 100;
ValM2 = 200;
digitalWrite(PoM1, HIGH); // Deplasare
digitalWrite(PoM2, HIGH);
analogWrite(PWM1, ValM1);
analogWrite(PWM2, ValM2);
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: Controlul Unei Drone Prin Bluetooth (ID: 138485)
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.
