Sistem de Monitorizare a Pasagerilor Si Apelul Serviciilor de Urgenta In Caz de Accident

LUCRARE DE LICENȚĂ

Sistem de monitorizare a pasagerilor și apelul serviciilor de urgență în caz de accident

Coordonator științific:

S.l. dr. ing. Ștefan Gabriel Șoriga

Absolvent:

Barbu Ioan

București

2015

Cuprins

Lista de figuri 5

Lista de tabele 6

Lista de termeni și abrevieri 7

Memoriu justificativ 8

1. Sisteme automate de apelare a serviciului de urgență 9

1.1. Obiectivele lucrării 9

1.2. Limitările sistemului propus 10

1.3. Sisteme inteligente de transport 11

1.4. Sistemul e-Call 15

1.4.1. Cum funcționează sistemul e-Call 15

1.4.2. Accidentele rutiere – cum poate ajuta serviciul e-Call 16

2. Dispozitive electronice folosite 17

2.1. Dispozitiv de scanare a amprentei 17

2.2. Dispozitiv de transmisie Bluetooth 18

2.3. Microcontroler-ul ATMEGA328P 20

2.3.1. Dispunerea și descrierea pinilor 22

2.4. Interfața de comandă a simulatorului 24

2.5. Senzorul capacitiv 25

2.5.1. Principiu de funcționare 25

3. Protocoale de transmisie folosite 27

3.1. Bluetooth 27

3.1.1. Defințtiile termenilor utilizați in Bluetooth 28

3.1.2. Tipurile de legături Bluetooth 29

3.1.3. Topologia rețelei Bluetooth 30

3.2. UART 30

3.2.1. Detecția erorilor de paritate 32

3.3. I2C 33

4. Tehnologii software folosite 34

4.1. Python 34

4.1.1. Execuția programelor Python 34

4.1.2. Particularități de sintaxă 36

4.2. MySQL 37

4.3. PHP 38

4.3.1. PHP 5 40

4.3.2. PHP 6 41

4.3.3. Tipuri de date interne 42

4.3.4. Variabile globale 43

4.3.5. Variabilele pentru trimiterea datelor 45

4.4. HTML 45

4.5. CSS 47

5. Proiectarea simulatorului 50

5.1. Schema bloc a intregului sistem 50

5.2. Subsistemul de simulare ECU 51

5.3. Subsistemul de scanare amprenta 54

5.4. Achiziție si procesare date 56

5.5. Adăugare și preluare din baza de date 58

6. Fiabilitatea simulatorului proiectat 62

6.1. Definire indicatori de fiabilitate 62

6.1.1. Modelul matematic al fiabilității 62

6.2. Indicatorii statistici și indicatorii probabilistici ai fiabilității echipamentelor 64

6.3. Calcul de fiabilitate 66

6.4. Pret estimativ al realizarii practice 68

7. Bibliografie 69

Lista de figuri

Tabel 1-1 Tipuri de sisteme ITS 12

Tabel 2-1 Cod arduino blink 23

Tabel 3-1 Clase bluetooth 28

Tabel 4-1 import 35

Tabel 4-2 argumente 35

Tabel 4-3 suma numere 36

Tabel 4-4 eroare indentare 37

Tabel 4-5 comment 37

Tabel 4-6 versiuni HTML 47

Tabel 4-7 exemplu HTML 47

Tabel 4-8 exemplu CSS3 49

Tabel 5-1 Cod senzor capacitiv 52

Tabel 5-2 Cod digital read 53

Tabel 5-3 Cod transmitere I2C 53

Tabel 5-4 Cod primire I2C 55

Tabel 5-5 Cod scanare amprentă 55

Tabel 5-6 Configurare MySQL 57

Tabel 5-7 Citire serial 57

Tabel 5-8 Citire serial conditie 57

Tabel 5-9 Parsare mesaj 58

Tabel 5-10 Formare query 58

Tabel 5-11 executare query 58

Tabel 5-12 Configurare MySQL php 59

Tabel 5-13 Conectare MySQL 59

Tabel 5-14 Definire query selecție 59

Tabel 5-15 Stocare rezultat query 59

Tabel 5-16 Cod CSS rânduri tabel 60

Tabel 5-17 Structură tabel main_tb 60

Tabel 5-18 Structură tabel medical_stuff 61

Tabel 6-1 Rata de defectare 67

Tabel 6-2 Preț componente 68

Lista de tabele

Figura 1-1 Diagrama e-Call 16

Figura 2-1 Dispozitiv scanare amprentă 17

Figura 2-2 Dispozitiv bluetooth 18

Figura 2-3 Bluetooth HC-06 HC-05 20

Figura 2-4 Diagrama ATMEGA328 22

Figura 2-5 Pushbutton 24

Figura 2-6 Diagrama conectare LED si button 24

Figura 2-7 Senzor capacitiv 25

Figura 3-1 UART 30

Figura 3-2 Secvență UART 32

Figura 5-1 Schema bloc sistem 50

Figura 5-2 Schema bloc subsistem ECU 51

Figura 5-3 Schema bloc scanare amprentă 54

Figura 5-4 Schema bloc achiziție si procesare 56

Figura 6-1 Diagrama analiză fiabilitate 62

Lista de termeni și abrevieri

Memoriu justificativ

Sisteme automate de apelare a serviciului de urgență

Obiectivele lucrării

Această lucrare este destinată prezentării și simulării unui sistem de tip eCall. Pe lângă exemplificarea acestui tip de sistem, se are în vedere și îmbunătățirea acestuia pentru optimizarea procesului de urgență pentru salvarea persoanelor implicate in accidente rutiere.

Ținând cont că anumite informații specifice legate de istoricul medical al persoanelor aflate într-un autovehicul implicat într-un accident pot fi de mare folos se va adăuga o nouă funcționalitate dispozitivului de tip eCall, și anume scanarea amprentei persoanelor aflate în vehicul.

Amprenta va fi codată și va face legătura la un profil informatic unic al persoanei. Acest profil are rolul de a pune la dispoziție echipajelor de intervenție informații importante despre istoricul medical al persoanei ce poate accelera intervenția și salva viața persoanei respective.

Lucrarea se compune din două părți esențiale și in egală măsură importante, anume partea hardware si cea software.

Partea hardware se va baza pe două microcontrolere atmega328p, senzor de amprentă, senzor capacitiv și comunicare externa cât și restul circuitelor necesare pentru a integra toate componentele într-un mediu simulat funcțional.

Partea software va face referire atât la partea logică pentru comunicarea între cele două microcontrolere, algoritmi pentru dispozitivele periferice, cât și la partea de programare a serverului pentru procesarea si afișarea datelor.

Obiectivele acestei lucrări sunt reprezentate de proiectarea si implementarea unui simulator de bord (ECU), cu ajutorul unui sistem hardware pentru achiziția de amprentă, a unui protocol de comunicație între dispozitive, cât și cu ajutorul unui sistem software de transmitere și validare a datelor pe partea de server și simularea unui centru operator.

Limitările sistemului propus

Luând în considerare faptul că proiectarea unui astfel de sistem este foarte costisitoare, lucrarea de față face referire la simularea și proiectarea logicii de funcționare a unui asemenea sistem. Ținând cont că acest sistem nu este conceput în scop comercial, acesta va avea numeroase limitări care însa, nu vor împiedica în niciun fel evidențierea unei functionalități fundamentale a unui sistem de acest tip.

Dispozitivul de tip eCall, care asigură detecția unui accident rutier este foarte complex, de aceea, acesta va fi simulat cu ajutorul unui declanșator de pe interfața de comandă a sistemului iar subsistemul responsabil cu acest lucru va genera automat date de interes ale accidentului : coordonate de locație GPS, viteza de impact, număr de înmatriculare a autovehiculului, etc..

Deoarece funcționalitatea unui computer de bord (ECU) este deasemenea foarte complicată, aceasta va fi redusă la un nivel de bază și va fi simulată cu ajutorul microcontrolerului. Funcțiile simulatorului de ECU vor fi : detecție prezență persoană pe scaun, detecție închidere uși, detecție folosire centură de siguranță.

Ținând cont că pentru partea de scanare a amprentei se folosește un dispozitiv destinat studiului didactic, și nu unul de producție, baza de date cu amprente va trebui stocată în dispozitiv și nu într-un server separat, iar numărul de înregistrări pe care le permite dispozitivul va fi de 162. Nu se are în vedere proiectarea unui sistem destinat utilizării la scară mare.

Partea de transmisie a informației de la simulatorul fizic, la centrul de procesare a datelor se va realiza folosind comunicația bluetooth, care are o rază foarte mică de funcționare (1-5m). Nu se vor folosi repetoare de semnal sau alte echipamente de acest tip destinate propagării informațiilor către centrul de procesare.

Achiziția și procesarea datelor pe partea de server a sistemului va fi redusă ca funcționalitate. Aceasta va cuprinde o pagină de afișare a datelor primite de la simulatorul fizic și o pagină de editare a urgențelor ce au fost tratate. Totul are rolul de a prezenta comportamentul de bază al unui întreg sistem de gestionare si monitorizare a accidentelor rutiere.

Sisteme inteligente de transport

Acest sistem poate fi catalogat drept un sistem intelligent de transport, ceea ce expliciteaza studiul de caz ales.

ITS reprezintă o gamă largă și diversă de tehnologii care, aplicată sistemelor actuale de transport, poate ajuta la creșterea siguranței, reducerea congestiilor de trafic, creșterea mobilității, minimizarea impactului de mediu, reducerea consumului de energie și creșterea productivității economice.

Tehnologiile ITS sunt variate și includ:

prelucrarea informațiilor;

comunicații;

control și electronică.

ITS reprezintă rezultatul aplicării tehnologiilor avansate la sisteme și metode de transport pentru eficientizarea, creșterea confortului și siguranței transportului pe căile rutiere, feroviare, navigabile interioare, aeroporturi, porturi și legăturilor dintre aceste tipuri de transport diferite.

Avantajele sistemului “Inteligent Transport System”:

fluidizarea traficului printr-o îmbunătățire a condițiilor de trafic cu aproximativ 15%;

îmbunătățirea serviciilor RATB prin respectarea unei programări a sosirii și plecării vehiculelor din stații;

semnalizarea instantanee a echipamentelor defecte din intersecții și posibilitatea intervenției operative pentru remedierea defectelor;

îmbunătățirea serviciilor vehiculelor de intervenție – Poliție, Ambulanță, Pompieri.

Tabel – Tipuri de sisteme ITS

Conform standardelor ISO, subsistemele ITS, după funcțiile pe care le realizează, se clasifică astfel:

Advanced Public Transportation Systems (APTS) sau Sisteme Avansate pentru Transportul Public;

Advanced Traffic Management Systems (ATMS) sau Sisteme Avansate de Management al Traficului;

Advanced Traveller Information Systems (ATIS) sau Sisteme Avansate de Informare a Călătorilor;

Advanced Vehicle Control Systems (AVCS) sau Sisteme Avansate de Control al Vehiculelor;

Commercial Vehicle Operations(CVO) sau Sisteme de Operare pentru Vehicule Comerciale.

Sistemul care este tratat in prezenta lucrare face parte din categoria EM – sisteme avansate de notificare a incidentelor. Sistemele avansate de control al vehiculului (AVCS) includ toate sistemele aflate în vehicul sau pe drum, care asigură conducătorului vehiculului o siguranță și/sau un control sporit, fie prin îmbunătățirea informațiilor referitoare la mediul rutier, fie prin asistarea activă a conducătorului vehiculului în dirijarea vehiculului. Sistemul de tip AVCS se utilizează pentru mașini, camioane, autobuze și alte vehicule, cu scopul de a îmbunătăți mobilitatea și siguranța.

