Bike Security. Sistem de Urmarire a Bicicletelor

Cuprins

Lista de figuri

Lista de tabele

Capitolul 1. Introducere

Partea 1. Aspecte teoretice

Capitolul 2. Dezvoltarea microcontrollerelor

2.1. Exemplu de microcontroller – Atmega328.

Capitolul 3. Sisteme de poziționara globală

3.1. Prezentare generală a GPS-ului

3.2. Detalii referitoare la GPS

3.3. Sisteme de timp

Capitolul 4. Sistem Global de Comunicații Mobile.

4.1. Scurt istoric al GSM-ului.

4.2. Prezentare generală a GSM-ului

Partea 2. Implemetarea soluției

Capitolul 5. Implementarea Hardware și Software

5.1.Implementarea Hardware

5.2.Implementarea Software

Capitolul 6. Concluzii

Anexa A

Anexa B

Anexa C

Anexa D

Anexa E

Bibliografie

Lista de figuri

Fig.1.1 Dispozitiv-ul complet

Fig.2.1. Structura internă a microcontrollerului ATmega328

Fig.3.1. Constelația GPS

Fig.3.2. Segmente GPS

Fig.3.4. Schema simplificată de triangulație pentru GPS

Fig.3.5. Principiul de determinare a poziției în GPS

Fig.3.6. O undă sinusoidală și un cod digital

Fig.4.1. Arhitectura unei rețele GSM

Fig.4.2. Transmiterea datelor pe canale

Fig.4.3. Transmiterea mesajelor în PLMN

Fig.5.1. Dispozitiv complet montat și funcțional

Fig. 5.2.Placa Arduino UNO

Fig.5.3. GPS Shield cu modul GPS împreuna pe o placă Arduino

Fig.5.3.1.Schema de conectare a modulului EM406

Fig.5.3.2.Schema intrariilor si ieșiriilor a GPS Shield-ului

Fig.5.3.3.Comandarea porturilor de comunicare cu placa Arduino

Fig.5.4. GSM Shield

Fig.A.Schema electronică a modulului Arduino UNO

Fig.B.Schema electronică a microcontrollerului ZIC1 de tip ATmega328.

Fig.C.Schema electronică a microcontrollerului U3 de tip ATmega8U2.

Fig.D.Schema electronică a GSM Shield-ului

Lista de tabele

Tabela 1:Caracteristici Arduino

CAPITOLUL 1.

Introducere

Identificarea unei probleme, dezvoltarea unei soluții și rezolvarea problemei este ceea ce face mereu un bun inginer. Astfel, această lucrare are ca scop rezolvarea unei probleme aparent minore dar frecvent întâlnite și anume dispatiția bicicletelor și frecvența redusă de recuperare a lor. Pe parcursul perioadei de studiu în cadrul Universității Ioan Slavici din Timisoara de nenumărate ori i-am auzit pe colegii mei și pe cadrele didactice plângându-se de dispariția bicicletelor lăsate pe rastelul amenajat în cadrul perimetrului Universității. După îndelungate căutări, bicicletele tot nu au fost găsite și nici hoții pedepsiti. Pentru rezolvarea unor asemenea situații, am identificat necesitatea dezvoltării unui dispozitiv pentru urmărire continuă a bicicletelor, construit din mai multe componente interconectabile. Prin realizarea acestui dispozitiv se obțin două rezultate importante și anume: asigurarea securității bicicletei și identificarea făptașului. Dispozitivul pentru urmărirea continua a bicicletei creat ajută la găsirea bicicletei prin localizarea exactă a acestei în timp real. Dispozitivul construit este de un real ajutor în urmărirea și găsirea faptașilor, dar poate fi la fel de bine utlizat ca un sistem de urmărire a traseelor parcurse în ultima săptămână și de monitorizare a vitezelor cu care s-a rulat pe aceste trasee.

Sistemul de urmărire mobil propus prin această lucrare este un design “multilayer” compus din 3 module funcționale distincte:

Sistemul “Arduino”, cu 2 microcontrollere din familia Atmega328, care gestionează recepția datelor de la GPS și transmiterea lor la GSM.

Sistemul GSM, cu modul de tip GE863, produs de firma Telit.

Sistemul de recepție GPS, cu modul de tip EM406A, produs de firma Global Sat.

Din punct de verdere istoric microcontrollerele au aparul acum aproximativ 30 de ani, având o mult mai scurtă istorie decat cea a microprocesoarelor, pentru ele au fost îmbunătățite capacitățiile de achiziție de date și aplicații de monitorizare și control, în special abilitățiile de aplicații în timp real. Arduino UNO utilizată în acest proiect este o placă de dezvoltare bazată pe microcontrollerul ATmega328. Placa Arduino dovedește capacitatea sa adaptivă așa cum a fost destinată de către dezvoltatorii săi pentru că este ușor de utilizat prin open source, și are o lagă utilizare.

Trăim într-o lume a telecomunicației, telefonia mobilă este astăzi într-o continuă evoluție atât calitativă, prin serviciile oferite, bazate pe Internet și GPS, cât și cantitativă, prin creșterea exponențială a numărului de abonați. Evoluția sistemelor de telecomunicații este marcată de cercetările și invenția suedezului Lars Magnus Ericsson, a cercetătorilor de la Laboratoarele Bell, care în 1947 au ideea construcției unor celule hexagonale ca relee pentru telefoanele mobile. În anul 1971 se lansează în Finlanda rețeaua publică de telefonie mobilă ARP considerată ca fiind de generație zero. Serviciu analog util până în 1990 este înlocuit cu cel digital. La începutul anilor '90 se lansează a doua generație (2G), bazată pe sistemele GSM (Global System for Mobile Communication), IS-116 ("TDMA"), IS-95 ("CDMA"), iDEN și PDC. “Sistemul global de comunicații mobile, tehnologia digitală de generația a doua (G2), a fost dezvoltată inițial pentru Europa, dar care are acum peste 71 la sută din piața mondială. Inițial a fost elaborat pentru operarea în banda de 900 MHz și, ulterior, modificat pentru benzile de 850, 1800 și 1900MHz. Acronimul GSM inițial a fost dedicat pentru Groupe Speciale Mobile, comitetul CEPT care a început procesul de standardizare GSM”. În 1991, primele sisteme GSM se găseau în proceduri avansate de testare, iar acronimul GSM a primit o nouă semnificație: Global System for Mobile communications”. A treia generație (G3) a fost lansată în 2001 în Japonia iar în 2002 în Statele Unite, Coreea de Sud apoi în Italia și Marea Britanie ofernid utilizatorilor o viteză mai mare și o calitate și diversitate a serviciilor din ce în ce mai mare. În fază de testare generația a patra (G4) va oferi transmisiuni multimedia executate în mod “streaming media” cu o mare fidelitate de transmitere.

Sistemul de poziționare globală (Global Positioning System, GPS) este un sistem de navigație prin satelit, dezvoltat de Departamentul pentru Apărare (Department Of Defense, DOD) la începutul anilor 1970. Inițial GPS-ul a fost dezvoltat ca și un sistem strict militar. Cu toate acestea a fost pus și la dispoziția civililor mai târziu, iar în prezent este folosit atât de către civili cât și în aplicațiile militare. GPS-ul asigur în mod continuu informații cu privire la timp și la poziționare, oriunde în lume și în aproape orice condiții meteorologice.

Partea Software a fost realizată în mediul de ezvoltare al plăcii Arduino IDE-ul este o interfață peste gcc-avr, IDE-ul se folosește pentru a deschide și modifica programele sursă care se doresc a fi folosite pentru placă.

Punerea în ansamblu a sistemelor GSM, GPS și Arduino într-un tot unitar, funcțional si integrat a determinat obținerea acestui dispozitiv pentru urmărire continuă a biciletelor cu rezultate promițătoare în aplicații practice viitoare.

Partea 1.

Aspecte teoretice

Capitolul 2.

Dezvoltarea microcontrollerelor

„Microcontrollerul se poate defini ca fiind un circuit logic, programabil de către utilizator, cu o structură adaptabilă pentru rezolvarea unei game largi de aplicații de timp real. El nu este folosit ca procesor de uz general ci ca procesor orientat pe aplicații, fiind, în general, inclus în echipamentul pe care îl conduce.” În timp, microcontrollerele au purtat diferite nume, precum „Microncalculatoare pe un singur cip” sau „Embedded controllers”. Cel de-al doilea nume sugerează însă un domeniu mai redus de aplicabilitate decât cel de microcontroller.

Din punct de verdere istoric microntrolerele au aparul acum aproximativ 30 de ani, având o mult mai scurtă istorie decat cea a microprocesoarelor. Primul micorprocesor de un singur chip a fost un Intel 4004 lansat în 1971, primul computer sistem on a chip a fost Intel 8048, lansat în 1975, care a fost integrat în peste un milliard de tastaturi și în numeroase alte aplicații. Totuși ele au fost dezvoltate odata cu evoluția microprocesoarelor. Există microcontrollere pe 4, 8, 16, 32 și chiar 64 de biți produse de firme cum sunt: ARM, Atmel, Hitachi, Microchip, Motorola, Philips, Siemens, Toshiba, Zilog. De asemenea există familii de microncontrolere cu același nucleu, cum este de exemplu familia cu nucleul 8051. Dezvoltarea microcontrollerelor a pus accent pe alte aspecte decat cea a microprocesoarelor. In cazul microprocesoarelor sa accentuat pe creșterea vitezei, a capacității de memorare, înglobarea unor funcționalități pentru facilitarea lucrului cu limbaje de nivel înalt, în special pentru aplicații de uz general. Pe când în cazul microcontrollerelor au fost îmbunătățite capacitățiile de achiziție de date și aplicații de monitorizare și control, în special abilitățiile de aplicații în timp real.

2.1. Exemplu de microcontroller – Atmega328

Un exemplu de arhitectură este prezentata în Fig. 2.1, care reprezintă structura internă a unui microcontroller ATmega328 cu nucleu AVR construit de către ATMEL, un microcontroller de timp RISC (Reduced instruction set computing).

Acest microcontroller are următoarele caracteristici:

