Sistem automat de comandă a unui motor [302762]

Universitatea “Politehnica” [anonimizat] a unui motor

Proiect de diplomă

Prezentat ca cerință parțială pentru obținerea titlului de

Inginer în domeniul Electronică și Telecomunicații

Programul de studii de licență Electronică Aplicată

(ETC – ELA)

Conducător științific Absolvent: [anonimizat]. Mădălin Corneliu FRUNZETE Andreea MARIN

2016

CUPRINS

1. Introducere………………………………………………………..

2. Fundamentarea teoretică………………………………………

2.1 Obiectul automaticii…………………………………………

2.2 Scurta istorie a sistemelor automate programabile………………..

2.3 Avantajele si dezavantajele automatelor programabile………..

2.4 Automate finite………………………………………………….

3. Arhitectura microcontrolerelor și echipamentele utilizate……………..

3.1 Microcontrolerul ATmega328P……………….

3.2 Arduino Uno…………………………….

3.2.1 Alimentare…………………………………………….

3.2.2 Memoria……………………………………..

3.2.3 Limbajul de programare……………………………….

3.4 Shield GSM…………………………………………………………….

3.4.1 Modulul SIM900………………………………

3.4.2 Antena GSM/GPRS …………………………………………………

3.6 Modul de alimentare………………………

3.7 Senzorul de proximitate…………………

3.8 Motor pas cu pas…………………………..

4. Realizarea practica…………………………….

4.1 Schema bloc a circuitului……………………

4.2 Organigrama softului…………………

4.3 Programarea …………………………………………….

4.4 Realizarea practică a porții……………………………………..

5. Concluzii…………………………………………………………

-(Perspective de dezvoltare in viitor)

6. Bibliografie……………………

7. Anexe………………………………

Listă acronime

A – [anonimizat] ( CA – Curent alternativ)

A/D- Analog – [anonimizat] – Arithmetic Logic Unit ( Unitatea aritmetică logică)

B – [anonimizat]'s All-purpose Symbolic Instruction Code

° C – [anonimizat]- [anonimizat] – [anonimizat]–[anonimizat] (UCP)

dB – decibel (dBi isotropic )

DC – Direct current (CC – Curent continuu)

DFU – [anonimizat]- [anonimizat] – [anonimizat] –  [anonimizat]- finite-[anonimizat]-[anonimizat] – [anonimizat] – Ground (electricity)

Hz – [anonimizat]-[anonimizat]

I/O – input/[anonimizat] – [anonimizat]

m – [anonimizat] (Milioane de instrucțiuni pe secunda)

MSI – Medium Scale Integration

N –Newton

PC – personal computer

PCMCIA – Personal Computer Memory Card International Association

PWM – Pulse Width Modulation

RAM – Random Access Memory

RISC – Reduced instruction set computing

ROM – Read Only Memory

SMS – Short Message Service

SRAM – Static Random Access Memo

TCP – Transmission Control Protocol

TTL Transistor–transistor logic

UART – Universal Asynchronous Receiver/Transmitter

USB –  Universal Serial Bus

UV-EPROM – Ultra Violet Erasable Programable ROM

V-volti

Listă figuri

Fig. 2.1 Structura unui proces automatizat cu ajutorul unui automat programabil …………………..

Fig. 2.2 – Arhitectura Von-Neumann ……………………………………………………………………………………

Fig. 2.3 Diagrama de Stare a unui automat finit simplu………………………………………………………..

Fig. 3.1 Diagrama bloc a unui microcontroler……………………………………………………………………

Fig. 3.2 Diagrama pinilor microcontrolerului ATmega328………………………………………………….

Fig. 3.3 Placa de dezvoltare Arduino Uno………………………………………………………………………..

Fig. 3.4 O celulă SRAM cu șase tranzistori realizată în tehnologie CMOS………………………………

Fig. 3.5 Alte modele de microcontrolere Arduino a) Arduino Mega; b)Arduino Leonardo………

Fig. 3.6 Magistrala SPI : un singur dispozitiv master și unul slave……………………………………….

Fig. 3.7 Prezentare generală a shield-ului GSM ……………………………………………………………..

Fig. 3.8 Interfata functionala a shild-ului GSM……………………………………………………………….

Fig. 3.9 Cablul coaxial conector al antenei…………………………………………………………………..

Fig. 3.10 Antena GPRS/GSM……………………………………………………………………………………

Fig. 3.11 Alimetator Breadboard ……………………………………………………………………………..

Fig. 3.12 Măsurarea distanței parcurse de undă folosind conceptul scolocației………………..

Fig. 3.13 Senzorul de proximitate – partea frontală………………………………………………………

Fig. 3.14 Motorul Stepper partea frontală și axul…………………………………………………………

Fig.3.15 Diagramă bloc simplificată ULN2003………………………………………………………….

Fig. 4.1 Lipirea firelor de mufă………………………………………………………………………………

Listă tabele

2.1 Tabela Stărilor de Tranziție………………………………………………………………………………

3.1 Specificații tehnice ale microcontrolerului ATmega328P…………………………………………..

3.2 Tabelul de Stări al LED-urilor pe shild-ul GSM………………………………………………………..

1. INTRODUCERE

Din punct de vedere istoric, termenul de tehnologia informației se referă la toate tehnologiile asociate cu colectarea, prelucrarea, stocarea și răspândirea informațiilor. Cu toate acestea, odată cu trecerea timpului și progresul tehnologiilor, termenul a dobândit conotații diferite. Termenul modern, tehnologia informației (IT), a intrat în utilizare pe scară largă numai la sfârșitul anilor 1970 și este acum folosit în general, pentru a cuprinde atât tehnologiile computerizate cât și tehnologiile de comunicare precum și fundamentul lor comun – tehnologia microelectronică și toate tehnologiile software asociate.

La inceputul anului 1884, când electricitatea a început să devină o influență majoră în societate, a luat nastere IEEE ("Institute of Electrical and Electronics Engineers"), o asociatie dedicată avansarii inovației și excelenței tehnologice în beneficiul umanității, care ulterior a devenit cea mai mare societate profesională tehnică din lume.

A existat o industrie electrică majoră, telegraful, care din 1840 a venit să conecteze lumea cu un sistem de comunicații de date mai rapid decât viteza de transport. Industriile de telefonie și de energie electrică sunt de atunci in curs de desfășurare.

IEEE este concepută pentru a servi profesioniștilor implicați în toate aspectele și câmpurile electrice, electronice de calcul și a domeniilor conexe ale științei și tehnologiei care stau la baza civilizației moderne.

Domeniile de interes IEEE s-au extins dincolo de ingineria electrică și electronică către calcul în domenii precum micro și nanotehnologii, ultrasunete, bioinginerie, robotică, materiale electronice, și multe altele. Electronica a devenit omniprezentă, integrată în toate, de la componentele roboților industriali pana la imagistica medicală.

Pe măsură ce tehnologiile și industriile care le-au dezvoltat din ce în ce au depășit granițele naționale, IEEE a ținut pasul. In prezent o instituție globală, care utilizează inovațiile practicienilor pe care le reprezintă pentru a spori excelența IEEE în furnizarea de produse și servicii membrilor, industriilor, și publicului larg.

IEEE este în același timp și o organizație de frunte pentru formularea și stabilirea de standarde pe un larg domeniu de discipline, ca de exemplu energetică, științele medicale și ale sănătății, informatică, siguranța datelor, telecomunicații, aparate electronice de uz curent, transporturi, tehnica aerospațială și tehnologiile nano. IEEE creează și participă la importante activități educaționale ca de exemplu la stabilirea programelor de studii pentru ingineri și tehnicieni ale școlilor de învățământ superior. IEEE sponzorizează în fiecare an peste 450 de congrese tehnice internaționale.

În lucrarea de față este prezentat unul din aspectele importante ale așa numitului nou concept "Smart Home" ce presupune controlul de la distanță asupra propriei locuintei (control iluminat,control acces, control temperaturi, sonorizare ambientala, alarmare la incendiu si efractie, irigatii si degivrare etc.)

Economia de resurse materiale și de timp, siguranța și protecția mediului înconjurător reprezintă avantajele unei astfel de sistem care nu ar fi putut fi dezvoltat fara studiul amanuntit al specialistilor in electronica , sisteme programabile sau mecanica.

Sistemul automatizat de control al portilor este o masura de securitate menita sa proteje un spatiu inchis, fie ca este vorba despre locuința personală, instituții, parcări private sau alte spatii cu acces limitat.

Din întregul concept "Smart Home", automatizarea porților de acces si alarmele de incediu si efractie sunt cele mai intalnite in țara noastra, spre deosebire de alte țări mai dezvoltate și din punct de vedere tehnologic, unde locuintele sunt prevazute cu tot ansamblul automatizat. Conceptul este in curs de dezvoltare in România.

În capitolele următoare este prezentat un modul dintr-un astfel de sistem automatizat, si anume controlul de la distanta a portilor de acces cu deschidere culisanta, utilizand telefonul mobil.

Lucrarea este susținută în 5 capitole, urmate de bibliografie si anexele atașate la sfârșitul lucrării.

Primul capitol se referă la prezentarea pe scurt a lucrării si conceptului de la care a pornit , conținând informații generale și prezentând evoluția tehnologiei informatiei.

În al doilea capitol este realizată o descriere detaliată a sistemelor automate, pornind de la teoretizarea automatelor finite.

În cel de-al treilea capitol sunt prezentate echipamentele utilizate, alături de caracteristicile acestora, folosite în mod particular la realizarea acestei lucrări. De asemenea este detaliată arhitectura de baza si modul de interacțiune cu celelalte componente a microcontrolerului.

În capitolul patru este descrisă partea experimentală a lucrării, constând în proiectarea unui circuit, modul în care este asamblat și programat, analiza datelor de intrare si ieșire, precum și modalitatea de interacțiune dintre sistem si factorul uman, atât prin modalitatea directă cât si de la distantă.

Capitolul final schițeaza concluziile și perspectivele legate de ulterioare dezvoltări și îmbunătățiri ale sistemului propus în cadrul lucrării.

2 . FUNDAMENTAREA TEORETICĂ

2.1. Obiectul automaticii

