Sistem automat de comandă a unui motor [302761]
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ă și Tehnologia
Informației
(ETC – ELA)
Conducător științific Absolvent: [anonimizat]. Mădălin Corneliu FRUNZETE Andreea MARIN
2016
CUPRINS
1. Introducere……………………………………
2. Fundamentarea teoretica………………………
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 si echipamentele utilizate……
3.1 Microcontrolerul ATmega328P……..
3.2 Arduino Uno…………………..
3.2.1 Limbajul de programare ….
3.4 Shield GSM……………………………………………………………
3.4.1 Modulul SIM900………………..
3.4.2 Antena GSM/GPRS …………………………………………………
3.6 Alimentator Breadboard………..
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…….
-schema electronica a [anonimizat] a [anonimizat]
– [anonimizat] 1. [anonimizat], prelucrarea, stocarea și răspândirea informațiilor. [anonimizat], termenul a dobândit conotații diferite. [anonimizat] (IT), a intrat în utilizare pe scară largă numai la sfârșitul anilor 1970 [anonimizat] a [anonimizat].
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 [anonimizat] a devenit cea mai mare societate profesională tehnică din lume.
A existat o [anonimizat], 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 [anonimizat] a domeniilor conexe ale științei și tehnologiei care stau la baza civilizației moderne.
Domeniile de interes IEEE s-[anonimizat], bioinginerie, robotică, [anonimizat]. Electronica a [anonimizat], 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.
CAPITOLUL 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. x 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. x – Arhitectura Von-Neumann
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. x 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.
CAPITOLUL 3. Arhitectura microcontrolerului
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.
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. x 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
The high-performance Atmel picoPower 8-bit AVR RISC-based microcontroller combines 32KB ISP flash memory with read-while-write capabilities, 1024B EEPROM, 2KB SRAM, 23 general purpose I/O lines, 32 general purpose working registers, three flexible timer/counters with compare modes, internal and external interrupts, serial programmable USART, a byte-oriented 2-wire serial interface, SPI serial port, a 6-channel 10-bit A/D converter (8-channels in TQFP and QFN/MLF packages), programmable watchdog timer with internal oscillator, and five software selectable power saving modes. The device operates between 1.8-5.5 volts.
By executing powerful instructions in a single clock cycle, the device achieves throughputs approaching 1 MIPS per MHz, balancing power consumption and processing speed. [15]
3.1 Specificații tehnice ale microcontrolerului ATmega328P [15]
Fig. x 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. In 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. x -Placa de dezvoltare Arduino Uno [13]
“UNO” inseamna “unu” in limba italiana si este numit pentru a marca viitoarea lansare Arduino 1.0 IDE. Uno si versiunea 1.0 vor fi versiunile standard pentru marca Arduino.
Alimentare
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.
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.
Memoria
ATmega328 are 32 KB (cu 0,5 KB utilizate pentru bootloader). Ea are, de asemenea, 2 KB SRAM si 1 KB de EEPROM. [14]
Fig x O celulă SRAM cu șase tranzistori realizată în tehnologie CMOS.
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.x Alete modele de microcontrolere Arduino a) arduino Mega; b)Arduino Leonardo
3.2.1 Limbajul de programare
The Arduino is programmed in the C language.
Structura
Each Arduino program also called a “sketch”, has two required functions also called “routines”
void setup( ) { }
The code in the “void setup” between the two curly brackets will only run once when your Arduino
program begins.
void loop ( ) { }
The “void loop” is run after the setup has finished. After it has ran once it will be run again, and again,
until power is removed
Sintaxa
One of the slightly frustrating elements of C is its formatting requirements (this also makes it very
powerful). If you remember the following you should be all right.
//
(Single line comment)
It is often useful to write notes to yourself as you go along about what each line of code does. To do
this type two forward slashes at the beginning of your comment and everything until the end of the
line will be ignored by your program.
/* */
(Multi line comment)
If you have a lot to say you can span several lines as a comment. Everything between these two
symbols will be ignored in your program.
{ }
(Curly brackets)
Used to define when a block of code starts and ends (used in control structures as well as loops).
;
(Semicolon)
Each line of code must be ended with a semicolon (a missing semicolon is often the reason for a
program refusing to compile).
Tipuri de date
program is nothing more than instruction to move numbers around in an intelligent way. Variables
are used to do the moving.
int (integer)
The main workhorse; stores a number in 2 bytes (16bits). Has no decimal places and will store a value
between –32,768 and 32,767
long (long)
Used when an integer is not large enough. Takes 4 bytes (32 bits) of RAM and has a range between
-2,147,483,648 and 2,147,483,647.
Boolean (Boolean)
A simple True or False variable. Useful because it only uses one bit of RAM.
Float (float)
Used for floating point math (decimals). Takes 4 bytes (32 bits) of RAM and has a range between –
3.4028235E+38 and 3.4028235E+38.
char (character)
Stores one character using the ASCII code (ie ‘A’ = 65). Uses one byte (8 bites) of RAM. The Arduino
handles strings as an array of char’s.
Operații aritmetice
Operators used for manipulating numbers. (They work like simple math).
= (assignment) makes something equal to something else (es. X = 10 * 2 (x now equals 20))
+ (addition) adds one value to another (ex. delay(1000) + delay(500) (delay now equals 1500))
– (subtraction) subtracts one value from another (ex. delay(1000) – delay(500) (delay now equals 500))
* (multiplication) Multiplies one value by another (ex. delay(1000) * delay(500) (delay now equals
500,000))
/ (division) Divides one value by another (ex. delay(1000) / delay(500) (delay now equals 2))
% (modulo) gives the remainder when one number is divided by another (ex. 12 % 10 (gives 2))
Operatori de comparatie
Operators used for logical comparison.
= = (equal to) ex. 12 = = 10 is FALSE or 12 = = 12 is TRUE
! = (not equal to) ex. 12 ! = 10 is TRUE or 12 ! = 12 is FALSE
< (less than) ex. 12 < 10 is FALSE or 12 < 12 is FALSE or 12 < 14 is TRUE
> (greater than) ex. 12 > 10 is TRUE or 12 > 12 is FALSE or 12 > 14 is FALSE
Structuri de control
Programs are reliant on controlling what runs next, here are the basic control elements (There are many
more, see the Reference Guide)
If else
If( condition ){ }
Else if( condition ) { }
Else { }
This will execute the code between the curly brackets if the condition is true, and if not it will test the
else if condition, if that is also false the else code will be executed.
Example:
if (pinFiveInput < 500)
{
// do Thing A
}
else if (pinFiveInput >= 1000)
{
// do Thing B
}
else
{
// do Thing C
}
For
For ( int I = 0; i< #repeats; i++) { }
Used when you would like to repeat a chunk of code a number of times (can count up i++ or down i- –
or use any variable).
Comparison Operators
Control Structure
23
Example:
// Dim an LED using a PWM pin
int PWMpin = 10; // LED in series with 470 ohm resistor on pin 10
void setup()
{
// no setup needed
}
void loop()
{
for (int i=0; i <= 255; i++){
analogWrite(PWMpin, i);
delay(10);
}
}
Digital
pinMode (pin, mode);
Used to set a pin’s mode, pin is the pin number you would like to address 0-19 (analog 0-5 are 14-19).
The mode can either be INPUT or OUTPUT.
digitalWrite (pin, value);
Once a pin is set as OUTPUT it can be set either HIGH (pulled to +5 volts) or LOW (pulled to ground)
(ex. To turn a LED on you would digitalWrite whatever pin it was connected to HIGH)
Int digitalRead (pin);
Once a pin is set as an INPUT you can use this to return whether it is HIGH (pulled to +5 volts) or
LOW (pulled to ground). (ex. Having a switch activated will return a value of HIGH)
Analog
The Arduino is a digital machine but it has the ability to operate in the analog realm. Here’s how to
deal with things that aren’t digital.
Int analogWrite (pin, value);
Some of the Arduino’s pins support pulse width modulation (3, 5, 6, 9, 10, 11). This turns the pin on
and off very quickly making it act like an analog output. The value is any number between 0 (0% duty
cycle ~0v) and 255 (100% duty cycle ~5 volts).
Int analogRead (pin);
When the analog input pins are set to input you can read their voltage. A value between 0 ( for 0 volts)
and 1024 (for 5 volts) will be returned. Pins A0 – A5 are used for analogRead.
Timpul
Millis( )
Returns the number of milliseconds since the Arduino board began running the current program. This
number will overflow (go back to zero), after approximately 50 days.
Example
unsigned long time;
void setup( ){
Serial.begin(9600);
}
void loop( ){
Serial.print("Time: ");
time = millis( );
//prints time since program started
Serial.println(time);
// wait a second so as not to send massive amounts of data
delay(1000);
}
3.4 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. x 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.
3.4.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. x Prezentare generală a shield-ului GSM
Fig. x Interfata functionala a shildului GSM
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 [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.4.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. x 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. x Antena GPRS/GSM
3.6 Alimentator Breadboard
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 electrica 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.x Alimetator Breadboard
3.7 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. x Măsurarea distanței parcurse de undă folosind conceptul scolocației.
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.
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. x Senzorul de proximitate – partea frontala
3.8 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
– No-load pull into the frequency: > 600Hz
– Patru faze
– No-load pull-out frequency: > 1000Hz
– Raportul de scădere: 1/64
– Pull-in torque: > 34.3mN.m (120Hz)
– Unghiul de pas: 5.625 x 1/64
– Self-positioning torque: > 34.3mN.m
– DCR: 200ohm +/- 7 percent (25 Deg.C)
– Temperatura: < 40K (120Hz)
– Rezistența izolarii: > 10Mohm (500V)
– Zgomot: < 40dB (120Hz, No load, 10cm)
– Rezistența dielectrică: AC 600V / 1mA / 1s
– Clasa de izolație: A
– Lungimea cablului: 24cm
Fig. x Motorul Stepper partea frontală și axul [28]
Driverul motorului pas cu pas este alcatuit in primul rand din microcontrolerul ULN2003 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. x 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
Schema electrica a microcontrolerului ULN2003 este prezentată in Anexa 4.
Fig. x Driver motor pas cu pas
CAPITOLUL 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.
Fig. x 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. x 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.
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. x Poarta, vedere din interior
Fig. x Poarta, vedere laterală
CAPITOLUL 5. Concluzii
CAPITOLUL 6. Bibliografie
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;
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Sistem automat de comandă a unui motor [302761] (ID: 302761)
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.