include 1K bytes memorie EEPROM, 32K bytes de memorie Flash și 2K bytes memorie SRAM,

include 32 de regiștri de uz general,

are 23 porturi de intrare/ ieșire care pot fi utilizate ca porturi de uz general,

poate adresa 64 Ko memorie externă de program și 64 Ko memorie externă de date,

are 3 contoare/temporizatoare, cu mod de comparare,

are înmulțitoare de 2 cicluri on-chip,

include un port serial USART programabil,

are o interfață serială orientată spre byte,

conține un ADC pe 6 canale de 10 biti,

include o unitate aritmetică și logică,

poate gestiona surse de întreruperi, externe și interne,

conține un generator propriu de tact.

Fig. 2.1. Structura internă a microcontrollerului ATmega328

Capitolul 3.

Sisteme de poziționare globală

Sistemul de poziționare globală (Global Positioning System, GPS) este un sistem de navigație prin satelit, dezvoltat de Departamentul pentru Apărare (Department Of Defense, DOD) la începutul anilor 1970. Inițial GPS-ul a fost dezvoltat ca și un sistem strict militar. Cu toate acestea a fost pus și la dispoziția civililor mai târziu, iar în prezent este folosit atât de către civili cât și în aplicațiile militare. GPS-ul asigur în mod continuu informații cu privire la timp și la poziționare, oriunde în lume și în aproape orice condiții meteorologice. Din diferite motive, printre care se poate menționa numărul foarte mare de utilizatori simultani cât și cerințele de securitate, GPS-ul este un sistem unidirectional (pasiv). Aceasta înseamnă că utilizatorii pot doar să primească semnale de la statelit, nu să și trimită. În cele ce urmează voi prezenta pe scurt idei de bază privind GPS-ul, componentele sale și sistemul în ansamblul sau.

3.1. Prezentare generală a GPS-ului

GPS-ul format dintr-o constelație de 24 de sateliti operaționali. Această constelație este cunoscută sub denumirea de Capabilitate Operațională Inițială (IOC, Initial Operational Capability) și a fost finalizată în iulie 1993. Anunțul oficial asupra IOC a fost făcut în 8 decembrie 1993. Pentru a asigura acoperire continuă la nivelul globului, stateliții sunt aranjați astfel încât patru sateliți sunt plasați în fiecare dintre cele șase plane orbitale (Fig.3.1). Cu această geometrie a constelației, în orice moment, oriunde pe glob, vor fi vizibili, patru până la zece sateliți (dacă luăm în considerare o elevație de minim100). După cum se va vedea în cele ce urmează sunt suficienți doar patru sateliți pentru a furniza informații de poziționare. Orbitele GPS sunt aproape circulare (cu o forma eliptică având excentricitatea de maxim 0,01%) și o înclinație de 550. Semiaxele mari ale orbitei GPS sunt de aproximativ 26.560 Această constelație este cunoscută sub denumirea de Capabilitate Operațională Inițială (IOC, Initial Operational Capability) și a fost finalizată în iulie 1993. Anunțul oficial asupra IOC a fost făcut în 8 decembrie 1993. Pentru a asigura acoperire continuă la nivelul globului, stateliții sunt aranjați astfel încât patru sateliți sunt plasați în fiecare dintre cele șase plane orbitale (Fig.3.1). Cu această geometrie a constelației, în orice moment, oriunde pe glob, vor fi vizibili, patru până la zece sateliți (dacă luăm în considerare o elevație de minim100). După cum se va vedea în cele ce urmează sunt suficienți doar patru sateliți pentru a furniza informații de poziționare. Orbitele GPS sunt aproape circulare (cu o forma eliptică având excentricitatea de maxim 0,01%) și o înclinație de 550. Semiaxele mari ale orbitei GPS sunt de aproximativ 26.560 km (deci aproximativ 20.200km deasupra Pământului). Perioada orbitală este de aproximativ 12 ore siderale (11 ore și 58 de minute). GPS a fost declarat oficial complet funcționalal (FOC, Full Operational Capability) în 17 iulie 1995, ceea ce înseamnă că din 1995 întotdeauna există cel puțin 24 de sateliți operaționali, neexperimentali. De fapt, dupa FOC, GPS-ul a avut întotdeauna mai mult de 24 de sateliți operaționali.

3.1.1. Segmentele GPS.

GPS constă din trei segmente interconectate: cel spațial, cel de control ăi cel de utilizator. Segmentul spațial este format din cei 24 de sateliți prezentați anterior. Fiecare satelit GPS trimite un semnal care are mai multe elemente: două semnale sinusoidale (cu rol de purtătoare), două coduri digitale și un mesaj de navigare. Codurile și mesajul de navigare modulează purtătoarele sub forma unor modulații alterntive. Purtătoarele și codurile sunt folosite mai ales pentru a determina distanța de la receptorul de utilizator până la satelit. Mesajul de navigare conține, alături de alte informații, coordonatele (locația) sateliților ca și funcție de timp. Semnalele transmise sunt controlate de ceasuri atomice, foarte precise, afiate la bordul sateliților.

Voi prezenta în continuare structura semnalului GPS. Segmentul de control constă dintr-o rețea globală de stații terestre de urmărire, cu o stație principală (MCS, Master Control Station) aflată în Statele Unite, în Colorado Springs. Sarcina principală a stațiilor terestre este de a urmări sateliții GPS pentru a determina cu precizie poziția acestora, a verifica integritatea sistemului și a referințelor de timp, caracteristicile atmosferice etc. Toate aceste informații, care constitue variabile de care trebuie ținut cont, sunt transmise satelitului printr-o legătură de tip uplink, în bandă S. Segmentul utilizator este compus din toți utilizatorii civili și militari. Folosind un receptor GPS, conectat la o antenă, un utilizator poate recepționa semnalele GPS, care sunt folosite pentru a determina poziția. În prezent GPS-ul este disponibil utilizatorilor din întreaga lume, fără nici un fel de costuri. În Fig. 3.2 se prezintă cele trei segmente ale GPS și relația dintre acestea.

Fig. 3.1. Constelația GPS

3.1.2. Constelația GPS actuală.

În prezent constelația GPS conține cinci sateliți de tipul II, optsprezece de tipul IIA și șase de tipul IIR, ceea ce totalizează 29 de sateliți operaționali. Cele șase orbite sunt notate de la A la F. Din moment ce avem mai mult de 24 de sateliți (6 orbite cu câte 4 sateliți pe orbită), o orbita poate conține chiar și cinci sateliți. De fapt, toate planele orbitale conțin câte cinci sateliți cu excepția orbitei C care are doar patru. Pentru identificarea sateliților se folosește numărul SVN (Space Vehicle Number) și PRN (Pseudorandom noise). Sateliții de tipul II/IIA sunt echipați cu patru ceasuri atomice: doua cu Cesiu (Cs) și două cu Rubidiu (Rb). Sursa primară de timp este dată de ceasurile cu Cesiu. Sateliții de tipul IIR folosesc doar ceasuri cu Rubidiu. Este de remarcat că doi dintre sateliții actuali, PRN05 și PRN06, sunt echipați cu reflectori optici pentru a fi urmăriți prin laser.

3.1.3. Punctele de comandă și control.

Centrul de comandă se află la Colorado Springs, în SUA și este prevăzut cu personal uman permanent. De asemenea, mai există cinci stații de monitorizare localizate în Colorado Springs, Hawai, Kwajelein, Diego Garcia și pe insula Ascension ale căror coordonate sunt cunoscute extrem de precis. O dispunere a acestora se poate vedea în Fig.3.3. Fiecare stație de monitorizare este echipată cu un receptor GPS de calitate și o referință de timp bazată pe un oscilator cu Cesiu și are drept scop urmărirea și monitorizarea tuturor sateliților aflați în aria de vizibilitate. Trei dintre stațiile de monitorizare (Kwajalein, Diego Garcia și Ascension) sunt dotate cu antene care permit upload-ul informațiilor către satelit. Toate stațiile de control sunt automate și controlate de către MCS. Datele culese sunt trimise la MCS. Rezultatul prelucrării este traiectoria prezisă a satelitului, parametrii ceasului etc. Aceste date sunt transmise uneia dintre cele trei stații de la sol, prevăzute cu posibilități de emisie, pentru a fi încărcate pe satelit printr-o legatură în banda S. Monitorizarea integrității sistemului GPS este una dintre sarcinile MCS. Există posibilitatea de a seta starea semnalului emis de satelit la o valoare considerată unhealthy pe parcursul unor operații de mentenanță sau în cazul apariției unor defecțiuni. Starea satelitului este transmisă și poate fi receptionată de echipametele utilizator. Operațiile de întreținere planificate sunt accesibile printr-un mesaj numit Notice Advisory to Navstar Users (NANU)

3.1.4. GPS: Ideea de bază.

Ideea din spatele GPS-ului este simplă. Dacă distanța de la un punct de pe Pământ (receptorul GPS) până la trei sateliți GPS este cunoscută, împreună cu pozițiile sateliților, atunci locația punctului (receptorul) poate fi determinată prin metoda rejecției. Aceasta este tot din punct de vedere teoretic. Problema este cum putem afla distanța până la sateliți împreună cu poziția lor exactă?

Fig. 3.2. Segmente GPS