În funcție de nivelul cunoștințelor dintr-un anumit domeniu și de gradul de dezvoltare, omul a încercat dintotdeauna să găsească mijloace tehnice menite să îi reduca eforturile fizice în procesul de dirijare a evoluției unor fenomele naturale.

Mecanizarea îl eliberează pe om de eforturile fizice mari și consumurile mari de energie, dar omul rămâne inevitabil legat de procesul de producție.

Automatizarea urmărește eliminarea intervenției directe a omului în procesul de producție.

Etapa conducerii complexe a proceselor tehnologice a permis realizarea unor mijloace tehnice (tehnică de calcul) care asigură conducerea complexă a proceselor, fără intervenția directă a operatorului uman, după strategii elaborate chiar de asemenea mijloace tehnice (cibernetizarea).[5]

Ansamblul de obiecte materiale care asigură controlul desfășurării proceselor tehnice sau altor categorii de procese, fără intervenția directă a operatorului uman, se numește echipament de automatizare.

Ramura științei care se ocupă cu studiul metodelor și mijloacelor prin intermediul cărora se asigură conducerea proceselor tehnice, fără intervenția directă a operatorului uman, poartă denumirea de automatică.

Implementarea practică a acestor principii, metode și mijloace poartă denumirea de automatizare.

Un sistem automat de control al unui proces reprezintă un ansamblu de dispozitive electronice care conferă stabilitate, acuratețe si performanță.

Structura unui proces automatizat cu ajutorul unui automat programabil poate fi sintetizată prin schema bloc prezentată mai jos:

Fig. 2.1 Structura unui proces automatizat cu ajutorul unui automat programabil [11]

2.2 Scurtă istorie a sistemelor automate programabile

Istoria mașinilor de calcul cuprinde evoluția diverselor tehnici folosite de oameni pentru a efectua calcule matematice și a mașinilor și aparatelor fizice de care s-au folosit pentru acest scop. Multă vreme, aceste calcule se efectuau mintal, eventual cu ajutorul unor dispozitive simple, cum ar fi abacul și, din secolul al XVII-lea, rigla de calcul. [6]

Primele mașini de calcul erau aparate mecanice, care efectuau calcule analogice. Un plan îndrăzneț pentru o astfel de mașină a fost cel al inginerului englez Charles Babbage, în anii 1820. Proiectul său pentru o mașină mecanică era însă mult mai complex decât orice alt dispozitiv realizat la acea vreme, și nu s-au putut realiza piese cu o precizie suficient de mare, și proiectul său a fost în cele din urmă abandonat. [6]

Bazele calculatoarelor moderne s-au pus, însă, în preajma celui de-al doilea război mondial. Alan Turing a descris în 1936 un model matematic care astăzi îi poartă numele și care rezumă funcționarea unei mașini de calcul programabile, iar Claude Shannon a arătat că orice funcție din algebra booleană poate fi implementată mecanic cu ajutorul unor circuite logice electronice. John von Neumann a descris și el, pe când lucra la proiectul EDVAC ( Electronic Discrete Variable Automatic Computer – un calculator cu programe memorate), arhitectura von Neumann, o schemă structurală de bază a calculatoarelor.

Fig. 2.2 – Arhitectura Von-Neumann [7]

Inventarea tranzistorului a declanșat o perioadă în care calculatoarele, la început uriașe, scumpe și dificile de utilizat, au început să evolueze în sensul miniaturizării, al reducerii costurilor de producție și utilizare și al simplificării programării; în paralel cu unitățile de efectuare a calculelor matematice, s-au dezvoltat și noi tehnologii pentru stocarea datelor.

Această evoluție a fost de curand structurată în cinci etape marcate de inovarea diverselor componente electronice, așa numitele "generații de calculatoare".

Prima generație de calculatoare (1946 -1955) este marcată de apariția primului calculator electronic, numit ENIAC (Electronic Numerical Integrator And Computer), și cuprinde gama de calculatoare care prezintă urmatoarele caracteristici:

–     Au ca elemente constructive de baza tuburile electronice, releele și liniile de întarziere.

–     Pentru introducerea datelor se utilizau cartele sau benzi perforate.

– Imprimarea datelor de ieșire se realiza cu mașini de scris ce atingeau viteza de 10 caractere pe secundă.

–      Programarea se făcea în cod-masină, bit cu bit.

–      Viteza de calcul și capacitatea de stocare a datelor erau mici.

–      Necesitau condiții speciale de instalare si funcționare, consum mare de energie si muncă pentru exploatare și întreținere.

ENIAC a fost conceput și proiectat de John Mauchly și J. Presper Eckert de la Universitatea Pennsylvania, SUA. Scopul său a fost acela de a calcula tabele balistice, pentru laboratorul de cercetări balistice al armatei americane, în timpul celui de-al doilea război mondial.

A doua generație de calculatoare cuprinde sistemele construite între anii 1956 si 1963 si este marcata de apariția tranzistorului, ce a înlocuit tubul electronic. Caracteristicile acestor sisteme de calcul erau:

–   Utilizau tranzistoarele în locul tuburilor electronice.

– Calculatoarele din această generație erau folosite în special pentru calcule științifice.

– Prezintă mai multă siguranță în funcționare, concomitent cu creșterea performanțelor privind viteza de calcul ( ajung pană la 200.000 de operații pe secundă) , capacitatea memoriei (pana la 32 KB) și posibilitățile de programare.

–     Utilizează primele limbaje de programare evoluate:Cobol, Fortan, Algol.

–     Utilizează o gama sporită de echipamente periferice( tastatură , monitor, imprimante cu viteza de scriere de sute de linii pe minut. )

–      Se reduc ca gabarit , necesită consum mai mic de energie și sunt mai usor de întreținut si exploatat, față de precedentele.

Modelul de calculator  IBM 7094 poate fi un reprezentant al generatiei.

A treia generație de calculatoare (1964 – 1970) este caracterizată de apariția circuitelor integrate, care înlocuiesc tranzistorul. Aceste circuite concentrează pe o suprafață mult mai mica o cantitate mai mare de componente active si pasive (tranzistori, diode, condensatori, rezistențe etc.) ce constituie elementele de bază ale noilor calculatoare, care au mai fost numite și calculatoare cu circuite integrate.

Caracteristicile principale ale acestor calculatoare sunt:

–    Orientarea, în primul rand, spre ușurarea și creșterea randamentului muncii intelectuale.

–    Creșterea considerabilă a capacității de stocare a datelor influențată de apariția discului magnetic (pana la 2 MB) și de prelucrare a acestora (viteza de procesare de 5 milioane de operații pe secundă).

– În anul 1970 a fost creată memoria statică RAM (Random Access Memory) de 256 biți.

–    Utilizarea unei game extinse de limbaje evoluate precum Pascal si Lisp, și echipamente periferice.

–    Creșterea gradului de miniaturizare și simplificarea condițiilor de instalare, funcționare și exploatare.

–    Fiabilitate sporită și cost redus.

În această perioadă în SUA a fost lansat primul calculator personal (PC) pentru uz casnic, prevăzut cu sistem de operare CP/M, unitate de memorie externă Floppy Disk și jocuri pe calculator extrem de atractive pentru copii, și nu numai.

A patra generație (1970 – 1990) cuprinde calculatoarele electronice ce utilizează ca elemente  constructive de bază circuitele integrate generalizate pe scară medie (MSI) si mare (LSI). Acestea se caracterizează prin:

–    Ultraminiaturizarea componentelor care sporesc performanțele.

–    Crește viteza de calcul (pana la 30.000.000 de operații pe secundă) și capacitatea de

stocare a datelor ajunge la 8 MB, concomitent cu reducerea timpului de acces la memorie.

–    Revolutionează distribuirea informaticii către utilizatori, dezvoltarea rețelelor de calculatoare, a bazelor de date și a teleinformaticii.

– Consumul de energie devine din ce în ce mai redus, acest fapt datorându-se și dimensiunilor aparatului din ce în ce mai mici.

–    Se răspandesc foarte rapid calculatoarele personale.

–    Are loc o standardizare a programarii, o monitorizare a funcțiilor calculatorului și o extindere a programarii prin hardware.

A cincea generație (după anul 1990 și pană în prezent) urmărește revoluționalizarea concepției tehnologice și a software-ului. Începând cu aceastî generație se realizează o conlucrare strânsă între latura hardware și cea software, aceasta din urmă încercând chiar o devansare. Cele mai importante caracteristici ale calculatoarelor din această generație sunt:

–     Extinderea utilizării microprocesoarelor ca elemente de automatizare a diferitelor funcții specializate.

–     Creșterea gradului de inteligență a calculatoarelor și a vitezei de lucru.

–    Realizarea de noi structuri hardware care să corespundă unor sisteme software deja concepute.

–     Dezvoltarea perifericelor inteligente, capabile să rezolve funcțiile ce le revin, degrevând unitatea centrală.

–     Realizarea unor calculatoare personale de înaltă performanță cu facilități multiple (calculatoare multimedia).

–     Tendința de schimbare a concepțiilor hardware și software, prin realizarea și lansarea pe piață a unor noi tipuri de calculatoare.

–     Revoluționarea sistemului de comunicare om-calculator, prin utilizarea limbajului natural.

–     Generalizarea interogării și răspunsului prin voce.

–     Trecerea de la informatica clasică la cea a inteligenței artificiale, care urmărește în primul rând prelucrarea cunoștințelor (recunoașterea amprentelor digitale, a vorbirii, etc.)

2.3 Avantajele si dezavantajele automatelor programabile

– flexibilitatea: în trecut era nevoie pentru fiecare dispozitiv care trebuia controlat, de un

automat care să-l conducă. Prin intermediul automatelor programabile este posibilă

conducerea concomitentă a mai multor dispozitive folosind un singur automat

programabil.

– viteza de operare: viteza de operare este dependentă de timpul de scanare al intrărilor,

timp care în prezent este de domeniul milisecundelor.

– implementarea schimburilor și corecția erorilor: prin intermediul unei conduceri

realizată în logică cablată era nevoie de timp în cazul unei schimbari sau corecția unei

erori. Prin utilizarea automatelor programabile aceste schimbări sau corecții pot fi

efectuate foarte ușor în program;

– securitatea: mărită datorită modului de lucru cu procesul.

