Lucrare de Licență [309298]

Introducere

Obiectivele și scopul lucrării de licență

Această lucrare este constituită dintr-o [anonimizat]:

• mediile industriale,

• agricultură,

• în uz individual

În mediile industriale există o serie de pericole ce pot afecta muncitorii prezenți în cadrul companiei. [anonimizat]. Acești factori pot conduce la explozii sau afecțiuni respiratorii ale muncitorilor.

Scopul acestei lucrări este de a oferi unei persoane un sistem de monitorizare a gazelor periculoase ce pot conduce la afecțiuni respiratorii ale acestuia și de asemenea la monitorizare mediului din jurul său pentru a detecta un pericol pe care acesta nu îl poate simți. [anonimizat] a evita un accident ce ar fi pe cale să se producă.

[anonimizat], ci doar cu echipamentul necesar pentru protejarea lui de pericole exterioare.

Un obiectiv al lurării de față este acela de a da o mai mare siguranță angajaților prin emiterea semnalelor de alarmă în cazul detectării unui anumit pericol din jurul lor.

De asemenea ca obiectiv al lucrării este acela de creare a [anonimizat]. Liderul de echipă poate obține și verfica înregistrările membrilor din echipă și poate lua măsuri pentru prevenirea și înlăturarea accidentelor ce sunt pe cale să se producă (de exemplu:creșterea preponderentă a cantității de CO2).

Un alt obiectiv al proiectului este de a oferi utilizatorului o experiență cât mai bună și o interfață cât mai simplă pentru utilizarea functionalităților sistemului.

Prezentarea domeniului

Industria reprezintă unul din cei mai importanți factori în ceea ce privește procesul de producție al tutoror lucrurilor din jurul nostru ce au la bază un proces tehnologic. De astfel prin acest termen putem descrie industria ca fiind un mediu în care se execută o suită de procese tehnologice ce au ca scop producția de materiale. Industria se clasifică în două mari categorii:

[anonimizat] a echipamentelor folosite. Procesul implicat în industrie poartă numele de fabricare.

Industria se clasifică în mai multe modele și anume:

[anonimizat],

industria textilă.

România prezintă o [anonimizat]. [anonimizat] a țării. [anonimizat] o mulțime de factori de modernizare.

[anonimizat] s-au adoptat mecanismele automate.

Industria petrolieră joacă un factor foarte important în cadrul fiecărei țări, doar în România aceasta fiind estimată la sfârșitul anului 2017 la 9 miliarde de euro, consumurile de combustibil pe cap de locuitor fiind între 140 și 170 de litri. Consumul total pe an atingea circa 3 milioane de tone de benzină și 4 milioane de tone de motorină.

În fiecare an în cadrul mediilor industriale se emană o serie mare de gaze în urma procesului de producție și de aceea se întâmplă o serie de foarte multe accidente, toate acesta având loc în principal din cauza neglijenței și a nebăgării în seamă a unui anumit pericol ce poate să le declanșeze.

În mediul industrial nu există echipament pentru monitorizare mediului din jurul unui utilizator, ci doar aparate de detectare pentru o încăpere de lucru. Se întâlnesc senzori de incendiu sau senzori pentru detectarea de gaze inflamabile.

Prezentarea pe scurt a capitolelor

Această lucrare este structurată pe 7 capitole. Primul capitol este reprezentat de o introducere în care se prezintă pe scurt conținutul lucrării, domeniul de aplicabilitate al proiectului și o serie de funcționalități ce le poate aduce sistemul.

Capitolul II este împărțit în trei secțiuni ce își propun să descrie problema tratată dar și rezolvarea propusă. Ultima secțiune din acest capitol este o analiză asupra sistemului propus și alte dispozitive de pe piață.

În capitolul III sunt prezentate soluțiile tehnice și echipamentele potrivite pentru realizarea sistemului dorit. Acest capitol cuprinde 3 secțiuni. În prima se prezintă tehnologiile și echipamentele disponibile. Celelalte 2 secțiuni se axează pe echipamentele și tehnologiile utilizate și au ca rol descrierea acestora și modului de funcționare al acestora.

Capitolul IV are ca rol prezentarea modului de proiectare a sistemului embedded. Se descriu arhitectura sistemului precum și pașii parcurși pentru proiectarea acestuia. Ultima secțiune din capitol este menită prezentării etapei de testare al acestuia. Putem preciza că aceasta este realizarea unui procent de 50% din cadrul întregului sistem.

Implementarea aplicației software reprezintă realizarea a încă 50% din cadrul sistemului. Această etapă este descrisă în capitolul 5. Rolul acestui capitol este de a descrie arhitectura aplicației și de a descrie etapele implementării acesteia. Aplicația se va prezenta pe module, aceasta fiind consituită din 2 module:

Aplicație de tip server-side

Aplicație mobile

La finalul parcurgerii etapelor de implementare are loc etapa de testare a aplicației.

În cadrul acestui capitol se află o secțiune specială denumită ”Testarea ansamblului hardware software„ ce este menită să arate în procent de 100% funcționalitatea întregului sistem și a functionalitatiilor acestuia.

Capitolul VI reprezintă un studiu de caz în care se prezintă diverse funcționalități ale sistemului.

Ultimul capitol este destinat bibliografiei și a resurselor folosite pentru documentare și conceperea acestui sistem.

Descrierea problemei abordate și a rezolvării propuse

II.I Descrierea problemei abordate

În mediul industrial și în toate mediile ce implică cantități mari de gaze și temperaturi ce pot ajunge peste limita suportată de om se pot întâmpla o serie de accidente ce pot avea consecințe grave. De aceea am ales să adaug un tip nou de sistem înglobând tehnologii software cu tehnologii hardware. Am introdus un nou model de bussines prin care un lider de echipă este alarmat pe telefonul lui dacă un angajat din cadrul echipei lui este în pericol. Datorită faptului că pot apărea probleme de conexiuni prin mediul Internet am adapotat încă două tipuri de alarme. Unul din aceste tipuri este reprezentat de o alarmă de tip sms și încă o alarmă multiplă ce se manifestă la utilizatorul în pericol. Această alarmă multiplă este declanșată de dispozitiv continuu până la reglarea nivelelor de gaz, temperatură și calitatea aerului la nivele normale. Al doilea tip de alarmă se manifestă pe telefonul mobil,acesta monitorizând în timp real nivele de gaz, temperatură și calitatea aerului.

Aplicațiile mobile au o medie de folosire foarte mare și de aceea s-a ales ca aplicația de tip client să fie de tip mobile. Pentru oferirea disponibilității pe cele mai folosite platforme și anume Android și iOS am optat pentru o aplicație de tip hybrid. Se mai poate adăuga și funcționalitatea pe dispozitivele de tip Windows Phone.

În cadrul dezvoltării software există o suită de modele de dezoltare printre care putem enumera:

Modelul cascadă

Acest model se remarcă prin faptul că dezvoltarea, evoluția și validarea sunt reprezentate separat prin intermediul unor faze precum proiectarea software, implementare, testare, etc.

Figura 2.1.1 Modelul Cascada

Această metodă mai este intitulată și model secvențial. Observând modelul de mai sus și tranzițiile asociate deducem că pentru trecerea dintr-o stare în altă poate fi nevoie de o decizie managerială. Această metodă este aleasă când complexitatea proiectului este una mică. Un dezavantaj al acestei metode e că cerințele trebuiesc construite foarte atent până în etapa implementării și greșelile nu sunt permise, deoarce cerințele nu mai pot fi modificate după publicarea cerințelor finale.

Dezvoltarea evolutivă

Această metodă se bazează pe un prototip inițial ce respectă o serie de cerințe minime. Acesta este mai apoi arătat clientului ca mai apoi să se continue dezvoltarea acestuia pe baza noilor cerințe apărute.

Figura 2.1.2 Dezvoltare evolutiva

Rolul prototiplui este de a ajuta clientul în buna definire a cerințelor. Avantajul acestei metode este întreținerea redusă, deoarece validările prototipului au loc în decursul dezvoltării. Ca dezavantaj putem enumera faptul că pot apărea distoriuni între client și echipa de dezvoltare datorită unui timp mai îndelungat de dezvoltare.

În cadrul sistemului am folosit dezvoltarea evolutivă, deoarece am avut nevoie de o serie de validări pe parcursul dezvoltării și cerințele au fost progresive. Am început prin definirea cerințelor din etapa de analiză. Luând în calcul diverse tipuri de industrie precum industria chimică, petrolieră, construcțiilor de mașini am concluzionat că în cadrul acestor medii de lucru nu există un sistem ce poate monitoriza mediul de lucru al fiecărui angajator. Deoarece în aceste industrii se utilizează numeroase procedee de prelucrare și transformare a substanțelor chimice gazoase, lichide și solide ce pot genera amestecuri explozive. În toate mediile de producție apare pericolul de explozie.