După cum am menționat mai înainte, fiecare satelit GPS transmite în mod continuu un semnal în domeniul microundelor, compus din două purtătoare, două coduri și un mesaj de navigare. Atunci când un receptor GPS este pornit acesta va recepționa semnalul GPS prin antenă. Semnalul recepționat va fi procesat în software-ul încorporat. Rezultatul parțial al procesării constă în distanțele până la fiecare dintre sateliți și coordonatele sateliților. Teoretic sunt suficiente doar trei distanțe. În acest caz receptorul s-ar afla la intrersecția a trei sfere: fiecare are raza egală cu distanța receptor-satelit și centrul în acel satelit, Fig. 3.5. Cu toate acestea, în practică se folosește un al patrulea satelit pentru a compensa eroarea de ceas al sateliților. Precizia obținută prin aceast metodă până de curând a fost de 100m pe orizontală, 156m pe verticală și 340ns pentru timp, cu o probabilitate de 95%. Această eroare era produsă deliberat pentru a preîntâmpina utilizarea sistemului pentru aplicații răuvoitoare. În prezent, ca urmare a unui ordin prezidențial care a anulat aceasta “bruiere”, precizia este de aproximativ 22m (cu o probabilitate de 95%). Pentru a îmbunătății această valoare se folosește metoda diferențială, care folosește două receptoare și care monitorizează simultan aceeași sateliți. În acest caz se poate obține un nivel de precizie care poate merge de la câțiva centimetri până la câțiva metri. O altă aplicație a GPS-ului este determinarea vitezei, care se poate face prin mai multe metode. Cea mai răpândită este cea în care se face uz de efectul Doppler, mai exact se calculează frecvența Doppler. Este cunoscut faptul că datorită deplasării relative dintre satelit și receptor apare o deplasare de frecvență. De asemenea GPS-ul poate fi folosit la determinarea atitudinii unui corp rigid, precum ar fi un avion sau vapor. Termenul atitudine desemnează orientarea sau direcția unui corp rigid, care poate fi descrisă prin trei rotații ale celor trei axe ale corpului rigid, relativ la sistemul de referință. Atitudinea se determină echipând corpul cu minim trei receptoare GPS (sau cu unul special, care de fapt le înglobează pe cele trei), legate la trei antene, dispuse necoliniar.

Fig. 3.3. Stații terestre ale GPS

3.1.5. Sistemul de poziționare GPS.

După cum am precizat încă de la început, GPS-ul a fost dezvoltat ca și sistem militar, fiind pus ulterior la dispozița civililor. Cu toate acestea, pentru a menține avantajul de partea militarilor, în Statele Unite, Departamentul pentru Aparare (DoD) furnizează două nivele de servicii GPS: Serviciul de Poziționare Precisă (PPS, Precise Positioning Service) și Serviciul Standard de Poziționare (SPS, Standard Positioning Service). PPS este cel mai precis sistem, e poziționare automomă. Folosește un cod accesibil doar persoanelor/sistemelor autorizate. Precizia este de 16m pe orizontală și 23m pe verticală (cu o probabilitate de 95%). SPS, pe de altă parte este mai puțin precis. Acesta folosește așa-numitul cod C/A care este disponibil în întreaga lume. În prezent precizia SPS-ului se apropie de cea a PPS-ului.

Fig. 3.4. Schema simplificată de triangulație pentru GPS

Fig.3.5. Principiul de determinare a poziției în GPS

3.2. Detalii referitoare la GPS

Poziționarea cu ajutorul GPS-ului necesită o înțelegere a structurii semnalului GPS și a modului în care sunt realizate măsurările. Deoarece receptorul are o importanță foarte mare în acest proces, este importantă înțelegera particularităților care caraterizează echipamentele de acest tip. Mai mult, măsurătorile GPS, ca orice alte măsurători, sunt supuse unor erori, care pot fi reduse sau chiar eliminate prin combinarea mai multor observabile.

3.2.1. Structura semnalului GPS.

După cum s-a menționat deja, sateliții GPS transmit un semnal radio în domeniul microundelor, compus din două frecvențe purtătoare (sinusoidale), modulate de două coduri digitale, numite mesaje de navigare. Cele două semnale au frecvențele de 1575,42 MHz (purtătoarea notată L1) și 1227,60 MHz (purtătoarea L2). Lungimile de undă corespunzătoare sunt de aproximativ 19cm și respectiv 24,4, ceea ce rezultă din relația dintre frecvența purtătoare și viteze luminii în vid:

λ = c/f

Cele două frecvențe purtătore permit corecția unei erori majore al GPS-ului, numită întârziere ionosferică. Toți sateliții transmit aceleași frecvențe purtătoare L1 și L2. Cu toate acestea, codurile modulatoare sunt diferite pentru fiecare satelit, ceea ce are rolul de a minimiza interferențele Cele două coduri GPS sunt numite codul de achiziție brută (codul C/A, Coarse Aquisition Code) și codul de precizie (codul P, Precsin code). Fiecare cod constă dintr-un șir de biți. Codurile sunt numite coduri PRN fiindcă au aspectul unor semnale pseudoaleatoare. Cu toate acestea codurile sunt generate cu ajutorul unui algoritm. Codul C/A este modulat doar în purtătoarea L1, iar codul P este doar în purtătoarea L2. Modulația este numită bifazică, deoarece faza purtătoarei este schimbată cu 1800 la trecerea de la zero la unu și invers. Codul C/A este un flux de 1023 de biți și se repetă la fiecare milisecundă, ceea ce duce la o rată de transfer de 1,023 Mbps. Aceasta duce la concluzia că durata unui bit, în termeni de spațiu, este de aproximativ 300 de metri. Fiecărui satelit îi este asociat un cod C/A unic ceea ce permite receptorului GPS să identifice care satelit transmite un anumit cod. Determinarea poziției cu ajutorul codului C/A este mai puțin precisă decât în cazul folosirii codului P, dar este mai simplă (mai ușor de decodificat) și este disponibilă tuturor utilizatorilor.

Fig. 3.6. O undă sinusoidală și un cod digital

Codul P, pe de altă parte este o secvență foarte lungă de biți care se repetă la fiecare 266 de zile. De asemenea este de zece ori mai rapid decât codul C/A (are o rată de transfer de 10,23 Mbps). Dacă am înmulți durata de repetiție a codului P cu rata sa, obținem că codul P este un flux de 2; 35 x 1014chips. Acest cod cu o lungime de 266 de zile este împărțit în 38 de segmente, fiecare cu o lungime de o săptămână, 32 dintre acestea sunt asignate la diferiți sateliți. Astfel, fiecare satelit transmite un cod P unic timp de o săptămână, shimbarea făcându-se la miezul nopții, sâmbătă spre duminică. Restul de șase segmente sunt rezervate pentru alte utilizări. Este de menționat că un anumit satelit este de multe ori identificat prin segmentul unic, lung de o săptămână. Spre exemplu un identificatorul PRN 20 se referă la satelitul GPS care asignat segmentul din săptămâna a douazecia (din cele 38) de cod P. Codul P este proiectat în special pentru aplicații militare. A fost disponibil tuturor utilizatorilor până în 3 ianuarie 1994. La acea dată codul P a fost criptat cu ajutorul unui cod necunoscut, numit generic codul W. Codul rezultat, criptat, poartă numele de cod Y și are aceeași rată de transmisie cu a codului P. Acest mod de criptare este cunoscut ca având rol de antispoofing (AS).

Mesajul de navigare din GPS este un flux de date adăugat atât purtătoarei L1 cât și L2, prin modulație bifazică la o rată de 50 kbps. Constă din 25 de cadre de câte 1500 de biți fiecare, adică un total de 37500 de biți. Aceasta înseamnă că transmisia completă a unui mesaj de navigare durează 750 de secunde, sau 12,5 minute. Mesajul de navigare, conține alături de alte elemente, coordonatele sateliților GPS ca și funcție de timp, informații despre integritatea sateliților, corecția de ceas, date atmosferice etc. Fiecare satelit transmite propriul mesaj de navigare cu informații depre alți sateliți, cum ar fi locația aproximativă și “starea de sănătate”.

3.3. Sisteme de timp

T Timpul joacă un rol foarte important în poziționarea cu ajutorul GPS-ului. După cum s-a văzut, semnalul GPS este controlat de ceasuri foarte precise, ceasuri atomice montate la bordul sateliților. Pe lângă aceasta, măsurarea distanțelor de la receptor la sateliți se bazează pe ceasuri precise. GPS este de asemenea o foarte bună referință de timp și chiar este folosit pentru sincronizări de timp. O gamă largă de sisteme de timp sunt folosite în lume pentru diferite aplicații. Dintre acestea Timpul Unversal Coordonat (UTC, Universal Time Coordinated) și Timpul GPS sunt cele mai importante pentru utilizatorii GPS. UTC este o bază de timp atomică bazată pe Timpul Atomic Internațional (TAI, Temp Atomique Internatunal). TAI este o scară de timp uniformă care este calculată pe baza unor scări de timp generate de ceasuri atomice localizate în laboratoare din întreaga lume. În cartografie și navigație este de dorit un sistem de timp legat de rotație Pământului și nu unul atomic. Această sincronizare se realizează prin ajustarea ocazională a timpului UTC prin substragerea unei secunde pentru a o menține în precizia de 0,9 secunde dintr-o altă scară de timp numită Timpul Universal 1 (UT1, Universal Time). UT1 este o scară care se bazează pe rotația Pământului. Secundele leap sunt introduse ocazional fie pe 30 iunie, fie pe 31 decembrie. În prezent diferența dintre TAI și UTC este de 32 de secunde (TAI este înainte de UTC). Timpul GPS este scara de timp folosită pentru referirea la semnalele GPS. Ea este calculată pe baza scărilor de timp date de ceasurile atomice de la stațiile de monitorizare și de la bordul sateliților. În GPS nu există secunde leap, ceea ce înseamnă că GPS folosește o scară de timp continuă. Timpul GPS a fost sincronizat cu UTC la 6 ianuarie 1980. Cu toate acestea, ca urmare a secundelor leap introduse în UTC, timpul GPS este decalat înainte față de UTC cu 14 secunde16. Diferența dintre timpul GPS și UTC este una dintre informațiile incluse în mesajul de navigare din GPS. Cu toate acestea este de menționat că atât ceasurile din receptoarele GPS cât și de la bordul sateliților sunt decalate față de timpul GPS datorită erorilor inerente.

Capitolul 4.

Sistem Global de Comunicații Mobile

4.1. Scurt istoric al GSM-ului

Evoluția sistemelor de telecomunicații este marcată de cercetările și invenția suedezului Lars Magnus Ericsson care în anul 1910 își instalează pe mașina sa un dispozitiv de telefonie mobilă prin care, printr-o antena bifilară, s-a conectat cu rețeaua națională de telefonie în timp ce se deplasa. Un rol marcant în evoluția telefoniei mobile l-au avut cercetatorii de la Laboratoarele Bell, astfel în 1947, au ideea construcției unor celule hexagonale ca relee pentru telefoanele mobile. Dar în acea perioadă, tehnologia aferentă nu se dezvoltase încă și nici frecvențele specifice nu erau alocate. În anul 1971 se lansează în Finlanda rețeaua publică de telefonie mobilă ARP considerată ca fiind de generație zero (0 G).