Câteva dintre tehnologiile disponibile: sisteme de anti-blocare a frânei și sisteme de control al tracțiunii, sisteme de cotire pe patru roți, sisteme active de suspensie, sisteme de stabilitate a vehiculului, control autonom inteligent al cursei, sisteme de atenționare/avertizare a coliziunii plasate în vehicul, sisteme de atenționare/avertizare referitoare la drum, sisteme de detecție a obstacolelor apropiate, autobuze cu ghidare pe parcursul rutei, îmbunătățirea vizibilității, urmărirea și menținerea benzii de circulație, monitorizarea conducătorului vehiculului, tehnologii viitoare.

Sistemul de control autonom, inteligent al cursei (AICC-Autonomous Incident Detection) este o tehnologie utilizată în sistemele de tip AVCS, care monitorizează distanța până la vehiculul din față și avertizează conducatorul vehiculului, încetinește efectiv viteza de deplasare a vehicului, daca distanța de separare a vehiculelor scade într-atât încat devine periculoasă.

Majoritatea sistemelor AICC folosesc un sistem senzor-radar sau radar-laser pentru a determina distanta și viteza relativă pana la vehiculul din față și avertizeaza conducatorul vehiculului sau acționeaza frânele. În prezent, sunt utilizate cateva sisteme de evitare a coliziunii pentru a mari capacitatea de sesizare și siguranța conducatorulului vehiculului.

Există sisteme ce avertizează conducatorul vehiculului asupra obstacolelor ce sunt în afara razei vizuale a acestuia. Senzorii NODS (Near Obstacole Detection Systems-Sisteme de detectare a obstacolelor apropiate) utilizează de obicei radare sau detecție ultrasonică. Sisteme de ghidare a vehiculelor pe parcursul rutei permit imbunatatirea calității serviciilor sistemelor ITS de tip ATIS.

Sisteme pentru imbunătățirea vizibilitații evenimentelor de pe ruta, noaptea sau pe vreme rea, utilizeaza tehnici de iluminare cu raze infraroșii și ultraviolete. Aceste sisteme de siguranța au fost testate intens dar nu au fost înca implementate in producție. Tehnologia prezentată consta în camere montate pe vehicul pentru monitorizarea drumului în fața vehiculului, cu ajutorul algoritmilor de recunoaștere a benzii de circulație

Sunt în curs de dezvoltare sisteme de prevenire a accidentelor datorate ațipirii conducatorilor de vehicule. Aceste sisteme evaluează starea fizică a conducatorului vehiculului prin monitorizarea mișcarii volanului sau clipirii ochilor.

Desi în cazul sistemelor de tip AVCS se pot utiliza aproape toate tipurile de senzori, cea mai importanta parte a tehnologiilor privind senzorii utilizați în AVCS o reprezintă metodele de ghidare a vehiculului. Acestea se împart în patru categorii:

metode de ghidare prin imagini care presupun fie iluminarea activă a unei zone de interes, fie o masurare pasivă a imaginii obiectelor din zona;

metoda triangularii care localizează vehiculul, în unele cazuri cu o precizie foarte mare, prin măsurarea distanțelor între vehicul și cel putin trei puncte de referință distincte;

metode de urmarire a rutei prin care ruta este parcursă de vehicul cu ajutorul senzorilor montați pe acesta;

metode de calculare care cu ajutorul senzorilor de supraveghere a mișcarii montați pe vehicul detectează cu precizie direcția și viteza vehiculului;

Creșterea eficienței și a siguranței sistemului se poate face prin automatizarea vehiculului astfel încat acesta să efectueze sarcini tracasante sau periculoase. Un astfel de domeniu în care reiese avantajul AVCS este testarea vehiculelor și a infrastructurii drumurilor.

Sistemul e-Call

În viitorul apropiat, autovehiculele vor fi echipate cu un sistem automat de apelare a serviciului de urgență în cazul implicării într-un accident rutier grav. Chiar dacă pasagerii sunt inconștienți, sistemul va furniza automat echipei de intervenție coordonatele exacte ale accidentului, aceasta putând interveni în câteva minute. Sistemul, denumit "eCall", va funcționa în toate Statele Membre ale Uniunii Europene, urmând ca acesta să fie implementat și în Islanda, Norvegia și Elveția.

Cum funcționează sistemul e-Call

Sistemul e-Call se declanșează automat de îndată ce senzorii instalați în vehicul detectează un accident grav. Odată declanșat, sistemul apelează numărul european de urgență 112, stabilind o legătură telefonică cu centrul corespunzător de preluare a apelurilor de urgență și transmițând serviciilor de salvare detalii despre accident, inclusiv ora la care a avut loc, poziția exactă a vehiculului accidentat și direcția deplasării (informație esențială în cazul în care accidentul s-a produs pe o autostradă sau într-un tunel). Un apel eCall poate fi declanșat și manual, prin simpla apăsare a unui buton din interiorul autovehiculului, de către unul dintre pasagerii sau martorii incidentului.

Indiferent de modul de activare, manual sau automat, suplimentar față de schimbul automat de informații, se inițiază și o conexiune vocală între vehicul și centrul de apeluri de urgență. În acest fel, orice ocupant al autovehiculului apt să răspundă la întrebări poate furniza detalii suplimentare centrului de apeluri de urgență.

Figura – Diagrama e-Call

Accidentele rutiere – cum poate ajuta serviciul e-Call

 În 2009, aproximativ 35 000 de persoane au decedat și 1,5 milioane au fost rănite în 1,15 milioane de accidente rutiere doar în rețeaua de drumuri europene, fapt ce determină necesitatea luării unor măsuri de prevenire și intervenție în cazul acestora.

Alertarea imediată în caz de accident și cunoașterea exactă a locației acestuia reduce timpul de răspuns al echipelor de intervenție cu 50% în mediul urban și cu 40% în mediul rural. Datorită acestei reduceri de timp, eCall poate salva până la 2 500 de vieți în Uniunea Europeană în fiecare an și va limita efectele a zeci de mii de răniri grave. eCall va facilita procesul de intervenție a echipajelor de urgențe, astfel, mărind șansele de salvare a victimelor. Ajungerea mai devreme la locul accidentului va permite și degajarea rapidă a traficului, reducând astfel riscul unor accidente secundare și scăzând timpul de congestie a acestuia.

       Ansamblul simulat și prezentat în această lucrare se bazează pe sistemul e-Call, venind cu o completare a monitorizării pasagerilor din interiorul vehicului. Aceasta constă în  conectarea la un profil medical al persoanei prezente în mașină folosindu-se amprenta acestuia.

Dispozitive electronice folosite

Realizarea prototipului fizic al sistemului prezentat în lucrare a fost făcută în maniera “plug and play”. Ținând cont că dispozitivele folosite au o utilitate didactică sau de hobby, prototipul a fost conceput fără lipituri în eventualitatea refolosirii în întregime a materialelor. Metoda de interconectare a dispozitivelor este cea cu contacte de tip pin.

Lista dispozitivelor electronice folosite :

Dispozitiv scanare amprentă

Dispozitiv transmisie bluetooth

2 plăci de dezvoltare Arduino cu microcontroler ATMEGA328p-PU

3 push butoane

Senzor capacitiv de detecție a prezenței umane

Fire conductoare și conectori de legatură

Dispozitiv de scanare a amprentei

Pentru partea de scanare de amprentă s-a folosit dispozitivul Grove Fingerprint Sensor SEN04172P. Acesta este echipat cu un circuit DSP de mare putere AS601. Acesta are rolul de prelucrare a imaginii, calcule, verificarea asemănărilor și deasemenea căutarea după o anumită amprentă.

Figura – Dispozitiv scanare amprentă

Dispozitivul are o memorie pentru amprentă destul de mare pentru proiecte de tip simulare și hobby, anume 162 de înregistrări. Acesta are o memorie flash destinată special pentru acest lucru. LED-ul roșu din interiorul lentilei va lumina în timpul în care dispozitivul realizează fotografii pentru amprentă și deasemenea are rol de a informa utilizatorul că dispozitivul funcționează. Este unul din cele mai ieftine dispozitive de acest tip de pe piață și este foarte accesibil pentru lucrări de simulare sau lucrări didactice.

Specificații:

Tensiune alimentare 3.6-6V

Curent maxim de operare 120mA

Timp scanare si prelucrare amprentă 1s

Spațiu stocare 162 amprente

Rată falsă de acceptare 0.001%

Interfață serială

Viteză de comunicație 9600, 19200, 38400, 57600

Temperaturi de lucru 20-50 grade celsius

Dispozitiv de transmisie Bluetooth

Pentru partea de transmisie bluetooth s-a folosit dispozitivul HC-05 produs de către firma Guangzhou HC Information Technology Co. Ltd. .

Seria HC pentru dispozitive seriale bluetooth constă în module de interfață și adaptoare bluetooth.

Module de interfață serială

Nivel industrial : HC-03, HC-04, HC-04M, HC-04S

Nivel civil : HC-05, HC-06, HC-06M, HC-06S

Modulul serial bluetooth este folosit pentru convertirea portului serial la bluetooth. Acest modul are două moduri de funcționare : slave și master. Pentru dispozitivele de clasă cu număr par nu se poate schimba modul de funcționare. Acesta vine deja programat din fabrică. Pentru dispozitivele de clasă cu număr impar, modul de funcționare se poate schimbă folosind comenzi de tip AT.

Dispozitiv de tip master : HC-04M, HC-06M

Dispozitiv de tip slave : HC-04S, HC-06S

Dacă pentru dispozitivele de clasă pară nu este specificat modul de funcționare atunci acesta trebuia considerat implicit slave. Principala funcționalitate a modului serial bluetooth este aceea de a înlocui linia de port serial.

Pentru comunicarea a două microcontrolere se pot folosi module seriale bluetooth. Unul dintre microcontrolere se conectează la dispozitivul de tip master iar celălalt la dispozitivul de tip slave. Conexiunea acestora se poate realiza după ce se împerechează dispozitivele bluetooth. Conexiunea bluetooth este echivalentă unei linii seriale. Există porturile de transmisie și recepție RX și TX.

Când un microcontroler se conectează la un dispozitiv bluetooth de tip slave, acesta poate comunica cu adaptoare bluetooth prezente în computere și telefoane personale de tip smartphone. Atunci există o linie de comunicație serială virtuală între microcontrolere și computer sau telefon.

Majoritatea dispozitivelor bluetooth de pe piață sunt de tip slave, că de exemplu imprimante bluetooth, gps bluetooth, etc.. Se poate folosi un dispozitiv bluetooth de tip master pentru conexiunea și cu acestea.

Funcționarea modulelor bluetooth nu are nevoie de driver, acestea pot comunica cu alte dispozitive bluetooth dacă sunt îndeplinite următoarele două condiții :

Transmisia trebuie să fie între un dispozitiv master și unul slave

Parola trebuie să fie corectă

Deasemenea aceste două condiții nu sunt mereu suficiente, există și alte condiții referitoare la diferite module specifice.

Numerotarea și definirea pinilor dispozitivelor HC-03, HC-04, HC-05 și HC-06 sunt diferite dar dimensiunea pachetului este aceeași și anume 28mm x 15mm x 2.35mm.

