Senzorul Inteligent
Cuprins
Introducere
Lucrarea are ca temă realizarea unui sistem de avertizare / notificare în cazul accidentării cu bicicletă, folosind un senzor inteligent atașat pe casca biciclistului, care se află în legătură cu un telefon de tip "smart". Prin intermediul telefonului mobil se trimite un mesaj de notificare către un număr predefinit cu coordonatele geografice actuale ale biciclistului în momentul în care s-a întâmplat accidentul.
Lucrarea prezintă considerații teoretice cu privire la pierderea conștiinței în urma unei lovituri asupra capului, justificând importanța sistemului senzor-smartphone, apoi descrierea realizării senzorului inteligent și software-ul aferent, inclusiv aplicația smartphone.
Fiind o persoană pasionată de ciclism m-a inspirat să concep acest aparat și aplicație, care are ca scop îmbunătățirea siguranței practicanților acestui sport captivant.
Capitolul 1:
Traumatismele cranio-cerebrale, care pot să apară în urma loviturilor la cap.
Cele mai răspândite traumatisme cranio cerebrare, care pot să apară în urma loviturilor la cap sunt comoția si contuzia cerebrală, ambele pot avea efecte grave asupra sănătății omului.
Șansa de accidentare, în urma căreia pot apărea aceste traumatisme este ridicată în cazul activităților sportive.
1.1:Comoția Cerebrală
Comoția este leziunea cerebrală cauzată de un traumatism la nivel cranian sau la nivelul întregului corp. Este cea mai usoară leziune cerebrală primară apărută după un traumatism și este rezultatul forțelor mecanice asupra craniului și creierului în momentul impactului. În urma traumatismului se produc modificări temporare ale fiziologiei neuronale.
Comoția poate determina pierderea temporară a stării de conștiență sau amețeală, dar poate exista si fără manifestare clinică. După repaus, majoritatea pacienților se refac în totalitate în decurs de câteva ore până la câteva săptămâni.
In puține cazuri comoțiile cerebrale pot duce la tulburări grave și amenințătoare de viată. Comoțiile repetate sau severe necesită intervenție neuro-chirurgicală și pot cauza tulburări de mers, probleme de învățare sau de vorbire. Datorită posibilității de producere a unor leziuni neuronale profunde și permanente, comoțiile severe necesită consult medical de specialitate.
Țesutul cerebral este protejat de către lichidul cefalorahidian (LCR) si cutia craniană. Substanța nervoasă pluteste în LCR, dacă se aplică o lovitură la nivelul capului, creierul se deplasează în întregime simultan, astfel că practic nici o porțiune a creierului nu va fi strivită prin lovitură. Totuși, în conditiile unei lovituri puternice, creierul prezintă leziuni de decelerație și se produce o scurtă perioadă de pierderea stării de conștiență datorată întreruperii funcției neuronale.
Cauzele comoțiilor sunt multiple:
sporturi dure de luptă
căderi de la înălțime
loviri la locul de joacă
accidente de mașină
căderi de pe bicicletă.
Nu este ușor întotdeuna să se identifice simptomele de comoție cerebrala. Nu toți pacientii care au comoție cerebrală își pierd conștiența. Persoana care a suferit o comoție trebuie să-și întrerupă activitatea sau sportul care a produs lovirea. Reluarea activității înaintea recuperării funcționalității normale a creierului crește riscul instalării unor leziuni cerebrale severe. Comoțiile pot fi ușoare, moderate sau severe, în funcție de gravitate, simptomatologia persistă ore, zile săptămâni sau chiar luni. Persoana care a suferit o comoție cerebrală are următoarele simptome:
pierderea conștienței
amnezie anterogradă (nu-și aduce aminte ce s-a întâmplat după lovitură)
confuzie, răspunde inconsecvent la întrebări, pronunțarea neclară a cuvintelor, lipsa de concentrare
amețeala, zăpăceală, vedere încetoșată sau cu puncte luminoase sau tinitus (tiuituri în urechi)
imposibilitatea menținerii poziției ortostatice (nu poate sta în picioare), incapacitatea de a merge sau lipsa coordonării, pierderea echilibrului
senzație de greată, vărsături.
Diagnosticul de comoție cerebrală este mai greu de pus în cazul în care pacientul este copil. Părinții unui copil cu traumatism craniocerebral trebuie să se adreseze imediat medicului.
Foarte rar, persoanele care au suferit o comoție mai severă vor dezvolta simptomatologie după o perioadă de timp sau se va înrautăți starea de sănătate apărând sindromul post-comoțional caracterizat de:
modificarea abilităților cognitive, concentrare slabă, probleme de memorie
cefalee sau vedere încetoșată
modificări ale personalității: irascibilitate sau anxietate nejustificată
modificări ale ritmului somn-veghe
pierderea interesului pentru activitățile cotidiene
pierderea libidoului
pierderea gustului sau a mirosului
senzație ca obiectele din jur se învârt sau ca persoana se învârte sau cade în gol (vertij); vertijul provoacă amețeală si vomă
pierderea echilibrului sau a capacității de a sta în picioare.
1.2 Contuzia Cerebrală
Contuzia cerebrală reprezintă un efect posttraumatic imediat si primar, având un substrat lezional organic. Se manifestă prin pierderea stării de conștiență pe durată variabilă, fiind însoțită de semne neurologice si tulburări vegetative. Contuzia cerebrală este cauzată prin lovitură directă sau prin contralovitură, la fel ca și comoția, numai că în acest caz există și leziuni organice ale creierului. Poate să apară atat în urma unui traumatism închis, cât și în urma unui traumatism deschis.
Din punct de vedere anatomopatologic, substratul contuziei este organic, fiind prezente tulburări vasculare ce apar precoce și leziuni parenchimatoase care apar secundar tulburărilor vasculare. Se constată leziuni ale substanței cerebrale ca hemoragii corticale, dilacerări tisulare si edem cerebral. În urma acestor leziuni se dezvoltă necroza mezodermoglială. Aceste leziuni se localizează de regulă la nivelul feței inferioare a lobilor frontali si temporali în regiunea corticală.
Contuziile si hemoragiile profunde ale creierului apar în urma forțelor mecanice care deplasează emisferele cerebrale pe suprafața interna a cutiei craniene. Această deplasare a emisferelor produce leziuni ale substanței nervoase atât în punctul de impact, cât și în regiunea opusă (leziuni de contraimpact). Hemoragia cerebrală cu dilacerări ale substanței nervoase se produce în cazul traumatismelor severe. Deoarece suprafața bazală internă a cutiei craniene este neregulată, mișcarea inerțială a emisferelor în cazul unei decelerări bruște (ca în accidentele auto) produce lezarea suprafeței inferioare a acestora de către proeminențele osului sfenoid. Impactul frontal cu suprafețe dure are ca rezultat contuzii ale suprafețelor orbitale ale lobilor frontali si ale porțiunilor anterioare si bazale ale lobilor temporali. Leziunile pe suprafața externă a emisferelor apar în situația unui impact din lateral.
Contuziile cerebrale se clasifică în funcție de două criterii:
după gravitate există contuzii minore, medii si grave;
după întindere contuzia poate fi difuză, circumscrisă (la un emisfer, lob cerebral sau focală) sau cu predominantă în unele structuri (trunchi cerebral, diencefal, cerebel).
Contuzia cerebrală difuză apare ca urmare a unor mecanisme inerțiale de accelerație-decelerație, leziunile rezultînd în urma frecării dintre diferite structuri cerebrale. Contuzia cerebrală circumscrisă ia naștere ca urmare a unui contact direct sau prin contralovitură. Macroscopic, creierul apare congestionat, vasele leptomeningeene si subpiale sunt turgescente. Se mai pot observa sufuziuni sangvine de culoare violacee. Pe suprafața de secțiune apar hemoragii venoase petesiale, difuze sau circumscrise, mai ales la nivelul substanței albe. Dacă traumatismul a fost deosebit de violent, atunci aceste hemoragii tind să conflueze și formează arii hemoragice intraparenchimatoase. La examenul microscopic se observă leziuni neuronale sub forma de cromatoliză, alterări ale aparatului reticular Golgi si neuroni multinucleari. În formele grave de contuzie alterările neuronale sunt de tip hipoxic, cu vacuole in citoplasmă, iar in stadiile avansate de comoție există pierderi de populații neuronale. Axonii neuronilor prezintă fragmentări ale tecii de mielină, în formele grave mielina disparând complet. La nivelul gliei se observă hipertrofia microgliei.
Contuzia cerebrala minora
In această situație leziunea determinată are o intensitate redusă. Contuzia cerebrală minoră este total reversibilă. Manifestările clinice ale acestei forme se caracterizează prin abolirea stării de conștiența pe o durată de 20 pana la 30 de minute, dar care poate ajunge pana la 2-3 ore în unele cazuri. Nu există semne sau simptome neurologice. La un număr restrâns de pacienți se poate intâlni o diplopie sau o asimetrie de reflexe miotatice cu caracter tranzitoriu si semne de iritație meningeană. Modificările vegetative sunt inconstante si tranzitorii, fiind întalnite uțoare modificări ale pulsului, respirației și ale tensiunii arteriale. Amnezia lacunară care urmează după acest episod cuprinde perioada de abolire a stării de conștiență și o scurtă perioadă de timp de dinaintea evenimentului traumatic. Evoluția este favorabilă, bolnavul iși revine complet în aproximativ 2-3 săptămâni. Sindromul postcontuzional reprezintă persistența unor simptome ca cefaleea, ametelile si astenia dincolo de acest interval de 2-3 săptămâni. În acest caz trebuie suspicionat și un eventual hematom intracranian.
Contuzia cerebrală medie
În acest caz creierul suferă leziuni de amploare mai mare și care sunt pațial reversibile si compensabile. Manifestările clinice care însoțesc contuzia cerebrală medie sunt reprezentate de abolirea stării de conștiență pe o durată de la 2-3 ore până la 2-3 zile. După ce bolnavul își revine din starea de inconștiență, acesta poate să prezinte o stare de agitație psihomotorie, anxietate, tulburări amnezice, hiperemotivitate sau dinpotriva, poate să aibă o stare de somnolență, apatie, obnubilare si confuzie. Amnezia este ca în cazul comoției cerebrale minore, cuprinzând evenimentele de dinaintea momentului traumatic, perioada de pierdere a conștienței și momentele imediate de după revenirea stării de conștiență. Pacienții nu-și pot aminti ce i-a lovit, nu pot relata evenimentele care au precipitat momentul producerii accidentului. Semnele și simptomele neurologice se întâlnesc mereu în comoția cerebrală medie și sunt reprezentate de modificări ale reflexelor miotatice, prezența semnului Babinski bilateral și semne de iritatie meningeană. Modificările funcțiilor vegetative sunt prezente și constau în modificări ale pulsului (tahicardie), modificări ale frecvenței respiratorii (polipnee), modificări ale tensiunii arteriale. Evoluția comoției cerebrale medii este favorabilă, dar în unele cazuri pacienîii pot deceda. Bolnavul se recuperează mai greu după revenirea stării de conștiență, recuperarea durând mai mult de 3 săptămâni.Sindromul postcontuzional se înălneste mai frecvent.
Contuzia cerebrală gravă
Această formă de contuzie presupune leziuni cerebrale ireversibile și necompensabile sau doar parțial compensabile. Manifestările clinice ale acestei forme de contuzie sunt reprezentate de abolirea stării de conștientă care poate dura de la momentul traumatismului până la 1-2 săptămâni sau mai mult. Amnezia este la fel ca în cazul celorlalte forme de comoție. Semnele și simptomele neurologice sunt constant prezente și constau din tulburări de tonus muscular, tulburări în menținerea posturii. Tulburările de tonus muscular pot merge de la hipotonie generalizată până la rigiditate prin decorticare. În rigiditatea prin decorticare membrele superioare sunt în triplă flexie, iar membrele inferioare în extensie. Se poate întâlni devierea conjugată a capului și globilor oculari, crize epileptice generalizate. Modificările funcțiilor vegetative sunt prezente și constau în tahicardie, polipnee, hipertermie, episoade hipotensive, vărsături. Dacă este atins și trunchiul cerebral, tabloul clinic este mai sever, iar prognosticul mai rezerva cazul celorlalte forme de comoție. Semnele și simptomele neurologice sunt constant prezente și constau din tulburări de tonus muscular, tulburări în menținerea posturii. Tulburările de tonus muscular pot merge de la hipotonie generalizată până la rigiditate prin decorticare. În rigiditatea prin decorticare membrele superioare sunt în triplă flexie, iar membrele inferioare în extensie. Se poate întâlni devierea conjugată a capului și globilor oculari, crize epileptice generalizate. Modificările funcțiilor vegetative sunt prezente și constau în tahicardie, polipnee, hipertermie, episoade hipotensive, vărsături. Dacă este atins și trunchiul cerebral, tabloul clinic este mai sever, iar prognosticul mai rezervat. Atingerea trunchiului cerebral determină comă profundă, rigiditate prin decerebrare cu hipertonie generalizată cu membrele superioare în extensie si rotație externă, iar membrele inferioare în extensie și rotație internă. Tulburările vegetative sunt severe, iar reflexele cu închidere în trunchiul cerebral sunt abolite.
Din cele prezentate anterior se poate trage concluzia că traumatismele craniene în cele mai multe cazuri au efecte grave și imediate, care necesită intervenții rapide. Prin urmare, conceperea unui dispozitiv de notificare în cazul unui accident care implică traumatisme craniene este deosebit de justificată.
Capitolul 2:
Senzorul Inteligent
Senzorul inteligent este format dintr-un accelerometru și bluetooth, acestia sunt conectați la un microcontroller, care, prin intermediul unui program încarcat în memoria acestuia, comandă ansamblul componentelor.
2.1: Accelerometrul
2.1.1: Principiul funcționării accelerometrului
Fig. 1 Sistem cu masă și arc folosit pentru măsurarea accelerației
Principiul fizic care stă la baza acestui accelerometru (precum și la baza altora) este cel al unui sistem simplu cu masă și arc. Arcurile (în limita lor de elasticitate) se comportă conform legii lui Hooke, și anume F=kx. Celălalt principiu fizic important este a doua lege a mișcării a lui Newton: F=ma. În Figura 2 se vede o greutate atașată de un arc. Dacă acest sistem intră în mișcare, atunci, conform legii lui Newton, se va obțne o forță egală cu ma. Această forță va duce sau la comprimarea sau la extinderea arcului, în condițiile în care F=ma=kx. Prin urmare, o accelerație cu valorea a va duce la deplasarea greutății cu x=ma/k, iar dacă constatăm o deplasare cu valoarea x, atunci vom ști că greutate a fost supusă unei accelerații cu valoarea a=kx/m. În acest fel, problema măsurării accelerației este transformată în cea a măsurării deplasării unei greutăți cu masa cunoscută atașată de un arc.
TOP VIEW = VEDERE DE SUS
TETHER = LATURĂ MOBILĂ
PROOF MASS (BEAM) = MASĂ CUNOSCUTĂ (AX)
FIXED OUTER PLATES = PLĂCI EXTERNE FIXE
SENSOR AT REST = SENZORUL ÎN REPAUS
ANCHOR = MARGINE FIXĂ
APPLIED ACCELERATION = ACCELERAȚIA APLICATĂ
RESPONDING TO AN APPLIED ACCELERATION = RĂSPUNSUL LA ACCELERAȚIA APLICATĂ
(MOVEMENT SHOWN IS GREATLY AMPLIFIED) = MIȘCAREA ESTE PREZENTANTĂ ESTE FOARTE MĂRITĂ
Fig. 2. Sistemul cu masă și arc folosit în accelerometrele Analog Devices ADXL150
Analog Devices ADXL150 este un accelerometru microprelucrat autonom care constă dintr-un sistem cu masă cunoscută și arc, un senzor capacitiv pentru măsurarea deplasării și circuitul corespunzător de prelucrare a semnalului. Sistemul cu masă și arc folosit în acest dispozitiv este prezentat în Figura 3. Masa cu greutate cunoscută este un ax nesprijinit din siliciu, iar sistemul arcului este realizat din cele 4 laturi mobile, care sunt prinse de fiecare colț al axului. Răspunsul la accelerația produsă este în concordanță cu lungimea axului. Când se produce o accelerare, masa se mișcă față de marginile fixe ale laturilor.
Cealaltă problemă care trebuie rezolvată este cea a măsurării deplasării mesei cunoscute nesprijinite. Principiul se bazează pe măsurarea variației capacitanței plăcilor paralele. Condensatorul diferențial cu plăci plan-paralele măsoară mișcarea unei plăci centrale mobile prin schimbarea capacitanței. Mișcarea plăcii mobile în direcția indicată, vedeți Figura 3, crește una din capacități și, în mod corespunzător, scade cealaltă.
Condensatoarele diferențiale furnizează un semnal care este zero pentru punctul de echilibru. Din punctul de vedere al sistemului, în cazul unui condensator diferențial liniarizarea se realizează în jurul punctului de echilibru. Să luăm, de exemplu, condesatorul cu plăci plane paralele din Figura 4 cu placa din stânga la o tensiune +V0, iar placa din dreapta la o tensiune de –V0. Tensiunea obținută în placa centrală este:
Deoarece plăcile au aceleași dimensiuni, această ecuație este simplificată astfel:
unde XL este mișcarea plăcii centrale, iar d este spațiul inițial dintre plăci.
Fig. 3 (a) Schema unui condensator cu plăci plane paralele; (b) circuit tipic utilizat într-un condensator diferențial
De aici rezultă faptul că tensiunea obținută este proporțională cu XL, dar numai pentru valori mici ale deplasării (termenii de ordin mai mare sunt neglijați). Primul accelerometru monolitic de acest gen, ADXL50, a folosit un sistem de feedback pentru forță pentru a asigura păstrarea mișcării masei la valori mici astfel ca expresia de mai sus să rămână corectă. Dispozitivele mai recente, inclusiv ADXL150, folosesc un sistem în buclă deschisă, care pornește de la ideea că se poate obține liniaritate suficientă, precum și precizie, ca urmare a gamei foarte mici a mișcării.
2.1.2: Accelerometrul ADXL345
Consum deosebit de mic: în regimul de măsurare consumul de curent este de 23 µA, iar în cel de standby de 0,1 µA, la o tensiune VS = 2,5 V (valoare tipică)
Consumul de putere este adaptat automat în funcție de lățimea de bandă
Rezoluția poate fi selectată de utilizator
Rezoluție fixă de 10 biți
Rezoluție completă, în acest caz rezoluția crește împreună cu domeniul g, o rezoluție de până la 13 biți la ±16 g (cu menținerea unui factor de scalare 4 mg/LSB în toate domeniile g)
Brevetarea în curs a sistemului de administrare a memoriei încorporate bazat pe tehnologia FIFO reduce la minim încărcarea procesorului gazdă
Detecatarea unei bătăi simple/bătăi duble
Monitorizarea activității/inactivității
Detectarea căderii libere
Domeniul tensiunii de alimentare: 2,0 V la 3,6 V
Domeniul tensiunii I/O: 1,7 V la tensiunea de alimentare
Interfețe SPI (cu 3 și 4 fire) și digitală I2C
Regimuri flexibilde de întrerupere care se pot defini pentru oricare pin de întrerupere
Domeniile de măsurare se pot selecta prin comandă serială
Lățimea de bandă se poate selecta prin comandă serială
Domeniu larg de temperatură (−40°C la +85°C)
Rezistă la șoc de 10.000 g
Nu conține plumb/corespunde cerințelor privind substanțele periculoase
Mic și subțire: 3 mm × 5 mm × 1 mm platformă LGA
APLICAȚII
Telefonie
Instrumente medicale
Jocuri și dispozitive de indicare
Instrumente industriale
Dispozitive de navigare personale
Protejarea hard disk-urilor
DESCRIERE GENERALĂ
ADXL345 este un accelerometru pe 3 axe, mic, subțire și cu un consum de putere foarte scăzut, care măsoară cu o rezoluție mare (13 biți) până la ±16 g. Datele de ieșire digitale sunt reprezentate pe 16 biți complement față de 2 și sunt accesibile sau prin interfețe SPI (cu 3 sau 4 fire) sau printr-o interfață digitală I2C.
Accelerometrul ADXL345 este foarte potrivit pentru aplicații cu dispozitive mobile. Acesta măsoară accelerația statică a gravitației în aplicații de detectare a înclinării, precum și accelerația dinamică produsă de mișcări sau șocuri. Rezoluția sa înaltă (3,9 mg/LSB) permite măsurarea unor schimbări în inclinare de sub 1,0°.
Sunt disponibile numeroase funcții speciale de detectare. Detectarea activității sau inactivității indică prezența sau absența mișcării prin compararea accelerării pe fiecare axă cu praguri definite de utilizator. Detectarea bătăilor indică bătăi individuale sau duble în oricare direcție. Detectarea căderii libere arată faptul că dispozitivul este în cădere. Aceste funcții pot fi definite în mod individual pentru oricare din cei doi pini de ieșire de întrerupere. Sistemul de administrare a memoriei încorporate este în curs de brevetare. Acesta are un circuit tampon cu 32 de niveluri primul intrat, primul ieșit (FIFO). Memoria aceasta este utilizată pentru stocarea datelor, ceea ce reduce la minim activitatea procesorului gazdă și scade consumul întregului sistem.
Regimurile cu consum mic permit o administrare inteligentă a consumului bazată pe mișcare cu praguri de detectare și măsurări ale accelerației cu disipări de putere deosebit de mici.
Accelerometrul ADXL345 este livrat într-o masă de plasctic mică și subțire cu dimensiunile de 3 mm × 5 mm × 1 mm, cu 14 pini.
2.2: Modulul Bluetooth
2.2.1: Principiul funcționării Bluetooth-ului
Standardul Bluetooth, la fel ca și WiFi, folosește tehnica FHSS (Frequency-Hopping Spread Spectrum), care implică divizarea benzii de frecvență de la 2,402 la 2,480 GHz în 79 de canale (numite hops), fiecare cu lățimea de 1MHz, iar pe urmă transmiterea semnalului folosind o secvență de canale cunoscută atât stațiilor emițătoare, cât și celor receptoare. Prin comutarea canalelor de 1600 de ori pe secundă, standardul Bluetooth evită interferența cu alte semnale radio.
Standardul Bluetooth se bazează pe un regim de funcționare master/slave. Noțiunea "piconet" este folosită cu privire la rețeaua formată de un dispozitiv și toate dispozitivele care se află în cadrul domeniului său. Un master poate fi conectat simultan la cel mult 7 dispozitive slave (255 în cazul regimului parked). Dispoztivele din cadrul unui piconet au o adresă logică de 3 biți, pentru cel mult 8 dispozitive. În cadrul regimului parked dispozitivele sunt sincronizate, dar nu au propria adresă fizică în piconet.
În realitate, la moment dat, dispozitivul mster poate fi conectat doar la un singur dispozitiv slave. Din acest motiv, acesta comută repede între dispozitivele slave pentru a crea impresia că este simultan conectat la toate dispozitivele slave.
Bluetooth permite conectarea a două piconet-uri între ele. În acest fel se formează o rețea mai largă, numită "scatternet". Pentru realizarea unor astfel de rețele sunt folosite anumite dispozitive care acționează ca punți între cele două piconet-uri..
Stabilirea unei conexiuni între două dispozitive Bluetooth urmează o procedură destul de complicată care a fost gândită cu scopul de a oferi o anumită protecție, după cum urmează:
Regim pasiv
Căutare: Găsirea unor puncte de acces
Paginare: Sincronizarea cu punctele de acces
Descoperirea serviciului punctului de acces
Crearea unui canal cu punctul de acces
Potrivire folosind cod PIN (securitate)
Folosirea rețelei
În timpul utilizării obișnuite, un dispozitiv funcționează în "regimul pasiv", ceea ce înseamnă că acesta ascultă rețeaua.
Stabilirea unei conexiuni începe cu o etapă numită "căutare", în cadrul căreia dispozitivul master trimite o cerere de căutare către toate dispozitivele care se află în cadrul domeniului său, numite puncte de acces. Toate dispozitivele care primesc cererea răspund cu adresa lor.
Dispozitivul master alege o adresă și se sincronizează cu punctul de acces cu ajutorul unei tehnici numite paginare, care înseamnă în primul rând sincronizarea ceasului și a frecvenței sale cu punctul de acces.
În continuare se stabilește o legătură cu punctul de acces, ceea ce permite ca dispozitivul maste să intre în etapa de descoperire a serviciului punctului de acces. Pentru aceasta se folosește un protocol numit SDP(Service Discovery Protocol).
La sfârșitul acestei etape de descoperire servciu, dispozitivul maste este gata pentru crearea unui canal de comunicare cu punctul de acces, folosind protocolul L2CAP.
În funcție de nevoile serviciului, se poate stabili un canal suplimentar, numit RFCOMM și care operează peste canalul L2CAP, pentru furnizarea unui port serial virtual. Acest lucru este necesar deoarece unele aplicații au fost concepute pentru conectarea la un port standard, indiferent de hardware-ul folosit. De exemplu, anumite programe de navigare pentru autostrăzi au fost concepute pentru conectarea la oricare dispozitiv GPS Bluetooth (GPS înseamnă Global Positioning System, un sistem de localizare geografică bazat pe sateli cu ajutorul căruia se stabilesc coordinatele geografice ale unui dispozitiv mobil sau ale unui vehicul).
Punctul de acces poate să includă un mecanism de protecție numit potrivire, are limitează accesul doar pentru utilizatorii autorizați, oferind în acest fel o măsură de protecție piconet-ului. Potrivirea se realizează cu ajutorul unei chei de codare, denumită în mod obișnuit "PIN" (PIN înseamnă Personal Information Number). Pentru a realiza acest lucru, punctul de acces trimite o cerere de potrivire dispozitivului master. În cele mai multe cazuri în urma acestei cereri utilizatorul trebuie să introducă codul PIN al punctului de acces. Dacă PIN-ul primit este corect, se realizează conexiunea.
În regimul protejat, PIN-ul va fi trimis codat, ceea ce înseamnă că se folosește o a doua cheie, cu scopul de a preveni compromiterea semnalului.
Când potrivirea devine activă, dispozitivul master poate utiliza canalul de comunicare stabilit conform celor prezentate mai sus.
2.2.2 Modulul Bluetooth RN-42
Caracteristici
Bluetooth v2.0 cu EDR (Enhanced Data Rate)
Disponibil în variantă cu antenă pe placă (RN- 42) și fără antenă (RN-42-N)
Factor de formă de dimensiunea unui timbru, 13,4 mm x 25,8 mm x 2 mm (RN-42) și 13,4mm x 20 mm x 2 mm (RN-42-N)
Consum mic (26µA în stare de repaus, 3 mA în starea conectată, 30 mA când se transmite)
Interfețe de date UART (SPP sau HCI) și USB (doar HCI).
Rata continuă a datelor SPP – 240 Kbps (slave), 300 Kbps (master)
Rata continuă a datelor HCI – 1,5 Mbps, maximă 3,0 Mbps în regimul HCI
Profilele stack Bluetooth încorporate includ (nu este nevoie de stack gazdă): protocoalele GAP, SDP, RFCOMM și L2CAP, cu profile SPP și DUN.
Certificare Bluetooth SIG
Piese SMT crenelate pentru ca montarea pe circuitele imprimate să fie sigură
Certificări: FCC, ICS, CE
Ecologice, corespund cerințleor privind substanțele periculoase
Aplicații
Înlocuirea cablurilor
Scanere de coduri de bare
Sisteme de măsurare și monitorizare
Senzori pentru industrie și comanda proceselor industriale
Dispozitive medicale
Cititoare de coduri de bare
Accesorii de calculatoare
Descriere
RN42 este un emițător/receptor radio Bluetooth foarte economic, cu factor de formă mic, cu consum mic, utilizabil în dispozitive OEM, adăugând capacități wireless acestora. Modulul RN42 poate comunica prin numeroase protocoale de interfețe, este simplu de inclus diverse dispozitive și are certificări complete. Ca urmare a acestora caracteristici, modulul oferă o soluție Bluetooth încorporată completă. Modulul RN 42 este compatibil funcțional cu RN 41. Folosind antena de pe placă deosebit de performantă și caracteristica Bluetooth® Enhanced Data Rate (EDR), modul RN42 poate transmite date cu o rată de până la 3 Mbps data rate la distanțe de 20 m. Este disponibilă și varianta fără antenă (RN-42-N). Aceasta este utilă în cazurile în care este nevoie de o antenă externă pentru aplicație, modulul RN-42-N are o lungime mai mică și este prevăzut cu blocuri RF pentru preluarea semnalului de la antenă.
Prezentare generală
Vitezele ratelor baud: 1200 bps până la 921K bps, se pot programa și rate baud nestandardizate.
Radio de clasa 2, distanța 20 m, emițător cu ieșirea de 4 dBm, sensibilitatea tipică a recepției -80dBm
Frecvența 2402 ~ 2480MHz,
Modulație FHSS/GFSK, 79 canale la intervale de 1MHz
Comunicații sigure, criptare cu cheie pe 128 biți
Corecție de eroare pentru a asigura livrarea mesajului
Configurare UART locală și RF de la distanță
Detectarea automată/stabilirea conexiunii nu necesită configurare software (înlocuirea cablului pe loc)
Master de autoconectare, pin IO (DTR) și regimuri de declanșare bazate pe caracter
Caracteristicile I/O digitale
Condiții de mediu
Caracteristici electrice
* În cazul regimului SLAVE sunt perioade de timp cu radio PORNIT care variază în funcție de ferestre. Modul în care se setează ferestrele determină curentul mediu.
2.3: Microcontrollerul Arduino Micro
Arduino Micro este o placă cu microcontroller bazată pe ATmega32u4. Are 20 de pini digitali de intrare/ieșire (din care 7 pot fi folosite ca ieșiri PWM și 12 ca ieșiri analogice), un oscilator cu cristal de 16 MHz, o conexiune micro USB, un conector ICSP și un buton reset. Are tot ce este necesar pentru funcționarea unui microcontroler; trebuie doar conectat la un calculator cu un cablu micro USB. Are un factor de formă care permite amplasarea simplă pe o placă de test.
Acest dispozitiv Micro este similar cu Arduino Leonardo în sensul că ATmega32u4 are inclusă comunicarea USB, ceea elimină neciesitatea unui al doilea procesor. Acest lucru permite ca dispozitivul să apară pentru un calculator la care este conectat ca un maus sau o tastatură, suplimentar față de un port virtual (CDC) serial/COM.
Specificații
Alimentare
Placa Arduino Micro poate fia alimentată prin intermediul conexiunii USB sau de la o sursă de alimentare externă. Sursa de alimentare este selectată automat.
Sursa de alimentare externă (nu prin portul USB) poate fi sau o sursă de curent continuu sau o baterie. Firele de la baterie sau sursă se pot conecta la pinii Gnd și Vin.
Placa poate funcționa cu o tensiune externă între 6 și 20 V. Totuși, dacă tensiunea de alimentare este mai mică decât 7V, pinul de 5V s-ar putea să furnizeze mai puțin de cinci volți, iar în acest caz placa poate deveni instabilă. Pe de altă parte, dacă se folosesc mai mult de 12 V, stabilizatorul de tensiune s-ar putea supraîncălzi și placa se poate defecta. Domeniul recomandat este 7 la 12 volți.
Pinii de alimentare sunt următorii:
VI. Pentru tensiunea de alimentare a plăcii Arduino în cazul în care folosește o sursă de alimentare externă (spre deosebire de 5 volți prin conexiunea USB sau o altă sursă de tensiune stabilizată). Puteți furniza tensiune prin acest pin.
5V. Tensiunea de alimentare stabilizată folosită pentru alimentarea microcontollerului și a celorlalte componente de pe placă. Aceasta poate să provină sau de la VIN prin intermediul unui stabilizator de pe placă, sau se poate furniza prin portul USB sau o altă tensiune 5 V stabilizată.
3V. O tensiune de 3,3 volți generată de stabilizatorul de pe placă. Curentul maxim consumat este 50 mA.
⏚ Pini de masă.
Memoria
ATmega32u4 are o memorie de 32 KB (cu 4 KB folosiți pentru bootloader). Mai are și 2,5 KB de memorie SRAM și 1 KB de memorie EEPROM (care poate fi scrisă și citită cu biblioteca EEPROM).
Intrări și ieșiri
Fiecare din cei 20 de pini digitali de intrare/ieșire ai Microcontrollerului poate fi folosit ca o intrare sau ca o ieșire folosind funcțiile pinMode(), digitalWrite(), și digitalRead(). Aceasta funcționează cu 5 volți. Fiecare pin poate furniza sau primi un curent maxim de 40 mA și are o rezistență internă de ridicare de 20-50 KΩ (care este deconectată implicit). Unii pini mai au și alte funcții specializate:
Serial: 0 (RX) și 1 (TX). Sunt folosite pentru recepționarea (RX) și transmisia (TX) de date seriale TTL folosind capacitatea hardwear serială a ATmega32U4.
TWI: 2 (SDA) și 3 (SCL). Permit comunicarea TWI folosind biblioteca Wire.
Întreruperi externe: 0(RX), 1(TX), 2 și 3. Acești pini se pot configura pentru declanșarea unei întreruperi în cazul unei valori mici, o creștere sau scădere de semnal, sau o schimbare în valoare. Vă rugăm să consultați funcția attachInterrupt() pentru detalii.
PWM: 3, 5, 6, 9, 10, 11 și 13. Furnizează ieșiri PWM pe 8 biți cu funcția analogWrite().
SPI: la conectorul ICSP. Acești pini permit comunicare SPI folosind biblioteca SPI. Rețineți faptul că pinii SPI nu sunt conectați la niciunul din pinii digitali de intrare / ieșire, după cum sunt în cazul microcotrollerului Arduino Uno, aceștia sunt disponibili doar la conectorul ICSP și la pinii din apropiere etichitați MISO, MOSI și SCK.
RX_LED/SS: Acesta este un alt pin suplimentar față de microcontrollerul Leonardo. Este conectat la RX_LED, care indică activitatea de transmisie în timpul comunicării USB, dar poate fi folosit și ca pin de selectare slave (SS) în comunicarea SPI.
LED: 13. Există un LED încorporat care este conectat la pinul digital 13. Când pinul este la nivel logic SUS, LED este aprins, iar când pinul este la nivel logic JOS, el este stins.
Intrări analogice: A0-A5, A6 – A11 (la pinii digitali 4, 6, 8, 9, 10 și 12). Microcontrollerul are un număr total de 12 intrări analogice, A0 la A5 sunt etichetați direct pe pini, și celelalte, care pot fi accesate prin program folosind constantele de la A6 la A11, sunt folosite împreună cu pinii digitali 4, 6, 8, 9, 10 și 12. Toatea acestea pot de asemenea fi folosite și ca intrări/ieșiri digitale. Fiecare intrare analogică furnizează rezoluție de 10 biți (adică 1024 valori diferite). În mod implicit, intrările analogice măsoară de la zero la 5 volți, dar tensiunea superioară poate fi modificată cu ajutorul pinului AREF și a funcției analogReference().
Mai există câțiva pini pe placă:
AREF. Tensiune de referință pentru intrările analogice. Folosit cu analogReference().
Reset. Microcontrollerul se resetează prin aducerea acestei linii la nivel JOS. Folosit de regulă pentru adăugarea unui buton reset plăcilor care blochează butonul reset de pe placă.
Amplasarea pinilor
Figura 4. Reprezentarea pinilor microcontrollerului Arduino Micro arată funcționarea completă a tuturor pinilor.
Comunicarea
Microcontrollerul are numeroase facilități pentru comunicarea cu un calculator, un alt microcontroller Arduido, sau cu alte microcontrollere. ATmega32U4 furnizează comunicație serială UART TTL (5V), care este disponibilă la pinii digitali 0 (RX) și 1 (TX). 32U4 de asemenea permite comunicare (CDC) serială prin portul USB și apare ca un port com virtual pentru programul care rulează pe calculator. Cipul se comportă și ca un dispozitiv USB 2.0 cu viteză completă, folosind drivere COM USB standard. În cazul sistemului de operare Windows este nevoie de un fișier .inf. Programul folosit de microcontrollerul Arduino cuprinde un program de monitorizare de port serial, care permite transmiterea de date text simple de la și înspre placa Arduino. LED-urile RX și TX de pe placă vor pâlpâi când se trimite date la calculator prin conexiunea USB (dar nu și în cazul comunicării seriale la pinii 0 și 1).
Biblioteca SoftwareSerial permite comunicare serială la oricare din pinii digitali ai Microcontrollerului.
ATmega32U4 permite și comunicare I2C (TWI) și SPI. Programul folosit de microcontrollerul Arduino cuprinde biblioteca Wire pentru simplificarea magistralei I2C; vă rugăm să consultați documentația pentru detalii. Pentru comunicare SPI, se folosește biblioteca SPI.
Microcontrollerul apare ca o tastatură sau un maus oarecare, și poate fi programat să controleze aceste dispozitive de intrare cu ajutorul clasei Keyboard și Mouse.
Programarea
Microcontrollerul poate fi programat cu ajutorul programului Arduino. Alegeți "Arduino Micro” din meniul Tools > Board.
Microcontrollerul ATmega32U4 de pe placa Arduino Micro este livrat cu cu un program bootloader preînscris care permite încărcarea de cod nou în el fără utilizarea unui programator hardware extern. Comunicarea se realizează cu protocolul AVR109.
Microcontrollerul poate fi programat și prin conectorul ICSP (In-Circuit Serial Programming), situație în care nu se folosește bootloader-ul.
Reset automat (soft) Reset and inițializarea bootloader-ului
Microcontrollerul a fost proiectat în așa fel ca să nu fie nevoie de apăsarea butonului reset înainte de încărcarea unui program. În loc de aceasta, resetarea se realizează de programul care rulează pe un calculator cu care microcontrollerul este conectat. Resetul se declanșează când portul virtual (CDC) serial / COM al microcontrolerrului este deschis la 1200 bauzi și pe urmă închis. Când se produce acest lucru, procesorul se va reseta, iar conexiunea USB cu calculatorul se va întrerupe (adică va dispare portul virtual serial / COM). După resetarea procesorului, pornește bootloader-ul și rămâne activ pentru aproximativ 8 secunde. Bootloaderul poate fi inițializat și prin apăsarea butonului reset de pe microcontroller. Vă rugăm să rețineți că la prima punere sub tensiune a plăcii aceasta va sări direct la programul scris pentru utilizator, dacă acesta există, și nu se va produce inițializarea bootloader-ului.
Din cauza modului în care microcontrollerul tratează resetul, este mai bine să lăsați ca programul Arduino să încerce inițializarea resetului înainte de încărcarea unui program, mai ales în cazul în care aveți obiceiul de a apăsa butonul reset înainte de încărcarea de programe pe alte plăci. Dacă softul nu poate reseta placa, bootloader-ul poate fi totdeauna pornit prin apăsarea butonului reset de pe placă.
Protecția porturilor USB la supracurenți
Microcontrollerul are o siguranță resetabilă care protejează porturile USB ale calculatorului față de scurtcircuite și supracurenți. Cu toate că cele mai multe calculatoare au propria lor protecție internă, siguranța oferă un nivel suplimentar de protecție. Dacă la portul USB apare un curent mai mare de 500 mA, siguranța va întrerupe automat legătura și această stare se va menține până la înlăturarea scurtircuitului sau a suprasarcinii.
Caracteristici fizice
Lungimea și lățimea maximă a plăcii microcontrollerului sunt 4,8 cm, respectiv 1,77 cm, cu conectorul USB depășind dimensiunea lungimii. Modul de aranjare a pinilor permite așezarea simplă pe o placă de test fără lipituri.
2.4 Ansamblul componentelor – senzorul inteligent
Conexiunile hardware ale componentelor senzorului sunt următoarele:
Între modulul Bluetooth și Arduino:
Bluetooth GND – Arduino GND
Bluetooth VCC – Arduino 5V
Bluetooth TX-0 – Arduino D10
Bluetooth RX-1 – Arduino D11
Între accelerometrul Adxl345 și Arduino:
Adxl345 GND – Arduino GND
Adxl345 VCC – Arduino 3V
Adxl345 CS – Arduino 3V
Adxl345 SDA – Arduino D2 (SDA)
Adxl345 SCL – Arduino D3 (SCL)
Notă: accelerometrul Adxl345 este conectat la microcontroller prin interfața SPI
Fig. 5 Schema bloc / conexiuni a senzorului inteligent
Capitolul 3:
Programul de comandă al senzorului inteligent
Programul care comandă senzorul inteligent este realizat în mediul de programare ARDUINO, un mediu de tip "open source", care oferă posibilitatea de a încărca programul de comandă pe placa microcontrollerului. Arduino este un mediu scris in Java și este bazat pe Processing, avr-gcc și alte programe open source.
Se folosesc biblioteci de comenzi ș funcții preprogramate pentru realizarea software-ului comandă.
În cele ce urmează se prezintă programul Arduino în detaliu:
#include <Wire.h>
#include <ADXL345.h>
#include <SoftwareSerial.h>
– Includerea bibliotecilor de comenzi și funcții în cod
ADXL345 adxl;
– Declararea variabilei adxl prin biblioteca ADXL345
SoftwareSerial mySerial(10, 11); // RX, TX
– Declararea variabilei mySerial – setarea pinilor modulului bluetooth la pinii 10 și 11 pe placa arduino
void setup(){
Serial.begin(9600);
adxl.powerOn();
– Subrutina setup, pentru deschiderea conexiunilor pe pini și configurarea componentelor, inițializarea conexiunii și pornirea accelerometrului
adxl.setRangeSetting(16);
– Setarea domeniului de funcționare al accelerometrului(+-16g)
adxl.setActivityThreshold(75); //62.5mg per increment
– Setarea pragului de răspuns al accelerometrului (increment de 62.5mg)
adxl.setInactivityThreshold(75);
– Setarea pragului de inactivitatea al accelerometrului (increment de 62.5mg)
adxl.setTimeInactivity(10);
– Setarea pragului de inactivitate în timp al accelerometrului (increment de 1s)
adxl.setActivityX(1);
adxl.setActivityY(1);
adxl.setActivityZ(1);
– Funcții booleene pentru alegerea axelor pe care se monitorizează mișcarea (1-pornit, 0-oprit)
adxl.setInactivityX(1);
adxl.setInactivityY(1);
adxl.setInactivityZ(1);
– Funcții booleene pentru alegerea axelor pe care se monitorizează inactivitatea (1-pornit, 0-oprit)
adxl.setInterruptMapping(ADXL345_INT_SINGLE_TAP_BIT, ADXL345_INT1_PIN );
adxl.setInterruptMapping(ADXL345_INT_DOUBLE_TAP_BIT, ADXL345_INT1_PIN );
adxl.setInterruptMapping(ADXL345_INT_FREE_FALL_BIT, ADXL345_INT1_PIN );
adxl.setInterruptMapping(ADXL345_INT_ACTIVITY_BIT, ADXL345_INT1_PIN );
adxl.setInterruptMapping(ADXL345_INT_INACTIVITY_BIT, ADXL345_INT1_PIN );
– Setarea întreruperilor pe pin-ul 1
adxl.setInterrupt( ADXL345_INT_SINGLE_TAP_BIT, 1);
adxl.setInterrupt( ADXL345_INT_DOUBLE_TAP_BIT, 1);
adxl.setInterrupt( ADXL345_INT_FREE_FALL_BIT, 1);
adxl.setInterrupt( ADXL345_INT_ACTIVITY_BIT, 1);
adxl.setInterrupt( ADXL345_INT_INACTIVITY_BIT, 1);
– Funcții booleene pentru activarea întreruperilor (1-activat, 0-dezactivat)
mySerial.begin(9600);
– Inițializarea bluetooth, la rata baud de 9600 biți pe secundă
void loop(){
int x,y,z;
double xg,yg,zg,xy,xyz,suma;
double t=1.8;
– Subrutina loop, partea efectivă a programului comandă, acesta ruleaza ciclic.
Declararea variabilelor de ieșire pe axele x, y, z (x, y, z) de accelerații pe axele x, y, z (xg, yg, zg) și suma vectorială a accelerațiilor (suma)
Declararea variabilei prag (t)
adxl.readAccel(&x, &y, &z);
– Citirea valorilor de ieșire a accelerometrului pentru fiecare axă
xg=x*0.015625;
yg=y*0.015625;
zg=z*0.015625;
– Convertirea valorilor de ieșire în accelerație. Aceasta se face folosind formula:
Gs = Valoarea de ieșire * (Domeniu măsurare/(210))
xy=(xg*xg)+(yg*yg);
xyz=xy+(zg*zg);
suma=sqrt(xyz)
– Adunarea vectorială ale accelerațiilor folosind formula (ținând cont, că unghiul între vectori este egal cu 90o):
| u | + | v | =
if (t<suma)
{mySerial.print("A");}
– Funcție IF: în cazul în care valorea sumei accelerațiilor măsurate pe 3 axe (eredo în cazul acesta) este mai mare decât valoarea prag presetat, programul trimite un mesaj (caracterul A) prin modulul bluetooth către dispozitivul cu care stă în legătură.
Capitolul 4:
Aplicația Android
4.1 Descrierea funcționării aplicației
Aplicația Android este scris în limbajul de programare Basic 4 Android
Aplicația are trei secvențe de program, numite activități. Fiecare dintre aceste activități servesc roluri diferite și rulează după criterii specifice. Cele trei activități au interfețe proprii care se încarc (apar pe ecran) în momentul în care activitatea începe să ruleze.
Activitatea MAIN oferă mediul pentru conectarea cu senzorul inteligent prin interfața Bluetooth, și setarea numărului de telefon pe care dorim să se trimită mesajul de notificare în cazul unei accidentări. Trecerea la activitatea RUN se poate face doar în cazul în care a fost precizat numărul de telefon și s-a stabilit conexiunea între senzor și telefon.
Activitatea RUN se activează prin apăsarea butonului RUN din interfața aferentă activității MAIN. În această activitate telefonul începe să preia datele GPS, care sunt afișate pe ecranul telefonului, inclusiv viteza cu care se mișcă deținătorul telefonului. Dacă telefonul recepționează (prin conexiunea Bluetooth) semnale de avertizare de la senzorul inteligent, programul va declanșa activitatea ALARM.
Activitatea ALARM, activat prin semnalul de declanșare primit de la senzorul inteligent, conține un numărător de 20 de secunde. În aceste 20 de secunde telefonul vibrează, apare un mesaj de avertizare pe ecran, cu posibilitatea de a dezactiva alarma. În cazul în care nu se anulează alarma în timpul alocat de numărător, telefonul trimite un mesaj presetat care conține datele geografice din momentul accidentării.
Fig. 6 Organigrama aplicației Android
4.2 Descrierea detaliată a subrutinelor
În acest subcapitol se prezintă aplicația Android pas cu pas, explicând fiecare subrutină separat.
În activitate MAIN se face conectarea telefonului cu senzorul inteligent prin Bluetooth și setarea numărului de telefon la care se trimite sms-ul de notificare în cazul unei accidentări.
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim admin As BluetoothAdmin
Dim serial1 As Serial
Dim foundDevices As List
Type NameAndMac (Name As String, Mac As String)
Dim connectedDevice As NameAndMac
Dim listenflag As Boolean =False
Dim strphonenumber As String =""
Dim nrlength As Boolean=False
End Sub
-Declararea variabilelor globale. Aceste variabile sunt accesibile din toate activitățile programului.
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Dim btnSearchForDevices As Button
Dim NrTel As EditText
Dim conectat As Boolean = False
End Sub
-Declararea variabilelor locale, aceste variabile sunt re-declarate de fiecare dată când aceasta activitate repornește.
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
'Activity.LoadLayout("Layout1")
If FirstTime Then
admin.Initialize("admin")
serial1.Initialize("serial1")
End If
Activity.LoadLayout("1")
End Sub
-Subrutina Activity_Create va rula la prima deschidere a activității Main, deci chiar după deschiderii aplicației, aici se încărcă interfața principală și se inițializează conexia Bluetooth. Această subrutină este prezentă în fiecare activitate a aplicației, dar are un conținut diferit.
Sub Activity_Resume
btnSearchForDevices.Enabled = False
If admin.IsEnabled=True Then
serial1.listen
listenflag=True
End If
If admin.IsEnabled = False Then
If admin.Enable = False Then
ToastMessageShow("Error enabling Bluetooth adapter.", True)
Else
ToastMessageShow("Enabling Bluetooth adapter…", False)
End If
Else
Admin_StateChanged(admin.STATE_ON, 0)
End If
End Sub
– Subrutina Activity_Resume se activează în cazul în care o activitate revine din fundal. În cazul actual, conține o funcție IF care monitorizează starea Bluetooth-ului. În cazul în care modulul Bluetooth din telefon este dezactivate, subrutina îl activează automat.
Sub Activity_Pause (UserClosed As Boolean)
If UserClosed = True Then
admin.Disable
Activity.Finish
End If
End Sub
-Activity_Pause este activat în momentul în care o activitate intră în fundal (adica o altă activitate începe să ruleze). În cazul actual, Activity_Pause dezactivează Bluetooth-ul și închide activitatea Main. Activity_Pause se găsește în fiecare activitate cu comenzi diferite.
Sub Admin_StateChanged (NewState As Int, OldState As Int)
btnSearchForDevices.Enabled = (NewState = admin.STATE_ON)
End Sub
-Această subrutină activează sau dezactivează butoanele interfeței prin intermediul căreia se face conectarea la senzorul inteligent.
Sub btnSearchForDevices_Click
If listenflag=False Then
serial1.Listen
listenflag=True
End If
foundDevices.Initialize
If admin.StartDiscovery = False Then
ToastMessageShow("Error starting discovery process.", True)
Else
ProgressDialogShow("Searching for devices…")
End If
End Sub
-Această subrutină rulează în cazul în care se apasă butonul "Cautare Dispozitive". Telefonul începe procesul de căutare.
Sub Admin_DeviceFound (Name As String, MacAddress As String)
Log(Name & ":" & MacAddress)
Dim nm As NameAndMac
nm.Name = Name
nm.Mac = MacAddress
foundDevices.Add(nm)
ProgressDialogShow("Searching for devices (~ device found)…".Replace("~", foundDevices.Size))
End Sub
-Subrutina Admin_DeviceFound adaugă un element interactiv în interfața aplicației. În cursul procesului de căutare, apare un mesaj de progres care arată numărul de dispozitive găsite în timp real.
Sub Admin_DiscoveryFinished
ProgressDialogHide
If foundDevices.Size = 0 Then
ToastMessageShow("No device found.", True)
Else
Dim l As List
l.Initialize
For i = 0 To foundDevices.Size – 1
Dim nm As NameAndMac
nm = foundDevices.Get(i)
l.Add(nm.Name)
Next
Dim res As Int
res = InputList(l, "Choose device to connect", -1)
If res <> DialogResponse.CANCEL Then
connectedDevice = foundDevices.Get(res)
ProgressDialogShow("Trying to connect to: " & connectedDevice.Name & " (" & connectedDevice.Mac & ")")
'serial1.ConnectInsecure(admin,connectedDevice.Mac,1) 'cu laptopul
'serial1.Connect3(connectedDevice.Mac,1)
'serial1.Connect(connectedDevice.Mac) 'intre android si laptop
serial1.Connect2(connectedDevice.Mac, "00001101-0000-1000-8000-00805F9B34FB") 'intre toate
End If
End If
End Sub
-Admin_DiscoveryFinished este responsabilă pentru selectarea senzorului inteligent din lista dispozitivelor găsite prin procedura de căutare.
Sub Serial1_Connected (Success As Boolean)
ProgressDialogHide
If Success = False Then
Log(LastException.Message)
ToastMessageShow("Error connecting: " & LastException.Message, True)
conectat = False
Else
conectat = True
End If
End Sub
– Subrutina Serial1_Connected este una booleenă, care se află în starea "true" în cazul în care s-a realizat o legătură între senzorul inteligent și telefonul. Doar în starea "true" a acestei subrutine se poate porni activitatea RUN.
Sub Rulare_Click
strphonenumber=NrTel.Text
If NrTel.Text.Length=10 AND conectat = True Then
StartActivity(Run)
Else
ToastMessageShow("Nr tel incorect/Conexie eronata!!!",True)
End If
End Sub
– Această subrutină rulează în cazul în care se apasă butonul ”Rulare”. Verifică corectitudinea numărului de telefon introdus și conexia între senzorul inteligent și telefonul mobil. În cazul în care condițiile sunt satisfăcute, apăsarea butonului ”Rulare” pornește activitatea RUN, în cazul contrar va apărea un dialog de avertizare.
În activitatea RUN telefonul preia datele GPS, care sunt afișate pe ecranul telefonului. Adițional, apare și viteza cu care se deplasează deținătorul telefonului. Dacă telefonul recepționează (prin conexiunea Bluetooth) semnale de avertizare de la senzorul inteligent, programul va declanșa activitatea ALARM.
Subrutinele Sub Globals și Sub Process_Globals sunt similare cu cele din activitatea MAIN și ALARM, diferența între ele constă în variabilele declarate în special pentru subrutinele care sunt prezente în activitatea RUN.
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("2")
msg=""
If FirstTime Then
GPS1.Initialize("GPS")
End If
If AStream.IsInitialized = False Then
AStream.Initialize(Main.Serial1.InputStream, Main.Serial1.OutputStream, "AStreams")
End If
End Sub
-În Activity_Create se inițializează GPS-ul telefonului și canalul de comunicații pentru fluxul de date care intră prin Bluetooth.
Sub Activity_Resume
msg=""
pw.KeepAlive(False)
If GPS1.GPSEnabled = False Then
ToastMessageShow("Please enable the GPS device.", True)
StartActivity(GPS1.LocationSettingsIntent) Else
GPS1.Start(0, 0)
End If
End Sub
– Activity_Resume se activează după aceleași principii ca și în cazul activității MAIN, dar în cazul activității RUN monitorizează starea GPS-ului, în cazul în care GPS-ul este oprit subrutina îl obligă pe utilizatorul sa-l pornească.
Sub Activity_Pause (UserClosed As Boolean)
GPS1.Stop
If UserClosed Then
AStream.Close
Main.serial1.Disconnect
Main.listenflag=False
End If
pw.ReleaseKeepAlive
Activity.Finish
End Sub
-Activity_Pause închide canalul de comunicație Bluetooth, dezactivează GPS-ul și închide activitatea RUN.
Sub GPS_LocationChanged (Location1 As Location)
lblLat.Text = "Lat = " & Location1.ConvertToMinutes(Location1.Latitude)
lblLon.Text = "Lon = " & Location1.ConvertToMinutes(Location1.Longitude)
lblSpeed.Text = "Speed = " & Location1.speed
lati= Location1.ConvertToMinutes(Location1.Latitude)
longi= Location1.ConvertToMinutes(Location1.Longitude)
End Sub
– Subrutina GPS_LocationChanged plasează datele de locație primite de la sateliții GPS și le plasează în variabilele lor aferente (lati și longi)
Sub GPS_UserEnabled (Enabled As Boolean)
ToastMessageShow("GPS device enabled = " & Enabled, True)
End Sub
-GPS_UserEnabled afișează un dialog de notificare pe ecranul telefonului în cazul în care s-a activat GPS-ul.
Sub AStreams_Error
AStream.Close
Main.serial1.Disconnect
ToastMessageShow("Connection is broken.", True)
pw.ReleaseKeepAlive
StartActivity(Main)
Activity.Finish
End Sub
-AStreams_Error închide activitatea RUN în cazul în care s-a rupt conexiunea între senzorul inteligent și telefonul și notifică utilizatorul prin intermediul unui dialog.
Sub AStreams_NewData (Buffer() As Byte)
ToastMessageShow(BytesToString(Buffer, 0, Buffer.Length, "UTF8"),False)
msg = BytesToString(Buffer,0,Buffer.Length,"UTF8")
Received = True
contor = contor + 1
Log("contor="&contor)
If contor = 1 Then
StartActivity(Alarm)
End If
End Sub
-Subrutina AStreams_Newdata preia semnalul de alarmă trimisă de senzorul inteligent prin canalul de comunicație Bluetooth. Declanșează activitatea ALARM. Are un numărător încorporat care împiedică declanșarea multiplă a activității ALARM (în cazul în care intră semnale de alarmă multiple de la senzorul inteligent), evitând eventuale erori.
Activitatea ALARM are rolul de a notifica prin intermediul unui mesaj scris, un contact despre accidentarea purtătorului senzorului inteligent. În cazul în care purtătorul se află în stare de conștiență după accidentare, poate dezactiva alarma și totodată trimiterea mesajului de notificare. Telefonul intră într-o stare de așteaptare timp de douăzeci de secunde, emițând semnale sonore și vibrații, pentru a atrage atenția purtătorului senzorului. Subrutinele Sub Globals și Sub Process_Globals sunt similare cu cele din activitatea MAIN și RUN, diferența între ele constă în variabilele declarate în special pentru subrutinele care sunt prezente în activitatea ALARM.
Sub Activity_Create(FirstTime As Boolean)
Timer1.Initialize("Sendtimer", 20000)
Timer1.Enabled= True
Activity.LoadLayout("3")
PE.Initialize("PE")
mp.Initialize
End Sub
-Activity_Create inițializează numărătorul de 20 de secunde, funcția trimiterii mesajului, vibratorul și subprogramul pentru redarea semnalului sonor.
Sub Activity_Resume
Vibrate(200,300)
PlayRinger
Timer1.Enabled= True
End Sub
– Activity_Resume pornește vibratorul, redarea semnalului sonor și numărătorul.
Sub Vibrate(On As Long, Off As Long)
Dim r As Reflector
r.Target = r.GetContext
r.Target = r.RunMethod2("getSystemService", "vibrator", "java.lang.String")
Dim pattern(2) As Long
pattern(0) = On
pattern(1) = Off
r.RunMethod4("vibrate", Array As Object(pattern, 0), Array As String("[J", "java.lang.int"))
End Sub
– Subrutina Vibrate este responsabilă pentru vibrația telefonului.
Sub CancelVibrate
Dim r As Reflector
r.Target = r.GetContext
r.Target = r.RunMethod2("getSystemService", "vibrator", "java.lang.String")
r.RunMethod("cancel")
End Sub
– Folosind subrutina CancelVibrate se oprește vibrația telefonului.
Sub PlayRinger
Dim t As Reflector
t.Target = "ContentDir"
t.Target = t.RunMethod("intern")
mp.Load(t.Target, "content://settings/system/ringtone")
mp.Play
End Sub
-Subrutina PlayRinger redă semnalul sonor. Alege automat melodia de apel ales de utilizatorul telefonului.
Sub CANCEL_Click
CancelVibrate
mp.Stop
Timer1.Enabled= False
Run.contor = 0
Activity.Finish
End Sub
-Cancel_Click se activează la apăsarea butonului ANULARE în interfața activității ALARM, nulează contorul menționat în descrierea subrutinei activității AStreams_Newdata din activitatea RUN, dezactivează vibrația, semnalul sonor și închide activitatea ALARM.
Sub Sendtimer_Tick
CancelVibrate
mp.stop
Sms.Send(Main.strPhoneNumber, "m-am accidentat la coordonatele:" &Run.lati &Run.longi)
End Sub
-Sendtimer_Tick pornește în momentul în care numărătorul ajunge la douăzeci de secunde. Oprește vibrația și semnalul sonor și trimite mesajul către numărul predefinit, cu datele GPS din momentul accidentării.
Sub PE_SmsSentStatus (success As Boolean, ErrorMessage As String, PhoneNumber As String, Intent As Intent)
If success = True Then
ToastMessageShow("SMS Sent to " & PhoneNumber,True)
smssent=True
Else
ToastMessageShow("SmS Sending failed, resending…",True)
smssent=False
Sms.Send(Main.strPhoneNumber, "m-am accidentat la coordonatele:" &Run.lati &Run.longi)
End If
End Sub
-Subrutina PE_SmsSentStatus monitorizează dacă mesajul de notificare a ajuns cu succes la destinatar. În cazul în care nu se reușește trimiterea mesajului, programul va încerca sa îl trimită din nou.
Sub finalize
If smssent=True Then
Activity.Finish
End If
End Sub
– Subrutina Finalize oprește activitatea ALARM în cazul în care mesajul de notificare a fost trimis cu succes.
Concluzii
Bibliografie
S. Curilă, M. Curilă, Tehnici de prelucrare a imaginilor utilizate la recunoașterea formelor, Editura Universității din Oradea, 2004.
A. Gacsádi, C. Grava, O. Straciuc, I. Gavriluț, PDE-Based Medical Images Denoising Using Cellular Neural Networks, IEEE Proceedings of the International Symposium on Signals Circuits and Systems (ISSCS 2009), Vol. 2, July 9-10, 2009, Iași, România, pp. 397-400.
M. Ghinea, V. Firețeanu, MATLAB. Calcul numeric – grafică – aplicații, Editura Teora, București, 1997.
C. Grava, V. Buzuloiu, Elemente de prelucrarea și analiza imaginilor, Editura Universității din Oradea, 2007.
C. Grava, Șt. Ciurel, V. Buzuloiu, Principii ale aparatelor de imagistică medicală, Editura Universității din Oradea, 2004.
A. K. Jain, Fundamentals of Digital Image Processing, Editura Prentice-Hall Inc., 1989.
Al.M. Morega, Introducere în imagistica medicală, Editura MatrixRom, București, 2002.
S. Nedevski, Prelucrarea Imaginilor și Recunoașterea Formelor, Editura Albastră, Cluj-Napoca, 1998.
A. Vlaicu, Prelucrarea digitală a imaginilor, Editura Albastră, Cluj-Napoca, 1997.
C. Vertan, Prelucrarea și analiza imaginilor, Editura Printech, București, 1999.
*** MATLAB® 7 Documentation Set,
http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/matlab.html&http://www.mathworks.com/access/helpdesk/help/helpdesk.html
*** Image Processing Toolbox™ 6, Documentation Set,
http://www.mathworks.com/access/helpdesk/help/toolbox/images/index.html?/access/helpdesk/help/toolbox/images/
Bibliografie
S. Curilă, M. Curilă, Tehnici de prelucrare a imaginilor utilizate la recunoașterea formelor, Editura Universității din Oradea, 2004.
A. Gacsádi, C. Grava, O. Straciuc, I. Gavriluț, PDE-Based Medical Images Denoising Using Cellular Neural Networks, IEEE Proceedings of the International Symposium on Signals Circuits and Systems (ISSCS 2009), Vol. 2, July 9-10, 2009, Iași, România, pp. 397-400.
M. Ghinea, V. Firețeanu, MATLAB. Calcul numeric – grafică – aplicații, Editura Teora, București, 1997.
C. Grava, V. Buzuloiu, Elemente de prelucrarea și analiza imaginilor, Editura Universității din Oradea, 2007.
C. Grava, Șt. Ciurel, V. Buzuloiu, Principii ale aparatelor de imagistică medicală, Editura Universității din Oradea, 2004.
A. K. Jain, Fundamentals of Digital Image Processing, Editura Prentice-Hall Inc., 1989.
Al.M. Morega, Introducere în imagistica medicală, Editura MatrixRom, București, 2002.
S. Nedevski, Prelucrarea Imaginilor și Recunoașterea Formelor, Editura Albastră, Cluj-Napoca, 1998.
A. Vlaicu, Prelucrarea digitală a imaginilor, Editura Albastră, Cluj-Napoca, 1997.
C. Vertan, Prelucrarea și analiza imaginilor, Editura Printech, București, 1999.
*** MATLAB® 7 Documentation Set,
http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/matlab.html&http://www.mathworks.com/access/helpdesk/help/helpdesk.html
*** Image Processing Toolbox™ 6, Documentation Set,
http://www.mathworks.com/access/helpdesk/help/toolbox/images/index.html?/access/helpdesk/help/toolbox/images/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Senzorul Inteligent (ID: 150436)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
