Documente Academic
Documente Profesional
Documente Cultură
REŢELE DE SENZORI
Lucrări practice de laborator
Editura
NAUTICA
ALEXANDRU CARANICA
REŢELE DE SENZORI
Lucrări practice de laborator
Editura
NAUTICA
Copyright © 2014, Editura NAUTICA
Editura NAUTICA
Editură recunoscută de CNCSIS
Str. Mircea cel Bătrân nr.104
900663 Constanţa, România
tel.: +40-241-66.47.40
fax: +40-241-61.72.60
e-mail: info@imc.ro
www.edituranautica.org.ro
ISBN:
ISBN 978-606-8105-05-5
978-606-681-028-9
Cuprins
Laboratorul 1
5
Scopul lucrării
Laboratorul de față, introductiv, oferă definiții și o privire de ansamblu asupra achizițiilor de
date prin rețele de senzori (atât mediul de transmisie wireless cât și cablat).
Se vor defini o parte din termenii folosiți pe parcursul acestui laborator, urmând o scurtă
introducere a plăcilor de dezvoltare educaționalece vor fi utilizate.
Introducere
Dezvoltarea reţelelor informatice a făcut posibilă interconectarea la distanţă a diverselor
componente ale unui sistem de măsurare, apărând conceptul de sistem distribuit de măsurare. În
cadrul acestor sisteme distribuite, componentele sistemului posedă inteligenţă proprie, fiind
capabile de acţiuni şi prelucrări independente, subordonate sau lucrând în cooperare cu un master.
6
Desigur, utilizarea tehnologiei fără fir aduce cu sine o serie de probleme, cum ar fi
sensibilitatea la perturbaţii, rată de erori mai ridicată, întârzieri ale semnalului şi posibilitatea
interceptării, însă aceste dezavantaje pot fi în cele mai multe cazuri evitate. Echipamentele utilizate
sunt de tipul Platform-in-Package (PIP), care conţin toate părţile componente pe o placă, ce poate fi
extinsă prin adăugarea de componente suplimentare.
Achiziţia de date reprezintă procesul de obţinere a datelor de la o altă sursă, de obicei una
exterioară sistemului. Ea se poate realiza prin detectare electronică - cum ar fi în reglarea proceselor
sau în comunicatii, sau prin introducerea datelor de la terminale cum ar fi prelucrarea “batch” a
bazelor de date. În lucrarea de faţă, achiziţia de date se referă mai ales la domeniul tehnic:
măsurarea unor mărimi şi prelucrarea rezultatelor acestor măsurători.
Cele mai multe dintre sistemele moderne de achiziţie de date utilizează un procesor dedicat
pentru achiziţionare, eşantionare şi prelucare (DSP). Ţinând cont de cele enunţate mai sus, structura
tipică a unui sistem de achiziţie de date ce are la bază un sistem embedded sau DSP este următoarea
(figura 2):
senzorii au traductori care convertesc fenomenul fizic într-un semnal electric ce poate fi
măsurat;
circuite de adaptare a semnalului pentru izolarea, convertirea şi / sau amplificarea
semnalului provenit de la traductor;
un subsistem de achiziţie de date (care poate include multiplexoare şi convertoare analog -
digitale);
un sistem de calcul;
soft sau firmware (la cele integrate) pentru achiziţia de date.
7
Fig. 2: Structura unui sistem de achiziţii de date
Pentru a putea detecta şi măsura mărimile fizice variabile (cum ar fi temperatura, presiunea,
etc), se folosesc traductoare care convertesc mărimea fizică într-un semnal electric pe care îl
transmit fie unui circuit de adaptare, fie direct plăcii de achiziţie de date. O funcţie foarte importantă
a circuitelor de adaptare este filtrarea. Scopul unui filtru este acela de a îndrepta semnalele nedorite
(zgomotul) din semnalul pe care dorim să-l măsuram.
8
Reţele şi tehnologii wireless pentru achiziţiile de date
Deşi aptitudinile unui singur dispozitiv sunt limitate, împreunarea a sute de astfel de
dispozitive conferă posibilităţi tehnologice majore. În acest sens, este descrisă o reţea wireless mai
specială, diferită de reţelele ad-hoc sau de calculatoare, o reţea cu senzori, cunoscută ca WPAN, ale
cărei caracteristici o recomandă pentru dezvoltarea de sisteme de achiziţie wireless.
Reţelele de senzori bazate pe comunicaţii wireless pot fi clasificate în mai multe moduri, fie
în funcţie de caracteristicile de bază, fie în funcţie de dimensiunea reţelei (figura 4). Caracteristicile
de bază ale reţelelor de senzori wireless sunt:
posibilitatea de re-organizare;
comunicaţii broadcast pe distanţe mici şi rutare multi-hop;
densitatea mare şi efortul colaborat ale nodurilor de senzori;
schimbarea frecventă a topologiei datorită efectelor de propagare şi a căderii nodurilor;
limitări ale energiei, puterii de transmisie, dimensiunii memoriei, puterii de calcul.
Aceste caracteristici, în special ultimele trei, diferenţiază reţelele de senzori de alte reţele ad-
hoc sau de tip plasă (mesh). Atuul de bază a acestor reţele wireless cu senzori constă în abilitatea de
9
a distribui un număr mare de noduri mici şi foarte mici care să se auto-organizeze şi să se auto-
configureze în reţea. În funcţie de distanţa de transmisie, există 4 clase de bază: BAN (reţele de
proximitate, 1 – 2 m), PAN (reţele personale, 10 – 20 m), LAN (reţele locale, până în 100 de m) şi
WAN (reţele vaste, peste 500 de m). Reţelele ad-hoc vaste sunt reţele wireless mobile multi-hop
care ridică multe provocări ce urmează a fi rezolvate în viitor. Reţele ad-hoc multi-hop mai mici,
adică LAN, PAN şi BAN prezintă interes şi pot extinde raza de acţiune a tehnologiilor de reţea ad-
hoc de-a lungul a câtorva hop-uri radio. Tehnologiile wireless destinate mediului LAN cunosc o
ascensiune rapidă (de exemplu, Wi-Fi), care conferă conexiuni mobile şi nelimitate la serviciile de
date ale Internet-ului (figura 5). Totuşi, echipamentele destinate mediilor WLAN consumă multă
putere şi pot avea o rază de acţiune mai mult decât necesară. Aşadar a apărut conceptul de PAN,
care poate permite dispozitivelor vecine să comunice informaţii între ele în mod dinamic şi cu
consum minim de putere (o astfel de tehnologie este ZigBee).
Echipamentele şi dispozitivele conectate între ele fără fir, ce comunică prin intermediul
canalului aerian, formează o reţea wireless. În funcţie de aria de acoperire, reţelele wireless se
împart în mai multe clase, dar interes pentru comunicaţiile industrial prezintă doar primele două:
10
Figura 6: Împărţirea familiei de standarde wireless IEEE 802
Utilizând o tehnologie mult mai simplă şi mai ieftină decât alte reţele wireless, cu
dimensiuni ale software-ului între 2 % şi 10 % din cele pentru un nod Bluetooth tipic, reţelele
ZigBee sunt destinate aplicaţiilor cu consumuri foarte mici de putere (schimbarea bateriilor se poate
face în unele cazuri doar o dată la doi ani) şi care nu necesită rate mari de tranfer al datelor.
O reţea ZigBee poate fi utilizată într-o gamă largă de domenii, de la controlul industrial, reţelele cu
senzori integraţi, achiziţia de date medicale şi sistemele antiincendiu şi antiefracţie până la
automatizările din clădiri şi casele inteligente. Rata maximă de date este de 250 kbps. Ca un
rezumat, dispozitivele ZigBee sunt operţionale pentru caţiva ani inainte ca bateria să fie inlocuită.
Standardul ZigBee a fost dezvoltat pentru prima dată de ZigBee Alliance, organizaţie ce are
sute de companii membre. Această organizaţie a fost fondată in anul 2002, ca o organizaţie non-
profit, deschisă oricărui doritor să se alăture. Conceptul de a folosi comunicaţii wireless pentru a
aduna informaţii, ori pentru a efectua controale in înteriorul unei case sau a unei fabrici nu este nou.
11
Există cateva standarde pentru reţele wireless de rază scurtă, precum IEEE 802.11, Wirelles Local
Area Network (WLAN) şi Bluetooth. Fiecare dintre aceste standarde are avantajul său in anumite
tipuri de aplicaţii.
Un dispozitiv cu funcţii depline (FFD) este capabil să îndeplinească toate funcţiile descrise
în standardul IEEE 802.15.4 şi poate să deţină orice rol in reţea. Un dispozitiv cu funcţii reduse
(RFD) are capacităţi limitate (RFD poate comunica doar cu un dispozitiv FFD).
Într-o reţea IEEE 802.15.4, un dispozitiv FFD poate avea trei roluri diferite:
coordinator
coordonator PAN (router)
dispozitiv
Topologia unei reţele ZigBee este dată de straturile reţelei. Reţeaua trebuie să fie una dintre
cele trei tipuri de reţea specificate în standardul IEEE 802.15.4:
stea (star)
peer-to-peer sau mesh (punct la punct).
tree (arborescentă)
În topologia stea, figura 7, fiecare dispozitiv din reţea poate comunica numai cu
coordonatorul PAN.
12
Fiecare FFD dintr-o reţea peer-to-peer (figura 8) poate fi un coordonator PAN. O cale de a
decide care dispozitiv va fi coordonator PAN este de a alege primul dispozitiv FFD care începe să
comunice ca şi un coordonator PAN.
Dacă nu există nicio restricţie, reţeaua peer-to-peer este cunoscută ca o reţea cu topologia de
tip mesh. O altă formă de reţea peer-to-peer pe care ZigBee o suportă este aceea de topologie de tip
tree (arborescentă). În acest caz, coordonatorul ZigBee construieşte reţeaua iniţială. Figura 9 arată
un exemplu despre cum redirecţionarea unui mesaj poate ajuta la extinderea reţelei şi cum acesta
poate să ocolească o barieră.
13
Desfășurarea lucrării (ZigBee - DIGI® Gateway Development Kit)
Kitul conţine:
14
Fig. 11: XBee Wall Router (router, permite extinderea rețelei)
15
Fig. 13: Specificațiile tehnice ale senzorului Xbee
16
Pentru a configura iDigi Kit, trebuie să porniți coordonatoul de rețea, ConnectPort X4, care
va constitui nodul rețelei XBee. Pentru a realiza acest lucru, se parcurg etapele următoare:
4. Puneți în priza routerul ce permite extindere rețelei, XBee Wall Router. LED-ul verde
clipește în momentul în care se asociază cu coordonatorul (în mod implicit, acest router
caută cel mai apropiat coordonator de rețea, la care se conectează automat). Dacă niciun Led
nu este aprins, verificați bateriile.
17
5. Procedați la fel cu senzorul de rețea XBee.
Al doilea pas important îl reprezintă configurarea coordonatorului, Connect X4. Dacă ați
folosit un router cu serverul DHCP pornit, puteți lansa aplicația Digi Device Discovery pentru a
detecta automat dispozitivul (se anunță prin broadcast în rețea). Aplicația, dacă nu se află în PC, se
poate instala din kitul discovery40002265_G.exe:
18
Mediul de programare (IDE) Digi ESP™ for Python este bazat pe Eclipse, și simplifică
crearea de aplicații în limbajul Python pentru dispozitivele iDigi. De asemenea, conține multe
exemple de proiecte, ce pot fi integrate în aplicațiile pe care le dezvoltăm ulterior.
Se lansează aplicația Digi ESP for Python, pentru a fi se integra cu Connect X4. Dacă
aceasta nu este instalată, kitul se numește digi_esp_for_python_40002839_A.exe. Se configurează
spațiul de lucru:
3. Spațiu de lucru se încarcă. Welcome screen este afișat, împreună cu câteva exemple.
Dacă se ascunde Welcome tab, se poate reafișa din Help > Welcome:
19
iDigi DIA (Device Integration Application), este un pachet de clase scrise în Python, ce
simplifică lucrul cu senzoruu atașați la coordonator (senzorii XBee). De asemenea, permite scrierea
de aplicații de tip „cloud”, conectate prin iDigi Web Services API la serverele
http://developer.idigi.com.
1. Se deschide iDigi Dia Project Wizard din meniul File > New > iDigi Dia Project:
2. Pagina principală a „wizard-ului” conține o căsuță de tip text unde se va introduce numele
proiectului vostru. Restul setărilor se lasă pe default.
20
3. Urmează selecția dispozitivului coordonator. Dacă ați notat IP-ul anterior, alegeți butonul
New..., pentru a adauga dispozitivul:
21
5. Inițial nu este afișat niciun dispozitiv, pentru a-l adauga, apăsați butonul Device
Discovery pentru a-l cauta iar automat (se poate introduce și manual).
6. Aveți grijă să cautați dispozitivul în rețeaua Local Area Network:
22
8. Noua configurație va primi un nume generic, "ConnectPort X4" în acest caz. Lasați restul
setărilor la valorile implicite.
9. Apăsați Set Current pentru a seta configurația curentă ca și activă. Platforma Digi ESP for
Python va folosi această configurație pentru a seta mediul de lucru:
10. Urmați ferestrele următoare până la crearea proiectului, lăsând la valori implicite setările din
ferestrele respective:
23
11. La final, proiectul iDigi Dia va fi afișat:
24
12. Proiectul creat este afișat în zona Pydev Package Explorer:
13. Fișierul principal al proiectului, dia.yml, se va deschide și afișa în Smart Project Editor.
Fișierul conține elementele iDigi Dia (dispozitive, servicii, etc), ce vor fi folosite în proiectul
nostru:
14. Senzorul XBee și XBee Wall Router trebuie adaugate în proiect, pentru a putea fi
inițializate. Apăsați Add... pentru a începe să adaugați dispozitive.
Pentru senzorul Xbee, selectați „XBee Sensor” din lista de dispozitive, apoi apăsați butonul
Add.
Repetați procesul și pentru Xbee Wall Router.
În final, cele două dispozitive vor fi adăugate în sistem:
25
15. Se observă lipsa adreselor MAC pentru cele două dispozitive. Fără adresele MAC,
coordonatorul X4 nu poate comunica la nivelul 2 OSI cu cei doi senzori.
Pentru a adăuga MAC-ul senzorului XBee, selectați-l, după care apăsați butonul Select din
dreptul zonei adresei MAC.
XBee Device Discover se va deschide, și va căuta toți senzorii disponibili în zonă. Selectați
senzorul, câmpul se va autocompleta cu adresa dorită.
26
16. Repetați procesul și pentru Wall Router.
17. Configurarea este aproape gata, pentru o vizualizare mai rapidă a valorilor captate de la
senzori, este recomandat să schimbăm rata de eșantionare, de la 60000ms la 5000ms.
Acest lucru ne va permite să observăm mai ușor variația temperaturii citite de către senzor.
Acest lucru prezintă și un dezavantaj, bateria senzorilor se va consuma mai rapid. Trebuie
ținut cont de acest aspect, în proiectarea unei rețele de senzori.
27
Partea de configurare este gata, puteți salva proiectul.
1. Se apasă butonul Run, , din toolbar, se selectează optiunea Remote iDigi Dia, apoi
OK.
2. În timpul compilării, în partea de jos a IDE-ului pot fi urmărite mesajele de stare rezultate în
urma compilării. IDE-ul construiește aplicația, o copiază în coordonator, apoi îl repornește și
rulează aplicația:
28
Mediul de lucru acum afișează un tab adițional, Dia Web Presentation, cu aplicația noastră
rulând:
Exercitii:
29
30
Bibliografie
31
32
Rețele de senzori
Laboratorul 2
33
Scopul lucrării
IPSec este la ora actuală una dintre cele mai folosite metode de securizare a transmisiei pe
Internet, alături de SSL (Secure Sockets Layer) și TLS (Transport Layer Security). Avantajul major,
al protocolului IPSec, faţă de SSL şi TLS, se regăseşte în criptarea la nivelul 3 al stivei TCP/IP și la
nivelul 3 al stivei OSI, ceea ce face posibilă securizarea tuturor aplicațiilor care traversează o reţea
TCP/IP.
Se presupune că studenții au deja cunoștințe de rețelistică de bază (setare ip-uri, rute statice)
atât în sisteme Linux, cât și pe dispozitive de rețea dedicate (rutere și „switch”-uri). Aceste noţiuni
sunt necesare în configurarea iniţială a echipamentelor Mikrotik, folosite ulterior pentru stabilirea
tunelului IPSec.
Introducere
O reţea privată virtuală (VPN) reprezintă o conexiune criptată de date, ce foloseşte un tunel
sigur între capete, prin Internet. În anii `90, o companie care dorea securizarea comunicaţiei între
două sau mai multe locaţii, avea la dispoziţie tehnologii ca liniile închiriate telefonice, conexiuni de
tip Frame Relay, adesea costisitoare, oferind şi o lăţime de bandă limitată.
34
Noțiuni teoretice (arhitectura IPSec)
IPSec foloseşte următoarele seturi de protocoale pentru a realiza criptarea şi transportul datelor:
IPSec poate fi configurat pentru două moduri distincte: modul tunel şi modul transport.
În modul tunel, IPSec încapsulează pachetele IPv4 în cadre IP securizate, pentru transferul
informaţiei între două sisteme firewall, de exemplu.
În modul transport, informaţia este încapsulată într-un altfel de mod, încât ea poate fi securizată
între punctele terminale ale conexiunii, deci „ambalajul” nu ascunde informaţia de rutare cap-la-
cap. Modul tunel este cea mai sigură metodă de securizare, însă creşte gradul de încărcare a sesiunii
de comunicaţie, prin mărirea dimensiunilor pachetelor.
Permite controlul integrităţii şi securitate anti-reply (retransmiterea unor date, cum ar fi chei
pre-shared, din sesiune anterioare, cu scopul de a obţine acces în mod ilegal), dar nu şi
confidenţialitate (nu criptează datele). Folosirea AH în modul tunel este ilustrată mai jos:
În IPv4, AH este interpus între antetul IP ( incluzând orice opţiuni) şi antetul TCP.
35
Să examinăm acum antetul AH:
Câmpul Antetul următor este folosit pentru a păstra valoarea anterioară pe care a avut-o
câmpul Protocol IP, şi indică ce protocol de nivel înalt a fost protejat anterior. Valoarea acestuia
este luată din lista standard de protocoale (ex: 51 pentru AH, 6 pentru TCP, 17 UDP).
Câmpul Număr de secvenţă este folosit pentru a număra toate pachetele trimise pe un SA.
Fiecare pachet primeşte câte un identificator unic, chiar şi retransmisiile, cu alte cuvinte copia unui
pachet primeşte un număr diferit de cel original (chiar dacă numărul său de secvenţă TCP este
acelaşi). Scopul acestui câmp este de a detecta atacurile prin reply (retransmitere).
Date de autentificare este un câmp de lungime variabilă care conţine semnătura digitală.
Când este stabilit un SA, cele două părţi negociază algoritmul de semnare pe care îl vor folosi. În
mod normal, nu este folosită criptografia cu chei publice pentru că pachetele trebuie procesate
rapid, iar toţi algoritmii cu chei publice sunt prea lenţi. Deoarece IPsec este bazat pe criptografia cu
chei simetrice iar emiţătorul şi receptorul negociază o cheie partajată înaintea stabilirii unui SA,
cheia partajată este folosită în procesul de semnare. O modalitate simplă este de a calcula rezumatul
pentru un pachet şi cu cheia partajată. Desigur, cheia partajată nu este transmisă. O schemă ca
aceasta este denumită HMAC (Hashed Message Authentication Code).
Antetul AH nu permite criptarea datelor, deci este cel mai folosit atunci când este necesară
verificarea integrităţii dar nu este necesară confidenţialitatea. O proprietate demnă de notat a
antetului AH este aceea că verificarea integrităţii foloseşte o parte din câmpurile antetului IP, şi
anume, acelea care nu se schimbă când pachetul trece de la un ruter la altul. De exemplu, câmpul
Durata de viaţă se schimbă la fiecare ruter şi nu poate fi inclus în verificarea integrităţii. În orice caz
adresa sursă IP este inclusă în această verificare, un intrus neputând să falsifice originea pachetului.
O altă variantă de antet IPsec este ESP (figura 3). Criptează conţinutul pachetelor în două
moduri: transport (protejează doar conţinutul pachetului, nu şi header-ul) sau tunel (întreg pachetul
este criptat). Învelişul de securitate (ESP) - care furnizează confidenţialitate şi, în funcţie de
algoritmii şi de modurile folosite, poate furniza, de asemenea, integritate şi autentificare.
Antetul ESP conţine două cuvinte de 32 de biţi. Acestea sunt câmpurile Indexul
Parametrilor de Securitate şi, respectiv, Numărul de Secvenţă pe care le-am întâlnit la AH. Un al
treilea cuvânt care, în general, le urmează (dar care din punct de vedere tehnic nu este parte a
antetului) este câmpul Vector de Iniţializare, folosit pentru criptarea datelor; dacă nu se foloseşte
criptarea acest câmp este omis.
36
Fig. 3: (a) ESP în mod transport (b) ESP în mod tunel
Pe lângă autentificarea sursei, AH asigură numai integritatea datelor, în timp ce ESP, care
asigura până acum doar criptarea, acum asigură atât criptarea, cât şi integritatea datelor. Diferenţa
dintre integritatea datelor prin AH şi cea dată de ESP stă în scopul datelor care sunt autentificate.
AH autetifică întregul pachet, în timp ce ESP nu autentifică antetul IP exterior. În autentificarea
ESP, sumarul de mesaj se află în finalul pachetului, în timp ce în AH, sumarul se găseşte înăuntrul
antetului de autentificare.
Cele două antete, respectiv mecanisme de securitate, pot fi folosite independent unul de
celălalt, combinate sau într-un mod imbricat. Ele sunt definite în mod independent de algoritm
astfel încât algoritmii criptografici pot fi înlocuiţi fără ca alte părţi din implementare să fie afectate.
În mod implicit sunt specificaţi algoritmi standard, pentru asigurarea interoperabilităţii.
Asocierea de securitate este un ansamblu de date de tip nume de algoritm - cheie, care
reprezintă capabilitățile criptografice comune entităților participante la asocierea IPSec. Ansamblul
acestor seturi de asocieri de securitate pe un anumit calculator sau gateway este numit SAD -
Security Association Database, baza de date cu informații criptografice, de pe fiecare entitate IPSec,
în legătură cu celelalte entități conexe.
Pe fiecare entitate IPSec se mai găsește o a doua bază de date, numită SPD - Security Policy
Database, cu informații despre traficul care trebuie securizat, numit trafic interesant. Conținutul
bazei de date SAD este populat fie manual, de către administratorul acelui sistem, fie dinamic, prin
negocierea de IKE între entități, însă tot pe baza unui set predefinit de capabilități ale fiecărui
sistem.
37
securizat. În cazul în care sunt mai mult de doi participanți la asocierea de securitate, în cazul
traficului de tip multicast, asocierea de securitate este furnizată pentru întregul grup și este prezentă
pe fiecare sistem participant. Pot exista, deasemenea, mai multe asocieri de securitate pentru un
același grup de entități, fiecare cu diverse nivele de securitate în interiorul grupului.
Negocierea IKE este alcătuită din două etape sau faze, numite sugestiv Phase1 și Phase2.
Prima fază are rolul de a autentifica entitățile de IPSec, de a stabili o asociere de securitate și de a
deriva cheile Diffie-Hellman din care vor fi derivate ulterior cheile efective de criptate și/sau
autentificare pentru traficul de date. Prima fază are la rândul ei două variante sau moduri: modul
principal - main mode și modul agresiv - aggressive mode. Faza a doua este numită modul rapid -
quick mode.
ISAKMP (Internet Security Association and Key Management Protocol), este un protocol
de gestiune a cheilor pentru internet, la nivel de aplicaţie, independent de protocoalele de securitate
de la nivelele inferioare. ISAKMP are la bază tehnici derivate din mecanismul Diffie-Hellman
pentru schimbarea cheilor. O standardizare în structura de pachete şi în mecanismul de administrare
a cheilor duce la completa interoperabilitate a diferitelor soluţii VPN.
Schimbul de chei este un serviciu strâns legat de administrare a asocierilor de securitate, AS.
Când este necesară crearea unei AS, trebuie să se schimbe chei. Prin urmare ISAKMP le
împachetează împreună şi le trimite ca pachet integrat (figura 4).
Fig. 4: Mecanismul de criptarea a datelor IPSec utilizând chei publice şi chei private.
38
Desfășurarea lucrării
Din spatele reţelei RHQ se vor putea accesa toate locaţiile (site-urile) remote.
Fiecare router va primi o identitate (RHQ, RO1, RO2), pentru a fi mai uşor de identificat în
cadrul topologiei.
1. Se va conecta portul 1 (PoE) al routerului Mikrotik in Switch (toate grupele vor fi conectate
în Switch).
39
2. Individual, se va conecta cablul staţiei PC în unul din porturile libere din router.
3. Se rulează aplicaţia winbox.exe din directorul /home/student/Downloads (aplicaţia rulează în
subsistemul Wine de emulare Windows). Se selecteză router-ul din listă (click pe adresa
MAC):
40
8. Pentru a schimba subnetul fiecărei reţele, adresele IP cu cele ale grupei din care faceţi parte,
trebuie accesate o serie de meniuri, după cum urmează:
IP →DHCP Server, tabul Networks, modificăm setările trimise prin serverul DHCP, după
care ne asigurăm (tabul DHCP) că avem bifată opţiunea Add ARP for Leases:
41
IP → Routes, adăugăm o rută statică către gateway (trebuie să fie acelaşi GW pe toate
routerele, de exemplu, 10.10.10.100):
Testaţi conectivitatea între routere, din meniul Tools → Ping (trebuie să puteţi da ping către
toate ipurile WAN, 10.10.10.1 / 10.10.10.2 / 10.10.10.3):
Recapitulare:
După această configurare iniţială, fiecare grupă va avea următoare configuraţie: 3 routere,
unul central, RHQ, cu ip-ul WAN 10.10.10.1, ce va ţine două tunele IPSec, către locaţiile remote,
RO1 (10.10.10.2) şi RO2 (10.10.10.3).
În spatele fiecarui router, se vor afla reţelele interne, private, din clasa 192.168.2x.x.
Exerciţiu: încercaţi, din spatele routerului RO1 sau RO2, să accesaţi reţeaua privată din
spatele RHQ (ping către 192.168.21.1). Veţi constata că acest lucru este imposibil, routerul
mascând reţelele interne.
42
Următoarea etapă constă în stabilirea tunelelor IPSec, care vor lega cele doua „birouri” RO1
/ RO2 de RHQ.
Unde:
VPN IKE = Permite traficul pentru Internet Key Exchange (IKE), în stabilirea SA (Security
Association)
VPN NAT-T = Network address translation tunneling sau „NAT traversal in the IKE”,
permite trecerea pachetelor IPSec protected prin network address translation.
VPN IPSec ESP = Permite Encapsulating Security Protocol (ESP)
VPN IPSec AH = Permite Authentication Header (AH)
Pentru a rezolva această problemă, se foloseşte o tehnică denumită NAT bypass. Adăugăm
următoarele reguli în tabela NAT, pentru toate cele 3 routere, deasupra regulii masquerade
default:
43
Pentru RO1:
Pentru RO2:
Pentru RHQ:
Prin plasarea acestei reguli în topul tabelei NAT, când un pachet este direcţionat din LAN-ul
curent într-un subnet destinaţie peste VPN, regula „accept” va opri tabela NAT din
procesare, intrarea „masquerade” nemaifiind executată.
3. IP → IPSec: adăugam politica IPSec, pentru fiecare dintre routere. Mikrotikul central, cel în
rolul „headquarter”, va conţine două politici, pentru cele două tunele ridicate (RO1 şi RO2).
44
Politica RO1, conţine Src. Address, subnetul local trimis prin tunel, şi Dst Address,
destinaţia privată din spatele echipamentui central. În tabul Action, se bifează modul de
transport Tunnel. SA Src Address conţine ip-ul extern al RO1 (10.10.10.2) şi destinaţia
RHQ (10.10.10.1):
Politica RO2: paşii sunt identici cu RO1, veţi înlocui subnetul local cu 192.168.23.0/24 şi
IP-ul extern sursă (SA Src Address) cu 10.10.10.3
45
Politicile RHQ: routerul central va conţine două politici, deoarece se vor conecta două
echipamente, de aici şi necesitatea a două tunele.
Tabul Action:
4. „Peer add”: următorul pas constă în adăugarea informaţiilor necesare despre SA, despre
„peer” sau legătura acceptată, cheia pre-shared, grupurile Diffie-Hellman, algoritmii criptare
Phase 1.
46
Tabul Peers pentru RO1: se adaugă un peer nou, ce va conţine la adresă ip-ul destinaţie, al
RHQ, şi parola pre-shared pentru phase1. Se bifează si NAT Traversal:
Pentru RO2, tabul Peers va conţine aceleaşi setări, deoarece acceptăm tunelul din acelaşi
punct, de la „sediul central” RHQ.
Pentru RHQ, se vor introduce două reguli pentru peers, deoarece acceptăm conexiuni de la
„ambele sedii remote”:
47
5. Pentru a testa configurarea tunelului, incercaţi din Lxterminal, din spatele RO1, să accesaţi
LAN-ul RHQ. Conexiunea e bidirecţională, din subnetul RHQ puteţi accesa şi RO1 şi RO2:
Verificarea ridicării celor două tunele se poate uşor vedea în tabul Installed SA. E
recomandat să se verifice pe routerul RHQ, unde vor apărea ambele tunele (vor apărea 4 intrări, câte
două per tunel):
Tunelul se „ridică” în momenul în care se identifică „interesting traffic”, atunci când politica IPSec
indetifică pachete cu destinaţia unui subnet extern.
48
Pentru depanare, se poate activa IPSec logging:
System → Logging: se adaugă o regulă nouă, unde se alege traficul de tip IPSec pentru
inspecţie:
Din tabul Actions, se poate mări numărul de linii reţinute de bufferul memoriei logging:
49
Bibliografie
50
Rețele de senzori
Laboratorul 3
51
Scopul lucrării
Laboratorul de față își propune să familiarizeze studentul cu microcontrollerul Atmega328,
de la Atmel, pe arhitectura AVR (arhitectură RISC - Alf and Vegard RISC).
Scopul final este de a folosi acest microcontroller pentru a controla radiourile XBee de la
Digi, pentru a prelucra datele de la senzori înainte de a fi transmise radio prin 802.15.4.
Pentru mai multe detalii despre arhitectura unui microcontroller, consultati cursul
„Arhitectura Microprocesoarelor”.
Introducere
Famila AVR de la Atmel este formată din microcontrollere cu arhitectura Harvard pe 8 biţi
şi set redus de instructiuni (RISC). Diferenţa dintre CISC şi RISC nu constă nicidecum doar în
numărul de instrucţiuni executabile ci se manifestă mai ales în structura internă şi în modul de
funcţionare.
Ele au fost introduse pe piaţă în 1996, fiind printre primele controllere care foloseau
memoria Flash pentru program, în locul memoriilor OTPROM sau EPROM, folosite de competiţie.
1. tinyAVR
1-8 kB memorie de program
capsula de 8 pana la 32 pini
set limitat de periferice
2. megaAVR
4-256 kB memorie de program
capsula de 28 pana la 100 de pini
set extins de instructiuni (instructiuni pentru inmultire si adresare indirecta)
set extins de periferice
3. XMEGA
16-256 kB memorie de program
capsula de 44 pana la 100 de pini
interfete performante extinse, ca DMA, "Event System", si support pentru
criptografie
set extins se periferice
52
Memoriile Flash, EEPROM, şi SRAM sunt integrate în acelaşi chip, înlăturând nevoia de
memorie externă.
Programul este format din instrucţiuni de 16 biţi lungime care sunt stocate în memoria Flash
nevolatilă.
AVR conţine o unitate de execuţie în banda de asamblare cu trei nivele, acest lucru
permiţând ca urmatoarea instrucţiune să fie adusă din memorie (fetch) în timp ce instrucţiunea
curentă este în execuţie. Majoritatea instrucţiunilor se execută într-un singur ciclu de instrucţiune,
acest lucru permiţând atingerea unei puteri de procesare de 1MIPS pe MHz. Un avantaj faţă de
celelalte familii concurente de µC în constituie faptul ca arhitectura AVR este optimizată pentru
execuţia de cod C compilat.
Arhitectura AVR
53
GPR - regiştrii de uz general, regiştrii de lucru ai microcontrollerului. Prelucrarea datelor pentru
arhitectura AVR este restricţionată la utilizarea cel puţin a unui registru de uz general.
Arduino UNO
Arduino UNO este o platformă de procesare open-source, bazată pe
arhitectura AVR, pe microcontrolerul ATmega328. E o platformă de mici
dimensiuni (6.8 cm / 5.3 cm), construită special pentru entuziaşi şi mediul
academic, fiind capabilă de a prelua date din mediul înconjurător datorită
multitudinii de porturi de intrare disponibile, atât digitale cât şi analogice. Procesorul este capabil să
ruleze cod scris într-un limbaj de programare care este foarte similar cu limbajul C++.
Scopul acestei platforme hardware open source este de a crea rapid prototipuri de aplicaţii,
atât hardware cât şi software, fără a trece prin chinurile iniţializării unui microcontroller, sau de a
crea platforma hardware.
Este ideal pentru laboratorul de Reţele de senzori, scopul nostru fiind de a evidenţia
funcţionarea practică a radiourilor XBee de la DIGI.
54
Microcontrollerul fiind produs de Atmel, acesta se programează în mod uzual în Atmel
Studio 6:
Atmel Studio este un IDE mai neprietenos, din acest motiv, platforma Arduino vine cu
propriul mediu de programare, Arduino IDE, bazat pe limbajul Processing, dezvoltat începând din
2001 la MIT Media Lab.
Platforma curentă va folosi IDE-ul Arduino. Pentru detalii legate de folosirea Atmel Studio
6 cu Arduino, puteţi consulta ghidul următor:http://www.engblaze.com/tutorial-using-atmel-studio-
6-with-arduino-projects/.
55
Modalităţi de comunicare între microcontroler şi componente
Interfeţe seriale:
56
Desfășurarea lucrării
Verificare / Instalare driver FTDI USB
Vă asigurați că placa Arduino UNO este conectată la calculator, prin portul USB.
Verificați instalarea driverelor în PC, dacă acestea lipsesc, portul serial apare ca Unknown
device în Device Manager:
57
Dacă driverul s-a instalat cu succes, în device manager apare ca și port COM dispozitivul
Arduino. Rețineti portul (COM8 în exemplul de mai jos). Veți folosi acest port pentru conectarea la
microcontroler:
Configurare IDE
58
Din Fișier (File) → Preferințe (Preferences) verificați următoarele setări:
Tools → Serial Port, alegeți portul de comunicare, pe care a fost instalat driver-ul (COM8 în
exemplu).
Mediul de programare este setat. Se poate observa ușurința cu care se realizează acest lucru
cu Arduino, spre deosebire de alte medii de programare cu microcontroler. La final IDE-ul, în
partea de jos, trebuie să se evidențieze placa pe care lucrăm + portul de comunicație:
59
Mediul de lucru
Dacă am face un circuit imprimat similar breadboard-ului, acesta ar avea desenul cablajului
ca în figura din dreapta:
60
I. Anatomia unui program Arduino
Orice program Arduino are două secțiuni. Secțiunea "setup", care este rulată doar o singură
dată, atunci când placa este alimentată (sau este apăsat butonul "Reset"), și sectiunea "loop", care
este rulată în ciclu, atâta timp cât este alimentată placa. Secțiunea setup reprezintă în fapt
inițializarea microcontrollerului. Să luam un exemplu:
void setup() {
// codul scris aici rulează o singura dată
}
void loop() {
// codul scris aici ruleaza tot timpul, în buclă
}
Astfel, în rutina "setup" vom pune de obicei cod de inițializare, iar în rutina "loop" vom scrie
partea principală a programului nostru.
Rulați programul de mai sus în IDE-ul Arduino, apoi scrieti-l pe placă folosind butonul
UPLOAD din bara principală! Codul de mai sus este echivalent cu ștergerea informației din
microcontroller, acesta nemaiexecutând nimic.
Pentru cel de-al doilea exemplu Arduino, vom folosi un led montat din fabricație pe placa de
bază. Placa Arduino are din construcție un led conectat la pinul digital 13. Acest led se aprinde
atunci cand pinul 13 digital este pus în starea HIGH, și se stinge atunci cand pinul 13 este pus în
starea LOW.
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
În secțiunea "setup" avem o singura instrucțiune, care declară că pinul 13 digital va fi folosit
în continuare pentru a controla un dispozitiv, o ieșire (OUTPUT).
Dacă am fi vrut să citim o informație din mediul exterior, o citire de port de exemplu – am fi
declarat pinul ca unul de intrare (INPUT) - "pinMode(13, INPUT)"). Această instrucțiune se
execută o singură dată.
61
II. Exemplu LED
În următorul exemplu vom folosi breadboardul pentru a crea un circuit simplu, încercând să
aprindem un led conectat pe breadboard.
Opriți alimentarea la USB de fiecare dată când legați conectori la porturile de intrare ale
Arduino!!!
62
Modificați pinul led-ului în aplicație, modificați circuitul, scrieți programul apoi rulați-l pe
microcontroler. Ce observați?
63
Schema rulează următorul cod:
void setup()
{
void loop()
{
animatie();
}
void animatie(){
int intarziere = 100; //se defineste 100ms interval intre aprinderea si
stingerea unui led
for(int i = 0; i <8; i++){
int stopLED = i - 1; //calculeaza care a fost ultimul led aprins
if(i == 0) { //in cazul in care procesul se reia se stinge ultimul LED
stopLED = 7;
}
digitalWrite(LED[i], HIGH); //se aprinde un nou LED
digitalWrite(LED[stopLED], LOW); //se stinge ultimul LED
delay(intarziere);
}
}
Observație: În loc de LED-uri puteți folosi un LED Bar Graph, ca cel de mai jos:
64
IV. Citire analogică
În exemplul următor vom citi valoarea unui potențiometru variabil, pentru a aprinde o serie
de LED-uri, în funcție de valoarea tensiunii raportată la intrarea portului microcontrolerului.
Valoarea tensiunii este direct proporțională cu valoarea rezistenței potențiometrului.
Pentru ușurință, este recomandat să folosim un LED Bard Graph, componentă echivalentă
cu 10 LEDuri.
65
Schema rulează următorul cod:
int ledPins[] = {
2, 3, 4, 5, 6, 7,8,9,10,11 }; // an array of pin numbers to which LEDs are
attached
void setup() {
// loop over the pin array and set them all to output:
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop() {
// read the potentiometer:
int sensorReading = analogRead(analogPin);
// map the result to a range from 0 to the number of LEDs:
int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
66
V. Display 16x2 paralel, compatibil Hitachi HD44780
register select (RS) pin, controlează locația de memorie din LCD unde scriem datele.
Read/Write (R/W) pin, selectează modul scriere sau citire din LCD.
Enable pin, permite scrierea în registrii LCD-ului
8 pini de date (D0 -D7). Starea acestor pini (high sau low), reprezintă biții de date pe care-i
trimitem sau citim de la display.
pin (Vo), pentru contrast (reglabil prin potențiometru)
Pini de alimentare și împământare (+5V și Gnd)
Pinul 15, pentru backlight
Observație: dacă nu se aprinde lumina de fundal a LCD-ului, legați la 5V pinul 15, cu o rezistență
de sarcină în serie (pentru LCD-ul cu backlight, legați pinul 15 la 5V, pinul 16 la GND).
Cu ajutorul potențiometrului reglați contrastul display-ului.
67
Codul pentru microcontroller este următorul (îl puteți încărca din File → Examples →
LiquidCrystal → HelloWord):
/*
LiquidCrystal Library - Hello World
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis()/1000);
}
Rulați aplicația.
68
Cum am menționat în introducerea teoretică, I2C este un protocol de comunicare serială de 2
fire, SDA (Data) și SCL (Clock) fiind pinii necesari. Pe Arduino UNO, SDA e pinul analog 4, SCL
fiind pinul 5. Pe alte microcontrolere din gama Arduino (Mega de exemplu), SDA se află pe pinul
digital 20, SCL pe 21.
Senzorul are un pin de adresă (ADD0), ce este folosit pentru a schimba adresa senzorului.
Acestă adresă este folosită în cazul în care se dorește a se interoga independent mai multi senzori,
pe aceeași magistrală. Prin împământarea acestui pin, senzorul primește automat adresa 72 (0x48 în
hex). Alimentând senzorul, prin conectare la V+ (3.3V), adresa primită devine 73 (0x49 în hex). În
schema prezentată mai jos, legăm senzorul la masă, de aceea această adresă trebuie inițializată de
noi, prin codul: int tmp102Address = 0×48;
Schema circuitului:
Exemplu cod citire temperatură (a se observa afișarea acestor informații folosind comunicarea
serială cu PC-ul):
#include <Wire.h>
int tmp102Address = 0x48;
void setup(){
Serial.begin(9600);
Wire.begin();
}
void loop(){
69
float fahrenheit = (1.8 * celsius) + 32;
Serial.print("Fahrenheit: ");
Serial.println(fahrenheit);
float getTemperature(){
Wire.requestFrom(tmp102Address,2);
Exemplu: http://www.adafruit.com/blog/2012/08/27/how-to-install-and-use-the-adafruit-fritzing-
library/
70
Bibliografie
71
72
Rețele de senzori
Laboratorul 4
73
Scopul lucrării
Laboratorul de față își propune să familiarizeze studentul cu radiourile de la Digi
International, XBee Series 2, cu scopul de a-și crea o rețea MESH, formată dintr-un coordonator și
mai multe routere sau end-point devices.
Se are în vedere și testarea acoperirii radio, prin măsurarea parametrului RSSI, și raza
maximă pe care o acoperă aceste emițătoare ZigBee.
Introducere
Hardware-ul XBee Series 2 folosește un chip de la Ember Networks, ce permite crearea mai
multor topologii de rețea standardizate Mesh. Topologia Mesh stă la baza construirii unor rețele
robuste, rezistente la factori perturbatori, cu posibilitatea de a colecta și transporta o colecție imensă
de date de la senzori.
Xbee Series 2:
74
FTDI convertor (pentru programarea prin Virtual COM Port):
Desfășurarea lucrării
Verificare / Instalare driver FTDI USB
Pentru programarea XBee, vom folosi un convertor denumit adapter board, de la Sparkfun
Electronics.
75
Este un convertor paralel-serial, de tip UART, pentru asigurarea comunicării seriale prin
USB. Pentru aceasta, trebuie să instalăm drivere-le FTDI USB Drivers.
Verificați instalarea driverelor în PC, dacă acestea lipsesc, portul serial apare ca Unknown
device în Device Manager:
76
Configurarea echipamentelor:
Se va implementa următoarea topologie:
X-CTU
77
Configurarea routerului (Mod AT):
Se alege portul COM al radioului pe care-l configurăm ca și router. Dacă folosim același PC
pentru configurarea mai multor radiouri, trebuie să fim atenți la selecția corectă a portului COM.
Ne sunt afișate informații despre tipul modemului, versiunea de firmware și seria radioului.
De asemenea aceasta fereastră confirmă comunicarea corectă cu dispozitivul.
Dacă radioul nu poate fi interogat, acesta trebuie restaurat la setările din fabrică (acest lucru
se realizează din TAB-ul Modem configuration, selectând firmware-ul corect și apăsând pe WRITE,
cu radioul scos din adaptor. Se introduce radio-ul în sochet în momentul în care apare mesajul de
eroare comunicare).
78
Pasul următor în reprezintă configurarea parametrilor de comunicație, din tabul Modem
Configuration:
Se citesc parametrii existenți (READ), după care se resetează (RESTORE) la setările din
fabrică.
Se alege ca funcție (Function Set): ZIGBEE ROUTER AT, ultima versiune (se descarcă
ultimele versiuni din Download new versions...).
79
Configurarea coordonatorului (Mod AT):
Primi pași sunt identici cu cei de la router. Diferă tabul modem configurațion.
80
Testarea rețelei:
Se folosește tabul Terminal din aplicația X-CTU (se pornește de două ori aplicația, pentru
fiecare radio conectat):
81
Test raza acoperire (Range TEST)
Pentru a intra în modul programare:
Pentru a comuta dizpozitivul în modul de comanda, tastați +++ fără carriage return (enter).
Când modemul intră în modul de programare, mesajul OK este afișat:
Pentru a testa raza de acțiune, trebuie să configurăm XBee-urile pentru a trimite pachete de
loopback către gateway.
După folosim tabul Range Test. Apăsăm START și selectăm received signal strength indicator
(RSSI).
82
Comanda atci12 (Destination Cluster ID=12) setează ID-ul clusterului în pachetele
transmise de către modulul XBee. Pachetele trimise cu acest cluster ID (12), sunt retransmise către
sursă (origine), atunci când destinatarul le primește (ACK în modulul XBee din gateway).
83
Exercițiu:
Pentru acest exercițiu vom folosi Arduino pentru a citi datele de la un senzor de temperatură.
Aceste date le vom transmite prin radioul XBee la distanță, către al doilea Arduino, ce va conține un
display, pentru afișarea temperaturii.
Pentru a citi datele de pe linia serială, puteți folosi următorul exemplu de cod:
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available() > 0) {
Serial.write(Serial.read());
}
}
84
Bibliografie
1. http://www.adafruit.com/blog/2012/08/27/how-to-install-and-use-the-adafruit-fritzing-
library/
2. http://bildr.org/2011/01/tmp102-arduino/
3. http://arduino.cc/en/Tutorial/HomePage
4. http://www.roroid.ro/wiki/
5. http://en.wikipedia.org/wiki/Atmel
6. http://www.atmel.com/products/microcontrollers/avr/default.aspx
7. Clubul Ingineresc Micro LAB: Introducere in Arhitectura Microcontrolelor
8. https://www.sparkfun.com/tutorials/192#defaults
9. http://tunnelsup.com/tup/2012/11/30/xbee-s2-quick-reference-guide-cheat-sheet/
10. http://www.youtube.com/watch?annotation_id=annotation_262505&feature=iv&src_vid=od
ekkumB3WQ&v=mPx3TjzvE9U
85
86
Rețele de senzori
Laboratorul 5
87
Scopul lucrării
Laboratorul de față își propune să familiarizeze studentul cu citirea și prelucrarea datelor de
la periferice și senzori externi, conectați la microcontrollerul Arduino. Datele vor fi prelucrate în
Matlab.
Scopul final este de a expune studenților diverse protocoale de comunicare serială, folosite
în aparatura industrială, precum și generarea interfețelor GUI pentru sistemele SCADA.
Introducere
Interfețe specializate de comunicație
Tehnicile de măsurare pot fi implementate la nivel fizic prin blocuri funcţionale cu destinaţie
precisă (aparatele de măsurare) sau prin module care pot realiza funcţii multiple (eşantionare,
conversie, memorare) şi a căror selecţie este făcută de o unitate centrală (eventual PC). În cazul
aparatelor de măsurare numerice, dotarea acestora cu interfeţe de comunicaţie (serială sau paralelă)
permite interconectarea lor cu unităţi de calcul puternice şi, deci, lărgirea considerabilă a ariei
funcţiilor ce pot fi efectuate de sistemul astfel realizat. Aparatele numerice memorează datele sub
formă de caractere reprezentate adesea pe 8, 16 sau 32 de biţi. Biţii care formează un caracter se pot
transmite la distanţă către un alt sistem numeric fie prin transmiterea simultană a câte 8 biţi
(comunicaţie paralelă), fie prin transmiterea succesivă a biţilor care formează un caracter
(comunicaţie serială). În primul caz, se utilizează 8 linii de date şi alte linii (conductoare) pentru
semnalul de referinţă (GND) şi cele de control al comunicaţiei.
În al doilea caz, informaţia prezentă de obicei sub formă paralelă este apelată de un registru
de deplasare paralel-serie, comandat de un semnal de tact, transmisă printr-o singură pereche de
conductoare şi apoi, la recepţie, reconstituită în format paralel prin intemediul registrului de
deplasare serie-paralel.
88
Denumirea RS-232 (mai exact, RS-232C) corespunde normei americane a interfeţei seriale,
normă propusă iniţial în 1960 şi devenită variantă standard în 1969, apoi remodificată în 1987.
Denumirea V24 este o prescurtare a normei franceze (şi recomandată CEI). În principiu, ambele
norme sunt identice.
În prezent există şi module dedicate comunicaţiei seriale performante, cum este RS-485 (de
tip plug-in) pentru care se poate asigura comunicaţia până la distanţa de 1,2 km, cu o viteză maximă
de transfer de 100 kHz.
Numeroase aparate utilizează conectarea la calculator prin intermediul interfeţei seriale RS-
232. Norma clasifică aparatele în două categorii:
1. DTE (Data Terminal Equipments) – categorie din care fac parte PC-ul, tastatura etc.
2. DCE (Data Communication Equipments) – modem-urile, aparatele de măsurare etc.
RTS (cerere de emisie) şi CTS (autorizare de emisie) sunt semnale care girează funcţionarea
half-duplex (HDX) - de exemplu, a liniei telefonice.
89
Fig. 5.1: Tipuri de conexiuni utilizate în interfaţarea serială: a) varianta minimală; b) varianta
handshake; c) handshake cu confirmare DTR şi DSR; d) transmisie cu punte pe semnalele de
handshake; e) conectarea unui plotter.
Viteza de transmisie este dată în BAUD. O altă unitate uzuală în cazul transmisiilor este
BPS (Bits Per Second). In cazul comunicaţiei seriale între două echipamente, exprimarea
vitezei de transmisie în BAUD şi BPS este identică. În cazul conectării lor prin intermediul
modem-urilor, însă, acest lucru nu mai este valabil.
90
Valorile uzuale pentru viteza de transmisie (Baudrate) sunt: 50 110 300 600 1200 2400
4800 9600 19200 38400.
Prin intermediul biţilor de start şi stop se determină începutul, respectiv sfârşitul secvenţei de
date transmisă. Numărul de biţi de date este, de obicei, 7 sau 8. Prin intermediul testului de paritate
se pot evidenţia eventualele erori de transmisie. În acest sens, există trei posibilităţi de detecţie:
În fig. 5.3 se descrie procesul de transmitere a caraterului “2” (în reprezentarea binară
corespunzătoare codului ASCII) cu protocolul “1 bit de start, 7 biţi de date, 2 biţi de stop, paritate
impară”.
91
Echipamente folosite în lucrare:
Arduino UNO:
Potențiometru analogic:
92
Desfășurarea lucrării
Cu ajutorul unei plăci Arduino, vom citi datele de la o intrare analogică, pe care o vom
exporta cu ajutorul portului serial (usb to serial converter) către Matlab. Capabilitățile de calcul ale
microcontrollerului ATmega328 sunt destul de reduse, cu siguranță nu putem efectua calcul
matriceal sau operații complexe, necesare în anumite proiecte de automatizare. Matlab, de exemplu,
este foarte bun în astfel de cazuri.
Se stabilește o comunicație de tip client – server, de aceea este nevoie să instalam în Matlab
un set de librării ce ne permite comunicarea bidirecțională cu microcontrollerul. De asemenea, în
memoria microcontrollerului, se va scrie o aplicație server ce va trimite / primi date din Matlab.
Utilizarea librăriei
Înainte de a scrie aplicaţii în Matlab, vă asiguraţi că placa este conectată la PC prin portul
USB, şi driverul FTDI-USB este instalat. De asemenenea, vă asiguraţi că portul COM folosit de
Arduino nu este deschis în alte aplicaţii (IDE Arduino, Putty, Serial Monitor, etc).
Din Matlab, se defineşte un obiect nou, de tip arduino, astfel: a=arduino('port'), unde
'port' este portul COM pe care este conectat microcontrollerul. În Windows, de exemplu, poate fi
COM3, COM5, etc. Se mai poate folosi si portul COM denumit 'DEMO', pentru a simula o
conectare.
93
Funcţia returnează:
Mai sunt câteva funcţii folositoare, a.serial returnează numele portului serial, a.flush pentru a
goli bufferul şi a.roundTrip, pentru a testa timpul de răspuns.
Exemplu:
a=arduino('COM5');
av=a.analogRead(5);
a.pinMode(13,'output');
a.digitalWrite(13,1);
delete(a);
94
Cu ajutorul librăriei din Matlab, putem citi şi afişa în timp real variaţia potenţiometrului.
Convertorul A/D, de la portul analog 0, eşantionează semnalul primit în intervalul 0-1023.
while(t<interv)
b=a.analogRead(0);
x=[x,b];
plot(x);
axis([0,interv,680,800]);
grid
t=t+rez;
drawnow;
end
95
Bibliografie
96
Rețele de senzori
Laboratorul 6
97
Scopul lucrării
Laboratorul de față își propune să familiarizeze studentul cu Linux, un sistem de operare în
timp real. Se are în vedere folosirea acestuia într-o aplicație embedded, pentru citirea unor senzori
I2C, prin porturile specifice dispozitivului ARM folosit (GPIO, placă de dezvoltare Raspberry PI).
Scopul final este de a expune studenților modalități prin care se pot construi aplicații
inteligente, de complexitate mai mare decât cele ce rulează pe microcontroller.
Introducere
Miniaturizarea şi creşterea puterii de procesare a unui sistem de calcul cu procesor este un
subiect interesant şi dificil pentru inginerii ce proiectează astfel de sisteme.
Majoritatea sistemelor de calcul întâlnite în ziua de azi au „migrat” din suportul unui
calculator obişnuit şi au fost integrate în alte dispozitive cum ar fi automobilele sau produsele
electronice de larg consum, formând ceea ce se cheamă un sistem embedded. Sistemele embedded
controlează majoritatea dispozitivelor întâlnite astăzi pe piaţă: telefoane mobile, echipamente reţea,
navigatoare GPS, console jocuri portabile, etc.
Termenul „embedded” este strâns legat de noţiunea de SoC. Un sistem embedded este un
calculator construit cu scopul de a îndeplinii anumite sarcini sau funcţii, de cele mai multe ori cu
constrângeri legate de viteza de operare, costul de producţie, etc. Un sistem embedded trebuie să
răspundă în timp real, pentru a oferi un grad de interactivitate ridicat şi să fie ieftin de produs.
De exemplu, un telefon mobil trebuie să fie accesibil unei game largi de utilizatori şi în
primul rând să îndeplinească o funcţie principală, aceea de a putea comunica prin voce. Telefonul
trebuie să fie uşor de utilizat şi să răspundă la comenzi într-un timp relativ scurt, de exemplu
apăsarea tastei de apel să iniţializeze apelul aproape instant. Un sistem embedded este de obicei
construit dintr-un SoC sau microcontroller şi foloseşte limbaje sau arhitecturi cu seturi de
instrucţiuni reduse, de tip RISC.
98
Arhitectura (ARM Advanced RISC Machine, fig 6.1) prezentată în această lucrare este cea
mai răspândită astfel de platformă folosită în sistemele integrate. La nivelul anului 2007, 98% din
cele aproape un miliard de telefoane mobile vândute foloseau cel puţin un procesor ARM. În 2009,
procesoarele de tip ARM sunt responsabile de echiparea a 90% din produsele de larg consum
embedded pe 32-bit, RISC.
Instrucţiunile sunt codificate în cod binar şi stocate în memorie; pentru a fi executate ele sunt
decodate de procesor. Instrucţiunile cele mai frecvente sunt cele aritmetice, logice şi de transfer. O
instrucţiune poate fi simplă sau complexă:
instrucţiunea de incrementare a unui registru intern este simplă; ea constă într-o adunare,
care se execută în interiorul procesorului şi este suficientă (în general) o singură perioadă de
tact pentru execuţie
instrucţiunea de incrementare a unei locaţii de memorie este o instrucţiune complexă;
operaţiile necesare sunt: selectarea celulei de memorie prin intermediul adresei, transferul
conţinutului ei în interiorul procesorului, într-un registru, incrementarea registrului,
transferul conţinutului înapoi în celula de memorie, la aceeaşi adresă. Desigur, sunt necesare
mai multe perioade de tact pentru execuţia unei asemenea instrucţiuni.
O instrucţiune simplă este executată direct de procesor prin intermediul unei unităţi
specializate (ca de exemplu UAL - unitatea aritmetică şi logică). Execuţia instrucţiunilor complexe,
în acelaşi mod, ar necesita un număr mare de unităţi specializate (pentru fiecare tip de instrucţiune,
o unitate specifică). Există însă o limită fizică şi anume numărul de componente ce pot fi integrate
într-un microprocesor, care, deşi foarte mare, nu permite decât realizarea unui set redus de unităţi
specializate. Ca urmare a fost adoptată altă soluţie, încă de la apariţia primelor microprocesore.
99
Fig 6.2: Etapele prelucrării instrucţiunilor
Ce este Linux?
Linux este un sistem de operare gratuit (open source), compatibil UNIX. UNIX este un
sistem multitasking şi multiuser, în care utilizatorii au acces la resursele calculatorului de la diferite
terminale, plasate local sau la distanţă, putând executa, teoretic, în mod concurent un număr
nedeterminat de programe (limitările apar datorită resurselor hardware limitate, mai ales în cazul
unui sistem SoC). Linux respectă standardul POSIX (Portable Operating System Interface [for
Unix]), suportă toată gama de aplicaţii GNU şi posedă o interfaţă grafică bazată pe X Window
System pentru sistemele desktop, de tip terminal pentru sistemele embedded sau servere.
100
Linux este de fapt o clonă de Unix. O clonă Unix este un sistem de operare care respectă
Single Unix Specification, dar care nu conţine componente din sursele initialte Unix. BSD-urile sau
Solaris sunt direct derivate din codul Unix şi pot fi denumite Unix-uri veritabile. Linux respectă
standardul POSIX.
Linux a apărut iniţial ca un proiect al lui Linus Torvalds, student pe atunci la Universitatea
din Helsinki. Prima versiune utilizabilă a fost lansată pe 5 octombrie 1991. Spre deosebire de alte
sisteme de operare, nicio firmă nu este proprietară a sistemului Linux. Mai mult decât atât, el este
protejat de Licenţa Publică GNU (GNU e o fundaţie care apără interesele autorilor de programe
gratuite), care stipulează faptul că se poate copia şi utiliza gratuit codul programelor, cu condiţia de
a se permite şi altora să facă acelaşi lucru.
Sistemul Linux este alcătuit propriu-zis dintr-un nucleu (kernel) peste care se pot adăuga un
număr nelimitat de programe, utilitare, servere. Este un sistem de operare complet, care conţine,
practic, orice tip de aplicaţie, putând astfel juca o varietate de roluri: server, desktop, sistem integrat
pe dispozitive embedded. După apariţia nucleului Linux, o multitudine de proiecte software, având
la bază acest kernel, au fost înfiinţate, numărul şi importanţa acestora crescând de la an la an. Un
nucleu este doar un mediator între aplicaţii si resursele hardware, este inutil de unul singur. Kernel-
ul Linux e constituit din câteva componente importante: managementul proceselor, a memoriei,
driverele pentru periferice, driver-ele pentru sistemele de fişiere, managementul reţelei plus alte
procese de management resurse. În figura 6.3 sunt ilustrare câteva părţi componente ale nucleului.
101
Echipamente folosite în lucrare:
102
Router Mikrotik RB-951g:
Desfășurarea lucrării
Raspberry PI poate fi considerat un mini-computer (capabil să ruleze Linux) de dimensiunea
unui card de credit, cu placă de rețea Ethernet inclusă, conector HDMI, 2 port-uri USB, 512 MB
RAM, procesor ARM la 700 MHz.
Pentru a putea fi utilizat, trebuie folosit un sistem de operare, pentru arhitectura ARM. Linux
exte cea mai bună alegere în acest caz, putând fi și personalizat pentru aplicațiile dorite.
Pentru acest laborator, vom alege o distribuție bazată pe Debian Wheezy, Raspbian. Se
descarcă această distribuție de pe site-ul menționat anterior. Dacă acest lucru nu este posibil, se va
folosi imaginea existentă pe serverul din laborator: 2014-01-07-wheezy-raspbian.zip.
103
Pornirea și configurarea sistemului de operare
Urmând pașii următori, vom avea un sistem Linux complet funcțional, ce va rula de pe
cardul SD, pe Raspberry PI.
1. Pe cardul SD putem scrie doar imagini în format .img, de aceea, este necesar să
dezarhivați fișierul .zip ce conține imaginea sistemului de operare: 2014-01-07-wheezy-raspbian.zip
→ 2014-01-07-wheezy-raspbian.img
2. Copiați de pe server utilitarul Win32 Disk Imager. Il vom folosi pentru a scrie imaginea
pe cardul SD (folderul win32diskimager-v0.9-binary).
3. Scrieți imaginea SD pe card, folosind cititorul USB și aplicația Win32 Disk Imager:
Fig. 6.7: Selectați imaginea în câmpul „Image File”, cardul SD în câmpul „Device”
Fig. 6.8: PuTTY, terminal client. În câmpul host se introduce IP-ul plăcii
104
7. Vi se va cere un username și o parolă. Acestea sunt pi/raspberry.
105
Trebuie efectuate următoarele operațiuni:
a) Expand filesystem
b) Din advanced, memory split, 16 (nu avem nevoie de memorie video pentru a lucra din
terminat)
c) Tot din advanced, schimbăm hostname-ul în „armdevboard”.
d) Finish pentru a ieși din utilitar
e) E recomandat să schimbăm parola, cu una mai scurtă, folosind comanda sudo passwd pi.
f) E necesar un restart, pentru a se activa modificările. Folosiți comanda shutdown -r now
106
Se poate folosi aplicația nano din terminal pentru a edita fișierul (copy in terminal se poate
realiza cu click dreapta).
În acest moment sistemul de bază este configurat. În continuare, putem să începem să scriem
aplicații pentru acest sistem.
După cum propabil ați observat, în linux nu există drive letter. Toate folderele sunt legate de
root (rădăcina „/”). Sistemul de fișiere poate fi EXT2, EXT4, raiserFS, ZFS, JFFS (pentru sisteme
flash), etc. Toate au o structură arborescentă. Se poate spune, la limită, că în Linux totul este un
fișier!
Tabelul de mai jos prezintă structura ierarhică din sistemele ce rulează o distribuţie Linux:
Director Conţinut
/ directorul rădăcină
/bin comenzi esenţiale necesare boot-ării, întreţinerii şi depanării
sistemului
/boot fişiere necesare boot-ării, precum imaginea kernel-ului
/dev fişiere speciale utilizate pentru accesul direct la dispozitivele
hardware sau logice ale sistemului
/etc fişiere pentru configurarea sistemului, precum inittab, fstab şi
hosts
/home fişierele fiecărui utilizator din sistem - datele unui utilizator se
găsesc în /home/username
/media subdirectoare în care se montează unitătile optice, floppy etc.
107
În continuare, vor fi evidențiate câteva comenzi de bază, folositoare pentru desfășurarea
laboratorului curent:
Permisiunile în Linux sunt un alt aspect important. Aceastea sunt separate în 3 entități:
utilizator, grup și alții:
Exerciții:
Încercați și comenzile următoare, documentând acțiunile acestora: who, whoami, w, cal 2014,
echo Laborator RS, date.
108
Utilizarea porturilor GPIO (General-purpose input/output)
Reprezintă un set de pini generici atașați unui circuit integrat (sau chip), care pot fi controlați
(programați) de către utilizator la momentul execuției. Majoritatea dintre ei pot fi configuraţi ca pini
generici de intrare sau ieşire, astfel încât să se poată atribui o valoare logică la ieșirea pinului, sau să
se citească aceasta valoare logică, în cazul în care pinul este configurat ca și intrare.
Portul GPIO al plăcii Raspberry PI se poate accesa relativ ușor printr-o librărie specială
numită WiringPI (librărie pentru Broadcom BCM2835, SoC ce se găsește în Raspberry PI). Această
librărie iți pune la dispoziție numeroase funcții utile cum ar fi: funcții generale de citire/scriere ale
portului, control PWM, timing, prioritate între programe și thread-uri, întreruperi.
Fig. 6.12: Porturile GPIO, conector secundar, doar rev2 (se indentifică prin inscripția Made in UK +
prezența a două găuri de montare pe PCB)
109
Fig. 6.13: Hartă alternativă porturi GPIO
Pentru a instala librăria wiringPI, urmați pașii următori (tastați în linia de comandă, cu drepturi de
root):
gpio -v
gpio readall
110
Comanda unui LED folosind GPIO
Înainte de a folosi comenzi GPIO, putem încerca să aprindem un LED prin simpla
alimentare a lui de la portul 1, +3.3v, și conectarea lui la gnd (0v).
111
LED-ul se aprinde, dar nu îl putem controla. Pinul 1 este doar de alimentare, +3.3V. Trebuie
să modificăm diagrama, mutăm firul galben pe portul (pinul) wiringPI pin 0 (GPIO-17), primul pin
ce poate fi controlat de utilizator (ca și locație fizică pe placă, acesta e pinul 11 pe conectorul
GPIO).
LED va rămâne stins, deoarece la inițializarea plăcii și a sistemului de operare, pinii GPIO
sunt definiți ca și intrare.
Pentru a controla software porturile GPIO, folosim librăria wiringPI instalată anterior.
Executați pe rând comenzile următoare, observând rezultatul.
Dacă totul a decurs bine, LED-ul ar fi trebuit să se aprindă, apoi să se stingă. Prima comandă
gpio setează pinul 0 ca ieșire. A doua comandă setează pin 0 în valoarea logică 1, ce pune un
semnal de 3.3V pe acesta, și LED-ul se aprinde. Ultima comandă setează valoarea logica 0, adică
0V.
gpio -g write 17 1
gpio -g write 17 0
În încheiere, se observă faptul că se pot construii aplicații mult mai complexe decât pe
Arduino. Aceste comenzi gpio se pot folosi în scripturi BASH, Pyhon, sau PHP, prin server WEB.
112
Bibliografie
1. Dragoș Drăghicescu, suport laborator Linux, Master Biosinf, Universitatea Politehnica din
București
2. Alexandru Caranica, „Proiectarea unui micro-sistem Linux pentru procesoare embedded, de
tip RISC”, lucrare licență, Constanța, 2010
3. http://edmundofuentes.com/post/45179343394/raspberry-pi-without-keyboard-mouse-nor-
screen
4. http://lifehacker.com/465323246
5. http://www.robertawood.com/blog/raspberry-pi/raspberry-pi-initial-setup-headless-no-
monitor-or-keyboard-needed.html
6. https://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-static-ip-address
7. http://www.wikihow.com/Make-a-Raspberry-Pi-Web-Server
8. http://engineeringliberty.wordpress.com/2011/10/07/making-great-plots-in-octave-and-
matlab-too/
9. http://www.techusers.net/10/installing-starting-and-stopping-webmin
10. http://www.wikihow.com/Make-a-Raspberry-Pi-Web-Server
11. http://www.raspberrypi.org/archives/1417
12. https://sites.google.com/site/semilleroadt/raspberry-pi-tutorials/gpio
13. https://projects.drogon.net/raspberry-pi/gpio-examples/
14. http://robofun.ro/blog/accesul-portului-gpio-raspberry-pi/
15. http://www.bobtech.ro/tutoriale/raspberry-pi/70-led-blink-in-pyton-pe-raspberry-pi
113
Tiparul executat în
TIPOGRAFIA
UNIVERSITĂŢII MARITIME
din
Constanţa
114