Diferența dintre HC-06 și HC-05

Figura – Bluetooth HC-06 HC-05

Caracteristici hardware:

Sensibilitate -80dBm

Putere transmisie RF + 4dBm

Tensiuni de lucru : 1.8V, 3.3V, 5V

Antena RF integrata

Interfata UART cu viteza de transmisie configurabila

Microcontroler-ul ATMEGA328P

Microcontrolerul folosit în ambele circuite este Atmega328, un microcontroler CMOS de 8 biți, de mică putere bazat pe arhitectura RISC AVR îmbunătățită. Frecvența de lucru în cadrul montajelor este 16MHz, fiind asigurată printr-un cristal de cuarț extern, frecvența maximă de operare pe care o poate suporta microcontrolerul fiind de 20MHz. Acest microcontroler poate executa până la 131 de instrucțiuni per ciclu de ceas.

Forma constructivă a acestui circuit integrat este în capsulă PDIP având 14 pini dispuși pe două laturi. Acest controler este similar cu modelele Atmega8, Atmega48, Atmega88 sau Atmega168, singurele diferențe între acestea fiind doar memoria RAM și cea flash.

Caracteristicile principale ale acestuia sunt:

32KB de memorie Flash rescriptibilă pentru stocarea programelor ;

1KB de memorie RAM ;

1KB de memorie EEPROM ;

2KB de memorie SRAM;

10000 de cicluri scriere/ștergere pentru memoria flash și EEPROM

plajă de temperatură pentru folosință de la -40°C pană la 85°C ;

două numărătoare/temporizatoare de 8 biți ;

un numărător/temporizator de 16 biți ;

6 canale PWM;

senzor de termperatură intern;

conține un comparator analogic ;

conține o interfață master/slave SPI;

conține un modul USART pentru comunicație serială (port serial) ;

dispune de un cronometru cu oscilator intern ;

oferă 23 de linii I/O organizate în patru porturi ( PB, PC, PD).

Există o magistrală generală de date la care sunt conectate mai multe module:

unitatea aritmetică și logică (ALU) ;

registrele generale ;

memoria RAM și memoria EEPROM ;

liniile de intrare (porturile – I/O Lines) și celelalte blocuri de intrare/ieșire.

Aceste ultime module sunt controlate de un set special de registre, fiecare modul având asociat un număr de registre specifice.

Dispunerea și descrierea pinilor

După cum se vede în figură, majoritatea pinilor sunt pini de date de intrare și ieșire (cei gri), ce se conectează pentru îndeplinirea funcțiilor microcontrolerului intr-un circuit. Pentru folosirea micirocontrolerului într-un circuit, trebuie neapărat să se folosescă toți pinii marcați cu roșu. Pinii albaștri sunt pini de comunicație serială de date, pe când cei verzi sunt pini de comunicație ISP.

Pinii ce trebuiesc folosiți obligatoriu pentru utilizarea microcontrolerullui:

Vcc – alimentare;

GND – masă;

Reset – un nivel scăzut la acest pin mai mare ca durată decât o valoare prestabilită, va genera o inițializare.

XTAL 1 – intrare pentru amplificatorul inversor al oscilatorului ;

XTAL 2 – ieșire pentru amplificatorul inversor al oscilatorului.

AVCC – pin de alimentare pentru convertorului analog-digital. Trebuie conectat extern la Vcc, chiar dacă ADC nu este folosit. Dacă ADC este folosit , ar trebui conectat la Vcc printr-un filtru trece-jos.

AREF – pinul de referință analogică pentru Convertorul A/D.

Limbajul de programare folosit este Arduino, acesta fiind un limbaj de programare personalizat de producător. Arduino este un limbaj de tip high-level fiind mai puțin complex, comprativ cu microC-ul, dar la bază este construit în totalitate pe structura microC.

Pentru a fi mai accesibil, producătorul a predefinit anumite funcții care au fost redenumite în noul limbaj. Ca exemplu, în continuare am scris o secvență ce aprinde intermitent un LED conectat la un port la intervale de 0,5 secunde. Pentru a observa diferențele și asemănările dintre limbaje, în tabelul de mai jos regăsim două secvențe de cod care îndeplinesc aceași funcție:

Tabel – Cod arduino blink

Parcurgănd liniile de cod se observă similitudini între „void main” în microC și „void setup” în Arduino, „while(1)” preia denumirea de „void loop” etc. În limbajul dezvoltat de Arduino se încearcă apropierea codului de limbajul natural, folosindu-se mai multe cuvinte în detrimentul simbolurilor și carcaterelor speciale. Limbajul Arduino la compilare trece prin trei transformări și nu doar prin două așa cum se întâmplă în cazul compilatorului de microC. La compilare codul Arduino este transformat în microC, apoi este preluat de un alt compilator care îl transformă în assambler, iar de aici este adus în format .hex ce se încarcă în controller.

O bună parte a memoriei flash (aproximativ 0,5 KB) este utilizată doar pentru rularea unui bootloader necesar personalizării controlerului (nu poate fi programat prin USB decât din softul Arduino). Atunci cand am programat microcontrolarele pentru apilcație, pinii ce trebuiau programati sunt vazuți de compilator ca aceia din cadrul placii de dezvoltare Arduino.

Interfața de comandă a simulatorului

Interfața de comandă a simulatorului practic este formată din 3 pushbutoane. Acesta sunt folosite ca declanșatoare pentru generarea evenimentului de tip accident, pentru simularea închiderii ușilor autovehicului și pentru simularea asigurării soferului cu centura de siguranță.

Acestea trimit un impuls pe pinii microcontrolerului in momentul apăsarii.

Figura – Pushbutton

Pentru avertizarea luminoasa a declansarii evenimentelor s-au folosit diode de tip LED. Modul de conexiune la placa de dezvoltare Arduino este urmatorul :

Figura – Diagrama conectare LED si button

Senzorul capacitiv

Senzorul capacitiv a fost realizat folosind doi pini digitali ai microcontrolerului ATMEGA328p-pu de pe placa de dezvoltare Arduino. Acesta poate depista capacitatea electrică a corpului uman. Tot ce este nevoie pentru a construi un astfel de senzor este o rezistență medie spre mare, o bucată de fir conductiv și o folie de aluminiu.

Acest tip de senzor poate fi folosit unde detectarea prezenței umane nu trebuie să aibă o acuratețe foarte mare. De aceea este perfect pentru simulatorul practic, pentru a detecta ocuparea scaunului unui autovehicul.

Senzorul capacitiv construit poate fi transformat într-un sensor de presiune acoperind folia de aluminiu cu hârtie sau cu orice alt material izolator.

Principiu de funcționare

Amintim că sunt folosiți doi pini ai microcontrolerului pentru senzorul capacitiv. Vom avea un pin de emisie și unu de recepție. Folosind un program pe microcontroler vom trece pin-ul de transmisie într-o stare logică (0/1) și vom aștepta ca și pin-ul de recepție să treacă în aceeași stare. Folosind un contor intern vom număra timpul trecut de la tranziția pin-ului de transmisie în starea dorită până la tranziția pin-ului de recepție în aceeași stare.

Acest timp va fi aproximativ egal cu constanta RC, unde R este rezistența folosită între cei doi pini iar C este capacitatea electrică prezentă la pin-ul de recepție. În cazul în care atingem cu degetul folia de aluminiu, vom mări capacitatea electrică a pin-ului de recepție și în consecință timpul de sincronizare al stărilor va crește.

În funcție de variația timpului de sincronizare putem detecta prezența umană.

Protocoale de transmisie folosite

Bluetooth

Bluetooth permite utilizatorilor să se conecteze la un număr mare de dispozitive de calcul și telecomunicații fără să utilizeze cabluri. Specifiicatiile Bluetooth includ emițătoarele radio, nivelul legăturii de rețea și definește aplicațiile la nivelul aplicație pentru dezvoltarea de date și voce. Spre deosebire de infraroșu, care are pentru comunicațiile punct la punct are throughput mai mare, Bluetooth are o rază de acoperire mai mare, nu necesită vizibilitate directă LOS (line of sight) și nu este predispus la interferențe luminoase.

Protocolul operează în bandă ISM (Industrial Scientific Medical) 2.4 a 2.4835 GHz. Ca să se evite interferența cu alte protocoale care utilizează banda de 2.4 GHz, Bluetooth divide banda în 79 de canale (fiecare cu lărgimea de 1MHz) și schimbă canalele (FH) de 1600 de ori pe secundă. Se utilizează spectrul împrăștiat cu salturi de frecvență (frequency hopping). Salturile de frecvență sunt fixate la 2402+k Mhz, unde k=0,1,2, …, 78. Cum am spus, rată de salt este 1600 salturi pe secundă (slotul saltului este de 625 microsecunde). Comunicația radio utilizează TDD, tehnică de acces la mediu este TDMA. Această implementare în versiunile 1.1 și 1.2 permitea obținerea unei rate de transfer de 723.1 kbps. Caracteristica EDR (Enhanced Data Rațe) a versiunii 2.0 permite rațe de transfer de 2.1 Mbps. Tehnic, dispozitivele cu ver. 2.0 au consum de energie mai ridicat, dar rată de trei ori mai mare reduce timpii de transmisie, reducând efectiv consumul de energie până la jumătate față de dispozitivele cu ver. 1.x (presupunând acceași încărcare de traffic).

Un WPAN Bluetooth implică până la 8 dispozitive, localizate într-o rază de 10 m. Deoarece schimbul de informative sau partajarea serviciilor poate fi făcută spontan, în funcție de necesitățile imediate, se numește rețea ad-hoc. Deoarece acest WPAN implică numai dispositive conectate direct, fără utilizarea vreunei infrastructure, se mai numește și rețea punct la punct.

Bluetooth este un standard și un protocol de comunicație proiectat în special pentru consum scăzut de energie, cu acoperire mică (dependent de clasă de putere: 1 m, 10m, 100m) în funcție de transceiver-ele din fiecare dispozitiv.

Tabel – Clase bluetooth

Definitiile termenilor utilizati in Bluetooth

Picorețea. O colecție de dispozitive conectate prin tehnologia Bluetooth într-un mod ad hoc. O picoretea începe cu două dispozitive conectate, precum un mobil și un PC, și poate crește până la 8 dispozitive conectate. Toate dispozitivele Bluetooth sunt unități terminal și au implementări identice. Totuși, când este realizată o picoretea, pe durată conexiunii, o unitate va acționa ca master în scopuri de sincronizare, și celelalte că slave.

Scatternet (rețea împrăștiată). Două sau mai multe picoretele independente și nesincronizate care comunică una cu cealaltă. Această apare atunci când o unitate slave sau o unitate master dintr-o picoretea stabilește o conexiune cu o unitate slave sau master din altă picoretea.

Unitate master. Dispozitivul dintr-o picorețea al cărui ceas și secvență de salt este utilizată la sincronizarea celorlalte dispositive din picoretea.

Unități slave. Toate dispozitivele dintr-o picorețea care nu sunt master (până la 7 unități active pentru fiecare master).

Adresă MAC. O adresă de acces control al accesului la mediu de 3 biți, utilizată la identificarea participanților la picoretea.

Unități parcate (Parked units). Dispozitivele dintr-o picorețea care sunt sincronizate dar nu au adresă MAC.

Modul sniff și hold. Dispozitivele care sunt sincronizate într-o picoretea, și care au intrat temporar în modul power-șave, mod în care activitatea dispozitivului este redusă.

Tipurile de legături Bluetooth