– consumul : este foarte mult redus deoarece automatul programabil consumă mult mai

puțin decât releele din panoul de automatizare convențional;

Din dezavantajele lucrului cu automate programabile putem menționa:

– probleme de mediu: în unele medii exista temperaturi ridicate sau alte condiții care pot

duce la deteriorarea automatelor programabile astfel că acestea sunt greu sau chiar

imposibil de utilizat;

– funcționare „fixă”: dacă nu apar schimbari în cadrul procesului de multe ori folosirea

automatului poate fi mai costisitoare.

2.4 Automate finite

O mașină de stări finite (FSM), sau automat finit (FSA) sau pur și simplu o mașină de stări, este un model matematic de calcul utilizat pentru a proiecta programe pentru calculator și circuite logice secvențiale. Acesta este conceput ca o mașină abstractă, care poate fi compus dintr-un număr finit de stări. Mașina se află într-o singura stare, la un moment dat; starea în care se află în orice moment dat se numește starea actuală. Automatul poate trece de la o stare la alta, atunci când este inițiat de un eveniment declanșator sau o condiție; aceasta se numește o tranziție. Un FSM special este definit de o listă a stărilor sale și de condiția de declanșare pentru fiecare tranziție. [20]

Automatele finite sunt foarte des întâlnite în designul de circuite digitale. Cu toate acestea , ele pot fi foarte utile și în dezvoltarea de programe software. Sistemele de operare actuale și aplicațiile software sunt bazate pe evenimente și probleme de comunicații, care joacă un rol foarte mare, sunt domenii extrem de ușor de controlat cu un software bazat pe mașini de stări finite, deoarece sunt programe simple și ușor de înțeles, de corectat și de modificat.

Programul sursă al sistemelor integrate poate beneficia, de asemenea, de la mașinile de stări datorită modului eficient de utilizare a resurselor limitate ale sistemului. [20]

Pentru a descrie o mașină de stări finite sunt necesare patru elemente:

– Set de stări posibile;

– Set de posibile intrări;

– Set de posibile tranziții de la o stare la alta;

– Set de acțiuni efectuate pentru fiecare tranziție; [22]

Există mai multe reprezentări posibile ale FSM-urilor, dar două dintre ele sunt foarte intuitive.

– Diagrama de Stări;

– Tabela Stărilor de Tranziție.

Diagrama de stari este o foarte simpla descriere a unui automat finit. Stările sunt reprezentate cu cercuri sau ovale, săgețile reprezintă posibile tranziții de la o stare la alta și peste fiecare săgeată de tranziție sunt plasate valorile de intrare asociate și acțiunile.

Fig. 2.3 Diagrama de Stare a unui automat finit simplu

O altă posibilă reprezentare a automatelor finite este cea a Tabelului Stărilor de Tranziție. Pe rândurile acestuia regăsim tranzițiile posibile, iar cele patru coloane sunt stările curente, intrările, stările următoare și acțiunile asociate acestora. Automatul finit prezentat în exemplul de mai sus poate fi sintetizat în tabelul următor: [22]

2.1 Tabela Stărilor de Tranziție

Diagrama de stare este mai ușor de înțeles la prima vedere , însă tabelul tranzițiilor este mult mai util în programare deoarece descrie automatul finit într-un mod mai detaliat și riguros.

Pentru a implementa un automat finit într-un program software sunt necesari de urmat următorii pași:

– definite variabile globale pentru starea curentă;

– cronometru pentru inițializarea tranzițiilor;

– arborele decizional asociat cu declanșarea cronometrului pentru selectarea stării urmatoare în concordanță cu starea curentă și configurația intrarii;

– setarea rutinelor.

3. Arhitectura microcontrolerelor și echipamentele utilizate

Un microcontroler este un "calculator pe un cip" Micro sugerează mărimea redusă a dispozitivului iar “controler” ne spune ca dispozitivul poate fi folosit pentru a controla obiecte, procese, sau evenimente. Microcontrolerele pot fi găsite în componenta oricărui tip de aparate. Orice aparat care măsoară, stochează, comanda, calculează sau afișează informații este o potențială gazdă pentru un microcontroler. De exemplu orice automobil fabricat astăzi este echipat cu cel puțin un microcontroler care comanda motorul mașinii și adesea chiar cu mai multe pentru comanda sistemelor adiționale din automobil. [10]

Unitatea centrală de prelucrare UCP sau CPU (Central Processing Unit) este creierul calculatorului. El realizează funcțiile esențiale de extragere a instrucțiunilor din memoria de program și executarea acestor instrucțiuni.

Unitatea centrală de prelucrare conține :

– Unitatea Aritmetico Logică (ALU de la Aritmetic/ Logic Unit) care realizează diferite operații aritmetice și logice. Modul de realizare al ALU dă fiecărui procesor unicitatea lui. Aceasta face de exemplu diferența dintre un Intel 486 și un Motorola 68000.

– Memoria este utilizată pentru păstrarea atât a instrucțiunilor de program cât și a datelor. O unitate de stocare este numită cuvânt. Calculatoarele au lungimi de cuvinte diferite, de exemplu cuvinte de 4, 8, 12, 16, 32, 64 biți. Microcalculatoarele folosesc în general cuvinte de 8 biți sau un octet (byte). Memoria este organizată ca o înșiruire liniară de cuvinte, cuvântul fiind cea mai mică grupare de biți care poate fi accesată de CPU. Fiecare cuvânt este identificat prin adresa ei sau locația de memorie. De aceea un calculator cu o memorie de 64K cuvinte (65536 cuvinte) necesită un registru de adrese de memorie de 16 biți. În calculatoarele moderne se folosesc memorii DRAM (Dynamic Random Access Memory). Acestea au dezavantajul că își pierd conținutul în timp deci este necesară reîmprospătarea periodică a informației ceea ce necesită circuite suplimentare. Memoriile SRAM (static Random Access Memory) sunt mai rapide decât DRAM-urile, au consum mai redus de putere și nu necesită reîmprospătarea informației dar la fel ca si cele DRAM sunt volatile adică odată cu întreruperea alimentării toate datele sunt pierdute. [19]

Există aplicații care necesită memorii nevolatile. Dintre memoriile nevolatile amintim memoriile ROM (Read Only Memory) utilizate pentru stocarea codurilor de program sau informațiilor care nu se schimbă niciodată. Pentru a fi rentabile din punct de vedere al costului acestea trebuiesc să fie programate de producător în cantitate mare. EPROM-urile (sau UV-EPROM Ultra Violet Erasable Programable ROM) pot fi șterse și reprogramate de utilizator cu ajutorul unei lămpi UV și a unui echipament de programare. EEPROM (Electrically Erasable PROM) are avanatjul de a putea fi ștres și programat in situ. Flash memory este un alt tip de EEPROM, care datorită densității mai mari și timpului de ștregere mai mare este mai recomandat pentru a înlocui hard discuri sau ca si carduri de memorie conforme cu standardul PCMCIA (Personal Computer Memory Card International Association).

– Fără posibilități de intrare/ieșire, I/E sau I/O, calculatoarele nu ne-ar fi de mare ajutor. Intrare/ieșire înseamnă a introduce și a extrage informație din calculator. Aceste dispozitive de I/E pot fi foarte simple ca de exemplu întrerupătoare și becuri dar de obicei sunt tastatură, mouse, monitor. Alte exemple de dispozitive de I/E sunt: modemurile, plăcile de sunet, convertoarele analog-digitale și digital-analogice, porturile seriale și paralele, numărătoare și temporizatoare. Dispozitive de stocare sunt o altă categorie de dispozitive de intrare/ieșire. Hard discul, driverul de floppy disc și unitatea CD-ROM sunt dispozitive de stocare de capacitate mare pentru păstrarea unor cantități mari de informație. Chiar dacă acestea pot fi percepute ca nefăcând parte din posibilitățile de I/E ale calculatorului, din punct de vedere hardware ele sunt legate cu calculatorul prin magistrala de I/E. [10]

În calculatoarele de birou (PC) se pot găsii microcontrolere în tastatura, modemuri, imprimante și alte periferice. In echipamentele de testare fac posibila adăugarea unor facilități ca de exemplu memorarea rezultatelor măsurării, afișarea mesajelor și formelor de unda. Produsele de larg consum care includ microcontrolere sunt camerele video, video recorderele, compact-disk playere, și altele. Un microcontroler este similar unui microprocesor. Ambele conțin o unitate centrala de prelucrare sau CPU (central processing unit). CPU executa instrucțiuni care îndeplinesc operațiile de baza logice, matematice, și de mișcare (rotire) a informației.

Pentru a construi un calculator complet microprocesorul necesita memorie pentru păstrarea datelor și programelor și interfețe de intrare ieșire (I/O) pentru conectarea dispozitivelor externe cum ar fi tastatura și monitorul. Spre diferență de microprocesor, microcontrolerul este un calculator pe un cip deoarece el conține și memorie și interfețe de intrare ieșire pe lângă CPU. Deoarece mărimea memoriei și interfețele care încap pe un cip sunt limitate, microcontrolerele tind sa fie utilizate în sisteme mai mici care necesita doar un microcontroler și câteva elemente adiționale. Celor mai populare microcontrolere sunt 8051 produsa prima data de firma Intel și 68HC11 a firmei Motorola. [10]

Fig. 3.1 Diagrama bloc a unui microcontroler [10]

Comparatia dintre un Microcontroler si un Microprocesor:

Putem exemplifica ce mai bine diferenta dintre un microprocesor si un microcontroler prin faptul ca primul are multe coduri operationale menite sa mute date din memoria externa catre CPU , spre deosebire de microcontroler are au de obicei unul sau doua. Pe de alta parte ,la capitolul tipuri de instructiuni de manipulare a bitilor , microcontrolerul are mai multe fata de microprocesor cu doar una sau doua. De aceea microprocesoarele sunt axate pe mutarea rapida a codurilor si datelor din adresele de memorie externe catre chip, iar controlerele cu mutarea bitilor in cadrul cipului.

Un microcontroler poate functiona ca si un calculator fara alte componente digitale in plus, in timp ce un microprocesor are nevoie de mai multe componente ajutatoare pentru a fi operational, pe langa CPU. [10]

Scrierea programului

