Sistem Teleghidat DE Masurare Si Afisare A Activitatii Vitale
SISTEM TELEGHIDAT DE MĂSURARE ȘI AFIȘARE A ACTIVITĂȚII VITALE
INTRODUCERE
Lucrarea de față își propune să prezinte proiectarea și dezvoltarea unui sistem conceput pentru a optimiza și a simplifica munca unui medic. Pentru îmbunătățirea performanțelor obținute și înglobarea de concepte ale inteligenței artificiale, aparatura medicală este monitorizată de calculatoare, integrate în sistem. Culegerea și prelucrarea datelor poate fi făcută automat cu ajutorul calculatorului prin dezvoltarea de sisteme informatice plecând de la medicul de familie, continuând cu spitalele, ajungând la direcțiile sanitare și minister.
Formatul electronic al informației medicale dă posibilitatea parcurgerii rapide, a consultării strict a informației dorite și a transmiterii în timp real la distanță. Existența unor baze de date electronice, internaționale ce acumulează informația medicală face posibilă atât informarea curentă pe scară largă, cât și stabilirea unor direcții în sănătatea publică.
Domeniul informaticii medicale nu a avut o istorie foarte liniștită, cum s-ar putea crede. Impulsul adus de tehnica de calcul în toate domeniile s-a extins firesc și asupra domeniului medical, astfel încât în anii ‘70 se strânseseră deja numeroase aplicații, au început să se organizeze conferințe specializate, s-au înființat societăți de profil, și s-a început introducerea unor cursuri de informatică în învățământul medical. Era destul de greu de ținut pasul: tehnologia avansa, apăreau sisteme noi, limbaje noi, concepții noi.
Comunitatea celor interesați în aceste aplicații a început să realizeze că, de fapt, obiectul informaticii medicale nu ar trebui să fie strict legat de tehnica de calcul ci mai curând de elementul central, care rămâne mereu același, indiferent de tehnologie, și anume informația medicală.
Sistemul creat este un prototip experimental, folosit la măsurarea activității vitale a pacienților. Pe baza unor carduri cu cip de tip tag inserate în interiorul unor brățări, medicul poate citi datele cu caracter personal ale pacienților și activitatea vitală. Pe lângă aceste funcții, sistemul beneficiază și de funcția de teleghidare controlată de către o telecomandă. Funcția de teleghidare poate simplifica deplasarea medicului la pacienții cu dificultăți locomotorii. Înregistrarea activității vitale se poate stoca direct pe un website care conține baza de date a pacienților, a cărui mod de implementare este prezentat în această lucrare. Pacienții pot accesa website-ul, putând astfel să-și monitorizeze această activitate. În cazul în care sunt adăugați noi senzori, sistemul poate fi dezvoltat astfel încât să poată măsura și alți parametrii.
Sistemul beneficiază de un LCD care afișează activitatea vitală a pacienților. De asemenea acest sistem simplifică nu numai munca unui medic ci și a unui administrator de rețea din cadrul unor clinici. Toate tehnologiile folosite la conceperea și programarea sistemului sunt tehnologii actuale, care îmbină domeniul medical și cel informatic.
În ceea ce privește structura lucrării, în primul capitol am detaliat platforma de bază pe care se structurează întregul sistem, și anume Arduino. În primul subcapitol am prezentat partea de hardware a platformei, structura de bază a platformei, modul de concepere, dar și modurile pe care le poate utiliza pentru conexiuni. În cel de al doilea subcapitol am evidențiat partea software a platformei, limbajul utilizat precum și modul în care funcționează aplicația implementată de Arduino pentru introducerea codului sursă. De asemenea am prezentat și modul de comunicare dintre calculator și platformă exemplificând anumite funcții.
Capitolul al doilea prezintă în detaliu toate componentele necesare și utilizate la construcția proiectului. Acestea sunt reprezentate din punct de vedere hardware, descriind atât componentele sistemului din punct de vedere tehnologic și funcțional, cât și modul interconectare între ele, dar și între fiecare componentă cu platforma.
Capitolul al treilea prezintă modul detaliat de programare al sistemul, fiind partea cea mai interesantă. Aici sunt prezentate și explicate codurile sursă folosite pentru fiecare dispozitiv în parte, cât și structura bazei de date implementate într-un website.
În cel de al patrulea capitol, sunt prezentate pe rând câteva posibilități de îmbunătățire hardware ale sistemul, necesare pentru elaborarea unui sistem complet. Fiind un prototip experimental, poate fi îmbunătățit din punct de vedere hardware astfel încât să îndeplinească mai multe funcții. Lucrarea se finalizează cu un capitol de concluzii și bibliografie.
CAPITOLUL 1. PLATFORMA DE DEZVOLTARE CU
MICROCONTROLLER „ARDUINO”
1.1 Prezentare generală Arduino (Hardware)
Familia de platforme de dezvoltare Aduino a fost lansată în 2005 fiind un proiect derivat din proiectul open-source Wirig Platform – framework open source pentru platforma de dezvoltare bazată pe diverse circuite de tip microcontroller. Inițiatorii proiectului, Massimo Banzi și David Cuartielles, l-au denumit după un caracter istoric al orașului Ivrea (Italia) în care a fost inițiat poiectul – Arduin of Ivrea. Arduino este substantiv propriu în limba italiană care se poate traduce prin “bun prieten”.
Familia Arduino include mai multe versiuni de platforme de dezvoltare cu funcționalități și scopuri diverse: Arduino ADK bazată pe un circuit ATMega2560 proiectată pentru interfațarea cu dispozitivele care rulează sistemul de operare Arduino; Arduino Leonardo bazată pe un circuit ATMega32U4; LilyPad Arduino bazată pe circuitul ATMega168v sau ATMega328V proiectată pentru a putea fi inclusă în materiale textile ș.a.m.d. Până în anul 2011 au fost produse mai mult de 300.000 de platforme Arduino.
Arhitectura internă a platformei Arduino este simplă. Componentele platformei de dezvoltare asigură următoarele funcții:
Alimentarea platformei de dezvoltare (micocontroller, modul de comunicație USB) și chiar și a componentelor care vor fi inerconectate;
Interfațarea cu un sistem de tip PC printr-un modul serial-USB pentru programarea platformei și realizarea comunicației seriale cu PC-ul;
Facilitatea conectării altor componente cu placa de dezvoltare prin intermediul celor doi conectori aflați pe platformă.
Platforma de dezvoltare Arduino transformă microcontroller-ul încorporat într-o componentă pregătită de interconectare. Platforma nu adaugă funcții suplimentare micocontroller-ului (exceptând conversia serial-USB) ci doar facilitează utilizarea acestuia în cadrul unor aplicații diverse fără a mai avea nevoie de suport de bază (alimentare, programator, mufe de interconectare). Conductorii de pe platforma de dezvoltare asigură expunerea ordonată a porturilor I/O ai microcontroller-ului într-o formă standardizată. Standardizarea interconectării permite proiectarea unor componente electronice suplimentare care să ducă la extinderea funcționalității platformei. În acest mod proiectarea și implementarea unui sistem nu mai necesită proiectarea și realizarea unor componente electronice ci doar alegerea unor componente deja existente.
Platforma de dezvoltare Arduino Leonardo este o placă bazată pe un microcontroller ATMega32U4. Ea este o placă multifuncțională care oferă suport pentru comunicație serială, achiziție analogică, comandă PWM, comunicații generice I/O digitale.
Arduino este una dintre cele mai simplu de utilizat platforme cu microcontroller, un minicalculator capabil să culeagă informații din mediu și să reacționeze la acesta.
În jurul lui Arduino există un ecosistem de dispozitive extrem de bine dezvoltat. Pentru orice fel de informație care poate fi culeasă din mediu, pentru orice fel de conexiuni cu alte sisteme se găsește un dispozitiv pentru Arduino.
Astfel, dacă discutăm despre preluarea de informații din mediu există mai multe tipuri de senzori printre care: senzori ce determină nivelul de alcool în aerul respirat, senzor de incendiu, senzor de gaz GPL, senzor de monoxid de carbon, dispozitiv de accelerații ale dispozitivelor în mișcare, dispozitiv de curent consumat de diverse dispozitive casnice, dispozitiv care măsoară forța de apăsare, dispozitiv pentru gradul de rotire, dispozitiv citire/scriere cartele RFID, dispozitiv de măsurare distanțe, dispozitiv pentru nivel de iluminare, dispozitiv pentru definirea direcției nordului, senzor prezență umană, dispozitiv de emitere sunete, dispozitiv de măsurare a temperaturii, dispozitiv de măsurare a umidității din mediu, dispozitiv de măsurare a presiunii atmosferice sau dispozitiv video.
Arduino are și posibilitatea de a se conecta cu alte sisteme. Există platforme de rețea Ethernet pentru Arduino capabile să comunice informații prin Internet, dispozitive capabile să transmită date prin conexiune radio, platforme de rețea WIFI, dispozitive GSM pentru Arduino capabile să trimită / recepționeze SMS-uri, să inițieze apeluri de voce sau să trimită date prin rețeaua 3G sau conectori Bluethooth pentru conectarea Arduino cu telefonul mobil sau laptop. Pe partea de mecanică, există motoare de curent continuu (utilizate pentru robotică), motoare pas cu pas (utilizate în special în zona industrială) dar și servomotoare, care sunt controlate foarte exact. Pentru afișarea informațiilor preluate, există ecrane LCD pentru Arduino, începând cu cele mai simple (LCD text cu 16 caractere) până la ecrane LCD grafice.
1.2 IDE Arduino (Software)
Arduino este un concept care implică atât partea hardware cât și partea software. Pentru a putea lucra cu platformele din această familie trebuie înțeles modul de funcționare a componentelor hardware dar și modul de programare asociat. Limbajul folosit pentru programarea sistemul este un limbaj bazat pe C/C++, dar creat într-un mod mai strict, rezumându-se la partea necesară, fără linii de cod care să depindă unele de altele într-o mare măsură.
Motorul cercetărilor a fost dezvoltarea unui nou sistem de operare: UNIX. Evoluția limbajului de programare cât și a sistemului de operare a avut loc în paralel, fiecare impulsionând dezvoltarea celuilalt. Inițial se considera că limbajul C a fost creat special pentru sistemele de operare din familia UNIX. În cele din urmp limbajul C este un rezultat al experienței acumulate în aceste cercetări, chiar dacă este considerat un limbaj de autor.
După apariția limbajului C au existat încercări de îmbunătățire, dar fără ca vreuna să se evidențieze în mod deosebit. Dennis Ritchie a propus diverse variante, mulate pe noile versiuni de UNIX (între acestea K&R C, creat pentru sistemul UNIX de pe mașinile DEC PDP). Bjarne Stroustrup de la AT&T a propus extensia C++ (C îmbunătățit, extinzând semnificația operatorului de incrementare ++ din C).
Impactul extensiei a fost la fel de mare ca și versiunea inițială, astfel încât ea a devenit cea mai populară formă a limbajului, fiind prezentă în toate implementările curente.
Numele limbajului a fost schimbat de la C cu clase la C++. Au fost adăugate noi facilități, inclusiv funcții virtuale, supraîncărcarea operatorilor și a funcțiilor, referințe, constante, alocare dinamică, un control al tipului mai puternic și noua variantă de comentariu pe un singur rând (liniile care încep cu caracterele '//').
O dată cu evoluția limbajului C++, a evoluat și o bibliotecă standard. Prima adăugire a fost biblioteca de intrări/ieșiri (I/O stream), care oferea facilități pentru a înlocui funcțiile tradiționale C cum ar fi printf și scanf. Mai târziu, printre cele mai semnificative adăugări la biblioteca standard a fost STL (Standard Template Library) (Biblioteca de formate standard).
Pentru a putea folosi interfața de programare a platformei Arduino trebuie înțeles modul în care a fost creat, pe care în voi prezenta în continuare.
Mediul de programare open-source IDE Arduino este derivat din proiectul software Processig care este o colecție de instrumente open-source ce permit scrierea de programe orientate spre grafică pentru sistemele C cu clase la C++. Au fost adăugate noi facilități, inclusiv funcții virtuale, supraîncărcarea operatorilor și a funcțiilor, referințe, constante, alocare dinamică, un control al tipului mai puternic și noua variantă de comentariu pe un singur rând (liniile care încep cu caracterele '//').
O dată cu evoluția limbajului C++, a evoluat și o bibliotecă standard. Prima adăugire a fost biblioteca de intrări/ieșiri (I/O stream), care oferea facilități pentru a înlocui funcțiile tradiționale C cum ar fi printf și scanf. Mai târziu, printre cele mai semnificative adăugări la biblioteca standard a fost STL (Standard Template Library) (Biblioteca de formate standard).
Pentru a putea folosi interfața de programare a platformei Arduino trebuie înțeles modul în care a fost creat, pe care în voi prezenta în continuare.
Mediul de programare open-source IDE Arduino este derivat din proiectul software Processig care este o colecție de instrumente open-source ce permit scrierea de programe orientate spre grafică pentru sistemele de tip PC.
IDE Arduino este disponibil pentru cele mai importante sisteme de operare actuale (Windows, MAC OS X, Linux). Atât versiunea compilată cât și sursele sunt disponibile gratuit pe site-ul proiectului Arduino. Pe lângă copierea aplicației software IDE Arduino este necesară instalarea diver-ului de comunicație USB pentru a putea încărca programele scrise pe platforma Arduino.
Microcontroller-ul și implicit, platforma de dezvoltare dispun de 6 canale de achiziție analogică (6 pini externi) care permit conversia analogică numerică cu o rezoluție de 10 biți. Cei 6 pini au funcționalitate dublă, pot fi folosiți ca pini I/O digitali generici (A0-A5) sau pini de achiziție analogică (0-5).
Funcția pusă la dispoziție de mediul Arduino IDE pentru a citi valori preluate prin intermediul pinilor de achiziție analogică este analogRead(pin), unde pin este numărul pinului pe care se face achiziția 0-5. Funcția returnează un întreg între 0 și 1023. Din punct de vedere electric pinii acceptă o plajă de tensiuni de intrare între 0V și 5V. Ce alte cuvinte rezoluția de măsurare a pinilor de intrare analogici este 5V/210 =5V/1024 =4,88mV.
Mediul Arduino IDE mai pune la dispoziție o funcție care permite modificarea tensiunii de referință a convertorului analog numeric inter: analogReference(type). Parametrul type poate lua următoarele valori: DEFAULT(tensiunea de referintă este de 5 V), INTERNAL( 1,1V) sau EXTERNAL(tensiunea de referintă se preia de pe pinul extern AREF al platformei dar nu poate ieși din plaja 0V – 5V). Tensiunea de referință definește valoarea maximă a intervalului de măsurare putând modifica astfel rezoluția: pentru tensiune de referință de 1,1 V vom avea o rezoluție de măsurare de 1,1V/1024 = 1mV. Acest lucru poate fi util în cazul în care se lucrează cu elemente de achiziție (senzori) cu variație mică a parametrului electric furnizat.
Durata de eșantionare a convertorului analog numeric este aproximativ de 100 microsecunde (0.0001 secunde) deci frecvența maximă de citire a valorii analogice este de 10000 ori pe secundă.
O funcție utilă în procesul de achiziție, este funcția map(x , L1, H1, L2, H2). Această funcție permite translatarea automată a valorii x din intervalul L1-H1 în intervalul L2-H2. Astfel pentru a afla valoarea tensiunii măsurate se poate folosi: V=(analogRead(pin)/1024)*5; sau V = map(analogRead(pin), 0, 1024, 0, 5);
O altă funcție specifică mediului Arduino IDE care poate fi utilizată în cadrul procesului de achiziție este funcția constrain(x, a, b) care permite rejectarea valorilor aberante citite. Această funcție returnează valoarea x dacă a < x < b, a dacă x mai mic sau egal cu a și b, dacă x mai mare sau egal cu b. Astfel se pot evita inserarea în setul de date a valorilor care ies din scala de măsurare și care apar datorită unor erori de funcționare în procesul de achiziție.
Interfața mediului IDE Arduino este extrem de simplă fiind împărțită în patru zone: zona de meniuri, zona de pictograme pentru comenzi rapid, zona de editare a programului și zona de mesaje a procesorului de compilare și transfer.
Cele cinci meniuri ale interfeței permit:
File – operații de bază cu fișierele ce conțin codul sursă de lucru (Save, New, Open, Print) dar și personalizarea interfeței de lucru (Preferences).
Edit – operații de bază cu diverse zone de text (Copy, Cut, Paste, Commnet / Uncomment, Find).
Sketch – operații specifice procesului de compilare asupra programului scris (Compile, Import Library…) – programul scris în IDE Arduino poartă denumirea de sketch – schiță
Tools – pune la dispoziție o serie de instrumente ce permit accesarea unor acțiuni în conjuncție cu platforma de dezvoltare (Serial Monitor, Board – alegerea platformei pe care se încarcă programul, Programmer – alegerea unui programator specializat dacă este cazul, Burn Bootloader).
Help – meniu specific accesării documentației mediului de programare.
Zona de comenzi rapide permite următoarele operații: compilare, încărcare binar pe platforma de dezvoltare, program nou, deschidere și salvare cod sursă.
Zona de editare a programului permite utilizatorului editarea propriu-zisă a codului sursă. Mediul IDE este syntax-highlighting – colorează cuvintele cheie rezervate și instrucțiunile limbajului de programare – dar nu include instrumente de auto completare sau debugging (rulare pas cu pas, trece de variabile, breakpoint, etc.).
Zona de mesaje a interfeței permite vizualizarea de mesaje de eroare la compilare sau la procesul de încărcare a codului binar în memoria microcontroller-ului de pe platforma de dezvoltare. Gradul de rapoarte a acestor mesaje poate fi modificat din meniul File/Preferences opțiunea Show verbose output during.
În cadrul aceluiași meniu se pot modifica și alți parametrii de funcționare IDE-ului Arduino: efectuarea de verificare a codului binar scris în memoria microcontroller-ului, utilizarea unui editor extern pentru codul sursă, asocierea extensiei fișierelor cod sursă cu aplicația IDE Ardunio, modificarea limbii meniurilor aplicației, modificarea dimensiunii fonturilor pentru zona de editare cod sursă.
Tot în aplicația IDE Arduino se găsește și o rubrică cu exemple unde sunt mai multe programe (coduri sursă) funcționabile care familiarizează utilizatorul începător cu limbajul și modul de programare al platformei Arduino.
Având în vedere faptul că platformele de dezvoltare Arduino sunt echipate cu microcontrollere din familia Atmel AVR , mediu de dezvoltare IDE Arduino nu este singurul instrument de dezvoltare care poate fi utilizat pentru a scrie programe. WinAVR și Atmel Studio(AVR Studio)sunt alte două produse foarte performante pentru scrierea de programe în C/C++ și limbaj de asamblare.
Anatomia unui program Arduino are două secțiuni. Secțiunea “setup”, care este rulată doar o singură dată, atunci când platforma este alimentată (sau este apăsat butonul „Reset”), și secțiunea „loop”, care este rulată în ciclu, atât timp cât este alimentată platforma.
Astfel în rutina “setup” se pune codul de inițializare, iar în rutina “loop” se scrie partea principală a programului.
Figura 1.2.1 Mediul IDE Arduino
CAPITOLUL 2. DESCRIEREA SISTEMULUI
Acest capitol prezintă în detaliu toate componentele necesare și folosite la construcția proiectului. Acestea sunt prezentate din punct de vedere hardware, descriind atât construcția lor, modul de utilizare cât și modul interconectare atât între ele, dar și între fiecare componentă cu platforma de bază.
Componentele sistemului teleghidat de măsurare și afișare a activității vitale sunt:
Platforma de dezvoltare Arduino Leonardo;
Driver de motoare L298;
Afișaj de tip LCD Alfanumeric 16×2;
Cititor de carduri RFID MIFARE RC522;
Senzorul telecomandă infraroșu brick;
Senzor de puls.
Sistemul este prezentat în figura 2.1.
Figura 2.1 Sistem teleghidat de măsurare și afișare a activității vitale
2.1. Platforma de dezvoltare Arduino Leonardo
Ardunio Leonardo R3 (Figura 2.1.1) este cea mai nouă platformă de procesare Arduino. Este bazată pe microcontroller-ul ATMega32U4. Are 20 pini digitali de input/output(din care 7 suportă PWM, iar 12 dintre ei pot fi utilizați și ca pini de intrare analogică), funcționează la 16 MHz, și dispune de o conexiune cu calculatorul print-o mufă micro USB.
Schimbarea majoră față de alte dispozitive din această serie este faptul că microcontroller-ul ATMega32U4 permite comunicarea USB directă, fără a fi necesar alte dispozitive, ca urmare această platformă se poate comporta ca o tastatură PC sau un mouse.
Ea diferă față de alte platforme deoarece utilizează un sigur microcontroller pentru a rula atât schițe cât și comunicarea USB. Alte dispozitive din aceeași gamă folosesc microprocesoare separate pentru aceste două funcții, ceea ce însemnă că acea conexiune USB la computer rămâne stabilită indiferent de stare mircocontroller-ul principal. Prin combinarea acestor două funcții pe un singur procesor, Leonardo permite o mai mare flexibilitate în comunicarea sa cu computerul. De asemenea, ajută la reducerea costurilor de bord prin eliminarea necesității unui al doilea procesor suplimentar.
Deoarece platformele nu au un cip dedicat să se ocupe de comunicarea serială, însemnând că portul serial este unul virtual adică este o rutină de software, atât pe sistemul de operare, precum și de pe platformă în sine. De aceea și computerul creează o instanță a driver-ului portului atunci când se conectează în Arduino, acesta creează un exemplu de serie ori de câte ori se execută bootloader-ul său.
Platforma este o instanță de USB CDC (Connected Device Class) driver. Acesta înseamnă că de fiecare dată când se resetează board-ul, conexiunea USB serială se va întrerupe după care se va restabili. Dispozitivul va dispărea din lista de porturi seriale, iar lista va re-enumera. Orice program care are o conexiune serială deschisă la Leonardo va pierde conexiunea sa.
Arduino Leonardo poate fi alimentat prin intermediul conexiunii micro USB . Sursa de energie este selectată automat. În același timp Arduino poate fi alimentat și de o sursă de energie externă cu un adaptor AC-DC sau baterie. Adaptorul poate fi conectat prin mufa de 2.1 mm cu mijlocul pozitiv în fișa de alimentare a platformei. Oportunitatea de a adăuga o bateria se poate face la pini GND-masă și VIN-pozitiv ai platformei care sunt interconectați cu fișa de alimentare a platformei. Sistemul poate funcționa pe o sursă externă de 6-20 volți, dacă tensiunea livrată este mai mică de 6 volți, platforma poate deveni instabilă și nu va funcționa în regim optim, tot astfel dacă tensiune este mai ridicată decât limita admisă, regulatorul de tensiune se va supraîncălzi și va deteriora platforma. Memoria platformei este de 32 KB(4 KB folosiți pentru bootloader), de asemenea are 2,5KB SRAM și 1 KB EEPROM (care poate fi citit,dar și scris cu biblioteca EEPROM).
Figura 2.1.1. Platforma de dezvoltare Arduino Lenardo versiune R3
Fiecare dintre cei 20 de pini digitali I/O pe care îi deține Leonardo poate fi folosiți atât ca pini de intrare cât și ca pini de ieșire, folosind funcțiile pinMode(), digitalWrite() și digitalRead() . Pini funcționează la 5 volți. Fiecare pin poate oferi sau primi un maxim de 40 mA și are o rezistență pull-up intern(deconectat implicit)de 20-50 kohmi. În pus unii pini au funcții speciale cum ar fi:
Serial: pin 0(RX) și pin 1(TX). Este folosit pentru a primi (RX) și a transmite date seriale(TX) TTL utilizând ATMega32U4.
TWI: pin 2(SDA) și pin 3(SCL). Sprijin de comunicare DST folosind biblioteca Wire.
Întreruperi externe: pinii 0 , 1, 2, 3. Acești pini se pot configura pentru a declanșa o întrerupere pe o valoare scăzută, o creștere sau o modificare a valorii.
PWM (Pulse Width Modulation): pinii 3,5,6,9,10,11,13. PWM este un tip de semnal care transmite pe porturile digitale o informație care să varieze în mai multe trepte. Astfel dacă se modifică raportul între cât timp stă semnalul în 5 volți și cât timp stă semnalul în 0 volți obținem un semnal a cărui putere se modifică în trepte. Acest raport se numește “factor de umplere” al semnalului PWM.
LED: pin 13. Există un built-in LED conectat la pinul digital 13, atunci când codul PIN are valoare ridicată, LED-ul este aprins, iar atunci când valoarea este scăzută este oprit.
Intrări analogice: A0-A5, A6-A11, Leonardo are 12 intrări analogice, etichetate de la A0 până la A11. Toate acestea pot fi de asemenea utilizate ca I/O. Ficare pin analogic furnizează 10 biți de rezoluție(1024 de valori diferite).
Există și o serie de pini “ace” pe platformă:
AREF: tensiunea de referință pentru intrări analogice. Se folosește cu funcția analogReference()
Reset: Destinat pentru a putea reseta microcontroller-ul.
Leonardo are o serie de facilități când discutăm de comunicarea cu PC-ul, diferă față de alte platforme Ardunino, prin microcontroller-ul ATMega32U4 oferă UART TTL (5V) de comunicație serială care este disponibil pe pini digitali 0(RX) și 1(TX). Cipul acționează ca un dispozitiv de viteză maximă USB 2.0, utilizând driverele standard de USB COM. În Windows este necesar un fișier .inf.
Software-ul Arduino include un monitor de serie care permite afișarea datelor de tip text simple la și de la bord-ul Arduino.
LED-urile RX și TX de pe platformă vor clipi atunci când datele sunt trimise prin intermediul conexiunii USB la PC. Biblioteca SoftwareSerial permite comunicarea serială pe oricare din pinii digitali a lui Leonardo.
Microcontroller-ul sprijină de asemenea comunicarea I2C(DST) și SPI. Software-ul Ardunino include o bibliotecă Wire pentru a simplifica utilizarea I2C bus. În același timp comunicarea SPI utilizează biblioteca SPI.
2.2. Driver de motoare L298
Driver-ul de motoare L298 este utilizat pentru controlul motoarelor de curent continuu folosind Arduino Leoardo.
Arduino nu este capabil să emită pe porturile sale o putere foarte mare, este total insuficientă pentru a porni(a demara) un motor. Dacă se conectează un motor electric direct la un port Arduino, se poate obține arderea (degradarea) procesorului(microcontroller-ului) de pe platforma Arduino. Ca să nu apară acestă problemă, este nevoie de un amplificator de putere, care să ia putere din sursa de alimentare (baterie, de exemplu), și să o transmită motoarelor în modul în care primește comandă Arduino. Acest amplificator poartă numele generic de "driver de motoare".
Există mai multe tipuri de drivere de motoare, diferența majoră între ele fiind cât de mare este intensitatea curentului care o poate conduce (cât de puternice pot fi motoarele pe care le poate controla). Driver-ul din această secțiune este bazat pe integratul L298, fiind un driver de nivel mediu din punct de vedere al puterii pe care o poate conduce. Poate controla motoare care necesită o sarcină de cel mult 2 Amperi. Driver-ul se conectează la platforma Arduino folosind 4 pini digitali (3, 5, 6 și 9) prin înfigere directă în pinii platformei Arduino.
Produsul se prezintă sub forma shield-ului Arduino complet asamblat (platformă roșie cu pini)care are exact aceeași stuctură a pinilor ca și platfoma Arduino, la care se adaugă o serie de elemente de conectare care nu sunt montate pe platformă în mod obișnuit( două barete mamă cu 6 pini fiecare pentru alimentarea senzorilor direct din shield, o regletă cu 6 pini mamă în plan orizontal pentru montarea conectorului Bluetooth, și doi pini tata cu un jumper pentru alimentarea motoarelor folosind o singură sursa de tensiune). Aceste elemente de conectare nu sunt montate pe shield în varianta obișnuită ci sunt lipite ultierior.
Versiunea curentă, 2.0, prezintă o serie de îmbunătățiri care fac și mai simplă utilizarea acestui shield:
se pot alimenta senzorii (5V) direct din shield (figura 2.2.1), folosind cei 6 conectori care oferă conexiune directă la 5V și cei 6 conectori care oferă conexiune directă la GND.
Figura 2.2.1. Driver de motoare L298
b) se poate conecta un Bluetooth Mate la Arduino extrem de simplu. Pe shield sunt deja un conector dedicat cu 6 pini gândit special pentru Bluetooth Mate. Tot ce trebuie făcut este să se adauge Bluetooth-ul în el, și există o conexiune SoftwareSerial pe pinii digitali 2 și 4.
c) există și un jumper care permite alimentarea platformei Arduino direct din sursa de alimentare a shield-ului / sau se alimentează shield-ul din sursa de alimentare a platformei Arduino (atunci când jumper-ul este conectat pe shield), sau cu doua surse de alimentare complet independente (atunci când jumper-ul este deconectat din placă).
Alimentarea shield-ului se face prin pinii cu surub VIN și GND. Shield-ul se alimentează în funcție de necesitățile motoarelor. Dacă motoarele acceptă o tensiune de cel mult 9V atunci se poate utiliza o cutie cu 6 baterii. Tensiunea totală a bateriilor este de 9V dar driver-ul consumă intern între 2.5 și 4.5V. În acest mod, pe motor, ajunge o tensiune cuprinsă între 4.5V și 6.5V, suficient cât să își îndeplinească funcția fără să se degradeze platforma.
Pentru platforma Arduino, se poate alege o altă sursă de tensiune (cutie de baterii, LIPO, etc.), sau se poate alege aceeași sursa de tensiune pe o folosesc motoarele. Este recomandat să se folosească o altă sursă de tensiune. Dacă se va folosi o singură sursă de tensiune, atunci când bateriile se descarcă prea mult, platforma Arduino se poate reseta sau senzorii pot genera semnale eronate din cauza ca motoarele necesită un curent prea mare când pornesc sau când își schimbă sensul de rotație. Pentru a folosi doua surse de tensiune, shield-ul se alimentează folosind pinii VIN și GND (cei cu surub, partea frontala (Figura 2.2.1)), iar placa Arduino se alimentează fie pe mufa rotundă, de exemplu folosind acest cablu împreună cu o cutie cu 6 baterii, sau altă modalitate (de exemplu direct prin pinii mamă GND și VIN). În această situație (două surse de tensiune) jumper-ul mov trebuie sa fie deconectat pe shield. Altfel, cele două surse vor debita curent una în cealaltă. Pentru a folosi o singura sursă de tensiune, se va cupla jumper-ul de culoare mov pe shield. În acest fel, tensiunea aplicată pe pinul cu surub VIN ajunge direct prin jumper pe pinul VIN (mamă) din platforma Arduino.
2.3. Afișaj de tip LCD Alfanumeric 16×2
LCD-ul (Liquid Crystal Display) este un modul electronic de afișare utilizabil într-o mare varietate de aplicații. Un modul de afișaj de 16×2 este des întâlnit în diferite aplicații preferat modulelor de afișaj de 7 segmente, motivele fiind: este ușor de programat, nu are limitări la afișarea caracterelor speciale, posibilitatea de realizare animații și nu în ultimul rând un consum redus (circa 1,5 mA + 20 mA iluminarea de fundal) față de un afișaj pe leduri / segmente(fiecare segment aprins consumând cel puțin 20mA).Un modul de afișare 16 X 2 poate afișa 16 caractere pe 2 linii. Fiecare caracter este afișat pe o matrice de 5 X 7 pixeli. Aceste LCD funcționează cu ajutorul a două registre: Command și Data. Registrul Command înregistrează comenzile ce sunt trimise LCD-ului. Comenzile ce pot fi date sunt taskuri predefinite ce pot fi de inițializare, ștergere, setarea poziției cursorului ș.a.m.d. Registrul Data înregistrează date ce vor fi afișate. Datele sunt înregistrate în cod ASCII. Semnificația pinilor de interconectare a unui modul LCD se pot observa în imagine (Figura 2.3.1).
Figura 2.3.1. Afișaj de tip LCD Alfanumeric 16×2
Pentru funcționarea circuitului trebuie conectați pinii:
Ground – pin ce trebuie conectat la masă;
Vdd – pin ce trebuie conctat la o tensiune între 4,7V și 5,3 V;
Ve – pin ce poate fi conectat la o rezistență variabilă de 10 kΩ (potențiometru);
Register Select – pin ce trebuie conctat la o ieșire digitală a unui microcontroller și comandată de acesta;
Read/Write – pinul poate fi legat la masă deoarece, într-o variantă minimală de funcționare, nu este necesară preluarea de valori din registrele interne;
Enable – pin ce trebuie conectat la o ieșire a unui microcontroller și comandată de acesta;
Data port – se pot utiliza toți 8 pinii ai acestui port dar minim se pot conecta numai 3-7 pentru a se realiza o conexiune pe o magistrală de 4 biți.
Pentru a se activa lumina de fundal se pot conecta și pinii 15, 16, pinul 15 la o sursă de minim 3,3 V și pinul 16 la masă.
Controlerul LCD conține 3 blocuri de memorie:
DDRAM Display Data RAM
CGRAM Character Generator ROM
CGROM Character Generator RAM
Memoria DDRAM se folosește pentru stocarea caracterelor afișate pe ecran și poate memora 80 caractere, din care o parte sunt cele afișate direct ecran.
Funcționarea este simplă: este suficient să se configureze ecranul să incrementeze adresa automat (shift right) și să se configureze adresa de start pentru mesajul care se afișează (ex. 0x00 hexa). Apoi, toate caracterele trimise pe liniile D0-D7 vor fi afișate de la stânga la dreapta. În acest caz, afișarea începe de la primul caracter din rând deoarece adresa inițială este 0x00. Dacă se trimit mai mult de 16 caractere, toate vor fi memorate, dar numai primele 16 vor fi vizibile. Pentru a afișa și restul, se va folosi comanda SHIFT, care mută fereastra vizibilă spre celelalte zone din memorie, caracter cu caracter. Memoria DDRAM poate și scrisă, dar și citită.
Memoria CGROM conține un set standard de caractere, toate variantele care le poate afișa controlerul respectiv. Fiecare caracter are alocată o zona de memorie CGROM.
Pe lângă caracterele standard, controlerul LCD poate afișa simboluri definite de utilizator. Poate fi simbol grafic de 5×8 pixeli. Pentru fiecare caracter sunt necesari 64 biți. Din fiecare bit, doar primii 5 biți sunt utilizați, acesta este memoria CGRAM
Mediul Arduino IDE nu pune la dispoziție funcții pentru utilizarea LCD-ului. Pentru a putea fi utilizat LCD-ul trebuie utilizată o bibliotecă inclusă în mediul Arduino IDE ce implementează diferite funcții pentru folosirea LCD-ului. Acesta se numește LiquidCrystal și este necesară includerea fișierului LiquidCrystal.h pentru folosirea funcțiilor LCD-ului.
2.4. Cititor de carduri RFID MIFARE RC522
Identificarea prin RadioFrecvență (RFID – Radio Frequency IDentification) sau proximitate, este ultima și cea mai avansată metodă tehnologică de colectare automată a datelor, având multe benefici pe măsură ce oamenii înțeleg, adoptă și utilizează această tehnologie. RFID este un sistem de identificare asemănător tehnologiei cu cod de bare. Sistemele cu cod de bare necesită un cititor și etichete adezive lipite pe obiecte, pe când RFID necesită un cititor și tag-uri speciale sau cartele atașate/integrate în obiecte.
Prin comparație, codul de bare utilizează reflecția unui fascicul luminos peste eticheta ce conține tipărit codul, iar RFID folosește un câmp de radiofrecvență de putere mică, nefiind distorsionat, ca și în cazul cititorului cu fascicul luminos. Acest câmp de radiofrecvență nu necesită o poziționare precisă a obiectului la citire, el penetrează orice material nemetalic nefiind necesar contactul direct cu echipamentul de citire, fără a fi nevoie de a ține în permanentă tag-ul la loc vizibil..
Fiecare formă de colectare a datelor are avantaje proprii și un potențial utilizator trebuie să evalueze beneficiile fiecărei metode când dezvoltă un sistem ce rezolvă o problemă particulară. Beneficiile unui sistem RFID ca și celelalte tehnologii de identificare RFID accelerează colectarea datelor și elimină intervenția umană în procesele de fabricație, ceea ce reduce semnificativ tipul acordat indetificări de orice natură ar fi.
Tag-urile pasive au o durată de funcționare extrem de mare, de obicei depășesc perioada de viață a obiectului gazdă, teoretic nu de deteliorează . Datorită acestui motiv sistemele RFID devin cea mai ieftină soluție de identificare dacă este evaluată pe termen lung. Față de cod-urile de bare sau suporții magnetici, tag-urile RFID sunt practic imposibil de copiat. Din acest motiv sunt ideale în aplicații cu un grad ridicat de securitate precum identificarea persoanelor sau a valorilor. Tehnologia RFID este rapidă; viteza de citire a unui tag este de ordinul zecilor de milisecunde. Sistemele RFID sunt compuse, în general, din trei componente : un cititor , un transponder (tag de radiofrecvență) și un computer sau orice alt sistem de procesare a datelor. Sistemele RFID utilizează transmisia prin radio frecvență pentru a identifica, cataloga, localiza persoane, animale și obiecte, dar pot avea și alte apicabilități.
Cititorul conține componente electronice care emit și recepționează un semnal spre și de la tag-ul de proximitate, un microprocesor care verifică și decodifică datele recepționate și o memorie care înregistrează datele pentru o transmisie viitoare dacă este necesar.
Cititorul are conectată o antenă pentru a fi posibilă recepția și transmisia datelor tag-urilor rfid după care calculatorul procesează datele preluate de cititor, cititorul transmite semnal tag-ului, tag-ul răspunde și transmite codul cititorului. Antena poate fi integrată în carcasa cititorului care poate avea terminație exterioară pentru a avea un câmp cât mai larg de citire/scriere, sau poate fi internă, situată pe placa electronică. Un tag de proximitate conține un cip electronic ca element principal, acesta controlând comunicația cu cititorul. Acesta conține o secțiune de memorie cu rol de stocare a codurilor de identificare sau alte date, fiind activată odată cu comunicația. În majoritatea cazurilor, cititorul emite un câmp electromagnetic într-o zonă a cărei mărime depinde de frecvența sistemului și dimensiunile antenei.
Când un tag trece prin această zonă, acesta detectează semnalul generat de cititor și începe să comunice informațiile stocate în memorie. Semnalul generat de cititor oferă atât informații temporale cât și suficientă energie tagului pentru a-i asigura funcționarea, fără a fi nevoie de o altă sursă de alimentare. Informațiile de timp sincronizează comunicația dintre tag și cititor simplificând designul constructiv al acestora, fiind un alt motiv pentru a alege acestă tehnologie. Atâta timp cât tag-ul este alimentat el parcurge o serie de secvențe ce permit adresarea unor locații de memorie, datele citite fiind transmise înapoi cititorului. Când cititorul recepționează datele le decodifică și le supune unui test de validare (CRC – cyclic redundancy check). Dacă datele sunt valide, sunt transmise apoi unui computer prin intermediul unui protocol de comunicație, în funcție de tipul de dispozitiv diferă modul de comunicare. Tag-urile pot fi active sau pasive. Un tag activ necesită conectarea la o baterie externă sau internă prin integrarea acesteia. Aceste sisteme au avantajul reducerii energie necesare generate de cititor, având o mai mare distanță de citire. Distanța de citire depinde de dimensiunile antenei din interiorul tag-ului și de a celei conectate la cititor. Ultimele dezvoltări în acest domeniu vizează sisteme anti-coliziune sau citire multiplă capacități ce permit citirea mai multor tag-uri aflate în câmpul de radiofrecvență.
Cardul MIFARE Classic este doar un dispozitiv de stocare de memorie, în cazul în care memoria este împărțit în segmente și blocuri cu mecanisme simple de securitate pentru controlul accesului. Datorită fiabilitatea lor și costului scăzut, aceste carduri sunt utilizate pe scară largă pentru portofel electronic, control acces, cărți de identitate corporative, transport sau stadion de ticketing. Fiecare poate fi programat pentru a permite operațiuni cum ar fi: cititul, scrisul, crescând blocuri de valoare, etc. Pentru fiecare dintre aceste tipuri de carduri, 16 biți pe sector sunt cheile rezervate și condițiile de acces și nu pot fi în mod normal utilizate pentru datele de utilizator. De asemenea, primii 16 de biți conțin numărul de serie al cardului și anumite alte date de producător și nu pot fi decât citiți.
RC522 (figura 2.4.1) este un modul RFID de citire/scriere a cardurilor MIFARE cu frecvența de 13,56 Mhz (frecvență intermediară), care folosește o tensiune scăzută astfel încât nu necesită o sursă de energie de mari dimensiuni. Se conectează cu Arduino Leonardo prin 5 pini care sunt: pini de comandă, citire, scriere, programare cât și de reset după citirea unei cartele, pentru a se putea reconfigura și astfel pregăti pentru recepționarea următoarei cartele.
Tag-urile folosite în cadrul acestui sistem sunt de tip MIFARE cu frecventa de 13,56 Mhz și au aspect de tip ceas de mână. Am folosit aceste tipuri deoarece sunt ușor de utilizat.
Figura 2.4.1. Cititor de carduri RFID MIFARE RC522
2.5. Senzorul telecomandă infraroșu brick
Este o diodă care detectează codurile emise de o telecomandă obișnuită în spectrul infraroșu. Are un consum redus de energie și un pachet ușor de utilizat, se împerechează cu electronice integrate și poate fi utilizat cu telecomenzi IR comune.
Acest senzor este un receptor miniaturizat pentru sistemele de control de la distanță în infraroșu. O diodă și un preamplificator sunt asamblate pe un cadru de plumb în timp ce pachetul de epoxi acționează ca un filtru IR.
Semnalul de ieșire demodulat poate fi decodat direct de un microprocesor. Senzorul este compatibil cu toate formatele comune de date IR control de la distanță. Senzorul are trei pini: doi pentru alimentare, iar unul pentru transmiterea semnalului.
Figura 2.5.1. Senzorul telecomandă infraroșu brick
Varianta brick spre deosebire de varianta clasică cu doar cei trei pini nu are nevoie de un rezistor care trebuie aplicat pe pinul de semnal pentru a reduce puterea semnalului care urmează a fi decodificat. O altă de deosebire este că are pe spate o diodă de protecție pentru cazul în care se inversează alimentarea.
În cadrul acestui proiect el este folosit pentru a decodifica semnalul transmis de o telecomandă cu 9 butoane, dar se poate folosi orice alt tip de telecomandă care poate transmite semnal în spectrul infraroșu. De asemenea se pot utiliza și ultimele modele de telefoane inteligente care sunt dotate cu acest senzor.
2.6. Senzor de puls
Senzorul de puls (figura 2.6.1) face măsurarea pulsului foarte simplu. Măsurarea pulsului poate fi un indicator foarte util pentru a determina stresul, relaxarea, afecțiuni medicale, ș.a.m.d. Aceste informații sunt ușor de asimilat folosind măsurare tactilă; se poate determina rata pulsului atingând arterele din încheietura mâinii sau gâtului. Senzorul de puls măsoară modificări subtile în lumina de extindere a vaselor de sânge capilar și de a simți bătăile inimii. Se așeză cu atenție senzorul de pe orice suprafață a pielii (cum ar fi un deget sau lobul urechii), și va transmite date, impulsuri la Arduino pentru prelucrare. Codul Arduino va permite să vizualizăm datele de impulsuri chiar pe computer. Este un mod simplu, non-invaziv, ieftin care include bio-feedback.
Acest senzor poate fi atașat și la detectoare de minciuni, dispozitivelor de relaxare, dispozitivelor de formare fitness, jocuri și orice alte aplicații care ar putea necesita elementul "uman". Include puncte Velcro, un clip care poate fi atașat la ureche, și 3 fire conectate direct +, -, și unul pentru transmiterea de date. Senzorul de puls amplificat este o versiune mult îmbunătățită a senzorului puls inițial. Această versiune include amplificare și anulează zgomotul circuitelor din hardware-ul, făcându-le mult mai fiabile. Este dotat cu microcontrolere compatibile 3.3 și 5V, oferind mai multă flexibilitate, iar software-ul de vizualizare de prelucrare și codul Arduino au fost raționalizate și îmbunătățite.
Figura 2.6.1. Senzor de puls
CAPITOLUL 3. PROGRAMAREA SISTEMULUI
Capitolul de față își propune să prezinte în detaliat modul de concepere și programare a sistemului propriu-zis începând cu programarea fiecărui dispozitiv atașat sistemului. Am ales această structură deoarece reprezintă ordinea și modul în care am lucrat, programând fiecare dispozitiv în parte și mai apoi introducerea în codul sursă final.
3.1. Programarea senzorului telecomandă infraroșu brick
Codul introdus pentru acest tip de senzor detectează frecvența transmisă de fiecare microcontact al telecomenzi pentru a putea defini ulterior o funcția pe care trebuie să o îndeplinească în mod particular frecvențele.
#include "IRremote.h"
int RECV_PIN = 0;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Pornire recever
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
irrecv.resume(); // Citește următoarea valoare
}
}
Funcționarea programului se bazează pe următoarele structuri:
În header s-a introdus librăria “IRremote.h” pentru a putea folosi funcțiile “decode_results;” (pentru a decoda semnalul trimis de la sensor), “irrecv.enableIRIn();” (pentru activa / a citi semnalul de la senzor)și “irrecv.resume();”(reinițializarea citirii următoarei valori de la telecomandă)
Semnalul transmis de senzor este citit de pinul analog A0 declarat în cod prin “int RECV_PIN = 0;”
În void setup s-a făcut o conexiune serial între datele primite de periferice în acest caz senzorul de telecomandă și transmiterea spre computer a datelor stocate de microcontroller într-un Serial Monitor pentru a putea citi astfel fiecare frecventă transmisă de telecomandă, “9600” reprezintă rata de transfer(viteza cu care se transmit biții)
În void loop este introdusă o rutină pe care microcontroller-ul o repetă la infinit și anume decodarea frecvenței în zecimale
Figura 3.1.1. Decodarea în zecimale a semnalului transmis de infraroșu
3.2. Programarea afișajului de tip LCD Alfanumeric 16×2
LCD-ul folosit la acest sistem nu este unul clasic, acesta fiind montat pe o platformă cu toți pinii așezați în același mod ca cei ai platformei Arduino, ceea ce ajută la o conectare mai simplă și mai puțin defectuoasă.
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 8, 7, 4);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Lulusa Daniel,");
lcd.setCursor(0, 1);
lcd.print("Proiect Licenta");
}
Figura 3.2.1. Afișaj prezentare proiect
Funcționarea programului se bazează pe următoarele structuri:
În header este introdusă librăria “LiquidCrystal.h” unde se pot apela mai multe funcții precum lcd.setCursor, lcd.print ș.a.m.d.
În „LiquidCrystal lcd(13, 12, 11, 8, 7, 4);” sunt pinii necesari pentru funcționarea optimă a LCD-ul astfel pinul digital 13 – RS LCD, pinul digital 12 – E LCD, pinul digital 11 – DB4 LCD, pinul digital 8 – DB5 LCD, pinul digital 7 – DB6 LCD, pinul digital 4 – DB7 LCD
La void setup s-a declarat rata de transfer “9600”, “lcd.begin(16, 2);” (reprezintă formatul LCD-ul 16×2: 16 caractere, 2 rânduri).
La void loop se definește ce să afișeze LCD-ul “lcd.setCursor”(setează unde să se afișeze textul, prima cifră reprezintă de la care caracter să înceapă afișarea pe orizontală, iar a doua cifră reprezintă pe care coloană să se afișeze textul).
3.3. Programarea cititorului de carduri RFID MIFARE RC522
În cadrul acestui sistem, cititorul RFID MIFARE RC522 este utilizat pentru a putea citi codul cartelelor, iar după aceea pe baza codului cartelei MIFARE îi este asociat un nume personal și CNP-ul care vor fi afișate pe LCD și astfel pulsul citit de senzorul de puls va fi asociat cu acestea pentru ca procesul să fie complet.
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 8, 7, 4);
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 1
RFID rfid(SS_PIN,RST_PIN);
int serNum[4];
int ics = 0;
void setup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
lcd.begin(16,2);
lcd.setCursor(2, 0);
lcd.print("RFID control");
lcd.setCursor(3, 1);
lcd.print("by Dani");
delay(2000);
}
void loop(){
if(rfid.isCard()){
ics = ics + 1;
if(rfid.readCardSerial()){
Serial.print("secventa ");
Serial.print(ics);
Serial.print(" si cod card = ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[3],DEC);
Serial.println("");
Serial.println("–––");
if ((rfid.serNum[0]==208) && (rfid.serNum[1]==93)
&& (rfid.serNum[2]==73) && (rfid.serNum[3]==181) )
{ Serial.println("Lulusa Daniel");
Serial.println("–––");
lcd.setCursor(0, 0);
lcd.print(" Lulusa Daniel");
lcd.setCursor(0, 1);
lcd.print("CNP1930511020072");
delay(5000);
lcd.clear(); }
if ((rfid.serNum[0]==179) && (rfid.serNum[1]==78)
&& (rfid.serNum[2]==219) && (rfid.serNum[3]==199))
{Serial.println("But Alina");
Serial.println("–––");
lcd.setCursor(0, 0);
lcd.print(" But Alina ");
lcd.setCursor(0, 1);
lcd.print("CNP2930329020072");
delay(5000);
lcd.clear();
}
}
Figura 3.3.1. Afișaj identificare date pacient
Funcționarea programului se bazează pe următoarele structuri:
În header sunt introduse patru biblioteci; “Wire.h” pentru a putea fi folosiți pinii “tată” ai platformei Arduino Leonardo care se contează cu cei ai modulului de citire a cartelelor: ICSP – 1 (Arduino) fiind cel care face legătura cu pinul MISO (RFID) pentru receptionarea prezenței cipului cartele; ICSP(Arduino) – 3 care asigură programarea unei cartele prin prinul SCK(RFID); ICSP – 4 (Arduino) fiind cel care face lagătura cu pinul MOSI(RFID) pentru transmitera frecvenței pe de la Arduino la RFID, biblioteca “LiquidCrystal.h” cea care face conexiunea atât hardware cât și software cu LCD-ul, “SPI.h”- este librăria care ajută la comunicare dintre “wire.h” și computer pentru a putea citi semnalul analogic transmis de la RFID într-unul digital și invers și biblioteca “RFID.h” pentru a putea fi folosite funcțiile specifice acestuia.
„LiquidCrystal lcd(13, 12, 11, 8, 7, 4);” este introdusă acestă funcție pentru a defini pinii digitali pe care îi folosește LCD-ul pentru transferul de informație de la microcontroller-ul platformei Arduino spre LCD
În continuare sunt definiți și ceilalți doi pini ai cititorului de carduri “SS_PIN 10”, pinul 10 Arduino care face calea de transmisie spre computer al codului cartelei și “ RST_PIN 1”, pinul 1 Arduino care resetează memoria cititorul și astfel este pregătit pentru a citi următorul card, RFID rfid(SS_PIN,RST_PIN)- sunt definiți cei doi pini aparținând modului de citire cartele, int serNum[4] – care reprezintă câți biți au cartelele sau pe câți biți să se facă conversia respectiv 4 , int ics = 0 – repezintă de cât se începe să se numeroteze cardurile,acestă funcție fiind necesară pentru a putea asocia fiecărui card funcții diferite
La void setup se deschide comunicarea serială pe o frecventă de 9600 de biți/secundă, totodată și deschiderea conversiei SPI pentru comunicarea analog-digital, pe lângă acestea în void setup se inițializează și comunicarea cu modulul de citire carduri, pe lângă acestea se mai configureză și modului LCD cu 16 caractere pe 2 rânduri.
La void loop în primul rând se a introduce funcția rfid.isCard care deschide comunicația cu Arduino atunci când prin fața cititorului de carduri se apropie un card, după care funcțiile Serial.print(rfid.serNum[0],DEC); Serial.print(r fid.serNum[1],DEC);Serial.print(rfid.serNum[2],DEC);Serial.print(rfid.serNum[3],DEC); care afișeză pe rând in Serial.Monitor cifrele fiecărui bit (în acest caz cardul are 4 biți), după ce a fost apropiat cardul în Serial.Monitor se afișeză: 208 93 73 181 – care reprezintă codul unic al cardul respectiv. Este nevoie de acestă funcție pentru a putea sți care este codul fiecărui card. Astfel în continuare se definește ce va afișa LCD pentru fiecare card împarte. Pentru cardul cu codul 208 93 73 181 s-a definit ca LCD-ul să afișeze “Lulușa Daniel” – pe primul rând al LCD-ului , iar pe al doilea “CNP1930511020072”, toate acestea sunt afișate prin funcțiile:if((rfid.serNum[0]==208)&&(rfid.serNum[1]==93)&&(rfid.serNum[2]==73)&&(rfid.serNum[3]==181)){lcd.setCursor(0,0); lcd.print(„Lulusa Daniel”); lcd.setCursor(0, 1); lcd.print(„CNP1930511020072”); delay(5000); lcd.clear(); astfel funcția delay(5000) reprezintă cât timp (exprimat în milisecunde) să rămână afișat ceea ce este definit, iar funcția lcd.clear()- se utilizează pentru a șterge afișajul astfel pregătindu-se să afișeze următoarele funcții, fiind necesară această funcție pentru a nu rămâne alte mesaje nedorite pe afișaj. Tot în acest mod se programează ce vă afișa LCD-ul și cu alte carduri. Cel de al doilea card introdus are codul: 179 78 219 199; căruia i s-a definit ceea ce va afișa exact ca și la primul card, doar diferența este că acesta afișează pe LCD textul : ”But Alina”- pe primul rând, iar pe al doilea “CNP2930329020072”
3.4. Programarea driver-ului de motoare L298
Driver-ul de motoare este o platformă dedicată pentru Arduino având aceiași pinii ca a platformei Arduino, singura deosebire este că care o alimentare separată și comandă motoare pe curent continuu, pe care platforma Arduino singură nu o poate face deoarece consumul de curent necesar pentru motoare este foarte mare și fără acest driver, Arduino s-ar defecta fiindcă nu este conceput pentru consum mare de curent.
#include "IRremote.h"
int M1A = 3;// Pinul 1 primul motor
int M1B = 5;// Pinul 2 primul motor
int M2A = 6;// Pinul 1 doilea motor
int M2B = 9;// Pinul 2 doilea motor
int RECV_PIN = 0;//Pin digital senzor ir
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Pornire receiver-ul IR
pinMode(M1A, OUTPUT);
pinMode(M1B, OUTPUT);
pinMode(M2A, OUTPUT);
pinMode(M2B, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);//Afisare valoarea fiecărui buton al telecomenzi
irrecv.resume(); // Primește următoare valoare a telecomenzi
}
if(results.value == 284139615)// Buton pentru înaite
{
analogWrite(M1A, 255);
analogWrite(M1B, 0);
analogWrite(M2A, 0);
analogWrite(M2B, 255);
}
else if(results.value == 284106975)//Buton pentru oprire
{
analogWrite(M1A, 0);
analogWrite(M1B, 0);
analogWrite(M2A, 0);
analogWrite(M2B, 0);
}
if(results.value == 284102895)//Buton pentu stânga
{
analogWrite(M1A, 0);
analogWrite(M1B, 0);
analogWrite(M2A, 0);
analogWrite(M2B, 255);
}
if(results.value == 284131455)//Buton pentu dreapta
{
analogWrite(M1A, 255);
analogWrite(M1B, 0);
analogWrite(M2A, 0);
analogWrite(M2B, 0);
}
if(results.value == 284098815)// Buton pentu spate
{
analogWrite(M1A, 0);
analogWrite(M1B, 255);
analogWrite(M2A, 255);
analogWrite(M2B, 0);
}
if(results.value == 284162055)// Buton intoarcere(A)
{
analogWrite(M1A, 255);
analogWrite(M1B, 0);
analogWrite(M2A, 255);
analogWrite(M2B, 0);
}
}
Funcționarea programului se bazează pe următoarele structuri:
În header este introdusă biblioteca “IRremote.h” pentru a putea folosi funcțiile introduse în această bibliotecă care să facă legătura dintre senzorul de citire a telecomenzi, astfel știind codului fiecărui buton se poată defini ce va face fiecare.
S-au introdus variabile pentru a putea fi mai ușor de definit funcția fiecăruia. M1A – reprezintă pinul 1 de conectare a primului motor și este comandat de către platforma Arduino prin pinul digital 3; M1B – reprezintă pinul 2 de conectare a primului motor și aceste este comandat de platforma Arduino prin pinul digital 5; M2A – reprezintă pinul 1 de conectare la al doilea motor și este comandat de către platforma Arduino prin pinul digital 6; M2B – reprezintă pinul 2 de conectare la al doilea motor și este comandat de către platforma Arduino prin pinul digital 9. Este cu totul necesar și obligatoriu ca fiecare pin al driverului de motoare se fie un pin digital PWM, pentru a putea transmite la bornele sale tensiuni oscilatorii pentru a crește sau a descrește puterea transmisă pe motoare(turația motoarelor) .
Este introdusă și variabila RECV_PIN care reprezintă pinul de transmisie de la senzorul de citire a telecomenzi. Se adaugă și funcția decode_results results; pentru a putea converti semnalul transmis de senzor.
În rutina void setup se introduce funcția Serial.begin(9600) care deschide portul de comunicare cu PC-ul pentru a putea afișa în Serial Monitor codul fiecărui buton al telecomenzi ce urmează a fi definit.
Se mai introduce și funcția irrecv.enableIRIn care ajută de deschiderea receveru-lui IR de fiecare dată când platforma Arduino este alimentată
Se declară după aceea pinii motoarelor ca fiind pinii de ieșire(care transmit tensiune la capetele bornelor): pinMode(M1A, OUTPUT); pinMode(M1B, OUTPUT); pinMode(M2A, OUTPUT); pinMode(M2B, OUTPUT);
În rutina void loop se definește în primul rând ca atunci când senzorul primește un semnal transmis în spectrul IR, acesta să îl decodeze în zecimale și să îl afișeze în Serial Monitor , dar și funcția irrecv.resume(); care după ce a primit un semnal să reinițializeze senzorul pregătindu-l pentru a citi următoarea valoare.
Pentru semnalul transmis de telecomandă și decodat în zecimale ca: 284139615; sistemul se va deplasa înainte utilizând funcțiile: analogWrite(M1A, 255); analogWrite(M1B, 0); analogWrite(M2A, 0); analogWrite(M2B, 255); ceea ce însemnară ca pe pinul 1 al primului motor și pinul 2 la al doilea motor se va transmite o tensiune maximă de + 5 V, ceilalți doi pinii fiind – (minus)
Tot astfel pentru semnalul transmis de telecomandă și decodat în zecimale ca: 284106975; sistemul se va opri ceea ca însemnă că la capetele fiecărui pin al driverului de motoare tensiunea va fi 0 V.
Pentru semnalul transmis de telecomandă și decodat în zecimale ca: 284102895; sistemul se va deplasa spre stânga, singura deosebire față de deplasarea înainte este faptul ca primul pin al primului motor va fi nul adică va avea 0 V.
Pentru semnalul transmis de telecomandă și decodat în zecimale ca: 284131455; sistemul se va deplasa spre dreapta, fiind exact invers ca la deplasarea spre stânga ceea ce însemnă că pinul 2 de la motorul 2 va avea 0 V, iar primul pin al primului motor va avea tensiune maximă (5V).
Pentru semnalul transmis de telecomandă și decodat în zecimale ca: 284098815; sistemul se va deplasa cu spatele, ceea ce reprezintă inversul deplasării înainte adică: pinul al doilea din primul motor și primul pin din al doilea motor au tensiune maximă(5V) pe când ceilalți doi pini respectiv primul pin de pe primul motor și al doilea pin de pe al doilea motor au tensiunea 0V.
Pentru semnalul transmis de telecomandă și decodat în zecimale ca: 284162055; sistemul se va întoarce de la stânga spre dreapta, iar funcțiile pentru acesta sunt: analogWrite(M1A, 255); analogWrite(M1B, 0); analogWrite(M2A, 255); analogWrite(M2B, 0); ceea ce reprezintă ca primul prin de pe primul motor și primul prin de pe al doilea motor vor avea tensiune maximă (5V), iar pinul al doilea de pe primul motor și pinul a doilea de pe al doilea motor sunt nuli(0V).
3.5. Programarea senzorului de puls
Senzorul de puls este un ansamblu de circuite electronice care funcționează împreună pentru a reda cât mai exact pulsul transmis prin contact direct cu suprafața pielii.
Principiul de funcționare se bazează pe un senzor care poate citi impulsurile, iar pentru ca impulsurile să fie mai exacte s-a montat un led astfel încât reflexia lumini pe suprafața pielii să poată fi citită mai exact de către senzor.
Acest senzor are în compoziție 3 terminații(conductori) fiecare cu un pin „tată” pentru conexiunea cu platforma Arduino Leonardo, unul prin pozitiv care este alimentat direct din platforma Arduino prin pinul 5V, altul negative conectându-se cu pinul GND de la Arduino și unul prin care se transmite semnalul, care se conectează tot cu Arduino pentr-unul din pinii analogici ci nu digitali ca și în cazul altor senzori deoarece semnalul transmis este fix și poate fi citi mult mai bine prin pinii analogici.
Pentru o mai bună citire a pulsului și pentru a anula eventualele erori de citire datorită nerespectării factorilor esențiali se recomandă folosirea acestui dispozitiv împreună cu o serie de electrozi care pe aplică pe direct pe suprafața pielii cât mai aproape de inimă.
#include <LiquidCrystal.h>
#include <IRremote.h>
LiquidCrystal lcd(13, 12, 11, 8, 7, 4);
int RECV_PIN = 0;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
irrecv.enableIRIn();
void loop() {
if (irrecv.decode(&results))
{
Serial.println(results.value, DEC);
irrecv.resume();
int senzorPuls = analogRead(A1);
Serial.print(senzorPuls);
Serial.print(results.value, DEC);
int rezultatPuls = ((senzorPuls)/6);
delay(senzorPuls);
if(results.value == 284153895)
{
lcd.setCursor(0, 0);
lcd.print(" Pulsul dvs. ");
lcd.setCursor(0, 1);
lcd.print("este de …. ");
lcd.print(rezultatPuls);
delay(5000);
}
}
Funcționarea programului se bazează pe următoarele structuri:
În header este introdusă biblioteca LiquidCrystal pentru a putea folosi funcțiile LCD-ului. Tot în header este introdusă și biblioteca IRremote pentru a putea folosi funcțiile de citire a informațiilor transmise din telecomandă, iar după aceea a defini aceste informații.
După care se definește care sunt pinii digitali folosiți pentru definirea LCD-ului și anume 13,12,11,8,7,4.
Se definește și pinul digital care urmează a fi folosit de senzorul care citește frecvența transmisă de telecomandă și anume pinul digital 0. Tot aici se pune și funcția de decodare a semnalului transmis.
La void setup se definește în primul rând comunicare serială de la platforma Arduino la portul USB de la PC, dar și rata de transfer adică 9600 de biți pe secundă. Tot la secțiunea void setup se definește și formatul LCD-ului (16×2), dar și deschiderea portului de comunicare dintre Arduino și senzorul de citire a informațiilor transmise de telecomandă.
În secțiunea void loop se definește funcția: ca atunci când senzorul de citire a informațiilor transmise din telecomandă, recepționează un semnal, acesta să fie decodat și afișat în Serial Monitor în zecimale.
Se introduce funcția irrecv.resume care atunci când este recepționat un semnal și afișat, senzorul să revină la setările inițiale pregătindu-se astfel pentru recepționarea următorului semnal primit.
Se definește senzorul de puls ca fiind un senzor de intrare prin funcția analogRead și pe care pin analogic se conectează în acest caz pinul A1, dar și definește conversia în zecimale, după care se afișează în Serial Monitor rezultatul.
După care se introduce rezultat puls pentru ca rezultatul pe care senzorul îl afișează să se împartă la 6 pentru a putea afișa pulsul pe minut.
În continuare se introduce condiția ca atunci când senzorul care citește telecomanda primește o valoare și anume : 284153895 – care reprezintă o tastă anume de pe telecomandă, pe LCD se va afișa: pe primul rând al display-ului “Pulsul dvs.” , iar pe al doilea rând “este de …”; după care se va afișa pulsul citit și recalculat.
În final este introdus un delay pentru ca rezultatul pulsului să poată face între 3 și 5 citiri, iar rezultatul afișat să fie unul fix fără oscilațiile aferente.
3.6 Crearea unei pagini Web pentru monitorizare
Crearea paginii Web a fost realizată în scopul monitorizării datelor corespunzătoare pacienților care sunt înregistrați cu ajutorul sistemului de măsurare a activității vitale. Datorită faptului că platforma Arduino Leonardo nu este dotată cu suficienți pini pentru conectarea unui modul de transmisie wifi sau modul de rețea, transmisia datelor de pe sistem pe website nu poate avea loc, dar acest prototip poate fi actualizat prin înlocuirea platformei Arduino cu o versiune mai generoasă din punct de vedere hardware cum ar fi Arduino Mega sau Adruino Due.
3.6.1 Descrierea pagini web
Pagina Web este alcătuită din trei meniuri principale, și anume: Acasă, Căutare și Contact. Există două tipuri de utilizatori ai pagini Web: administratorul și utilizatorii obișnuiți care sunt de fapt pacienții.
Administratorul este utilizatorul principal care poate realiza operații asupra utilizatorilor obișnuiți cât și a informațiilor despre el însuși. Deci, administratorul poate să adauge, să șteargă, să actualizeze informațiile despre pacienți sau să vizualizeze informații despre pacienții.
Figura 3.6.1.1 Pagină întâmpinare
Pacientul are posibilitatea de a accesa informațiile despre el introducând în câmpul corespunzător CNP-ul. Pentru a accesa detaliile de contact ce sunt disponibile se va utiliza meniul “contact”. În cadrul acestei pagini este se mai găsește un javascript google.maps care afișează coordonatele geografice ale locației laboratorului numit „Cardiology Laboratory”.
Figura 3.6.1.2. Pagina de contact
Tehnologiile folosite pentru crearea paginii web sunt: PHP, HTML5, CSS, Javascript, MySQL.
PHP este un limbaj de programare web server-side, ceea ce înseamnă că rulează pe un server, permițând dezvoltatorului web să creeze site-uri dinamice și aplicații web-based software ce interacționează cu utilizatorii și baze de date. În utilizarea acestui limbaj cel mai comun și mai des folosit server este Serverul Apache.
Pentru stocarea datelor în baze de date se folosește MySQL care este cel mai des utilizat server de baze de date open source. Se caracterizează prin flexibilitate, stabilitate, fiabilitate și viteza în prelucrarea datelor stocate. MySQL folosește Structured Query Language (SQL), limbajul cel mai frecvent folosit pentru adăugarea, accesarea și prelucrarea datelor în bazele de date.
Cascading Style Sheets (CSS) este un limbaj „style sheet” folosit pentru a descrie aspectul și formatarea unui document scris intr-un limbaj markup. Aplicarea sa cea mai comună este în paginile web scrise în HTML și XHTML, însa poate fi aplicat la orice tip de document XML.
JavaScript este un limbaj de programare creat de Netscape, servește la dezvoltarea aplicațiilor web și de cele mai multe ori rulează ca o aplicatie client-side care rulează într-un browser web. Dezvoltatorii web utilizează JavaScript în site-uri și aplicații web pentru a efectua sarcini suplimentare pe care limbajul HTML nu le poate efectua. De exemplu poate efectua meniuri interactive sau poate detecta intrările de la tastatura a utilizatorilor. Și pentru că este un limbaj client-side, funcțiile JavaScript și calculele se executa repede, deoarece informațiile nu trebuie să navigheze pe Internet.
Limbajul PHP a fost utilizat pentru a interoga baza de date obținându-se astfel datele specifice. De exemplul, informațiile despre pacienți sunt culese din baza de date cu ajutorul funcției de mai jos:
<? php
session_start();
if(isset($_SESSION['username'])
{
$username = $_SESSION['username'];
}
else
{
$username="";
header("Location: index2.php");
}
if(isset($_GET["NumeP"]) && isset($_GET["PrenumeP"]) && isset($_GET["cnpP"])&& isset($_GET["pulsP"])&& isset($_GET["codT"])&& isset($_GET["dataP"]))
{
if($_GET["NumeP"] && $_GET["PrenumeP"] && $_GET["cnpP"] && $_GET ["pulsP"] && $_GET ["codT"] && $_GET ["dataP"])
{
$servername="localhost";
$conn= mysql_connect($servername,"root")or die(mysql_error());
mysql_select_db("cardiology",$conn);
$sql="INSERT INTO `pacient` (`NumeP`,`PrenumeP`,`cnpP`,`pulsP`,`codT`,`dataP`)
VALUES('$_GET[NumeP]','$_GET[PrenumeP]','$_GET[cnpP]','$_GET[pulsP]','$_GET[codT]','$_GET[dataP]')";
$result=mysql_query($sql,$conn) or die(mysql_error());
$status=0;
}
else { $status=1;}
}
?>
3.6.2 Implementarea bazei de date
În cadrul acestui proiect a fost implementată o bază de date pentru a putea înregistra pacienții, dar și pentru a putea fi gestionată pagina web atât de către un administrator care reprezintă medicul, cât și de un utilizatori care sunt pacienții.
Baza de date este compusă din trei tabele:
Tabela user unde sunt introduse două coloane. username – aici se înregistrează numele conturilor care urmează a fi înregistrate și utilizate; password – unde se introduce parola pentru fiecare cont în parte. Cele două coloane sunt de tip varchar și suportă 12 caractere, dar nu pot fi nule.
Figura 3.6.2.1 Tabela User
Tabela inregistraridata unde sunt introduse două coloane. data – unde se introduce data la care a fost actualizată starea de sănătate a pacienților, acesta este de tip date pentru a putea introduce data; cnpP – aici se introduce CNP-ul pacientul care urmează ai fi actualizată activitatea vitală, această coloană este de tip varchar și de 15 caractere.
Figura 3.6.2.2 Tabela inregistraridata
Tabela pacient unde sunt introduse șase coloane. NumeP – pentru a introduce numele pacienților, acesta este de tip varchar și suportă 12 caractere; PrenumeP – creat pentru a introduce prenumele pacienților, fiind de tip varchar și suportă 12 caractere; cnpP – unde se introduce CNP-ul pacienților, care este de tip varchar, cu 14 caractere; pulsP – pentru a introduce pulsul pacientului, este de tip varchar cu 12 caractere; codT – unde se introduce codul pacientului de pe cipul din brățară, este de tip varchar cu 20 de caractere; dataP – unde se introduce data înregistrării pacientului, acesta este de tip date.
Figura 3.6.2.3 Tabela pacient
La crearea bazei de date am folosit constrângerea FOREIGN KEY. O cheie străină dintr-o tabelă pointează la o cheie primară din altă tabelă, așadar, coloana cnpP din tabela Pacient pointează la coloana cnpP din tabela inregistraridata. Coloana cnpP din tabela inregistraridata este FOREIGN KEY, iar in tabela Pacient tot acest câmp este de tip PRIMARY KEY.
Constrângerea de tip FOREIGN KEY este folosită pentru a preveni acțiuni care ar distruge legăturile dintre cele două tabele. De asemenea împiedică introducerea de date invalide ce nu se regăsesc în cheia primară.
Sintaxă – MySQL:
CREATE TABLE inregistraridata
(
cnpP varchar(15) NOT NULL,
data date NOT NULL,
PRIMARY KEY (cnpP),
FOREIGN KEY (cnpP) REFERENCES Pacient(cnpP)
) ;
Constrângerea PRIMARY KEY are rolul de a identifica în mod unic fiecare înregistrare din tabela. Cheia primară trebuie să conțină valori unice și nu poate să conțină valoarea NULL. Fiecare tabela trebuie să aibă o cheie primara și numai una.
Sintaxă – MySQL:
CREATE TABLE pacient
(
numeP varchar(15),
prenumeP varchar(15),
cnpP varchar(14),
pulsP varchar(12),
codT varchar(20),
dataP date,
PRIMARY KEY (cnpP)
);
CAPITOLUL 4. POSIBILE DEZVOLTĂRI ULTERIOARE
ALE SISTEMULUI
Ca extindere a acestui sistem există o serie largă de platforme, senzori, dispozitive care se pot adăuga pentru a îmbunătăți performanțele, a modifica, structura sau a adăuga alte funcții, de care aș fi avut nevoie pentru elaborarea unui sistem complet. Fiind un prototip experimental, este insuficient din punct de vedere hardware. În acest capitol sunt detaliate câteva dispozitive care pot fi introduse sau înlocuite.
4.1. Platforma de dezvoltare Arduino Mega
Arduino Mega (figura 4.1.1) este o platformă de dezvoltare care a apărut după Arduino Leoardo, doar că prima platformă este limitat datorită pinilor insuficienți pentru o dezvoltare mai amplă. Arduino Mega are în construcție 54 de pinii digitali fața de cei 14 a lui Arduino Leonardo, din care 16 pot fi folosiți ca pini PWM care pot transmite la terminalele sale oscilații de tensiune între 0V și 5V, benefice pentru controlul exact atât pentru dispozitive mecanice cât și pentru control fix al senzorilor care acceptă tensiune. Arduino Mega are 16 pini de intrare analogică, fiecare oferă 10 biți de rezoluție(1024 valori diferite). În mod implicit măsoară de la 0 V până la 5 V deși este posibil să se modifice pragul superior folosind pinul AREF împreună cu funcția analogReference().
Pe partea de comunicare Arduino Mega are un număr de facilități pentru comunicarea cu PC-ul decât orice altă platformă Arduino. Microcontroller-ul ATMega 1280 oferă pentru tipuri de comunicare serială. Un FTDI FT232RL pe canalele platformei o cumunicare ce depăsește comunicare USB, oferă un port com vitual al software-ului pe PC. ATMega 1280 sprijină de asemenea I2C(DST)și comunicarea SPI. Software-ul Ardunio include o bibliotecă wire pentru a simplifica utilizarea driverului I2C.
În ATMega 1280 pe Arduino Mega este preprogramat cu un bootloader care va permite să se încarce un cod nou fără a fi nevoie de un programator hardware extern. Această comunicație se desfășoară utilizând protocolul STK500. Arduino Mega este conceput și pentru a permite resetarea prin software-ul care rulează pe PC-ul conectat, una dintre liniile de control al fluxului hardware(DTR) al FT232RL este conectat la linia de resetare a microcontroller-ului ATMega 1280 printr-ul condensator de 100 de nanofarazi. Când această linie scade(rata de transfer a datelor este nulă), linia de resetare la rândul ei scade suficient de mult pentru a putea reseta microcontroller-ul. Software-ul Arduino utilizează această capacitate pentru a permite încărcarea codului prin simpla apăsare a butonul de încărcare din mediul Arduino. Acest lucru însemnă că bootloader-ul poate avea un timeout mai scurt, pentru ca scăderea de DTR să poată fi bine coordonată cu începerea încărcării.
Arduino Mega are un polyfuse resetabil care protejează porturile USB ale PC-ului de scurt circuit și supracurent. Deși cele mai multe computere asigură propria lor protecție internă, siguranța oferă un start suplimentar de protecție. Dacă este aplicată o putere mai mare de 500 mA de la unul dintre porturile USB, siguranța va întrerupe în mod automat conexiunea până scurt circuitul sau suprasarcina va fi eliminată.
Figura 4.1.1. Platforma de dezvoltare Arduino MEGA
4.2. Bluetooth Mate
Modemul Bluetooth (figura 4.2.1) este simplu de utilizat (pur și simplu datele scrise pe pinii RX/TX sunt disponibili la receptor) din acest punct de vedere putem considera că și cum pinii RX/TX sunt conectați prin fire obișnuite între emițător și receptor.
Modemul dispune de un modul de clasa 2 RN-42, simplu de utilizat și cu documentație excelentă. Modemul are regulatoare de tensiune pe platformă, astfel încât poate fi alimentat între 5V și 6 V. Bluetooth Mate este o miniplatformă ce se poate conecta împreună cu driver-ul de motoare, dar și pe platforma Arduino. Din construcție, chip-ul Bluetooth are rata de transfer configurată la 115.200.
Conexiuni hardware ale modului bluetooth:
Bluetooth CTS-I – nu se conectează
Bluetooth VCC – Arduino 5V
Bluetooth GND – Arduino GND
Bluetooth TX-O – Arduino Digital 0
Bluetooth RX-I – Arduino Digital 1
Bluetooth RTS-O – nu se conectează
Figura 4.2.1 Modul Bluetooth
Cu modul bluetooth se poate teleghida tot sistemul de la o distantă de maxim 100 de metri prin orice dispozitiv care se conectează prin bluetooth. Pentru a se face conexiunea dintre acesta și orice alt dispozitiv este necesar ca pe dispozitiv-ul respectiv să fie instalat un software care să poată comunica cu modul. Exista software-uri implementate pentru fiecare dispozitiv în parte, dar se poate și crea unul în software-ul Arduino după care trebuie convertit pentru sistemul de operare pe care urmează a fi instalat.
4.3. Platforma Arduino WIFI
Platforma Arduino WiFi (figura 4.3.1) permite o platformă Arduino care se conecteze la internet folosind specificațiile fără fir 802.11 ( WiFi ). Ea se bazează pe HDG204 802.11b / g cu un pachet Wireless LAN. Un microcontroller AT32UC3 oferă o rețea (IP) stack capabil atât TCP și UDP.
Folosind biblioteca WiFi pentru a scrie schițe care se conectează la internet folosind shield-ul. WiFi shield se conectează la o platformă Arduino folosind headere fire printate lungi care se extind prin tot shield-ul. WiFi Shield se poate conecta la rețele fără fir care funcționează în conformitate cu specificațiile 802.11b și 802.11g. Arduino WIFI este dotată cu un slot pentru card micro-SD bord, care poate fi folosit pentru a stoca fișiere care urmează a fi transmise în rețea. Este compatibilă cu oricare platformă Arduino. Mini-platforma cititorului de card microSD este accesibilă prin intermediul biblioteci SD din software-ul Arduino. Atunci când se lucrează cu această bibliotecă, prin SS al platformei Arduino WIFI trebuie conectat cu pinul 4 al platformei principale. Arduino comunică cu procesor și SD card de atât cu Shied-ul Wifi folosind driver-ul SPI (prin antetul ICSP).
Figure 4.3.1. Platforma Arduino WIFI
Platforma conține un număr de informare LED-uri :
L9 (galben): acest lucru este legat de pinul de date digitale (pinul 9)
LINK (verde): indică o conexiune la o rețea
EROARE (roșu): indică atunci când există o eroare de comunicare
DATA (albastru): indică datele transmise / primite
Această platformă este benefică pentru transmiterea de date spre un server unde urmează a fi stocate și folosite pentru a le putea prelucra, în același timp are si un slot de carduri microSD unde sunt stocate datele temporar care urmează a fi trimise, dar și în cazul în care nu există comunicare.
În același timp este și mult mai benefică decât Arduino Ethernet căruia îi este necesar o conexiune directă la internet(prin cablu) și care nu are în construcție modului microSD care nu îi permite stocarea de date, în acest caz dacă conexiunea la internet nu este stabilă datele care trebuie transmise se pierd. O altă funcție al acestei platforme este că se poate folosi ca un server unde se pot transmite date, care urmează a fi stocate pe cardul microSD, putând fi accesat prin wifi de orice dispozitiv cu funcția wifi.
CONCLUZII
Obiectivele propuse în cazul acestui proiect au fost în cea mai mare parte îndeplinite. În speță obiectivele referitoare utilitatea sistemului se în cadrează în tendințele actuale de pe piața tehnologiilor hardware și software: oferirea unui suport informațional și tehnic, îmbunătățind sistemul medical, dar nu numai. De asemenea un obiectiv prioritar a fost dezvoltarea funcției de deplasare, ajutând astfel simplificarea activității medicilor.
Materialul prezentat și dezvoltat sub atenta coordonare și îndrumare a profesorului meu coordonator și-a propus abordarea aspectelor ce se manifestă în prezent în domeniul medical, urmărind fluidizarea activității medicale, în condițiile în care în România există nu deficit de personal medical în raport cu numărul mare de pacienți.
Partea aplicativă a lucrării constă în sistemul inovator, modern în raport cu tendințele actuale, îmbinând domeniul informatic cu cel medical. Pe fondul acestor tendințe se pot dezvolta ulterior o gama variată de sisteme care au la bază tehnologii avansate de inteligență artificială care au o mare utilitate în îmbunătățirea și dezvoltarea activității din domeniul medical și nu numai. Dezvoltarea tehnologică reprezintă un scop fundamental în munca de zi cu zi a unui medic, care își propune să înlesnească munca acestuia, în condițiile în care acesta se confruntă zi de zi cu necesitatea monitorizării unui număr tot mai mare de pacienți, de asemenea se dorește ca aceste tehnologii să fie cât mai la îndemâna pacienților și ușor de utilizat, aceștia având posibilitatea să își urmărească ei înșiși capacitatea vitală având un control strict asupra stării de sănătate personale.
Tehnologia informației găsește aplicare pe multiple domenii legate de date și informații, cum ar fi: procesoare, calculatoare, hardware și software, limbaje de programare, structuri de date și altele. Sunt considerate ca făcând parte din largul domeniu IT toate elementele care prelucrează, într-un fel sau altul, date, informații sau cunoștințe.
Toate cele prezentate duc la concluzia că informatica este un domeniu vast, cu aplicabilitate în foarte multe domenii ale științei, în continuă dezvoltare și transformare, contribuind la dezvoltarea societății umane și a calității vieții
BIBLIOGRAFIE
Jonathan Oxer, Hugh Blemings – “Practical Arduino Cool Projects for Open Source Hardware”, Ed. Apress, București , 2014
John Bohall – “Arduino Workshop”, Ed. Tekpess , București, 2014
Radu-Nicolae Pietraru, Alexandru Ștefan Velicu –“ Elemente practice de bază în dezvoltarea sistemelor cu microprocesoare integrate utilizând Arduino Uno” Ed. Techno Media, Sibiu, 2014
Radu-Nicolae Pietraru, Alexandru Ștefan Velicu – “Ardunio pentru începători”, Ed. Techno Media, Sibiu, 2013
*** – Site-ul oficial Robofun – http://www.robofun.ro/, consultat la data 10.11.2014
*** – Site-ul oficial Arduino – http://www.arduino.cc/ consultat la data 12.11.2014
*** – Site-ul oficial Wikipedia, articolul Ardunio – http://ro.wikipedia.org/wiki/ Arduino, consultat la data 05.12.2014
*** – Site-ul oficial Wikipedia, articolul C++ – http://ro.wikipedia.org/wiki/C% 2B%2B, consultat la data 21.11.2014
*** – Site-ul oficial Sparkfun – https://www.sparkfun.com, consultat la data 10.12.2014
*** – Site-ul oficial Github – https://github.com/miguelbalboa/rfid, consultat la data 17.01.2015
*** – Site-ul oficial Olimex – https://www.olimex.com, consultat la data 05.02.2015
*** – Site-ul oficial Robofun Forum – http://www.robofun.ro/forum/, consultat la data 13.01.2014viewtopic.php?f=16&t=493, consultat la data 08.02.2015
*** – Site-ul oficial Arduino Articolul WifiShield – http://www.arduino.cc/en/Main/ ArduinoWiFiShield, consultat la data 10.02.2015
*** – Site-ul oficial Arduino Articolul Arduino Board – http://www.arduino.cc/en /Main/ArduinoBoardMega2560, consultat la data 15.02.2015
*** – Site-ul oficial Sparkfun Articolul Bluetooth Basic- https://learn.sparkfun. com/tutorials/bluetooth-basics, consultat la data 20.02.2015
*** – Site-ul oficial Robofun Docs – http://www.robofun.ro/docs/RC1602B-BIW-CSX.pdf, consultat la data 22.02.2014
*** – Site-ul oficial Rollsoft – http://www.rollsoft.ro, consultat la data de 23.02.2015
*** – Site-ul oficial Pololu – https://www.pololu.com/, consultat la data 25.02.2015
*** – Site-ul oficial Ixedo – http://www.ixedo.ro/, consultat la data 03.03.2015
*** – Site-ul oficial Adafruit – https://learn.adafruit.com, consultat la data 08.03.2015
*** – Site-ul oficial UMFC – http://www.umfcv.ro/files/0/1/01_Informatica%20 medicala%20-%20Introducere.pdf, consultat la data 11.03.2015
*** – Site-ul oficial ITTrends Articolul Informatică medicală perspective europene – http://ittrends.ro/2013/09/informatica-medicala-perspective-europene/, consultat la data 15.03.2015
*** – Site-ul oficial Webhost – http://webhost.uoradea.ro/horos/files/BD1%20SQL%20 web.pdf, consultat la data 20.03.2015
BIBLIOGRAFIE
Jonathan Oxer, Hugh Blemings – “Practical Arduino Cool Projects for Open Source Hardware”, Ed. Apress, București , 2014
John Bohall – “Arduino Workshop”, Ed. Tekpess , București, 2014
Radu-Nicolae Pietraru, Alexandru Ștefan Velicu –“ Elemente practice de bază în dezvoltarea sistemelor cu microprocesoare integrate utilizând Arduino Uno” Ed. Techno Media, Sibiu, 2014
Radu-Nicolae Pietraru, Alexandru Ștefan Velicu – “Ardunio pentru începători”, Ed. Techno Media, Sibiu, 2013
*** – Site-ul oficial Robofun – http://www.robofun.ro/, consultat la data 10.11.2014
*** – Site-ul oficial Arduino – http://www.arduino.cc/ consultat la data 12.11.2014
*** – Site-ul oficial Wikipedia, articolul Ardunio – http://ro.wikipedia.org/wiki/ Arduino, consultat la data 05.12.2014
*** – Site-ul oficial Wikipedia, articolul C++ – http://ro.wikipedia.org/wiki/C% 2B%2B, consultat la data 21.11.2014
*** – Site-ul oficial Sparkfun – https://www.sparkfun.com, consultat la data 10.12.2014
*** – Site-ul oficial Github – https://github.com/miguelbalboa/rfid, consultat la data 17.01.2015
*** – Site-ul oficial Olimex – https://www.olimex.com, consultat la data 05.02.2015
*** – Site-ul oficial Robofun Forum – http://www.robofun.ro/forum/, consultat la data 13.01.2014viewtopic.php?f=16&t=493, consultat la data 08.02.2015
*** – Site-ul oficial Arduino Articolul WifiShield – http://www.arduino.cc/en/Main/ ArduinoWiFiShield, consultat la data 10.02.2015
*** – Site-ul oficial Arduino Articolul Arduino Board – http://www.arduino.cc/en /Main/ArduinoBoardMega2560, consultat la data 15.02.2015
*** – Site-ul oficial Sparkfun Articolul Bluetooth Basic- https://learn.sparkfun. com/tutorials/bluetooth-basics, consultat la data 20.02.2015
*** – Site-ul oficial Robofun Docs – http://www.robofun.ro/docs/RC1602B-BIW-CSX.pdf, consultat la data 22.02.2014
*** – Site-ul oficial Rollsoft – http://www.rollsoft.ro, consultat la data de 23.02.2015
*** – Site-ul oficial Pololu – https://www.pololu.com/, consultat la data 25.02.2015
*** – Site-ul oficial Ixedo – http://www.ixedo.ro/, consultat la data 03.03.2015
*** – Site-ul oficial Adafruit – https://learn.adafruit.com, consultat la data 08.03.2015
*** – Site-ul oficial UMFC – http://www.umfcv.ro/files/0/1/01_Informatica%20 medicala%20-%20Introducere.pdf, consultat la data 11.03.2015
*** – Site-ul oficial ITTrends Articolul Informatică medicală perspective europene – http://ittrends.ro/2013/09/informatica-medicala-perspective-europene/, consultat la data 15.03.2015
*** – Site-ul oficial Webhost – http://webhost.uoradea.ro/horos/files/BD1%20SQL%20 web.pdf, consultat la data 20.03.2015
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: Sistem Teleghidat DE Masurare Si Afisare A Activitatii Vitale (ID: 163577)
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.