Tehnologia în bandă de bază a bluetooth suportă două tipuri de legături: legătura sincronă orientată pe conexiune (SCO – Synchronous Connection Oriented) utilizată în special pentru voce, și legătura asincronă fără conexiune (ACL -“ Asynchronous connectionless), utilizată în special pentru transfer de date.

SCO alocă o lărgime de bandă fixă de-a lungul conexiunii punct la punct dintre master și un sclav.

Tip de conexiune cu comutare de circuit (masterul rezervă periodic sloturi).

Pachetele SCO nu includ CRC și nu sunt niciodată retransmise.

Masterul poate suporta până la 2 legături SCO simultane.

ACL este o legătură punct la multipunct între master și toți sclavii din picoretea.

Tip de conexiune cu comutare de pachete (schemă de acces bazată pe interogări).

Nu este posibilă rezervarea de bandă.

Livrarea poate fi garantată prin detecția erorilor și retransmisie.

Poate există numai o singură legătură ACL între un master și un slave.

Transmiterea unui pachet ACL de către un sclav este controlată de un pachet POLL primit de la master.

Diferitele perechi master-slave din aceeași picoretea pot utiliza diferite tipuri de legături; mai mult, acestea se pot schimba arbitrar în timpul unei sesiuni. Fiecare tip de legătură suportă până la 16 tipuri de pachete diferite. Patru dintre acestea sunt pachete de control și sunt commune atât legăturilor SCO cât și ACL. Ambele tipuri de legături utilizează o schemă TDD (Time Division Duplex) pentru transmiterea (simultană în ambele direcții) full-duplex. Legăturile SCO sunt simetrice și tipic sunt destinate traficului de voce mărginit de timp. Pachetele SCO sunt transmise la intervale rezervate. O dată ce este stabilită conexiunea, atât unitățile master cât și slave pot trimite pachete SCO fără a fi interogate ( to be poll). Legăturile SCO suportă conexiuni punct la punct cu comutare de circuit și sunt utilizate pentru traficul de voce. Rata de date pentru legăturile SCO este de 64 kbps.

Topologia rețelei Bluetooth

Dispozitivele Bluetooth pot crea atât conexiuni punct la punct cât și punt la multipunct. O conexiune între două sau câteva (max. 8) dispozitive formează o picoretea în care toate dispozitivele urmează aceeași secvență de salt a frecvențelor. Pentru evitarea interferențelor între dispozitive, unul dintre dispozitive devine automat master-ul picoretelei. Sclavii dintr-o picoretea pot stabili legături numai cu masterul. Într-o rază de 10 m pot există până la 10 picorețele.

UART

UART (Universal Asynchronous Receiver/Transmitter)  este cea mai simplă interfață serială asincronă care de asemenea este numită  ACIA (Asynchronous Communication Interface Adapter).

UART este asinconă pentru că nu se transmite semnal de ceas prin linia de date serială. Receptorul recunoaște valorile binare individuale fără o linie comună de ceas.

Interfața UART constă din două părți:

un receptor (receiver – Rx) care convertește un flux serial de biți în date paralele (cuvinte) pentru microprocesor;

un transmițător (transmitter – Tx) care convertește date paralele de la microprocesor într-un flux serial de biți, pentru transmisie.

UART furnizezază și informație de stare, cum ar fi “receptorul este plin (datele au ajuns) sau transmițătorul este gol (o transmisie în curs s-a terminat).

Interfața Serială Asincronă nu are un mecanism de sincronizare între module (interlocutori). Sincronizarea pe fluxuri de date este realizată de fiecare interlocutor în parte. Pentru a realiza sincronizarea pe fluxuri de date, în fluxul de date este introdusă informația tehnică despre transfer, cum ar fi:

Start Transfer;

Paritatatea;

Stop – sfîrșitul transferului;

        Interlocutorii se sincronizează folosind informația tehnică. Pentru a transfera un număr de unități (o cantitate anumită) de date, va trebui anexată și transferată și informația tehnică. Un transfer de date impreună cu informația tehnică ce il însoțește, compune un “Frame de date”. 

     Formatul datelor transmise utilizează la începutul transmisiei pentru fiecare caracter un bit de start și la sfârșit unul sau doi biți de stop.  Receptorul își sincronizează ceasul după recepționarea bitului de start și apoi eșantionează biții de date (7 sau 8 în funcție de configurația sistemului). Dacă receptorul nu primește secvența de stop, se presupune că ceasul său este defazat față de al emițătorului și se declară o eroare de cadru.

Protocolul hardware de comunicare prin frame-uri

În starea pasivă se distinge:

Linia de transfereste setată („1” logic);

Începutul transferului este semnalizat de cîte o resetare a liniei, acest bit de informație este numit Start Bit;

Se vor transfera un set de biți consecutivi conform configurației liniei de transfer cu o configurație de 5-10 biți.

Urmează bitul de paritate, ce oferă posibilitatea verificării integrității datelor transferate.

Detecția erorilor de paritate

Pentru a detecta erorilor, multe sisteme folosesc bitul de paritate, pentru verificarea datelor recepționate. Bitul de paritate e calculat de transmițător și e inclus în cadrul de date. Receptorul calculează paritatea pentru fiecare octet recepționat. Dacă bitul de paritate calculat este identic cu cel recepționat, receptorul presupune că nu sunt erori.

Calculul parității se evaluiază după logica XOR între biții de date P=^DATA.  Pentru o transmisie corectă, emițătorul și receptorul trebuie să utilizeze același tip de paritate (P=0  even parity (par), sau P=1 odd parity(impar)).

Urmează un set de indicatori care se numesc Stop Bit, care setează bus-ul. Lungimea indicatorului Stop poate fi [1; 1,5;  2] biți. Valoarea bitului de stop depinde de eroarea vitezei de transfer dintre transmițător și receptor.

Configurația unui frame de obicei este prezentat printr-o secvență de forma: 9600  8  N1 :

9600 – viteza de transfer în baud/sec;

8 – mărimea datelor;

N – excluderea bitului de paritate (P – includerea bitului de paritate);

1 – numărul de bițide stop.

Viteza de transfer se măsoară în baud/sec, care reprezintă numărul de biți de informație, atît tehnică cît și de date transferate prin interfața serială (8 biți/sec ≈ 11 baud/secundă). Viteza exprimată în biți pe secundă va reprezenta viteza de transfer a datelor excluzînd informația tehnică.

Pentru ca datele să fie transferate cu siguranță, înainte de a începe un transfer, interlocutorii trebuie să adopte aceeași viteză de transfer. Din motive că interlocutorii pot avea diferite metode de calcul/setare a vitezei de transfer, foarte frecvent apare situația de apariție a unei erori în cadrul liniei de transfer. Eroarea maximă admisibilă a vitezei de transfer este < 0,5 bit/frame. Dacă viteza de transfer depășește această valoare, va apărea eroarea de transfer.

I2C

Interfața I²C sau IIC (Inter-Integrated Circuit) este un tip de transmisie de date serială master-slave, utilizată intensiv între circuite integrate digitale (microcontrolere, memorii, convertoare) și a fost inițial dezvoltată de către firma olandeză Philips (în prezent NXP) în anul 1982. Ulterior specificația a suferit mai multe modificări descrise în diferite versiuni:

vers. 1.0 (1992): permite două tipuri de transmisie: Normal mode (rata de transfer: 100 kbps) respectiv Fast mode (rata de transfer: 400 kbps) precum și adresarea pe 10 biți (max 1024 dispozitive)

vers. 2.0 (1998): s-a adăugat o nouă rată superioară de transfer (High speed mode) de 3,4 Mbps

vers. 2.1 (ianuarie 2000) îmbunătățiri aduse versiunii anterioare

vers. 3.0 (2007) s-a inclus o nouă rată de transfer numita Fast mode plus de 1 Mbps

vers. 4.0 (2012) rata de transfer Ultra-Fast mode de 5 Mbps

Magistrala (busul) I²C este compusă din doua linii:

SCL – Serial Clock Line (ro: linie de ceas serială)

SDA – Serial Data Line (ro: linie de date serială)

Tehnologii software folosite

Python

Python este un limbaj de programare foarte popular ( statistici), oferind posibilitatea programării structurale dar și orientate pe obiecte și incluzând și elemente din paradigma funcțională. Este un limbaj de scripting, ceea ce înseamnă că este interpretat și nu compilat, economisind mult timp în procesul de dezvoltare și depanare.

Limbajul combină o putere remarcabilă cu o sintaxă foarte clară. Are module, clase, excepții, tipuri dinamice și garbage collection. API-ul Python oferă module pentru o gamă foarte mare de funcționalități, de la cele de bază pentru lucrul cu șiruri și fișiere, până la cele pentru lucrul cu procese, threaduri, sockets, serializare etc. Multe dintre aceste module oferă o interfață foarte similară programării la nivel de sistem din C (ceea ce se studiază la SO), astfel încât funcțiile Python au același nume si aproximativ aceiași parametrii ca cei pentru funcțiile din C pentru apeluri de sistem. Există o varietate de API-uri și pentru aplicații GUI, cum ar fi PyQT , PyGTK, wxWidgets (lista completă).

Implementarea principală a Python, CPython (scrisă în C) a fost concepută pentru a fi portabilă: funcționează pe Linux, Unix, Windows, Mac OS X. Pe platformele mobile actuale există implementări pentru iOS, iar Android oferă SL4A, o platformă pentru limbaje de scripting cu suport și pentru Python, folosită de engine-uri precum QPython.

Programele pot fi executate, de asemenea, și pe mașina virtuală Java prin folosirea compilatorului Jython, care le transformă în bytecode Java și permite folosirea de clase Java în cadrul acestora. Similar, există IronPython pentru .NET.

Execuția programelor Python

În Windows, dacă extensia .py este deja înregistrată, un dublu-click pe numele scriptului este suficient. Se poate edita programul folosind GUI-uri ca IDLE (PythonGUI) și Eclipse sau editat în notepad++ și executat din consolă (Start→Run→cmd).

Pentru a testa anumite funcționalități sau a verifica o anumită sintaxă nici nu este nevoie să scrieți un script, puteți folosi direct consola Python. Din ea se iese scriind quit() sau apăsând Ctrl-D.

Din consolă puteți obține documentația despre anumite module, clase, metode folosind help(nume), inclusiv despre modulele și metodele scrise de voi dacă includeți în cod comentarii docstring (similare javadoc-ului din Java). Alternativ, dacă doriți să vedeți metodele disponibile pentru un anumit obiect puteți folosi funcția dir(obiect), ca în exemplele de aici.

Tabel – import

Unul din avantajele Python este că puteți folosi consola atunci când vreți să testați o anumită funcționalitate sau când nu sunteți siguri ce se întâmplă când folosiți anumite funcții/construcții. De exemplu puteți încerca diverse metode de parsare string-uri înainte de a le încorpora în programul vostru, sau poate pur și simplu vă puneți întrebări de genul “Pot pune într-un dicționar chei de tipuri diferite, unele integer unele string?” –> creați un astfel de dicționar în consolă și observați dacă merge. 

Pentru a folosi într-un program Python argumente date din linia de comandă trebuie inclus modulul sys și folosită lista argv, care conține toate argumentele, pe prima poziție fiind numele scriptului.

Tabel – argumente

Particularități de sintaxă

Indentarea în Python este mai mult decât parte a stilului de programare, este chiar parte din sintaxă

linie nouă termină o declarație, pentru a continua o declarație pe mai multe linii, se foloseste caracterul “\”.

