Realizarea Unui Sistem Mecatronic Pentru Monitorizarea Starii de Oboseala a Persoanelor Active
Rezumat
Oboseala este una din principalele surse ale accidentelor din viața cotidiană. Numai din cauza oboselii la volan, anual se pierd peste o mie de vieți. Sunt însă și alte meserii în care oboseala ar putea provoca accidente grave, motiv pentru care tema lucrării de diplomă propune realizarea unui sistem mecatronic pentru prevenirea acestor accidente.
La momentul actual există multe sisteme de avertizare pentru șoferi cu diverse elemente sensibile, dintre care amintim camere video cu infraroșu cu programe implementate pentru recunoașterea ochilor și a clipirii, emițător-receptor infraroșu, sau senzori de poziție pentru identificarea poziției capului.
În urma unei analize critice a sistemelor existente, s-a propus crearea unui astfel de sistem pentru recunoașterea primelor semne ale oboselii și avertizarea subiectului în cauză, cu ajutorul unor semnale sonore și a unor vibrații generate în mediul apropiat. La baza sistemului dorit stau un senzor de puls pentru monitorizarea frecvenței cardiace a subiectului, aplicat pe lobul urechii și o cameră web pentru recunoașterea fenomenului de clipire a acestuia cu ajutorul unui program dezvoltat pe baza unor algoritmi existenți.
Abstract
Fatigue is one of the main sources of accidents in everyday life. Driver fatigue alone causes over a thousand deaths annually. Fatigue as the inception of serious accidents is also common in several other working contexts. Taking this into consideration, the focus of my bachelor degree is on developing a mechatronic system to prevent such accidents.
There are currently many warning systems for drivers that include various sensors and elements. Among these we can mention infrared cameras with programs implemented for the eyes and blink recognition, infrared transceiver, or position sensors to identify the position of the wearer's head. However, some of these are still very expensive or do not specifically tackle the issue of fatigue in its incipient form.
Following a critical analysis of existing systems, I decided to create a system that is able to recognize the first signs of tiredness and warn the user by using audio tones and vibrations generated in the immediate environment. The system is based on a pulse sensor that monitors the heart rate of the subject. The system is positioned on the earlobe and includes a webcam programmed for blink detection using existing algorithms.
Tabel de figuri
Fig. 3.1. Sleep Watcher – XR 15 [4] 11
Fig. 3.2. Principiul de funcționare al sistemului Alertness Monitor [5] 13
Fig. 3.3. Pulsoximetru UPALM 15
Fig. 3.4. Tensiometru digital OMRON 9 16
Fig. 3.5. Așezarea electrozilor de suprafață pentru o electroencefalogramă [8] 18
Fig.3.6. Dispunerea corectă a electrozilor [9] 19
Fig. 3.7. Principiul de funcționare a EMG [11] 20
Fig. 4.1. Schema bloc a subsistemului hardware 23
Fig. 5.1. Microcontrollere din familia XC800 ale companiei Infineon [13] 24
Fig. 5.2. Atmega328 stânga: vedere de ansamblu, dreapta: dispunerea pinilor [14] 25
Fig. 5.3. Bootload de pe o placă Arduino UNO 26
Fig. 5.4. Diverse tipuri de plăci Arduino existente pe piață [1000] 27
Fig. 5.5. Cantitatea de lumină absorbită de oxihemoglobină și dezoxihemoglobină în funcție de lungimea sa de undă 29
Fig. 5.6. LED : Așezarea pinilor (stânga), simbol (dreapta) 30
Fig. 5.7. Fotodioda SFH203 FA (stânga), simbolul unei fotodiode(dreapta) A – anod, K – catod 31
Fig. 5.8. Diferite tipuri de rezistori (stânga), simbol rezistență (dreapta) 32
Fig. 5.10. Diferite amplificatoare operaționale (stânga), simbolul amplificatorului operațional (dreapta) 33
Fig. 5.11. Motor de curent continuu [30] 36
Fig. 5.12. a) Sursă de tensiune reglabilă de 3 – 30 V ( 3A – CC ), 37
Fig. 5.13. Interfața programului Arduino 1.6.1. 39
Fig. 5.14. Interfața Visual Basic 42
Fig. 5.15. Platforma de procesare Arduino Uno V3 43
(stânga – vedere de sus, dreapta – vedere de jos) 43
Fig. 5.16. Schema electrică a plăcii Arduino Uno R3 44
Fig. 5.17. Camera web HP 1300, dreapta interfața soft-ului original [36] 45
Fig. 6.1. Schema electrică a pulsometrului, proiectată cu ajutorul programului Eagle 47
Fig. 6.2. Alimentator extern cu tensiune reglabilă Universal AC/DC 48
Adapter 1000 mA 48
Fig. 6.3. Interfață Arduino IDE 49
Fig. 6.4. a) Submeniul Examples din meniul File, b) Board din meniul Tools 50
Fig. 6.5. Descărcarea programului Visual Studio de pe pagina oficială 50
Fig. 6.6. Pagina oficială de pe care se poate descărca OpenCV 51
Fig. 6.7. Crearea unui system path 52
Fig. 6.8. Crearea unui nou proiect 53
Fig. 6.9. Inserarea directorului pentru includerea bibliotecilor 54
Fig. 6.10. Adăugarea librăriilor în custom Component Set 55
Fig. 6.11. Detecția feței și a ochilor cu algoritmul Haar-Cascade 56
Fig. 6.12. Detectarea cercurilor folosind Transformata Hough generalizată 57
Fig. 6.13. Detecția irisului cu transformata Hough 58
Fig. 7.1. Recunoaștere trăsăturilor feței : față și ochi 59
Fig. 7.2. Exemple de imagini binare pentru identificarea de contur folosind funcția cvCanny 60
Fig. 7.3. Detectarea irisului aplicând transformata Hough 61
Fig. 7.4. Interfață pentru recunoaștere de imagini 61
Fig. 7.6. Selectarea portului de comunicație serială 63
Fig. 7.7. Fereastra „Despre” , cu detalii despre proiectul realizat în Visual Studio 2010 63
Fig. 7.8. Haar-Cascade aplicat pentru ochi și față 64
Fig. 7.9. Deschiderea ferestrei de tip eroare critică pentru sesizarea subiectului 65
Fig. 7.10. Testarea circuitului electric 65
Fig. 7. 11. Grafic obținut în Processing 2.2.1. pentru: 67
Fig. 7.12. Componentele electronice montate și fixate pe PCB 67
Fig. 7.13. Senzor de puls realizat după proiectul meu 68
Introducere
După Abraham Maslow, odihna este o necesitate primară a omului, alături de hrană, apă, adăpost, respirație și reproducere, aceasta reprezentând o nevoie fiziologică (deci de supraviețuire), în absența căreia omul nu poate duce o viață normală.
Încă din cele mai vechi timpuri, somnul a provocat accidente, uneori fatale, pentru că orice om are nevoie de odihnă și acest fapt nu poate fi evitat la nesfârșit. Au existat diverse soluții pentru siguranța familiilor sau a comunităților în acele momente în care unii indivizi dormeau, cum ar fi paznicii de noapte care stăteau de pază cu rândul pentru a nu adormi, ulterior s-au domesticit animale pentru a păzi împrejurimile, pentru situațiile primejdioase (cum ar fi cutremurele, incendiile, atacurile, ș.a.) au fost dezvoltate sisteme de alarmă sonore.
În prezent, conform unor statistici realizate de WebMD (o corporație ce se ocupă de expertize și înștiințări în domeniul sănătății), cel puțin o sută de mii de accidente rutiere se înregistrează anual în lume, 71.000 de persoane sunt rănite și 1.500 mor numai din cauza adormirii la volan. [1]
Lipsa somnului sau o tulburare a acestuia, administrarea unor tratamente medicale (antidepresive, spre exemplu), pot conduce la dificultăți de concentrare, la tulburări emoționale sau ale sănătății mentale, de care societatea din ziua de astăzi nu duce lipsă. Acesta este principalul motiv pentru care tema propusă urmărește sesizarea oboselii de la primele semne, pentru a se putea evita accidente provocate de ațipire.
Sunt multe modalități de a monitoriza funcțiile vitale ale unei persoane în timpul somnului, fie acesta natural sau indus, în scopuri medicale, pentru persoane cu tulburări ale somnului, sau cu un risc ridicat de a suferi pe parcursul somnului (apneea în timpul somnului este un exemplu de sindrom cu urmări grave, în care persoana se oprește din respirat în timpul somnului de una sau mai multe ori, pentru intervale neregulate de timp).
Medicii definesc oboseala ca fiind o stare complexă, ce este caracterizată prin absența vigilenței și reducerea performanțelor fizice și mentale. De cele mai multe ori ea se manifestă prin scăderea capacității de memorare, a capacității de comunicare și de decizie, prin reacții întârziate la stimulii externi, prin schimbarea dispoziției afective, nervozitate, somnolență și uneori chiar scurte episoade de somn (1 – 60 secunde). [1]
Observăm, deci, că sistemele de siguranță împotriva pericolelor ce survin adormirii apar ca o necesitate strictă pentru buna desfășurare a vieții de zi cu zi.
Noile tehnologii dezvoltate ușurează mult munca în domeniul securității, la momentul actual existând numeroase soluții pentru a verifica de la distanță, spre exemplu, dacă în interiorul casei, al mașinii de lucru, al camerelor de spital, șa toate acțiunile se petrec la parametrii prestabiliți.
Mecatronica este unul din domeniile de vârf în momentul de față, aceasta reprezentând o intersectare a trei domenii foarte importante: informatica, electronica și mecanica, posibilitățile de a proiecta și realiza sisteme automatizate fiind aproape infinite. Îmbinănd mecatronica cu cunoștințe din domeniul medical pot fi create sisteme mecatronice de monitorizare a funcțiilor vitale, care ar putea conduce la evitarea unor accidente provocate de somn.
Procesul de adormire poate fi monitorizat și preconizat luând în considerare informații preluate de la EEG, informații legate de comportamentul subiectului, de fiziologia acestuia și a informațiilor subiective. Acest lucru permite urmărirea somnului în toate fazele sale, după cum se derulează, bazându-ne pe fiecare dintre acești indici. Studiile efectuate nu susțin ideea de a adormi „într-un moment”, ci mai degrabă că adormirea se face pe etape, începând de la o stare de somnolență și relaxare, care durează până în primele minute ale următoarei etape. [2]
În urma unor cercetări științifice care urmăresc detectarea simptomelor ce preced ațipirea prin metode neinvazive bazate pe ECG, filmări ale mișcărilor ochilor, EMG și EEG ale subiecților supuși la numeroase teste de conducere (la fiecare două ore), timp de 34 de ore, s-au sesizat unele tendințe ale funcțiilor vitale. Variabilitatea frecvenței cardiace (HRV – heart rate variability) are tendința de a scădea în mod constant și semnificativ cu câteva minute înainte ca subiectul să adoarmă, iar echilibrul simpatovagal este redus înainte de ațipire, comparativ cu momentul în care subiectul este treaz. De aici se poate trage concluzia că un examen ECG poate fi util în prezicerea momentului în care persoana activă va adormi. [3]
Tema aleasă propune proiectarea, programarea și realizarea unui sistem mecatronic capabil să recunoasca oboseala de la apariția primelor semne, cu un preț de cost minim, folosind cunoștințe din domeniul medical, electronic și informatic.
Lista simbolurilor folosite
A – amper
AC – curent alternativ
AO – amplificator operațional
dB – decibeli
DC – curent continuu
ECG – Electrocardiogramă
EEG – Electroencefalogramă
EEPROM – electrically erasable programmable read-only memory
EMG – Electromiogramă
HRV – variabilitatea frecvenței cardiace
I/O – intrări/ieșiri
IR – infraroșu
KB – kilobyte
PCB – circuit imprimat
RAM – Random-access memory
ROM – Read-Only Memory
uF – microfarad
USART – universal asynchronous receiver/transmitter
V – volt
3. Studiu actual al cercetărilor și realizărilor privind sistemele de monitorizare ale oboselii
3.1. Sisteme de monitorizare a mișcărilor specifice ochilor
3.1.1. Driver Fatigue System Sleep Watcher-Xr
Descrierea produsului:
Dispozitivul de dimensiuni reduse, este proiectat să alarmeze sau să trezească șoferul în momentul în care acesta adoarme la volan, putând astfel să salveze atât viața acestuia, cât și a celor din jurul său.
Principiul de funcționare:
Exeros Sleep Watcher-XR foloseste una dintre cele mai avansate camerele de luat vederi în infraroșu, fără contact, de recunoaștere facială care monitorizează pleoapelor umane și starea în care se află retina. Acesta urmărește și evaluează mișcările retinelor și ale pleoapelor șoferului deoarece, în general când un șofer adoarme, pleoapele acestuia se închid ușor întunecând imaginea pe care o vede, făcând retina mai puțin sensibilă la schimbările de lumină.
În termen de două secunde după ce șoferul a adormit, sistemul va recunoaște aceste semne și va avertiza șoferul cu tonuri audio puternice ca avertismente, trezindu-l astfel și potențial salvând viața acestuia și / sau a altor participanți la trafic.
În urma unor teste făcute cu acest sistem s-a observat că șoferii odată avertizați au tendința de a se concentra mai mult sau de a se opri din condus pentru a se odihni.
Aceasta cameră, poate de asemenea să observe dacă șoferul nu se uită la drum, sau pur și simplu pare distras și după cinci secunde îl va avertiza sonor cu un alt ton audio, evitând astfel accidente cauzate de neatenție.
Sensibilitatea sistemului poate fi modificată la cerința cumpărătorului de la 2 – 8 secunde pentru somnolență și de la 5 – 15 secunde pentru distrageri. Sistemul poate, de altfel și să dea un semnal de 3.5 V, unui al treilea sistem cum ar fi un sistem GPS, făcând acest sistem de securitate un dispozitiv foarte util în managementul transporturilor. [4]
Avantaje:
Are vedere pe timp de noapte
Se alimentează de la bricheta mașinii
Nu urmărește doar ațipirea ci și distragerea atenției
Durate reglabile, alese de cumpărător, a perioadelor permise de neatenție și odihnire a ochilor
Are posibilitatea de a trimite informația către un sistem GPS, în cazul în care șoferul a adormit, asfel încât o persoană care are aceste drepturi ar putea să îi cunoască locația pentru orice eventualitate.
Poate fi folosit în domeniul securității șoferilor, poate fi adaptat pentru persoane care lucrează la firme de securitate sau pentru operatori CNC, pentru care distragerea atenției ar putea conduce la incidente grave
Dezavantaje:
Nu are posibilitatea de a interacționa în mod direct cu mașina ci doar cu sistemul GPS și șoferul în cauză, deci nu poate încetini sau opri mașina, în cazul în care șoferul nu ar putea reacționa din diverse motive, la aceste alarme.
Nu este util pentru monitorizarea unor persoane care lucrează în cadrul unei firme a cărei principală ocupație ar fi programarea, proiectarea sau gestionarea documentelor, ocupații pentru care părăsirea biroului sau distragerea de la obiectul muncii ar fi iminentă, deoarece sistemul acesta este stabil ca poziție (camera este fixată pe un cadru) și alarmează în mod automat dacă aceasta distragere s-a produs.
3.1.2. Sistem patentat de Assignee Optalert Pty Ltd – Alertness monitor
Numărul patentului: 7616125.
Descrierea sistemului:
Acest sistem urmărește îmbunătățirea dispozitivelor utilizate în monitorizarea mișcărilor ochilor și ale pleoapelor, preocupându-se de monitorizarea vigilenței și a neatenției, în special pentru operatorii de autovehicule și utilaje mari.
Acesta utilizează măsurarea reflexiei de impulsuri luminoase în spectrul infraroșu pentru a monitoriza mișcarea ochilor unui șofer, indiferent de vehicolul pe care îl conduce. Datele sunt folosite pentru a măsura amplitudinile mișcărilor ochilor și a pleoapelor pentru a identifica mișcările lente sau nefocalizate ale ochilor, și / sau închiderea pleoapelor. Opțional se pot folosi și pentru sesizarea absenței mișcărilor sacadice, pierderea coordonării ochilor, fluctuații ale mișcării pleoape, închiderea parțială a ochilor, și căderea pleoapelor ca indicatori ai lipsei de atenție și de somnolență.
Mișcările ochilor unui subiect sunt analizate cu ajutorul luminii reflectate în spectrul infraroșu pentru a obține date ca raportul dintre viteza cu care subiectul clipește și amplitudinea clipirii, sau a raportului dintre viteza de clipire și amplitudine mișcării sacadice. Citirile făcute sunt permanent comparate cu datele provenite de la indicatorii de mișcare ai ochilor, ca indicatori ai gradului de vigilență, astfel că sistemul de monitorizare poate da operatorului o notă pentru cât de bine poate opera pe vehiculul sau mașina sa din punct de vedere al somnolenței, indiferent de cauza acestei stări. [5]
Principii constructive:
Este un dispozitiv de monitorizare a oboselii ce include:
Un senzor de mișcare;
Senzori pentru monitorizarea mișcării ochilor și pleoapelor;
Mijloace de stocare a informației provenite de la acești senzori.
Oferta pe care o face acest produs include:
un emițător de pulsuri luminoase în infraroșu adaptat să fie amplasate adiacent la cel puțin unui ochi șoferului;
cel puțin un detector de lumină reflectată situat adiacent emițătorului pentru a colecta semnalele reprezentând clipiri și mișcările sacadice,
mijloace pentru a transmite semnale de la detectorul de lumină infraroșie,
mijloace de prelucrare a datelor primite de la detector,
procesor de date ce folosește un algoritmul de obținere a unui raport dintre măsura amplitudinii clipirii la raportul vitezei acesteia și / sau între amplitudinea sacadei la viteza acesteia,
o medie a măsurilor obținute la punctul e) pe perioade predeterminate de timp;
măsurarea deviației medie obținută la punctul f) de la o medie predeterminată pentru subiecții ce trebuie alarmați.
Avantaje:
Lumina în spectrul infraroșu nu deranjează șoferul deoarece este o lumină invizibilă ochiului uman.
Senzorul de mișcare oferă informații despre accelerația sau viteza mașinii, motiv pentru care, sistemul nu va deranja șoferul cu alarme, în situația în care mașina stă pe loc.
Sistemul poate urmări mișcările sacadice ale ochilor, deci poate determina cu precizie dacă șoferul este atent la drum
Sistemul compară în permanență datele, deci pentru persoane cu diferite defecte de vedere, acesta poate să deosebească defectul de vedere, de lipsa concentrării
Dezavantaje:
Nu poate fi folosit pentru persoane care au activități ce implică menținerea poziției deoarece senzorul de mișcare nu ar lăsa sistemul să pornească
Nu este util în domenii în care este inevitabilă distragerea atenției, cum ar fi proiectare, programare sau gestionare de documente
3.2. Sisteme medicale de monitorizare a funcțiilor vitale
3.2.1. Pulsoximetrul
Descrierea produsului:
Este un aparat de măsură care permite determinarea concentrației de oxigen în sânge, folosind o metodă neinvazivă.
Principiul de funcționare :
Principiul de functionare a pulsoximetrului se bazează pe spectrofotometrie, măsurând modificările de absorbție a luminii de către două forme de hemoglobină: oxigenată și redusă.
Un pulsoximetru folosește două surse de lumină: una în spectrul infraroșu și cealaltă în spectrul vizibil (lumină roșie). [6]
Ca senzor optic, acesta utilizează o fotodiodă care convertește lumina ce nu a fost absorbită de hemoglobină în curent electric.
Cele mai utilizate zone de aplicare a pulsoximetrului sunt varfurile degetelor, lobii urechilor sau pe nări (zone puternic vascularizate).
Avantaje:
Permite monitorizarea continuă a concentrației de oxigen din sânge;
Permite măsurarea pulsului subiectului;
Permite detectarea aritmiilor;
Permite determinarea variabilității frecvenței cardiace;
Dezavantaje:
Are o acuratețe scăzută dacă unghiile sunt date cu lac;
Pot apărea erori din cauza mișcării;
Precizie redusă a rezultatelor asupra concentrației de oxigen din sânge;
[6]
Conform celor enunțate mai sus, un pulsoximetru poate fi implementat în sistemul dorit, senzorul optic având dimensiuni reduse și îndeplinind condiția de a măsura pulsul cu o acuratețe ridicată. Acesta poate fi aplicat pe lobul urechii, fiind practic și comod.
3.2.2. Tensiometrul digital
Principiul de funcționare:
Aparetele digitale de măsurare a tensiunii arteriale funcționează asemănător tensiometrelor clasice.
Pentru umflarea manșetei se folosesc o pompă și un motor electric de mici dimensiuni. Presiunea din manșetă este eliberată treptat de un mecanism controlat electronic. Pentru a putea sesiza zgomotele produse de curgerea sângelui prin vasele sanguine se detectează micro-vibrațiile pereților vaselor de sânge. Aceste semnale sunt transformate în semnale electrice, interpretate ulterior de aparat.
Avantaje:
Este ușor de folosit (nu este necesară pregătire specială);
Poate memora mai multe date legate de tensiunea sistolică, diastolică și puls.
Dezavantaje:
Pentru o măsurătoare de acuratețe este necesar ca în timpul în care se ia tensiunea subiectul trebuie să stea nemișcat, de preferat cu mâna sprijinită pe o masă, cu palma în sus, condiție greu de îndeplinit în timpul unei activități întreținute;
Dimensiuni relativ mari, făcând tensiometrul digital incomod.
[7]
3.2.3. Electroencefalograma
Electroencefalografia (EEG) este o metodă neinvazivă – electrofiziologică de monitorizare, în timp, a activității cerebrale, ce constă în măsurarea biocurenților prin intermediul mai multor electrozi de suprafață aplicați pe scalp.
Principiul de funcționare:
Electroencefalograma este o analiză medicală ce se bazează pe înregistrarea comportamentului colectiv al neuronilor cortexului cerebral, în urma măsurării unui set de potențiale de câmp fluctuante, produse din activitatea concomitentă a unui număr mare de neuroni, captate prin intermediul electrozilor situați pe scalp. Electroencefalograma este utilă în diagnosticare paciențielor cu epilepsie, encefalopatii, în monitorizarea activității cerebrale în timpul anesteziei și a pacientilor aflați in comă și în stabilirea morții cerebrale. [8]
Avantaje:
Sensibilitate foarte mare;
Se poate stabili dacă subiectul a adormit sau urmează să adoarmă.
Dezavantaje:
Utilizarea unui astfel de sistem necesită personal special antrenat;
Este incomod;
Preț ridicat.
EEG este utilă în înțelegerea fenomenelor ce au loc în timpul somnului, însă nu ar putea fi implementată în sistemul dorit deoarece are un preț de cost foarte ridicat.
3.2.4. Electrocardiograma
Electrocardiograma (ECG sau EKG) este o înregistrare a activității electrice a fibrelor musculare ale inimii.
Principiul de funcționare:
Fiecare contracție a miocardului este precedată de o excitație electrică ce provine de la nodulul sinusal, fiind transmis musculaturii inimii. Aceste modificări ale potențialelor electrice ale inimii pot fi măsurate la suprafața organismului, fiind reprezentate printr-o imagine repetată a activității cardiace electrice. Cu ajutorul electrocardiogramei se pot enunța o serie de proprietăți și boli ale inimii. [9]
Avantaje:
Datorită sensibilității aparatului, se poate declara facil dacă activitatea cardiacă a subiectului este redusă, acesta urmând să adoarmă.
Dezavantaje:
Este necesar personal specializat pentru montarea electrozilor;
Este necesar ca subiectul să stea întins pe spate.
Deoarece subiectul trebuie să stea relaxat pe spate, ECG nu poate fi utilizată în timpul activităților obișnuite, făcând ECG inutilă în sistemul dorit.
3.2.5. Electromiografia
Electromiografia (EMG) este un tehnică electrofiziologică folosită la înregistrarea activității electrice a mușchilor.
Principiul de funcționare:
Când mușchii subiectului sunt activi, aceștia produc impulsuri electrice direct proporționale cu nivelul activității musculare.
Electromiografia poate fi utilă în depistarea activității electrice anormale de la nivelul mușchilor, survenite în afecțiuni precum distrofie musculară, inflamații musculare, leziuni ale sistemului nervos periferic (manifestate la nivelul mâinilor și picioarelor), scleroza laterală amiotrofică, miastenia gravis, hernie de disc etc. [10]
Avantaje:
Se pot depista patologii neuromusculare;
Dezavantaje:
Analiza necesită personal specializat;
EMG implică introducerea unui electrod sub formă de ac, fiind deci o metodă invazivă;
Durata examenului este de 20-30 de minute.
Luând în considerare cele enunțate mai sus, putem spune că EMG nu reprezintă o tehnică de monitorizare ideală pentru implementare în sistemul propus.
3.3. Concluzii
Cel puțin, la nivel teoretic, tema propusă poate fi realizată folosind:
Un senzor de puls (pulsoximetru) aplicat pe lobul urechii;
Observație: Deoarece nu este necesară stabilirea concentrației de oxigen din sânge, ci doar pulsul, se poate renunța la LED-ul ultraputernic de culoare roșie, acest lucru sporind comoditatea purtătorului.
Un sistem de alarmă:
Pentru semnale sonore: difuzor,
Pentru semnale vizuale: LED-uri,
Pentru semnale tactile: motoare de curent continuu cu contragreutate (pentru a genera vibrații).
cameră web, programată să poată recunoaște semne ale oboselii sau ale neatenției;
o interfață pentru interacțiunea cu camera web;
sursă de alimentare, cu tensiune reglabilă;
platformă de dezvoltare Arduino Uno, pentru monitorizarea pulsului, comandarea sistemului de alarmă și preluarea de date de la camera web.
4. Obiective propuse
4.1. Proiectarea și realizarea subsistemului Hardware
Subsistemul hardware trebuie să îndeplinească următoarele condiții:
Costurile și pierderile energetice să fie minime
Să determine frecvența ritmului cardiac (pulsul) sau variabilitatea frecvenței cardiace (HRV), să recunoască semnele oboselii, din mișcările caracteristice ochilor (clipit, focalizare asupra unui punct);
Senzorul de puls trebuie să aibă dimensiuni cât mai reduse și un design care să nu incomodeze persoana care îl poartă;
Realizarea practică să aibă un preț de cost total redus;
Designul părții electronice să permită o reducere a dimensiunilor cât mai mare.
4.2. Proiectarea și realizarea subtistemului software
Subsistemul software trebuie să îndeplinească următoarele condiții:
Să permită producătorului să modifice diverși parametri
Să consume cât mai puțină memorie RAM
Să permită comunicația între elementele utilizate în proiect
Să trimită informații către o a treia parte în cazul în care subiectul adoarme (opțional)
Să permită reglarea sensibilității sistemului, aceasta fiind aleasă la achiziționare de către un eventual client;
4.3. Testarea produsului
La testarea sistemului trebuie să fie îndeplinite următoarele cerințe:
Să fie adaptabil la cât mai multe medii de lucru;
Să sesizeze semnele oboselii sau ale neatenției într-o perioadă cât mai scurtă de timp;
Să aibă sensibilitate ridicată, cu erori cât mai mici;
Valorile provenite de la senzorul de puls să fie cât mai apropiate de cele reale.
5. Considerații teoretice privind realizarea unui sistem mecatronic de monitorizare a oboselii
Sistemul mecatronic propus, pentru a putea funcționa în parametrii doriți va fi compus din:
Subsistem hardware
Subsistem Software
Schema bloc a subsistemului hardware este prezentată mai jos, în Fig
5.1. Subsistemul hardware
5.1.1. Microcontrollere
Noțiuni generale:
Un microcontroller este un circuit de dimensiuni reduse ce încorporează o unitate centrală de procesare (CPU) și o memorie împreună cu alte resurse care-i permit interacțiunea cu mediul exterior. La modul general un controler ("controller" – un termen cu un domeniu de cuprindere foarte larg) este o structură electronică destinată controlului unui proces sau a unei interacțiuni caracteristice cu mediul exterior, fără a fi necesară o intervenție a operatorului uman.
La început controlerele au fost realizate în tehnologii analogice, fiind utilizate componente electronice discrete și/sau componente electromecanice (de exemplu relee).
Apariția și utilizarea microprocesoarelor de uz general a dus la o reducere consistentă a costurilor, dimensiunilor, consumului și o îmbunătățire a fiabilității produselor.
Toate sistemele în care se utilizează microcontrollere fac parte din categoria așa ziselor sisteme integrate („embedded systems”), la care prezența unui sistem de calcul intern este, pentru cei mai mulți utilizatori, transparentă.
Domenii de utilizare:
Printre multele domenii unde utilizarea lor este practic un standard industrial se pot menționa: în industria de automobile (controlul aprinderii/motorului, climatizare, diagnoză, sisteme de alarmă, etc ), în electronica de consum (sisteme audio, televizoare, camere video și videocasetofoane, telefonie mobilă, GPS-uri, jocuri electronice etc.), în aparatura electrocasnică (mașini de spălat, frigidere, cuptoare cu microunde, aspiratoare), în controlul mediului și climatizare (sere, locuințe, hale industriale), în industria aerospațială, în mijloacele moderne de măsurare – instrumentație (aparate de măsură, senzori și traductoare inteligente), la realizarea de periferice pentru calculatoare, în medicină.
Limbajul mașină (instrucțiunile mașină) este singura formă de reprezentare a informației pe care un microcontroler o "înțelege". Din păcate această formă de reprezentare a informației este total nepractică pentru un programator, care va utiliza cel puțin un limbaj de asamblare, în care o instrucțiune (o mnemonică cu operanzii aferenți) are drept corespondent o instrucțiune în limbaj mașină (excepție fac macroinstrucțiunile disponibile la unele asamblare).
Un program în limbaj de asamblare este rapid și compact. Aceasta nu înseamnă că un astfel de program nu poate fi lent și de mari dimensiuni, programatorul având controlul total pentru execuția programului și gestiunea resurselor. Limbajul de asamblare este primul care trebuie învățat, chiar sumar, atunci când dorim să proiectăm o aplicație hard/soft cu un anume microcontroler (familie), el permițând înțelegerea arhitecturii acestuia și utilizarea ei eficientă. [12]
5.1.2. Atmega328
ATmega328 este un cip microcontroler creat de către Atmel și face parte din seria de megaAVR. Acesta este frecvent utilizat în mai multe proiecte și sisteme autonome unde este necesar un microprocesor cu consum redus și un preț mic. Probabil cea mai comună implementare a acestui chip este populara platforma de dezvoltare Arduino, pentru modelele Uno și Nano.
Atmega328 AVR pe 8 biți este un circuit integrat de mare performanță ce are la bază un microcontroler de tip RISC, combinând o memorie de 32 KB ISP de tip flash cu capacitatea de a citi în timpul în care scrie informații. Atmega328 mai are o în componența sa o memorie de 1KB de tip EEPROM, 2 KB de memorie de tip SRAM, 23 linii pentru Enable/Stop de uz general, 32 de regiștri pentru procese generale, trei (temporizatoare) timere/(numărătoare) countere, întreruperi interne și externe, programator serial de tip USART, o interfață serială orientată pe byte cu 2 cabluri, port serial de tip SPI, 6 canale de 10-biți de convertor Analog/Digital (8 canale în pachete TQFP (Quad Flat Package) și QFN (Quad Flat No-Leads Package) / MLF (Micro leadframe package)), "watchdog timer" programabil cu oscilator intern (32,768 kHz) și cinci moduri selectabile de economisire a energiei din software-ul intern. Dispozitivul funcționează cu o tensiune de lucru de 1,8-5,5 V. [14]
Pentru a scrie comunica cu o placă Arduino se va lega microcontrolerul Atmega328 ca în figura următoare:
5.1.3. Platforme de dezvoltare – Arduino
Arduino este o platformă de dezvoltare, destinată să facă mai accesibilă crearea unor proiecte digitale sau a unor sisteme interactive cu mediul înconjurător. Partea fizică a acestuia constă într-o placă de tip circuit imprimat cu pini proiectată în jurul unui microcontroler pe 8-biți Atmel AVR (Atmega328), sau de 32 biți de la Atmel ARM. Modelele actuale sunt dotate cu o interfață USB, 6 pini de intrare analogice, precum și pini pentru 14 I (intrări)/O (ieșiri) digitale, care permit utilizatorului să atașeze mai multe plăci de extensie.
Aceasta a fost introdusă în 2005, ceatorii săi declarând că platforma Arduino a fost proiectată pentru a oferi o modalitate ieftină și ușoară de a a crea dispozitive care interacționează cu mediul în care se află folosindu-se de senzori și actuatori. Este destinată oricărei persoane pasionată de acest domeniu, studenților și profesioniștilor. Cele mai des întâlnite proiecte realizate cu această placă de către amatorii acestui domeniu includ crearea unor roboți simpli, crearea unor senzori termici, acustici, haptici sau a unor senzori de mișcare. Acesta este dotat cu un mediu de dezvoltate simplu de utilizat, integrat (IDE), care rulează pe majoritatea computerelor personale și permite utilizatorilor să scrie programe pentru aceasta placă Arduino, folosind limbaj C sau C ++. [15]
5.1.4. Senzori
Senzorul este un dispozitiv tehnic care reacționează calitativ sau cantitativ prin proprii mărimi măsurabile, la anumite proprietăți fizice sau chimice ale mediului din preajma lui. Ca parte componentă a unui aparat sau sistem tehnic detector poate măsura/înregistra de exemplu presiunea, umiditatea, câmpul magnetic, accelerația, forța, intensitatea sonoră, radiații ș.a. [16]
Senzorul este un dispozitiv care măsoară o cantitate fizică(masa, presiune, temperatura, umiditate, etc) și o transformă într-un semnal care poate fi citit de către un observator printr-un instrument sau poate fi prelucrat. În automatizare, informația calitativă/cantitativa măsurabilă livrată de senzori, după o eventuală amplificare și prelucrare servește la controlul și reglarea sistemelor tehnice automate.
Clasificarea senzorilor:
Senzorii pot fi clasificați în funcție de tehnologiile utilizate pentru realizarea lor:
Tehnologii ale materialelor feromagnetice;
Tehnologii ale materialelor piezo-ceramice;
Tehnologii ale microeelectronicii și microsistemelor;
Tehnologii ale staturilor subțiri;
Tehnologii ale staturilor groase;
Tehnologii pentru materiale sinterizate;
Tehnologii ale foliilor etc.
În funcție de tipul mărimii fizice de intrare senzorii pot fi clasificați în:
absoluți, când semnalul electric de ieșire poate reprezenta toate valorile posibile ale mărimii fizice de intrare, raportate la o origine (referință) aleasă;
incrementali, când nu poate fi stabilită o origine pentru toate punctele din cadrul domeniului de măsurare, ci fiecare valoare măsurată reprezintă originea pentru cea următoare.
Foarte importantă este clasificarea în funcție de tipul mărimii de ieșire, în:
senzori analogici, pentru care semnalul de ieșire este în permanență proporțional cu mărimea fizică de intrare;
senzori numerici (digitali), la care semnalul de ieșire poate lua numai un număr limitat de valori discrete, care permit cuantificarea semnalului fizic de intrare.
Privind problema semnalului de ieșire din punctul de vedere al numărului de valori
posibile, pot fi puse în evidență alte două clase distincte:
senzori binari, care prezintă la ieșire numai două valori distincte;
senzori cu un număr mare de valori, pentru măsurarea unei mărimi într-o anumită plajă; pot fi analogici sau numerici.
Un alt criteriu de clasificare ține cont de numărul elementelor traductoare și de numărul
de dimensiuni atribuite valorilor măsurate și clasifică senzorii în scalari (un traductor, o
dimensiune), vectoriali (măsurări după trei direcții ortogonale) și matriciali (un anumit
număr de traductoare dispuse după o matrice mono-, bi- sau tridimensională).
Cele două ramificații principale permit gruparea senzorilor în două categorii mari:
Senzorii interni (denumiți de unii autori și intero-receptori), care servesc la obținerea unor informații legate de funcționarea robotului, cum ar fi poziția relativă a elementelor cuplelor cinematice, vitezele și accelerațiile liniare și unghiulare, deformațiile elementelor lanțului cinematic ș.a.
Senzori externi (denumiți de unii autori și extero-receptori), utilizați pentru culegerea unor informații asupra mediului înconjurător și asupra interacțiunii robot/mediu; servesc la identificarea prezenței și stabilirea tipului, poziției, orientării, culorii sau a altor proprietăți ale obiectelor din mediu, la identificarea unor obstacole, la determinarea forțelor de interacțiune robot/mediu.
O altă clasificare se referă la senzori de tip:
Activ: consumator de energie, de exemplu radar (măsurarea distanțelor prin emitere de radiatii electromagnetice)
Pasiv: de exemplu fotorezistența cu care se poate măsura intensitatea luminii incidente. [17]
5.1.5. Senzor de puls – Pulsoximetru
Pulsoximetrul este un aparat de măsură a gradului de oxigenare sanguină și saturare a hemoglobinei. Este un aparat neinvaziv ce ajută la vizualizarea concentrației de oxigen (O2 în sânge este legat de hemoglobină și numai o mică parte dizolvat în plasmă).
Principiul de funcționare a pulsoximetrului se bazează pe spectrofotometrie și legea lui Beer – Lambert, măsurând modificările de absorbție a luminii de către două forme de hemoglobină: oxigenată si redusă.La pulsoximetrie sunt utilizate două surse de lumină: o sursă invizibilă în spectrul infraroșu și o sursă în spectrul vizibil, cu lungimea de undă pentru lumină roșie. Sursa de lumină și senzorul sunt montate într-un cuplu ce se atașează la pulpa degetului sau lobul urechii. Cum absorbția de fond a radiației de către sângele venos, țesutul subcutanat și piele sunt practic constante, singura variabilă este cantitatea de Hb (undă pulsatorie) din patul vascular.
Valorile SaO2 cuprinse între 94-l00%, reflectă o saturatie optimă a Hb în O2, valorile de 93-88% definesc hipoxemia ușoară, cele de 88-83% hipoxemia medie, iar cele mai mici de 83% hipoxemia gravă. Se consideră de diverși autori că scăderea SaO2 sub 93% trebuie sa fie urmată prompt de măsuri compensatorii. [18]
5.1.6. LED-uri (Light Emitting Diode)
Un LED (diodă emițătoare de lumină) este o diodă semiconductoare ce emite lumină la polarizarea directă a joncțiunii p-n. Efectul este o formă de electroluminescență.
Un LED este o sursă de lumină mică, de cele mai multe ori însoțită de un circuit electric ce permite modularea formei radiației luminoase. De cele mai multe ori acestea sunt utilizate ca indicatori în cadrul dispozitivelor electronice, dar din ce în ce mai mult au început să fie utilizate în aplicații de putere ca surse de iluminare.
Culoarea luminii emise depinde de compoziția și de starea materialului semiconductor folosit, și poate fi în spectrul infraroșu, vizibil sau ultraviolet. Pe lângă iluminare, LED-urile sunt folosite din ce în ce mai des într-o serie mare de dispozitive electronice. [19]
Radiația în infraroșu (IR) este o radiație electromagnetică a cărei lungime de undă este mai lungă decât cea a luminii vizibile (400-700 nm), dar mai scurtă decât cea a radiației terahertz (100 μm – 1 mm) și a microundelor (~ 30000 μm). [20]
În imaginea de mai jos se poate observa modul de recunoaștere a pinilor, cel mai lung fiind anodul, iar în situația în care pinii sunt tăiați , se poate observa că în dreptul catodului carcasa de plastic a LED-ului are o teșitură.
5.1.7. Fotodioda
O fotodiodă este un tip de fotodetector capabil să convertească lumina în curent electric sau în tensiune electrică, în funcție de modul de operare. Fotocelula obișnuită, folosită pentru a genera energie electrică folosind energia solară, este de fapt o fotodiodă dispusă pe o suprafață mai mare.
Fotodiodele sunt similare diodelor semiconductoare, cu excepția că pot fi expuse (pentru a detecta radiațiile ultraviolete din vid sau razele X) sau încapsulate cu o fereastră sau conexiune pentru fibră optică, pentru a permite luminii să ajungă la partea fotosensibilă a dispozitivului. Multe diode proiectate pentru a fi folosite ca fotodiode utilizează mai degrabă o joncțiune PIN, decât o joncțiune p-n, pentru a crește viteza de răspuns. O fotodiodă este proiectată să funcționeze în polarizare inversă. [21]
5.1.8. Rezistențe (rezistori)
Rezistorul este o piesă componentă a circuitelor electrice și electronice a cărei peoprietate principală este aceea că produce o rezistența electrică. Rezistorul obișnuit are două terminale (nu este polarizată), după legea lui Ohm (care spune că intensitatea curentului este direct proporțională cu rezistența, iar tensiunea este invers proporțională cu aceasta), curentul electric care curge prin rezistor este proporțional cu tensiunea aplicată la capetele acestuia.
După materialul folosit pentru realizarea lor, numim: rezistoare din metale sau din aliaje metalice (fire sau benzi), rezistoare peliculare cu carbon, (pelicule depuse pe un suport izolat), cu peliculă de metal-oxid, cu lichid, bazate pe rezistența unui strat de lichid între două plăci metalice cufundate în lichid.
În practică întâlnim și rezistoare variabile, a căror rezistență electrică variază în funcție de poziția unui cursor de pe filmul electric. Dacă cursorul nu face contact cu unul dintre capete, numim rezistorul „potențiometru” care operează ca un divizor de tensiune.
5.1.9. Condensatori
Un condensator este un dispozitiv electric pasiv care poate stoca energie electrică sub forma de câmp electric între două plăci încărcate cu o sarcină electrică egală ca valorare, dar de semn contrar. De asemenea, este cunoscut și sub denumirea de capacitor (din engleză).
Unitatea de măsură pentru capacitatea electrică, în sistemul internațional este Farad –ul (notat cu litera „F”), însă această unitate nu este tocmai utilă, deoarece ca uz general se folosesc condensatori cu capacități de nivelul nano/ micro/ mili F.
Condensatorii pot fi de mai multe feluri (ceramici, electrolitici, cu tantal, cu poliester etc), ele fiind realizate atât în tehnologie SMD (montate pe suprafață) cât și în tehnologie THT (cu pini). [23]
5.1.10. Amplificatoare operaționale
Un amplificator operațional este un amplificator cuplat în curent continuu (amplificator analogic), care amplifică puternic tensiuni aplicate diferențial la două intrări și are uzual o singură ieșire. Are funcțional un punct de nul, adică este alimentat de la două tensiuni, pozitivă și negativă.
Intrarea inversoare este notată cu semnul (-) iar cea neinversoare cu semnul (+). Aceste semne nu au nici o legătură cu polaritatea tensiunilor individuale, u+ și u-, care se pot aplica pe aceste terminale, deoarece ambele semnale pot fi, în raport cu masa, atât pozitive cât și negative. Aceste semne au în schimb legătură cu relația de fază dintre semnalele de intrare și cel de ieșire. Astfel, dacă intrarea neinversoare se leagă la masă iar pe intrarea inversoare se aplică un semnal cu variație crescătoare, la ieșire se obține un semnal cu variație descrescătoare. Din acest motiv intrarea (-) se numește inversoare. Similar, dacă intrarea inversoare este conectată la masă și se aplică un semnal cu variație crescătoare pe intrarea neinversoare, la ieșire se obține un semnal tot cu variație crescătoare. Din această cauză intrarea (+) se numește neinversoare.
Un Amplificator Operațional ideal se caracterizează prin:
impedanță de intrare, văzută între cele două intrări, infinită.
impedanță de ieșire, văzută între terminalul de ieșire și masă, nulă.
amplificare diferențială în buclă deschisă infinită.
Legendă:
V+: intrarea fără invertare
V−: intrarea cu invertare
Vout: ieșirea
VS+: alimentarea cu tensiune pozitivă
VS−: alimentarea cu tensiune negativă (respective GND) [24]
5.1.11. Aparate de înregistrare video
Înregistrarea video este tehnologia de captare, înregistrare, procesare, depozitare, transmitere și reconstrucție electronică a unei secvențe de imagini reprezentând scene în mișcare.
Primul aparat de înregistrare video (VCR) a fost fabricat de firma Sony în anul 1969. Aparatele VCR înregistrează semnale provenind de la antene TV, antene parabolice, cabluri sau camere video pe o banda magnetică. Unii amatori de jocuri video se joacă cu videodiscuri. La început s-au fabricat filme mute, folosindu-se bobine de filme fotografice, care trebuiau developate înainte de a fi redate cu un proiector. Sistemele video timpurii foloseau o cameră TV mare, conectată la un VCR greu. Ele au fost înlocuite în anul 1980, o dată cu inventarea camerei video portabile, cu un înregistrator încorporat. [25]
Un alt tip de cameră de luat vederi realizatã cu un senzor vizual liniar CCD (Charge Coupled Device) care permite preluarea unei singure linii din scena investigată; dacã se asociază camerei un dispozitiv de deplasare relativă, cu viteză constantă, se poate obține o imagine bidimensională a scenei, care prelucrată corespunzãtor conduce la recunoașterea formelor pieselor din scenă.
Tehnologia CCD
Dispozitivul cu cuplaj de sarcină (DCS) (din engleză de la Charge-Coupled Device, abreviat CCD) este un registru cu deplasare analogic ce permite transportul semnalelor analogice (al sarcinilor electrice) prin mai multe etape succesive, sub controlul unui semnal de ceas. Principala utilizare a acestor dispozitive o constituie senzorii de imagine folosiți în scanere, aparate foto digitale, în telescoape și în diverse alte dispozitive de captat imagini. Un senzor CCD este format dintr-un tablou de diode fotosensibile care captează datele imaginii și un tablou de memorare care le preia, atunci când este cuplat la tabloul de diode. Unul dintre cele mai bune exemple de utilizare a acestor dispozitive cu cuplaj în sarcina CCD, este faptul că cel mai cunoscut telescop orbital din lume – Hubble, folosește acest tip de dispozitiv. [26]
Tehnologia CMOS
Dispozitivele logice CMOS (Complementary Metal-Oxide Semiconductors) sunt în prezent cele mai utilizate dispozitive din cadrul circuitelor logice complexe cum ar fi microprocesoarele sau circuitele pentru comunicații sau procesare de semnal.
Senzorii de tip CMOS pot fi implementați în camere foto digitale cu mai puține componente auxiliare, cu un consum energetic mai mic și cu o viteză mai mare la convertirea imaginii în semnal electronic decât cei de tip CCD.
5.1.12. Motorul de curent continuu
Domenii de utilizare
Motoarele de curent continuu se folosesc în diferite sisteme de acționare electrică cu turație variabilă și cuplu mare la pornire (laminoare, mașini unelte, mașini de extracție minieră, electrocar și locomotive electrice). [28]
Principii constructive:
Principalele părți componente ale unui motor de curent continuu sunt statorul și rotorul. Rotorul este, de obicei partea mobilă a motorului și este plasată de obicei în interiorul acestuia. Acesta este format dintr-un ax și o armătură ce susține înfășurarea rotorică. Pe axul motorului este situat un colector ce schimbă sensul curentului din înfășurarea rotorică. Tensiunea de alimentare este aplicată înfășurărilor rotorului prin intermediul unui sistem de perii fixate pe un capac. Distanța dintre stator și rotor poartă numele de întrefier.
Circuitul magnetic al mașinii este format din jugul statoric masiv sau lamelat (din tole), poli principali lamelați pe care se găsesc bobinele, înfășurări inductoare și miezul magnetic lamelat al rotorului în crestăturile căruia este înfășurarea indusă. Motoarele mai mari, pentru îmbunătățirea funcționării lor, sunt prevăzute cu poli auxiliari, numiți si de comutație care au o infașurare proprie.
În motoarele de curent continuu câmpul inductor este produs de înfășurarea de excitație așezată pe polii principali, sau de magneți permanenți. Înfășurarea indusă de pe rotor este conectată la colector, rolul acestuia este de a redresa curentul alternativ din înfășurarea indusă pentru a genera în circuitul exterior curent continuu. Înfășurarea de excitație a motoarelor de curent continuu poate fi alimentată de la surse exterioare mașinii când se spune că mașina are excitația separată, sau chiar de la mașină când se spune că mașina este autoexcitată. Mașinile cu autoexcitație pot avea înfășurările de excitație conectate în derivație, serie și mixtă. [29]
Turația motorului este proporțională cu tensiunea aplicată înfășurării rotorice și invers proporțională cu câmpul magnetic de excitație. Turația se poate regla variind tensiunea aplicată motorului de la o valoare minimă până la valoarea nominală. Cuplul dezvoltat de motor poate fi reglat prin variația curentului aplicat infășurării rotorice. Schimbarea sensului de rotație se face prin schimbarea polarității tensiunii de alimentare. [30]
5.1.13. Surse de alimentare
Sursele de alimentare cu curent continuu reprezintă o aplicație a redresării curentului alternativ. Scopul lor este de a furniza o tensiune continuă care să prezinte variații cât mai mici. Aceasta deoarece circuitele care utilizează dispozitive semiconductoare necesită o tensiune de alimentare care să rămână relativ constantă și cu pulsație minimă. Din această cauză redresoarele fără filtraj sunt, în general, rar utilizate.
Pentru funcționarea aparatelor electronice la parametrii proiectați este necesar ca acestea să fie alimentate la o tensiune constantă în limitele prescrise. Modificarea tensiunii de alimentare a acestora peste limitele permise duce la funcționarea defectuoasă sau chiar la distrugerea acestora, în unele cazuri.
Stabilizatoarele de tensiune generează tensiuni de alimentare constante micșorând variațiile acestora până la limitele impuse de client / consumator. Ele trebuie să compenseze atât variațiile tensiunii sursei de alimentare cât și influența unei sarcini variabile asupra tensiunii.
Pentru caracterizarea stabilizatorului se utilizează coeficientul de stabilizare în raport cu tensiunea de alimentare și ceoficientul de stabilizare în raport cu sarcina. Coeficientul de stabilizare în raport cu tensiunea de alimentare este dat de raportul între variația relativă a tensiunii la intrarea stabilizatorului și cea provocată la ieșirea din stabilizator pentru un curent constant prin sarcină. [31]
5.2. Subsistemul software
5.2.1. OpenCV
OpenCV (Open Source Computer Vision) este o bibliotecă de funcții de programare, ce, în principal, urmărește vizualizarea imaginilior în timp real prin intermediul calculatorului. A fost dezvoltat de către centru de cercetare Intel Rusia în Nijni Novgorod, iar acum este susținut de Willow Garage si Itseez. Este gratuit pentru uz sub licența BSD open-source. Biblioteca este cross-platform.
OpenCV se concentrează în principal pe de procesare a imaginii în timp real. Dacă biblioteca găsește primitive de performanță integrate ale companiei Intel pe sistem, acesta va utiliza aceste rutine optimizate brevetate pentru a se auto-accelera.
Lansat oficial în 1999, proiectul OpenCV a fost lansat ca o inițiativă Intel Research pentru a evolua aplicațiile care solicitau intens CPU-ul (procesorul calculatorului), o parte dintr-o serie de astfel de proiecte includeau metode de ray tracing în timp real și pereți de afișare 3D. Printre cei care au contribuit la acest proiect s-au numărat experți în optimizare ai Intel Rusia, precum și echipa Performance Library de la Intel.
La începutul proiectului OpenCV, au fost descrise obiectivele proiectului, ca fiind:
Avansarea cercetărilor din domeniul viziualizării, oferind nu numai fișiere open-source, ci și coduri optimizate pentru obținerea structurii de bază a imaginilor.
Dezvăluirea cunoștințelor despre viziualizarea imagininilor prin asigurarea unei infrastructuri comune pe care dezvoltatorii putea să o exploateze, astfel încât codul ar fi mai ușor de citit și de transferat.
Librăriile OpenCV :
core : Funcții de bază
imgproc : Procesarea imaginilor
highgui : Interfață Grafică de nivel înalt și I/O Media
video : Analiză video
calib3d : Calibrarea camerelor (de luat vederi) și construirea imaginiilor 3D
features2d : Caracteristici ale cadrelor
objdetect : Detectare de obiecte
ml : Învățarea mașinii
flann : Gruparea și căutarea în spații multi-dimensionale
gpu : Accelerarea vederii pe calculator asistată de unitatea de procesare grafică
photo : Procesarea fotografiilor
stitching : Împletirea imaginilor
non-free : Funcționalitate non-free
contrib : Materiale experimentale
legacy : Materiale depreciate
ocl : Vizualizare pe calculator accelerată cu ajutorul OpenCL
superres : Superrezolutie
viz : Vizualizare 3D
[32]
5.2.2. Arduino IDE
Este un software de tip open-source, ce rulează pe Windows, Linux și Mac OS X, programul a fost dezvoltat cu limbaj Java, pe baza programului Processing și al altor programe de tip open-source. Acesta poate fi folosit pentru orice placă Arduino.
Fig. 5.13. Interfața programului Arduino 1.6.1.
Programele Arduino pot fi împărțite în trei părți principale: structură, valori (variabile și constante) și funcții.
Structura de bază a unui program Arduino:
setup()
Va fi parcursă o singură dată la rularea programului
loop()
Este o buclă ce se va repeta de un număr infinit de ori (teoretic)
Structura de control conține funcțiile:
if – este o funcție de tip conditional și funcționează după principiul: dacă (condiție) atunci execută (comenzi)
else / else if – else completează funcția if pentru cazurile în care sunt doar două posibilități de a pune o condiție : dacă nu (condiția de la „if”-ul de mai sus) atunci execută (comenzi), iar else if – este utilă în cazul în care sunt mai mult de două condiții de pus
for – este o buclă repetitivă de un număr cunoscut de iterații, principiul de funționare este: inițializare număr de iterații, care va crește până condiția pusă va fi îndeplinită, iar dacă aceasta nu a fost îndeplinită , execută o schimbare a numărului de iterații
switch … case – case lucrează ca și funcția if de mai sus
while – este o buclă repetitivă pentru un număr nedefinit de repetări, aceasta va rula până se va îndeplini o condiție
do … while – principiul de funționare este același ca la „while”, doar că se pune condiția la final, deci, se va rula cel puțin o dată
break – întrerupe rularea funcțiilor aferente, forțând programul să execute următoarele comenzi
continue
return – se folosește pentru structuri la care la finalul comenzilor aferente trebuie să se returneze o valoare
goto
Variabilele folosite pot fi de tip :
void – structură
boolean – variabilă de tip adevărat/fals
char – caracter
unsigned char – variabile de tip caracter
byte – variabile de tip octet
int – variabile de tip număr întreg pe 16 de biți
unsigned int – variabile de tip număr natural pe 16 de biți
word
long – variabilă de tip număr întreg pe 32 de biți
unsigned long – variabilă de tip număr natural
short
float – variabilă de tip număr real
double – variabilă de tip număr real
string – vector/șir de caractere
string – object
array – matrice
Funcțiile de care dispune Arduino IDE:
Funcții specifice comunicației:
Serial
Stream
Funcții matematice:
min() – returnează valoarea minimă
max() – returnează valoarea maximă
abs() – returnează valoarea absolută
map() – returnează o valoare proportional cu numerele ce o definesc
sqrt() – extrage rădăcina pătrată
Funcții de I/O Analogice:
analogRead()
analogWrite()
Funcții specifice I/O Digital:
digitalRead()
digitalWrite()
pinMode()
[33]
5.2.3. Visual Studio
Microsoft Visual Studio este un mediu de dezvoltare integrat (IDE) de la Microsoft. Acesta este utilizat pentru a dezvolta programe de calculator pentru Microsoft Windows, precum și site-uri web, aplicatii web si servicii web. Visual Studio foloseste platforme de dezvoltare de software Microsoft, cum ar fi Windows API, Windows Forms, Windows Presentation Foundation, Windows Store și Microsoft Silverlight. Cu acest software se poate produce atât cod nativ și cod gestionat.
Visual Studio (VS) include un editor de cod de susținere IntelliSense (componenta de finalizare cod), precum și codul de refactorizare. Depanatorul integrat funcționează atât ca un program de depanare la nivel de sursă și un debugger la nivel de mașină. Alte instrumente încorporate includ un designer forme de aplicații de construcție GUI, web designer, designer de clasa, si designer de schemă a bazei de date.
VS acceptă plug-in-uri care îmbunătățesc funcționalitatea la aproape orice nivel, inclusiv adăugarea de suport pentru sistemele de sursă de control (cum ar fi Subversion) și adăugarea de noi seturi de scule, cum ar fi editori, designeri pentru procesări vizuale pentru limbile specifice domeniului sau seturi de scule pentru alte aspecte ale software-ului ciclului de viață de dezvoltare (cum ar fi clientul Team Foundation Server: Team Explorer).
Visual Studio acceptă diferite limbaje de programare și oferă sprijin editorului și debugger-ului de cod (în grade diferite) pentru aproape orice limbaj de programare, cu condiția să existe un serviciu de limbaj specific. Limbajele integrate sunt C , C++ și C++/CLI (prin interfața Visual C++), VB.NET (aplicații care pot fi salvate ca executabile, prin intermediul interfeței Visual Basic .NET), C # (cu interfața Visual C #), și F # (ca de Visual Studio 2010). Suportă și alte limbaje de programare, cum ar fi M, Python, Ruby. Se pot instalat separat și alte pachete pentru alte limbaje de programare consacrate. Aceasta suportă de asemenea, XML / XSLT, HTML / XHTML, JavaScript și CSS. La Java (și J #) s-a renunțat. [42]
Visual Basic:
Visual Basic a fost derivat din limbajul Basic și permite dezvoltarea rapidă a aplicațiilor (RAD) de interfață grafică cu utilizatorul (GUI). Permite, de asemenea, accesul la baze de date folosind obiecte, acces la date / obiecte de date la distanță, sau ActiveX Data Objects, și crearea de controale și obiecte ActiveX.
1 – Toolbox (trusa de instrumente)
2 – meniuri
3 – Form: aici se adaugă cu drag and drop instrumentele din Toolbox
4 – Solution Explorer : aici apar form-urile create, referințele și librăriile utilizate în proiect
5 – Properties (proprietățile obiectului selectat cu click-stanga : Text este o proprietate care schimbă ce se „vede” pentru utilizator, Name – schimbă ce vede doar programatorul)
6. Proiectarea sistemului
6.1. Subsistemul hardware
6.1.1. Arduino Uno V3
Pentru sistemul propus, se va utiliza platforma de procesare open-source Arduino Uno V3, care are în componența sa: un microcontroller ATmega328, un modul de comunicație de tip USB A-B, un modul de alimentare externă, 14 pini digitali (dintre care 6 pot fi folosiți ca pini de ieșire PWM) și 6 pini analogici.
Specificații tehnice:
Tensiune de intrare recomandată: 7 – 12 V
Tensiune de intrare limită: 6 – 20 V
Curent (pe fiecare pin de intrare/ieșire): 40 mA
Curent (pe pinul de ieșire de 3.3 V): 50 mA
Frecvența de ceas: 16 MHz
Dimensiuni: 68.6 x 53.4 mm
Greutate: 25 g
[35]
6.1.2. Camera web
Pentru reducerea costurilor se va folosi o cameră web simplă, fără vedere în infraroșu, care să ofere o calitate a imaginii medie, deoarece principiul de funționare este același și pentru o cameră cu o calitate mai ridicată a imaginii, cu infraroșu.
Pentru situația în care PC-ul are webcam încorporat (cum ar fi laptopurile cu webcam încorporat), această achiziționare nu mai este necesară.
Pentru realizarea proiectului s-a ales: Camera Web HP 1300
Specificații tehnice:
Rezoluția senzorului: 640×480
Conectare la PC: USB 2.0
Unghi de înclinare: 30˚
Unghi de rotire pe orizontală: 360˚
LED semnalizare Pornit/Oprit: LED alb
Microfon: inclus
Senzorul de imagine al acestei camere web este CCD. [36]
6.1.3. Pulsoximetru / pulsometru
Prețul unui pulsoximetru cu aprobare FDA se ridică undeva la 160 de RON, motiv pentru care am decis să îmi proiectez și realizez propriul pulsoximetru.
Principiul de funcționare al unui pulsoximetru se bazează pe absorbanța luminii de către sânge pentru lumină de culoare roșie, respectiv lumină în spectrul infraroșu. Ca lumina roșie neabsorbită să fie suficient de intensă ca fotodioda să emită un semnal care să poată fi amplificat și filtrat pentru a obține un semnal concludent, LED-ul de culoare roșie trebuie să fie un LED ultrabright, motiv pentru care lumina emisă de pulsoximetru ar putea deveni deranjantă.
Deoarece că nu este necesar ca sistemul propus să ofere informații despre concentrația de oxigen din sânge, se poate renunța la acest LED ultrabright, fiind suficient un LED cu emisie de lumină în spectrul infraroșu (invizibil ochiului uman).
Pentru realizarea unui pulsometru se vor folosi următoarele componente și ustensile:
Rezistențe (220 kΩ, 220 Ω, 6k8, 680Ω, 33kΩ)
Condensatori (2 x 100 nF , 2 x 1 μF)
2 Amplificatoare operaționale (un amplificator LM358 – tensiune de lucru: 3-30V
Raport de amplificare mare: 10^5 (sau 100 dB), GND comun pentru cele două amplificatoare interne)
Fire cu pini la capete, sau fără pini
Fludor (0,7 mm)
Ciocan de lipit Letcon 40W
Un emițător IR (un LED L-53F3BT, cu diametru de 5mm, lungimea de undă a luminii IR emise de 940nm, lumină invizibilă ochiului uman, carcasă albastră; puterea de 20mW, unghiul de luminozitate maximă de 30°; tehnologie THT)
O fotodiodă IR (BPV10NF, unghiul de recepție maximă a luminii IR de 40°; lungimea de undă pe care o detectează de 940nm, diametrul carcasei de 5mm, produsă în tehnologie THT)
Un PCB (printed circuit board)
6.1.4. Sistem de alarmă
Pentru realizarea sistemului de alarmă se vor utiliza următoarele componente:
Un difuzor (variant brick – montat pe unul din pinii de tip PWM ai Arduino)
LED-uri verzi și roșii (de 5 mm)
Rezistențe (pentru LED-uri se vor folosi rezistențe de 220 Ω)
Fire cu pini sau fără
Motoare de curent continuu cu contragreutate
6.1.5. Sursa de alimentare
Alimentarea camerei web se va face de la calculator prin intermediul cablului USB 2.0. al acesteia. Pentru alimentarea cu curent continuu a plăcii Arduino Uno se va folosi un alimentator extern, cu tensiune reglabilă. S-a ales Universal AC/DC Adapter 1000 mA, cu 6 mufe de diferite mărimi. Tensiunea se reglează manual, rotind un potențiometru de pe adaptor.
Specificații tehnice:
Tensiunea de intrare: 100 – 230 V AC
Frecvența de lucru: 60 / 50 Hz (AC)
Tensiunea de ieșire: 3 / 4.5 / 5 / 6 / 7.5 / 9 / 12 V (CC)
Intensitatea curentului la ieșire: Maxim 1000 mA
Dimensiuni: 76.5 x 42.4 x 72.2 mm [37]
6.2. Subsistemul software
6.2.1. Arduino 1.6.1.
Interfața este ușor de utilizat, având un meniu format din 5 selecții: File, Edit, Sketch, Tools și Help.
Urmează 5 butoane, de la stănga spre dreapta, după cum urmează:
Verify: este primul buton și are funcția de compilare a programului (icoana acestuia este o bifă)
Upload: este al doilea buton și funcția sa este de a încărcarea programele create pe placa Arduino (arată ca o săgeată îndreptată spre dreapta)
New: este al treilea este buton, are o icoană ce înfățișează un fișier/o foaie, acest buton deschide un fișier nou
Open: este cel de-al patrulea buton, acesta deschide un fișier existent
Save: este ultimul buton care la apăsare salvează programul creat.
În partea dreaptă acestor butoane, se poate observa butonul „Serial Monitor”, ce deschide o fereastră pentru schimb de informații venite sau trimise prin modulul de comunicație serială, se mai poate deschide apăsând Ctrl+Shift+M).
Mai jos se poate scrie codul programului dorit, se compilează, se selectează portul aferent plăcii Arduino și se încarca cu butonul Upload.
Din meniul „Tools” „Board” se va selecta numele plăcii Arduino cu care se dorește a se interacționa, apoi tot din meniul „Tools” „Port” se va selecta portul de pe care se va realiza comunicația serială.
În meniul „File” există și câteva exemple de aplicații pentru începători, iar dacă ulterior se instalează librării noi, tot din submeniul Examples (Figura a), vor putea fi accesate programele aferente acestora.
6.2.2. Instalarea platformei de dezvoltare Microsoft Visual Studio 2010
Pentru generarea unui program executabil care să fie capabil să urmărească fața, ochii sau clipitul unei persoane folosind o cameră web normală am folosit mediul de dezvoltare Microsoft Visual Studio 2010.
Eu am optat pentru Microsoft Visual Studio 2010, deoarece aveam deja acest program instalat, la momentul începerii proiectului de diplomă.
Acest program se poate descărca gratuit de pe pagina oficială, accesând link-ul:
https://www.visualstudio.com/en-us/products/free-developer-offers-vs.aspx
După descărcare și instalare acesta va genera un director în calculator în directorul My Documents (sau Documents în funcție de versiunea sistemului de operare) cu numele Visual Studio 2010, de unde se vor putea accesa sau salva proiectele realizate.
Se vor utiliza interfețele Visual Basic și Visual C++.
6.2.3. Instalarea librăriei OpenCV
Pentru a avea acces la librăriile necesare generării unui program capabil să recunoască imagini provenite de la camera web și să proceseze diferite funcții provenite din algoritmi deja cunoscuti este nevoie, mai întâi să descărcam librăria OpenCV de pe site-ul oficial.
Ultima versiune se poate descărca accesând linku-ul:
Se va face click pe OpenCV for Windows, poziționat în dreapta paginii. Dacă nu se dorește neapărat ultima versiune, se va da click pe Latest Downloads, și se va deschide o pagină ca cea de mai jos.
Eu am optat pentru versiunea 2.4.11 deoarece este compatibilă cu Visual Studio 2010.
După descărcare, vom găsi o arhivă în directorul selectat pentru descărcare cu numele opencv-2.4.11 (în cazul de față). La deschiderea acestui fișier, acesta va cere o adresă la care să se auto-dezarhiveze, recomand ca această dezarhivare să se facă la adresa C:\OpenCV2411, după ce acest folder a fost creat.
Este important să adăugam o cale în Environment Variables, pe care îl găsim ori căutând cu comanda Search prin calculator, ori dând click-dreapta pe My Computer Properties Advanced System Settings Environment Variables…
Se va deschide o fereastră cu titlul Environment Variables, în meniul „System variables”, se va căuta și se va selecta variabila „Path”, click pe Edit, la sfârșitul textului pe care îl găsim acolo se va pune caracterul „;”, urmat de calea către fișierul bin al librariei OpenCV: „C:\OpenCV2411\opencv\build\x64\vc10\bin”
Se va deschide programul Visual Studio și se va crea un nou proiect, selectând comanda „New Project…”
Se vor face următoarele setări:
Se va selecta din meniul Installed Templates – > căsuța Other Languages – > Visual C++;
Indiferent dacă sistemul de operare va fi x64 sau x86, se va selecta căsuța Win32 Console Application;
La căsuța Name se va introduce numele dorit al proiectului;
La Location, în cazul în care nu este din modul default deja selectat, vom selecta calea C:\Users\NumePC\Documents\Visual Studio 2010\Projects ;
Și apoi se va selecta OK.
Se va deschide o fereastră cu numele Win32 Application Wizzard – Nume_proiect, se va selecta Next și se va ajunge la Application Settings, unde, la Additional Settings vom bifa căsuța Empty project și apoi click pe butonul Finish.
Dacă se dorește ca aplicația să ruleze pe un sistem de operare pe 64 biti (x64), se vor face următoarele setări: din meniul Solution Explorer, click-dreapta pe butonul pe care scrie numele proiectului și se va selecta Properties. Se va deschide fereastra Properties, în partea stângă sus, la Configuration: se alege „All Configruations”, iar în dreapta sus se va da click-stânga pe butonul pe care scrie „Configuration Manager…”.
Din submeniul Platform, se va da click pe săgeata îndreptată în jos de lânga textul Win32 și se va selecta <New…>. Se va deschide o fereastră cu titlul New Project Platform -> „New platform” se selectează „x64” iar la meniul „Copy settings from” selectăm „Win32”.
Tot din meniul Properties, se vor face următoarele setări, pentru acest proiect:
Configuration Properties C/C++ General Additional Include Directories click pe săgeată-jos <Edit…> . Se va deschide o fereastră ca cea de mai jos, pentru a adăga folderele necesare programării se va da click pe butonu cu pictograma în formă de folder. Se vor introduce următoarele căi:
C:\OpenCV2411\opencv\build\include
C:\OpenCV2411\opencv\build\include\opencv
C:\OpenCV2411\opencv\build\include\opencv2
Următorul pas se execută tot în meniul Properties: Properties Linker General Additional Library Directories <Edit…> și se va introduce calea: „C:\OpenCV2411\opencv\build\x64\vc10\lib” .
Ultima setare pentru a putea utiliza librăriile este tot în meniul Properties Linker Input Additional Dependencies <Edit…> și se vor introduce următoarele elemente (toate numele de fișiere care conțin caracterul „d” la finalul numelui de la adresa C:\OpenCV2411\opencv\build\x64\vc10\lib):
opencv_calib3d2411d.lib opencv_contrib2411d.lib opencv_core2411d.lib opencv_features2d2411d.lib opencv_flann2411d.lib opencv_gpu2411d.lib opencv_highgui2411d.lib opencv_imgproc2411d.lib opencv_legacy2411d.lib opencv_ml2411d.lib opencv_nonfree2411d.lib opencv_objdetect2411d.lib opencv_ocl2411d.lib opencv_photo2411d.lib opencv_stitching2411d.lib opencv_superres2411d.lib opencv_ts2411d.lib opencv_video2411d.lib opencv_videostab2411d.lib
6.2.4. Instalarea aplicației EmguCV pentru utilizarea librăriilor OpenCV în programul Visual Studio
EmguCV este o aplicație de tip multiplatformă care permite utilizarea librăriilor din platforma OpenCV de către programe compatibile .NET (până la varianta 4), putând rula pe sistemele de operare: Windows, Linux, Mac OS X , iOS , Android și Windows Phone.
Această aplicație se poate descărca gratuit accesând link-ul de mai jos:
http://sourceforge.net/projects/emgucv/
Instalarea se face normal (necesită cunoștințe medii de utilizare a calculatoarelor), iar pentru utilizarea librăriile este suficient să se deschidă un nou proiect în programul Visual Studio și să se tragă cu drag-and-drop folderul cu numele x86 sau x64 găsit în directorul instalării (dacă directorul a fost ales cel din stare default) la adresa „C:\Emgu\emgucv-windows-universal-cuda 2.4.10.1940\bin”, în noul proiect .
Pentru selectarea librăriilor necesare proiectului se va selecta din meniul View Object Browser și se vor selecta librăriile accesând butonul ”Browse:”Custom Component Set „ … ” de la adresa „C:\Emgu\emgucv-windows-universal-cuda 2.4.10.1940\bin”.
De aici se vor putea selecta librăriile necesare selectându-le din lista ce a aparut după ce s-a selectat butonul „OK”. Librăriile sunt vizibile acum, ca în figura de mai sus sub meniul „<Search>” . După ce au fost selectate click pe butonul cu icon-ul cu un plus mic, galben pe el, la dreapta lui „ … ”.
6.2.5. Identificarea fețelor și a ochilor cu algoritmul Haar-Cascade
Haar – Classifiers reprezintă o metodă de detecție automată a trăsăturilor faciale. Algoritmul a fost dezvoltat de către Viola P. și Jones M. și operează astfel încât pe imagine să se caute trăsaturi specifice fețelor doar în zone de interes, sporind astfel viteza de evaluare a imaginilor. [38]
6.2.6. Detecția cercurilor folosind transformata HOUGH pentru cercuri
Transformata Hough este o tehnică de extracție caracteristică utilizată în analiza imaginii, viziualizare a imaginilior pe calculator, și de prelucrare a imaginii digitale. Scopul tehnicii este de a găsi cazuri imperfecte de obiecte dintr-o anumită clasă de forme printr-o procedură de vot. Această procedură de vot se desfășoară într-un spațiu parametru, de la care se obțin candidații tintă din maxime locale în așa-zisul spațiu acumulator care este construit în mod explicit de către algoritmul de calcul al transformatei Hough.
Transformata Hough se ocupa inițial de identificarea dreptelor dintr-o imagine, ulterior fiind extinsă, având ca scop identificarea pozițiilor unor forme arbitrare , cele mai des întâlnite fiind cercurile și elipsele. Transformata Hough, așa cum o știm azi, a fost inventată de Richard Duda și Peter Hart în 1972, sub numele de transformata Hough generalizată, cu referire la brevetul lui Peter Hough din 1962 care se ocupa cu identificarea dreptelor.
În analiza automată a imaginilor digitale, problema detectării formelor simple (cum ar fi
liniile drepte, cercurile sau elipsele) apare destul de des. În cele mai multe cazuri un detector de contur poate fi folosit pentru o faza de pre-procesare a imaginii pentru a se putea obține puncte care se află pe curba dorită din spațiul imaginii. Din cauza imperfecțiunilor din imagine sau ale detectorului de contur, totuși, pot exista unele puncte lipsă pe curbele dorite, precum și deviații între linia, cercul sau elipsa ideală și punctele „de frontieră” obținute cu ajutorul detectorului de contur. Din aceasta cauză, este complicată o grupare a caracteristicilor de contur extrase în seturi adecvate de linii, cercuri sau elipse. Scopul transformatei Hough este acela de a rezolva aceasta problema prin gruparea punctelor de frontieră printr-o procedura de votare explicită peste un set de obiecte din imagine, parametrizate. [39]
6.2.7. Detecția fețelor folosind Spațiile EIGEN
În ultimii ani, au fost propuse mai multe aplicații interesante de spații eigen de reprezentare a imaginilor. Acestea includ recunoașterea feței, codare video, și estimarea pozițiilor în care stau persoaele din imagine. Cu toate acestea, comunitatea de cercetare în domeniul procesării imaginilor a trecut cu vederea în mare parte evoluțiile paralele de prelucrare a semnalului și algebră liniară numerică privind algoritmii de actualizare eficientă a spațiilor eigen.
Aceste noi evoluții sunt notabile din două motive: Adoptarea acestora va face o parte din algoritmii de vizualizare actuali mai solizi și mai eficienți. Mai important este faptul că actualizarea incrementală de reprezentări eigenspace va deschide aplicații noi și interesante de cercetare în procesarea imaginilor, cum ar fi recunoașterea activă și învățarea.
[40]
7. Realizarea și programarea sistemului mecatronic
7.1. Realizarea programului de prelucrare a imaginii provenite de la camera web
Pentru a putea obține informații utile de la camera web s-au parcurs următorii pași:
Preluarea imaginilor de la camera web
Prelucrarea imaginii aplicând filtre de imagine
Detectarea zonelor în care se găsesc fețe și ochi și pentru o mai bună monitorizare a clipitului, irisurile sau pupilele acestora
Extragerea unor informații utile pe baza imaginii procesate
Preluarea imaginilor de la camera web este realizată de către programul generat în Visual Studio. Acesta are un ceas ca întrerupător setat la 100 de milisecunde, pentru a micșora numărul de imagini de prelucrat, reducând astfel puterea de calcul necesară unui astfel de program.
Pentru următorul pas, imaginea a fost copiată, ca originalul să nu fie modificat până la final. S-a aplicat un filtru pentru obținerea unei variante a imaginii numai cu tonuri de gri (grayscale), pentru a ușura și mai mult detectarea obiectelor dorite.
Pentru identificarea fețelor s-a folosit fișierul „haarcascade_frontalface_alt.xml” iar pentru ochi „haarcascade_eye_tree_eyeglasses” din librăria OpenCV. S-a obținut o imagine ca cea din figura de mai jos.
Ochii sunt marcați cu pătrate de culoare roșie, iar fețele detectate, cu pătrate de culoare albastră. Algoritmul poate să recunoască mai multe fețe în același timp.
Inițial, mi-am dorit ca pentru o mai mare acuratețe în detectarea ochilor, să identific și irisul fiecăruia, dar prelucrarea imaginilor s-a dovedit a consuma foarte multe resurse, fiind greoaie pentru calculatoare cu procesoare și plăci video cu performanțe medii.
Identificarea irisurilor ochilor s-a realizat folosind transformata Hough pentru identificarea cercurilor, parcurgând următorii pași:
Imaginea curentă a fost copiată și transformată în imagine de tip grayscale.
Apoi, a fost transformată într-o imagine de tip binar, pentru a putea trasa contururile cu funcția cvCanny din librăriile OpenCV.
Imaginea a fost netezită (s-a redus zgomotul din ea) cu funcția cvSmooth, drept rezultat irisului a devenit aproape circular, suficient pentru a fi declarat cerc cu o valoare mică de potriviri, din codul sursă.
După identificarea cercurilor, programul generează o matrice cu contururile cercurilor, care vor fi ulterior introduse peste imaginile provenite de la camera web, cele copiate la început.
Următor program pe care am încercat să il utilizez era capabil să recunoască o imagine salvată inițial într-o bază de date, iar în funcție de numărul curent al acesteia programul să știe dacă acel utilizator este atent sau nu (până la imaginea cu numărul 100, spre exemplu sunt imagini cu mine aflat într-o stare de vigilență, după numărul 100 sunt cele în care atenția îmi este scăzută).
1 – buton pentru captură de imagine
2 – buton pentru recunoașterea imaginii ce vine de la webcam dintr-o bază de date creată cu butonul „captureaza”
3 – sterge imagini salvate în baza de date
4 – este un textbox care afișează numele imaginii
5 – sunt imaginile salvate în baza de date,
6 – numele fișierelor salvate
Totuși programul solicită foarte mult procesorul chiar daca în baza de date erau doar 200 de imagini salvate, iar pentru o recunoaștere bună a imaginilor cu algortimul de identificare Eigen Object Recongnizer, sunt necesare 1000 de imagini pozitive (adică imagini care să fie considerate bune pentru identificare) și 2000 de imagini negative (imagini care să nu fie cele dorite – în cazul nostru 2000 de imagini cu mine într-o stare de vigilență scăzută). Puterea de calcul necesară este enormă, ceea ce m-a făcut să renunț la acest tip de recunoaștere facială.
Este suficient ca programul să nu detecteze fața subiectului, ca acesta să fie în pericol, pulsul scăzut fiind cea de-a doua condiție pentru declanșarea alarmei.
În momentul în care programul nu poate detecta o față, pornește o temporizare, care la atingerea duratei de prag va trimite prin portul serial, o informație pe care placa Arduino să o înțeleagă, am ales caracterul „A” pentru ca placa să poată lua o decizie în privința pornirii sistemului de alarmă.
Interfața creată este simplă, ea conține un grup de butoane cu un ComboBox, pentru selectarea portului de comunicație serială, la apăsarea butonului „Conectare” se conectează programul la portul aferent plăcii Arduino, iar Textbox-ul Conectat se schimbă la culoare pentru a confirma conexiunea.
La apăsarea butonului „Deconectare”, comunicația serială este întreruptă, Textbox-ul „Deconectat” va avea o culoare roșie, iar TextBox-ul „Conectat” va reveni la culoarea inițială.
Butonul „Ma opresc” este un buton ce anunță că utilizatorul interfeței s-a oprit din activitatea sa, acest fapt urmând să fie anunțat de către mașina, spre exemplu, când aceasta va staționa.
Butonul „DESPRE PROGRAM” , afișează un Form cu informații despre interfață .
„Seteaza numarul de secunde pana la alarma:” este un TextBox alăturat NumericUpDown, cu care utilizatorul poate selecta numărul de secunde în care fața sa să nu fie recunoscută până la declanșarea alarmei.
Pentru a putea testa funcționalitatea programului am generat o comandă care afișa o fereastra de tip eroare – Critical, dar am renunțat la ea după ce am fost mulțumit de rezultat deoarece era nepractică și obositoare pentru utilizator.
Fereastra de tip eroare afișa mesajul „Alarma!” și avea titlul „Odihneste-te putin!”.
În locul ferestrei de eroare, la atingerea pragului programul execută comanda Port.Open(), în situația în care un port a fost selectat, dacă nu va reuși să deschidă portul de comunicație serială se va închide cu eroare. Dacă s-a stabilit o conexiune corect, acesta va trimite caracterul „A” și va închide portul, numărul de secunde trecute revenind la 0 (zero).
7.2. Realizarea senzorului de puls
Pentru început schema electrică proiectată a fost pusă în practică pe un breadboard, pentru câteva teste. Rezultatul obținut arăta ca în figura de mai jos.
S-a încărcat un program simplu pe placa Arduino pentru a prelua datele de la pulsoximetru prin pinul A0 (intrare analogică) și a le trimite prin intermediul comunicației seriale spre un program de procesare de date (Processing 2.2.1).
Pentru trimiterea valorilor de la Arduino la Processing, am folosit codul:
int citit;
int led_puls=4;
void setup() {
pinMode(led_puls, OUTPUT);
pinMode(, OUTPUT);
Serial.begin(9600);
}
void loop() {
citit= analogRead(0);
citit=citit*2;
if (citit>130)
digitalWrite(led_puls, HIGH);
else digitalWrite(led_puls, LOW);
delay(5);
Serial.println(citit);
delay(5);
}
Am sudat și led-ul IR și fotodioda IR deși inițial erau conectate la breadboard prin fire cu pini pentru a obține o stabilitate mai mare a semnalului, deoarece această configurație este foarte sensibilă la orice mișcare.
S-au pus, pe rând toate degetele de la mâna dreaptă pe led-ul și fotodioda IR pentru a putea urmări calitatea semnalului primit. Am obținut următoarele grafice:
Se observă, deci, că semnalul este mai puternic și stabil când pielea este mai subțire.
Deoarece schema electrică este suficient de bună pentru a fi pusă pe un PCB, am inceput să sudez piesele la locul potrivit, dar am mai adăugat un potențiometru după prima amplificare pentru a avea totuși posibilitatea de a schimba forma semnalului.
Am aplicat bandă izolatoare pentru a evita producerea unui scurtcituit datorat umezelii.
Pentru preluarea datelor venite pe pinul A0 și prin portul serial, am scris următorul program:
int dif=6;
int motor=7;
const int led_pin = 4;
char ser;
void setup()
{
delay(1000);
Serial.begin(9600); // Debugging only
Serial.println("setup");
pinMode(led_pin, OUTPUT);
pinMode(motor, OUTPUT);
}
void loop()
{
delay(1000);
if (Serial.available() > 0)
{
ser=Serial.read();
if (ser=='A')
{
// Serial.println("alarma!");
digitalWrite(motor, HIGH);
digitalWrite(led_pin,HIGH);
analogWrite(dif, 250);
delay(1000);
digitalWrite(led_pin, LOW);
analogWrite(dif, 0);
digitalWrite(motor, LOW);
delay(100);
ser='g';
}
}
}
Pentru generarea graficelor în programul Processing am scris următorul cod:
import processing.serial.*;
Serial myPort; // Portul serial
int xPos = 1; // position lui x pe grafic
float oldHeartrateHeight = 0; // citirea trecuta
void setup () {
size(600, 400); //marimea ferestrei
frameRate(25);
println(Serial.list());
myPort = new Serial(this, Serial.list()[1], 9600);
background(0);
}
void draw () {
}
void serialEvent (Serial myPort) {
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
println(inString);
int currentHeartrate = int(inString);
float heartrateHeight = map(currentHeartrate, 0, 1023, 0, height);
stroke(0,255,0); //linie de culoarea verde
line(xPos-1, height – oldHeartrateHeight, xPos, height – heartrateHeight);
stroke(255,255,255); // linie alba
line(0,200,600,200);
oldHeartrateHeight = heartrateHeight;
if (xPos >= width) {
xPos = 1; // plecare din pozitia 1 la final de ecran
background(0);
} else {
xPos++;
}
}
}
8. Concluzii finale, contribuții originale și direcții viitoare
În urma realizării practice a proiectului și a numeroase încercări de a îmbunătăți sistemul am ajuns la următoarele concluzii:
Se pot evita multe accidente extinzând domeniul de utilizare al acestui sistem pentru monitorizarea atenției, excluzând condiția impusă ca pulsul să fie regulat,
Sistemul funcționează în parametrii stabiliți, cu toate că am renunțat la multe din soluțiile propuse,
Pentru evitarea lansării unor alarme din cauza erorilor care apar din algoritmul HaarCascadeClasifier se pot integra algoritmi de identificare a cercurilor din zona identificată ca fiind zona ochilor pentru recunoașterea pupilei sau a irisului, deși acest lucru ar conduce la o creștere semnificantă a resurselor de procesare.
Avantajele sistemului realizat:
Preț de cost redus, deoarece prețul total al senzorului de puls nu depășește 30 RON iar multiplicarea software-ului este gratuită;
Sistemul nu deranjează utilizatorul deoarece s-a renunțat la LED-ul ultraputernic pentru a evita expunerea continuă la o lumină puternică;
Monitorizarea permanentă a pulsului ar putea aduce și alte avantaje prin implementarea ulterioară a unui modul GSM cu funcția de a apela Sistemul Național Unic Pentru Apeluri de Urgență în situația în care acest lucru ar fi necesar;
Dezavantajele sistemului realizat:
Algoritmii utilizați necesită multe resurse de procesare, îngreunând buna desfășurare a monitorizării stării în care se află subiectul
Pentru a putea fi vândut ca sistem complet, ar fi necesare și alte componente, cum ar fi un modul GSM, GPS (pentru șoferii de cursă lungă), modul de transmisie-recepție wireless sau radio etc
9. Bibliografie
[1] Somnolența la volan, la fel de periculoasă ca alcoolul, disponibil la :
http://citynews.ro/lifestyle-16/pericole-la-volan-oboseala-si-somnul-203796, [accesat la data de 16.06.2015]
[2] Monitorizarea pacientului clinic, disponibil la http://www.scribd.com/doc/126555644/7-Monitorizarea-Pacientului-Critic#scribd, [accesat la data de 16.06.2015]
[3] Furman, G.D., Computers in Cardiology, Early detection of falling asleep at the wheel: A Heart Rate Variability approach, 2008
[4] Sleep Watcher XR, disponibil la: http://www.exeros-technologies.com/car-cameras/sleep-watcher-xr, [accesat la data de 16.06.2015]
[5] ALERTNESS SENSING DEVICE, disponibil la:
http://patents.justia.com/patent/20110121976 , [accesat la data de 16.06.2015]
[6] Monitorizarea oxigenului, disponibil la: http://www.mediculmeu.com/monitorizarea-in-chirurgie-si-terapie-intensiva/monitorizarea-respiratorie/monitorizarea-oxigenului.php , [accesat la data de 16.06.2015]
[7] Masurarea tensiunii arteriale: Cum se masoara tensiunea arteriala, disponibil la: http://www.infobazar.ro/sanatate/Masurarea-tensiunii-arteriale/Cum-se-masoara-tensiunea-arteriala , [accesat la data de 16.06.2015]
[8] Electroencephalography,disponibil la: https://en.wikipedia.org/wiki/Electroencephalography , [accesat la data de 16.06.2015]
[9] Investigarea corpului, Catedra de fiziologie, UMF “Carol Davilla” , Dr. Raluca Popocea, 2005, disponibil la: http://www.fiziologie.ro/curs04/2EKGcurs1.pdf, [accesat la data de 16.06.2015]
[10] Electromiografia (EMG), disponibil la adresa: http://www.academica-medical.ro/pentru_pacienti_51__Electromiografia%20%28EMG%29, accesat la data de 16.06.2015
[11] Analysis of intramuscular electromyogram signals, disponibil la: http://rsta.royalsocietypublishing.org/content/367/1887/357, [accesat la data de: 16.06.2015]
[12] Microcontroler, disponibil la: https://ro.wikipedia.org/wiki/Microcontroler, [accesat la data de 16.06.2015]
[13] Familia de microcontrolere XC800, disponibil la: http://www.infineon.com/cms/en/product/microcontroller/channel.html?channel=ff80808112ab681d0112ab6b2dfc0756, [accesat la data de: 16.06.2015]
[14] Atmega328, disponibil la: https://en.wikipedia.org/wiki/ATmega328, [accesat la data de: 16.06.2016]
[15] Arduino, disponibil la: https://en.wikipedia.org/wiki/Arduino, [accesat la data de: 16.06.2015]
[16] Senzor, disponibil la: https://ro.wikipedia.org/wiki/Senzor , [accesat la data de 16.06.2015]
[17] Zamfira S., Senzori si traductoare, curs, Universitatea Transilvania din Brasov, 2013
[18] Pulsoximetria, disponibil la : http://latodis-med.com/stiri-medicale/pulsoximetria.html , [accesat la data de: 16.06.2015]
[19] LED , disponibil la: https://ro.wikipedia.org/wiki/LED , [accesat la data de 16.06.2015]
[20] Infrarosu, disponibil la: https://ro.wikipedia.org/wiki/Infraro%C8%99u , [accesat la data de 16.06.2015]
[21] Fotodioda, disponibil la : https://en.wikipedia.org/wiki/User:Cristian_Monea/Fotodioda , [accesat la data de 16.06.2015]
[22] Rezistor, disponibil la: https://ro.wikipedia.org/wiki/Rezistor , [accesat la data de: 16.06.2015]
[23] Condensator electric, https://ro.wikipedia.org/wiki/Condensator_electric , [accesat la data de 16.06.2015]
[24] Amplificator operational, https://ro.wikipedia.org/wiki/Amplificator_opera%C8%9Bional , [accesat la data de 16.06.2015]
[25] Camera video, disponibil la https://ro.wikipedia.org/wiki/Video , [accesat la data de 16.06.2015]
[26] CCD – Dispozitiv cu cuplaj in sarcina, disponibil la https://ro.wikipedia.org/wiki/Dispozitiv_cu_cuplaj_de_sarcin%C4%83 , [accesat la data de 16.06.2015]
[27] CMOS – Complementary metal–oxide–semiconductor, disponibil la adresa : https://en.wikipedia.org/wiki/CMOS, [accesat la data de 17.06.2015]
[28] Motorul electric, disponibil la adresa: https://ro.wikipedia.org/wiki/Motor_electric,[ accesat la data de 17.06.2015]
[29] Proiect – motor de curent continuu cu tensiunea nominala, disponibil la adresa: http://www.rasfoiesc.com/inginerie/tehnica-mecanica/Proiect-motor-de-curent-contin58.php, [accesat la data de 17.06.2015]
[30] Zamfira S, Tehnologie și educație mecatronică. Dezvoltare durabilă, 2014
[31] SURSE DE TENSIUNE CONTINUĂ, disponibil la : http://www.scribd.com/doc/164250821/Surse-de-Tensiune-Continua#scribd ,[ accesat la data de 17.06.2015]
[32] OpenCV, disponibil la: https://en.wikipedia.org/wiki/OpenCV , [accesat la data de : 17.06.2015]
[33] Arduino – Language Reference, disponibil la: https://www.arduino.cc/en/Reference/HomePage, [accesat la data de 17.06.2015]
[34] Microsoft Visual Studio, disponibil la : https://en.wikipedia.org/wiki/Microsoft_Visual_Studio, [accesat la data de 17.06.2015]
[35] Arduino UNO, disponibil la: https://www.arduino.cc/en/Main/ArduinoBoardUno ,[ accesat la data de: 16.06.2015]
[36] HP Webcam 1300 – Product Specifications, disponibil la: http://support.hp.com/us-en/product/HP-1300-Webcam/5190028/model/5190029/document/c03315917/ ,[ accesat la data de 16.06.2015]
[37] Universal AC/DC Adapter 1000 mA, disponibil la adresa: http://www.ebay.com/itm/HQ-Universal-AC-DC-Adapter-1000mA-3V-4-5V-5V-6V-9V-and-12V-output-/230817715481 , [accesat la data de 17.06.2015]
[38] Haar Cascade, disponibil la adresa: https://en.wikipedia.org/wiki/Haar-like_features , [accesat la data de 17.06.2015]
[39] Hough Circle Transform, disponibil la adresa: http://www.cs.nccu.edu.tw/~whliao/cv2011/Hough_Circle.pdf , [accesat la data de 18.06.2015]
[40] An Eigenspace Update Algorithm for Image Analysis, disponibil la adresa: http://www.sciencedirect.com/science/article/pii/S1077316997904251 , ]accesat la data de 18.06.2015]
[41] Visual Basic, disponibil la adresa: https://en.wikipedia.org/wiki/Visual_Basic , [accesat la data de 18.06.2015]
Anexe
Anexa 1 – Programarea Camerei Web
Form1.vb:
Imports Emgu.CV
Imports Emgu.CV.Util
Imports Emgu.CV.Structure
Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel
Public Class Form1
Dim i As Integer = 0
Dim secundealarma As Integer
Dim capturez As Capture = New Capture
Dim myPort As Array
Dim Portser As String
Dim Port As SerialPort
Private Sub Form1_Load_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myPort = IO.Ports.SerialPort.GetPortNames()
ComboBox1.Items.AddRange(myPort)
' Port = New SerialPort(Portser, 4800, Parity.None, 8, StopBits.One)
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged
PortSer = ComboBox1.Text
' Port = New SerialPort(Portser, 9600, Parity.None, 8, StopBits.One)
End Sub
Private Sub BCon_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BCon.Click
'buton conectat
BCon.Enabled = False
BDis.Enabled = True
If BCon.Enabled = False Then
TextBox3.Enabled = True
TextBox3.BackColor = Color.DarkGreen
TextBox2.BackColor = Color.White
TextBox2.Enabled = False
Port = New SerialPort(Portser, 9600, Parity.None, 8, StopBits.One)
ElseIf BDis.Enabled = False Then
TextBox2.Enabled = True
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim imagez As Image(Of Bgr, Byte) = capturez.QueryFrame
Dim faceDetector As New HaarCascade("haarcascade_frontalface_default.xml")
Dim ochi As New HaarCascade("haarcascade_eye.xml")
Dim existafata As Boolean
existafata = False
Dim existaochi As Boolean
existaochi = False
Dim imgGray As Image(Of Gray, Byte) = imagez.Convert(Of Gray, Byte)()
Dim fontcv = New MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0)
For Each face As MCvAvgComp In faceDetector.Detect(imgGray, 1.1, 10, CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, New Size(20, 20), Size.Empty)
imagez.Draw("Detectare fata", fontcv, New Point(10, 80), New Bgr(Color.Blue))
imagez.Draw(face.rect, New Bgr(Color.Blue), 5)
existafata = True
Next
For Each face As MCvAvgComp In ochi.Detect(imgGray, 1.1, 10, CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, New Size(20, 20), Size.Empty)
imagez.Draw("Detectare ochi", fontcv, New Point(10, 200), New Bgr(Color.Red))
imagez.Draw(face.rect, New Bgr(Color.Red), 5)
existaochi = True
Next
PictureBox1.Image = imagez.ToBitmap()
If existafata = False And existaochi = False Then
i = i + 1
ElseIf existafata = True Or existaochi = True Then
i = 0
End If
If i >= secundealarma Then
'MsgBox("Alarma!", MsgBoxStyle.Critical, "Odihneste-te putin!")
Port.Open()
Port.Write("A")
Port.Close()
i = 0
End If
End Sub
Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged
If NumericUpDown1.Value > 0 Then
secundealarma = NumericUpDown1.Value * 10
ElseIf NumericUpDown1.Value <= 0 Then
secundealarma = 1
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Application.Exit()
i = 0
End Sub
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
DESPRE.Show()
End Sub
Private Sub BDis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BDis.Click
BCon.Enabled = True
BDis.Enabled = False
If BDis.Enabled = False Then
TextBox2.Enabled = True
TextBox3.Enabled = False
TextBox2.BackColor = Color.DarkRed
TextBox3.BackColor = Color.White
End If
End Sub
End Class
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: Realizarea Unui Sistem Mecatronic Pentru Monitorizarea Starii de Oboseala a Persoanelor Active (ID: 163331)
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.