În cadrul depozitelor de deșeuri și construcții se pot produce gaze inflamabile ce pot proveni din tuneluri, găuri formate ce sunt slab aerisite. În agricultură se utilizează instalații de recuperare a biogazului și în cadrul săpăturilor pot apărea amestecuri explozive.

Ca exemplu de incident datorat unor scurgeri nedetectate de gaze putem enumera explozia din anul 2014 din Kaohsiung, Taiwan. Trezeci și doi de oameni au fost uciși și trei sute douzeci și unu au fost răniți datorită unor scurgeri de gaz pe scară largă de la niște conducte de gaz ale unor fabrici petrochimice.

Cerința fundamentală a proiectului este o bună monitorizare a acestor accidente și informarea în cel mai scurt timp a responsabililor.

O proastă monitorizare poate duce la pierderea unor vieți omenești, dar și la pierderi materiale de ordinul milioanelor de euro. În cadrul unui accident pe scară largă se adăuga și gradul de poluare foarte ridicat și cantitățile de gaze poluante ce ajung în atmosferă.

Aplicația prezintă 2 moduri de funcționare pentru diverse tipuri de utilizatori. Utilizatorii sunt de 3 tipuri:

Lider de echipă în cadrul unei companii,

Muncitor în cadrul unei companii,

O persoană ce folosește sistemul pentru uz individual.

Din etapa de analiză putem observa din diagrama de mai jos modul de funcționare al sistemului și fazele de execuție în cazul în care sistemul este folosit în cadrul unei companii:

Figura 2.1.3 Diagrama statemachine pentru folosire in companie

În cazul folosirii individuale diagrama se reduce la următoarea:

Figura 2.1.4 Diagrama statemachine pentru folosirea individuala

Mai jos putem vizualiza diagrama de activități în funcție de tipul de utilizator.

Figura 2.1.5 Diagrama de activitati pentru aplicatia mobile

Mai sus s-au detaliat detalile proiectării și cerințele aferente. În vederea proiectării sistemului trebuie luate în calcul următoarele aspecte necesare și anume:

server pentru crearea serviciilor aplicației și emiterea notificarilor,

cloud pentru deploy server,

senzorii pentru detectarea nivelelor anumitor gaze,

senzor pentru stabilirea conexiunii bluetooth cu telefonul,

microcontroller pentru preluarea datelor de la senzori,

aplicație hybrid.

Server-ul are mai multe roluri, principalele fiind de preluarea a datelor, salvarea acestora, oferirea unei serii de servicii precum drepturi, push notifications, serviciu de sms-uri.

Acesta oferă și serviciul de autentificare pentru utilizatori, având implementată o politică de securitate foarte minuțioasă. Toate parolele utilizatorilor sunt criptate printr-un algoritm cu cheie privată. Bază de date este o bază NoSql, iar la prima vedere aceasta nu pare una foarte accesibilă. Accesul la baza de date este restricționat de asemenea printr-un username și o parolă. Pentru a nu pune în pericol execuția servicilor pentru un număr mare de utilizatori server-ul prelucrează fiecare serviciu pe câte un fir paralel, acestea fiind executate asincron. În cazul unui număr mare de utilizatori aceasta este opțiunea optimă pentru realizarea tutoror operațiilor într-un mod corect și fără erori de execuție. La fiecare eroare de execuție utilizatorul va primi în aplicația mobile un mesaj de atenționare că operația selectată nu a putut fi executată cu succes. Baza de date este de tip NoSql în care forma de organizare a datelor este json-ul.

Formatul json este un format ușor de interschimbare a datelor având ca proprietate primordială faptul că este ușor de citit. Un alt factor care îl face foarte des utilizat în cadrul aplicațiilor software este acela că se transmite foarte ușor în rețea prin intermediul protocoalelor http și https acesta din urmă venind și cu o parte de securitate prin intermediul certificatelor ssl. Transmiterea prin rețea a unui json poartă numele de serializare, acesta fiind un procedeu în care json-ul transmis este convertit într-un șir de biți pentru o transmitere mai rapidă. Formatul json reprezintă un subset al limbajului Javascript.[2][3]

Aplicația hybrid poate rula pe orice platformă mobile. Disponibilitatea și timpul de implementare sunt factorii existențiali în luarea deciziei. Platformele vizate sunt Android și iOS.

Figura 2.1.6 Cod portabil interpretat

Întotdeauna un client va prefera un produs ce constă în costuri reduse de dezvoltare, dezvoltare rapidă și mentenanță ușoară. În proporție de 80% toate librăriile pentru aplicațiile hybrid sunt gratuite, doar anumite companii își dezvoltă funcționalități proprii ce sunt mai apoi scoase la vânzare contra unui anumit preț. Pentru programatori aplicațiile hybrid reprezintă un factor extrem de căutat deoarece prin intermediul acestui tip de aplicații au o libertate mai mare de a înțelege modul de funcționare al anumitor funcționalități și posibilitatea de a îmbina tehnologia web cu tehnologia mobile. Datorită acestor factori apare o creștere profesională foarte mare, în principiu datorită controlului complet asupra codului.

În comparație cu aplicațiile dezvoltate în cod nativ este adevărat că aplicațiile hybrid au performanțe mai slabe deoarece odată cu apariția tehnologiilor noi este nevoie de anumiți dezvoltatori care să dezvolte respectiva funcționalitate. Se poate utiliza codul nativ java în interiorul plugin-urilor ce conferă funcționalitățile native.

Cele mai populare framework-uri pentru dezvoltarea aplicațiilor native sunt PhoneGap, Cordova și React, acesta din urmă fiind dezvoltat de Facebook.

În cazul lucrării de față luând în calcul că aplicația nu va folosi numeroase funcționalități ale telefonului s-a ales ca aceasta să fie hybrid pentru o cât mai bună optimizare. Având în vedere că durata de viață a bateriilor smartphone-urilor nu rezistă în proporție mai mult de o zi aplicația de tip hybrid a fost din nou de luat în calcul. Dorindu-se costuri de dezvoltare reduse acest tip de aplicație s-a clasat din nou pe primul loc în luarea deciziei.

Luând în calcul numărul de accidente în mediile industrile datorită neglijenței muncitorilor s-a dorit că se creeze o aplicație care să ducă la protecția sănătății lor. Infecțiile pulmonare sunt un factor foarte greu de tratat ce pot duce la complicații severe.

Luând că exemplu interiorul unei rafinării petroliere în care se prestează muncă pentru obținerea unor produse diverse prin prelucrarea țițeiului. Cantitățile de gaz care se degaja pot duce la un număr foarte ridicat de pericolole, cele mai însemnate fiind infecția pulmonară, intoxicarea sau chiar un incendiu devastator. Sistemele de alarmă din mediul industrial au ca rază de detecție interiorul unei unei încăperi de obicei largă și se declanșează în cazul unui pericol aflat în această arie. Un angajat dintr-un mediu restrâns la care senzorii de alarmă nu pot detecta un eventual pericol, este întotdeauna într-o zonă foarte mare de risc.

Sistemul trebuie să aibă capabilitatea să se adapteze atât în mediul industrial cât și în alt mediu în care pot aprea diverse pericole datorită lipsei umidității aerului sau temperaturi foarte mari ce pot duce la complicații foarte serioase în cazul sănătății unei persoane. Monoxidul de carbon este un pericol foarte mare datorită faptului că după cum este intitulat și anume ”ucigaș tăcut„ acesta se face foarte repede resimțit de către o persoană și poate duce de la respirație grea până la pierderea cunostiintei. În foarte mare parte din cazuri când s-a ajuns la pierderea cunoștinței un număr mic de persoane au reușit să fie savlate de medici. De aceea o avertizare este absolut necesară pentru luarea de măsuri în vederea luării măsurilor de siguranță.

II.II Descrierea rezolvării propuse

După cum s-a enumerat în cadrul prezentării problemei aplicația de tip client va fi de tip hybrid datorită functionalitatiilor ce nu influențează senzorii telefonului într-un procent foarte mare.

În cadrul sistemului embedded acesta va fi format dintr-un microcontroller ce va avea atașat un număr de senzori ce vor avea capacitatea de a măsură diverși parametrii. Sistemul embedded va trimite la aplicația hybrid prin intermediul unei conexiuni bluetooth parametrii măsurați din mediul în care utilizatorul se află. Dacă parametrii depășesc valorile normale se va emite un semnal de alarmă pe ambele dispozitive, acestea fiind sistemul embedded și telefonul mobil. În cazul companiilor se va trimite alarmă și către responsabilul de echipă pentru efectuarea de măsuri de intervenție pentru îndepărtarea pericolului și salvarea persoanei aflate în pericol.