O bună perioadă de timp utilizarea telefoniei celulare a fost apanajul unor utilizatori necomerciali, astfel prima lansare comercială a telefoanelor celulare a avut loc în Tokio în 1979 iar în 1981, Motorola și American Radio Telephone lansează o a doua testare de serviciu comercial pe teritoriul SUA. Introducerea în Statele Unite, în anul 1982, a Serviciului Avansat de Telefonie Mobilă (Advanced Mobile Phone Service – AMPS), pe frecvențe din gama 824 – 894 MHz a facut acest serviciu analog util până în 1990 cand este înlocuit cu cel digital. Tot în anul 1981 sistemul NMT intră în funcțiune în țările nordice: Danemarca, Finlanda, Norvegia și Suedia. Sistemele utilizate precum: NMT, AMPS, TACS, RTMI, C-Net și Radiocom 2000 sunt cunoscute astăzi sub denumirea de generația I (1 G) de telefoane mobile.

La începutul anilor '90 se lansează a doua generație (2G), bazată pe sistemele GSM (Global System for Mobile Communication), IS-116 ("TDMA"), IS-95 ("CDMA"), iDEN și PDC. Sistemul de telefonie 2G este pus în practică pentru prima dată în Finlanda, în 1991, prin rețeaua de tip GSM Radiolinja. Telefoanele devin tot mai mici iar serviciile devin tot mai diversificate astfel: apare mesajul SMS (1993 în Finlanda); accesul la fișiere multimedia prin telefonul mobil; utilizare în scop de marketing prin transmitere de reclame promoționale; realizare de plăți pentru utilități sau acces la Internet.

A treia generație (G3) a fost lansată în 2001 în Japonia iar în 2002 în Statele Unite, Coreea de Sud apoi în Italia și Marea Britanie ofernid utilizatorilor o viteză mai mare și o calitate și diversitate a serviciilor din ce în ce mai mare. În fază de testare generația a patra (G4) va oferi transmisiuni multimedia executate în mod “streaming media” cu o mare fidelitate de transmitere. Telefonia mobilă este astăzi într-o continuă evoluție atât calitativă, prin serviciile oferite bazate pe Internet și GPS, cât și cantitativă, prin creșterea exponențială a numărului de abonați.

4.2. Prezentarea generală a GSM-ului

“Sistemul global de comunicații mobile, tehnologia digitală de generația a doua (G2), a fost dezvoltată inițial pentru Europa, dar care are acum peste 71 la sută din piața mondială. Inițial a fost elaborat pentru operarea în banda de 900 MHz și, ulterior, modificat pentru benzile de 850, 1800 și 1900MHz. GSM inițial a stat pentru Groupe Speciale Mobile, comitetul CEPT care a început procesul de standardizare GSM”.

Pentru înțelegerea termenului este necesar să realizăm o scurtă trecere în revistă a evoluției acestuia, astfel “Când acronimul GSM a fost utilizat pentru prima dată în 1982, însemna „Group Speciale Mobile”, adică un comitet sub umbrela CEPT (Conference Europeenne des Postes et Telecomunications) – o organizație europeană pentru standardizare. Sarcina GSM era să definească un nou standard pentru comunicații mobile în bandă radio de 900 MHz, utilizând tehnici digitale pentru întreg sistemul. (…) În 1991, primele sisteme GSM se găseau în proceduri avansate de testare, iar acronimul GSM a primit o nouă semnificație: Global System for Mobile communications”.

Munca eficientă în cadrul Grupului creat la Stockholm în 1982, a făcut ca sistemul GSM elaborat în Europa să aibă succes mai ales datorită faptului că piața de telecomunicații a fost liberalizată prin semnarea unui Memorandum of Understanding în 1987, lipsa competiției cu alte sisteme precum și gama largă și complexă de inovații aduse, printe care: tehnologia digitală; conceptul de mobilitate a identității abonatului – SIM roaming și SIM card; protecție la erori – coduri CRC; securitate; procesarea vorbirii – Speech Processing/Controling; procedura de trecere într-o celulă nouă – Handover; tehnicile de salt în frecvență – Frequency Hopping; transmisia discontinuă – DTx; controlul/adaptarea dinamică a puterii de transmisie radio – Power Control. Primele rețele comerciale de GSM sunt operaționale în 1992.

4.2.1. Arhitectuta GSM:

Arhitectura rețelei GSM este formată din patru subsisteme componente așa după cum se poate observa în Fig.4.1. și anume:

Stație mobilă – MS (Mobile Station),

Subsistemul stațiilor de bază – BSS (Base Station Subsystem),

Subsistemul rețelei și de comutare – NSS (Network & Switching Subsystem),

Subsistemul de operare și întreținere – OSS (Operation & Supervision Subsystem).

Fig.4.1. Arhitectura unei retele GSM

Fiecare componentă din această arhitectura este ea însăși formată din una sau mai multe componente conectate între ele. Pentru noi sunt de interes doar componetele care stau în legatură cu transmisia și recepția de SMS (Short Messege Service).

4.2.2. Transmisia și recepția de mesaje SMS

SMS-ul a devenit un serviciu popular în GSM pe la sfârșitul anilor 90, făcându-și aparițiai pentru prima data în 1991 în Franța. Acest serviciu te lasă să scrii mesaje scurte pe telefon și să le trimiți altor utilizatori de GSM prin intermediul SM-SC (Short Message Service Center). SM-SC este centrul de gestionare și stocare a SMS-urilor. În cazul unor probleme temporale la transmitere, SM-SC asigura totuși deplasarea mesajelor către destinatarul final, păstrand mesajul până când problema este rezolvată. O caracteristica deosebită a serviciului este faptul că un MS activ poate să primească și să transmită mesaje și în timpul unei conversații. Pentru realizarea acestui lucru se alocă un canal separat SDCCH (Standard Dedicated Control Channel) sau în cazul în care există deja un trafic (cazul de exemplu de apel voce) se multiplexează informațiile pe canalul SACCH-ului (Slow Associated Control Channel); acest lucru se poate observa și în Fig.4.2. Canalele SDCCH Și SACCH sunt canale logice, care transmit un anumit tip de informație mapate într-un interval de timp pe un canal fizic.

Fig. 4.2. Transmitrea datelor pe canale

SMRP(Short Message Relay Protocol) a fost definit pentru transportul mesajului pe interfața radiu (Um), care are un echivalent în rețea într-o operație de stocare și transmisie pentru mesaje scurte. TPDU (Transfer Protocol Data Unit) se foloseste de proceduri MAP (Mobile Application Part), acest protocol este o extensie mobilă a SS#7 și se foloseste pentru comunicarea cu alte componente a rețelei MSC-ului precum HLR (Home Location Register) sau VLR (Visitors Location Register) sau alte MSC-uri (Mobile Switching Center) și alte PLMN-uri (Public Land Mobile Network). Pentru mesaje care vin de la SM-SC la un SMS-GMSC, se determină mai întâi poziția exactă a MS, care se obține printr-o interogare a HLR-ului (SHORT MESSAGE ROUTING INFORMATION din Fig.4.3.a). Apoi se trimite mesajul catre MSC (FORWARD SHORT MESSAGE) și este transmis dupa paging. Statusul transmiterii este raportat către SMS-GMSC într-un alt mesaj de tip MAP (FORWARD ACKNOWLEDGEMENT/ERROR INDICATION), care informează apoi și SM-SC. În cazul în care avem de-a face cu o transmisie de masaj de la MS, nu este nevoie de interogarea rutinelor, pentru că SMS-GSMC este cunoscut de toate MSC-urile, ceea ce face ca mesajul să fie trimis direct către SM-GMSC.(Fig 4.3.b)

Fig.4.3. Transmiterea mesajelor în PLMN

Cartela SIM (Subscriber Identity Module) poate păstra până la 12 mesaje, dar telefoanelor moderne au capacitatea necesară pentru a salva mesajele direct în memoria telefonului nu a cartelei, acest lucru ramâne însă la latitudinea utilizatorului.

Fiecare slot pentru SMS de pe cartela SIM are urmatoarea configurație:

Byte Conținut

STATUS

TPDU

TPDU este format din :

Numărul ISDN (Integrated Services Digital Network) a SC-ului (service center),

Numărul ISDN a celui care a trimis (sau primit, depinde de status) mesajul,

Ora și data în secunde în care mesajul a fost recepționat de SC,

Numărul agendei (poate fi 1-Inbox sau 2-Outbox depinzând de setari),

Mesajul propriu zis.

Partea 2.

Implemetarea soluției

Capitolul 5.

Implementarea Hardware și Software

5.1.Implementarea Hardware

5.1.1 Strunctura sistemului

Sistemul de urmărire mobil este un design “multilayer” compus din 3 module funcționale distincte:

Sistemul “Arduino”, cu 2 microcontrollere din familia Atmega328, care gestionează recepția datelor de la GPS și transmiterea lor la GSM.

Sistemul GSM, cu modul de tip GE863, produs de firma Telit.

Sistemul de recepție GPS, cu modul de tip EM406A, produs de firma Global Sat.

Practic, cele 3 module se suprapun, conectorii de pe fiecare dintre acestea având aceleași semnale electrice asignate. Denumirea acestui concept este “Shield”. Astfel, cele 2 sisteme de comunicare sunt realizate sub denumirile “GSM Shield” și respectiv “GPS Shield”.

În acest capitol este descris fiecare modul în parte, funcționarea lui și conectarea cu celelalte module în sistem.

Fig.5.1.Dispozitiv complet montat și funcțional

5.1.2 Placa Arduino

Fig. 5.2.Placa Arduino UNO

Evoluția Arduino a fost determinată de necesitatea modificări constante apărute pentru îmbunătățire și nevoia schimbării care apare din cauza evoluției hardware-ului și software-ului “open source”, de care atât programatorii, electronistii, desingerii cât și artiștii se folosesc. Avantajul inițiativei open source este abilitatea de a schimba atribute și configurații pentru a descoperi modul în care programul ar putea fi afectat și de a învăța de la aceste schimbari.