Un bloc de cod are toate liniile indentate cu același număr de spații (nu există begin și end sau {}). Instrucțiunile dintr-un bloc de cod vor fi grupate unele sub altele, pe același nivel de indentare.

Definițiile neindentate într-un program Python vor fi de obicei variabile globale, definiții de clase, proceduri, funcții sau părți ale main-ului.

După instrucțiuni nu este obligatoriu să puneți simbolul ';' precum în alte limbaje de programare, indentarea corespunzatoare fiind suficientă.

Este foarte important sa nu uitați simbolul ':' care precede o indentare

Structurile de control, definirea de rutine, clase, toate necesită o mai mare grijă în scrierea codului. Exemplu de folosire a indentării pentru a delimita blocurile de cod:

Tabel – suma numere

O singură linie se poate comenta în Python folosind simbolul #. Pentru comentarii multi-line se folosesc trei ghilimele succesive """ sau ''' la inceputul și respectiv la sfârșitul zonei de comentat.

Comentariile cu ghilimele succesive din interiorul unui bloc de cod trebuie să fie pe același nivel de indentare cu acesta, altfel veți avea IndentationError la execuție. Comentariile cu # nu au această restricție.

Tabel – eroare indentare

Corect este: 

Tabel – comment

MySQL

MySQL este un sistem de gestiune a bazelor de date relaționale, produs de compania suedeza MySQL AB și distribuit sub Licența Publică Generală GNU. Este cel mai popular SGBD open-source la ora actuală[6], fiind o componentă cheie a stivei LAMP (Linux, Apache, MySQL, PHP).

Deși este folosit foarte des împreună cu limbajul de programare PHP, cu MySQL se pot construi aplicații în orice limbaj major. Există multe scheme API disponibile pentru MySQL ce permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip specific API. O interfață de tip ODBC denumită MyODBC permite altor limbaje de programare ce folosesc această interfață, să interacționeze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. În sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul cărora respectivele limbaje să poată folosi acest SGBD mult mai ușor decât prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale.

Licența GNU GPL nu permite încorporarea MySQL în softuri comerciale; cei care doresc să facă acest lucru pot achiziționa, contra cost, o licență comercială de la compania producătoare, MySQL AB.

MySQL este componentă integrată a platformelor LAMP sau WAMP (Linux/Windows-Apache-MySQL-PHP/Perl/Python). Popularitatea sa ca aplicație web este strâns legată de cea a PHP-ului care este adesea combinat cu MySQL și denumit Duo-ul Dinamic. În multe cărți de specialitate este precizat faptul ca MySQL este mult mai ușor de invățat și folosit decât multe din aplicațiile de gestiune a bazelor de date, ca exemplu comanda de ieșire fiind una simplă și evidentă: „exit” sau „quit”.

Pentru a administra bazele de date MySQL se poate folosi modul linie de comandă sau, prin descărcare de pe internet, o interfață grafică: MySQL Administrator și MySQL Query Browser. Un alt instrument de management al acestor baze de date este aplicația gratuită, scrisă în PHP, phpMyAdmin.

MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD, GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows 9x/NT/2000/XP/Vista.

PHP

PHP este un limbaj de programare. Numele PHP provine din limba engleză și este un acronim recursiv : Php: Hypertext Preprocessor. Folosit inițial pentru a produce pagini web dinamice, este folosit pe scară largă în dezvoltarea paginilor și aplicațiilor web. Se folosește în principal înglobat în codul HTML, dar începând de la versiunea 4.3.0 se poate folosi și în mod „linie de comandă” (CLI), permițând crearea de aplicații independente.

Este unul din cele mai importante limbaje de programare web[2] open-source și server-side, existând versiuni disponibile pentru majoritatea web serverelor și pentru toate sistemele de operare. Conform statisticilor este instalat pe 20 de milioane de situri web și pe 1 milion de servere web[3]. Este disponibil sub Licenṭa PHP ṣi Free Software Foundation îl consideră a fi un software liber.

Inițial, limbajul a fost dezvoltat de inventatorul său, Rasmus Lerdorf. Odată cu creșterea numărului de utilizatori, dezvoltarea a fost preluată de o nouă entitate, numită The PHP Group (Grupul PHP).

PHP însemna inițial Personal Home Page.[4] PHP a fost început în 1994 ca o extensie a limbajului server-side Perl, și apoi ca o serie de CGI-uri compilate de către Rasmus Lerdorf, pentru a genera un curriculum vitae și pentru a urmări numărul de vizitatori ai unui site. Apoi a evoluat în PHP/FI 2.0, dar proiectul open-source a început să ia amploare după ce Zeev Suraski și Andi Gutmans, de la Technion au lansat o nouă versiune a interpretorului PHP în vara anului 1998, această versiune primind numele de PHP 3.0. Tot ei au schimbat și numele în acronimul recursiv de acum, până atunci PHP fiind cunoscut ca Personal Home Page Tools. Apoi Suraski și Gutmans au rescris baza limbajului, producând astfel și Zend Engine în 1999. În mai 2000 a fost lansat PHP 4.0, având la bază Zend Engine 1.0.

PHP este simplu de utilizat, fiind un limbaj de programare structurat, ca și C-ul, Perl-ul sau începând de la versiunea 5 chiar Java, sintaxa limbajului fiind o combinație a celor trei. Datorită modularității sale poate fi folosit și pentru a dezvolta aplicații de sine stătătorare, de exemplu în combinație cu PHP-GTK sau poate fi folosit ca Perl sau Python în linia de comandă. Probabil una din cele mai importante facilități ale limbajului este conlucrarea cu majoritatea bazelor de date relaționale, de la MySQL și până la Oracle, trecând prin MS Sql Server, PostgreSQL, sau DB2.

PHP poate rula pe majoritatea sistemelor de operare, de la UNIX, Windows, sau Mac OS X  și poate interacționa cu majoritatea serverelor web. Codul dumneavoastră PHP este interpretat de serverul WEB și generează un cod HTML care va fi văzut de utilizator (clientului -browserului- fiindu-i transmis numai cod HTML).

Arhitectura tip LAMP a devenit populară în industria web ca modalitate rapidă, gratuită și integrată de dezvoltare a aplicațiilor. Alături de Linux, Apache și Mysql, PHP reprezintă litera P, deși uneori aceasta se referă la Python sau Perl. Linux ocupă rolul de sistem de operare pentru toate celelalte aplicații, MySQL gestionează bazele de date, Apache are rol de server web, iar PHP are rol de interpretator și comunicator între acestea.

PHP foloseste extensii specifice pentru fișierele sale: .php, .php3, .ph3, .php4, .inc, .phtml. Aceste fișiere sunt interpretate de catre serverul web iar rezultatul este trimis în formă de text sau cod HTML către browser-ul clientului.

PHP-ul este unul din cele mai folosite limbaje de programare server-side, conform unui studiu efectuat de Netcraft în aprilie 2002, apărând pe 9 din cele 37 milioane de domenii cercetate în studiu. De asemenea, există un grafic al creșterii folosirii PHP-ului pe site-ul oficial. Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor caracteristici :

Familiaritatea : sintaxa limbajului este foarte ușoară combinând sintaxele unora din cele mai populare limbaje Perl sau C;

Simplitatea : sintaxa limbajului este destul de liberă. Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document executându-se între marcajele speciale;

Eficiența : PHP-ul se folosește de mecanisme de alocare a resurselor, foarte necesare unui mediu multiutilizator, așa cum este web-ul;

Securitate : PHP-ul pune la dispoziția programatorului un set flexibil și eficient de măsuri de siguranță;

Flexibilitate : fiind apărut din necesitatea dezvoltării web-ului, PHP a fost modularizat pentru a ține pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web existente: Apache, IIS, Zeus, server, etc.;

Gratuitate : este probabil cea mai importantă caracteristică a PHP-ului. Dezvoltarea PHP-ului sub licența open-source a determinat adaptarea rapidă a PHP-ului la nevoile web-ului, eficientizarea și securizarea codului.

PHP 5

Pe 13 iulie 2004 a fost lansat PHP 5, cu Zend Engine II, ce a adus și o orientare obiect mai pronunțată și suportând mai multe caracteristici ale acestui tip de programare.

PHP 5 aduce mai multe noutăți față de versiunea 4:

Suport îmbunătățit pentru OOP

Introduce extensia PDO – PHP Data Objects, care definește o modalitate facilă și consistentă de accesare a diferitelor baze de date

Imbunătățiri de performanță

Suport îmbunătățit pentru MySQL și MSSQL

Suport nativ pentru SQLite

Suport SOAP integrat

Iteratori pentru date

Controlul erorilor prin tratarea de excepții

La sfârșitul lui 2007 doar versiunea 5.x mai era întreținută, deoarece în data de 13 iulie 2007 (exact la 3 ani după lansarea PHP5), PHP Group a anunțat că PHP4 va fi scos din uz pe 31 decembrie 2007, deși prognozează că anumite upgrade-uri de securitate se vor oferi până pe 8 august 2008.[5]. Dezvoltarea la PHP 6 începuse deja în decembrie 2007 și urmează să fie oferit odată cu scoaterea din uz a PHP4.

PHP 6

PHP 6 are următoarea agendă de îmbunătățiri și modificări:

îmbunătățirea suportului pentru Unicode

retragerea definitivă a unor funcții ca register_globals și magic_quotes, și a variabilelor tip $HTTP_*_VARS

var va fi un alias pentru public, și folosirea lui va ridica o atenționare E_STRICT.

suport pentru int pe 64 biți.

taguri tip ASP sunt retrase definitiv.

următoarele pachete au fost scoase din distribuția principală: Freetype1, GD1, mime_magic

funcția ereg() nu mai este disponibilă

instanțierea obiectelor prin referină (& new Obiect()) generează o eroare E_STRICT.

erorile tip E_STRICT sunt incluse în E_ALL.

adăugarea instrucțiunii goto permite salturi la un alt bloc de comenzi.

namespace, import, și goto devin cuvinte rezervate.

accesarea caracterelor într-un șir (string) se face prin operatorul []. {} se scoate din uz ( ex: $str[42] funcționează, $str{42} nu funcționează)

constantele FILE_BINARY și FILE_TEXT devin disponibile pentru folosirea în funcții de citire/scriere fișiere

foreach va suporta array multi dimensional: foreach($a as $b => list($c, $d))