Schema de principiu a sistemului este de următoarea formă:

Conexiunea bluetooth este foarte populară în rândul utilizatorilor de dispozitive mobile, dar și în cadrul laptopurilor și chiar și al imprimantelor. Acesta a avut parte de o dezvoltare progresivă mai ales pe baza vitezei de transfer a fișierelor între dispozitive. Acesta a fost organizat pe versiuni și de fiecare data s-a încărcat ca dispozitivele de generație nouă să fie echipate cu ultima versiune apărută a tehnlologiei bluetooth.

În diagrama de mai jos se poate observă dezvoltarea tehnologiei de tip bluetooth,în decursul anilor:

Figura 2.2.1 Ascensiunea bluetooth

Trecerea de la versiunea 2 la versiunea 3 a avut un impact semnificativ. Un dezavantaj l-a reprezentat faptul că durată de dezvoltare a fost îndelungată.

Senzorii conectați la microcontroller vor avea ca rol monitorizarea nivelului de:

Metan

CO(mooxid de carbon)

Gaz

CO2(dioxid de carbon)

NH3(amoniac)

Temperatură

Umiditatea aerului

Calitate a aerului

Fiecare dintre acești parametri, în cantități peste limită constituie un pericol pentru o perosana aflată în decursul parcurgerii unei activități.

Fiecare alarmă ce va fi emisă va fi stocată în cadrul unei baze de date ce va reține toate datele utilizatorilor.

Se vor putea emite sfaturi în funcție de parametrii măsurați, pentru ca utilizatorii să poată înțelege valorile înregistrate fără mari dificultăți. Aplicația trebuie să fie cu o interfață prietenoasă și cât mai ușor de accesat în condiții mai puțin potrivnice.

În cadrul unei echipe se vor putea emite activități pentru membrii grupului pe o anumită perioadă, aceste activității făcând parte dintr-o planificare întocmită de liderul de echipă pentru o perioadă selectată.

Alimentarea sistemul se va face prin intermediul bateriilor. Acesta va emite un semnal de alarmă când bateria va fi aproape de descărcare.

Prin intermediul aplicației mobile se vor emite alarme de tip push notification, sms, vibrație, blitz pentru alertarea utilizatorului din altă sursă dar și pentru informarea liderului de echipă.

II.III Comparatie între sistemele disponibile pe piață și sistemul propus

Sistemele de pe piață vin dotate la rândul lor cu o serie de funcționalități în care se pune accent în principiu pe reglarea automată. În cadrul locațiilor unde se execută procese industriale este preferat ca mașinile și instalațiile să lucreze automat. Acest lucru are ca scop protejarea forței de muncă de activități ce ar putea duce la accidente datorită monotoniei sau oboselii adunate. În mare parte dispozitivele de monitorizare de gas din uzine și fabrici nu lucrează la nivel de persoană ci la nivel de încăpere de desfășurare a activității.

Exemple de dispozitive:

Figura 2.3.1 Detector de monoxid de carbon si gaz metan

Dispozitivul de mai sus prezintă o alimentare ce necesită 220V pentru funcționare.Acesta emite o alarmă puternică la fiecare 15 minute în cazul detecției unor nivele de gaz și metan peste limitele admisibile.Ca dezavantaj față de sistemul propus acesta nu poate fi transportat de o persoană datorită alimentări și vine cu un număr mai mic de funcționalități.

Figura 2.3.2 Detector de gaz metan si monoxid de carbon [7]

Detectorul de gaz metan și monizid de carbon din figura 2.3.2 oferă o valvă de aluminiu sau alamă ce poate avea racorduri între 3/8„-8„.Acesta vine cu o îmbunătățire deoarece poate fin alimentat atât la 230V cât și la 12V

Figura 2.3.3 Detector de gaz si monoxid de carbon cu alimentare pe baterii

Selectarea soluțiilor tehnice și proiectarea algoritmului de implementare

III.I Analiză asupra tehnologiilor și echipamentelor disponibile

Acest proiect reprezentând un sistem a fost nevoie de crearea a 2 componente cu specifice diferite:

componenta software

componenta hardware

Având în vedere că aplicația software rulează pe un device, se poate consideră că întreg sistemul reprezintă un ansamblu hardware.

Începând mai întâi cu dispozitivul hardware am ales ca acesta să fie un sistem embedded datorită faptului că aceste tipuri de sisteme se potrivesc foarte bine atuncti când cerințele sunt bine stabilite încă din etapa de proiectare. Un alt motiv pentru alegerea acestui tip de sistem a fost datorită portbabilitatii, costului redus și datorită că perturbațiile din jur, fie magnetice sau electrice nu influențează transferul de date.

Microcontroller-ul Arduino Uno a fost opțiunea aleasă,deoarece acesta vine integrat cu un mediu de dezvoltare integrat,ce include suport pentru diverse limbaje de programare precum C++, C, Java. Poate fi programat cu orice limbaj de programare dacă avem un compilator ce poate să transforme codul sursă în cod binar. Acesta reprezintă un proiect open source și costurile sunt reduse. Acesta se găsește sub mai multe forme. Varianta aleasă pentru proiect este Arduino Genuino Uno.

Altă variantă disponbila a fost shield-urile Raspbery Pi. Acest sistem este folosit de obicei împreună cu un sistem de operare Linux. Acesta are abilitatea de a rula mai multe programe, în timp ce Arduino poate să ruleze un singur program într-o buclă infinită. Spre deosebire de Arduino, acesta este mai greu de utilizat. Este folosit când se dorește să facă multiple task-uri în paralel,sau calcule extrem de complicate. Față de Arduino acesta prezintă o putere de procesare mult mai mare și o memorie extinsă.

Figura 3.1.1 Arduino Genuino Uno

Figura 3.1.2 Sistem Embeded Raspbery pi

Arduino prezintă 3 zone de memorie:

memoria flash,

SRAM,

EEPROM.

Memoria flash și EEPROM sunt ne-volatile, asta însemnând că informația este ținută în memorie și după oprirea alimentării sistemului. SRAM este volatilă și este ștearsă automat la oprirea alimentării.

Pentru conexiunea bluetooth am ales modulul HC-05. Acesta poate fi folosit fie ca master fie ca slave și deține o memorie flash de 8Mbit. Este un modul de preț mic și poate funcționa atât la 3.3V cât și la 5V.

Figura 3.1.3 HC-05 Modul Bluetooth

Acest modul s-a adaptat foarte bine cerințelor de a realiza o conexiune bluetooth serială pentru montitorizare în timp real a paramentrilor, acesta putând funcționa la un Baud Rate egal cu 9600.

Având în vedere că unul din scopurile proiectului a fost ca acesta să fie low cost și să satisfacă monitorizarea în timp real a parametrilor și valori cât mai apropiate de cele reale cu o marjă de eroare foarte mică,am ales senzori din clasa MQ pentru monitorizare gazelor din mediul ambiant. Aceștia prezintă un răspuns rapid, au o sensibilitate mare și o rază mare de acțiune, fiind foarte ușor de conectat.

Figura 3.1.4 Senzori MQ

Aplicația software este în totalitate scrisă în cod Javascript. Aceasta folosește o serie de framework-uri cum ar fi AngularJS, IonicFramework, PhoneGap, Cordova. Folosind AngularJS am putut să integrez în cadrul proiectul concepul MVC(Model-View-Controller). Prin intermediul acestuia am reușit să structurez aplicația în funcție de funcționalitate.

View-urile aplicației au fost realizate folosind HTML și CSS, un mare rol asupra lor având platforma de ionic care vine cu cu o adaptare a designului aplicației pentru mobil. Aceasta ține cont de toate aspectele unei aplicații mobile cum ar fi:

să fie responsive,

bară de stare,

alerte,

invocare tastatură.

Accesarea elementelor native s-a făcut prin intermediul ngCordova ce reprezintă un wrapper scris în AngularJS ce poate invocă funcționalitățile native ale telefonului cum ar fi GPS, Finger Scan, Cameră, etc.

Pentru realizarea aplicației mobile o altă variantă ar fi fost ReactJS.Acesta este un framework dezvoltat de Facebook pentru aplicațiile de tip hybrid. ReactJS față de Ionic nu se poate adapta la toate platformele. Acesta nu funcționează după principiul ”Scri o dată…rulează peste tot„.