Exista mai multe opțiuni pentru scrierea programului de control al aplicației și anume cod mașina, limbaj de asamblare, sau limbaje de nivel înalt, în funcție de viteza de execuție dorita lungimea programului buget disponibil.

-Forma de program fundamentala este codul mașină, adică instrucțiuni binare care determina CPU sa execute operațiile dorite de utilizator.

-Limbajul de asamblare. Un pas în față de la limbajul în cod mașina este limbajul de asamblare care utilizează abreviațiile numite mnemonici. Mnemonicile sunt mai ușor de reținut decât codul mașina pe care îl înlocuiesc. De exemplu CLR C înseamnă șterge bitul de transport și este mai ușor de memorat decât codul binar 11000011. Deoarece codul mașina este limbajul pe care CPU îl înțelege este nevoie de o cale de a traduce din limbaj de asamblare în cod mașina. Pentru programe scurte se poate face manual. O alta opțiune este folosirea unui asamblor care este un soft ce rulează pe calculatorul de birou și traduce mnemonicile în cod mașina.

-Limbaje de nivel înalt. Un dezavantaj al limbajului de asamblare este faptul ca fiecare dispozitiv are setul lui de mnemonici deci utilizatorul trebuie sa învețe un nou set de mnemonici pentru fiecare familie cu care lucrează. Pentru a evita aceasta problema limbajele de nivel înalt ca C, Pasca, Fortran, Forth, și BASIC urmează o sintaxa standard deci programele scrise pentru un dispozitiv pot fi trecute pe un altul.

-Interpretoare și compilatoare sunt doua forme ale limbajelor de nivel înalt. Un interpretor traduce un program în code mașină de fiecare data când un program rulează, în timp ce un compilator traduce odată creând un program nou executabil pe care calculatorul îl rulează direct fără a-l mai traduce. Ca o regula, un interpretor este foarte convenabil pentru programe scurte unde viteza de execuție nu este critica. Programul poate fi rulat imediat ce a fost scris ne fiind necesara o compilare sau asamblare. Un compilator este o alegere buna când programul este lung sau trebuie executat repede. Un singur limbaj ca de exemplu BASIC este disponibil în ambele versiuni. [10]

3.1 Microcontrolerul ATmega328P

Înalta performanță a procesorului AVR RISC de 8-biți creat de prin tehnologia picoPower (proiectat de la bază pentru cel mai mic consum de energie posibil începând cu proiectarea tranzistorilor și geometria procesului) combină memorie flash de 32KB ISP cu capabilități de citire în timpul scrierii, 1024B de memorie EEPROM, 2KB memorie SRAM, 23 linii de uz general I / O, 32 de registre cu scop de lucru general, trei numărătoare flexibile cu moduri de comparare, întreruperi interne și externe, interfață orientată-octet programabilă serial – USART, un port serial SPI, un convertor A/D cu 6 canale pe 10-biți, un timer programabil cu oscilator intern, și cinci moduri software selectabile de economisire a energiei. Dispozitivul funcționează între 1.8-5.5 volți.

Executând instrucțiuni puternice într-un singur ciclu de ceas, aparatul atinge se apropie de 1 MIPS pe MHz, echilibrând consumul de energie și viteza de procesare. [15]

3.1 Specificații tehnice ale microcontrolerului ATmega328P [15]

Fig. 3.2 Diagrama pinilor microcontrolerului ATmega328 [16]

3.2 Arduino Uno

Microcontrolerul Arduino este o platformă de dezvoltare open-source extrem de ușor de utilizat ce a câștigat aprecieri considerabile pe piața de specialitate și in rândul pasionaților. Caracteristica open-source reprezintă accesibilitatea din punct de vedere financiar a parții hardware si gratuitatea parții software.

Proiectul Arduino a început in Italia , pentru a se încerca eleborarea și dezvoltarea unei structuri hardware de tip "low-cost". Cu ajutorul platformei Arduino , exista posibilitatea de a se scrie programe si de a crea circuite de interfață capabile sa citeasă senzori , sau să controleze motoare sau lumini cu un efort foarte mic.

Limbajul de programare al lui Arduino este o versiune simplificata de C/C++ . Pentru oricine cunoaste limbajul C, programarea arduino devine foarte familiara. O caracteristica importanta a platformei o constituie crearea unui program de comanda si control pe computerul la care se conecteaza placa. Chiar daca este intrerupta conexiunea prin cablul USB de pe placa la computer, programul inca va rula de la inceput, de fiecare data cand este apasat butonul reset.

Un fapt interesat si un avantaj este acela ca daca este scoasa bateria placii Arduino si nu este folosita timp de pana la 6 luni , cand aceasta va fi reconectata la un computer pentru scrierea sau depanarea unui program , aceasta nu mai necesita apoi acel computer pentru a rula programul respectiv.

Pentru a functiona autonom , placa se recomanda a fi alimentata de la o baterie , decat de la o conectare USB la computer. Alimentarea externa poate fi undeva in intervalul 6-24V (ca de exemplu o baterie de masina) , dar o baterie standard convenabila se recomanda a fi de 9V. O polarizare gresita la introducerea bateriei ar putea conduce la o ardere a placii.

Conform site-ului oficial Arduino , modelul Arduino Uno este o platforma de dezvoltare ce se bazeaza pe microcontrolerul ATmega 328, avand schema electrica prezentata in Anexa 1 [12]. Aceasta platforma de dezvoltare a re 14 pini digitali de intrare/iesire (dintre care se pot utiliza 6 ca si iesiri PWM), 6 intrari analogine , un oscilator de cuart de 16 MHz, o conexiune USB, o mufa de alimentare , o mufa ICSP si un buton pentru resetare.

Arduino Uno contine tot ce este nevoie pentru functionarea microcontrolerului; se conecteaza pur si simplu la un calculator prin intermediul unui cablu USB sau se alimentaeaza fie cu ajutorul unui adaptor AC/DC, fie cu ajutorul unei baterii. Acesta difera fata de platformele de dezvoltare anterioare, deoarece nu foloseste un driver chip FTDI USB-la serial. În schimb , are incorporat microcontrolerul ATmega 16U2 (ATmega8U2 updatat la versiunea R2) , ce este programat ca un convertor USB-la serial. A doua revizuire a platformei Uno are un rezistor ce trimite linia 8U2 Hwb la impamantare, ceea ce faciliteaza punearea in modul DFU. A treia revizuire a placii are urmatoarele noi caracteristici:

– microcontrolerul ATmega16U2 este inlocuit cu 8U2.

– Pinout 1.0 – au fost adaugati pinii SDA si SCL care se afla langa minul AREF si alti doi pini noi pozitionati in apropierea pinului RESET, si anume unul este pinul IOREF, ce permite shield-ului sa adapteze tensiunea furnizata de la placa. Aceasta va indica urmatoarele versiuni de shild-uri cu cat sunt alimentate. In viitor, shild-ul va fi compatibil atat cu placa ce utilizeaza AVR, ce functioneaza cu 5V, cat si cu Arduino Due care functioneaza cu 3.3V. Cel de-al doilea pin nu este conectat, fiind pastrat pentru scopurile viitoare.

-circuitul de RESET este mai puternic.

Fig. 3.3 Placa de dezvoltare Arduino Uno [13]

“UNO” inseamna “unu” in limba italiana si este denumit așa pentru a marca viitoarea lansare Arduino 1.0 IDE. Uno si versiunea 1.0 vor fi versiunile standard pentru marca Arduino. [13]

3.2.1 Alimentare

Arduino Uno poate fi alimentat prin intermediul conexiunii USB sau cu o sursă de alimentare externă. 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.

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.

3.2.2 Memoria

Microcontrolerul ATmega328 are o memorie internă de 32 KB (cu 0,5 KB utilizați pentru programul de bootloader). Ea are, de asemenea, 2 KB SRAM si 1 KB de EEPROM. [14]

Fig. 3.4 O celulă SRAM cu șase tranzistori realizată în tehnologie CMOS [17]

SRAM (acronimul expresiei engleze Static Random Access Memory) este un tip de memorie semiconductoare, unde cuvântul „static” subliniază faptul că, spre deosebire de memoriile DRAM (Dynamic Random Access Memory), nu mai este necesar un ciclu periodic de reîmprospătare (engleză: refresh). Aceasta implică faptul că orice cuvânt din memorie poate fi accesat în același timp.

Acest mod de functionare este posibil deoarece memoriile SRAM folosesc circuite logice combinaționale pentru a memora fiecare bit.

O memorie este constituită dintr-o arie de dispozitive de memorare. Fiecare dispozitiv poate stoca un bit, un byte sau un cuvânt. Dimensiunile uzuale pentru lungimea cuvintelor sunt: 8, 16, 32 și 64. Un sistem digital dispune de o memorie care poate stoca un număr mare de cuvinte. Fiecare cuvânt poate fi adresat utilizând liniile de adrese ale memoriei. În plus, pe lângă liniile de date și liniile de adrese, o memorie mai dispune și de linii de validare a citirii sau scrierii cuvântului selectat.

Este un tip de memorie foarte usor de folosit . O locație, sau o adresă, se selectează prin plasarea pe liniile de adrese a combinației binare ce reprezintă adresa locației. Dacă urmează să aiba loc o operație de citire, este activat semnalul de citire, iar datele stocate în locație pot fi preluate de pe liniile de date. Dacă urmează să aiba loc o operație de scriere, datele ce urmează să fie scrise vor trebui plasate pe liniile de date, apoi combinația binară a adresei locației de memorie pe liniile de adrese și se activează semnalul de scriere. [17]

EEPROM (sau E2PROM), denumire provenită de la Electrically Erasable Programmable Read-Only Memory, este un tip de memorie nevolatilă folosită în calculatoare și alte echipamente electronice pentru a stoca date ce trebuie să persiste și după întreruperea alimentării cu curent,

Memoria EEPROM este formată dintr-o matrice de celule de memorie care, la rândul lor, sunt formate din perechi de tranzistori ce au între ei un strat subțire de oxid izolator. Un tranzistor este numit poartă flotantă (floating gate), iar celălalt poartă de control (control gate).