Placa Arduino dovedește capacitatea sa adaptivă așa cum a fost destinată de către dezvoltatorii săi pentru că este ușor de utilizat prin open source, și are ol agă utilizare fiind integrat până și în artă și design.

“O metodă de dezvoltare pentru software-ul care se folosește de analiza membrilor comunității și de transparența procesului. Promisiunea pe care o face open source este o mai bună calitate, o fiabilitate mai mare, o mai mare flexibilitate și costuri mult mai mici”

Arduino UNO este o placă de dezvoltare bazată pe microcontrollerul ATmega328. Are un numar de 14 pini de intrare/ieșire digitală (din care 6 pot fi folosiți ca ieșiri PWM), 6 intrări analogice, un oscilator de 16 MHz, o conexiune USB, un cap ICSP și un buton pentru reset. Placa conține toate componentele necesare pentru funcționarea microcontrollerului, aceasta necesitând doar conectarea cablului USB, a unei baterii sau a unui adaptor AC-DC pentru a putea funcționa.

Caracteristici:

Tabela 1:Caracteristici Arduino

Placa de bază Arduino are in componența sa 2 microcontrollere din seria ATmega328, primul se conecteaza la USB și are un port UART și un al doilea care gestionează celelalte porturi GPIO(General Purpose Input/Output) și portul UART(Universal asynchronous receiver/transmitter) numarul doi. În Anexa A veți putea schema electrica a modulului Arduino.

Primul microcontroller al modulului Arduino, circuitul ZIC1, este de tip ATmega328 și schema sa este atașată în Anexa B.

Acesta este conectat cu “lumea exterioara”, sau cu aplicația pe care vrem să o rulam, prin conectorii IOL, AD și IOH (In-Out Low, Analog Digital, Input-Output High) și bineînțeles portul de POWER. Conectorul ICSP2 (In Circuit Serial Programming) permite programarea microcontrollerului direct în circuit dacă nu este accesibil port USB dar avem un programator dedicat.

Asigura urmatoarele functii:

Ruleaza aplicatiei descarcata de pe PC.

Pentru descarcarea aplicatiei de pe PC in microcontroller se foloseste de microcontrollerul ATmega8U2 si portul USB al acestuia.

Are port serial propriu la pinii PD0 PD1, si poate sa fie programat un al doilea port serial la pinii PD2 PD3, asigurind astfel o mare flexibilitate in transferul informatiei seriale intre alte 2 dispozitive.

Conectorul ICSP1 permite programarea microcontrollerului direct in circuit daca nu este accesibil port USB sar avem un programator dedicat.

Tactul de lucru este de 8MHz, asigurat de oscilatorul cu cristal de quartz XTAL2.

Al doilea microcontroller al modulului Arduino este de tip ATmega8U2. Schema sa este prezentată în Anexa C.

Asigură urmatoarele funcții:

Legatura cu PC-ul, pentru monitorizarea on-line a aplicației;

Descarcarea aplicației de pe PC în microcontroller.

Conexiunea USB se realizează prin conectorul X2. Portul este protejat contra supratensiunilor cu varistorii Z1 si Z2. Conectorul ICSP1 (In Circuit Serial Programming) permite programarea microcontrollerului direct în circuit dacă nu este accesibil port USB dar avem un programator dedicat pentru acest lucru. Tactul de lucru este de 16MHz, asigurat de oscilatorul cu cristal de quartz XTAL1.

Alimentare:

Placa de baza lucreaza cu 2 tensiuni de alimentare: +5V si +3,3V.

Tensiunea de +5V se obtine cu 2 stabilizatoare de tip MC33269-5.0, de tip LDO (low dropout), configurate in paralel, pentru capabilitate de curent sporita (1600mA in acest caz – necesar pentru modulul GSM).

Circuitul MC33269, produs de firma “ON Semiconductor”, produce curent mediu, cu tensiune de iesire fixa, stabilizator de tensiune linear, proiectat special pentru aplicatii cu tensiune de intrare redusa, alimentare de la baterii sau acumulatori. Aceste stabilizatoare LDO ofera proiectantului circuitului o solutie economica pentru stabilizarea precisa de tensiune, in timp ce se pastreaza la minim pierderile de putere.

5.1.2 Placa GPS

Fig.5.3. GPS Shield cu modul GPS împreuna pe o placă Arduino

Placa GPS este formată din două componente: un GPS Shield și un modul GPS. Shield-ul face legatura fizica (interfațarea) si permite comunicarea seriala intre Arduino si modulul GPS EM406A. Modul care se ocupa de asigura achizitia informatiei de la satelitii GPS.

Proprietatile modulului GPS EM406A:

chip de GPS SiRF Star III, de înaltă performanț%

o foarte înaltă sensibilitate (sensibilitatea de urmărire: -159dBm)

foarte rapid TTFF (Time To First Fix)

se folosește de protocolul de date NMEA 0183

Antenă integrată

Blocarea poziției in caz de semnal foarte slab

compact din punct de vedere a mărimii

determina poziția cu o acuratețe de 10 sau 5 m în funție de setari

are Baud Rate de 4800 bps

are 20 de canale diferite

Explicațiile schemei electronice:

Chiar dacă aparent este un produs deosebit de simplu, acest suport este important pentru a conecta corect receptorul GPS la modulul Arduino, astfel încat sa nu generăm un conflict pe liniile de comunicare UART.

Modulul EM406 se conecteaza conform schemei:

Fig.5.3.1.Schema de conectare a modulului EM406

Placa Arduino are conectorul compatibil:

Fig.5.3.2.Schema intrariilor si ieșiriilor a GPS Shield-ului

Pentru a putea comunica pe portul serial atât datele de la GPS la Arduino, cât si datele de la Arduino la GSM, în mod normal sunt fixați pinii UART și vor fi utilizați de către GSM, iar pentru GPS în mod normal vor fi utilizți pinii “D-Tx” si “D-Rx” un al doilea port serial programabil din ATmega328, conectat la D2 D3, prin switch-ul din schema. Dar în cazul nostru nu se poate realiza o astfel de conexiune pentru că pinii 2,3,4,5,6,7,8,9 sunt folosiți de catre GSM Shield ceea ce ne-a obligat să modificam puțin structura și să legam direct ieșirea DLINE la intrarile pinilor 12 și 13. Ceea ce am făcut printr-o legatura simpla utilizând un cablu.

Fig.5.3.3.Comandarea porturilor de comunicare cu placa Arduino

Alimentare:

Alimentarea receptorului GPS se realizează de la modulul Arduino prin conexiunile existente între U3 si U1 din schemele de mai sus (GND si respectiv +5V).

5.1.3 Placa GSM

Fig.5.4. GSM Shield

GSM Shield-ul se bazează pe un modulul GSM de tip GE863 produs de firma Telit. Dupa cum ne sugerează și numele acest modul are rolul de a asigura comunicațiile GSM. Alimentația modulului se realizează direct de pe placa pe care este atașat, și trebuie sa primească între 3,4V și 4,2V.

Pentru ca modulul GSM Quad GE863 să poata fi utilizat in diverse aplicații, a fost creat “GSM Playground Shield“ de catre firma HW Kitchen și este special conceput pentru o maximă compatibilitate cu plăcile Arduino.

Modulul Embedded GSM/GPRS GE863 QUAD ofera un Quad-Band GPRS Class 10 (GSM 850, 900, DCS 1800, PCS1900 MHz) într-un domeniu extins de temperatura, cât și sensibilitate ridicată RF(Radio frequency). Modulul este lipit direct pe spatele placii. Pentru conectare se foloseste tehnologie “Pini Prin Gauri (PTH)”, fiind mai flexibilă și mai fiabilă pentru dezvoltarea de aplicații, cât și pentru a putea lucra modular și a avea acces la toate semnalele.

Explicațiile schemei electronice:

Schema despre care voi vorbii în urmatorul paragraf este atașată în Anexa D. Iar aici voi vrobi despre unele din facilitați de care ma folosesc în implementarea proiectului.

Alimentarea modulului GSM este capabila să livreze un current cu riplu ridicat (2A) atunci când modulul de GSM este activ. Alimentarea este realizată cu circuitul Micrel MIC29302. GSM Shield este alimentat din placa Arduino dar poate fi alimentata și din portul USB. Alegerea sursei de alimentare este automata (prin diode de separare). În cazul nostru este clar că tot circuitul va fi alimentat cu ajutorul a 10 baterii plasate in serie care produc un curent între 12V și 14,5V .Un capacitor mare, parallel cu un “Supercap” garanteaza functionarea pe USB (pentru convorbiri si date).

Buton ON/OFF – pe placa este un buton care permite comanda ON și OFF a modulului. Totodată comanda se poate realize și din placa Arduino. Semnalul de RESET de pe placa GSM este conectat de Arduino. Aceasta imbunătățește fiabilitatea intregii aplicatii.

Portul UART – comunicarea serială permite dezvoltare aplicatiilor Arduino mai rapid si mai bine. Pe placă este pus un comutator care permite alegerea sensului de comunicație. In primul rând se poate trimite de la terminalul PC-ului software direct la modulul GSM. De această functionalitate te poți folosi pentru a învața despre comenzile AT ale modulului.

Senzor de Temperatura – pe placă este plasat un sensor de temperatura LM61BIM3 care permite măsurarea în domeniul −25°C la +85°C cu o acuratețe de ±2.0°C la 25°C. De acest senzor putem folosim pentru verificarea funcționarii modulului. Am creeat un program de testare a placii în care apasând butonul User Button placa îți trimitea temperatura ambientală într-un mesaj. În acest fel puteai observa durata de conectare a plăcii la reteau GSM și durata pâna mesajul este citit si răspunsul trimis.

User Button si User LED – aceasta interfată simplă permite dezvoltarea de diverse aplicatii. Am folosit această facilitate, cum vi-am spus și in paragraful anterior, pentru testarea funcționalității modulului GSM. De asemenea am intregrat această funcționalitate si in proiectul final, pentru a putea cere un mesaj cu locația exactă oricând, chiar și atunci când nu ii trimiți un mesaj de orice fel plăcii.