Pentru aplicația de server-side am ales să folosesc tot limbajul Javascript. Cea mai bună variantă a reprezentat-o NodeJS. Acesta folosește ca și tool pentru librări npm care este foarte extins și ajută în dezvoltarea foarte rapidă a aplicațiilor. Pentru aplicațiile de acest tip există o suită de medii de cloud în care se poate face publicarea aplicației. Cele mai cunoscute exemple sunt reprezentate de Heroku și Openshift dezvoltat de Redhat, acesta din urmă fiind un server bazat pe Linux ce permite conectarea și modificarea fișierelor de pe server. Conectarea se face prin intermediul unei conexiuni de tip ssh.

Am dorit să realizez o conexiune cu o bază de date NoSql, și față de Java și C#, NodeJs prezintă un driver de conexiune la baza de date ce permite executarea mult mai rapidă a query-urilor.

Datorită faptului că predominantă este tehnologia Javascript am ales să folosesc MongoDb ca bază de date datorită faptului că formatul de lucru era reprezentat de Json.

MongoDb nu stochează datele în tabele. Acesta stochează datele sub formă de documente cu format JSON. Este reprezentat prin scheme dinamice în care se reprezintă tipul câmpurilor, indecși prezenți, etc. Limbajul de interogare este reprezentat tot de query-uri și îmbină tehnica de la SQL cu C++.

III.II Descrierea tehnologiilor software utilizate

Aplicația software este scrisă în limbajul Javascript, acesta având o serie numeroasă de framework-uri. Acesta are o serie de proprietăți bine definite, printre care putem enumera evenimenele, metodele de scriere ala documentelor html, crearea de servicii web, crearea de cookie-uri în interiorul browserului.[12]

Scripturile javascript se termină cu extensia .js și se pot insera oriunde în corpul documentului html. Este de preferat să se insereze în interiorul tagurilor <head></head>. Prin inserarea în această zonă scripturile vor fi încărcate până ca pagină să se încarce și va putea oferi o funcționalitate ulterioară destul de rapidă.

Exemplu:

Figura3.2.1 Inserare script in interiorul header-ului html

JavaScript oferă interactivitate în paginile web prin intermediul acestuia putând atribui acțiuni la diverse elemente din pagină web cum ar fi butoane, texte, paragrafe, secțiuni.

Folosind Javascript browser-ul reține în memorie pagină web ca un arbore de obiecte, iar prin intermediul scripturilor se poate citi sau scrie în document. Arborele se numește Document Object model sau DOM. Pentru manipularea unui element din pagină trebuie să avem o referință la elementul respectiv. Se pot obține elementele prin următoarele metode:

prin identificarea după id-ul elementului

Metodă folosită: document.getElementById()

prin identificarea după numele elementului

Metodă folosită: document.getElementByName()

prin identificarea după tag-ul documentului

Metodă folosită: document.getElementsByTagName()

Figura 3.2.2 JavaScript Html DOM [13]

La fel ca și în celelalte limbaje de programare se pot trata excepțiile. Javascript prezintă clasa Error ce poate fi folosită pentru crearea diferitelor tipuri de excepții. Pentru a înlocui blocurile try-catch din Java acesta trebuie să folosească instrucțiuni de condiționare împreună cu instrucțiunea throw.

Exemplu:

Figura 3.2.3 Mod de folosire a exceptiilor in JavaScript

Acesta este unul din cele mai populare limbaje de programare având o rată de utilizare de peste 90% în cadrul aplicațiilor de tip website.

Limbajul Javascript se bucură de asemenea de o documentație bogată dar și de persoane care vor să îl extindă la un alt nivel prin introducerea de noi framework-uri adaptate noilor cerințe.

Exemple de framework-uri:

AngularJS

Jquery

BackboneJS

NodeJS

ExpressJS

Acesta reprezintă un limbaj interpretat. Execuția Javascript este stans legată de un interpretor existent în cadrul browser-ului.

Prin intermediul Javascript se pot crea atât aplicații de tip client-side cât și server-side. Acesta permite crearea de servicii web prin intermediul Ajax. Acesta permite trimiterea de cereri către server prin itermediul protocolului http.

Cum am enumerat mai sus, în momentul actual JavaScript s-a extins printr-o serie de framework-uri ce implementează o suita de modele existențe în cadrul altor limbaje de programare.

Unul din cele mai folosite framework-uri în cadrul aplicațiilor web sau hybrid este AngularJS. Acesta este dezvoltat de compania Google.

Scopul acestui framework a fost de a realiza conceptul de Model-View-Controller.

Figura 3.2.4 Model-View-Controller

Acesta reprezintă un model arhitectural în ingineria software. Acesta are împrumutate principii din logica Java. Acesta are succes datorită izolării elementelor ce definesc business-ul față de alte elemente ale aplicației, interfață cu utilizatorul fiind cea mai importantă de evitat. Folosind acest principiu va rezulta o aplicație cu un aspect vizual foarte ușor de modificat. Bussines-ul poate fi și el modificat la fel de ușor. Celelalte nivele nu sunt modificate la modificarea unui alt nivel.

Angular vine definit cu un set foarte extins de componente pentru realizarea de diverse funcționalități.

Modelul reprezintă baza de cunoștințe. Acesta poate fi reprezentat de un singur obiect sau de către o structură de obiecte. Modelul este reprezentat de HTML. Motivul pentru care a apărut acest framework a fost pentru a aduce în paginile web funcționalitatea de data-binding.

Controller-ul poate accesa diferite camuri din interiorul view-ul prin intermediul modelului. Asta înseamnă că pentru actualizarea unei pagini web nu mai este nevoie de o reîmprospătare datorită faptului că modelul este actulizat la fiecare schimbare ce survine în interiorul controller-ului. Controller-ul face legătura cu view-ul prin intermediu a două elemente. Aceste sunt reprezentate de scope și rootScope. Prin adăugare de proprietăți în interiorul controller-ului și atribuindu-le scope-lui oferim acces view-ului către proprietatea adăugată.

Scope-ul reprezintă un obiect ce conține proprietăți și metode ce sunt accesibile și în interiorul view-ului, dar și în interiorul controller-ului.

În cadrul unei aplicații ce conține AngularJs vom avea de fiecare dată un rootScope, din nume înțelegându-se că reprezintă un scope rădăcină. Chiar asta și este. Prin intermediul lui orice scope intitializat în cadrul unui controller poate fi mai apoi accesat în interiorul altui controller. Acesta se creează prin intermediul directivei ng-app.

AngularJS permite crearea de aplicații de tip SinglePage Application. Există un singur fișier de tip html în care se încărca view-urile dorite la anumite acțiuni ale utilizatorului precum:

redirectarea la altă pagină

schimbarea unei secțiuni

afișarea unui mesaj de eroare

Prin intermediul acestui framework ne bucurăm de o serie de funcționalități precum:

• Servicii

Angular vine predefinit cu un serviciu întâlnit sub formă de $http pentru crearea de cereri de tim XMLHttpRequest.

Acestea reprezintă obiecte de tip singleton și au proprietatea că sunt inițializate doar o singură dată în aplicație

• Directive

Prin intermediul directivelor un dezvoltator ce folosește AngularJS își poate crea propriile lui componente ce pot fi mai apoi reutilizate. Poate avea loc parametrizarea lor în funcție de diferite obiecte de tip scope. Se pot crea tag-uri speciale HTML și widget-uri speciale pentru diverse secțiuni din aplicație. Angular vine predefinit cu o serie de directive precum: ngBind, ngModel, ngStorage.

• Dependency injection

Această component are rolul de a ajuta dezvoltatorul în a înțelege, crea și testa aplicațiile foarte ușor. Componentele precum directivele, filtrele sau serviciile vor fi injectate prin intermediul unei metode asemănătoare unui constructor. Pentru injectarea unei anumite componente se folosește $inject.

Figura 3.2.7 Dependency injection

Ca exemplu putem da următoarea situație: Dorim să injectăm în interiorul unui controller variabila scope și directiva license.

Secțiunea de cod va fi de următoarea formă:

Figura 3.2.6 Injecarea de componente în controller

În cazul validării de câmpuri Angular vine cu 3 componente pentru preluarea erorilor de pe un câmp. Acestea sunt:

$dirty->ne arată că valoarea câmpului s-a schimbat

$invalid->ne arată că ce s-a introdus este invalid

$error->eroare survenită în momentul introducerii

Aceste componente sunt utilizate în special în crearea forumularelor ce trebuie să conțină validări pentru câmpuri de tip email, număr de telefon, data, etc.

Un alt concept interesant folosit în cadrul AngularJS este legat de provideri. Aceștia sunt componente ce pot fi configurate în interiorul aplicației. Aceștia pot fi paramtrizati cu diverse opțiuni.

Exemple:

$routeProviderService → prin intermediul acestuia se setează configurația adreselor prezente în cadrul aplicației. Permite asocierea unui controller cu un anumit view.

Expresiile AngularJS au mai multe forme și permit crearea lor prin intermediul directivelor.

