Monitorizarea la Distanta a Tensiunilor de pe Autovehicul
Monitorizarea la distanță a tensiunilor de pe autovehicul
Proiect de diplomă
Lista figurilor și a tabelelor
Figura 1.1 Arhitectura unui sistem mobil de telecomunicații 16
Figura 1.2 Structura unui sistem UMTS 18
Figura 1.3 Schema unei retele 4G 19
Figura 2.1 Microcontroler ATMega328 22
Figura 2.2 Schema bloc a microcontrolerului ATmega328 24
Figura 2.3 Pinii de intrare/iesire ai microcontrolerului Atmega328 26
Figura 2.4 Porturi de Intrare/Ieșire 27
Figura 2.5 Schema bloc a convertorului Analog-Digital 29
Figura 2.6 Interconectarea dintre Master și Slave 30
Figura 3.1 Arduino Uno V3 34
Figura 3.3 Mediul de programare Arduino 38
Figura 3.3 Modulul GSM-GPRS SM5100B 40
Figura 3.4 Schema bloc a scutului GSM SM5100B 42
Figura 3.5 Conector 60 pini-GSM SM5100B 44
Figura 3.6 Conexiuni cartela SIM 44
Figura 3.7 Antena GSM/GPRS Quad Band SMA 47
Figura 3.8 Defininrea planurilor antenei 47
Figura 3.9 Bateria Plumb Acid VIPOW 48
Figura 3.10 Construcția potențiometrului 49
Figura 3.11 Funcționarea potențiometrului 49
Figura 4.1 Structura unui sistem de monitorizare 51
Figura 4.2 Schema bloc a sistemului de monitorizare 52
Figura 4.3 Sistemul de monitorizare realizat 53
Figura 4.4 Placuță stabilizator(a) 54
Figura 4.5 Plăcuță stabilizator(b) 54
Tabel 2.1 Comparație intre diferite procesoare 26
Tabel 3.1 Caracteristici Arduino Uno 34
Tabel 3.2 Clipirea unui led 36
Tabel 3.3 Caracteristici tehnice SM5100B 41
Tabel 3.4 Descrierea pinilor VBAT 41
Tabel 3.5 Consumul în modul oprit,sursa 42
Tabel 3.6 Descriere pinilor GND 42
Tabel 3.7 Consumul de putere în modul oprit 43
Tabel 3.8 Consumul în modul EGSM 900MHz 43
Tabel 3.9 Consumul in modul DCS/PCS 1800 MHz 43
Tabel 3.10 Descrierea pinilor interfeței SPI 43
Tabel 3.11 Descrierea pinilor SIM-ului 45
Tabel 3.12 Caracteristicile pinului Reset 45
Tabel 3.13 Caracteristicile pinului Power On 45
Tabel 3.14 Banda de frecvență 46
Tabel 3.15 Performanțele Radio Frecvență 46
Tabel 3.16 Parametrii de mediu 46
Tabel 3.17 Câștigul antenei 47
Tabel 3.18 Specificatii tehnice ale bateriei Plumb Acid 48
Lista acronimelor
A – Amper
AC – Alternative current (current alternative)
ADC – Analog-to-digital converter (convertor analog-digital)
ALU – Arithmetic Logic Unit (unitatea aritmetica logica)
ASIC -application-specific integrated circuit (circuit integrat de aplicație)
b – bit
B – byte (octet)
CBI -clear bit port ( ștergerea bitului de port)
CISC – complex instruction set computer (set complex de intrucțiuni)
CLK – clock (ceas)
CMOS – Complementary metal–oxide–semiconductor (semiconductor metal oxid complementar)
CPU – Central processing unit (unitatea de procesare centrală)
DC – Direct current (curent continuu)
dB – decibel
DFU – Device Firmware Upgrade (upgradarea firmwareului dispozitivului)
EEPROM – Electrically Erasable programmable read only memory (memorie de program care poate fi doar citită și ștearsă electric)
FDMA – Frequency division multiple access(acces multiplu prin divizarea frecvenței)
FTDI – Future Technology Devices International(tehnologia dispozitivelor de viitor internațională)
F – Farad
GND – Ground(masă)
GPIO – General Purpose Input/Output(intrare/ieșire de uz general)
GSM – Global System for Mobile Communications(sistemul global pentru comunicațiile mobile)
Hz – hertz
ISO – International Organization for Standardization(organizația internațională pentru standardizare)
IDLE –(presupune ca mașinăria să nu facă nimic,să nu lucreze)
IN – INPUT(intrare)
ISDN – Integrated Services Digital Network(serviciile integrate pentru rețelele digitale)
I2C – Inter-Integrated Circuit(ciruit inter-intergrat)
IDE – Integrated development environment(mediu de dezvoltare integrat)
ICSP – In-Circuit Serial Programming(programare serială în circuit)
LSB – Least significant bit(cel mai puțin semnificativ bit)
LED – Light-emitting diode(diodă emițătoare de lumină)
MSB – most significant bit(cel mai semnificativ bit)
MOSI – Master Output, Slave Input (ieșire Master,intrare Slave)
MISO – Master Input, Slave Output (intrare Master,iesșire Slave)
MIPS – Million instructions per second(milioane de instrucțiuni pe secundă)
OUT – Output(ieșire)
PSTN – Public switched telephone network(rețea de telefonie publică)
PWM – Pulse-width modulation
QoS – quality of service(calitatea servicului)
RST – Reset(restartare)
SS – Slave-select(selectarea Slaveului)
s – secunde
SRAM – Static random-access memory(memorie statică cu acces aleatoriu)
TTL – Time to live(timpul cât trăiește)
TDMA – Time division multiple access(acces multiplu prin divizarea timpului)
USART – Universal asynchronous receiver/transmitter(primire/transmitere universal asincronă)
SPI – Serial Peripheral Interface Bus(magistrală serială periferică)
USB – Universal Serial Bus(magistrală serială universală)
UMTS – Universal Mobile Telecommunications System(sistemul universal al telecomunicațiilor mobile)
V – Volts
VCC – Power supply pins(pini de alimentare)
Introducere
Am ales această temă datorită faptului că în secolul XXI timpul este o resursă foarte prețioasă și orice secundă caștigată constituie un avantaj important.Consider că monitorizarea la distanță în zilele noastre reprezintă o metodă eficientă pentru a economisi timp,bani și eventualele neplăceri.
Tot mai mult in acest domeniu al monitorizării își fac simțită prezența căi moderne de comunicație si transport al informațiilor. Tendințele actuale de dezvoltare asigură multiple modalități de verificare și confirmare, prin preluarea, transportul, stocarea și prelucrarea în timp real a informațiilor audio și video, precum și prin asigurarea de modalități de analiză și detecție complementare, în scopul reducerii în final al costurilor și al consumului nejustificat de resurse.Toate acestea concură, la rândul lor, la optimizarea și eficientizarea permanentă a sistemelor de monitorizare[1].
În sistemul implementat mi-am propus să monitorizez tensiunea bateriei de pe un autovehicul.Pentru aceasta,la nivelul bateriei monitorizate am realizat un sistem care îmi permite în timp real să stiu starea acesteia,dacă este incărcată sau descărcată.Sistemul are la bază un modul GSM care este controlat de un microcontroler ATmega328.Modulul de comunicație GSM funcționează prin intermediul undelor radio aflate in banda de frecvențe EGSM900,GSM850,DCS1800,PCS1900.Doi jumperi de lipitură pe placă imi permit să aleg care pini de serial sa facă interfața cu modulul celular-software(D2,D3) sau hardware (D0,D1).Este nevoie de o cartelă SIM pre-plătită pentru a se conecta la rețeaua GSM și pentru a putea trimite mesajul de atenționare dorit.Modul de alimentare al modulului GSM este direct de la baterie deoarece acesta conține un regulator de tensiune care imi permite o tensiune maximă de intrare de 16V,tensiunea de alimentare a modulului fiind cuprinsa între 3,3V – 4,2V.
În plus am realizat o placuță care imi permite să stabilizez tensiunea de intrare a bateriei de 12V la 9V pentru a putea alimenta in siguranță kitul de dezvoltare Arduino.Tot aici am adăugat un potențiometru pentru a simula cu ușurință descărcarea bateriei și un divizor rezistiv.Pentru divizorul rezistiv am ales rezistoare cu raport de demultiplicare de 1:11 pentru a-mi asigura o tensiune maximă de 1,25V pe intrarea convertorului analog-digital.Am adăugat un condensator pe intrarea stabilizatorului și unul pe ieșirea acestuia pentru eliminarea nedorită a vârfurilor de tensiune și pentru a răspunde cât mai bine la variațiile de curent.
Comunicația între microcontroler și modulul GSM se face prin intermediul interfeței seriale SPI,prin 2 pini Rx și Tx.Astfel microcontrolerul este programat ca atunci când tensiunea de la intrare scade sub pragul de 11V, prin intermediul interfeței seriale dă comandă scutului GSM să trimită un mesaj de tip text,SMS,pe telefonul mobil,al proprietarului,atenționând-ul despre starea bateriei.Mesajul trimis este de forma:”Battery low”.
Capitolul 1. Rețeaua GSM
1.1 Istoria rețelei GSM
GSM reprezintă prescurtarea de la Global System for Mobile communications.
Dezvoltarea telefoniei mobile, în special în deceniul 1980-1990, a condus la apariția a numeroase sisteme (NMT – în țările nordice, TACS – în Marea Britanie, AMPS – în SUA) și la creșterea numărului de abonați (la începutul lui 1990 existau aproximativ 1 milion de abonați în Europa).Încă de la începutul anilor '80,principala problemă a fost incompatibilitatea între sisteme mobile diferite: de exemplu, un abonat al sistemului NMT își putea folosi telefonul mobil numai pe teritoriul țărilor care aveau rețea mobilă NMT. Odată intrat într-o țară cu un alt sistem mobil, diferit de NMT, telefonul său mobil devenea inutilizabil[2].
Astfel a apărut ideea creării unui sistem mobil pan-european, care pe lângă rezolvarea problemei anterior menționate, trebuia să aibă și o serie de alte avantaje față de sistemele clasice, avantaje dintre care menționăm:
– să asigure o calitate corespunzătoare a serviciilor clasice de telefonie;
– să utilizeze soluții simple de proiectare care să permită obținerea unor terminale mobile cu prețuri cât mai mici, concomitent cu costuri cât mai mici aferente instalării și întreținerii echipamentelor de infrastructură a rețelei mobile (pentru a permite obținerea unor costuri cât mai mici pentru serviciile asigurate);
– să diversifice (comparativ cu sistemele analogice) gama de servicii;
– să fie compatibil cu rețeaua digitală cu integrarea serviciilor ISDN;
– să asigure o utilizare cât mai eficientă a spectrului radio disponibil (în scopul de a putea avea un număr cât mai mare de abonați);
Prima decizie importantă pentru crearea acestui nou sistem mobil a fost luată în 1982 de CEPT (Conference Europeene de Postes et Telecommunications) care a alocat pentru noul sistem mobil următoarele benzi de frecvență:
– 890 – 915 MHz pentru comunicația în sensul mobil – stație de bază;
– 935 – 960 MHz pentru comunicația în sensul stație de bază – mobil [2].
Tot în 1982, CEPT a hotărât crearea unui grup special de lucru, numit GSM (Group Speciale Mobile) care să lucreze la specificațiile noului sistem mobil. Începând de la această dată, mai multe firme din diverse țări europene au început să lucreze pentru identificarea unei structuri optime a noului sistem mobil. În 1986, GSM a primit 9 propuneri distincte detaliate privind noul sistem pan-european. Într-un an au fost analizate cele 9 propuneri (testări, simulări experimentale etc.) ceea ce a permis comitetului să ia deciziile privind cele mai generale aspecte ale noului sistem mobil. Astfel, acesta urma să fie un sistem digital care utiliza o tehnică de acces mixtă (FDMA/TDMA – acces în frecvență cu multiplexare în timp) etc. În 1987, la Copenhaga, 13 țări europene au semnat un memorandum în care recunoșteau necesitatea creării unui sistem mobil universal, pan-european.
În 1991 apar recomandările GSM, care sunt grupate în 12 serii în peste 5000 pagini, ceea ce reflectă complexitatea sistemului adoptat. Tot în același an au loc alte evenimente care vor marca decisiv nașterea noului sistem: realizarea primei comunicații între un utilizator GSM și un utilizator PSTN, realizarea primei comunicații care a implicat un transfer al apelurilor, deschiderea primelor sisteme experimentale în Europa de Vest. În 1992 se deschid primele sisteme GSM comerciale. Succesul sistemului a fost și este covârșitor, ajungându-se la sfârșitul lui 1994 la 5 milioane de abonați, fiind în mare creștere. Avantajele noului sistem, comparativ cu sistemele analogice, sunt numeroase, dintre care amintim: compatibilitate cu rețelele fixe existente (inclusiv ISDN), apariția unor servicii avansate (fax), creșterea confidențialității apelurilor, sensibilitatea mai redusă la interferențe, o mai bună utilizare a spectrului radio (prin utilizarea tehnicilor de modulație digitală etc.)Prima rețea GSM a fost lansată în 1991 în Finlanda de către compania Radiolinja [2].
Infrastructura acesteia a fost parțial realizată de o companie ce se va remarca de-a lungul timpului în domeniu: Ericsson. Radiolinja a punctat mai multe prime evenimente importante în istoria rețelelor GSM, cum ar fi primul SMS trimis de la o persoană la alta în 1993 și primul ton de apel descărcabil contra cost în 1998 [2].
Fig. 1.1 Arhitectura unui sistem mobil de telecomunicații [2]
1.2 Dezvoltarea rețelei
1.2.1Principiile de bază ale telefoniei celulare
Conceptul de telefonie celulară a fost inventat în Statele Unite la Bell Laboratories în 1947. Au fost necesari peste 35 de ani pentru a-l pune în practică și a realiza prima rețea analogică și terminalele necesare.
O rețea celulară este compusă dintr-o serie de stații de bază de joasă putere, fiecare oferind o arie de acoperire relativ mică, care, combinate, asigură o acoperire continuă a unei regiuni date. Prin utilizarea acestor stații de putere mică, a devenit posibilă reutilizarea frecvențelor, ce a condus la o creștere a capacitații rețelei [2].
Acoperirea oferită de o stație de bază corespunde unui număr de utilizatori care se presupune că există în respectiva arie, numită celulă. Astfel, arii dens populate necesită celule mai mici ăi un aspect inteligent al rețelei dă posibilitatea unei conversații să continue fără întrerupere pe măsură ce utilizatorii se deplasează între aceste celule. Procesul prin care o conversație este pasată dintr-o celulă în alta este cunoscută sub numele de "hand-off".
În lume există peste 50 milioane de utilizatori de telefoane celulare. Atrase de costul relativ scăzut și capacitatea ridicată a sistemului GSM, peste 70 de țări au ales această noua tehnologie [2].
1.2.2Avantajele sistemului GSM
Eficiență mărită a spectrului radio permite o capacitate crescută a rețelei. (Poate suporta un număr mult mai mare de utilizatori).
Permite o sofisticată autentificare a utilizatorului, reducând posibilitatea fraudelor.
Previne interceptarea conversațiilor prin tehnici sofisticate de incriptare care sunt aproape în totalitate sigure.
Permite o mai bună claritate și consistentă a conversației prin eliminarea interferenței în timpul transmisiei digitale.
Simplifică transmisia de date, permițând conectarea calculatoarelor portabile la telefoanele celulare GSM.
Un singur standard ce permite deplasări internațtionale între rețele GSM din lume [3].
1.2.3 Performantele GSM
Multe din sistemele analogice pot oferi performanțe bune, dar GSM-ul a fost proiectat să fie mai bun decât orice sistem analogic. Calitatea convorbirii GSM este comparabilă cu sistemele analogice în condiții medii și bune, dar în condiții de semnal slab sau interferențe, sistemul GSM se comportă mult mai bine.
Calitatea radio, mărimea și timpul de viața al bateriei sunt de asemenea parametri importanți de performanța. Deoarece se utilizează un standard digital, se înregistrează un nivel ridicat de implementare a noilor tehnologii, ducând la micșorarea mărimii și greutații telefoanelor mobile. Utilizarea puternicului mod "sleep" automat duce la o semnificativă creștere a timpului de viața al bateriei [3].
1.2.4 Securitatea sistemului GSM
GSM oferă trei niveluri de securitate:
Nivelul de securitate I:
Datele utilizatorului GSM sunt înregistrate în cartela SIM.
Cartela SIM poate fi inserată în orice terminal GSM.
Tariful este înregistrat pentru proprietarul cartelei SIM.
Sistemul GSM verifica validitatea utilizatorului.
Nivelul de securitate II:
Sistemul GSM identifică localizarea utilizatorului.
Terminalele furate pot fi depistate sau folosirea lor invalidată.
Utilizatorul poate fi identificat înainte de acceptarea convorbirii.
Nivelul de securitate III:
Sunt utilizate tehnici avansate de incriptare pentru a face aproape imposibilă interceptarea convorbirii [2].
Fig. 1.2 Structura unui sistem UMTS [2]
1.3 Viitorul GSM
Tehnologia UMTS (Universal Mobile Telecommunications System) despre care se vorbește de ceva timp face parte din sfera 3G și va fi folosită pentru dezvoltarea rețelelor 4G. Ea combină tehnologiile GSM pentru serviciile de voce cu cele pentru trasfer rapid de date, cum ar fi W-CDMA. Frecvențele folosite sunt în benzile de 1885-2025 MHz pentru datele de la telefon la celulă si 2110-2200 MHz pentru cele în sens invers.În țara noastră providerii Orange și Digi Mobil au implementat rețele UMTS.
Așa cum fiecare generație de rețele de telefonie mobilă a dus la schimbarea totală a infrastructurii și a terminalelor, rețelele 4G vor fi create pentru a le înlocui pe cele de tip 3G. Printre obiectivele care se doresc a fi atinse se numără o viteză de transfer de 100 Mbps (12.5 MB/s) pentru utilizatorii aflați în mișcare și de până la 1 Gbps (125 MB/s) pentru cei staționari. De asemenea se dorește obținerea unei și mai bune eficiențe spectrale (o rată de transfer cât mai mare per unitate de frecvență; bits/s/Hz) și un număr cât mai mare de utilzatori conectați la o celulă. Aplicațiile ce se doresc a fi implemetate sunt video chat-ul, televiziunea mobilă,vizionarea conținutului video HD și Digital Video Broadcasting (DVB). Organizațiile internaționale care lucrează la standardizarea tehnologiilor 4G apreciază că ele vor fi implementate în rețele comerciale între 2012 și 2015 [3].
LTE sau 3GPP Long Term Evolution este un standard pentru comunicații wireless(fără fir),de foarte mare viteză pentru telefoane mobile sau terminale de date.Este o arhitectura bazată pe GSM-EDGE ,imbunătățind capacitatea de viteză prin utilizarea tehnicilor de modulație.
Interfața wireless LTE este incompatibila cu rețelele 2G si 3G,astefel încat aceasta să ruleze,este necesar un alt spectru wireless.Specificațiile include o rată de downlink de 300Mbit/s și o rată de uplink de 75 Mbit/s cu un QoS care asigură rata de transfer în mai puțin de 5ms în rețelele radio.Astfel,datele transmit cu o calitate exceptională,într-un timp foarte redus.Suportă multicast și stream-uri broadcast [3].
Fig. 1.3 Schema unei retele 4G [3]
Capitolul 2. Microcontrolere generalități
2.1 Microcontrolerul
Un microcontroler reprezintă o structură electronică destinată controlului unui proces sau unei interacțiuni cu mediul exterior, pentru care intervenția umană nu mai este necesară. La început controlerele au fost realizate în tehnologii analogice, folosindu-se componente electronice discrete sau electromecanice. Microcontrolerele care folosesc tehnica numerică modernă au fost realizate pe baza logicii cablate (cu circuite integrate numerice standard SSI și MSI ). Un microcontroler este un microcircuit alcătuit dintr-o unitate centrală (CPU),o memorie și o interfață cu exteriorul.
Ca și domenii de utilizare se pot enumera următoarele: industria de autovehicule (exemple: sistemul de aprindere, climatizare și alarmă), în industria electronici de consum (sisteme audio, televizoare, camere video, telefoane mobile, jocuri electronice), în industria electrocasnicelor (mașini de spălat, frigidere, cuptoare cu microunde, aspiratoare), industria aerospațială, echipamente de laborator (aparate de măsură) si în industria medicală. Aplicațiile în care se utilizează microcontrolerele sunt din domeniul sistemelor încapsulate-integrate [4].
2.1.1 Clasificari și varinte constructive
Există la ora actuală un număr extrem de mare de tipuri constructive de microcontrolere. Un criteriu de clasificare care se poate aplica întotdeauna este lungimea (dimensiunea) cuvântului de date. Funcție de puterea de calcul dorită și de alte caracteristici se pot alege variante având dimensiunea cuvântului de date de 4, 8,16 sau 32 de biți (există chiar și variante de 64 de biți!). Nu este obligatoriu ca dimensiunea cuvântului de date să fie egală cu dimensiunea unui cuvânt mașină (cuvânt program).Există și multe variante zise dedicate, neprogramabile de utilizator la nivel de cod mașină, strict specializate pe o anumită aplicație, prin intermediul codului preprogramat și al resurselor hardware, utilizate pentru comunicații, controlul tastaturilor, controlul aparaturii audio/video, prelucrarea numerică a semnalului [5].
2.1.2. Tehnologiile de fabricatie utilizate
Practic, toate microcontrolerele se realizează la ora actuală în tehnologie CMOS (tehnologii similare celor utilizate la seriile standard CMOS de circuite numerice: HC, AC, ALV, etc.). Se pot realiza astfel structuri cu o mare densitate de integrare, cu un consum redus (care va depinde de frecvența de lucru), permițând eventual alimentarea de la baterie.
Logica internă este statică (total sau în cea mai mare parte) permițând astfel, în anumite condiții, micșorarea frecvenței de ceas sau chiar oprirea ceasului în ideea optimizării consumului. Tehnologia este caracterizată și de o imunitate mai mare la perturbații, esențială într-un mare număr de aplicații specifice. Se realizează variante pentru domeniu extins al temperaturii de funcționare (de ex.- 40 +85 C) [5].
Există foarte multe variante de încapsulare (capsule de plastic și mai rar de ceramică), multe din ele destinate montării pe suprafață (SMD): SOIC, PLCC, PQFP, TQFP (x100pini), dar și variante clasice cu pini tip DIP/DIL (tipic de la 8 la 68 pini) [5].
2.2 Microcontrolerul ATMega328
Fig. 2.1 Microcontroler ATMega328
2.2.1 Caracteristici ale microcontrolerului
Este un microcontroller AVR de 8 biți de înaltă performanță cu un consum redus de energie.
Caracteristici:
130 de instrucțiuni puternice – majoritatea cu execuție într-un singur ceas;
32 x 8 registre de uz general și registre periferice de control;
operare statică;
putere de procesare de până la 16 MIPS la 16 MHz;
multiplicator încorporat : execută în 2 cicli mașină.
Memorie program nevolatilă si memorie de date:
8/16/32KBiți memorie Flash programabilă în sistem;
Boot Code Section opțional cu biți de securizare independent(Programare în sistem prin
intermediul programului de Boot);
256/512 Kbiți EEPROM;
1/2KBiți SRAM intern;
securizare de program pentru siguranța software-ului;
scrie / ștergere Cicluri: 10.000 Flash/100, 000 EEPROM;
păstrarea datelor: 20 de ani la 85 ° C/100 ani la 25 ° C.
Caracteristici periferice:
8-biți Timer / Counter cu prescalare separată și mod de comparare;
16-biți Timer / Counter cu prescalare separată, mod de comparare și capturare;
contorul timpului real cu oscilator separate;
6 canale PWM ;
8-canale 10-bit ADC in pachetul TQFP și QFN / MLF;
6-canale 10-bit ADC, în Pachetul PDIP ;
USART programabil serial ;
timer „watchdog” programabil cu oscilator separat pe cip ;
comparator analogic ;
întreruperea și trezirea prin modificarea pinilor [6].
Tensiune de operare:
1.8 – 5.5V
Interval de temperatură:
40 ° C la 85 ° C
Gradul vitezei:
0 – 4MHz la 1.8 – 5.5V, 0 – 10MHz la 2.7 – 5.5.V, 0 – 20MHz la 4.5 – 5.5V
Consum de putere la 1MHz, 1.8V, 25 ° C;
Mod de operare: 0.2mA [6].
Microcontrolerele din familia AVR pot fi atât microcontrolere de uz general, cât și microcontrolere cu funcții specializate, împărțindu-se în următoarele categorii:
1. Familia TINY AVR – cuprinde microcontrolere destinate unor aplicații simple, cu 1 8 KB
memorie de program.
2. Familia MEGA AVR – cu un set dezvoltat de instrycțiuni și cu 4 256 KB memorie de
program.
3. Familia XMEGA AVR – destinată unor aplicații complexe. Acestea au unități DMA (Direct Access Memory), module pentru criptare, și folosesc un spațiu de memorie de program de 16 384 KB.
4. Microcontrolere AVR destinate unor aplicații specifice, care se împart în mai multe categorii:
4.1. LIGTHING AVR: microcontrolere ce conțin un procesor de semnal, fiind special conceput pentru controlul motoarelor de curent continuu.
4.2. LCD AVR: microcontrolere ce conțin un controler pentru adresarea dispozitivelor LCD
4.3. CAN AVR: microcontrolere ce conțin o interfață CAN implementată hardware [8].
Fig.2.2 Schema bloc a microcontrolerului ATmega328[7]
2.2.2 Descrierea pinilor
GND- masa;
VCC – tensiunea de alimentare;
Port B (PB7:0)
Portul B mapează pinii digitali :de la8 la 13.Biții 6 și 7 nu sunt folosiți. Bufferele de ieșire ale portului B, au o funcționalitate duală, care pot comuta ieșirea în starea “high” sau în starea”low. Pinii portului B sunt setați pe “low” printr-o metodă externă. Aceștia vor furniza curent, dacă rezistențele interne de ridicare sunt active. Pinii portului B prezintă o impedanță înaltă atunci când o condiție de resetare devine activă, chiar dacă ceasul nu funcționează. În funcție de setările de ceas de selecție ale siguranțelor, PB6 poate fi folosit ca intrare pentru inversorul amplificatorului oscilator și ca intrare a circuitului intern de funcționare a ceasului. PB7 poate fi folosit ca ieșire de la inversorul amplificatorului oscillator [7].
Port C (PC5:0)
Portul C mapează pinii analogici:de la 0 la 5.Pinii 6 si 7 sunt accesibili doar pentru Arduino Mini.Bufferele de ieșire ale portului C, au o funcționalitate duală, putând comuta ieșirea în starea “high” sau în starea”low”. Ca intrări, pinii portului C sunt setați pe “low” printr-o metodă externă. Aceștia vor furniza curent, dacă rezistențe interne de ridicare sunt active. Și aici ca și în cazul portului B, pinii prezintă o impedanță înaltă atunci când o condiție de resetare devine activă, chiar dacă ceasul nu funcționează [7].
Pinul PC6/RESET
Dacă fuzibilul RSTDISBL este programat, pinul poate fi utilizat ca pin de intrare/ieșire, iar dacă fuzibilul nu este programat, pinul PC6 este folosit ca intrare de reset. La aplicarea unui nivel “low” pe acest pin va genera o resetare, chiar dacă ceasul nu funcționează [7].
Port D (PD7:0)
Portul D mapează pinii digitali :de la 0 la 7. Ca și la cele doua porturi, bufferele de ieșire ale portului D, au o funcționalitate duală, putând comuta ieșirea în starea “high” sau în starea”low”. Ca intrări, pinii portului D sunt setați pe “low” printr-o metodă externă, iar pinii prezintă o impedanță înaltă atunci când o condiție de resetare devine activă, chiar dacă ceasul nu funcționează.
Exemple: DDRD = 0b11111111; //Toți pinii portului D sunt ieșiri
PORTD = 0b11111111; //Toți pinii portului D sunt in starea high [7].
AVcc – este pinul utilizat pentru tensiunea de alimentare a convertorul A/D, ADC7:6 și PC3..0.
AREF – este pinul de referință analogic pentru convertorul A / D.
Atmega328 este un microcontroler pe 8 biți de putere mică, care utilizează tehnologia CMOS și care este bazat pe o arhitectură de tip RISC îmbunătățită. Acesta execută instrucțiuni complexe într-un singur ciclu de ceas și atinge performanța de 1 MIPS, permițându-i programatorului să optimizeze consumul de energie și viteza de procesare [7].
Fig.2.3 Pinii de intrare/iesire ai microcontrolerului Atmega328 [7]
În modul „Idle” activitatea CPU la nivelul SRAM-ului se oprește, timer-ul/numărătorul, porturile USART și SPI. În modul „Power-Down” se salvează conținutul registrelor, oprește oscilatorul,iar restul de funcții ale cipului sunt dezactivate până la următorul reset. În modul „Power-Save”, timerul asincron funcționează în continuare, iar restul dispozitivului se află în modul „sleep”. În modul „ADC Noise Reduction” se oprește CPU și toate interfețele de intrare/ieșire, exceptând timerul asincron și ADC. In modul „Standby” funcționează oscilatorul cu cuarț, iar restul dispozitivului se află în modul „sleep”. Acest ultim mod permite un start rapid combinat cu un consum redus de energie [7].
Tabel 2.1 Comparație intre diferite procesoare [7]
Rezultatele de calitate și fiabilitate arată că microcontroler-ul poate păstra datele peste 20 de ani, cu o funcționare la o temperatură de 85 ° C sau 100 de ani cu o funcționare la o temperatură de 25 ° C.
2.2.3 Porturi de Intrare/Ieșire
Toate porturile AVR-ului sunt de tip Citire-Modificare-Scriere atunci când sunt folosite ca porturi digitale de intrare/ieșire. Asta înseamnă că modificarea direcției pinului unui port, poate fi realizată fără a schimba în mod neintenționat starea celorlalți pini, cu ajutorul instrucțiunilor CBI și SBI. În aceleș mod atunci când schimbă valoarea de conducere (în cazul în care pinul este configurat ca ieșire) sau activarea / dezactivarea rezistențelor de ridicare (în cazul în care pinul este configurat ca intrare). Bufferele de ieșire au o funcționare duală, iar pinul conducător este suficient de puternic pentru a conduce direct un display cu LED-uri [9].
Fig 2.4 Porturi de Intrare/Ieșire [10]
Portul B:-curpinde pinii B0-B5
Portul C:-curpinde prinii C0-C5
Portul D:-curpinde pinii D0-D7
Trei locații de adresă a memoriei de intrare/ieșire sunt alocate pentru fiecare port, pentru registrul de date PORTx, pentru direcția registrului DDRx și pentru pinii de intrare ai PINx. Primele două adrese pot fi citite/scrise, iar ultima este doar citită. Cei mai mulți pini ai portului sunt multiplexați cu funcții alternative pentru caracteristicile periferice ale dispozitivului [9].
2.2.4 Convertorul Analog-Digital
Microcontrolerul ATMega 328 conține un convertor analog-digital care funcționează pe principiul aproximărilor succesive. Convertorul este legat la un multiplexor analog cu 8 canale care permite ca cele opt intrări ale portului A să fie legate la masă [7].
Caracteristici:
Rezoluție pe 10-biti
0,5 LSB integrat non-liniaritate
6 canale multiplexate unice finisate de intrare
Canale suplimentare multiplexate unice finisate de intrare
13: 260μs timp de conversie
Canal pentru intrare a senzorului de temperature
Opțional ajustarea la stânga pentru citirea rezultatului ADC
0 – VCC ADC tensiune de intrare
Selectabil 1.1V ADC tensiune de referință
Întreruperea ADC la conversie completă
Modul de zgomot Sleep Canceler
Convertorul conține un circuit de eșantionare și memorare care menține o tensiune de alimentare constantă în momentul conversiei. Convertorul mai conține și un pin de alimentare separat, AVcc , acesta nu trebuie să difere mai mult de ± 0,3 V de la Vcc. ADC-ul transformă o tensiune analogică într-o valoare pe 10 biți digitală, utilizând aproximările succesive. Tensiunea minimă reprezintă masa, iar valoarea maximă reprezintă tensiunea pe pinul AREF, minus 1LSB [7].
Fig. 2.5 Schema bloc a convertorului Analog-Digital [7]
Convertorul este activat prin setarea bit-ului de pornire al ADC-ului. Convertorul nu consumă energie atunci când bitul de pornire este oprit, de aceea când se trece în modul „sleep” este necesar să se oprească convertorul.
Convertorul generează un rezultat pe 10 biți, salvat în registrele de date ai acestuia: ADCH și ADCL. În mod implicit, rezultatul este prezentat ca ajustat la dreapta, dar poate fi prezentat opțional la stânga prin stabilirea bitului ADLAR [7].
2.2.5 Interfața seriala SPI
Caracteristici:
Full duplex,transfer de date sincron prin 3 fire
Operează Master sau Slave
7 rate de bit programabile
Protecție la scriere
Wake-up din modul IDLE
Viteză dublă(CK/2) in modul Master SPI
Interfața serială SPI este o interfață standard de mare viteză,ce operează in mod full duplex.
Ea este folosită ca sistem de magistrală serial sincronă pentru transmiterea de date,unde circuitele digitale pot să fie interconectate pe principiul master-slave.Aici,modul master/slave inseamnă,că dispozitivul digital master inițiază cuvântul de date.Mai multe dispositive digitale slave sunt premise cu slave select individual,adică cu selectare individuală [7].
SPI-ul are patru semnale logice specifice:
SCLK – Ceas serial (output din master)
MOSI/SIMO – Master Output, Slave Input (output din master)
MISO/SOMI – Master Input, Slave Output (output din slave)
SS – Slave Select (active low; output din master)
Sistemul este format din două register de deplasare și un generator de ceas Master.SPI Master inițiază ciclul de comunicare atunci când se setează prinul SS Slave Select pe nivelul LOW.Masterul și slavelul pregătesc datele să fie trimitse în registrele lor de deplasare și masterul generează impulsurile de sincronizare necesare pe linia SCK pentru a interschimba datele.Datele sunt intotdeauna deplasate de la master la slave pe Master OUT-Slave In,MOSI și de la Slave la Master pe Master In-Slave Out,MISO.După fiecare pachet de date Masterul va sincroniza Slaveul prin selectarea nivelului pe HIGH a Slave Selectului SS [7].
Fig. 2.6 Interconectarea dintre Master și Slave [7]
Când este configurată ca Master interfața SPI nu are nici un control automat asupra liniei SS.Acest lucru trebuie să fie manipulate de software-ul de utilizator înainte de începerea comunicației.Când se face acest lucru scrie un octet in registrul de date SPI care pornește generatorul de ceas SPI și hardwareul deplasează 8 biți in Slave.Dupa deplasarea unui octet,generatorul de ceas se oprește setând fanionul pentru sfârșitul transmisiei(SPIF).Dacă bitul de întrrupere SPI (SPIE) este setat in registrul SPCR se solicitată o întrerupere.Masterul poate continua sa deplaseze urmatorul octet prin scrierea lui in SPDR.Ultimul octet de intrare va fi păstrat in registrul Buffer pentru o utilizare ulterioară [7].
Când este configurată ca Slave,interfața SPI va ramâne in modul Sleep cu MISO atata timp cât pinul SS este setat pe nivelul High.In această stare sofwareul poate actualizeze conținutul registrului de date SPI,SPDR,dar datele nu vor fi deplasate prin impulsurile de sincronizare de intrare pe pinul SCK pâna când pinul SS nu este setat pe nivelul Low.
După ce un octet a fost complet deplasat,fanionul pentru sfârșitul transmisiei,SPIF,este setat.Dacă bitul de întrrupere SPI (SPIE) este setat in registrul SPCR se solicitată o întrerupere.Slaveul poate continua sa deplaseze urmatorul octet prin scrierea lui in SPDR.Ultimul octet de intrare va fi păstrat in registrul Buffer pentru o utilizare ulterioară [7].
2.2.6 Timer/Counter
Caracteristici:
Generator de frecvență
proiectat pe16-biți
o intrare de captare
o intrare de captare a zgomotului Canceler
Modul PWM cu corectare de fază, fără erori
Patru surse de întreruperi, independente
Regiștri comparatori de ieșire cu buffere duble
două comparatoare independente de ieșire
Regiștri timer-ului (TCNT1) comparatori de la ieșire OCR1A/B(Output Compare Registers) și cei de captare la intrare ICR1(Input Capture Register) sunt regiștri pe 16 biți. Regiștri de control TCCR1A/B(Timer/Counter Control Registers) sunt de 8-biți și nu au restricții de acces la CPU. Semnalele de întrerupere a cererilor sunt toate vizibile în TIFR1(Timer Interrupt Flag Register). Cronometrul poate fi cronometrat pe plan intern, prin intermediul prescalării, sau de către o sursă de ceas extern pe pinul T1. Timer-ul este inactiv atunci când nu este selectată sursa de ceas [7].
Capitolul 3. Componentele sistemului de monitorizare
3.1 Mediul de dezvoltare Arduino Uno
Arduino este un sistem de tip „open-source” descendent al platformei „open-source” Wiring, având scopul de a înlesni folosirea sistemelor electronice în diferite proiecte ale utilizatorilor de nivel începător [11].
Arduino este o platformă alcătuită dintr-un suport hardware destul de simplu, un microprocesor Atmel AVR și porturi de Intrare/Ieșire. Arduino este programat folosind un limbaj Wiring bazat pe sintaxe și librării (un limbaj similar cu C++, dar care conține câteva modificări) și un mediu de procesare, pe bază de dezvoltare integrat.
Proiectul Arduino a început în 2005, în Italia și sa dorit să fie un sistem accesibil pentru persoanele cu mai puțină experiență și să aibe un preț mai accesibil decât alte platforme. Un studiu din Mai 2011 arată că sau vândut peste 300 000 de unități. Massimo Banzi si David Cuartielles sunt fondatorii acestei platforme, ei au denumit proiectul după „Arduin of Ivrea” care a fost un personaj istoric. In Italia, Arduino este un nume masculin care se poate traduce ca „prieten puternic”.
Arduino a debutat ca o extensie a platformei Wiring. Kit-ul a fost creat de artistul și programator columbian Barragán Hernando ca o teză de master, la Institutul de Design din Ivrea sub supravegherea lui Massimo Banzi si David Cuartielles [11].
3.1.1 Hardware
Kit-ul Arduino este format dintr-un procesor Atmel AVR pe 8 biți cu diverse componente, care ușurează programarea și conectarea la alte circuite. Datorită modului standard în care sunt așezați conectorii, permit plăcii CPU conectarea module adiționale, aceste module poartă numele de scuturi.
Plăcile Arduino conțin un stabilizator de tensiune de 5 V și un oscilator care are o frecvența de 16 MHZ (în general un cristal și mai rar un rezonator ceramic), există și unele modele care au oscilator la o frecvența de 8 MHz sau care nu includ stabilizator de tensiune.
Când este folosită stiva software a kit-ului Arduino, plăcile sunt programate printr-o conexiune serială de tip RS-232. Plăcile seriale conțin un invertor simplu care face conversia între semnalul RS-232 și TTL [11].
Când este folosită stiva software a kit-ului Arduino, plăcile sunt programate printr-o conexiune serială de tip RS-232. Plăcile seriale conțin un invertor simplu care face conversia între semnalul RS-232 și TTL.Programarea kit-ului Arduino are loc prin portului USB, folosind un cip adaptor de la USB la serial de exemplu: FTDI FT232. Platforma expune majoritatea pinilor de Intrare/Ieșire pentru utilizarea de către alte circuite. Platforma Diecimila utilizează 14 pini digitali de intrare/ieșire, dintre care 6 PWM și 6 pini de intrare analogici. Acești pini se află pe partea de sus a plăcii. Sunt și platforme care au pini pe partea de jos a plăcii [11].
Arduino Uno R3 este o placă bazată pe ATmega328. Ea are 14 pini digitali de intrare/ieșire, 6 PWM, 6 pini de intrare analogici, un oscilator cu cristal de 16MHz, o interfață USB, o intrare pentru alimentare, un header ICSP și un buton pentru reset. Se poate alimenta prin conectare la un calculator cu ajutorul interfeței USB sau utilizând un transformator Ac-Dc.
Arduino Uno diferă de restul plăcilor prin lipsa chip-ului FTDI, acesta face adaptarea de la USB la transmisia serială. În schimb, este dotat cu un procesor Atmega16U2 utilizat ca un convertor USB la serial. A doua generație de la Uno, R2, are un rezistor legat prin linia 8U2 HWB la masă, făcând trecerea mai simplă la modul DFU.
A treia generație are următoarele îmbunătățiri: doi pini SDA si SCL puși lângă pinul AREF și alți doi lângă pinul RESET, circuit de RESET puternic, si procesorul Atmega 16U2 în locul procesorului Atmega 8U2 [11].
Tabel 3.1 Caracteristici Arduino Uno [11]
Fig 3.1 Arduino Uno V3 [12]
Alimentarea:
Arduino Uno poate fi alimentat prin intermediul conexiunii USB sau cu o sursa de alimentare externa. Sursa de alimentare este selectata automat.
Alimentarea externa (non-USB) poate veni fie de la un adaptor AC-la-DC sau baterie. Adaptorul poate fi conectat printr-un conector de 2.1mm cu centru-pozitiv. Conectare de la o baterie poate fi realizata legand la GND si V’in capetele de la conectorii de alimentare.
Placa de dezvoltare poate opera pe o sursa externa de 6-20 volti. Daca este alimentata la mai putin de 7V, exista posibilitatea, ca pinul de 5V sa furnizeze mai putin de cinci volti si placa sa devina instabila. Daca se alementeaza cu mai mult de 12V, regulatorul de tensiune se poate supra-incalzi acest lucru ducand la deteriorarea placii. Intervalul de tensiune recomandat de catre producator este de 7-12 volti [12].
Pinii de tensiune si alimentarea sunt dupa cum urmeaza:
V’in. Tensiune de intrare pe placa de dezvoltare atunci cand este utilizata o sursa de alimentare externa (spre deosebire de 5 volti de la conexiunea USB sau alte surse de energie stabilizata). Puteti introduce tensiuni de alimentare prin intermediul acestui pin, sau, in cazul in care tensiunea de alimentare se face prin intermediul conectorului de alimentare externa, o puteti accesa prin acest pin.
5V. Regulator de tensiune utilizat pentru alimentarea microcontrolerului si a altor componente de pe placa de dezvoltare. Aceasta poate fi alimenta fie de la VIN printr-un regulator de pe placa de dezvoltare, fie furnizat de catre USB sau de o alta sursa de tensiune de 5V.
3V3. O alimentare de 3.3 volti generat de catre regulatorul de tensiune de pe placa. Curentul maxim ca il furnizeaza este de 50 mA.
GND. Pini de impamantare [12].
Comunicare:
Kit-ul Arduino Uno are mai multe facilități de a comunica cu un calculator, alt Arduino sau alt microcontroler. ATmega328 dispune de comunicații seriale UART TTL(5V). Microcontrolerul ATmega16U2 de pe placă se ocupă de comunicații seriale către USB și apare ca un port virtual pentru software-ul de pe calculator. Pentru a fi folosit pe un calculator ce utilizează Windows, este necesar un fișier de tip .inf. Programul Arduino conține un monitor serial care permite transferul de date simple de text către și de la placa Arduino [12].
Librăria SoftwareSerial permite comunicații seriale la oricare pini digitali de pe Arduino Uno. ATmega328 suporta transmisii de tip I2C și SPI. Programul conține o librărie Wire utilizată pentru a simplifica folosirea magistralei I2C [12].
Protecție la supracurent a USB-ului:
Placa Arduino Uno conține o siguranță resetabilă ce protejează portul USB al calculatorului de scurtcircuite sau suprasarcini. Chiar dacă majoritatea calculatoarelor au o protecție proprie, această caracteristică a plăcii aduce un plus de siguranță.La aplicarea unui curent de peste 500mA pe portul USB,placa va opri automat conexiunea, până când scurtcircuitul sau suprasarcina va fi îndepărtată [13].
Memorie:
ATmega328 are o memorie de 32KB ( 0.5KB pentru încărcarea sistemului). Microcontrolerul mai deține și 2KB memorie SRAM și 1KB memorie EEPROM (care poate fi scrisă și citită utilizând librăria EEPROM) [13].
Intrare și Ieșire
Toți cei 14 pini digitali ai plăcii pot fi utilizați ca pini de intrare/ieșire, utilizând funcțiile pinMode(), digitalWrite() și digitalRead(). Pini operează la 5 V. Aceștia pot transmite sau primi un curent de maxim 40 mA și sunt dotați cu o rezistență internă de ridicare având o valoare între 20-50 kOhmi. Uno contine 6 pini de intrare analogici, A0 până la A5.
Placa mai conține și alți pini:
AREF: Pin de referință pentru intrările analogice. Folosit cu analogReference().
RESET: setează tensiunea pe „low” pentru a reseta microcontrolerul. Folosit de obicei pentru a adăuga un buton de reset pe scut [16].
3.1.2 Software
Mediul de dezvoltare Arduino
IDE-ul pe care îl folosește Arduino este o platformă scrisă în Java, și care derivă din IDE-ul folosit de limbajul de programare Processing și proiectul Wiring. Acesta este proiectat astfel încât să introducă conceptul de programare pentru utilizatorilor începători, care nu au cunoștințe bogate în dezvoltarea software. Platforma include un editor de cod care are mai multe facilități (exemplu: marcarea sintaxelor). Platforma este, de asemenea, capabilă să elaboreze și să încarce programe pe placă cu un singur clic [13].
IDE-ul de la Arduino vine cu o librărie de C/C++ care se numește „Wiring”, care face mai ușoare operațiile de intrare/ieșire. Programele Arduino sunt scrise în limbajul C/C++, utilizatorii trebuie să definească două funcții (setup și loop) pentru a face programul să funcționeze, un exemplu este prezentat mai jos:
Tabel 3.2 Clipirea unui led [13]
Au fost definite două funcții, setup() și loop() . Aceste două funcții trebuie să fie prezente în orice program; dacă nu aveți nevoie de vreuna dintre ele atunci scrieți-o și lăsați-o goală (deși este puțin probabil sa existe asemenea situație).
Funcția setup() este executată o singură dată, la inițializarea plăcii (de fiecare dată când este alimentată, de fiecare dată când încărcați un program nou și de fiecare dată când resetați placa)
Funcția loop() se execută apoi la infinit, fără pauză. Dacă este nevoie de pauze trebuie să le introduceți dumneavoastră în mod explicit [13].
În acest program, funcția setup() face un singur lucru: declară pinul 13 (adică pinul digital 13) ca pin de ieșire. Pinul 13 este conectat și la LED-ul de pe placă.
Funcția loop() de mai sus face următoarele:
scrie "1" la pinul 13 (adică din acest moment pinul respectiv va fi alimentat cu 5V)
așteaptă 1000 de milisecunde, adică o secundă; nu uitați, pinul 13 este alimentat, deci LED-ul de pe placă este aprins
scrie "0" la pinul 13 (adică din acest moment pinul respectiv nu va mai fi alimentat)
așteaptă din nou o secundă (dar de data asta pinul 13 nu mai este alimentat, deci LED-ul este stins) [13].
Codul de mai sus nu ar fi văzut pe un compilator de C++ ca un program valabil, iar atunci când utilizatorul apasă butonul de „Unpload”, o copie a codului este scrisă într-un fișier temporar care include un antet în partea de sus și o funcție main ( ) în partea de jos, pentru a face codul vizibil în C++.
Arduino utilizează GNU Project și AVR Libc pentru a face compilarea programelor, iar pentru a transfera programele pe plăcuță utilizează Avrdude.
Limbajul Arduino este implementat în C/C++, și prin urmare, are unele diferențe față de limbajul Processing, care se bazează pe Java. Textul de referință, Arduino, este licențiat sub o licență Creative Commons Attribution Share-Alike, versiunea 2.5 care permite să fie postate pe site-ul oficial date despre platform [13].
Resetare software automata
Arduino Uno este creat astfel încât să poată fi resetat de un program care rulează pe un calculator legat la placă. Una dintre liniile de control hardware (DTR) este legată la pinul de reset al lui ATmega328 printr-un condensator cu o valoare de 100nF. Când linia primește un semnal „low”, linia de reset coboară suficient de mult încât se resetează cip-ul. Programul utilizează această caracteristică pentru a ajuta utilizatorul să încarce programul printr-o simplă apăsare a butonul de încărcare, ceea ce face ca procesul de inițializare să poată avea o durată mai mică de așteptare, iar reducerea DTR poate fi bine supravegheată odată cu începutul încărcării programului.[13]
Chiar dacă este setat să ignore informația coruptă, Uno va primi câțiva biți transferați după ce conexiunea este deschisă. De aceea, placa trebuie să aștepte o secunde înainte să primească datele transmise.
Arduino Uno dispune de o linie care poate fi întreruptă pentru a dezactiva resetare automată. Pentru a o reactiva, liniile de pe ambele parți ale plăcii trebuiesc resudate. Utilizatorul poate să dezactiveze procesul de auto-resetare prin conectarea unei rezistențe de 110 Ohmi între pinul de 5V și linia utilizată pentru reset [13].
Programarea
Arduino Uno este programat folosind soft-ul Arduino, care se poate găsi pe site-ul oficial. Microcontrolerul ATmega328 aflat pe placa Arduino Uno conține o instrucțiune de inițializare care îi permite programatorului să încarce un codul fără a fi necesar un programator de hardware extern. Comunicarea are loc folosind protocolul original STK500. Microcontrolerul se poate programa și utilizând header-ul ICSP (In-Circuit Serial Programming) [13].
Fig.3.3 Mediul de programare Arduino [13]
Activarea proceduri DFU se poate face astfel:
– La generația R1: se conectează jumper-ul de pe spatele plăcii și după aceea se resetează microcontrolerul 8U2.
– La generația R2 : se folosește rezistorul care leagă procesorul 8U2/16U2 la masă.
Tipuri de module
Un proiect bazat pe platforma Arduino consistă din mai multe module conectate între ele. Modulele pot fi categorisite în funcție de diverse criterii.Vom vedea mai jos cum anume se conectează diversele module la platforma de dezvoltare [14].
Platforma de dezvoltare — aceasta este placa electronică ce conține microcontroller-ul („creierul”) programabil. Dat fiind că platforma Arduino este open source, sunt disponibile atât platforme Arduino originale, fabricate în Italia, cât și clone compatibile, mai ieftine, fabricate în general în China.Există mai multe modele de astfel de platforme, modele care diferă atât în ceea ce privește capabilitățile cât și în ceea ce privește dimensiunile fizice. Totuși limbajul de programare, mediul de dezvoltare și interconectarea diverselor module sunt practic identice, indiferent de modelul specific al platformei.
Module de intrare — numite și senzori, acestea sunt module care se conectează la platforma Arduino pentru a trimite date către aceasta (de exemplu butoane, senzori de temperatură, senzori de distanță,potențiometre ș.a.m.d.)
Module de ieșire — acestea sunt module care se conectează la platforma Arduino pentru a permite acesteia să transmită informații către lumea exterioară. Acestea pot fi relee, afișaje, difuzoare ș.a.m.d.
Module de date — modulele de date permit platformei Arduino să comunice direct cu alte dispozitive digitale (inclusiv cu alte module Arduino). Modulele de date pot fi module Ethernet, care permit comunicația prin Internet sau printr-o rețea locală, module radio, care pot comunica cu computere sau alte platforme Arduino, module USB, module GSM și așa mai departe.
Accesorii — acestea nu sunt în general considerate module Arduino, însă sunt o parte uzuală a proiectelor de acest gen. Există tot felul de accesorii, de la soluții de alimentare cu curent electric până la cele mai diverse accesorii [14].
Debugging
Mai devreme sau mai târziu programul va deveni atât de complicat încât ne vom lovi de erori de logică; este inevitabil. Vom dori să monitorizăm valorile variabilelor, să vedem care ramură condițională se execută și așa mai departe. În acest scop avem la dispoziție conexiunea la computer, prezentă și după ce ați încărcat aplicația. Pentru a vedea cum se face asta, încărcăm exemplul ASCII Table: File > Examples > 4. Communication > ASCII Table. Încărcăm aplicația, apoi porniți monitorul serial: Tools > Serial monitor. Asigurați-vă că viteza de comunicație este configurată la 9600 baud (în colțul din dreapta-jos al ferestrei monitorului). Ce vedeți în acea fereastră este trimis către computer de către codul pe care l-ați încărcat [14].
3.2 Modulul GSM/GPRS SM5100B
Modulul conține: un conector cu 60 de pini SM5100B, un suport de cartela SIM și un regulator de voltaj SPX29302. Regulatorul are rolul de a regla voltajul brut al plăcii Arduino la 3,8V. Butonul de reset al plăcii Arduino este adus pe scut [15].
Modulul SM5100B este așezat pe o placă care are o singură față, și care funcționează pe patru benzi (GSM 850/ EGSM 900/ DCS 1800/ PCS 1900), putând fi introdus în diferite proiecte care țin de comunicații fără fir [15].
Fig. 3.3 Modulul GSM-GPRS SM5100B [15]
SM5100B GSM / GPRS este un mic panou unic , este , de asemenea, un quad -band GSM 850/EGSM 900/DCS 1800/PCS 1900 de module pot fi integrate într-o varietate de telefoane mobile și alte dispozitive fără fir . Intervalul normal de intervalul de temperatură : -10 ° C la +55 ° C ( complet compatibil ) [15].
Caracteristici tehnice:
Tabel 3.3 Caracteristici tehnice SM5100B [16]
Funcționalități de bandă
Partea de bandă a modulului conține un cip SC6600D, aparținând SPREADTRUM. Acest cip folosește tehnologia CMOS de semnal mixată la 0.18μm, care permite integrarea masivă cât și un consum mic de putere. Cipul reprezintă o soluție „mono-cip” pentru telefoanele mobile pe patru benzi și pentru modem-urile de date care utilizează EGSM 900, GSM 850, DCS 1800 și PCS 1900 [16].
Funcționalități de Radio Frecvență:
Frecvențele de operare sunt următoarele:
– Rx (EGSM 850): 869 – 894MHz
– Tx (EGSM 8 50): 824 – 849MHz
– Rx (EGSM 900): 925 – 960MHz
– Tx (EGSM 900): 880 – 915MHz
– Rx (DCS 1800): 1805 – 1880MHz
– Tx (DCS 1800): 1710 – 1785MHz
– Rx (PCS 1900): 1930 – 1990MHz
– Tx (PCS 1900): 1850 – 1910MHz
Alimentare
Sursa de alimentarea este un element important în crearea de terminale GSM. GSM-ul utilizează burst-uri radio de 577μs la fiecare 4.615ms, de aceea sursa de alimentarea folosită este obligată să genereze curenți mari de vârf într-un timp scurt [16].
Tabel 3.4 Descrierea pinilor VBAT [16]
(*) trebuie să fie cuprinsă între intervalele Burst-ului.
(**) este valoarea maximă de operare a modulului.
Dacă se conectează o baterie modulului, impedanța totală(baterie + protecție) nu trebuie să depășească 150 mOhm [16].
Tabel 3.5 Consumul în modul oprit,sursa [16]
Fig. 3.4 Schema bloc a scutului GSM SM5100B [22]
Descrierea pinilor de masă:
Tabel 3.6 Descriere pinilor GND [16]
Consumul de putere:
Tabel 3.7 Consumul de putere în modul oprit [16]
Tabel 3.8 Consumul în modul EGSM 900MHz [16]
Tabel 3.9Consumul in modul DCS/PCS 1800 MHz [16]
Ieșire Vcc
Modulul are doi pini: pin-ul 47 și 60, prin care se poate alimenta un dispozitiv extern cu o tensiune cuprinsă între 2.5-3V și un curent maxim de 50mA [16].
Interfața SPI
Interfața SPI include un semnal de ceas, un semnal de intrare/ieșire, un semnal RS și un semnal CS, semnalele îndeplinesc standardelor SPI iar pinii lor pot fi utilizați de asemenea ca GPIO [16].
Fig 3.5 Conector 60 pini-GSM SM5100B
SIM Interface
Figura de mai jos arată design-ul pentru cartela SIM de 1.8V și 3V.
Fig. 3.6 Conexiuni cartela SIM [16]
SIM_VCC trebuiesc adăugate 3 condensatoare : 4,7 uF , 0,1 uF , 27 pF
SIM_RST,SIM_DATA,SIM_CLK de asemenea au nevoie de un condensator de 27 pF pe fiecare linie
SIM_DATA are nevoie de o rezistență 2K pentru SIM_VCC [16]
Scutul GSM nu suport cartelă SIM de 5V.
Tabel 3.11 Descrierea pinilor SIM-ului[16]
Reset:
Semnalul de reset este folosit pentru a crea o stare de resetare folosind o tensiune scăzută care să aibă o durată de t=100μs. Această metodă este utilizată ca mod de reset doar în caz de urgență. O secvență de resetare este încărcată în timpul secvenței de inițializare.
Acest semnal este doar un reset intern, nu poate fi folosit pentru resetarea unui dispozitiv extern. Operația de resetare este activată printr-u semnalul extern sau utilizând un semnal intern venit de la generatorul de resetare. Această resetare automată este activată la pornire [16].
Tabel 3.12 Caracteristicile pinului Reset [16]
Interfața de pornire:
Interfața este folosită pentru a porni modulul SM5100. Este necesară o tensiune de nivel înalt pe acest pin pentru a pornii modulul. După ce modulul este pornit, acest pin va fi automat setat ca GPIO [16].
Tabel 3.13 Caracteristicile pinului Power On [16]
Specificațiile antenelor compatibile:
Antenele trebuie să respecte următoarele:
Impedanța: 50 Ohm
Câștigul tipic radiat trebuie să aibă valoarea 0dB
Tabel 3.14 Banda de frecvență [16]
Tabel 3.15 Performanțele Radio Frecvență [16]
Parametrii de mediu:
Tabel 3.16 Parametrii de mediu [16]
3.3 Antena GSM/GPRS Quad Band SMA
Specificații:
GSM/850E : 824 până la 894MHz
GSM : 880 până la 960MHz
DCS : 1710 până la 1880MHz
PCS : 1850 până la 1990MHz [17]
Fig 3.7 Antena GSM/GPRS Quad Band SMA [17]
Fig 3.8 Defininrea planurilor antenei [17]
Tabel 3.17 Câștigul antenei [17]
3.4 Bateria Plumb Acid
Bateria Plumb Acid VIPOW ACCU+HP1.3-12 este o baterie reîncarcabila.
Am folosit această baterie pentru a alimenta sistemul de monitorizare.
Fig 3.9 Bateria Plumb Acid VIPOW [18]
Specificații tehnice:
Tabel 3.18 Specificatii tehnice ale bateriei Plumb Acid [18]
3.5 Divizorul de tensiune
Este un circuit format din 2 sau mai multe rezistoare conectate în serie și alimentate cu o sursă de tensiune continuă. Pe fiecare rezistor cade o fracțiune din valoarea tensiunii de alimentare în funcție de valoarea rezistorului respectiv.[20]
Formula divizorului de tensiune cu ajutorul căreia se poate determina rapid căderea de tensiune pe fiecare rezistor din circuitul divizorului:
Un=1,25V,U=12V de unde rezultă că raportul dintre Rn și Re este 1:10.
Formula divizorului de tensiune și se poate exprima astfel: Raportul dintre tensiunea de pe un rezistor și tensiunea de alimentare este egal cu raportul dintre valoarea rezistorului respectiv și rezistența echivalentă a circuitului [20].
Potențiometrul – este un rezistor variabil cu 3 terminale și un element mobil (cursor) care se deplasează între capetele rezistorului.
Fig. 3.10 Construcția potențiometrului[20]
Fig.3.11 Funcționarea potențiometrului [20]
În figura 1.4.3 a cursorul 0 este mai aproape de terminalul 2 ⇒ R2 < R1
În figura 1.4.3 b cursorul 0 este mai aproape de terminalul 1 ⇒ R2 > R1
Prin deplasarea cursorului 0 dinspre terminalul 1 spre terminalul 2, rezistența dintre cursor și terminalul 2 (R2) crește, iar rezistența dintre cursor și terminalul 1 (R1) scade.
Conform formulei divizorului de tensiune. la creșterea rezistenței R2 crește și valoarea tensiunii electrice Ux pe această rezistență [20].
Capitolul 4. Proiectarea sistemului
4.1 Descrierea generală a sistemului.
Centrele de monitorizare folosesc linii telefonice clasice,dar în aceeași măsură și pe cele speciale,căi de comunicație radio,rețele de transmisiuni de date,proprii dar și deservite în comun cu alte domenii de activitate,un bogat bagaj de tehnică de calcul,echipamente electronice,programe dedicate.Transmiterea pachetelor de evenimente se realizează pe o mare paletă de medii de transport,rețele de telefonie comutată,analogică și digitală,canale radio pe frecvențe publice sau dedicate,linii de comunicație directă,rețele de telefonie celulară,GSM,CDMA,TMDA,GPRS.
Fig. 4.1 Structura unui sistem de monitorizare [1]
Sistemul de monitorizare-supraveghere prin GPRS/SMS este un produs relativ care a apărut pe piață și are funcții multiple de securitate,poziționare,monitorizare și urmărire.Este un dispozitiv mic,copact ,ce se poate instala în orice tip de autovehicul,fară a fi la vedere.Acesta suportă funcțiile SMS/GPRS ale operatorilor de telefonie mobile din România și transmisii de date prin internet.Dispozitivul de monitorizare se adresează în principal persoanelor ce doresc o monitorizare continuă a autoturismului personal.Acest sistem se montează pe autoturism urmând ca monitorizarea să se realizeze prin intermediul telefonului mobil sau de pe calculator prin intermediul unui software. În modulul GSM se introduce un SIM de cartelă GSM.Se pot folosi cartelele oricărui operator de telefonie mobilă ce activează în România [21].
În prezent autovehiculele au devenit din ce în ce mai inteligente prin echipamentele cu care sunt dotate. Prin aplicația dezvoltată de mine se dorește avertizarea cât mai rapidă a proprietarului autoturismului în scopul câștigului de timp și evitarea evenimentelor nedorite.Avertizarea telefonică este mult mai avantajoasă ținând cont,că telefonul este întotdeauna în apropierea fiecărei persoane [21].
4.2 Schema bloc și descrierea funcționării sistemului ales
LED stare
Fig. 4.2 Schema bloc a sistemului de monitorizare
Sistemul de monitorizare ales este conceput pentru monitorizarea bateriei autoturismului.Pentru realizarea sistemului am avut nevoie în primul rând de un modul GSM care sa îmi permită comunicația între sistem și proprietar prin intermediul undelor radio.
Acest sistem se poate instala pe orice tip de autoturism.Acesta este format dintr-un kit Arduino,un modul GSM,o baterie de 12V și o placuță de stabilizare a tensiunii de la intrare(a bateriei) pentru Arduino.Alimentarea pentru Arduino este facută deci de la baterie insă cu ajutorul stabilizatorului vom avea la intrare o tensiune de 9V,iar modulul GSM se alimentează direct de la baterie deoarece conține deja un regulator care imi permite sa alimentez de la maxim 16V.
Funcționarea sistemului se realizează astfel:daca tensiunea este peste 11V va sta aprins ledul 13 de pe Arduino,iar dacă tensiunea de pe baterie scade sub 11V se va aprinde ledul 11.Voi simula descărcarea bateriei cu ajutorul unui potențiometru.Tensiunea de la ieșirea potențiometrului reprezintă tensiunea la intrarea convertorului analogi-digital A0.
Comunicația serială între Arduino și modulul GSM se realizează prin pinul 2 și pinul 3 de pe Arduino,respective pinul 2 și pinul 3 de pe modulul GSM.Interfața prin care comunică cele 2 module este reprezentată de magistrala SPI.În plus modulul GSM are atașată o antenă pentru a mări aria de acoperire și un slot pentru a introduce cartela SIM preplătită.
Încărcarea programului pe kitul Arduino se realizează printr-un cablu USB.În momentul alimentării sistemului se așteaptă aproximativ 30-40 secunde pentru ca SIM-ul să fie verificat și gata de comunicare în rețea.Din acest moment daca pe intrarea convertorului analogic-digital tensiunea este sub pragul specificat se începe procedura pentru trimiterea SMS-ului pe telefonul proprietarului.Dupa această operație ledul 11 se vas tinge indicând că mesajul a fost trimis.
4.3 Realizarea practică
Sistemul implementat are în componență kitul de dezoltare Arduino,scutul GSM SM5100B,antena GSM, placuță pentru stabilizarea tensiunii de la intrare și o baterie plumb acid de 12V.Pentru programare am folosit mediul Arduino.
Montajul final al sistemului de monitorizare este prezentat în figura de mai jos:
Fig. 4.3 Sistemul de monitorizare realizat
Tensiunea de alimentare o reprezintă o baterie plumb acid de 12V care alimentează în mod direct scutul GSM SM5100B deoarece acesta are atașat un regulator de tensiune care suportă o tensiune maximă de intrare de 16V.Pentru a alimenta kitul Arduino am realizat o plăcuță pe care am lipit un stabilizator de tensiune de 9V,un potențiometru și rezistoarele necesare pentru divizorul de tensiune.
Fig. 4.4 Placuță stabilizator(a)
Fig. 4.5 Plăcuță stabilizator(b)
Rezistențele alese au valorile de 4,7K și 47K pentru a avea un raport de demultiplicare de 1:11.
Am lipit doua condensatoare pe intrare și ieșire pentru a elimina vârfurile de tensiune și pentru a răspunde cat mai bine la variațiile curent.Valoare condensatorului de la intrare are valoarea de 1000uF,iar valoarea condensatorului de la ieșire are valoarea de 4,7uF.
Kitul Arduino comunică cu scutul GSM prin interfața serială SPI.Există 2 pini pentru această transmisie: Rx și Tx.Pinii Rx și Tx sunt de fapt pinii 2 și 3 pentru Arduino si scutul GSM.
Am adăugat un led pentru a simula atunci cand bateria este incărcata sau descărcată.Montajul este conceput ca atunci când bateria este încărcată este aprins ledul 13 de pe Arduino,iar când bateria este descărcată se aprinde ledul roșu atașat pinului 11.
Prin pinul A0 analogic este citită tensiunea de la potențiometru.Când tensiunea scade,simulând cu ajutorul potențiometrului ,se citește această tensiune,se compară cu pragul de 11V.În cazul in care tensiunea este mai mică decât acest prag va începe inițializarea scutului GSM,care intr-un final va trimite un mesaj SMS în care va atenționa proprietarul despre starea bateriei autovehicului.
În program am folosit librariile pentru GSM și pentru trimiterea datelor către intefața serială(SoftwareSerial).Contribuția mea practică în această parte a fost crearea propriu-zisă a programului principal.
În bucla principală a programului se citește valoarea de la intrarea convertorului analogic-digital și se compară cu valoarea 90.Se așteaptă 6 zecimi de secundă după care se aprinde ledul roșu simulând astfel descărcarea bateriei.Se apelează subprogramul pentru trimiterea mesajului,iar după ce acesta a fost trimis se stinge ledul roșu indicând faptul mesajul a fost tirmis cu succes.
Ultimele 5 linii de cod au rolul de evita intrarea într-o buclă in care modulul GSM să trimită mesaje continuu.Pâna la citirea unei noi tensiuni acesta ramâne într-o stare de așteptare,până cand va citi din nou tensiunea și va lua decizia în funcție de valoarea acesteia.
4.4 Organigrama programului
Concluzii
Sistemul de monitorizare se bazează pe schema bloc prezentată,iar avertizarea se realizează prin metode software și bineînțeles cu ajutorul modulului GSM.
Modificarea sistemului se poate realiza foarte ușor.Acesta prezintă o mare flexibilitate datorită implementării software.
Realizarea practică a sistemului propus prezintă anumite limitări datorită absenței unui autovehicul pe care să fie implementat sistemul.
Sistemul prezentat descrie funcționalitatea unui sistem de monitorizare a bateriei autovehiculului.Datorită metodei de avertizare folosită,aceasta este una foarte practică deorece folosește semnalul GSM.
Centrul de monitorizare ocupă un loc important în cadrul sistemelor de asigurare a securității și activitatea întreprinsă în cadul acestora este una de vârf,motiv pentru care și în viitor acestea vor reprezenta un factor de progress și o permanentă provocare pentru a aduce noi soluții în scopul creșterii continue a gradului de securitate,al valorilor economice și financiare.
Am ales să realizez acest sistem de monitorizare deoarece în prezent societatea se află într-o continuă dezvoltare,iar în acest process timpul reprezintă cea mai importantă resursă.Tot mai multă populație tinde spre achiziționarea de noi tehnologii care să evite timpul pierdut în momentul în care le-ar face personal.Telefonul mobil,internetul,calculatorul personal nu mai reprezintă o noutatate pentru populație,de aici dorința de a achiziționa noile dispositive care sa le ușureze munca,timpul și banii pierduți.
Consider că în urma redactării acestei lucrări am dobândit multe cunoștinte legate de semnal GSM,microcontrolere,programare și electronică.În ciuda problemelor întampinate,am reușit sa finalizez această temă de licență,declarându-mă mulțumit de ce am realizat.
Probleme întampinate
Realizarea legăturii dintre Arduino și modulul GSM
Am observat că modulul GSM funcționează într-o singură rețea din România
O parte din comenzile din foaia de catalog nu funcționau prin intermediul conexiunii seriale
Conectarea la rețea a cartelei SIM
Bibliografie
[1]http://www.revistaalarma.ro/pdf/Sisteme%20de%20monitorizare%20centralizata%20la%20distanta%20a%20sistemelor%20de%20alarma-9.pdf
[2] http://www.go4it.ro/telefoane-mobile/retelele-gsm-pe-intelesul-tuturor-3291414/
[3] http://en.wikipedia.org/wiki/Gsm
[4] http://cursuri-online.wikispaces.com/file/view/MICROCONTROLERE+PARTEA+1.pdf
[5] http://www.robotics.ucv.ro/flexform/aplicatii/
[6] http://www.protostack.com/microcontrollers/atmega328-pu-atmel-8-bit-32k-avr-microcontroller
[7] http://www.atmel.com/products/microcontrollers/avr/default.aspx
[8] http://www.derivat.ro/cursuri-electronica/an3
[9] http://ro.wikipedia.org/wiki/Microcontroler
[10] http://www.hobbytronics.co.uk/arduino-atmega328-pinout
[11] http://en.wikipedia.org/wiki/Arduino
[12] http://invata.mecatronica.eu/arduino-uno-specificatii-tehnice/
[13 http://arduino.cc/en/Main/ArduinoBoardUno
[14] http://www.capisci.ro/articole/Arduino
[15] http://www.sparkfun.com/products/9607
[16] https://www.sparkfun.com/datasheets/CellularShield/SM5100B%20Datasheet.pdf
[17] https://www.sparkfun.com/products/675
[18] https://www.sparkfun.com/datasheets/CellularShield/SM5100B%20AT%20Command%20Set.pdf
[19] http://www.tme.eu/en/details/accu-hp1.3-6/acid-cells/vipow/
[20] http://eprofu.ro/docs/electronica/carte/divizor-de-tensiune.pdf
[21] http://www.gpsmonitor.ro/monitorizare-supraveghere-urmarire-gps.html
[22] http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Cellular/SM5100B-D_HW_spec_V1.0.0.pdf
[23] http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
Anexa1: Implementare software-cod sursă
Libraria pentru SMS
#include <SerialGSM.h>
SerialGSM::SerialGSM(int rxpin,int txpin):
SoftwareSerial(rxpin,txpin)
{
verbose=false;
}
void SerialGSM::FwdSMS2Serial()
{
Serial.println("AT+CMGF=1"); // setează timp SMS-ului de tip text
this->println("AT+CMGF=1"); // setează timp SMS-ului de tip text
delay(200); //adăugam o întrârziere de 2 secunde
this->ReadLine();
Serial.println("AT+CNMI=3,3,0,0"); // setează modulul să trimită SMS pe portul serial
this->println("AT+CNMI=3,3,0,0"); // setează modulul să trimită SMS pe portul serial
delay(200);
this->ReadLine();
}
void SerialGSM::SendSMS(char * cellnumber,char * outmsg)
{
this->Rcpt(cellnumber);
if (verbose) Serial.println(rcpt);
this->StartSMS();
this->Message(outmsg);
Serial.print(outmessage);
this->print(outmessage);
this->EndSMS();
delay(500);
this->ReadLine();
}
void SerialGSM::SendSMS()
{
if (verbose) Serial.println(rcpt);
if (verbose) Serial.println(outmessage);
this->StartSMS();
Serial.print(outmessage);
this->print(outmessage);
this->EndSMS();
delay(500);
this->ReadLine();
}
//funcția de ștergere a SMS-urilor
void SerialGSM::DeleteAllSMS(){
Serial.println("AT+CMGD=1,4"); // șterge toate SMS-urile
this->println("AT+CMGD=1,4"); // șterge toate SMS-urile
delay(200);
this->ReadLine();
}
//funcția de resetare a modulului
void SerialGSM::Reset(){
Serial.println("AT+CFUN=1,1");
this->println("AT+CFUN=1,1"); delay(200);
this->ReadLine();
}
//funcția de terminare a SMS-ului
void SerialGSM::EndSMS(){
this->print(char(26)); //echivalentul ASCII pentru CTRL+Z
Serial.println();
//delay(5 * 1000); // timpul care îi ia modulului să returneze statusul OK
}
//funcția de inițializare a SMS-ului
void SerialGSM::StartSMS(){
Serial.println("AT+CMGF=1");
this->println("AT+CMGF=1");
delay(200);
this->ReadLine();
Serial.print("AT+CMGS=");
this->print("AT+CMGS=");
this->print(char(34)); //echivalentulASCII al "
Serial.print(rcpt);
this->print(rcpt);
this->println(char(34)); // echivalentul ASCII al "
delay(500); // timpul de întârziere a modulului pentru a gândi
this->ReadLine();
}
int SerialGSM::ReadLine()
{
static int pos=0;
char nc;
while (this->available())
{
nc=this->read();
if (nc == '\n' or (pos > MAXMSGLEN) or ((millis()> lastrec + SERIALTIMEOUT)and (pos > 0)) ){
nc='\0';
lastrec=millis();
inmessage[pos]=nc;
pos=0;
if (verbose) Serial.println(inmessage);
return 1;
}
else if (nc=='\r') {
}
else{
inmessage[pos++]=nc;
lastrec=millis();
}
}
return 0;
}
boolean SerialGSM::Verbose()
{
return verbose;
}
void SerialGSM::Verbose(boolean var1)
{
verbose=var1;
}
char * SerialGSM::Sender(){
return sendernumber;
}
char * SerialGSM::Message()
{
return inmessage;
}
void SerialGSM::Sender(char * var1)
{
sprintf(sendernumber,"%s",var1);
}
void SerialGSM::Message(char * var1)
{
sprintf(outmessage,"%s",var1);
}
void SerialGSM::Boot(){
int counter=0;
while(counter++ < 15){
if (verbose) Serial.print(".");
delay(1000);
}
if (verbose) Serial.println();
}
#include <SerialGSM.h>
#include <SoftwareSerial.h>
SerialGSM cell(2,3);
int sensorPin = A0; // selectarea pinului de intrare pentru potențiometru
// select the pin for the LED
int sensorValue = 0;// variabilă pentru a stoca valorea venită de la senzor
int led = 11;
void setup()
{
pinMode(led, OUTPUT);
// declare the ledPin as an OUTPUT:
delay(30000); // se așteaptă modulul GSM
cell.begin(9600);
}
void sendSMS()
{
cell.Verbose(true); // folosit pentru debugging
cell.Boot();
cell.FwdSMS2Serial();
cell.Rcpt("+40766575004"); // înlocuirea xxxxxxxxxx cu numărul de telefon al proprietarului
cell.Message("Baterie descarcata");
cell.SendSMS();
}
void loop()
{
// citește valorea de la senzor:
sensorValue = analogRead(sensorPin);
delay(600);
Serial.println(sensorValue);
if(sensorValue<90)
{
digitalWrite(led, HIGH);
sendSMS();
do // ștergeți această buclă pe riscul dumneavoastră
{
delay(1);
}
while (1>0);
digitalWrite(led ,LOW);
}
Anexa 2
Anexa 3
Bibliografie
[1]http://www.revistaalarma.ro/pdf/Sisteme%20de%20monitorizare%20centralizata%20la%20distanta%20a%20sistemelor%20de%20alarma-9.pdf
[2] http://www.go4it.ro/telefoane-mobile/retelele-gsm-pe-intelesul-tuturor-3291414/
[3] http://en.wikipedia.org/wiki/Gsm
[4] http://cursuri-online.wikispaces.com/file/view/MICROCONTROLERE+PARTEA+1.pdf
[5] http://www.robotics.ucv.ro/flexform/aplicatii/
[6] http://www.protostack.com/microcontrollers/atmega328-pu-atmel-8-bit-32k-avr-microcontroller
[7] http://www.atmel.com/products/microcontrollers/avr/default.aspx
[8] http://www.derivat.ro/cursuri-electronica/an3
[9] http://ro.wikipedia.org/wiki/Microcontroler
[10] http://www.hobbytronics.co.uk/arduino-atmega328-pinout
[11] http://en.wikipedia.org/wiki/Arduino
[12] http://invata.mecatronica.eu/arduino-uno-specificatii-tehnice/
[13 http://arduino.cc/en/Main/ArduinoBoardUno
[14] http://www.capisci.ro/articole/Arduino
[15] http://www.sparkfun.com/products/9607
[16] https://www.sparkfun.com/datasheets/CellularShield/SM5100B%20Datasheet.pdf
[17] https://www.sparkfun.com/products/675
[18] https://www.sparkfun.com/datasheets/CellularShield/SM5100B%20AT%20Command%20Set.pdf
[19] http://www.tme.eu/en/details/accu-hp1.3-6/acid-cells/vipow/
[20] http://eprofu.ro/docs/electronica/carte/divizor-de-tensiune.pdf
[21] http://www.gpsmonitor.ro/monitorizare-supraveghere-urmarire-gps.html
[22] http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Cellular/SM5100B-D_HW_spec_V1.0.0.pdf
[23] http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
Anexa1: Implementare software-cod sursă
Libraria pentru SMS
#include <SerialGSM.h>
SerialGSM::SerialGSM(int rxpin,int txpin):
SoftwareSerial(rxpin,txpin)
{
verbose=false;
}
void SerialGSM::FwdSMS2Serial()
{
Serial.println("AT+CMGF=1"); // setează timp SMS-ului de tip text
this->println("AT+CMGF=1"); // setează timp SMS-ului de tip text
delay(200); //adăugam o întrârziere de 2 secunde
this->ReadLine();
Serial.println("AT+CNMI=3,3,0,0"); // setează modulul să trimită SMS pe portul serial
this->println("AT+CNMI=3,3,0,0"); // setează modulul să trimită SMS pe portul serial
delay(200);
this->ReadLine();
}
void SerialGSM::SendSMS(char * cellnumber,char * outmsg)
{
this->Rcpt(cellnumber);
if (verbose) Serial.println(rcpt);
this->StartSMS();
this->Message(outmsg);
Serial.print(outmessage);
this->print(outmessage);
this->EndSMS();
delay(500);
this->ReadLine();
}
void SerialGSM::SendSMS()
{
if (verbose) Serial.println(rcpt);
if (verbose) Serial.println(outmessage);
this->StartSMS();
Serial.print(outmessage);
this->print(outmessage);
this->EndSMS();
delay(500);
this->ReadLine();
}
//funcția de ștergere a SMS-urilor
void SerialGSM::DeleteAllSMS(){
Serial.println("AT+CMGD=1,4"); // șterge toate SMS-urile
this->println("AT+CMGD=1,4"); // șterge toate SMS-urile
delay(200);
this->ReadLine();
}
//funcția de resetare a modulului
void SerialGSM::Reset(){
Serial.println("AT+CFUN=1,1");
this->println("AT+CFUN=1,1"); delay(200);
this->ReadLine();
}
//funcția de terminare a SMS-ului
void SerialGSM::EndSMS(){
this->print(char(26)); //echivalentul ASCII pentru CTRL+Z
Serial.println();
//delay(5 * 1000); // timpul care îi ia modulului să returneze statusul OK
}
//funcția de inițializare a SMS-ului
void SerialGSM::StartSMS(){
Serial.println("AT+CMGF=1");
this->println("AT+CMGF=1");
delay(200);
this->ReadLine();
Serial.print("AT+CMGS=");
this->print("AT+CMGS=");
this->print(char(34)); //echivalentulASCII al "
Serial.print(rcpt);
this->print(rcpt);
this->println(char(34)); // echivalentul ASCII al "
delay(500); // timpul de întârziere a modulului pentru a gândi
this->ReadLine();
}
int SerialGSM::ReadLine()
{
static int pos=0;
char nc;
while (this->available())
{
nc=this->read();
if (nc == '\n' or (pos > MAXMSGLEN) or ((millis()> lastrec + SERIALTIMEOUT)and (pos > 0)) ){
nc='\0';
lastrec=millis();
inmessage[pos]=nc;
pos=0;
if (verbose) Serial.println(inmessage);
return 1;
}
else if (nc=='\r') {
}
else{
inmessage[pos++]=nc;
lastrec=millis();
}
}
return 0;
}
boolean SerialGSM::Verbose()
{
return verbose;
}
void SerialGSM::Verbose(boolean var1)
{
verbose=var1;
}
char * SerialGSM::Sender(){
return sendernumber;
}
char * SerialGSM::Message()
{
return inmessage;
}
void SerialGSM::Sender(char * var1)
{
sprintf(sendernumber,"%s",var1);
}
void SerialGSM::Message(char * var1)
{
sprintf(outmessage,"%s",var1);
}
void SerialGSM::Boot(){
int counter=0;
while(counter++ < 15){
if (verbose) Serial.print(".");
delay(1000);
}
if (verbose) Serial.println();
}
#include <SerialGSM.h>
#include <SoftwareSerial.h>
SerialGSM cell(2,3);
int sensorPin = A0; // selectarea pinului de intrare pentru potențiometru
// select the pin for the LED
int sensorValue = 0;// variabilă pentru a stoca valorea venită de la senzor
int led = 11;
void setup()
{
pinMode(led, OUTPUT);
// declare the ledPin as an OUTPUT:
delay(30000); // se așteaptă modulul GSM
cell.begin(9600);
}
void sendSMS()
{
cell.Verbose(true); // folosit pentru debugging
cell.Boot();
cell.FwdSMS2Serial();
cell.Rcpt("+40766575004"); // înlocuirea xxxxxxxxxx cu numărul de telefon al proprietarului
cell.Message("Baterie descarcata");
cell.SendSMS();
}
void loop()
{
// citește valorea de la senzor:
sensorValue = analogRead(sensorPin);
delay(600);
Serial.println(sensorValue);
if(sensorValue<90)
{
digitalWrite(led, HIGH);
sendSMS();
do // ștergeți această buclă pe riscul dumneavoastră
{
delay(1);
}
while (1>0);
digitalWrite(led ,LOW);
}
Anexa 2
Anexa 3
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Monitorizarea la Distanta a Tensiunilor de pe Autovehicul (ID: 162860)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