5.2.Implementarea Software

Partea Software a fost realizată în mediul de dezvoltare al plăcii Arduino, IDE-ul (Integrated Development Environment) Arduino este o intrefață peste gcc-avr(compilatorul de C/C++). Procesul în programul Arduino a fost gândit astfel încât să ascundă aspectele complexe ale C si C++, cât și tool-urile necesare pentru a convertii codul în bytes, care sunt încărcați rulați pe placă.

IDE-ul se folosește pentru a creea, deschide și modifica programele sursă( în engleza se numesc întotdeauna sketch) care se doresc a fi folosite pe placă. Pentru a testa daca este instalat bine dispozitivul sau daca sunt alese bine terminalele se recomandă întotdeauna să se scrie un cod sau să se folosească un exemplu din libraria de exemple.

Programele Arduino se pot împărți în trei părti principale: structuri, valori (variabile și constante), si funcții. În programul de bază se cer funcțiile setup() și loop().

Functia setup() este scrisă întotdeauna la început, dupa ce au fost declarate variabilele gloabele și inițializați pinii care vor fi folosiți. Această funcție este folosită pentru a inițializa variabile, pini, pronirea serială a începe utilizarea de librarii, etc. Funcția de setup() va fi rulată doar o singura dată, dupa fiecare reîncărcare sau dupa fiecare reset a placii Arduino.

Dupa creearea unei funcții de setup(), care cum am menționat și mai sus este scrisa pentru inițializarea valariabile, funcția de loop() face exact ceea ce sugerează numele ei, ea este o buclă continuua și ii permite programului astfel sa se modifice si sa raspund. Cu ea poți să controlezi activ placa Arduino.

Programul scris pentru a implementa aplicația pentru dispozitivul descris in subcapitolul anterior este atașat în Anexa E. Programul împreuna cu dispozitivul doresc a creea un mijloc de urmarire a bicicletei. În primul rând se poate observa că am integrat în program mai multe librarii: GSM.h, NewSoftSerial.h,TinyGPS.h. Dupa cum se poate și observa există libraria pentru GSM(GSM.h) și cea pentru GPS(TinyGPS.h) și o librarie speciala cu ajutorul căreia poti sa redefinești pinii de pe placă astfel încât să poți să eviți pini care sunt deja ultizați de aplicație.

În partea de program mai sunt creeate și alte funcții necesare pentru a realiza programul, acestea sunt urmatoarele:

void printFloat(double number, int digits)

void gpsdump(TinyGPS &gps)

bool feedgps()

void sendPosition()

void clearFlags()

Fiecare din aceste funcții are alăturat comentarii detaliate in codul care este atașat.

Se poate observa de asemenea că programul conține în stil tipic Arduino cele doua funcții: cea de setup() si cea de loop().În funcția de setup() sunt inițializate toate variabilele. Iar în funcția de loop() se execută tot ce vrem sa fie rulat la fiecare 100milisecunde, 1 secundă și 3 secunde.

Capitolul 6.

Concluzii

Implementarea acestei lucrări care a plecat de la problema aparent minore dar frecvent întâlnite și anume dispatiția bicicletelor și frecvența redusă de recuperare a lor. Pe parcursul perioadei de studiu în cadrul Universității Ioan Slavici din Timisoara de nenumărate ori i-am auzit pe colegii mei și pe cadrele didactice plângându-se de dispariția bicicletelor lăsate pe rastelul amenajat în cadrul perimetrului Universității. După îndelungate căutări, bicicletele tot nu au fost găsite și nici hoții pedepsiti. Pentru rezolvarea unor asemenea situații, am identificat necesitatea dezvoltării unui dispozitiv pentru urmărire continuă a bicicletelor, construit din mai multe componente interconectabile. Prin realizarea acestui dispozitiv se obțin două rezultate importante și anume: asigurarea urmaririi bicicletei și identificarea făptașului.

Scopurile propuse în aceasta lucrare a fost atins, dispozitivul a fost creat, implementat si testat în diferite condiții.

Pe viitor se dorește:

Implementarea unui mod de monitorizare constant,

Miniaturizare dispozitivului pentru a putea fi făcut accesibil publicului larg,

Prin intermediul functiei GPRS a plăcii GSM, să se realizeze transmiterea datelor colectate direct pe un server pentru a fi prelucrate si păstrate intr-o baza de date, care să fie accesată la cerere pentru a creă o hartă exactă cu traseul parcurs de bicileta in ultima saptamană.

Crearea unui site, pentru viitori clienti care să poată achizitiona modului si să le permită urmărirea bicicletei 24 din 24 de ore

Anexa A

Fig.A.Schema electronică a modulului Arduino UNO

Anexa B

Fig.B. Schema electronică a microcontrollerului ZIC1 de tip ATmega328.

Anexa C

Fig.C. Schema electronică a microcontrollerul U3 de tip ATmega8U2

Anexa. D

Fig.D Schema electronică a GSM Shield-ului

Anexa E

Codul implementat

#include <GSM.h>

#define SMS_MAX_LEN 100 //neaparat!

#include <NewSoftSerial.h>

#include <TinyGPS.h>

GSM gsm;

unsigned long previous_timer; //folosit in bucla principala pentru timer

byte timer100msec;

bool reporting=false; //daca dorim tracking

// mai jos sunt variabilele pentru GSM

int val;

char string[30];

char SMSposition;

char phone_number[20]; // numarul de telefon la care raportam

char sms_text[SMS_MAX_LEN]; // mesajul SMS

char *ch; // pointer la caracter

//–––––––––––––––––––––––

// mai jos sunt variabilele pentru GPS

long lat, lon, spd;

float flat;

float flon;

unsigned long age, date, time, chars;

int year;

byte month, day, hour, minute, second, hundredths;

unsigned short sentences, failed;

//–––––––––––––––––––––––

TinyGPS gps;

NewSoftSerial nss(12, 13);

void gpsdump(TinyGPS &gps);

bool feedgps();

void printFloat(double f, int digits = 2);

//–––––––––––––––––––––––

void printFloat(double number, int digits)

{ // Handle negative numbers

if (number < 0.0)

{

Serial.print('-');

number = -number;

}

// Round correctly so that print(1.999, 2) prints as "2.00"

double rounding = 0.5;

for (uint8_t i=0; i<digits; ++i)

rounding /= 10.0;

number += rounding;

// Extract the integer part of the number and print it

unsigned long int_part = (unsigned long)number;

double remainder = number – (double)int_part;

Serial.print(int_part);

// Print the decimal point, but only if there are digits beyond

if (digits > 0)

Serial.print(".");

// Extract digits from the remainder one at a time

while (digits– > 0)

{

remainder *= 10.0;

int toPrint = int(remainder);

Serial.print(toPrint);

remainder -= toPrint;

}

}

void gpsdump(TinyGPS &gps)

{

gps.get_position(&lat, &lon, &age);

Serial.print(lon);

feedgps(); // trimite suma de control inapoi la chipul GPS

gps.f_get_position(&flat, &flon, &age);

Serial.print("Lat/Long(float): "); printFloat(flat,5 ); Serial.print(", ");printFloat(flon,5);

feedgps();

Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): "); printFloat(gps.f_speed_kmph()); Serial.println();

spd=gps.f_speed_mps();

feedgps();

}

bool feedgps()

{

while (nss.available())

{

char c=nss.read();

Serial.println(c);

if (gps.encode(c))

return true;

}

return false;

}

//–––––––––––––––––––––––

void sendPosition(){

sprintf(string, "Pozitia curenta: %i %i", flat, flon);

gsm.SendSMS("0758300633", string);

Serial.print("Am trimis pozitia curenta ");

Serial.println(string);

}

void reportPosition(){

if (reporting){

Serial.println("Am trimis o actualizare a pozitiei pe harta");

}

}

void clearFlags(){

reporting=false;

}

//–––––––––––––––––––––––

void setup()

{

gsm.InitSerLine(115200); // folosim o comunicatie soft-serial

gsm.TurnOn(); // oferit de clasa GSM din GSM.h

gsm.SetGPIODir(GPIO10, GPIO_DIR_OUT);// doi pini de GPIO folositi pentru comunicatia seriala

gsm.SetGPIODir(GPIO11, GPIO_DIR_OUT);

timer100msec = 0;// un mecanism simplu de poll-ing

previous_timer = millis(); //millis()-> nr of sec de cand a fost pus sub tensiune MCU; acum e momentul 0

gsm.DisableUserButton(); //pe shield este un buton care e de uz general

Serial.begin(115200); //deschidem si o linie seriala "clasica" peste USB pentru debugging

nss.begin(4800); //comunicatia cu cipul de GPS

}

//–––––––––––––––––––––––

void loop() //aici se intampla lucrurile interesante