Exemple:

3+4

X+y

User.token

Days[index]

<p title="{{ title }}">{{ title }}</p>

Diagrama de mai jos va pune în vedere toate conceptele din interiorul acestui framework și pe baza acesteia se va alcătui o serie de avantaje și dezavantaje ce intervin în folosirea acestui framework.

Figura 3.2.7 Componente si concepte AngularJS [14]

În prezent există 2 versiuni ale acestui framework, cea mai recentî fiind versiunea 2.

Angular 2 vine cu un concept inedit, acesta folosind Typescript. TypeScript reprezintă un superset al limbajului JavaScript. Cu acesta se poate construi un software mult mai robost, cu o tratare mult mai bună a excepțiilor, având puterea de a induce aplicațiilor conceptul de Cross Platform. Acest concept este valabil și în cadrul proiectului, aplicația fiind disponibilă pe mai multe platforme.

Angular 2 randeaza mult mai rapid view-urile pe mobil, acesta fiind unul din motivele pentru care s-a ales această tehnologie. Lucrează foarte bine cu EcmaScript și alte limbaje ce se pot compila cu JavaScript. Ca dezevantaj se poate enumera faptul că este un framework nou și nu se bucură momentan de un suport foarte mare din partea comunității online. Prin intermediul compilatorului codul typescript va fi convertit în cod javascript. Se folosesc o mulțime de componente, unele dintre ele fiind foarte asemănătoare cu cele prezente în cadrul limbajului Java. Una din aceste componente este reprezentată de adnotări, acestea permițând definirea de elemente din cadrul proiectului cum ar fi:

Componente → @Component

view-uri → @View

Refolosirea de componente în cadrul altei componente se face prin intermediul import.

Exemplu: import { Something } from "angular2/core";

Pentru intalarea pachetelor în cadrul unei aplicații ce prezintă typescript se folosește modulul npm.

Dependency injection menține instantele serviciilor și poate fi creat folosind un provider, aceasta fiind calea spre crearea unui serviciu. Se pot înregistra serviciile mai apoi folosind injectori.[16]

Ionic framework reprezintă un proiect open-source pentru dezvoltarea aplicațiilor de tip hybrid, oferind servicii și componente bazate pe tehnologii web. Este contruit după principiul AngularJS și Apache Cordova. Acesta poate fi distribuit în magazinele de aplicații, putând oferii și funcționalități native în cadrul aplicațiilor. Ionic vine cu o serie de componente foarte puternice, dezvoltatorul putând crea un proiect doar printr-o simplă comandă. Cu ajutorul acestui framework se pot crea aplicații atât Android cât și iOS. Versiunea a doua de Ionic vine cu suport pentru crearea aplicațiilor pentru sistemul de operare Windows 10.

Ca și performanță, prin intermediul AngularJS Ionic dispune de un factor de accelerare hardware.

Ionic reprezintă un modul npm și de aceea necesită NodeJS pentru instalare. Toate componentele sunt hostate pe un repository de Github. Prin intermediul acesteia oricine e dornic poate să ajute la buna dezvoltare a acestor componente. Ionic vine construit cu o platformă online ce permite diverse servicii precum autentificare, push notification. La un număr mai mare al acestor cereri acestea se plătesc. În cadrul acestei platforme se pot adaugă cheile pentru funcționalitățile oferite de provideri precum Google, Facebook, Apple pentru obținerea unor diverse funcționalități native.

Exemplu: Pentru pornirea servicililor de push notification avem nevoie de o cheie venită de la FirebaseCloudMessaging pentru înregistrarea id-ului device-ului în cadrul platformei Android, și de certificatele provenite de la Apple pentru activarea serviciului pe platforma iOS.

Platforma oferă servicii de autentificare de tip OAuth2. Prin OAuth2 utlizatorii se pot înregistra în aplicație prin intermediul conturilor existente de la Google, Facebook, Twitter, etc.

Platformele pe care rulează aplicația sunt reprezentate de Android, iOS respectiv Windows Phone.

Android reprezintă un sistem de operare pentru dispozitive mobile, acesta fiind dezvoltat și menținut de compania Google. Acesta este conceput pe baza unui nucleu de tip Linux de aici rezultând că dezvoltatorii au acces pentru a putea dezvolta funcționalități noi. Aceste funcționalități pot fîn dezvoltate prin intermediul limbajului Java.

Ultima versiune a Android este versiunea 7.0 Nougat lansată de Google în anul 2016. Oferind un set mare de funcționalități și o interfață foarte spectaculoasă și bine adaptată device-urilor Android a crescut progresiv în vânzări de la o cotă de 9.6% cu 36% în decursul anului 2011.[17]

Despre sistemul de fișiere putem spune că este foarte prietenos deoarece Android oferă acces asupra fișierelor. Acest sistem dorește să lase utilizatorilor o libertate foarte mare în personalizarea dispozitivului achiziționat. Dispozitivele bazate pe sistemul de operare Android se bucură de o popularitate mai mare în rândul utilizatorilor, aceștia putând alege dintr-o diversitate mai mare de dispozitive.

Pentru dezvoltarea de aplicații acesta vine împreună cu IDE-ul Android Studio, ce oferă funcționalitățile necesare pentru implementarea de funcționalități și algoritmi. Acesta oferă suport pentru interfață aplicației, acesta putând genera din interfață cod. Un alt element semnificativ al sistemului Android îl reprezintă emulatorul ce permite testarea aplicațiilor într-un mediu ce se aseamănă foarte mult cu un dispozitiv de tip mobile. Acesta nu dispune de toate funcționalitățile unui dispozitiv mobil, de aceea multe dintre funcționalitățile native ale unei aplicații trebuiesc testate pe un dispozitiv fizic.

Mediu de dezvoltare Android mai cuprinde o componentă foarte importantă. Aceasta este reprezentată de emulator care permite rularea unei aplicații într-un mediu ce imită un dispozitiv mobil. Acesta poate fi configurat în mai multe feluri imitând diverse tipuri de performanțe. Versiunile de Android sunt disponibile și pentru emulator și se pot face teste pentru funcționalitățile implementate. Emulatorul nu suportă toate elementele unui device mobile. Funcționalități precum geolocatie ,notificări de tip push, sau amprentă nu pot fi testate în cadrul emulatorului și necesită un dispozitiv fizic.

Android este un sistem de operare mobil foarte popular în rândul utilizatorilor atât pe partea de achiziție a dispozitivelor cât și pe partea de interfață ce o aduce utilizatorului.

Figura 3.2.8 Distribuții Android în funcție de versiune

Rivalul sistemului de operare Android este reprezentat de iOS. Acesta reprezintă ca și Android un sistem de operare mobil, ce este dezvoltat și menținut de firma Apple.

iOS este ca și Android, tot un sistem de operare bazat pe kernel Unix, dar este mai special deoarece nu este open-source. Apple dorește să restricționeze accesul utilizatorului la kernel-ul sistemului de operare pentru a nu pune în pericol modul de funcționare. Această companie se bazează foarte mult pe funcționalitatea produselor, de aici reieșind și popularitatea de care dau parte în rândul utilizatorilor. Politica de securitate impusă de Apple este foarte strictă dorind să păstreze confindențialitatea utilizatorilor. Comapania își produce singură piesele pentru dispozitivele create.

iOS poate rula pe mai multe tipuri de dizpozitive precum smartphone-uri, tablete, sau media playere portabile. Pornind de la versiunea 5.0 a iOS pentru update-ul software-ului este necesar iTunes. Ultima versiune anunțată de Apple este versiunea 11. Sistemul de operare este disponibil în 40 de limbi și prezintă un nucleu de tip hybrid sau XNU. Se remarcă printr-o suită de platforme precum:

ARMv8-A → pentru dispozitive ce rulează iOS 7 sau mai mult

ARMv7-A → pentru dispozitive ce rulează până la versiunea 10

ARM-V6 → pentru dispozitive ce rulează iOS până la versiunea 4.2.1

Versiunea 10.3 vine cu un nou sistem de fisiere intitulat APFS(Apple File System). Salvarea fisierelor va avea loc pe unități solid state, prin intermediul acestora micșorându-se efectiv timpul de citire sau salvare a unui fisier. Un alt element de îmbunătățire îl reprezintă criptarea, Apple dorind să ofere integritate datelor.

Pentru dezvoltarea aplicațiilor ce rulează pe acest sistem de operare se folosesc o suită de componente, pașii pentru punerea in Apple Store a aplicației fiind un proces de durata ce trece printr-o suită de etape. Un element extrem de important îl reprezintă partea de securitate pe care Apple o oferă dezvoltatorilor prin intermediul certificatelor și profilelor de provisionare.