pentru operatorul ternar expresia pentru valoarea true nu mai este obligatorie ($a = $s ?: ‘b’; // returns $a = $s;)

opțiunea safe_mode a fost înlăturată.

operatorul and a fost înlăturat.

funcția microtime() returnează un float.

zend.ze1_compatibility_mode a fost înlăturat.

Tipuri de date interne

Boolean – valori logice tip adevărat sau false, similare cu cele din C++ sau Perl.

Integer – numere întregi (în baza 10, 2 sau 16). Valoarea maximă depinde de sistem și de tipul de integer. Tipul poate fi "signed" sau "unsigned", adica dependent de semnul + sau – sau independent de acestea. Valorile pentru integer unsigned sunt mai mari decât cele pentru signed. Sistemele pe 32 bits pot crea numere întregi între -2147483648 și 2147483647( 2^31-1 ). Maximul pentru sisteme pe 64 bits este 9223372036854775807.

Float – cunoscute ca numere reale. Valorile maxime sunt de asemenea dependete de platform, in general cu un maxim de ~1.8e308 cu o precizie de 14 zecimale dupa virgula (formatul 64 bits IEEE).

String – șiruri de caractere. Înainte de PHP6, un caracter era echivalent cu un byte. Nu există limitări pentru lungimea unui șir, în afara memoriei alocate PHP.

Array – în PHP un array este un tip de data care conține un grup de elemente. Fiecare element are un indice intern în group, iar fiecărui indice îi corespunde o valoare – elementul în sine. Un astfel de grup poate fi folosit ca o simulare pentru diverse situații matematice precum vectori, serii, dicționare de elemente, liste ordonate, matrici sau matrici de matrici. Indicii și valorile unui grup pot fi orice tip de data interna PHP (cu excepții: obiectele, resursele și null nu pot fi indici).

Obiecte – O clasa este o colecție de proprietăți și funcții având o logică comună. Obiectele sunt instanțe ale unei clase, în care proprietățile obiectului primesc valori specifice. Vezi POO – programarea orientată pe obiecte.

Resurse – aceastea sunt variabile speciale care conțin legături cu resurse externe PHP. De exemplu, conexiunea cu o bază de date este o resursa deschisă și menținută cu ajutorul unor funcții special definite pentru aceasta muncă.

NULL – este un tip special de dată, care semnifică că variabila respectivă nu a fost definită și că nu are valoare sau valoarea e necunoscută.

Variabile globale

$GLOBALS – pot fi accesate toate variabilele globale care sunt accesibile script-ului PHP curent; acest vector este indexat chiar prin numele variabilelor globale. Această variabilă superglobală este accesibilă începînd cu versiunea 3.0.0

$_SERVER – conține o serie de variabile ale căror valori sunt setate de server-ul web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuție al script-ului curent. A fost introdusă începînd de la versiunea 4.1.0. În versiunile anterioare se folosea $HTTP_SERVER_VAR . Este o variabilă care conține informații cum ar fi headere, locația scriptului, sau informații despre vizitator și browser. Este posibil ca în funcție de setările fiecărui server și browser să nu fie active toate informațiile specificate de această variabilă. Această variabilă este de asemenea globală, adică se poate folosi oriunde în script, fără apelarea ei ca funcție globală (adică nu trebuie să o cereți cu global $_SERVER în funcțiile dvs.) În schimb $HTTP_SERVER_VARS conține aceleași informații dar nu este o funcție globală (atenție $HTTP_SERVER_VARSși $_SERVER sunt două variabile diferite, chiar dacă aparent fac aceleași lucruri) Dacă directiva register_globals este ON atunci aceste variabile vor deveni la rîndul lor variabile globale în cadrul scriptului. Elementele acestor variabile sunt cele de mai jos (atenție: în funcție de setările serverului și browserului unele elemente pot lipsi)

' PHP_SELF ' – conține numele fișierului unde se execută scriptul curent, relativ la rădacină (document root) De exemplu, $_SERVER['PHP_SELF'] într-un script la adresa http://example.com/test.php/foo.bar va fi /test.php/foo.bar . Constanta __FILE__ conține toată calea și numele fișierului curent.

' argv ' – Un array al argumentului trimis către script. Cînd scriptul rulează în linie de comandă, va da acces C-style la parametrii liniei de comanda. Cînd este accesat prin metoda GET, acesta va conține un sir de interogare.

' argc ' – Conține un număr al parametrilor liniei de comandă trimise către script (daca este rulat în linie de comanda).

' GATEWAY_INTERFACE ' – Returneaza versiunea CGI utilizată pe server (exemplu ' CGI/1.1 ').

' SERVER_NAME ' – Numele server-ului de hosting unde se execută scriptul curent. Dacă scriptul rulează pe un host virtual, aceasta va conține valoarea definită pentru acel host virtual.

' SERVER_SOFTWARE ' – Returnează un șir de identificare al server-ului dat în header ca raspuns la cerere.

' SERVER_PROTOCOL ' – Numele și versiunea protocolului prin care este cerută pagina (exemplu ' HTTP/1.0 ')

' REQUEST_METHOD ' – returnează metoda utilizată pentru accesarea paginii (exemplu ' GET ', ' HEAD ', ' POST ', ' PUT ')

' HTTP_ACCEPT_LANGUAGE ' – Conține limbajul trimis de cererea curentă prin header, dacă exista. Exemplu: ' en '.

' HTTP_CONNECTION ' – Conține informații despre conecsiiunea trimisă de cererea curentă prin header, dacă există. Exemplu: ' Keep-Alive '.

' HTTP_HOST ' – Conține informații despre host, header-ul de la cererea curentă, dacă există.

' SCRIPT_FILENAME ' – Calea absolută unde se execută scriptul curent. Atenție: Dacă scriptul este rulat cu CLI, ca și cale relativă, cum ar fi file.php sau ../file.php , $_SERVER['SCRIPT_FILENAME'] va conține calea relativă specificată de către user.

' REQUEST_URI ' – URI care este dat pentru accesarea paginii curente, de exemplu ' /index.html '.

' PHP_AUTH_DIGEST ' – Cînd rulați sub Apache ca modul, acțiunea Digest HTTP, valoarea acestei variabile este setată în 'Authorization' header trimis către client (care ar trebui utilizat pentru a face o validare corespunzătoare).

' PHP_AUTH_USER ' – Cînd este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul, actiunea HTTP authentication, această variabilă conține numele userului trimis de către user.

' PHP_AUTH_PW ' – Cînd este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul, actiunea HTTP authentication, această variabilă conține parola userului trimisă de către user.

' AUTH_TYPE ' – Cînd este rulat sub Apache ca modul acțiunea HTTP authenticated , această variabilă seteaza tipul de autentificare.

Variabilele pentru trimiterea datelor

$_GET este o variabilă array globală. A fost introdusă în versiunea 4.1.0. Pentru versiunile anterioare se folosește $HTTP_GET_VARS care nu este variabilă globală. Puteți folosi $_GET pentru a trimite variabile cu valori prin intermediul linkurilor.

$_POST este de asemenea o variabilă array globală. A fost introdusa în versiunea 4.1.0. Pentru versiunile anterioare se folosește $HTTP_POST_VARS care nu este variabilă globală. Puteți folosi $_POST pentru a trimite variabile cu valori prin intermediul formularelor.

$_GET și $_POST conțin variabile primite de script prin intermediul unor transferuri care folosesc metodele HTTP get, respectiv post. De exemplu, prin intermediul acestor vectori pot fi accesate valorile cîmpurilor dintr-un formular care a fost completat și transmis folosind una dintre cele doua metode.

HTML

HyperText Markup Language (HTML) este un limbaj de marcare utilizat pentru crearea paginilor web ce pot fi afișate într-un browser (sau navigator). Scopul HTML este mai degrabă prezentarea informațiilor – paragrafe, fonturi, tabele ș.a.m.d. – decât descrierea semanticii documentului.

HTML este o formă de marcare orientată către prezentarea documentelor text pe o singura pagină, utilizând un software de redare specializat, numit agent utilizator HTML, cel mai bun exemplu de astfel de software fiind browserul web. HTML furnizează mijloacele prin care conținutul unui document poate fi adnotat cu diverse tipuri de metadate și indicații de redare. Indicațiile de redare pot varia de la decorațiuni minore ale textului, cum ar fi specificarea faptului că un anumit cuvânt trebuie subliniat sau că o imagine trebuie introdusă, până la scripturi sofisticate, hărți de imagini și formulare. Metadatele pot include informații despre titlul și autorul documentului, informații structurale despre cum este împărțit documentul în diferite segmente, paragrafe, liste, titluri etc. și informații cruciale care permit ca documentul să poată fi legat de alte documente pentru a forma astfel hiperlink-uri (sau web-ul).

HTML este un format text proiectat pentru a putea fi citit și editat de oameni utilizând un editor de text simplu. Totuși scrierea și modificarea paginilor în acest fel solicită cunoștințe solide de HTML și este consumatoare de timp. Editoarele grafice (de tip WYSIWYG) cum ar fi Macromedia Dreamweaver, Adobe GoLive sau Microsoft FrontPage permit ca paginile web sa fie tratate asemănător cu documetele Word, dar cu observația că aceste programe generează un cod HTML care este de multe ori de proastă calitate.

HTML se poate genera direct utilizând tehnologii de codare din partea serverului cum ar fi PHP, JSP sau ASP. Multe aplicații ca sistemele de gestionare a conținutului, wiki-uri și forumuri web generează pagini HTML.

HTML este de asemenea utilizat în e-mail. Majoritatea aplicațiilor de e-mail folosesc un editor HTML încorporat pentru compunerea e-mail-urilor și un motor de prezentare a e-mail-urilor de acest tip. Folosirea e-mail-urilor HTML este un subiect controversat și multe liste de mail le blochează intenționat.

HTML este prescurtarea de la “Hyper Text Mark-up Language” si este codul care sta la baza paginilor web.

Paginile HTML sunt formate din etichete sau tag-uri și au extensia „.html” sau „.htm”. În marea lor majoritate aceste etichete sunt pereche, una de deschidere “<eticheta>” și alta de închidere “</eticheta>”, mai există și cazuri în care nu se închid, atunci se folosește “<eticheta />”. Navigatorul web interpretează aceste etichete afișând rezultatul pe ecran. HTML-ul este un limbaj care nu face deosebire între litere majuscule și minuscule.

Pagina principala a unui domeniu este fisierul “index.html” respectiv “index.htm”. Această pagină este setată a fi afișată automat la vizitarea unui domeniu.

Unele etichete permit utilizarea de atribute care pot avea anumite valori:

<eticheta atribut="valoare"> … </eticheta>

Componența unui document HTML este:

versiunea HTML a documentului

zona head cu etichetele <head> </head>

zona body cu etichetele <body> </body> sau <frameset> </frameset>

Versiunea HTML poate fi:

Tabel – versiuni HTML

Toate paginile HTML încep și se termină cu etichetele <html> și </html>. În interiorul acestor etichete găsim perechile “<head>”, “</head>” și  “<body>”, “</body>”.

Head conține titlul paginii între etichetele “<title>” și “</title>”, descrieri de tip <meta>, stiluri pentru formatarea textului, script-uri și legături către fisiere externe (de exemplu script-uri, fișiere de tip CSS sau favicon).

Exemplu: o pagină HTML cu titlul Exemplu iar conținutul Conținut pagină

Tabel – exemplu HTML

CSS

CSS (Cascading Style Sheets) este un standard pentru formatarea elementelor unui document HTML. Stilurile se pot atașa elementelor HTML prin intermediul unor fișiere externe sau în cadrul documentului, prin elementul <style> și/sau atributul style. CSS se poate utiliza și pentru formatarea elementelor XHTML, XML și SVGL.

Unele dintre cele mai importante segmente (module) noi adăugate acestui standard pentru formatarea elementelor HTML aduc un plus considerabil in dezvoltarea activități webdesign.

Mai jos sunt prezente in listă cele mai importante modulele adăugate in CSS3:

Selectors

Box Model

Backgrounds and Borders

Image Values and Replaced Content

Text Effects

2D/3D Transformations

Animations

Multiple Column Layout

User Interface

Deși au apărut unele deficiente de compatibilitate intre browsere, majoritatea proprietăților CSS3 au fost implementate cu succes in variantele browserelor noi.

Acum CSS3 oferă posibilitatea de a crea borduri cu colțurile rotunjite fară a folosi elemente grafice de fundal așa cum se folosea anterior acestui upgrade.

Proprietatea CSS3 border-radius definește prin valorile exprimate in pixeli cat de rotunjite vor fi colțurile unui element HTML sau unei imagini. Fiecare colț poate avea o alta valoare exprimată in pixeli diferită de un alt colț al aceluiași element. Prin urmare putem folosi pana la 4 valori diferite atribuite unui element HTML sau imagine.

Exemplu:

border-radius: 5px ;

Definește valoarea de 5px radius pentru toate cele 4 colțuri ale elementului.

border-radius: 5px 7px 12px 4px;

Aceste valori multiple definesc cat de mult vor fi rotunjite colțurile elementului HTML, iar pentru fiecare colt este specificata valorarea. Colțul stanga-sus are valoarea border-radius de 5px, colțul dreapta-sus are valoarea border-radius de 7px, colțul dreapta-jos al elementului HTML are valoarea de 12px iar colțul din stanga-jos are valoarea de 4px.

CSS3 – Borduri Rotunjite – Optimizat

border-radius-left: 5px;

border-radius-right: 7px;

border-radius-top: 12px;

border-radius-bottom: 4px;

Exemplu CSS3 border-radius:

Tabel – exemplu CSS3

Elementul HTML div este definit de urmatoarele proprietăți CSS: dimensiunea in lungime este redată de valoarea in pixeli a proprietății width, folosește o bordură de 2 pixeli, o bordură solidă de culoare gri-inchis definită de caloarea HEX #333333. Culoarea de fundal este gri deschis definită de HEX #dddddd. Bordura rotunjită este de 25 pixeli pentru toate cele 4 colțuri.

Proiectarea simulatorului

Schema bloc a intregului sistem

Figura – Schema bloc sistem

Exemplificarea practică a conceptului s-a făcut folosind o simulare la scară mică a întregului sistem de tip ecall. A fost implementat un simulator la scară a calculatorului de la bordul mașinii, cât și un prototip pentru locker-ul intelligent. Simulatorul de ecu se ocupă cu detecția ocupării scaunului șoferului, închiderii ușilor mașinii și de asemenea va există și un mic detector de accident.

Locker-ul inteligent va lucra în tandem cu computerul de bord al mașinii, acesta va face o cerere pentru amprentă doar după ce se sunt satisfăcute celelalte condiții, anume ocuparea scaunului, închiderea ușilor, punerea centurii, etc..

După ce sunt validate toate condițiile, computerul de bord al mașinii va declanșa lockerul intelligent iar acesta se va activa pentru a scana amprenta șoferului. După ce amprenta șoferului este scanată, lockerul transmite computerului de bord telegram cu codul amprentei șoferului ce urmează a fi salvată.

Dacă vreuna din condiții nu este îndeplinită, atunci va fi nevoie de o altă scanare de amprentă, dar din cauza siguranței, ultima amprentă va rămâne salvată că să poată fi trimisă în caz de accident în timp ce condiitile sunt invalidate.

În cazul în care se activează triggerul de accident ( acesta este o simulare rudimentară a întreg sistemului de detecție accident ) echipamentul de tip ecall din autovehicul va adună toate datele importante despre accident pe care le poate achiziționa, le va împacheta și le va trimite la centrul de procesare al urgențelor.

Telegrama de mesaj de urgență va cuprinde : număr de înmatriculare vehicul, viteză impact, coordinate gps, cât și telegrama salvată de la lockerul intelligent cu codul de amprentă al șoferului care permite accesul la distanță la profilul acestuia medical în vederea grăbirii procesului de salvare.

Partea de transmitere a datelor va fi deasemenea redusă la scară mică pentru a putea fi simulate. Partea de transmisie se va realiza cu transceivere blueetooth hc05. Protocolul de comunicație Bluetooth va fi cel standard descris în secțiunea de mai sus.

Subsistemul de simulare ECU

Subsistemul de simulare al computerului de bord al autovehicului inglobeaza urmatoarele functionalitati:

Detecția prezenței unei persoane pe scaunul șoferului

Simulare închidere uși autovehicul

Simulare asigurare centură de siguranță pentru șofer

Simulare pornire motor

Simulare accident rutier

Trimitere cerere de activare a subsistemului de scanare a amprentei

Componente fizice:

Placa de dezvoltare cu microcontroler ATMEGA328

4 butoane

4 LED-uri

Senzor capacitiv

În prima fază se stabilește conexiunea pe magistrala I2C cu subsistemul de scanare a amprentei. Interfața de comunicație a fost implementată folosind librăria standard “Wire.h” prezentă în pachetul de bază al suitei de aplicații ”Arduino” . Subsistemul ECU este configurat ca “master” pentru magistrala I2C. Acesta poate trimite mesaje oricărui “slave” de pe magistrală, selectând adresa respectivă înainte de transmisie.

Pentru preluarea datelor de la senzorul capacitiv cu care se face detecția persoanei s-a folosit librăria “CapacitiveSensor.h” care nu este prezentă în pachetul “Arduino”. Se declară un nou obiect de tip senzor, se configurează pinii pe care acesta este instalat și se inițializează. Valoarea primită se poate stoca într-o variabilă pentru o procesare viitoare.

Tabel – Cod senzor capacitiv

Codul care rulează pe microcontroler a fost scris intr-o manieră de tip “bucla infinită”. La fiecare iterație se verifică prezența persoanei, după care urmează verificarea celor 3 condiții necesare trimiterii cererii de scanare de amprentă și anume: închidere uși, asigurare centură de siguranță și pornire motor. Pentru fiecare condiție îndeplinită se setează câte o variabilă de tip “logic” și de asemenea acest lucru are ca efect aprinderea sau stingerea LED-ului corespunzător. Citirea stării unui buton se face citind valoarea stării pin-ului pe care butonul este conectat. Este nevoie inainte de setarea pin-ului pe modul “input”.

Tabel – Cod digital read

Când toate condițiile au fost validate se trimite cererea pe sistemul de scanare de amprentă. Codul pentru cererea de scanare de amprentă este ”0x0A”.

Tabel – Cod transmitere I2C

Pentru simularea incidentului rutier se folosește cel de-al 4-lea buton. Singura condiție pentru acceptarea comenzii de simulare incident este ca motorul să fie pornit. Chiar dacă nu au fost îndeplinite celelalte condiții și nu a fost trimisă cerea de scanare a amprentei se va trimite cerere de generare a unui incident. Pentru aceasta se folosește un alt cod, anume ”0x0C”.

În cazul în care nu se mai detectează prezența persoanei simulatorul intră în așteptare până la următoarea detecție.

Subsistemul de scanare amprenta

Figura – Schema bloc scanare amprentă

Subsistemul de scanare amprentă are următoarele funcționalități:

Decodarea mesajelor primite de la subsistemul ECU

Scanarea amprentei șoferului

Generarea unui mesaj de tip incident

Transmiterea mesajului generat către o locație de prelucrare

Componente fizice:

Placa de dezvoltare cu microcontroler ATMEGA328

Senzor de scanare amprentă GROVE

Dispozitiv bluetooth HC-05

Ținând cont că transmiterea mesajelor se face pe magistrala I2C iar subsistemul ECU este configurat ca ”master”, subsistemul de scanare amprentă va trebui configurat că ”slave” și îi va fi atribuită o adresă unică pentru magistrală. Deoarece magistrala I2C folosește întreruperi externe, trebuie configurat și înregistrat evenimentul de primire a datelor pe magistrală. Deoarece protocolul este implementat hardware și nu virtual, umplerea registrului de primire a datelor atrage după sine întreruperea execuției codului principal și rularea codului specificat pentru întrerupere.

Tabel – Cod primire I2C

Mesajul primit va fi întotdeauna un octet, de aceea pentru procesarea acestuia putem defini o variabilă globală de tip întreg pe care o modificăm în blocul de cod al întreruperii cu valoarea prezentă în registrul de intrare, urmând că în codul principal să imbricăm execuția funcție de acesta. Subsistemul va avea de reacționat pentru două cazuri, când se primește mesajul ”0x0A”, respectiv ”0x0C”.

Pentru implementarea funcționalității de scanare a amprentei s-a folosit librăria ”Adafruit_Fingerprint.h” inclusă în pachetul dispozitivului. Deoarece comandarea dispozitivului se face folosind interfața UART iar placa de dezvoltare nu mai are alte interfețe UART suplimentare aceasta va fi virtualizată. Placă de dezvoltare cu microcontroler ATMEGA328 prezintă o singură interfață UART fizică ce va fi folosită pentru transmisia datelor la server.

Pentru virtualizarea unei interfețe UART s-a folosit librăria ”SoftwareSerial.h” prezentă în pachetul a€œArduino”. Primul pas îl reprezintă definirea unui nou obiect de tip interfață serială virtuală, urmat de configurarea pinilor externi folosiți. Se definește un nou obiect de tip scanner de amprentă care se inițializează folosind o referință la interfața virtuală UART instantiata mai sus. Se folosesc pinii 10, respectiv 11 pentru inițializarea interfeței UART.

Tabel – Cod scanare amprentă

Pentru partea de scanare efectivă a amprentei s-a implementat o funcție specifică bazată pe alte funcții și metode proprii din librăria anterior menționată. Această funcție va returna un identificator întreg în cazul în care recunoaște amprenta scanată cu una din cele prezentă în bază de date, mai exact numărul de înregistrare al acesteia, în caz negativ va returna 0. Această valoare va fi stocată într-o variabilă inițializată cu valoarea 0.

Generarea și transmiterea mesajului de urgență pe interfață UART către dispozitivul bluetooth va fi declanșată de primirea pe magistrală I2C a mesajului ”0x0C”. Mesajul de urgență va cuprinde următoarele informații:

Numar de înmatriculare vehicul

Viteză de impact

Coordonate GPS

ID amprentă scanată

Mesajul va fi de forma:

“ID-<nr_imatriculare>;Speed-<valoare>;Lat-<valoare_lat>;Lon-<valoare_lon>;FingerID-<fingerid>;”

Pentru transmiterea pe interfața UART fizică, aceasta va trebui inițializată și configurată cu viteza de transmisie corespunzătoare. În cazul curent se va folosi o viteza de 9600bps.

Achiziție si procesare date

Figura – Schema bloc achiziție si procesare

Pentru partea de validare și stocare în bază de date a mesajelor primite se va folosi un script python. Acesta ascultă pe portul serial, așteptând mesaje primite de la modulul de transmisie al sistemului. Aceste mesaje au o anumită formă/pattern.

Forma mesajului ce este recepționat este următoarea:

“ID-<nr_imatriculare>;Speed-<valoare>;Lat-<valoare_lat>;Lon-<valoare_lon>;FingerID-<fingerid>;”

Se importă pachetele necesare interacționării cu portul serial și cu baza de date și se creează datele de conectare pentru bază de date.

Tabel – Configurare MySQL

Deoarece mesajele sunt așteptate în continuu se folosește o buclă infinită.

Tabel – Citire serial

Se verifică în mod constant numărul de bytes din bufferul de primire.

Tabel – Citire serial conditie

După ce un mesaj a fost recepționat, scriptul python va verifica dacă mesajul corespundei formei mai sus amintite. În caz în care formă mesajului recepționat este validată atunci scriptul trece la pasul următor și anume decodificarea și extragerea datelor din telegram pentru a putea fi adăugate în bază de date.

Se parsează mesajul primit:

Tabel – Parsare mesaj

Adăugare și preluare din baza de date

Se generează forma query-ului ce urmează a fi rulat pentru a adăuga o nouă înregistrare în bază de date.

Tabel – Formare query

Se formează query-ul format din informațiile scoase din telegram primită și se rulează. Acum mesajul ajunge la operator.

Tabel – executare query

Pentru partea de procesare a mesajelor de urgență s-a folosit pentru simulare o aplicație web bazată pe php.

Se defines variabilele pentru conectarea la bază de date.

Tabel – Configurare MySQL php

Se crează o interfață mysql pentru conectarea la bază de date.

Tabel – Conectare MySQL

Se definește query-ul ce urmează a fi rulat în baza de date pentru returnarea datelor în vederea afișării.

Tabel – Definire query selecție

Rezultatele query-ului vor fi stocate în variabila numită result.

Tabel – Stocare rezultat query

Se face afișarea datelor într-un tabel trecând prin înregistrări una câte una. Este folosit cod php în tandem cu cod html pentru creeare layout-ului de table.

Pentru partea de editare a mesajelor folosind interfața web s-a folosit un formular dynamic în care se încarcă câmpurile mesajului ce urmează a fi procesat.

Transmiterea datelor de la formular înapoi la pagină de index pentru că modificările să fie actualizate se face folosind tehnologia POST.

Pentru partea de stilizare a interfeței web s-a folosit tehnologia CSS.

Aceasta este o parte a codului de stilizare CSS ce afectează elementele de tip td associate tag-ului table și este folosit pentru alternanța culorilor pentru rânduri pare/impare.

Tabel – Cod CSS rânduri tabel

Structura celor două table MySQL este următoarea:

Tabel – Structură tabel main_tb

Tabel – Structură tabel medical_stuff

Fiabilitatea simulatorului proiectat

Definire indicatori de fiabilitate

Evitarea defectării, realizată încă din faza de proiectare a instalației, presupune eliminarea sau cel puțin limitarea funcționării anormale, prin utilizarea de componente cu fiabilitate ridicată, alegerea unor regimuri de lucru cu solicitare redusă a componentelor etc. Cu toate acestea, experiența a demonstrat că defectările apar inevitabil, fie din cauza solicitărilor sistemului, fie din cauza îmbătrânirii în timp a componentelor.

Toleranța la defectări este o caracteristică structurală a sistemului care, prin arhitectura configurată, face posibilă funcționarea sa, chiar în condițiile apariției unor defecte. Realizarea toleranței la defectări este posibilă prin multiplicarea componentei hardware și/sau software, astfel încât funcțiile sistemului să nu fie afectate; în plus, este necesar ca detectarea și localizarea defectelor să fie afișată unui operator uman.

Modelul matematic al fiabilității

Reprezentarea proceselor de defectare și evaluarea fiabilității sistemului se realizează utilizând metodele statisticii matematice și teoriei probabilităților.

Fiabilitatea sau siguranța în funcționare reprezintă probabilitatea ca un produs să îndeplinească fără întrerupere o funcție precizată, în condiții date, pentru o anumită perioadă de timp. La abordarea analizei fiabilității unui sistem tehnic oarecare trebuie să se țină seama de etapele de desfășurare a analizei, etape ce sunt precizate prin structura din figura 6.1, unde s-au notat cu:

S – sistemul analizat fiabilistic;

Mf – modelul funcțional;

MF – modelul de fiabilitate;

DF – date de fiabilitate;

FS – fiabilitatea sistemului analizat.

Pentru a analiza dinamica oricărui astfel de sistem, este necesar să se considere toate stările implicate din punct de vedere funcțional. Această considerare conduce la noțiunea de răspuns funcțional: stare de sistem, la nivel macroscopic, definită prin mărimi specifice sau parametri funcționali.

Această necesitate conduce la considerarea răspunsului sistemului,definit prin starea acestuia când se efectuează o anumită comandă (se cere realizarea uneia sau mai multor funcții). Acest răspuns poate fi precizat prin intermediul unor caracteristici funcționale: durată, deplasare, stare a unui element, amplitudinea, frecvența sau faza unui semnal etc.

Din punct de vedere funcțional, pentru toate răspunsurile posibile ale unui astfel de sistem, se poate face următoarea clasificare generală:

Răspunsuri corecte (în concordanță cu procesul):

– răspunsul ideal (I) este un răspuns optim, având o funcție de transfer egală cu unitatea;

– răspunsul perfect (P) are o funcție de transfer subunitară, însă cu valori ce se găsesc în domeniul de eroare specific măsurării sau controlului în sistem;

– răspunsul admisibil (A) are, de asemenea, o funcție de transfer subunitară, dar nu mai mică decât limita admisibilă pentru o funcționare considerată corectă.

Răspunsuri necorecte (în neconcordanță cu procesul):

– răspunsul eronat (E) are, de asemenea, o funcție de transfer subunitară, cu valori ce se găsesc sub limita ce corespunde unei funcționări corecte, fără a crea posibilitatea apariției unor evenimente grave în proces;

– răspunsul fals (F) se deosebește de răspunsul eronat numai prin faptul că poate crea posibilitatea apariției unor evenimente grave în proces (apariția lui trebuie evitată).

Pentru realizarea cu maximă eficiență a funcțiilor de protecție, în cadrul sistemelor cu mare răspundere funcțională, când este posibil în mod rațional, răspunsurile false sunt transformate în răspunsuri eronate.

Pe durata de existență a oricărei componente, în timpul funcționării echipamentului care o include, are loc un proces de uzură datorat, în primul rând, proceselor fizice și chimice care determină, inevitabil, o variație a parametrilor funcționali. Aceste procese au loc și în timpul când echipamentul nu funcționează propriu-zis, fiind în regim de așteptare; deteriorarea este permanentă, chiar și în condiții de depozitare sau conservare, evident, cu intensitate mai mică decât pe durata funcționării.

Prin urmare, deteriorarea componentelor se produce inevitabil, în general, cu viteze de variație diferite, din momentul ieșirii lor din procesul de fabricație până în momentul în care devin inutilizabile; toată această durată de existență, prin analogie cu organismele vii, se numește durată de viață.

În condiții reale de utilizare, componentele din structura echipamentelor sunt supuse unui ansamblu de solicitări. Pentru componentele electrice și electronice, ale echipamentelor pentru dirijarea circulației și navigației, principalele tipuri de solicitări sunt electrice, termice și mecanice (șocuri, vibrații etc.). Prin urmare, solicitarea reală este complexă și constă în aplicarea unor energii, dintre care cel puțin una este utilă în regimul de funcționare a echipamentului respectiv.

Dar, în afară de energii, componentele sunt supuse și unor influențe ale materialelor care există în mediul ambiant: aer, vapori de apă, substanțe corozive etc. Prin pătrunderea acestora în masa componentelor se pot produce modificări ale unor proprietăți fizice utile; ca și în cazul energiilor, aceste solicitări se manifestă printr-un proces de uzură (deteriorare).

Indicatorii statistici și indicatorii probabilistici ai fiabilității echipamentelor

Analiza deteriorării pe baza proprietăților și proceselor fizice și chimice ale componentelor este extrem de laborioasă, iar evaluarea fiabilității pe această cale comportă un volum de încercări experimentale și de calcul excesiv de mare. Pentru acest motiv se recurge la o tratare utilizând metodele statisticii matematice si teoriei probabilităților. Astfel a apărut, și până în prezent s-a generalizat, conceptul probabilistic al fiabilității. În cadrul acestui concept se consideră defectările ca fiind evenimente a căror apariție se determină cantitativ, făra să intereseze cauzele singulare ale producerii lor. Dispărând legătura dintre procesele fizice si chimice (cauză) și deteriorare (efect), dispare și caracterul determinist al defectărilor. Caracterul aleatoriu rezultat, prin aceasta, este justificat și de numărul ridicat al elementelor de același tip ce există în electronică, domeniu în care s-au inițiat și s-au realizat cele mai avansate studii de fiabilitate.

Dacă se înregistrează numărul de defectări produse în unitatea de timp Δt (oră, zi, lună, an etc.), se poate trasa histograma frecvenței statistice de repartiție a defectărilor, a cărei expresie este:

unde Δn(t)/Δt este numărul de componente care s-au defectat în unitatea de timp, iar N este numărul total de componente supuse la încercare.

Reprezentarea grafică a acestei funcții statistice (ce are dimensiunea unei frecvențe) este redată prin linii continue unde ordonata poate fi marcată, de exemplu, în procente, iar abscisa în unități de timp convenabil alese.

Echivalentul statistic al probabilității de defectare, care se mai numește și proporția defectărilor, se determină prin însumarea valorilor frecvenței de repartiție a defectărilor într-un anumit interval de timp [0, t]:

unde s-a notat cu n numărul de componente care s-au defectat în intervalul de timp [0, t] considerat; se observă că acest parametru este adimensional.

Rata (intensitatea) statistică de defectare reprezintă o altă funcție și are dimensiunea t-1(ca și frecvența de repartiție a defectărilor, cu care se află în strânsă dependență). Spre deosebire de funcția f*(t), intensitatea de defectare se definește prin raportul dintre numărul de elemente defectate în unitatea de timp și numărul de elemente rămase în stare de funcționare (valide), la începutul intervalului de timp examinat.

Echivalentul statistic al probabilității de funcționare (funcției de fiabilitate) se obține cu ajutorul raportului dintre frecvența de repartiție a defectărilor și rata de defectare:

Prin analogie cu F*(t), acest parametru exprimă “proporția nedefectărilor” și, deasemenea, nu are dimensiuni fizice. Media statistică a timpului de funcționare se obține cu ajutorul funcției f*(t):

unde ti – ti-1 = Δt = const. și reprezintă suma produselor dintre toate valorile timpului de apariție a defectărilor și frecvența de defectare, corespunzătoare acestor valori.

Calcul de fiabilitate

Pentru calculul de fiabilitate se utilizează tabelul de mai jos, care redă limitele domeniilor de valori pentru intensitatea (rata de defectare) nominală (ƛ0). Pentru conexiuni clasice cu conductoare metalice, monofilare sau lițate, se consideră că intensitatea de defectare este practic nulă; influența lor fiabilistă este inclusă prin capete la suduri cu fludor, conectori etc..

Tabel – Rata de defectare

Pret estimativ al realizarii practice

Lista cu componentele utilizate pentru realizarea acestui proiect :

Tabel – Preț componente

Prețul de achiziție al componentelor este de 457.53 RON/115.89 USD

Bibliografie

Iulian Bădescu, notițe de curs Microcontrolere.

http://ro.wikipedia.org/wiki/PHP

http://decode.ro/ro/tehnologii.html

http://cs.curs.pub.ro/wiki/asc/asc:lab1:index

http://ro.wikipedia.org/wiki/Interfa%C8%9Ba_serial%C4%83_SPI

http://www.scritub.com/stiinta/informatica/Arhitectura-Orientata-Servicii95164.php

http://www.mcu-labs.com/2012/05/interfata-asincrona-usart.html?m=1

http://ro.wikipedia.org/wiki/HyperText_Markup_Language

Wikipedia Bluetooth, http://ro.wikipedia.org/wiki/Bluetooth

http://ro.wikipedia.org/wiki/MySQL

http://forum.pompierii.info/subiect-112-sistemul-national-unic-pentru-apeluri-de-urgenta?pid=16081

http://www.heero-pilot.eu/view/ro/ecall.html

http://ro.wikipedia.org/wiki/Cascading_Style_Sheets

http://www.rasfoiesc.com/business/transporturi/Sisteme-avansate-de-control-al24.php

Similar Posts