{

bool newdata = false;

unsigned long start = millis();

// ––––––-

// avem un mecanism cu poll-ing la timp prestabilit

// ––––––-

if ((unsigned long)(millis() – previous_timer) >= 100) { //millis() returneaza timpul curent de la punerea sub tensiune; deci verificam daca au trecut 100ms de la ultima verificare */

previous_timer = millis();

//****** aici executam tot ce vrem sa fie rulat la fiecare 100ms*********

if (gsm.IsUserButtonEnable() && gsm.IsUserButtonPushed()) { //pentru testare am folosit UserButton de pe placa in sens de buton de panica

gsm.DisableUserButton(); //pentru a preintampina coliziunile dezactivam butonul pana ce nu a fost trimis mesajul

gsm.TurnOffLED(); //pe placa exista si un buton de "uz general"

for (int i=1;i<=10;i++){

val+=gsm.GetTemp();

delay(10);

}

val/=10; //o varianta simpla de filtrare a rezultatelor

if (val > -1000) { // solutia este una brutala de a elimina valorile "evident eronate"

sprintf(string, "Trimis de pe Arduino:P Temperature: %i C(la mine acasa)", val/10);

gsm.SendSMS("0758300633", string); //pentru debugging putem trimite la un numar specificat

//gsm.SendSMS(, string); //trimitem SMS la primul numar din agenda telefonica de pe SIM

}

}

//****** aici executam tot ce vrem sa fie rulat la fiecare 1000ms adica o secunda*********

if ((timer100msec+50) % 50 == 0) { //pentru a elimina coliziunile am decalat cu 50ms; valoarea %10 ne ofera posibilitatea de a rula la 1s; daca punem %50 rulam la 5s

gsm.CheckRegistration(); //verificam daca avem conexiune cu BTS pe parte de protocol GSM

if (gsm.IsRegistered()) { /* asa e patternul de verificare: initial se apeleaza CheckRegistration()

care seteaza valoare unui camp al clasei si mai apoi se a apeleaza IsRegsitred(); recomand refactorizare;*/

gsm.EnableUserButton(); //inseamna ca putem permite activarea butonului de uz general

gsm.TurnOnLED(); //si aprinde ledul

}

else {

gsm.DisableUserButton(); //daca nu e inregistrat nu activam ca sa nu inducem utilizatorul in eroare;

gsm.TurnOffLED();

}

}

//****** aici executam tot ce vrem sa fie rulat la fiecare 3000ms adica 3 secunde*********

if ((timer100msec+70) % 30 == 0) {

Serial.println("odata la 3 secunde"); //debugging

// is there a new UNREAD SMS ?

// if YES – SIM position > 0 is returned

// ––––––––––––-

// if (REG_REGISTERED==gsm.CheckRegistration()) {

Serial.println("Testam starea GPS-ului");

if (feedgps()) //pt GPS

newdata = true;

if (newdata)

{

Serial.println("Avem date de la GPS");

gpsdump(gps);

}

Serial.println("Testam starea GSM-ului");

//pt GSM

SMSposition = gsm.IsSMSPresent(SMS_UNREAD); //verifcam daca avem un SMS necitit (?) pe zona dedicata din SIM; daca da, position>0

Serial.print("pozitia este ");

Serial.println(SMSposition);

// delay(100);

gsm.GetSMS(SMSposition, phone_number, sms_text, SMS_MAX_LEN); //punem in sms_text continutul SMS-ului

Serial.println();

Serial.print("Textul SMS-ului este: ");

Serial.println(sms_text);

// –––AICI PRELUCRAM DIFERITELE COMENZI POSIBILE ––- //

ch = strstr(sms_text, "temp"); //daca mesajul primit contine comanda "temp" returnam temperatura; util pentru debugging

if (ch != NULL) { //inseamna ca avem comanda temp

val = gsm.GetTemp();

sprintf(string, "Temperature: %i C", val/10);

gsm.SendSMS("0758300633", string);

Serial.println("Am trimis temperatura prin SMS");

gsm.DeleteSMS(SMSposition); //stergem acest SMS caci nu mai avem nevoie de el

}

ch = strstr(sms_text, "pos"); //daca mesajul primit contine comanda "pos" returnam pozitia

if (ch != NULL) { //inseamna ca avem comanda temp

sendPosition();

Serial.println("Am trimis pozitia prin SMS");

gsm.DeleteSMS(SMSposition); //stergem acest SMS caci nu mai avem nevoie de el

}

ch = strstr(sms_text, "rep"); //daca mesajul primit contine comanda "rep" trimitem pozitia la un interval constant

if (ch != NULL) { //inseamna ca avem comanda temp

reporting=true;

Serial.println("Am trimis pozitia curenta prin SMS");

gsm.DeleteSMS(SMSposition); //stergem acest SMS caci nu mai avem nevoie de el

}

ch = strstr(sms_text, "clr"); //daca mesajul primit contine comanda "clr" anulam comenzile anterioare

if (ch != NULL) { //inseamna ca avem comanda temp

clearFlags();

Serial.println("Am trimis pozitia curenta prin SMS");

gsm.DeleteSMS(SMSposition); //stergem acest SMS caci nu mai avem nevoie de el

}

//}

}

if ((timer100msec+70) % 100 == 0) {

reportPosition();

}

timer100msec = (timer100msec + 1) % 100; //actualizam timerul; de fapt este numarul de itaeratii ale buclei principale si nu este mappat direct pe timp

}

}

Bibliografie

Popa, M. Proiectarea microsistemelor digitale, Editura Orizonturi Universitare, Timișoara, 2003

ATmega328 (datasheet) (on-line). Citat la 25.06.2012. Disponibil pe internet la adresa: http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf

A. El-Rabbany, Introduction to GPS: the global positioning system. Artech House, 2002.

J. C. Hoffman-Wellenhof, B.H. Lichtenger, Global Positioning System: Theory and Practice. Springer-Verlag, 2004

D. Gazis, Trafic theory. Kluwer Academic Publishers, 2002

Istoria telefonului mobil (on-line), Citat la 08.06.2012. Disponibil pe internet la adresa: http://ro.wikipedia.org/wiki/Istoria_telefonului_mobil., passim