Memoria EEPROM poate fi ștearsă și reprogramată (rescrisă) în mod repetat prin aplicarea unei tensiuni mai mari decât cea generată de circuitul extern sau intern, în cazul celor mai moderne memorii EEPROM. De obicei memoriile EPROM trebuie înlăturate din circuit pentru ștergere sau programare, în timp ce memoriile EEPROM pot fi programate și sterse în circuit. Datorită numărului limitat de programări/ștergeri, memoriile EEPROM sunt cel mai des întâlnite ca memorii de stocare a datelor de configurație, și mai rar ca memorii cu acces aleator. [18 ]

a) b)

Fig. 3.5 Alte modele de microcontrolere Arduino a) Arduino Mega; b)Arduino Leonardo

3.2.3 Limbajul de programare

Limbajul de programare utilizat pentru Arduino este C.

Structura

Fiecare program de Arduino este denumit "schiță" și are două funcții necesare, numite de asemenea "rutine".

void setup() {}

Codul din "void setup" între cele două console buclat va rula o singură dată, atunci când Programul Arduino începe.

void loop () {}

Această parte de cod este o buclă infinită se execută după ce setarea sa terminat. După ce a rulat o dată, va rula din nou, și din nou , până când tensiunea de alimentare este întreruptă.

Sintaxa

Unul dintre elementele ușor obositoare ale limbajului C este cerința sa de formatare a codului. Însă in același timp este și un lucru util.

// (Comentariu pentru o singură linie)

Adesea este util să se scrie note despre ce face fiecare linie de cod in parte , pentru atunci când treci cu privirea rapid peste program. Acest tip de comentariu face ca linia scrisă sa fie ignorată de compilator, pana la finalul radului.

/ * * / (Comentariu Cu mai multe rânduri)

Dacă explicațiile sunt mai stufoase acestea se pot întinde pe mai multe randuri , fiind si mai usor de citit.

Simbolurile vor fi ignorate în program.

{ } (acolade)

Folosit pentru a defini, atunci când un bloc de cod începe și se termină (utilizate în structurile de control și bucle).

; (Punct și virgulă)

Fiecare linie de cod trebuie să fie încheiată cu punct și virgulă (lipsa acesteia este de cele mai multe ori motivul pentru care programul refuză sa compileze).

Tipuri de date

int (număr întreg) – Cel mai utilizat tip de dată; stochează un număr în 2 octeți (16 biți). Nu are zecimale și va stoca o valoare între -32768 și 32767

long (lung) – Utilizat atunci când tipul de dată int nu este suficient de mare pentru stocare. Acesta accesează 4 octeți (32 biți) de RAM și are valori cuprinse între -2147483648 Și 2147483647.

boolean (boolean) – Un variabilă simplă ce ia valori de Adevărat sau Fals. Utilă deoarece foloseste doar un singur bit de memorie RAM.

float (numar real) – Numar real, in virgulă mobilă cu precizie simplă. Accesează 4 octeți (32 biți) de RAM și are valori cuprinse între -3.4028235E + 38 și + 38 3.4028235E.

char (caracter) – Stocheză un caracter folosind codul ASCII (de exemplu, 'A' = 65). Folosește un octet (8 biți) de RAM.

Arduino tratează șirurile de caractere ca pe un vector de char-uri.

Operații aritmetice

= (Atribuire) face ceva egal cu altceva

+ (Plus) adaugă o valoare la alta

– (Scădere) substrage o valoare din altă valoare

* (Înmulțirea) Multiplică o valoare de numar de ori

/ (Diviziune) Împare o valoare de un numar de ori

% (Modulo) obține restul împarțirii, atunci când un număr este împărțit la altul

Operatori de comparatie

Operatorii utilizați pentru comparație logică.

= = (Egal) ex. 12 = = 10 este FALS, sau 12 = = 12 este ADEVĂRAT

! = (Diferit) ex. 12! = 10 este ADEVĂRAT, sau 12! = 12 este FALS

<(Mai mic) ex. 12 <10 este FALS, sau 12 <12 este FALS, sau 12 <14 este ADEVĂRAT

> (Mai mare) ex. 12> 10 este ADEVĂRAT, sau 12> 12 este FALS, sau 12> 14 este FALS

Structuri de control

If else

If( condition ){ }

Else if( condition ) { }

Else { } – Prima structură if va executa totce se află între acolade dacă condiția este adevărată, iar dacă nu, va testa următoarea condiție (else if). Dacă aceasta este adevarata se executa al doilea set de acolade, daca nu, ultimul set de acolade.

For