Cu acestea se știu dezvoltatorul aplicației și se verifică la fiecare pas identitatea acestuia. Un alt element important în dezvoltare este reprezentat de programul xcode care reprezintă mediul de dezvoltare împreună cu sistemul de operare. Acesta stochează profilele de securitate și oferă funcționalități de debugging, de monitorizare a resurselor dispozitivului în timp real. Profilele de securitate sunt de 3 tipuri:

Dezvoltare → cu acest profil se dezvoltă funcționalități fără posibilitate de punere în producție

Adhoc → se aseamănă foarte mult cu profilul de producție doar că nu se pretează la punerea în mediul online.Se folosește pentru testarea unor funcționalități ce depind de certificate

Producție

Acesta comunică foarte bine cu sistemul de operare. Prin intermediu xCode se poate pune efectiv aplicația în mediul online. Pașii pentru dezvoltarea și punerea în producție a unei aplicații se pot observa și în diagrama de mai jos:

Figura 3.2.8 Pasi distributie iOS [18]

Pașii pentru distribuția unei aplicații sunt aceeași pentru orice tip de aplicație fie ea hybrid sau nativă. La publicarea aplicației Apple are niște teste foarte succinte în ceea ce o privește și de aceea aplicația trebuie să urmeze o serie de standarde impuse. Ceea ce este mai interesant este că există efectiv o parte umană care testează aplicația la fiecare pas.

În concluzie, aceste sisteme de operare sunt foarte bine organizate și menținute de companiile ce doresc să ofere o experiență cât mai plăcută.

Cordova reprezintă un framework pentru dezvoltarea aplicațiilor mobile. Acest frameowrk dă programatorilor posibilitatea de a crea aplicații mobile prin intermediul HTML, CSS și JavaScript cu posibilitatea funcționării pe mai multe sisteme de operare mobile precum Android, iOS sau Windows Phone. Cordova extinde funcționalitățile HTML și Javascript pentru a le face să lucreze efectiv cu dispozitivul. Prin dezvoltarea unei aplicații cu acest framework va rezulta o aplicație de tip hybrid ce se va vedea ca o aplicație nativă doar că aceasta este rulată în interiorul unui webview.

În trecut acest framework era cunoscut ca și Phonegap. Este open-source și pentru el se pot găsi o mulțime de funcționalități gata implementate de oameni din toată lumea. Multe persoane văd puterea de care poate să fea dovadă acest framework și potențialul de a oferi un mediu cât mai bun în ceea ce privește aplicațiile hybrid.

Cordova este dezvoltat în mai multe limbaje de programare pentru a oferi suport pe mai multe platforme. Aceste limbaje sunt:

C#, C++;

CSS, CSS3, HTML, HTML5;

Java;

JavaScript;

Objective C.

Cordova are dezvoltate platforme pentru fiecare sistem de operare mobil, iar la realizarea aplicației dezvoltatorul importă platforma de care are nevoie pe mediul de lucru. Acest framework face parte din pachetul npm și ca dependință vine cu nodejs. Acesta este necesar pentru instalarea tutorol dependințelor prezente în aplicație, cum ar fi platforme ce trebuiesc instalate, plugin-uri sau librării. Acestea se memorează în fișiere de tip json precum package.json, ios.json, android.json sau bower.json. Pentru instalarea pe device cordova împachetează aplicația într-un singur fișier. Acesta are extensie diferită în funcție de platformă. Aceste fișiere se deosebesc în funcție de extensie și anume:

iOS → .ipa(iphone Application Archive)

Android → .apk(Android Application Package )

Windows Phone → .xap(Silverlight Application Package)

Ultima versiune stabilă în acest moment este versiunea 6.1.0.[19]

Modul în care lucrează acest framework este explicat și în imaginea de mai jos

Figura 3.2.9 Modul de funcționare al framework-ului Cordova

Node.js reprezintă o platformă scris în Javascript ce este folosit ca limbaj pentru zonă de server side. Acesta este populat cu diverse dependințe prin intermediul pachetelor din modul de npm.

Node .js este contstruit pe bază Google Chrome JavaScript Engine versiunea 8. Acesta folosește un model non-blocking I/O, de aici rezultând o eficiență mai mare, oferind mediul perfect pentru aplicații în timp real ce rulează pe diferite dispozitive. Poate fi rulat pe mai multe sisteme de operare precum OS X, Microsoft Windows și Linux. Acesta se folosește de 2 componente:

mediu de execuție,

librărie JavaScript.

Cele mai importante funcționalități cu care vine NodeJS sunt :

Evenimente asincrone coduse:

Toate librăriile Node.js sunt asincrone și non-blocante. Un server creat cu Node.Jjs niciodată nu așteaptă un api să retuneze date. Server-ul apelează următorul api și printr-o notificare se întoarce la api-ul anterior când acesta este disponbil pentru oferirea datelor.

Rapiditate în execuție

Organizare tip single-thread de scalabilitate înaltă

Mecanismul de evenimente ajută sever-ul să răspundă cererilor într-un mod non-blocant. Organizarea de tip single-thread ajută la procesarea unui număr mai mare de cereri

Licență

Node.js este înregistrat sub licență MIT. Node.js se pretează ca server pentru aplicații de tip Single Page Application, aplicații bazate pe JSON api, aplicații de tip Data Intense Real-time Applications(DIRT).

Pentru comunicare în timp real se folosesc o serie de librării bazate pe web-socketuri ce fac legătură automat între client și server. Cea mai cunoscută librărie pentru Node.js ce oferă o astfel de funcționalitate este reprezentată de Socket.io. La baza Node.js au apărut de asemenea o serie de framework-uri pentru îmbunătățirea și extinederea unor funcționalități. Cel mai cunoscut framework de Node.js este reprezentat de Express.js, acesta fiind reprezentat sub formă unui modul npm.Npm sau Node Package Manager oferă două functonalitati majore și anume:

repository online pentru pachete bazate pe Nojde.js

utilitar de tip command line pentru instalarea pachetelor Node.js,management-ul dependințelor și managementul versiunilor.Pentru instalarea uni pachete se folosește următoarea comandă:

npm install <package_name>

Conceptele Node.js sunt ilustrate în diagrama de mai jos:

Figura 3.2.10 Concepte Node.js [20]

Pentru Node.js evenimentele emise sunt cruciale. Datorită lor se propagă alte funcționalități fără a ține în loc un anumit proces. Acestea se reprezintă prin clasă EventEmitter și din aceasta se pot dezvolta două concepte și anume: Emmiter și Listener. Toate aceste acțiuni se fac la nivel de aplicație.

Un modul foarte important în cadrul Node.js este reprezentat de modulul fs care are o rapiditate foarte mare în citirea și scrierea fișierelor. Acesta se folosește pentru aplicații ce conțin salavare sau citire de documente și operează la nivel de bit. Metodele din cadrul modulului pot fi de tip asincron sau sincron.

MongoDb reprezintă o bază de date de tip NOSQL ale cărui documente sunt reprezentate sub formă de BSON.Toate driverele pentru acest tip de bază de date sunt create cu C++. Colecțiile din cadrul bazei de date sunt definite prin intermediul unor scheme. Schemele sunt definite pe server-ul ce face conexiunea și operațiile către baza de date. Documentele prezente în baza de data mongo nu mai necesită join.

Știind că indexarea reprezintă o operație utilizată în cadrul bazelor de date pentru a mări rapiditatea query-urilor MongoDb vine de asemenea cu un suport pentru indexare, indecși prestabiliți fiind sub formă de UUID, MongoDB garantând unicitatea lor. MongoDB oferă o flexibilitate mai mare în formarea câmpurilor în cadrul tabelelelor și o mapare mult mai ușoară. Se folosește foarte mult în cadrul aplicațiilor ce folosesc JSON API.

Figura 3.2.11 Arbore structura MongoDB

Operațiile specifice în cadrul MongoDB sunt asemănătoare cu cele din SQL doar că operează la nivel de BSON și au o structură diferită. Putem enumera următoarele exemple:

$set → setarea unui câmp cu o valoare dată