GSM World, Glossary (on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://www.gsmworld.com/newsroom/resources/g.htm

Introduction to the Alcatel GSM Network, Alcatel University

J . Eberspächer, H . -J . Vögel, C . Bettstetter and C. Hartmann, GSM – Architecture, Protocols and Services Third Edition, 2009

Arduino UNO (on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://arduino.cc/en/Main/ArduinoBoardUno

Open Source Initiative (on-line). Citat la 09.12.2009. Disponibil pe internet la adresa: http://www.opensource.org/

GPS Shield Quickstart guide (on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://www.sparkfun.com/tutorials/173

GPSShield-v14.pdf

GSM Playground – GSM Shield for Arduino (on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://www.hwkitchen.com/products/gsm-playground/

Michael Margolis, Arduino Cookbook, editura O’Reilly, 2011

Arduino(on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://arduino.cc/

Bibliografie

Popa, M. Proiectarea microsistemelor digitale, Editura Orizonturi Universitare, Timișoara, 2003

ATmega328 (datasheet) (on-line). Citat la 25.06.2012. Disponibil pe internet la adresa: http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf

A. El-Rabbany, Introduction to GPS: the global positioning system. Artech House, 2002.

J. C. Hoffman-Wellenhof, B.H. Lichtenger, Global Positioning System: Theory and Practice. Springer-Verlag, 2004

D. Gazis, Trafic theory. Kluwer Academic Publishers, 2002

Istoria telefonului mobil (on-line), Citat la 08.06.2012. Disponibil pe internet la adresa: http://ro.wikipedia.org/wiki/Istoria_telefonului_mobil., passim

GSM World, Glossary (on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://www.gsmworld.com/newsroom/resources/g.htm

Introduction to the Alcatel GSM Network, Alcatel University

J . Eberspächer, H . -J . Vögel, C . Bettstetter and C. Hartmann, GSM – Architecture, Protocols and Services Third Edition, 2009

Arduino UNO (on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://arduino.cc/en/Main/ArduinoBoardUno

Open Source Initiative (on-line). Citat la 09.12.2009. Disponibil pe internet la adresa: http://www.opensource.org/

GPS Shield Quickstart guide (on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://www.sparkfun.com/tutorials/173

GPSShield-v14.pdf

GSM Playground – GSM Shield for Arduino (on-line). Citat la 09.06.2012. Disponibil pe internet la adresa: http://www.hwkitchen.com/products/gsm-playground/

Michael Margolis, Arduino Cookbook, editura O’Reilly, 2011

Anexa A

Fig.A.Schema electronică a modulului Arduino UNO

Anexa B

Fig.B. Schema electronică a microcontrollerului ZIC1 de tip ATmega328.

Anexa C

Fig.C. Schema electronică a microcontrollerul U3 de tip ATmega8U2

Anexa. D

Fig.D Schema electronică a GSM Shield-ului

Anexa E

Codul implementat

#include <GSM.h>

#define SMS_MAX_LEN 100 //neaparat!

#include <NewSoftSerial.h>

#include <TinyGPS.h>

GSM gsm;

unsigned long previous_timer; //folosit in bucla principala pentru timer

byte timer100msec;

bool reporting=false; //daca dorim tracking

// mai jos sunt variabilele pentru GSM

int val;

char string[30];

char SMSposition;

char phone_number[20]; // numarul de telefon la care raportam

char sms_text[SMS_MAX_LEN]; // mesajul SMS

char *ch; // pointer la caracter

//–––––––––––––––––––––––

// mai jos sunt variabilele pentru GPS

long lat, lon, spd;

float flat;

float flon;

unsigned long age, date, time, chars;

int year;

byte month, day, hour, minute, second, hundredths;

unsigned short sentences, failed;

//–––––––––––––––––––––––

TinyGPS gps;

NewSoftSerial nss(12, 13);

void gpsdump(TinyGPS &gps);

bool feedgps();

void printFloat(double f, int digits = 2);

//–––––––––––––––––––––––

void printFloat(double number, int digits)

{ // Handle negative numbers

if (number < 0.0)

{

Serial.print('-');

number = -number;

}

// Round correctly so that print(1.999, 2) prints as "2.00"

double rounding = 0.5;

for (uint8_t i=0; i<digits; ++i)

rounding /= 10.0;

number += rounding;

// Extract the integer part of the number and print it

unsigned long int_part = (unsigned long)number;

double remainder = number – (double)int_part;

Serial.print(int_part);

// Print the decimal point, but only if there are digits beyond

if (digits > 0)

Serial.print(".");

// Extract digits from the remainder one at a time

while (digits– > 0)

{

remainder *= 10.0;

int toPrint = int(remainder);

Serial.print(toPrint);

remainder -= toPrint;

}

}

void gpsdump(TinyGPS &gps)

{

gps.get_position(&lat, &lon, &age);

Serial.print(lon);

feedgps(); // trimite suma de control inapoi la chipul GPS

gps.f_get_position(&flat, &flon, &age);

Serial.print("Lat/Long(float): "); printFloat(flat,5 ); Serial.print(", ");printFloat(flon,5);

feedgps();

Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): "); printFloat(gps.f_speed_kmph()); Serial.println();

spd=gps.f_speed_mps();

feedgps();

}

bool feedgps()

{

while (nss.available())

{

char c=nss.read();

Serial.println(c);

if (gps.encode(c))

return true;

}

return false;

}

//–––––––––––––––––––––––

void sendPosition(){

sprintf(string, "Pozitia curenta: %i %i", flat, flon);

gsm.SendSMS("0758300633", string);

Serial.print("Am trimis pozitia curenta ");

Serial.println(string);

}

void reportPosition(){

if (reporting){

Serial.println("Am trimis o actualizare a pozitiei pe harta");

}

}

void clearFlags(){

reporting=false;

}

//–––––––––––––––––––––––

void setup()

{

gsm.InitSerLine(115200); // folosim o comunicatie soft-serial

gsm.TurnOn(); // oferit de clasa GSM din GSM.h

gsm.SetGPIODir(GPIO10, GPIO_DIR_OUT);// doi pini de GPIO folositi pentru comunicatia seriala

gsm.SetGPIODir(GPIO11, GPIO_DIR_OUT);

timer100msec = 0;// un mecanism simplu de poll-ing

previous_timer = millis(); //millis()-> nr of sec de cand a fost pus sub tensiune MCU; acum e momentul 0

gsm.DisableUserButton(); //pe shield este un buton care e de uz general

Serial.begin(115200); //deschidem si o linie seriala "clasica" peste USB pentru debugging

nss.begin(4800); //comunicatia cu cipul de GPS

}

//–––––––––––––––––––––––

void loop() //aici se intampla lucrurile interesante

{

bool newdata = false;

unsigned long start = millis();

// ––––––-

// avem un mecanism cu poll-ing la timp prestabilit

// ––––––-

if ((unsigned long)(millis() – previous_timer) >= 100) { //millis() returneaza timpul curent de la punerea sub tensiune; deci verificam daca au trecut 100ms de la ultima verificare */

previous_timer = millis();

//****** aici executam tot ce vrem sa fie rulat la fiecare 100ms*********

if (gsm.IsUserButtonEnable() && gsm.IsUserButtonPushed()) { //pentru testare am folosit UserButton de pe placa in sens de buton de panica

gsm.DisableUserButton(); //pentru a preintampina coliziunile dezactivam butonul pana ce nu a fost trimis mesajul

gsm.TurnOffLED(); //pe placa exista si un buton de "uz general"

for (int i=1;i<=10;i++){

val+=gsm.GetTemp();

delay(10);

}

val/=10; //o varianta simpla de filtrare a rezultatelor

if (val > -1000) { // solutia este una brutala de a elimina valorile "evident eronate"

sprintf(string, "Trimis de pe Arduino:P Temperature: %i C(la mine acasa)", val/10);

gsm.SendSMS("0758300633", string); //pentru debugging putem trimite la un numar specificat

//gsm.SendSMS(, string); //trimitem SMS la primul numar din agenda telefonica de pe SIM

}

}

//****** aici executam tot ce vrem sa fie rulat la fiecare 1000ms adica o secunda*********

if ((timer100msec+50) % 50 == 0) { //pentru a elimina coliziunile am decalat cu 50ms; valoarea %10 ne ofera posibilitatea de a rula la 1s; daca punem %50 rulam la 5s

gsm.CheckRegistration(); //verificam daca avem conexiune cu BTS pe parte de protocol GSM

if (gsm.IsRegistered()) { /* asa e patternul de verificare: initial se apeleaza CheckRegistration()

care seteaza valoare unui camp al clasei si mai apoi se a apeleaza IsRegsitred(); recomand refactorizare;*/

gsm.EnableUserButton(); //inseamna ca putem permite activarea butonului de uz general

gsm.TurnOnLED(); //si aprinde ledul

}

else {

gsm.DisableUserButton(); //daca nu e inregistrat nu activam ca sa nu inducem utilizatorul in eroare;

gsm.TurnOffLED();

}

}

//****** aici executam tot ce vrem sa fie rulat la fiecare 3000ms adica 3 secunde*********

if ((timer100msec+70) % 30 == 0) {

Serial.println("odata la 3 secunde"); //debugging

// is there a new UNREAD SMS ?

// if YES – SIM position > 0 is returned

// ––––––––––––-

// if (REG_REGISTERED==gsm.CheckRegistration()) {

Serial.println("Testam starea GPS-ului");

if (feedgps()) //pt GPS

newdata = true;

if (newdata)

{

Serial.println("Avem date de la GPS");

gpsdump(gps);

}

Serial.println("Testam starea GSM-ului");

//pt GSM

SMSposition = gsm.IsSMSPresent(SMS_UNREAD); //verifcam daca avem un SMS necitit (?) pe zona dedicata din SIM; daca da, position>0

Serial.print("pozitia este ");

Serial.println(SMSposition);

// delay(100);

gsm.GetSMS(SMSposition, phone_number, sms_text, SMS_MAX_LEN); //punem in sms_text continutul SMS-ului

Serial.println();

Serial.print("Textul SMS-ului este: ");

Serial.println(sms_text);

// –––AICI PRELUCRAM DIFERITELE COMENZI POSIBILE ––- //

ch = strstr(sms_text, "temp"); //daca mesajul primit contine comanda "temp" returnam temperatura; util pentru debugging

if (ch != NULL) { //inseamna ca avem comanda temp

val = gsm.GetTemp();

sprintf(string, "Temperature: %i C", val/10);

gsm.SendSMS("0758300633", string);

Serial.println("Am trimis temperatura prin SMS");

gsm.DeleteSMS(SMSposition); //stergem acest SMS caci nu mai avem nevoie de el

}

ch = strstr(sms_text, "pos"); //daca mesajul primit contine comanda "pos" returnam pozitia

if (ch != NULL) { //inseamna ca avem comanda temp

sendPosition();

Serial.println("Am trimis pozitia prin SMS");

gsm.DeleteSMS(SMSposition); //stergem acest SMS caci nu mai avem nevoie de el

}

ch = strstr(sms_text, "rep"); //daca mesajul primit contine comanda "rep" trimitem pozitia la un interval constant

if (ch != NULL) { //inseamna ca avem comanda temp

reporting=true;

Serial.println("Am trimis pozitia curenta prin SMS");

gsm.DeleteSMS(SMSposition); //stergem acest SMS caci nu mai avem nevoie de el

}

ch = strstr(sms_text, "clr"); //daca mesajul primit contine comanda "clr" anulam comenzile anterioare

if (ch != NULL) { //inseamna ca avem comanda temp

clearFlags();

Serial.println("Am trimis pozitia curenta prin SMS");

gsm.DeleteSMS(SMSposition); //stergem acest SMS caci nu mai avem nevoie de el

}

//}

}

if ((timer100msec+70) % 100 == 0) {

reportPosition();

}

timer100msec = (timer100msec + 1) % 100; //actualizam timerul; de fapt este numarul de itaeratii ale buclei principale si nu este mappat direct pe timp

}

}

Similar Posts

  • Studiul Actionarii Elctrice a Schimbatoarelor de Cale In Sistemul Feroviar

    CUPRINS CAP.1.Istoria transportului feroviar……………………………………………………………………………..3 1.1.Căile “ferate” din lemn……………………………………………………………………………….4 1.2Căile ferate metalice……………………………………………………………………………………4 CAP.2. Sistemele de acționare…………………………………………………………………………………….6 2.1.Introducere……………………………………………………………………………………………….6 2.2. Elemente componente ale acționărilor electrice ……………………………………………7 CAP.3. Infrastructura feroviară………………………………………………………………………………….11 3.1.Suprastructura căii…………………………………………………………………………………….11 3.2.Infrastructura căii……………………………………………………………………………………..11 3.3.Instalații de electrificare…………………………………………………………………………….11 3.4.Calea de rulare………………………………………………………………………………………….12 CAP.4.Schimbatorul de cale ferată…………………………………………………………………….14 4.1.Aparate de cale………………………………………………………………………………..14 4.2.Schimbătorul de cale simplu………………………………………………………………16 4.3.Elemente componente……………………………………………………………………….17 CAP.5.Motorul de current continuu…………………………………………………………………………….18 5.1.Generalitați………………………………………………………………………………………18 5.2.Tipuri…

  • Proiectarea Si Studiul Functionarii Unei Statii de Lucru Robotizate

    PROIECT DE DIPLOMĂ PROIECTAREA ȘI STUDIUL FUNCȚIONĂRII UNEI STAȚII DE LUCRU ROBOTIZATE REZUMAT Lucrare de finalizare a studiilor are drept scop proiectarea și studiul funcționării unei stații de lucru robotizate, utilizate în fabricarea unui subansamblu de caroserie auto. Proiectul de diplomă cuprinde cinci capitole urmată de o listă cu referiri bibliografice utilizate la documentarea și…

  • Sistemul Adept

    CUPRINS 1. Introducere 1.1. Robotica Robotica este o ramură a tehnologiei care se ocupă cu proiectarea, construirea, exploatarea, aplicațiile cu roboți, sisteme informatice pentru controlul roboților, feedback-ul senzorial și prelucrarea informațiilor. Aceste tehnologii se fac cu mașini automate care pot lua locul oamenilor în medii periculoase sau procese de producție, sau seamănă cu oameni în…

  • Tehnologie de Asamblare Prin Sudare a Tevilor In Peretii Membrana

    1.1 Cazane de abur Datorită creșterii procentului de industrializare, respectiv cerințele tot mai acerbe ale pieței consumatoare în industria petrolieră de utilitați și energie electrică se observă necesitatea din ce în ce mai mare de abur tehnologic. Ca urmare a acestora se poate observa o dezvoltare destul de mare dabur tehnologic. Pentru obtinerea de aburului…

  • Proiectarea Sculelor Aschietoare Folosite In Vederea Prelucrarii pe Agregat, a Pieselor de Tip – Taler Boghiu

    CUPRINS CAPITOLUL I MAȘINI-UNELTE AGREGATE ………………………………………………………………………………………….3 I.I. Definire și domeniu de utilizare. Clasificare mașini – unelte agregate. ……………………………………………………………………………………………………..3 I.II. Tipuri de mașini – unelte agregate. Unități de bază. ………………………………………..3 I.III. Schemă cinematică și funcționarea agregatului pentru prelucrat piese tip – taler boghiu …………………………………………………………………………………………7 CAPITOLUL II PROIECTAREA SCULELOR AȘCHIETOARE FOLOSITE PENTRU PRELUCRAREA PIESELOR TIP „Taler boghiu”…