For ( int I = 0; i< #repeats; i++) { }

Utilizat atunci când ar dori să se repete o bucată de cod de mai multe ori (poate numara în sus i ++ sau în jos i- – sau să folosească orice variabilă).

Digital

pinMode (pin, mode);

Folosit pentru a seta modul de utilizare a unui PIN. Parametrul mode poate fi atât INPUT cât și OUTPUT.

digitalWrite (pin, value);

Odată ce un PIN-ul este setat ca ieșire poate fi setat fie HIGH (ridicat la +5 volți) sau LOW (0volți)

(Ex. Pentru a aprinde un LED trebuie menționat pinul la care este legat acesta in digitalWrite si setat pe HIGH)

Int digitalRead (pin);

O dată ce un PIN-ul este setat ca o intrare, poate fi utilizată acestă comandă pentru a întoarce informația dacă elementul conenctat la pin este pornit sau oprit.

Analog

Arduino este o mașină digitală, dar are capacitatea de a opera și în domeniul analogic.

Int analogWrite (PIN-ul, valoare);

Unii dintre pinii Arduino susțin lățimea impulsului de modulare (3, 5, 6, 9, 10, 11). Acest lucru deschide și închide PIN-ul extrem de rapid, facându-l să se comporte ca o ieșire analog. Valoarea este orice număr între 0 ( 0volți) și 255 (5 volți).

Int analogRead (PIN);

În cazul în care pinii de intrare analogici sunt setați la intrare se poate citi tensiunea lor. O valoare între 0 (pentru 0 volți) și 1024 (pentru 5 volți) va fi returnată. Pinii A0 – A5 sunt folosiți pentru analogRead.

Timpul

Millis( )

Returnează numărul de milisecunde trecute de când placa Arduino a început să ruleze programul curent. Acest număr se va reseta la 0, după aproximativ 50 de zile.

3.3 Shield GSM

Pentru a extinde funcționalitatea placii Arduino și de a controla alte dispozitive, se conecteaza așa numitele "shield"-uri direct in pinii exteriori ai plăcuței Arduino.

Prin utilizarea Shield-ului GSM / GPRS / GPS, este posibilă folosirea rețelei GSM pentru telefonia mobila si GPS pentru nevigatie prin satelit. Spre exemplu , poziția curentă poate fi determinată prin GPS și trimis un sms (short message service) cu aceste date. De asemenea pot fi trimise alarme sau rutele de călătorie pot fi urmărite.

Placa Arduino comunica cu modulul GSM / GPRS / GPS prin interfața serială SPI (Serial Peripheral Interface). Aceasta este o interfața sincronă standard de mare viteză, ce operează în mod full duplex. Numele ei a fost dat de compania Motorola și 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 înseamnă că dispozitivul (circuitul) digital master, în cazul nostru plăcuța Arduino , inițiază cuvântul de date. Mai multe dispozitive (circuite) digitale slave (modulul GSM )sunt permise cu slave select individual, adică cu selectare individuală.

Fig. 3.6 Magistrala SPI : un singur dispozitiv master și unul slave

SCLK – Ceas serial (ieșire din master).

MOSI/SIMO – Master Output, Slave Input (ieșire master, intrare slave).

MISO/SOMI – Master Input, Slave Output (intrare master, iesire slave).

SS – Slave Select (active low, ieșire din master).

Shield-ul GSM este compatibil cu toate telefoanele mobile Quad-band (care suportă oricare dintre cele patru benzi de frecvență diferite – 850/900/1800/1900MHz utilizate de rețelele de telefonie mobila din toata lumea )

Aceste benzi de frecvență poti fi utilizate nu numai pentru comunicația orala (cu condiția aca aceasta să fie conectat la un microfon si un mini difuzor) și SMS, dar și pentru acces la Internet.

Schema electronică a modulului GSM este prezentată în detaliu în Anexa 2.

3.3.1 Modulul SIM900

În exterior, are aspectul unui pachet mare (0,94 inch x 0,94 inch x 0,12 inch), cu contacte în formă de L pe patru laturi, astfel încât acestea să poată fi lipite atât pe lateral și în partea de jos.

Pe plan intern, modulul este gestionat de un procesor AMR926EJS, care controlează comunicarea telefonică, de comunicații de date (printr-o stiva TCP / IP integrat), și comunicarea cu circuitul interfațat cu telefonul mobil în sine (printr-un UART și o interfață serială TTL). [24]

Procesorul ARM926EJ-S este un membru al familiei de procesoare ARM9 de uz general, al carui patent este detinut de compania creatoare, ARM Holdings. Toate procesoarele ARM sunt computere pe 32 de biti cu o arhitectura bazata pe seturi de instructiuni redus (Reduced Instruction Set Computer – RISC) . Set de instrucțiuni orientat pe regiștri, pentru că accesul la memorie e mult mai lent decat lucrul cu regiștrii, RISC incurajeaza lucrul cu aceștia. Face acest lucru prin cresterea numarului de regiștrii și prin limitarea explicită a acceselor la memorie. [25]

Formatul instructiunilor pentru arhitectura RISC:

-Format de lungime fixă

-Lungime unei instrucțiuni este în general egală cu lungimea cuvantului de memorie

-Pe baza acestei lungimi se determină numarul exact de instrucțiuni și formatul lor

-RISC are un numar mic de moduri de adresare, spre deosebire de CISC, care are un numar mare de moduri de adresare(nu totdeauna foarte utilizate). [9]

Procesorul ARM926EJ-S este orientat spre aplicații multi-tasking din domenii sprecifice, unde managementul complet al memoriei, performanța înaltă, dimensiune extrem de redusă, și puterea redusă sunt toate aspecte foarte importante.

Funcțiile pentru care poate fi utilizat modulul SIM900[24]:

Controlul prin comenzi AT – Comenzi Standard: GSM 07.07 & 07.05 | Comenzi îmbunătățite: comenzi Simcom AT.

Short Message Service SMS – astfel încât se pot trimite cantități mici de date prin rețea (ASCII sau hexazecimal brut).

Strivă incorporată TCP / UDP – permite încărcarea de date pe un server web.

Difuzor și căști mufe – astfel încât să poată fi trimise semnale DTMF sau să se înregistreze precum un robot telefonic.

Suportul cartelei SIM si antena GSM – prezente pe placă.

12 GPIOs, 2 PWM-uri și un ADC (fiecare metodă a 2,8 volți) – pentru a crește funcționalitățile Arduino.

Consum redus de energie – 1.5mA (sleep mode)

Interval de temperatură industrială – de la -40 ° C până la +85 ° C

Fig. 3.7 Prezentare generală a shield-ului GSM

Fig. 3.8 Interfata functionala a shild-ului GSM [23]

Descrierea pinilor din Figura. x Interfata functionala a shieldului GSM se regaseste mai jos:

Power Select – Selecție putere – sursa de alimentare pentru modulul GPRS (alimentare externă sau 5V de la Arduino).
Power jack – Mufă alimentare -conectat la sursa de alimentare 4.8 ~ 5VDC extern

Antenna interface – Interfață antenă – conectată la antena externă
Serial port select – Selecție port serial – permite selectarea fie port serial de software, fie port serial de hardware pentru a fi conectat la GPRS Shield
Hardware Serial – Hardware-ul serial – D0 / D1 Arduino / Seeeduino
Software serial – Software-ul serial – D7 / D8 numai pentru Arduino
Status LED – LED-uri de stare – indică dacă puterea lui SIM900 este pornit

Net light – Indicatorul de rețea – spune despre starea SIM900 conectarea la restul rețelei

Microphone and Speaker – Microfon și difuzor – pentru a răspunde la apel telefonic
Power key – Tasta de pornire – deschide SIM900 apăsând în sus și în jos

3.2 Tabelul de Stări al LED-urilor pe shild-ul GSM [23]

Utilizarea pinilor pe Arduino:

D0 , D1 -Pini nefolosiți dacă se selectează software-ul port serial pentru a comunica cu GPRS Shield
D7 , D8 – Pini utilizați dacă se selectează software-ul port serial pentru a comunica cu GPRS Shield

D9 – Utilizat pentru controlul software-ului de putere în sus sau în jos a SIM900

3.3.2 Antena GSM/GPRS

Un conector RF coaxial în miniatură este prezent pe placa GPRS Shield și are rolu de a conecta antenă GSM la restul circuitului . Conectorul prezent pe GPRS Shield este numit un conector U.FL. Antena GSM cu Shield GPRS are un conector SMA (și nu un conector RP-SMA) atașat. Un cablu de legatura este, de asemenea, furnizat cu Shield GPRS de la interfața antenei către placă. Topologia de conectare este prezentată în diagrama de mai jos:

Fig. 3.9 Cablul coaxial conector al antenei [15]

Specificații tehnice :

– Model: GSM-02-SMRA

– Frecvență: 850/900/1800/1900/2100

– Câștig: 2 dBi

– V.S.W.R.: mai mic sau egal cu 2:1

– Polarizare: Verticală

– Conector: SMA Male Right Angle

– Impedanță: 50 Ohm

– Temperatură de operare: -20 până la 60 de grade Celsius

– Temperatură de depozitare: -30 până la 75 de grade Celsius

– Dimensiuni: lățime – 16.5mm; lungime – 57mm; înălțime – 8mm

Antena are o lungime de 10.5 cm, și are o impedanță de 50 de Ohmi, astfel încât va funcționa foarte bine cu orice receptor/transmițător wireless de 850/900/1800/1900/2100, ca și orice dispozitiv celular sau GSM/GPRS.

Fig. 3.10 Antena GPRS/GSM

3.4 Modul de alimentare

O sursă de alimentare este un modul auxiliar, care oferă 5 V, 3 V și 12 V pe șinele unui breadboard . Este o facilitate extrem de utilă, care asigură șine cu tensiune reglementată pentru circuitele din diferite proiecte. Design-ul modulului este de obicei sub forma unui "plug-in", care se conectează pe breadboard, iar puterea modulului de obicei provine dintr-un port sau adaptor USB al unui PC, sau printr-o mufa exerioară unde se pot conecta baterii (acumulatori).

Aceste module au ieșiri fixe pe 3.3 si 5V și sunt folosite de obicei pentru cipuri folosind tehnologiile TTL si CMOS. Cu toate acestea, designurile mai noi au implementate opțiunea de tensiune de alimentare variabilă. Acestea furnizează o tensiune de ieșire reglabilă, care poate fi utilă dacă este nevoie de 9V sau 12V, precum la circuitele de motoare care tind să funcționeze la aceste tensiuni.[26]

Odată conectat pe breadboard, șinele de tensiune de pe ambele părți sunt alimentate cu tensiune. Se utilizează călareții galbeni pentru a selecta nivelurile de tensiune necesare.

În situația în care se alimentează modulul de la portul USB al unui PC și există posibilitatea unui scurt circuit pe breadboard, în mod ideal, cea mai bună sursă de alimentare va reduce puterea protejând astfel circuitele de putere ale calculatorului. Cu toate acestea, cele de calitate slabă nu vor avea această protecție și riscul de deteriorare a computerului crește exponențial.[26]

Documentația indică faptul că acest regulator are încorporat protecție împotriva scurt-circuitului prin circuite de limitare a puterii. Există, de asemenea, un circuit de protecție termică la suprasarcină, care va închide regulatorul când temperatura de joncțiune ar trebui să ajungă la 165°C.

Aceste module auxiliare au, de asemenea, o diodă de protecție internă care poate gestiona curenți de supratensiuni tranzitorii de la 50 A la 100 A.

O schema electrică a circuitului este prezentată in Anexa 3.

Specificațiile tehnice ale circuitului de alimetare MB102 :

Comutator de blocare ON/OFF

Indicator de alimentare LED

Tensiune de intrare între 6.5 V si 12 V (DC)

Tensiune de ieșire : 3.3 V / 5 V

Curentul de ieșire maxim: 700 mA

Șine de putere 0 V, 3.3 V, 5 V pe Breadboard

Două grupuri de pini catre alimentare externa cu energie

Dimensiune modul: 5.3 cm × 3.5 cm

Fig. 3.11 Alimetator Breadboard [32]

3.5 Senzorul de proximitate

Acest senzor este capabil să estimeze obiecte care se află în fața sa, folosind un sunet reflectat. Acest proces este similar cu modul în care liliecii sau delfinii localizează obiectele din calea lor.

Sistemul de ecolocație funcționează astfel: undele sonore transmise de emițător se reflectă și sunt recepționate de receptor, cu o diferență de timp, care ulterior este utilizată pentru a calcula distanța dintre obiecte.

Fig. 3.12 Măsurarea distanței parcurse de undă folosind conceptul scolocației. [33]

Senzorul de proximitate este un senzor de distanță cu ultrasunete (HY-SRF05) cu 2 canale convertor de nivel logic.

Descrierea tehnică a modulului:

• Tensiune de lucru: 5V (DC)

• Curent static: Mai puțin de 2mA.

• Semnal de ieșire: semnal electric, 5V nivel ridicat, nivel scăzut 0V.

• Unghiul senzorului: Nu mai mult de 15 grade.

• Distanța de detecție: 2cm-450 cm.

• Precizie ridicată: până la 0.2cm

• semnal de declanșare de intrare: 10us TTL impuls

• Echo semnal: semnal de ieșire TTL PWL

• Modul de conectare: 1.VCC 2.trig (T) 3.echo (R) 4.OUT 5.GND

• Metoda de utilizare: În modul de alimentare cu 5V, ieșirea va fi 5V dacă obstacolul se află în raza de acțiune, în caz contrar ieșirea va fi 0V.

Acesta oferă detecție foarte bună a obiectelor de dimensiuni mari, cu suprafețe dure, dar prezintă mai multe dificultăți de citire a reflecțiilor obiectelor moi, curbate, subțiri sau mici.

Convertorul de nivel logic este un cablaj imprimat ce realizează interfața dintre dispozitivele ce reduc tensiunea de la 5V la 3.3V și invers. Convertorul are două intrări și ieșiri și pot fi utilizate cu I2C, SPI, UART, etc. [34]

Bordul trebuie să fie alimentat prin intermediul a două surse, 5V și 3,3V și liniile de date sunt legate prin intermediul pinilor 1 la 2 pe fiecare parte, astfel o intrare pe pinul 1 va fi convertit la ieșire mai mică sau mai mare pe pinul adiacent 1.

Fig. 3.13 Senzorul de proximitate – partea frontală [34]

3.6 Motor pas cu pas

Motoarele pas cu pas, datorită design-ului unic, pot fi controlate cu un grad ridicat de precizie, fără nici un mecanism de feedback. Axul unui motor pas cu pas, montat cu o serie de magneți, este controlat printr-o serie de bobine electromagnetice care sunt încărcate pozitiv și negativ succesiv, acesta reprezentând si principiul de deplasare înainte sau înapoi în "pași" mici.

Există două tipuri de Steppere, Unipolare și Bipolare. Pentru fiecare dintre motoare, există un circuit diferit. Codul sursa de programare de exemplu, va controla ambele tipuri de motoare.

Specificațiile tehnice ale motorului [28]:

– Diametru: 28mm
– Voltaj: 5V
– Frecvența de pornire în sarcină: > 600Hz
– Patru faze
– Frecvența de pornire fără sarcină: > 1000Hz
– Raportul de scădere: 1/64
– Cuplu de pornire: > 34.3mN.m (120Hz)
– Unghiul de pas: 5.625 x 1/64
– Cuplu de rulare: > 34.3mN.m
– DCR: 200ohm +/- 7 percent (25 Deg.C)
– Temperatura: < 40K (120Hz)
– Rezistența izolarii: > 10Mohm (500V)
– Zgomot: < 40dB (120Hz, 10cm)
– Rezistența dielectrică: AC 600V / 1mA / 1s
– Clasa de izolație: A
– Lungimea cablului: 24cm

Fig. 3.14 Motorul Stepper partea frontală și axul [28]

Driverul motorului pas cu pas este alcatuit in primul rand din microcontrolerul ULN2003A (schema electrică este figurată în Anexa 5) . Acesta este alcătuit dintr-un șir de șapte tranzistori NPN Darlington capabili de un curent de 500mA, și o tensiune de 50V la ieșire. Microcontrolerul dispune de diode flyback comune cu catod pentru comutarea sarcinilor inductive.

Un tranzistor Darlington (de asemenea, cunoscut și sub numele de pereche Darlington) realizează amplificarea de curent foarte mare prin conectarea a două tranzistoare bipolare în cuplare DC directă astfel încât curentul amplificat de primul tranzistor este amplificat mai departe de al doilea. Câștigul de curent rezultat este produsul celor două tranzistoare.[29]

Fig.3.15 Diagramă bloc simplificată ULN2003 [29]

Specificațiile tehnice ale driver-ului:

– ULN2003 Darlington folosing motorul pas cu pas de înalta putere.

– A, B, C, D patru faze ale LED-urilor indică starea în care se află motorul .

– Motor are o interfață standard, utilă atunci când este direct conectat.

– Dimensiune modulului de acționare: 35mm x 31mm x 11mm

În Anexa 4 este prezentată conectarea dintre driverul ULN2003 si servomotorul.

Fig. 19 Driver motor pas cu pas

4. Realizarea practica

Sistemul automat de comanadă a unui motor a fost realizat cu scopul de a pune in mișcare un sistem mecanic, o poartă sau o ușă cu închidere culisantă. Concepul a fost gândit pentru a putea fi implementat la poarta de acces auto a unui spital, a unui complex rezidențial sau a oricărei instituții cu acces limitat și controlat.

Noțiunea de „casă inteligentă” ("Smart Home") face referire la o multitudine de automatizări necesare intr-o locuință și nu numai: iluminatul, incălzirea, accesul, irigațiile, sistemul de alarme, toate acestea asigurând controlul și confortul utilizatorilor imobilului, chiar și de la distanțe mari, cu ajutorul sistemelor interconectate sau al internetului.

Proiectul implementat se bazează pe ideea că întreg sistemul poate fi controlat doar prin intermediul serviciului satelit GSM , mai exact print-o comandă specifică dată prin SMS.

În realizarea acestuia am utilizat plăcuța de dezvoltare Funduino Uno ce incorporează microcontrolerul Atmega328 produs de compania ATMEL; acesta are un procesor pe 8 biți cu arhitectură RISC, memorie FLASH de 32kByte și un convertor analog-digital pe 10 biți. Modelul este extrem de asemanator cu produsul original Arduino, costul fiind însă mai scazut.

Atașat de microcontroler este shieldul GPRS/GSM compatibil Arduino care permite plăcii Arduino să se conecteze la Internet, să efectueze / primească apeluri vocale și să trimită / primescă mesaje SMS. Shield-ul folosește un modem radio M10 produs de compania Quectel. Numărul maxim de mesaje pe care il poate înregistra modemul este de 6, ulterior daca acestea nu sunt șterse, molulul nu mai poate recepționa, intrând intr-o stare de blocare.

De asemenea este posibilă comunicarea cu placa folosind comenzi AT. Biblioteca GSM are un număr mare de metode de comunicare cu modulul GSM. Dintre aceste comnezi urmatoarele sunt utilizate in cadrul programului software realizat:

AT+CMGL – Listarea SMS-urilor primite din coada de asteptare

AT+CMGL=<status>[,<mode>] – În modul "text"(mesajul este in limbaj natural , nu codat in binar) <status> poate lua valorile :

"REC UNREAD" – mesajele primite și necitite

"REC READ" – mesajele primite și citite

"STO SENT" – mesajele netrimise stocate

"STO SENT" – mesajele trimise stocate

"ALL" – toate mesajele

<mode> ia valorile:

0 Normal (default)

1 Nu modifica statusul smsului înregistrat specificat

Raspunsul primit poate fi AT+CMGL="ALL"

OK – în situația in crae nu există mesaje in listă

CMTI – Interceptarea unui mesaj nou

+CMTI:<mem>, <index> Indică faptul ca un nou sms cu indicele index a fost primit și salvat in memoria mem

( Exemplu :

+CMTI: "SM",1

AT+CMGR=1 )

CMGR – Citirea unui mesaj

AT+CMGR=<index>[,<mode>]

<index> indicele mesajului in listă

<mode> ia valorile:

0 Normal (default)

1 Nu modifica statusul smsului înregistrat specificat

+CMGR: "REC UNREAD","+40746178600","","16/06/29,15:03:07+12"

Un mesaj primit

AT+CMGD=<index> Comnada pentru ștergerea mesajului de pe poziția index. Această valoare difera in funcție de numărul de locații disponibil în asociere cu memoria.

Din pinii externi ai shieldului GSM am conectat o placă Breadboard extrem de utilă pentru construcția circuitului, deoarece nu implică lipituri permanente asupra componentelor. Pe aceasta am atasat în unul din capete modulul de alimetare pentru motor pe care am setat 5V de intrare (mutand jumperii) către driverul motorului (doar pentru un șir interconectat vertical, celălalt ramînand pe OFF). Prin intermediul modulului de alimentare, driverul motorului își ia tensiune prin 2 fire (5V si GND) de la setul de patru baterii mufat. Am lipit firele suportului de baterii de mufa metalică cu ajutorul pistolului electronic de lipit cu fludor și sacâz – vezi figura. x . Fiecare baterie furnizează o tensiune de 1,5 V, în total având 6V. Anexa 6 ilustrează conectrea componentelor pe placa Breadboard.

Fig. 4.1 Lipirea firelor de mufă

Tot pe plăcuța Breadboard am conentat în serie câte un LED (light-emitting diode- diodă emițătoare de lumină) , unul roșu și unul verde , fiecare cu o rezistentă aferentă de 220 Ω cu rolul de a lăsa sa treacă un curent mai mic prin dioda decat cel care circulă prin restul circuitului, evitând astfel arderea ledurilor.

Patru din pinii de intrare ai modului GSM sunt conectați la senzorul de proximitate și preiau semnalul transformat de acesta din ultrasunete in curent electric.

4.1 Schema bloc a circuitului

Fig. 21 Schema bloc a circuitului

4.2 Organigrama softului

Organigrama programului software demonstreză faptul ca sistemul implementat este un automat finit, o mașină cu un numar limitat de stări. Aceasta descrie în același timp si modul de funcționare:

Pasul 1: de pe orice telefon mobil poate fi trimis un sms la numarul de telefon 0799288586 cu textul "test". Orice alt mesaj este recepționat de modulul GSM, însă ignorat deoarece nu conține comanda specifică.

Pasul 2: este procesată instrucțiunea pentru modulul GSM

Pasul 3: mesajul primit este decodificat și afisat in consolă

Pasul 4: daca acesta este compus din șirul de caractere "test" , se afișează in consolă un avertisment ca a fost primită comanda

Pasul 5: este solicitată funcția pentru deschiderea porții. aceasta actionează motorul și il face să se rotească o revoluție completă în 256 de pași.

Pasul 6: dupa deschiderea completă , programul așteaptă pentru 10 secunde și apoi apelează funcția de închiderea portii. În tot acest timp senzorul trimite ultrasunete și recepționează undele reflectate , astfel încat distanța față de proartă sau de alt obiect care poate apărea in cale este testată in permanentă. Atunci cînd distanța măsurată este mai mică de 5, servomotorul este oprit.

Pasul 7: la finalul întregii acțiuni, sms-ul primit cu comanda este șters pentru a elibera memoria pentru viitor.

Codul sursă al programului este atașat la finalul lucrării, în Anexa 7 și prezintă comentarii incluse printre instruțiuni pentru o mai bună întelegere a algoritmului.

4.3 Programarea

Arduino Uno poate fi programat cu propriul soft, versiunea utilizată in acest proiect find 1.6.6. Initial trebuie urmați câțiva pași pentru setarea programului. Din meniul principal se setează placa pe care dorim să lucram-Arduino UNO, în caz contrar, semnalul codificat, respectiv decodificat, este diferit de la o placa la alta și nu poate fi interpretat corect. Apoi, trebuie selectat portul de intrare în calculator, pentru a fi citita platforma de procesare- COM 4 (Arduino-Genuino Uno)

În zona de meniu se afla butoanele interactive:

Crearea unui proiect nou

Deschiderea proiectului

Salvarea proiectului

Verificarea erorilor din program

Încarcarea programului în placa de dezvoltare

Monitorizarea serială, folosit pentru comunicarea prin portul serial cu calculatorul

Microcontrolerul ATmega328 din componența platformei este scris cu un program ce permite încarcarea unui nou cod fară a fi nevoie de alte elemente hardware sau circuite adiționale. Prin protocolul STK500 se realizează comunicarea dintre platformă și calculator.

Mediul de dezvoltare integrat Arduino reprezinta o aplicatie scrisa în limbajul Java și include un editor de cod cu caracteristici, alinierea automată și conectarea legăturilor. Programele Arduino sunt scrise în C sau C++, iar utilizatorii trebuie să definească functiile de execuție astfel încat să fie permisa rularea programului. Aceste functii de executie sunt:

Functia de deschidere

Functia de configurare, ce rulează o singura data la inceputul programului, pentru a initializa setarile în cadrul acestuia ( void setup ( ) {…….} )

4.4 Realizarea practică a porții

Pentru o mai buna exemplificare a modului de funcționare a întregului proiect , am realizat un sistem mecanic, o poartă culisantă în miniatură la scară 1:10 din țeavă patrată de dimensiuni

15 x 15mm, pe un suport de lemn de lungime aproximativă 1,20 m și lățime 20 cm.

Poarta este formată din 3 stâlpi detașabili, între doi dintre aceștia este sudată partea fixa de poartă, poarta mobilă avănd atasată în partea de jos o cremalieră din oțel  Modul 1, 15x15mm.

Potrivită cu cremliera am ales un pinion ai cărui pini se pliază perfect pe aceasta. Roțile porții mobile ruleză de-a lungul unei șine metalice montată pe suportul de lemn.

În dreptul stâlpului din mijloc se monteză, cu ajutorul unui suport metalic, motorul , urmând ca pe axul acestuia sa fie fixat pinionul. Stâlpul ramas liber ar trebui sa fie prevăzut cu senzorul de proximitate in partea de jos, pentru a detecta atunci cand poarta se închide sau cand un obiect trece prin dreptul portii în timp ce aceasta se află in mișcare.

Fig. 22 Poarta, vedere din interior

Fig. 23 Poarta, vedere laterală

5. Concluzii

6. Bibliografie

[1] http://www.seeedstudio.com/wiki/GPRS_Shield_V1.0

[2] https://www.diafaan.com/sms-tutorials/gsm-modem-tutorial/at-cmgl-text-mode/

[3] https://www.youtube.com/channel/UCcWch8iA6m6HxCndQZIVxEw

[4] https://www.youtube.com/watch?v=Odz0ms8hP4s

[5] Prof. Balaban Ariadna, Referat "Sisteme de Automatizare", Colegiul Tehnic D. Leonida , Iasi

[6] https://ro.wikipedia.org/wiki/Istoria_ma%C8%99inilor_de_calcul

[7] Prof. Radu Rădescu "Arhitectura sistemelor de calcul ", Editura Politehnica Press, București , 2009

[8] http://www.scrigroup.com/calculatoare/calculatoare/Scurt-istoric-al-calculatoarel42251.php

[9] Prof. Corneliu Burileanu, suport de curs "Arhitectura microprocesoarelor" Facultatea Electronică,Telecomunicații și Tehnologia Informației, Bucuresti ,2002

[10] http://ece.ubm.ro/ea/cursuri/MM/ASM_C6.pdf

[11] Prof. Bratu Cristian, suport de curs " Microprocesoare și automate programabile " Facultatea de Inginerie Electrica , Craiova, 2016

[12] https://www.arduino.cc/en/Main/ArduinoBoardUno

[13] Steven F. Barrett , " Arduino Microcontroller- Processing for Everyone! " , Morgan & Claypool Publishers , Wyoming , 2012

[14] http://invata.mecatronica.eu/2010/10/28/arduino-uno-specificatii-tehnice/

[15] http://www.atmel.com/devices/atmega328p.aspx

[16] http://www.learnerswings.com/2014/06/circuit-diagram-to-connect-external.html

[17] https://ro.wikipedia.org/wiki/SRAM

[18] https://ro.wikipedia.org/wiki/EEPROM

[19] Prof. Corneliu Burileanu, suport de curs "Microcontrolere" Facultatea Electronică,Telecomunicații și Tehnologia Informației, Bucuresti ,2006

[20] https://en.wikipedia.org/wiki/Finite-state_machine

[21] https://en.wikipedia.org/wiki/State_diagram

[22]Andrei Drumea, Camelia Popescu, " Finite State Machines and their applications in software for industrial control ", "Politehnica" University of Bucharest

[23] http://taillieu.info/index.php/hardware/108-gprs-gsm-shield-v1-0-sim900

[24] Boris Landoni, " Low Cost GSM Remote Control", Maggio / Giugno ~ Elettronica In , 2010

[25] " ARM926EJ-S Technical Reference Manual"

[26]http://www.petervis.com/Raspberry_PI/Breadboard_Power_Supply/Breadboard_Power_Supply.html

[27] https://www.amazon.com/uxcell%C2%AE-Supply-Module-Solderless-Breadboard/dp/B00BXWV2F6

[28] http://www.gearbest.com/development-boards/pp_54861.html

[29] https://en.wikipedia.org/wiki/ULN2003A

[30] https://www.arduino.cc/en/Reference/StepperUnipolarCircuit

[31] http://www.gearbest.com/other-accessories/pp_226472.html

[32] http://roboromania.ro/

[33] https://www.teachengineering.org/lessons/view/umo_sensorswork_lesson06

[34] http://www.dx.com/p/hy-srf05-ultrasonic-distance-sensor-module-measuring-module-for-arduino-418349#.V3WSGbiLTIX

7. ANEXE

ANEXA 1 – ARDUINO UNO SCHEMĂ ELECTRICĂ DE REFERINȚĂ

ANEXA 2 – GPRS/GSM SHIELD SCHEMĂ ELECTRICĂ DE REFERINȚĂ

ANEXA 3 –SCHEMĂ ELECTRICĂ POWER SUPPLY

ANEXA 4 – DIAGRAMĂ DRIVER ȘI MOTOR

ANEXA 5 –SCHEMA ELECTRICĂ CHIP ULN2003A

ANEXA 6 – IMPLEMENTAREA CIRCUITULUI

ANEXA 5 – Codul sursă al programului

#include <SoftwareSerial.h> //libraria pentru comunicare serială

#include <Stepper.h> //libraria pentru motorul stepper

//definim pinii pentru senzorul ultrasonic

#define trigPin 13

#define echoPin 12

//Deschidem serialul pentru comunicarea cu shield-ul GSM

SoftwareSerial GSMSerial(7, 8);

//definim cati pasi pentru o revolutie va avea motorul

const int stepsPerRevolution = 256;

//variabila unde vom stoca mesajul

String msg = String("");

//variabila unde stocam ultimul mesaj citit

String lastMessageRead = "";

//definim pinii pentru motorul stepper

Stepper myStepper(stepsPerRevolution, 2, 3, 4, 5);

//initializam variabila in care stocam timpul

unsigned long time2 = 0;

//intializam un flag pentru primul timp

int flag = 0;

void setup()

{

// frecventa GPRS/GSM

GSMSerial.begin(19200);

Serial.begin(19200);

//setam viteza stepperului

myStepper.setSpeed(60);

//setam pinii pt senzor

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(10, OUTPUT);

pinMode(11, OUTPUT);

//functia pentru stergerea tuturor mesajelor

//senzorul GSM poate stoca un maxim de 6 mesaje(restul raman in coada)

//de aceea trebuie sa fie gol pentru a nu avea probleme in interceptarea mesajelor

removeMessages();

//asteptam senzorul de distanta

delay(5000);

}

//flag-ul pt un nou sms

int smsFlag =0;

void loop() {

//daca exista date pe canalul GSM

if(GSMSerial.available())

{

//citim caracter cu caracter

char x = (unsigned char)GSMSerial.read();

Serial.print(x);

//13 in cod ascii e Enter

if( x == 13 ){

//daca am ajuns la sfarsitul mesajului(newline) procesam mesajul

processGSMFeed();

}

if( x == 10 ){

//Skip line feed

}

else{

//altfel stocam orice caracter in variabila

msg += String(x);

}

}

//scriem pe banda gsm tot ce primim din consola de la utilizator

else if(Serial.available()){

GSMSerial.print((char)Serial.read());

}

//din 5 in 5 secunde verificam ca poarta sa fie inchisa

else if (millis()-5000>time2){

time2 = millis();

//pentru prima oara doar stocam timpul

if(flag==0){

flag=1;

}

else{

//verificam distanta curenta dintre poarta si senzor

int distance = testDistance();

Serial.print("Current distance: ");

Serial.println(distance);

//daca distanta e mai mare decat 5cm inchidem poarta

if(distance>5){

closeGate();

}

}

}

}

//procesarea instructiunii pentru GSM

void processGSMFeed(){

//CMGL:x = listarea mesajului x

if( msg.indexOf( "+CMGL:" ) >= 0 ){

//Stergerea mesajului listat (daca exista mesaje in memorie trebuie sterse pentru a elibera memoria)

int iPos = msg.indexOf( ":" );

String messageNumber = msg.substring(iPos+2,iPos+3);

removeMessage(messageNumber);

}

//CMTI interceptarea unui mesaj nou

else if( msg.indexOf( "+CMTI" ) >= 0 ){

// Cautam virgula in mesajul primit (+CMTI: "SM",4)

// Luam pozitia unde a fost stocat mesajul(in cazul de mai sus 4)

int iPos = msg.indexOf( "," );

String smsPos = msg.substring( iPos+1 );

lastMessageRead = smsPos;

//citim mesajul de pe pozitia x(in cazul de mai sus 4)

readNewSmsPosition( smsPos );

}

//CMGR citirea unui mesaj

else if( msg.indexOf( "+CMGR:" ) >= 0 ){

//ne pregatim pentru citire (in urmatoarea iteratie vom ajunge pe ramura de mai jos

smsFlag = 1;

msg="";

return;

}

//aici se va ajunge cu intreg mesajul

else if( smsFlag == 1 ){

processSms( msg );

smsFlag=0;

}

msg="";

}

//stergem mesajele (le listam pe toate si le stergem pe rand

void removeMessages(){

GSMSerial.println("AT+CMGL=\"ALL\"");

}

//stergem mesajul de pe pozitia i

void removeMessage(String i){

GSMSerial.println("AT+CMGD="+i);

}

//citim mesajul de pe pozitia pos

void readNewSmsPosition( String pos ){

GSMSerial.print( "AT+CMGR=" );

GSMSerial.println( pos );

}

//procesam sms-ul

void processSms(String msg){

//daca sms-ul este test deschidem poarta asteptam 10 secunde si apoi o inchidem

if(msg.indexOf("test")>0) {

Serial.println("\nMessage got: test");

openGate();

delay(10000);

closeGate();

}

//stergem mesajul citit sa nu umplem memoria

removeMessage(lastMessageRead);

}

//deschiderea portii

void openGate(){

unsigned long time;

time = millis();

digitalWrite(11, HIGH);

while(millis()-5000<time){

Serial.println("Opening Gate…");

myStepper.step(-stepsPerRevolution);

delay(500);

//ruleaza servomotorul cat timp ii ia usii sa se deschida

}

digitalWrite(11, LOW);

Serial.println("Gate Opened");

}

//inchiderea portii

void closeGate(){

int distance=200;

//ruleaza pana cand distanta este mai mica sau egala cu 5 cm

digitalWrite(10, HIGH);

while(distance>5){

//ruleaza servomotorul

myStepper.step(stepsPerRevolution);

Serial.println("Closing Gate…");

delay(500);

distance = testDistance();

Serial.print("Distance: ");

Serial.println(distance);

}

digitalWrite(10, LOW);

Serial.println("Gate Closed");

}

int testDistance(){

//salvam distanta senzorului

long duration;

long distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = (duration/2) / 29.1;

if(distance>200)distance=200;

return (int)distance;

}

Similar Posts