Db.collection.update({_id:id},{$set:{camp:campnou});

$inc → incrementarea unui câmp de tip număr cu o valoare

Db.collection.update({_id:id},{$inc:{camp:valoare}})

$push → adăugare valoare nouă unui câmp specificat

Db.collection.update({_id:id},{$push:{camp:campnou});

$addToSet → adăugare valoare în cadrul unui câmp de tip Array

Db.collection.update({_id:id},{$addToSet:{camp:campnou});

$pop → eliminare a unui câmp din cadrul unui Array

Db.collection.update({_id:id},{$pop:{camp:1 }) → ștergerea primului element din Array-ul câmp

Db.collection.update({_id:id},{$pop:{camp:-1 }) → ștergerea ultimului element din Array-ul câmp

$pull → ștergerea tuturor elementelor dintr-un array care sunt egale cu un câmp dat

Db.collection.update({_id:id},{$pull:{camp:campnou});

MongoDb prezintă 2 concepte pentru operații de procesare batch, agregare și stocarea fișierelor de dimensiuni mari. Acestea sunt reprezentate de Map Reduce și GridFS
Fata de MySql Mongo prezintă o serie de modificări din punct de vedere arhitectural elementele componente ale bazei de date luând alte denumiri.

Exemple:

_id → cheia primară

Document de tip BSON → rând

Camp BSON → coloană

Colecție → Tabelă

MongoDb oferă utilizatorilor un suport foarte mare prin multitudinea de tutoriale și documentații disponibile atât sub format electronic cât și sub formă de cărți.

MongoDb este disponibil pe platformele Microsoft Windows, Linux și OSX.

Ca și client pentru baza de date, MongoDB vine cu utilitarul RoboMongo ce poate fi utilizat pentru interogarea bazei de date, stabilirea conexiunilor, si o vedere mult mai structurată a valorilor câmpurilor prezente în baza de date.

Exemplu:

Figura 3.2.12 Interfata RoboMongo

MongoDB este bazat pe teoria Nexus.Acesta îmbină particularitățile bazelor de date relaționale cu elementele de inovație ale tehnlogiilor NOSQL. MongoDB vine cu suport și pentru operații la nivel geospatial prin intermediu indecșilor spațiali. Aceștia sunt reprezentați prin tipul 2d.

Pentru deployment-ul bazei de date se folosesc diverse cloud-uri displonibile online cum ar fi Mlab sau Openshift. Acesta din urmă prezintă caracteristici speciale, datorită faptului că pentru fiecare mediu există câte un cartridge separat, cu versiuni compatibile. Costurile pentru menținerea unei baze MongoDb sunt foarte mici, acestea depinzând de dimensiunea bazei de date. Dimensiunea bazei de date poate fi foarte ușor setată, Mongo oferind acest stil arhitectural.

În diagrama de mai jos se exemplifica motoarele de stocare ale MongoDb.

Figura 3.3.13 Motoare de stocare MongoDB [22]

Din diagrama de mai sus observăm că procesul de stocare se desfășoară între 2 nivele. Aceste nivele sunt reprezentate de nivelul de securitate și nivelul de management. Nivelul de securitate se ocupă cu operațile de autentificare, criptare și decriptare în timp ce nivelul de management se ocupă de administrarea bazei de date, acesta conținând operații la nivel de utilizator și administratori.

MongoDB suportă compresia nativă, prin această operație reducându-se spațiul fizic cu aproximativ 80%. Administratorii au libertatea de a iniția orice algoritm de compresie dorit, în funcție de performanțele ce se doresc a fi atinse.

III.III Descrierea echipamentelor hardware utilizate

Arduino Uno reprezintă o placută ce oferă suport pentru diverse operații cum ar fi :

Comunicație serială,

Comandă PWM,

Comunicații analogice și digitale de tip I/O

Aceasta este bazata pe un microcontroller Atmel pe 8 biti. Acesta face parte din famiia AVR și mai poartă numele și de Atmega328P.

Placuta Arduino este formată din mai multe module. Acestea sunt:

Modul de alimentare

Modul serial-USB

Pe placuța sunt disponibile 2 serii de conectori, aceștia oferind suport pentru alimentare externă la 5 și 3.3V, porturi digitale și analogice.

Modulele se pot reprezenta prin următoarea figură:

Figura 3.3.1 Organizare componente Arduino [23]

Microcontroller-ul Atmega328 prezintă o arhitectură de tip RISC și face parte din familia Atmel AVR. Performanțele atinse de acesta se ridică până la 1MIPS per MHz. Frecvența maximă pe care o poate atinge este de 20MHz. și este organizat în 32 de registre reprezentate pe 8 biti. Acestea se folosesc în uz general. Acesta prezintă trei tipuri de memorie:

Memorie flash->32KB

Memoria SRAM->1KB

Memorie EEPROM->2KB

Figura 3.3.2 Organizare pini ATmega328

Figura 3.3.3 Arhitectura Arduino[24]

HC-05 reprezintă un modul bluetooth foarte ușor de utilizat pentru adoptarea în cadrul unui proiect a funcționalității de tip Bluetooth SPP. Acesta folosește sistemul CSR Bluecore 04-External ce prezintă tehnologia CMOS cu frecvență de încărcare adaptabilă.

Ca specificații tehnice se pot enumera:

Sensibilitate de -80dBm

Până la 4dBm RF putere de transmitere

Interfață UART

Antenă integrată

Conector de tip edge

Tensiune de alimentare 3.3V sau 5V

Figura 3.3.4 Descriere pini HC05[24]

Portul PIO8 este folosit pentru a controla LED-ul ce indică starea în care se află conexiunea cu dispozitivul.

Portul PIO9 este folosit pentru a indica momentul în care se face pereche cu un alt dispozitiv bluetooth.

Portul PIO11 este folosit pentru setarea a doua moduri pentru HC-05 și anume:

Modul de tip comandă AT dacă pinul este conectat la 3.3V

Automatic binding dacă pinul este conectat la GND

Gama de senzori MQ este folosită pentru monitorizarea diferitelor tipuri de gas din mediul ambiant. Senzorii folosiți sunt:

MQ2

MQ4

MQ7

SNS-MQ135

MQ2 este un senzor de fum și gaze inflamabile. Acesta poat detecta gas cu concentrații între 300 și 10000ppm. Acest senzor prezintă o sensibilitate foarte mare la gaze de tip combustibil, LPG, Propane și Hidrogen.

Rezistența senzorului are următoarea valoare exprimată prin intermediul formulei:

*RL

Figura 3.3.5 Senzor fum și gaze inflamabile

MQ4 este un senzor folosit la măsurarea de gaz metan. Are o mare sensiblilitate la CH4 și gaze naturale, dar o sensibilitate mică la alcool și fum. Poate fi alimentat la 5V și oferă un răspuns rapid. Poate fi folosit în industrie pentru detecția CH4, gaze naturale, LNG.

MQ7 este un senzor folosit pentru detectarea concentrației de monoxid de carbon. Acesta prezintă o conductivitate mare împreună cu creștera concentrației de gaz. Când valoarea temperaturii este mare acesta curăță celelalte gaze absorbite la temperatură scăzută.

Figura 3.3.6 Senzor MQ7

SNS-MQ135 este un senzor ce poate detecta NH3, Nox, alcool, benzen, fum și CO2. Acesta operează la o tensiune de alimentare de 5V și un curent de 40 mA.

Figura 3.3.7 Senzor MQ135

Senzorul de temperatură LM50 este folosit în cadrul proiectului pentru măsurarea temperaturii din mediul ambiant. Acesta poate detecta temperaturi între -40 de grade și 125 de grade. Acesta operează la tensiuni între 4.5 și 5V. Poate fi folosit în cadrul dispozitivelor medicale portabile sau computere.

Figura 3.3.8 LM50

4.Proiectarea sistemului embedded

IV.I Proiectarea sistemului

În proiectarea sistemului am folosit placuța Arduino Uno și toți senzorii enumerați în cadrul capitolului III.III.

Dispozitivul trebuie purtat de o persoana într-un loc convenabil ales. Acesta are posibilitatea de atașare. Pentru a oferi portabilitate sistemului am folosit o alimentare prin intermediul unei baterii de 9V. Sistemul are capabilitatea de a transmite un semnal de alarmă dacă bateria este la un voltaj mai mic.

TODO:poză dispozitiv desfăcut + poza dispozitiv împachetat + schemă descriptivă

IV.II Testare funcționalități

Pentru testarea funcționalităților am afișat datele citite de la porturile analogice în cadrul consolei serial. Pentru fiecare senzor am inițiat acțiuni de modificare a parametrilor ce îi măsoară și prin asta am observat schimbările ce surveneau asupra valorilor.

//TODO ..poza consolă serial cu valorile citite de la senzori..poza cu mediu de incercare de modifcare a parametrilor

Implementarea aplicației software

V.I Arhitectura aplicației

Aplicația după cum am descris mai sus este de tip hybrid având la bază componentele descrise în cadrul capitolului III.II. Astfel putem ilustra următoarea diagramă care să ne ofere concret arhitectura aplicației, în funcție de tehnologiile alese.

Figura 5.1.1 Mod de comunicație al aplicației

Din diagramă se poate observa modul de comunicare în cadrul aplicației prin intermediul rețelei internet.

Figura 5.1.2 Arhitectura aplicației

În figura de mai jos putem observa structura aplicației mobile în IDE-ul IntellijIdea.

Figura 5.1.3 Structura aplicației

V.II Implementarea aplicației

În cadrul implementării aplicației am folosit toate resursele prezente în cadrul diagramei 5.1.2 din cadrul secțiunii de mai sus. S-a tinut cont de toate conceptele necesare unei aplicații de tip mobile cum ar fi :

autentificare

creare cont utilizator

//TODO poze from device

V.III Testarea aplicației

În cadrul testării aplicației s-a pus foarte mult accent pe zona de alarme, acestea reprezentând unul din obiectivele principale ale proiectului.

Un alt obiectiv al testării a fost oferirea funcționalităților pentru fiecare tip de utilizator. Aceștia nu trebuie să acceseze alte funcționalități în afară de cele propuse pentru fiecare dintre ei. De aceea pentru exemplificare am atașat următorul tabel ce ajută la bifarea funcționalităților pentru fiecare tip de utlizator în parte.

Lider de echipa:

Muncitor în cadrul unei echipe:

Mod de folosire individual:

Studiu de caz

Aplicația hybrid din cadrul sistemului prezintă un modul de autentificare și creare a contului de utilizator, în funcție de modul de folosire al sistemului.

Figura 6.1 Ecran principal Figura 6.2 Opțiuni autentificare

În cadrul opțiunii de creare cont se va deschide o fereastră în care utilizatorul își va introduce datele personale și modul în care va folosi sistemul.Formularul prezintă validări pentru valorile introduse în câmpuri, pentru a nu produce inconsistențe de date pe parcursul folosirii aplicației. Dacă persoana care folosește aplicația reprezintă un lider de echipă din cadrul unei companii acesta trebuie să selecteze opțiunea ”Teamleader of a team„ și să introducă CUI-ul aferent companiei în care își desfășoară activitatea. În cazul în care compania nu este înregistrată acesta completează un formular pentru înregistrarea acesteia în sistem.

Figura 6.3 Creare cont Figura 6.4 Adăugare companie

După introducerea datelor contul utilizatorului este creat și acesta este redirectat mai departe către pagina de știri din cadrul companiei. Rolul acestei pagini este de a oferi un mediu interactiv în cadrul companiei în care utilizatorii aplicației pot posta diverse activități, evenimente, etc.

După redirectare meniul inițial s-a schimbat și au apărut o serie de opțiuni noi pentru utilizator.

Figura 6.5 Pagină adaugare știri Pagina 6.6 Meniu aplicație

Prin navigarea în diferitele pagini ale aplicației, dacă selectam opțiunea Functions vom intra în pagina ce conține opțiuni pentru monitorizarea parametrilor din mediul înconjurător. Această pagină conține efectiv functionalitatiile necesare pentru monitorizarea în timp real cât și opțiunea pentru o singură scanare. Se poate observa lista cu dispozitivele bluetooth asociate dispozitivului mobil.în cadrul graficului se poate observa că elementele din cadrul legendei pot fi marcate sau demarcate pentru o mai bună vizualizare a caracteristicilor dorite.

Pagina conține și o serie de elemente de tip input ce afișează valorile actualizate în cadrul măsurării de orice tip(real time sau single time).

Figura 6.6.7 Pagina Functions 1 Figura 6.6.8 Pagina Functions 2

Figura 6.6.9 Conectare sistem Figura 6.6.10 RTS activat

În figura 6.6.10 putem observa momentul activării monitorizarii in timp real.

RTS=Real Time Scan

În momentul începerii monitorizării datele se trimit către server pentru a fi prelucrate.În cazul detecției unor valori mari peste limita normală,se emite o notificare(alarmă ) către liderul de echipă și muncitor în care se enumeră toate pericolele ce persistă în mediul sau. Alarmă pe dispozitivul mobil constă într-o notificare la care vibrația atașată dureza 5 secunde.Această durată poate fi reconfigurata.

Figura 6.6.9 Notificare in caz de pericol Figura 6.6.10 Notificare pe dispozitiv mobil

Figura 6.6.13 Creștere nivel fum Figura 6.6.14 Caracteristica creștere nivele

Opțiunea numită „Planning„ ne deschide o pagină, în care un lider de echipă sau muncitor are posibilitatea de a-și vedea echipele în care își desfășoară activitatea la momentul curent. Prin vizualizarea echipei se vor afișa membrii prezenți în cadrul acesteia și lista de activități. Utilizatorul are prezente 2 funcții în cadrul fiecărui muncitor din echipă, acesta acesta având posibilitatea de apelare și trimitere sms.

În cazul în care un utilizator a fost adăugat de către un lider acesta primește o notificare în care i se anunța această acțiune.În corpul notificării se precizează echipa în cadrul căreia își va desfășura activitatea în continuare.

Liderul de echipă poate vizualiza datele monitorizate ale fiecărui membru al echipei sale.Se pot detecta eventualele pericole din mediul angajațiilor.

Activitațiile cuprinse în listă sunt valabile pe o anumită perioadă,liderul de echipă fiind cel ce actualizează toate activitațiile din cadrul echipei.

Figura 6.6.15 Echipe din cadrul planificării Figura 6.6.16 Adăugare echipă

Figura 6.6.17 Vizualizare planificare echipă Figura 6.6.18 Vizualizare listă activități

Activitățiile din cadrul echipei se compun din mai multe componente. Liderul de echipă adaugă un nume activității, o locație de desfășurare și o serie de remarci pentru o mai bună înțelegere a activității respective. Activitatea prezintă o dată de valabilitate, aceasta fiind cuprinsă între 2 perioade de timp alese de liderul de echipă.

Figura 6.6.19 Adăugare activitate nouă Figura 6.6.20 Vizualizare date muncitor

În cazul în care un muncitor din cadrul unei echipe vizualizează planificarea, acesta nu poate adauga alte persoane și nu poate vizualiza datele altui utilizator. Acesta va fi redirectat către pagina de profil a muncitorului selectat.

Figura 6.6.21 Pagină Profil utilizator

Opțiunea Personal Data oferă utilizatorului acces la toate înregistrările avute în decursul folosirii sistemului. În această pagină se poate alege popularea primului grafic cu datele din decursul unei zile. Pot exista cazuri în care cineva are probleme respiratorii și vrea să investigheze dacă problema se datorează mediului de lucru. În funcție de datele salvate acesta benficiaza de opțiunea GetAdvice ce oferă utilizatorului o serie de remarci pentru a putea da o serie de informații utiliazatorului despre metodele pe care trebuie să le aplice pentru a evită eventuale complicații pe cale respiratorie.

Figura 6.1.22 Date personale Figura 6.1.23 Primire sfat

Mai jos se poate observa dispozitivul precum si o marcare a componentelor folosite in cadrul proiectului.

//Poza cu dispozitivul impachetat

Concluzii

Sistemul dezvoltat poate avea un rol deosebit în cadrul fiecărui mediu de lucru. Acesta aduce un plus de siguranță muncitorilor mai ales prin faptul că se va ști întotdeauna când o persoană se află în zona unui pericol. Cele mai multe accidente se întâmplă din cauza neglijenței personalului.

Putem preciza de altfel că acest sistem vine înglobat și cu o modalitate de lucru nouă în cadrul unei echipe, datorită faptului că se pot organiza evenimentele într-un mod diferit, liderii de echipă având responsabilitatea pentru desfăsurarea și crearea tutoror evenimentelor. Prin sfaturile aplicației, utilizatorul își poate luă măsuri de precauție pentru mediul de lucru și cunoaște în același timp pericolele la care este supus în decursul fiecărei zi de muncă.

Se oferă astfel utilizatorilor o aplicație ce poate rula la nivel multi-platform, fiind disponibilă pe toate platformele mobile, dar putând fi foarte ușor adaptabilă și în navigatorul web. Datorită lansării noii versiuni de Angular și puterea de procesare a noilor device-uri gradul de performanță nu mai reprezintă o problemă. Serviciile din cadrul aplicației sunt de o rapiditate mare. Costurile de producție pentru acest sistem sunt mici, înglobând un număr mare de funcționalități.

Prețul senzorilor este relativ mic și nu oferă impedimente în găsirea lor. Un punct mai complex îl reprezintă calibrarea acestora, fiind nevoie de 24 de ore de funcționare continuă pentru măsurări cât mai exacte. Asamblarea sistemului embedded este una de bază, aceasta putând fi optimizată la un nivel mult mai mare. Asupra sistemului se pot aduce oricând îmbunătățiri și funcționalități noi acesta reprezentând în momentul de față, un proiect open-source ce oferă servicii gratuite.

Se pot aduce și funcționalități care mai apoi să poată fi monetizate în cadrul unei companii.

Similar Posts