Automat programabil pentru sisteme domotice
Cuprins
Introducere
Capitolul
1.Structura de principiu și Programarea Automatelor Programabile
1.1.Structura
de principiu a Automatului Programabil
1.2.Programarea
Automatelor programabile.Diagrama Scară
Capitolul
2.Automate programabile pentru sisteme domotice. Structura de
principiu și particularitați
2.1.Structura
de principiu a Automatului Programabil pentru sistemele
domotice.
2.2.Particularități
ale Automatului Programabil pentru sisteme domotice
Capitolul
3.Dezvoltarea Hardware
3.1.Proiectarea
schemei electronice
3.2.Proiectarea
plăcii de circuit imprimat
Capitolul
4.Dezvoltarea Firmware
4.1
Descrierea și reprezentarea grafică al fluxului de execuție a
programului din memoria microcontrolerului (firmware-ului)
4.2.Descrierea
algoritmului de interpretare a programului recepționat de la
interfața software de programare
Capitolul
5 .Dezvoltarea Software
5.1.Descrierea
modului de operare a interfeței software de programare a
automatului pentru sisteme domotice
5.2.Realizarea
interfeței software în mediul de programare NetBeans utilizând
limbajul de programare JAVA
Capitolul
6.Concluzii
6.1.Concluzii
6.2.Upgrade-ul
sistemului în versiuni viitoare
Bibliografie
Introducere
Automatele
programabile sunt echipamente cu ajutorul cărora
se realizează
conducerea automată
a proceselor industriale.
Structura
unui proces controlat automat de către
un automat programabil este
reprezentată
cu
ajutorul schemei
bloc din
Fig.1.1
[1]:
Fig.1.1
Structura unui proces automatizat cu ajutorul unui Automat
Programabil.
Astfel,
asa cum se poate observa in Fig1.1 de mai sus, automatul programabil
efectuează doua sarcini importante:
- monitorizarea stării procesului, prin achiziția la intrările automatului programabil a varibilelor procesului și interpretarea sau măsurarea acestora;
- prelucrarea datelor primite la intrări și generarea comenzilor către elementele de execuție din sistemul automatizat dupa un program specific.
Principalul rol al
automatului programabil este acela de a înclocui automatizarile
discrete, realizate cu elemente electromecanice, pneumatice sau
electronice în logică cablată, aducând, în procesul de realizare
a automatizarilor, flexibilitate, structură compactă, fiabilitate
marită, programare ușoară si rapidă.
Un automat
programabil este un sistem specializat în tratarea problemelor de
logică secvențială si combinațională, simulând sistemele de
automatizare realizate în logică cablată printr-o configurație
flexibilă si programabilă. De asemenea, automatul programabil
trebuie sa fie adaptat la mediul de lucru industrial, să fie capabil
sa opereze într-o plajă largă de temperatură și umiditate,sa fie
ușor adaptabil la interfațarea cu orice proces și, mai ales,
utilizarea și programarea sa trebuie sa fie cât mai facile, astfel
încât să nu ridice probleme majore privind formarea sau instruirea
personalului de deservire.Toate aceste caracteristici, la care se mai
poate adăuga si prețul relativ redus, fac ca automatul programabil
sa fie elementul principal în procesele automatizate, atât din
sfera industrială cât și din sfera tot mai largă al aplicatiilor
domestice.
Utilizarea
logicii
programate
constituie
o modalitate calitativ superioara
de
realizare a
echipamentelor
de comanda.
În cazul automatului
programabil
instrucținile
executate și
succesiunea acestora sunt
implementate in programul înscris în memoria program, astfel
asigurându-se
o
flexibilitate deosebită
dispozitivelor
de comandă,
permițând
modificări si dezvoltări ulterioare, în mod foarte ușor. Daca
în
cazul
logicii
cablate
orice
modificare în logica
de functionare
a
echipamentului de comandă
implică
reproiectarea
cablajului,
efectuarea
a
noi conexiuni
între elemente, în cazul automatului
programabil,
modificarea
constă
în
simpla inserare a unor alte instrucțiuni
sau linii de cod in programul din
memoria program, fără
a fi
necesare modificari
în cablarea
inițială a conexiunilor în circuitul logic de comandă,
realizându-se astfel economii însemnate de timp si
de manopera.
Totodată,
această
facilitate de a programa secvențele de execuție în memoria program
a automatului permite
eliminarea
proiectarii hardware a unui sistem automatizat, și facilitează
optimizarea procesului automatizat, într-un timp scurt si fără
costuri semnificative. Ciclul
clasic: conceperea schemei, realizarea cablajului, verificarea
functionării,
refacerea schemei, etc., se modifica
în
sensul că
se
implementeaza
programul
în memorie cu echipamentul de programare. Eventualele modificari
la punerea în functiune
a instalației,
se fac prin echipamentul de programare fără
a
afecta cablajul realizat, eficiența
activitații
de proiectare si
implementare crescând considerabil.
Datorită
progresului tehnologic in domeniul digital din ultimii ani, prețul
microcontrolerelor cu arhitectura organizată pe 8 biți si a
procesoarelor cu arhitectura ARM a scăzut semnificativ, facând
posibilă utilizarea acestora în proiecte din afara spațiului
industrial. De asemenea, trebuie menționat suportul software pe care
firmele producătoare de circuite de acest tip, îl oferă.Acesta
este foarte ieftin sau ca și în cazul firmei ATMEL, mediul de
programare oferit de catre aceștia, ATMEL STUDIO, este gratis pentru
descărcare de pe site-ul producătorului.Din aceste motive, în
lucrarea de față mi-am propus proiectarea și realizarea practică
a unui automat programabil destinat utilizării în afara mediului
industrial, un sistem de automatizare destinat mediului domotic(
”Domotica
este
o aplicație a calculatoarelor
și
roboților
pentru
aplicații casnice. Este un cuvânt compus din domus
(latină,
însemnând casă) și informatică.
”[2]).
Capitolul 1.
Structura de principiu și Programarea Automatelor Programabile
1.1.Structura de principiu a Automatului Programabil
Structura hardware de principiu a automatelor
programabile este alcatuită, in general, din următoarele module
funcționale principale:
- Unitatea Centrală de procesare, microcontroler sau microprocesor si memorie;
- Circuite de interfațare aferente semnalelor de Intrare si Iesire;
- Modul de comunicație cu consola de programare(PC);
- Sursa de alimentare cu energie.
Unitatea centrală de procesare care este raspunzătoare
de prelucrarea semnalelor de intrare și execuția secvențială a
instrucțiunilor din programul înscris în memorie, în plus față
de microprocesor și memorie, conține, de asemenea, cel puțin o
interfață la un dispozitiv de programare și poate conține
interfețe către alte rețele de comunicație la distanță.
Circuitele
de interfațare aferente semnalelor de intrare și ieșire
indeplinesc un rol important în preluarea tensiunilor si semnalelor
de la elementele incluse în sistemele
operaționale și auxiliare
ale instalațiilor
automatizate: butoane, comutatoare, limitatoare de cursă,
senzori fotoelectrici, senzori de proximitate, traductoare de nivel,
traductoare de deplasare incrementale sau absolute și
traductoare al căror
semnal de ieșire
are o variație
analogică.
Pentru aceste traductoare
analogice sau sensori analogici, automatele programabile conțin, de
asemenea, ca parte integrată în blocurile de interfațare
intrare/ieșire si convertoare analog-numerice cu rezolutii de 8, 10
sau chiar 12 biți , cu rate de eșantionare de pîna la 15kHz.
De asemenea, un rol foarte important al circuitelor de
intrare/ieșire este acela de a izola mărimile electrice vehiculate
în procesul automatizat, mărimi ce pot atinge valori care afecteaza
unitatea centrală de procesare.
Cel mai utilizat circuit de izolare este
optoizolatorul, informația este transmisă cu ajutorul luminii între
un element transmițător (LED) si un element receptor
(FOTOTRANZISTOR). Dispozitivul conectat la intrarea optoizolatorului
va aprinde LED-ul, a carui lumină comandă intrarea în conducție a
canalului colector-emitor al fototranzistorului. Dacă în cazul
circuitului de intrare, dispozitivul conectat la intrare va aprinde
LED-ul optoizolatorului, în cazul circuitului de ieșire, unitatea
centrală de procesare va fi cea care va comanda optoizolatorul, iar
fototranzistorul din interiorul optoizolatorului nu este conectat
direct la iesirea automatului, el va comanda la rândul său, un
circuit cu releu electromagnetic. Acest lucru a fost reprezentat in
principiu in Fig1.2 de mai jos.
Fig1.2 Izolarea
nivelelor de tensiune în circuitele de intrare/ieșire
Modulul de comunicație cu consola de programare este
în general o unitate de comunicație serială, automatele
programabile moderne comunică cu unitatea de programare prin
intermediul interfeței USB sau, chiar, Ethernet.
Unitatea
de programare
permite
introducerea si
definitivarea programului în raport cu evolutia
mașinii
si cu modificarile
impuse în secvențele
functionale de bază
ale acestuia. Soluțiile
adoptate de catre fabricanți
includ mai multe variante:
- o consola autonomă cu memorie proprie, specifică metodei de programare off-line (soluție utilizată de catre firma Siemens, console de tip PG);
- o consolă portabilă, de mici dimensiuni, ce operează împreună cu automatul, utilizând
memoria
acestuia, (numit si
dispozitiv “hand-held”), specifică
metodei
de programare on-line;
- calculatorul personal de tip PC, soluție ce tinde sa înlocuiasca variantele amintite mai sus.
Prima
variantă oferă
avantajul unei
programări
comode, într-un birou de proiectare, deci
în varianta off-line, pe
când cea de-a doua implică
cuplarea directă
la automat deci implicit programarea se
realizează
on-line, nemijlocit în intimitatea procesului
tehnologic automatizat.
Datorită
memoriei de capacitate mare a consolei autonome,
varianta de programare off-line utilizează
de obicei un software complex cu posibilităti
multiple de programare, cu o interfață
grafică
complexă,
cu facilități
de simulare si testare a
programului realizat. Prin contrast, varianta on-line utilizeaza
un software minimal, cu posibilități
reduse de programare, limitate de obicei la introducerea de cuvinte
de comandă,
fără
interfață
grafică.
Se poate deci concluziona că
programele complexe se realizează,
testează si
simulează
în varianta off-line, în etapa programării
on-line făcându-se
doar o “ajustare” finală
a acestora.
Utilizarea
calculatorului personal tinde să
înlocuiască
însă
ambele variante de mai sus, deoarece combină
avantajele programării
off-line cu mobilitatea pe care o ofera la
ora actuală calculatoarele
portabile (tip notebook), ceea ce face inutilă
utilizarea dispozitivelor “handheld” și
elimină
practic delimitarea între metodele ”off-line”
și
”on-line”.
Transmiterea programului de la
dispozitivul de programare la automatul programabil și
invers, în cazul utilizarii
consolei de programare autonome sau a calculatorului personal se face
utilizând interfața
serială
RS 232 sau USB. Pentru
modele de automate mai vechi interfețele de programare sunt blocuri
funcționale externe, adaptoare ce fac translatarea datelor de la USB
la standardul RS232. Automatele moderne însa , precum Siemens
S7-1500, sunt capabile să comunice într-o rețea LAN cu ajutorul
comunicației Ethernet.
De
asemenea, automatele programabile industriale moderne sunt prevazute
cu sloturi de memorie tip SD externe pe care se pot memora mai multe
programe, facând automatul programabil mult mai adaptabil la
diferite tipuri de procese .
1.2.Programarea Automatelor programabile.Diagrama Scară
IEC –
International Electrotechnical Commission(Comisia Electrotehnică
Internațională)
a
definit pentru automatele programabile, standardul IEC 1131.Există
patru limbaje de programare definite de acest standard[3]:
- Lista de instrucțiuni (eng. Instruction list)este un limbaj similiar cu codul asambler, a fost în mod tradițional utilizat în programarea automatelor programabile.
Exemplu:
FUNCTION
D : BOOLEAN
VAR_INPUT
A, B, C : BOOLEAN;
END_VAR
LD
A (* Load A and store it in the accumulator *)
OR
B (* Or B with the accumulator and store the result in the
accumulator *)
AND
C (* And C with the accumulator and store the *)
(*
result in the accumulator *)
ST
D (* Store the accumulator value in D *)
END_FUNCTION
- Text Structurat (eng. Structured Text) este un limbaj similar cu limbajul de programare PASCAL.Acesta are instrucțiuni condiționale ca și IF sau CASE , precum și instrucțiuni repetitive ca și FOR...DO...END_FOR, WHILE...DO and REPEAT...UNTIL.
Exemplu:
FUNCTION D :
BOOLEAN
VAR_INPUT
A,
B, C : BOOLEAN;
END_VAR
D := A OR B AND C;
END_FUNCTION
- Diagrama scară (eng. Ladder Diagram) este unmod de programare grafic, asemănător cu descrierea electrică clasică sau desenarea schemei electrice a unui sistem complex.
- Diagrama cu blocuri de funcții (eng. Function Block Diagram) este un limbaj în care toate funcțiile, ieșirile și intrarile sunt reprezentate ca blocuri grafice.Aceste blocuri sunt conectate cu linii, reprezentându-se astfel logica programului sau transmiterea datelor.Direcția este intotdeauna de la stânga la dreapta, excepție facându-se pentru buclele de reacție.
Diagramele
scară sunt cele mai utilizate in programarea automatelor
programabile moderne, pentru că acest tip de programare presupune
transpunerea imediată a schemei logice de funcționare a sistemului
de automatizare, folosind simboluri grafice pentru contacte, bobine,
noduri ale schemelor de automatizare echivalente, realizate cu
elemente discrete in logica cablată.Diagrama scara este o
reprezentare simbolică a unor panouri
cu relee, este constituită
din linii orizontale plasate între
liniile verticale ce simbolizează
tensiunea de alimentare. Pe fiecare treaptă
orizontală
regăsim
trei tipuri principale
de
simboluri: Contacte normal deschise si normal inchise; Bobine de
releu activate de circulatia curentului; Casete ce pot reprezenta
relee de timp sau relee numărătoare.
În
figurile de mai jos sunt exemplificate, o secvență de program
reprezentată cu ajutorul diagramei scară, respectiv, câteva
exemple de simboluri utilizate în aceste diagrame.Simbolurile sunt,
dupa cum se poate observa in Fig 1.4, sugestive, facând facilă
recunoașterea elementelor de intrare/ieșire la citirea diagramei.
Fig1.4
Exemple de simboluri utilizate in diagramele scară[5]
Capitolul 2
Automate programabile pentru sisteme domotice. Structura de principiu și particularitați
2.1.Structura de principiu a Automatului Programabil pentru sistemele domotice
Așa cum am
menționat în Introducere, în această lucrarea mi-am propus
proiectarea și realizarea practică a unui automat programabil
pentru sisteme domotice. În proiectarea acestuia am urmărit
obținerea unui sistem programabil fiabil, ușor de instalat, ușor
de utilizat, și posibilitatea realizarii practice la preț cât mai
scăzut.Cea mai mare atenție s-a acordat interfeței de programare,
aceasta fiind și cea mai mare provocare in procesul de concepere a
acestui sistem programabil.
Dupa cum am
prezentat in capitolul anterior, programarea automatelor programabile
industriale se face utilizând limbaje specifice. În cazul
automatului pentru domeniul domotic nu se dorește utilizarea
limbajelor specifice celor industriale,ci, am dorit o formă mult mai
simplă pentru reprezentarea programului, o formă ușor de
reprezentat de către persoane care nu au nici un fel de cunoștințe
din domeniul industrial sau, mai mult, in domeniu automatelor
programabile.
Structura hardware
de funcționare a automatului pentru sistemele domotice dorește să
mențină, cât mai acurat posibil, structura generală a automatelor
programabile industriale, structură prezentată în capitolul
anterior:
- Unitatea Centrală de procesare, microcontroler sau microprocesor si memorie;
- Circuite de interfațare aferente semnalelor de Intrare si Iesire;
- Modul de comunicație cu consola de programare(PC);
- Sursa de alimentare cu energie.
Unitatea centrală de procesare și memoria din
automatul programabil propus sunt constituite în microcontrolerul
ales, ATMEGA32, fabricat de firma ATMEL, un microcontroler cu
arhitectura organizată pe 8 biți.
Circuitele de interfațare a semnalelor de intrare și
ieșire au fost proiectate urmărindu-se, ca și in cazul automatelor
industriale, izolarea semnalelor de intrare/ieșire față de
circuitul unitații centrale. S-a obținut astfel, nu numai
protejarea microcontrolerului împotriva semnalelor de nivel
periculos, dar și flexibilitate în utilizarea unei palete largi de
dispozitive de intrare, senzori și elemente de comandă, ca exemplu
utilizarea releelor cu diferite tensiuni de comandă.
Comunicarea între automatul propus și interfața de
programare sau între alte automate programabile de același tip, s-a
dorit a fi o comunicație de tip ehernet ca și intr-o rețea locală
de calculatoare (LAN). Această configurație a dus la posibilitatea
expansiunii sistemului de automatizare, fiind posibilă conectarea
mai multor automate programabile intr-o rețea, cât și la
posibilitatea programării acestora de la distanță, de la unul sau
mai multe calculatoare PC aflate în interiorul rețelei.
Prețul tot mai scazut al ROUTERELOR wireless utilizate
in rețele locale, cu predilecție cele concepute pentru uzul în
rețele mici utiliazate în case si apartamente, a făcut ca
securizarea acestei rețele locale formată din automatele
programabile propuse sa fie o sarcină ce-i revine doar ROUTER-ului
wireless folosit in această rețea. În figura 2.1 este reprezentată
o configurație posibilă, utilizându-se patru automate programabile
propuse in această lucrare, conectate intr-o rețea LAN cu ajutorul
unui ROUTER wireless și programate sau comandate de către doua
calculatoare PC aflate in interiorul acesei rețele.
Sursa
de alimentare cu energie a automatului este una externă, exact ca și
în cazul automatelor programabile industriale. Sursa alimentează
circuitele logice cu o tensiune stabilizată de 5V, iar pentru
elementele exterioare de comandă și cele de intrare, sursa oferă o
tensiune stabilizată de 12V. S-a ales o sursă externă, deoarece
tensiunile de alimentare a elementelor externe de intrare/ieșire pot
fi mai mari sau mai mici față de tensiunea de alimetare a
circuitelor logice, datorită izolării realizate în circuitele de
interfațare a semnalelor de intrare/ieșire.
Spre deosebire de automatele programabile industriale,
automatul programabil propus este proiectat pentru utilizarea sa în
sisteme domotice și nu trebuie să fie adaptabil la funcționarea în
mediul industrial. Deși, intrările automatului sunt capabile să
preia semnale de la senzori utilizați în mediul industrial,
aplicațiile în care se va folosi automatul programabil propus nu
trebuie să ridice pretențiile întâlnite în cadrul sistemelor de
automatizare industriale. De aceea, automatul programabil pentru
sisteme domotice propus, a fost echipat, în structura sa, cu trei
sensori pentru măsurarea temperaturii mediului ambiant, măsurarea
umiditații în aer și măsurarea intensității luminii din mediul
ambiant, elemente neîntalnite în cazul structurii interne a
automatelor industriale. De asemenea, au mai fost adăugate un
circuit de ceas și calendar (RTC-real time clock), un ecran
alfanumeric lcd și butoane, pentru citirea sau introducerea anumitor
date de către utilizator.
Figura
2.2 delimitează structura automatului programabil pentru sisteme
domotice propus în șase blocuri funcționale principale:
- Unitatea centrala de procesare realizată în jurul microcontrolerului ATMEGA32;
- Interfața cu utilizatorul formata din ecranul LCD alfanumeric și patru butoane;
- Circuitul de ceas și calendar;
- Blocul de senzori format din senzorul de temperatura TMP36, senzorul de umiditate HIH4030 și senzorul de masurare a intensității luminii care este un fotorezistor.
- Interfața de comunicare Ethernet realizată în jurul circuitul integrat ENC28J60, produs de firma Microchip;
- Circuitul de interfațare și izolare a semnalelor de intrare/ieșire.
Fig.2.2 Structura internă de principiu a automatului programabil
pentru sisteme domotice propus spre realizare
Fig 2.1 Exemplu de configurație a unei rețele de
automate programabile pentru sisteme domotice
2.2.Particularități ale Automatului Programabil pentru sisteme domotice
O
particularitate importantă o constitue structura internă a acestui
automat. Așa cum s-a descris mai sus, în structura automatului
programabil propus, s-au adaugat câteva elemente neîntalnite, in
general, în structura internă a automatelor programabile
industriale.
Interfața cu
utilizatorul conține un afișaj alfanumeric. Această componentă nu
este des încorporată în structura automatului industrial propriu
zis, ci , este o unitatea separată conectată, de obicei, prin cablu
la automatul programabil cu care comunica cu ajutorul unui protocol
serial. În figura 2.3 este reprezentată o astfel de configurație
formată de un automat programabil industrial produs de firma
Siemens, S7-400, conectat la o interfață cu utilizatorul.
Fig.2.3
Automatul programabil S7-400 produs de SIEMENS conectat cu ajutorul
interfeței seriale cu un modul de interfațare cu utilizatorul[6]
Trebuie menționat
că există în prezent automate programabile industriale care au
încorporate elemente de afișare, însă, acestea sunt afișaje lcd
grafice sau în cazul automatelor industriale din seria S7-1000
SIEMENS, afișaje TFT color (vezi figura 2.4). Aceste tipuri de
afișaje se pot achiziționa la prețuri mult mai ridicate față de
afișajul alfanumeric propus.
Fig.2.4
Automate programabile Siemens echipate cu ecrane TFT color[7]
O altă
particularitate importantă a automatului programabil propus spre
realizare în această lucrare sunt senzorii încorporați în
structura sa internă. În general, in cazul automatelor industriale,
elementele de intrare de acest tip fac parte din procesul urmărit
si controlat de automatul programabil, astfel că, senzorii sunt
conectați extern la interfața de intrare a automatului programabil.
Automatul programabil propus, nu respectă rigorile cerute în mediul
industrial, și nu necesită măsurarea cu precizie a semnalelor de
intrare și, de aceea, nu s-a dorit implementarea unor circuite
complexe pentru măsurarea cu precizie a caracteristicilor mediului
ambiant. Senzorii atașați în structura automatului formează o
particularitate ce s-a considerat a fi necesară în structura unui
dispozitiv de acest tip, eliberând intrefața de intrare a
automatului prin montarea lor în structura internă și nu în
circuitul extern conectat la interfața de intrare a automatului. De
asemenea, automatul programabil este propus pentru uzul în sisteme
domotice, unde, se presupe că va fi operat de catre utilizatori fără
cunoștințe în domeniul electric, așa deci, s-a preferat adăugarea
acestor senzori în interiorul structurii automatului, scutind
utiliazatorul de sarcina de a conecta exterior elemente de acest tip.
Circuitul de ceas
și calendar realizat în jurul circuitului integrat PCF8563 fabricat
de firma NXP, este o particularitate importantă, atît pentru
structura automatului programabil, cât și pentru interfața cu
utilizatorul. Acest circuit este capabil să incrementeze un ceas de
timp și calendar, având, în structura circuitului de alimentare,
adăugat un condensator cu valoarea de 1 Farad, facând posibilă
menținerea incrementării și în lipsa tensiunii de alimentare.
Folosirea externă a unui astfel de circuit elimină din structura
programului (firmware-ului), înscris în memoria microcontrolerului,
implementarea software a unei astfel de funcții și face posibilă
funcționarea pe perioadă îndelungată, fără resetarea sau
pierdera incrementarii.
O carcteristică
foarte importantă a automatului programabil pentru sisteme domotice
propus, este interfața de comunicare și programare. Așa cum s-a
descris mai sus, automatul propus, poate fi connectat intr-o rețea
ethernet de tip LAN, acesta având adresa de ip și adresa MAC
proprie, înscrisă în memorie. Particularitea, insă, constă în
protocolul de comunicare ales, acesta fiind UDP(eng. User Datagram
Protocol), un protocol neutilizat in spațiul industrial, deoarece
acest protocol nu asigură integritatea datelor transmise și nu
verifică recepționarea datelor de către destinatar dupa
transmitere. Acest protocol a fost ales pentru automatul programabil
propus, pentru că este compatibil cu resursele oferite de
microcontrolerul utilizat. Protocolul UDP nu necesită, în
implementarea sa software, resurse foarte mari în ceea ce privește
memoria de tip RAM din interiorul microcontrolerului.
Inițial,
la începutul dezvoltării acestui proiect, am încercat
implementarea protocolului și transmisia datelor utilizând TCP
(eng. Transmission
Control
Protocol)
, folosind microcontrolerul ATMEGA16 produs de firma ATMEL,
microcontroler similar cu ATMEGA32, însă cu resurse mai mici în
ceea ce privește memoria RAM. Înlocuirea microcontrolerului
ATMEGA16 , care deține 1kOctet memorie RAM, cu ATMEGA 32, echipat cu
2kOcteți memorie RAM, nu a dus la implementarea cu succes a
transmisiei datelor utilizând protocolul TCP.
Resursele limitate
oferite de microcontrolerele AVR (ATMEGA32) ATMEL, utilizate în
dezvoltarea automatului programabil propus, au dus la conceperea unui
algoritm de transmitere, analiză și memorare a datelor, eficient
în utilizarea resurselor și fiabil.
Protocolul
corespunde nivelului
transport
din
stiva
TCP/IP.
TCP oferă un serviciu de comunicare la un nivel intermediar între o
aplicație și Protocolul
Internet (IP).
Atunci când o aplicație dorește sa trimită o bucată mare de date
pe Internet, în loc sa fragmenteze datele în pachete IP de
dimensiuni mici și sa emită o serie de cereri pentru protocolul IP,
software-ul poate emite o cerere unică pentru TCP și să lase
protocolul TCP să se ocupe de detaliile de manipulare.
Protocolul Internet (IP) se ocupa
cu schimbul de blocuri de informații numite pachete. Un pachet este
o secvență de octeți și constă dintr-un antet, urmată de
secțiunea de date propriu-zise. Antetul furnizează informații
despre destinația pachetului și, opțional, informații de rutare
utilizate pentru transmitere, până când acesta ajunge la
destinația sa finală. Secțiunea de date conține informația
necesara pe care IP trebuie sa o transmită.
Un
segment TCP este format dintr-un antet segment și o secțiune de
date. Antetul TCP conține 10 câmpuri obligatorii, și un câmp
opțional de extensie (fundal roz în tabelul din fig.2.5).Secțiunea
de date urmează antetul. Lungimea secțiunii de date nu este
specificată
în antetul segmentului TCP. Aceasta
poate fi calculată
prin scăderea lungimii combinate a antetului
TCP și antetului
IP încapsulate,
din lungimea totală a datagramelor IP (specificat în antetul IP).
Fig.2.5
Structura antetului TCP[8]
În cazul protocolului UDP,
antetul UDP este alcătuit din patru câmpuri, fiecare având
lungimea de 2 octeți.
Fig.2.6
Structura antetului UDP[9]
Portul sursa (eng. Source Port) -
în adresarea bazata pe IPv4 acest câmp este opțional. Daca nu este
utilizat acest câmp, are valoarea zero; când reprezintă informație
semnificativă, el va indica portul inițiator al procesului de
transmisie a datagramelor.
Portul
destinție (eng. Destination Port) - spre
deosebire de portul sursă,
câmpul este obligatoriu și indică
portul de recepție
Lungimea
(eng. Length) - acest
câmp indica lungimea în octeți a datagramei: antet plus secțiune
de date (valoarea minima a lungimii este 8).
Suma
de control (eng. Checksum) - asigură
imunitatea la erori; se calculează ca fiind complementul fată
de 1 (pe 16 biți) a pseudo-antetului cu informații extrase din
antetul IP, antetului UDP și a câmpului de date, eventual se
completează cu zerouri pentru a atinge lungimea stabilită.
Pseudo-antetul
prefixează antetul UDP și va conține, printre altele, adresele
sursă, destinație, lungimea pachetului UDP.
Așa cum se observă în
descrierea scurtă, de mai sus, utilizarea protocolului de transport
UDP, este cel mai potrivit pentru transportarea datelor dintre
automatul programabil propus și rețeaua din care face parte. Față
de protocolul TCP, sunt mult mai puțini octeți de reținut in
memorie pentru formarea antetului în procesul de comunicare,
folosind protocolul UDP.
Ca și în cazul automatelor
programabile industriale, automatul propus are nevoie de o interfață
de programare, pentru a recepționa instrucținile ce trebuiesc
executate, sub forma unui program. Interfața este o aplicație
software pe care am realizat-o utilizând limbajul Java si care este
capabilă sa ruleze atât în sistemul de operare Windows 7 și 8 ,
cât și în versiunile Ubuntu ale sistemului de operare
Linux. Interfața nu este un mediu de
programare specific limbajelor de programare pentru automatele
programabile industriale, cum ar fi, spre exemplu, diagramele scară,
ci, dorește a fi o interfață ușor de folosit, în care,
utilizatorul va trebui doar să selecteze condițiile în care
dorește ca un anumit element de control să fie acționat. Această
interfață software de programare va fi descrisă în detaliu în
capitolul 5 a acestei lucrări.
Modul în care automatul primește și memorează
programul de la interfața de programare este un protocol conceput
special pentru acest automat. Practic, interfața de programare
formează un șir de caractere și numere, în funcție de logica de
funcționare a automatului impusă de utilizator și definită prin
utilizarea interfeței software. Secvența carcaterelor din șir
respectă reguli stabilite, astfel încât permite algoritmului care
citește acest șir, să determine acțiunile pe care automatul
trebuie sa le execute. Șirul este memorat într-un tablou cu o
singură dimensiune, apoi citit, urmărind fiecare caracter în parte
și cu o serie de instrucțiuni de tipul IF..ELSE sunt luate
deciziile necesare pentru acționarea dispozitivelor conectate la
ieșirea automatului.
Detaliile privitoare la structura programului din
memoria microcontrolerului (firmware-ului) și la structura
interfeței software de programare vor fi descrise în capitolele 4,
și respectiv 5.
Capitolul 3
Dezvoltarea Hardware
3.1.Proiectarea schemei electronice
Schema electronică
de principiu a automatului programabil pentru sisteme domotice propus
spre realizare practică în această lucrare, se poate împarții în
câteva blocuri funcționale principale:
- Circuitul unității logice de procesare realizat cu microcontrolerul ATMEGA32;
- Circuitul de interfațare a semnalelor de intrare/ieșire realizat în jurul circuitului integrat MCP32017 fabricat de firma Microchip;
- Circuitul de Ceas și Calendar construit cu ajutorul circuitului integrat PCF8563 fabricat de firma NXP;
- Circuitul de măsurare a temperaturii, umidității și intensității luminii mediului ambiant, construit cu TMP36, senzor de temperatură analogic, fabricat de firma Analog Devices, HIH4030, senzor de umiditate analogic, fabricat de firma Honeywell și un fotorezistor într-un circuit divizor de tensiune.
- Circuitul intefeței de comunicare Ethernet construit cu circuitul integrat ENC28J60, fabricat de firma Microchip;
- Circuitul interfeței cu utilizatorul.
Fig.3.1 Schema bloc
a automatului programabil pentru sistemele domotice
În Fig.3.1 este
reprezentată structura automatului propus sub forma unei scheme bloc
de principiu și, de asemenea, sunt reprezentate cu diferite culori,
magistralele de date, cu protocoalele de comunicare aferenete.
Semnalele senzorilor analogici sunt recepționate de către portul
echipat cu convertor analog numeric al microcontrolerului. Afișajul
LCD și cele patru butoane folosite în circuitul interfeței cu
utilizatorul sunt conectate printr-un bus paralel de date, la porturi
paralele digitale ale microcontrolerului. Circuitul interfeței
semnalelor de intrare/ieșire a fost construit utilizându-se
circuitul integrat MCP23017 (Microchip), care comunică cu
microcontrolerul pe busul serial I2C (eng. Inter-Integrated Circuit),
la fel ca și în cazul circuitului de ceas și calendar construit
cu circuitul integrat PCF8563(NXP), iar pentru realizarea circuitului
intefeței de comunicare ethernet s-a folosit ENC28J60 (Microchip) ,
care comunică cu microcontrolerul pe busul serial de date SPI (eng.
Serial Peripheral Interface).
Elementul
principal al circuitului electronic, al automatului programabil
propus, este microcontrolerul cu arhitectura RISC (eng. Reduced
instruction set computing), ATMEGA32 fabricat de firma ATMEL, care
are următoarele caracteristici importante, conform foii de catalog
oferite de producător[10]:
- Capacitatea memoriei program de tip flash este 32kOcteți;
- Capacitatea memoriei SRAM este 2kOcteți;
- Capacitatea memoriei EEPROM este 1024 Octeți;
- Frecvența de tact maximă de operare este 16MHz;
- Numărul maxim de pini intrare/ieșire este 32;
- O singură interfață de comunicare SPI implementată în structura internă;
- O singură interfață de comunicare I2C implementată în structura internă;
- O singură interfață de comunicare UART(comunicație serială asincronă) implementată în structura internă;
- Convertor analog-numeric cu 8 canale, construit în interiorul structurii microcontrolerului;
- Rezoluția convertorului analog-numeric este de 10 biți;
- Viteza maximă de eșantionare la conversia analog-numerică este de 15ksps;
- Trei circuite de temporizare (eng TIMER)sunt implementate în structura microcontrolerului;
- Patru circuite de PWM (eng. pulse width modulation), modulare în pulse, sunt implentate în interior.
Fig.3.2 Schema
electronică de principiu a circuitului unității centrale de
procesare realizată cu ATMEGA32
Așa cum se observă
în fig.3.2 microcontrolerul operează cu o frecvență de tact de
16MHz, stabilită cu ajutorul quartzului XT1, conectat la oscilatorul
intern al microcontrolerului, la pinii 12 și 13 și condensatorii
C1, C2. Tensiunea de +5V, aplicată întregului circuit logic,
alimentează microcontrolerul la pinul 10, fiind filtrată în
prealabil de condensatorul C3. Filtrele R1,C5 și R2,C4, elimină
eventualele elemente parazite aflate în tensiunea de alimentare,
pentru a fi aplicată, în continuare, pinilor AVCC, pentru
alimentarea convertorului anlog-numeric aflat în interiorul
microcontrolerului și AREF, pentru stabilirea tensiunii de referință
a converorului analog-numeric.
Porturile PA, PB,
PC și PD sunt porturi de 8 octeți ale microcontrolerului a căror
rol funcțional poate fi stabilit intern, prin configurarea
regiștrilor aferenți fiecarui port. Astfel, portul PA a fost
configurat ca intrare pentru convertorul analog-numeric. Trebuie
menționat că microcontrolerul este echipat cu un singur CAN, iar un
multiplexor selectatează una din cele 8 intrari ale portului, pentru
conversie. Senzorii analogici au fost conectați la acest port la
pinii PA1, PA2, PA3, iar pinii PA4, PA5, PA6 și PA7 preiau semnale
analogice de la eventualii senzori analogici externi ce pot fi
conectați de utilizator prin intermediul unui conector așezat pe
placa de circuit imprimat. Tensiunea aplicată acestor pini de
intrare CAN trebuie sa fie cuprinsă între 0 și +5V.
La portul PB al
microcontrolerului sunt conectate butoanele interfeței cu
utilizatorul, la pinii PB0, PB1, PB2, PB3, configurați ca intrări
digitale cu ajutorul regiștrilor aferenți acestui port. Butoanele
au fost conectate utilizând un circuit pull-up cu rezistori, pentru
a asigura nivel logic high
(1 logic) la
intrarile digitale ale microcontrolerului, pe perioada cât aceastea
nu sunt acționate. Pinii PB4, PB5, PB6 și PB7 reprezintă portul
SPI al microcontrolerului, utilizat în comunicarea cu interfața
Ethernet. Interfața SPI folosește 4 fire (eng. 4 wire
communication) pentru transmiterea și recepționarea datelor. O
observație importantă referitoare la acest bus de comunicație este
faptul că se utilizează fire diferite pentru transmiterea și
recepționarea datelor, ceea ce face transmisia de date, pe acest
bus, foarte rapidă față de busul I2C sau UART.
Semnalele SPI sunt:
SCK – Semnal de
tact pentru sincronizarea transmisiei și recepționării datelor;
MISO – (eng.
Master In Slave Out) Pin pentru recepționarea datelor de la
dispozitivului sclav, în cazul de față , interfața de
comunicare Ethernet;
MOSI – (eng.
Master Out Slave In) Pin pentru transmiterea datelor către
dispozitivul sclav, în cazul de față, interfața de comunicare
Ethernet;
CS – (eng. Chip
Select) Pin pentru selectarea dispozitivului conectat pe busul SPI,
pentru că busul permite conectarea mai multor circuite.
Interfața SPI este
folosită de asemenea, la înscrierea programului (firmware-ului) în
memoria program de tip flash a microcontrolerului. În figura 3.2
este reprezentat conectorul pentru programare, denumit ICSP (eng. In
Circuit Serial Programming), care respectă standardul de conectare a
programatoarelor ATMEL. Pentru înscrierea programului
(firmware-ului) în memoria program a microcontrolerului, pentru
acest proiect, am folosit programatorul AVRISP mkII, fabricat de
producătorul microcontrolerului ATMEGA32 , ATMEL.
Afișajul
LCD alfanumeric este de tipul 24 caractere x 2 rânduri[11],
iar pentru comunicarea cu acesta este nevoie de 4 biți de date și 2
biți de control:
D4, D5, D6, D7 –
Biți de date;
E - Selectare LCD
(eng. Enable);
RS – Selectarea
Înscriere/Citire Regiștrii Interni (eng. Register Select) .
Aceste semnale sunt
conectate la portul PC al microcontrolerului , așa cum se observă
în fig.3.2.
Pinii
PC0 și PC1 reprezintă busul de comunicare cu circuitele integrate
PCF8563(circuit RTC)[12]
și MCP23017(Expandor intrare/ieșire)[13].
Acest tip de comunicare, I2C, necesită utilizarea a doua semnale:
SCL - (eng. Serial
Clock) Semnal de tact pentru sincronizarea transmisiei și
recepționării datelor;
SDA – (eng.
Serial Data) Semnal ce conține datele comunicate pe acest bus, în
mod serial.
Din punct de vedere
al circuitului electronic, busul I2C de comunicare serială, necesită
folosirea unui circuit rezistiv de pull-up, deoarece, spre deosebire
de busurile UART sau SPI, pinii utilizați pentru aceast tip de
comunicare sunt de tipul Drena în gol (eng. Open-Drain). În figura
3.3 se pot observa rezistoarele R4 și R5, care îndeplinesc acest
rol.
Portul
PD al microcontrolerului, nu este utilizat în construcția
automatului programabil propus, însă a fost conectat la bornele
unui conector, denumit în schema de principiu EXTENSIE
I/O,PWM,INT,UART, pentru eventualele înbunătațiri
care vor fi aduse, în viitor, acestui proiect.
Fig.3.3 Schema
electronică de principiu. Conectarea interfeței cu utilizatorul la
porturile microcontrolerului.Conectorul ICSP de programare.Conector
extensie.Rezistori pull-up pentru I2C și butoane.
Pentru
măsurarea temperaturii s-a folosit senzorul TMP36 (Analog Devices),
care oferă la ieșire o tensiune electrică proporțională cu
temperatura în grade Celsius, a mediului ambiant. Conform datelor de
catalog oferite de producător, senzorul,
nu necesită
nici un
fel de
calibrare externă
și
are
o precizie tipică
de ± 1 ° C la + 25 ° C si ± 2 ° C la intervalul de temperatura
de la -40 °C pana la + 125 ° C. Funcționează
cu o tensiune de alimentare de 2.7 - 5.5 V DC.
În
figura 3.4 de mai jos, se poate urmării evoluția tensiunii de
ieșire proporțional cu valoarea temperaturii mediului ambiant,
prezentat în foaia de catalog oferită de producător.
Fig.3.4 Graficul
evoluției tensiunii de ieșire în funcție de valoarea temperaturii
mediului ambiant[14]
De
asemenea, conform foii de catalog, senzorul oferă la ieșire o
tensiune de 750mV la 25°
C. Tensiunea citită la pinul de ieșire poate fi convertită în
grade Celsius folosind factorul de scalare de 10 mV / ° C,
ținîndu-se cont și de tensiunea de offset specificată în foaia
de parametrii a senzorului (eng. Datasheet), 0,5V.
Măsurarea
umiditații relative în mediul ambiant, este realizată folosind
senzorul HIH4030, fabricat de firma Honeywell. Producătorul
recomndă, în foaia de catog, folosirea acestui senzor, intr-un
mediu cu valori ale temperaturii între 0 și 50 ° C, pentru valori
ale umiditații între 0 și 100%.
Fig.3.6
Mediul de operare recomandat de producător pentru folosirea
senzorului HIH4030[15]
Dupa
cum se poate observa în figura 3.6, senzorul se poate utiliza în
acest proiect, având în vedere că automatul programabil pentru
sisteme domotice propus, va funcționa la valori ale temperaturii și
umiditații specifice imobilelor, case sau apartamente.
Senzorul
HIH4030 este analogic, drept urmare, ca și în cazul senzorului de
temperatură, acesta oferă la ieșire o tensiune electrică
proporționla cu valoarea umiditații în aer. Foaia de catalog
menționeaza o valoare de 0,958V , ca fiind offsetul tensiunii de
ieșire la 0% umiditate. Umiditatea relativă măsurată se obține
folosind formula Sensor RH
= (VOUT
– 0.958)/0.0307,
conform foii de catalog,
unde VOUT este tensiunea electrică măsurată la pinul de ieșire a
senzorului. De asemnea, valoarea obținută este compensată cu
temperatura folosind formula True
RH = (Sensor RH)/(1.0546 – 0.00216 T),
unde T este valoarea temperaturii în ºC.
Măsurarea
intensității luminii am realizat-o utilizând un fotorezistor
conectat într-un circuit divizor rezistiv. În figura 3.7 este
reprezentat acest circuit împreună cu formula de calculc a
tensiunii de ieșire din acest circuit. S-a avut în vedere că
fotorezistorul are valori cuprinse între 100Ohm în întuneric și
100kOhm pentru lumina zilei. Valorile au fost determinate prin
măsurarea rezistivitații la pinii fotorezistorului, în mod
experimental, expunând fotorezistorul la diferite valori ale
intensitații luminii.Astfel, am obținut valori ale tensiunii de
ieșire a circuitului divizor cu fotorezistor, cuprinse între
aproximativ 0,5V și 4,5V. Această tensiune este aplicată portului
analogic la pinul PA3 al microcontrolerului.
Fig.3.7 Circuitul
divizor rezistiv cu fotorezistor. Formula de calcul a tensiunii
electrice obținute la ieșire
Valoarea măsurată
la ieșirea acestui circuit, este afișată de microcontroler pe
LCD-ul de 24 x 2 carcatere, astfel, facându-se facilă determinarea
aproximativă a intensitații luminii în mediul de operare a
automatului, în procesul de programare a automatului de către
utilizator.
La portul analogic,
pinii PA4, PA5, PA6, PA7, așa cum am menționat și mai sus, se
aplică tensiuni electrice de la ieșirea eventualilor senzori care
pot fi montați în exterior, de către utilizator.
Tensiunile electrice
citite la acești pini sunt afișate de asemenea, urmând ca,
etalonarea și interpretarea valorilor achiziționate și afișate,
sa fie facute de către utilizator. Pentru testarea automatului
programabil propus, s-au montat potențiometre , prin intermediul
cărora s-au aplicat tensiuni variabile în plaja 0V - +5V, și s-au
facut programe pentru automat, care comandă una din ieșirile
automatului, în funcție de depașirea unui prag de tensiune impus.
Trebuie menționat
că fiecare ieșire aferentă senzorilor descriși mai sus, a fost
filtrată de eventualele elemente parazite, cu ajutorul unor
condensatoare cu valoarea de 100nF. Aceste condensatoare introduc
întârzieri în determinarea valorilor de la ieșirea senzorilor,
însa , așa cum am mai precizat și în rândurile de mai sus,
automatul programabil propus este proiectat să lucreze în medii
domestice, fără a avea pretenția caracteristicilor unui automat
programabil industrial, prin urmare, nu s-a dorit viteză și
precizie înaltă la citirea valorilor oferiți de acești senzori.
Circuitul integrat
PCF8563 este folosit pentru a construii un modul de ceas de timp real
(eng. Real Time Clock). Acest circuit integrat comunică cu
microcontrolerul prin intermediul interfeței seriale I2C, oferind
date ce conțin ora, minutul și secunda ceasului, precum și ziua,
luna și anul calendarului. Din punct de vedere al schemei
electronice de principiu, circuitul integrat necesită un cristal de
quartz cu frecvența de 32,768kHz, conectat la oscilatorul intern,
pentru funcționarea corectă. Așa cum se poate observa în figura
3.8, circuitul este alimentat cu tensiune electrică de 5V, prin
dioada D10, asigurându-se, în același timp și încărcarea
capacitorului cu valoarea de 1F, SC1, prin rezistorul R35.
Capacitorul SC1, asigură alimentarea circuitului și implicit
funcționarea acestuia și în lipsa tensiunii de alimentare +5V.
Dioda D10, blocheaza scurgerea tensiunii de alimentare către borna
de +5V, asigurând astfel alimentarea exclusiva a circuitului
integrat PCF8563. Condensatorul C8 filtrează local tensiunea de
alimentare, de eventualele elemente parazite induse în circuitul de
alimetare. Rezistorul R35 previne consumul de curent excesiv, în
cazul în care condensatorul SC1 este descărcat și prezintă o
rezistivitate scăzută la bornele sale.
Fig.3.8 Circuitul de
ceas de timp real (eng. Real Time Clock) construit cu PCF8563
Pe acelși bus de
date serial I2C, comunică cu microcontrolerul și circuitul integrat
MCP23017, folosit la construcția interfeței semnalelor de intrare
și ieșire. Acesta este, în fapt, un expandor al porturilor
digitale de intrare/ieșire, utilizat pentru a elibera porturile
digitale implementate în microcontroler. Circuitul are două porturi
de 8Octeți ce pot fi configurați ca intrari sau ieșiri digitale și
trei pini pentru stabilirea adresei hardware pentru comunicarea I2C ,
ceea ce face posibilă utilizarea a opt astfel de circuite, conectate
în paralel pe busul de date I2C, lărgind numarul de porturi a unui
microcontroler până la 16 porturi digitale de 8 Octeți. Pinii de
adresare A0, A1, A2, au fost conectați la masa circuitului ,
obținându-se astfel, o adresă diferită de cea a circuitului de
ceas. Condensatorul C10 are rolul de a filtra local tensiunea de
alimentare.
Portul GPA a
circuitului integrat expandor MCP23017 a fost configurat, cu ajutorul
regiștrilor interni, ca și port de ieșire. Acesta, prin
intermediul optocuploarelor OK9, OK10, OK11, OK12, OK13, OK14, OK15,
OK16, asigură comanda dispozitivelor de control conectate la ieșirea
automatului programabil. Tranzitorii T1, T2, T3, T4, T5, T6, T7 și
T8, elibereaza portul digital al circuitului MCP23017 de sarcina
electrică pe care o reprezintă ledurile interne optocuploarelor.
Automatul
programabil pentru sistemele domotice propus, prezintă la fiecare
ieșire, atât colectorul în gol, cât și emitorul în gol, al
tranzistorului intern optocuplorului. Această configurație face
flexibilă conectarea oricărui element de control extern, ca
exemplu, module echipate cu relee, tranzistoare mosfet, triace,
ș.a.m.d., și proiectarea ușoară a acestora. Un
astfel de modul poate fi schema prezentată
în figura 3.14, acesta este echipat cu opt relee electromagnetice ce
pot comuta curenți de pâna la 10 A și tensiuni de pâna la 250V.
Alte module de acest gen sunt prezentate în ultimul capitol al
cestei lucrări.
Portul GPB a
circuitului MCP23017 a fost configurat, cu ajutorul regiștrilor
interni aferenți, ca și port de intrare. Acesta preia, prin
intermediul optocuploarelor OK1, OK2, OK3, OK4, OK5, OK6, OK7 și
OK8, semnalele digitale aplicate intrărilor automatului programabil.
Se poate observa în schema electronică de principiu din figura 3.9,
că semnalele digitale de intrare sunt negativate de catre circuitul
de la ieșirea optocuploarelor, format din tranzistorii interni și
rezistorii aflați in colectorii acestora. Acest lucru este
”corectat” în programul din memoria microcontrolerului
(firmware-ului), făcându-se o negativare software la citirea
acestor porturi.
Fig.3.9 Circuitul
interfeței semnalelor digitale de intrare/ieșire
Circuitul
intefeței
de comunicare ethernet este realizat cu circuitul integrat ENC28J60,
sub forma unui modul atașat la placa de circuit imprimat a
automatului programabil.Modulul MOD-ENC28J60
este
construit de firma OLIMEX (www.olimex.com)
și are următoarele caracteristici, conform foii de catalog oferite
de această firmă:
- MOD-ENC28J60 este un mod ușor de a adăuga o interfață de comunicare ethernet la viteza de 10MB/s;
- Modulul este echipat cu două tipuri de conectori pentru o compatibilitate sporită cu majoritatea placilor de dezvoltare, cu microcontroler;
- Conectorul ethernet (LAN) are transformatorul încorporat;
- Conectorul ethernet este echipat cu două leduri pentru a indica starea comunicației;
- Folosește interfața de comunicare SPI pentru comunicarea cu microcontrolerul;
- placa de circuit imprimat este de tipul FR-4, cu grosimea de 1.5 mm ;
- Dimensiunile placii de circuit imprimat sunt 40x24 mm ;
Figura
3.10 prezintă acest modul și sunt indicate elementele principale
montate pe placa de circuit imprimat.
Fig.3.10 Modulul de
comunicare ethernet
Comform
specificațiilor, modulul trebuie alimentat cu o tensiune electrică
de 3,3V. Aceată tensiune a fost obținută prin stabilizarea
tensiunii de +5V, cu ajutorul circuitului integrat LM1117-3.3.
Schema electronică a circuitului de stabilizare a tensiuniide 3,3V
este reprezentată în figura 3.12. Condensatoarele C9 și C18
filtreaza tensiunea de intrare în circuit, în timp ce,
condensatoarele C16 și C17, tensiunea de ieșire, +3,3V. Circuitul
integrat LM1117-3.3[16] este fabricat de firma Texas Instruments,
oferă la ieșire o tensiune fixă stabilizată de 3,3V, la un curent
maxim de 800mA, având în vedere diferența de tensiune dintre
intrare și ieșire, care va fi disipată pe circuitul integrat.
Curentul maxim consumat de circuitul integrat ENC28J60, conform foii
de catalog, este de 160mA, la care s-a mai adăugat , cu aproximație,
o valoare de 100mA, apreciată pentru consumul celorlalte componente
din structura modului. Prin urmare, curentul susținut de
stabilizatorul tensiunii de 3,3V , 800mA, este suficient pentru
alimentarea acestui modul, fără riscul căderilor semnificative de
tensiune.
În ceea ce
privește conectarea semnalelor digitale, acestea sunt de nivele
diferite, 3,3V, în cazul interfeței de comunicare și 5V în cazul
microcontrolerului. Pentru a nu distruge, circuitul ENC28J60[17], în
timpul operării, aplicându-se nivele mai mari de 3,3V, s-a folosit
un circuit de translatare a nivelelor logice, conectat pe busul de
date SPI, între cele două elemente, conform cu recomandările
oferite de producătorul circuitului integrat, în foaia de catalog.
Schema de principiu, ce conține de asemenea conectorii de legătură
a modului de comunicare ethernet și translatoarul de nivel logic,
construit cu ajutorul circuitului integrat 74125N[18], este
reprezentată în figura 3.13 de mai jos.
Fig.3.12 Circuitul
de stabilizare a tensiunii de 3,3V
Fig.3.13 Interfața
de comunicare ethernet a automatului programabil pentru sisteme
domotice
Fig.3.14 Modul extern echipat cu
relee
3.2.Proiectarea plăcii de circuit imprimat
Placa de circuit
imprimat a fost proiectată, pentru a fi plantată cu componente de
tipul THT (eng. Through Hole Technology - componente elecronice ce
necesită găuri de fixare) și caracteristici care fac posibilă
manufacturarea în regim de amator. Atât schema electronică a
prototipului automatului programabil pentru sisteme domotice propus,
cât și placa de circuit imprimat, au fost proiectate utilizând
mediul de proiectare EAGLE CAD, un software specializat pentru
proiectarea în domeniul electronicii.
EAGLE, așa cum
este prezentat pe site-ul producătorului
http://www.cadsoftusa.com/eagle-pcb-design-software/about-eagle/,
este un instrument software puternic pentru proiectarea placilor de
circuit imprimat, conceput să îndeplinească cerințele mediului
profesional de proiectare, dar și mediului edicațional.
EAGLE a fost
conceput de firma CadSoft
Computer GmbH
în anul 1988 ca și o
aplicație pentru sistemul de operare Microsoft DOS. Astăzi,
Software-ul EAGLE CAD este oferit în versiuni compatibile cu cele
mai importante sisteme de operare, Windows, Linux și MacOS.
La aranjarea
componentelor pe placa de circuit imprimat, am urmărit obținerea
unei imagini estetice a plăcii, dar și aspectul ergonomic al
produsului final.
În fugura de mai jos
este reprezentată o captură de ecran, care surprinde imaginea
plăcii de circuit imprimat în mediul de proiectare EAGLE.
Fig.3.15 Captura de
ecran reprezentând placa de circuit imprimat în mediul de
proiectare EAGLE CAD
Din punct de
vedere electric, pentru traseul de masă,
am folosit un plan de masă (eng. Ground plane), urmărind reducerea
cât mai mare a zgomotului parazit indus în traseele circuitului.
De asemenea, se poate
observa, detailiat în figura 3.16 de mai jos, lipsa acestui plan de
masă pentru semnalele de ieșire și intrare, urmărindu-se izolarea
cât mai bună a semnalelor de intrare/ieșire față de restul
circuitului logic.
Fig.3.16 Placa de
circuit imprimat a automatului programabil pentru sisteme domotice
În imaginea
reprezentată în figura 3.16, se poate observa aranjamentul
componentelor pe placa de circuit imprimat, traseele de cupru ale
circuitului aflate pe partea cu lipiturile (culoarea albastră),
precum și planul de masă întins pe aproape întreaga suprafață a
placii, exceptând zona de izolație față de interfața semnalelor
de intrare/ieșire, precum și traseele de cupru aflate pe partea
unde sunt montate componentele electronice (culoarea roșie). Aceste
trasee nu au fost realizate practic, prin corodarea chimică a
suprafeței aflate pe partea cu componentele electronice, ci am
montat ștrapuri de legătură făcute din segmente de sârma de
cupru, deoarece fabricarea unei placi de circuit imprimat cu două
suprafețe, în regim de amator, este mult mai dificilă și necesită
un preț mai ridicat în achiziționarea materialelor de contrucție.
O observație
importantă o reprezintă traseul care alimenteaza circuitele cu
tensiunea de +5V.
Acesta este singurul
care are o grosime mult mai mare decât celelalte trasee, pentru a
asigura suportul de curent necesar circuitului.
Fotografiile de mai
jos reprezintă placa de circuit imprimat, după realizarea acesteia
prin corodare chimică și plantarea componentelor. Fig.3.17 și
Fig.3.18 prezintă partea cu componentele electronice și, respectiv,
partea cu lipiturile.
Fig.3.17
Placa de circuit imprimat, partea cu componentele
Fig.3.18
Placa de circuit imprimat, partea cu lipiturile
Capitolul 4
Dezvoltarea Firmware
4.1 Descrierea și reprezentarea grafică al fluxului de execuție a programului din memoria microcontrolerului (firmware-ului)
Așa cum am menționat și în capitolele anterioare,
automatul programabil pentru sisteme domotice, poate fi programat de
către utilizator, pentru a executa diferite sarcini, într-un sistem
automatizat. Spre exemplu automatul poate fi programat să activeze
pompele de irigație a spațiului verde din fața casei, numai la
anumite ore și numai daca umiditatea și temperatura măsurate cu
ajutorul senzorilor externi sau interni, sunt sub anumite valori
predefinite. Pentru aceasta, automatului i se transmite un program, o
serie de instrucțiuni și date , pe care acesta le meorează, le
interpretează, și acționează elementele de control. Așa deci,
este nevoie să se facă o distincție foarte clară între secvența
de instrucțiuni care formează programul aflat în memoria program a
microcontrolerului, firmware-ul și programul recepționat de acesta
de la consola de programare.
Pentru a urmării
cu ușurință fluxul de execuție a programului microcontrolerului
(firmware-ului) este necesară prezentarea modului de operare a
automatului programabil realizat și prezentat în această lucrare.
Așa cum am menționat în capitolul anterior, automatul este echipat
cu o interfață cu utilizatorul locală, formată din, ecranul LCD
alfanumeric și butoane de comandă.
Rolul acestor butoane sunt indicate
în figua 4.1 și pot fi descrise astfel:
- Configurare – Selectează și afișează meniul de ajustare a ceasului și a adresei IP a interfeței de comunicare Ethernet. De asemenea, acest buton, pe perioada activă a meniului de ajustare, are rolul de a selecta parametrul dorit pentru ajustare (ora, minutul, ziua, luna, anul, adresa IP);
- Valoare + – Buton de incrementare a valorii ajustate în meniul de ajustare. De asemenea, pe perioada activă a meniului principal, acest buton are și rolul de a activa un al doilea meiu principal, care afișează date achiziționate de la intrările analogice externe și a senzorului de lumină;
- Valoare - – Buton de decrementare a valorii ajustate în meniul de ajustare.
- Esc – Buton cu un rol asemănător tastei ”Escape” întâlnită pe tastaturile PC-urilor, asigură întoarcerea dintr-un meniu secundar în cel principal;
- Reset – Buton de RESET a microcontrolerului.
La
punerea în funcțiune a automatului programabil, după executarea
funcției de inițializare a perifericelor, este afișat pe ecranul
LCD meniul principal. Automatul afișează ceasul, calendarul,
temperatura și umiditatea relativă, măsurate cu ajutorul
senzorilor. De asemenea, automatul execută programul recepționat de
la interfața software de programare, comutând starea ieșirilor
digitale, în funcție de instrucțiunile recepționate de la consola
de programare.
Fig.4.2 Meniu principal afișat pe ecranul LCD al
automatului programabil
Acționând
butonul ”Configurare”, se apelează o funcție care face
posibilă ajustarea ceasului , calendarului, precum și a adresei IP
folosită de interfața de comunicare ethernet. Prin acționarea
repetată a acestui buton, pe perioada activă a acestui meniu, se
face posibilă selectarea datelor ce doresc a fi ajustate. Cursorul
afișat sub date (in figura 4.3, sub cifra zecilor orei afișată),
indică valoarea curentă ce poate fi ajustată. Incrementarea și
decrementarea datelor se face prin acționarea butoanleor ”Valoare
+” și respectiv, ”Valoare -”.
Fig.4.3 Meniu pentru ajustarea ceasului, calendarului și
adresei IP
Pe perioada activă a meniului principal (Fig.4.2),
acționarea butonului ”Valoare +” apelează un al treilea meniu,
în care vor fi afișate valorile obținute de la eventualii senzori
externi conectați la intrările analogice A1, A2, A3 și A4, precum
și valoarea obținută de la senzorul de lumină.
Valorile măsurate la intrările analogice reprezintă
valoarea tensiunii electrice aplicată acestor intrări, cuprinse
între 0 și +5V, așa cum se poate observa în figura 4.4 de mai
jos.
Valoarea obținută de la senzorul de măsurare a
intensității luminii, este afișată sub forma unui număr cuprins
între 0 și 1024, reprezentând, în fapt, valoarea minimă și
respectiv, maximă, la ieșirea convertotului analog-numeric. Aceste
valori afișate pe ecranul LCD al automatului programabil, vor ajuta
utilizatorul în conceperea programului automatului, cu ajutorul
interfaței software de programare.
Ca exemplu, se poate determina o valoare de prag la
care se comută una din ieșirile digitale ale automatului
programabil, citind pe ecranul LCD valoarea obținută de la senzorul
de lumină, expunându-l la intensități diferite ale luminii. Una
din valorile citite poate fi pragul de comutare a unei ieșiri
digitale ale automatului.
Fig.4.4 Meniul de afișare a valorilor obținute de la
intrările analogice externe și de la senzorul de măsurare a
intensității luminii
Fluxul
de execuție a programului din memoria automatului programabil
(firmware), începe cu o funcție de inițializare a circuitelor
periferice, urmată de funcția principală (main), a carei
instrucțiuni sunt executate în buclă închisă, întreruptă doar
de comanda reset aplicată microcontrolerului sau de lipsa tensiunii
de alimentare.
Funcția de inițializare a perifericelor, configurează
modulele de comunicare SPI și I2C implementate în structura
microcontrolerului, pentru comunicația cu interfața ethernet,
respectiv, comunicația cu circuitul de ceas (PCF8563) și interfața
intrare/ieșire (MCP23017).
Pentru a putea fi utilizată interfața SPI a
microcontrolerului ATMEGA32, aceasta trebuie activată prin
înscrierea în 1 logic a bitului 6 (SPE), al registrului SPCR.
Comunicația este de tipul stăpân-sclav (eng. Master-Slave), în
cazul acestui proiect, ATMEGA32 este master și perifericele sunt
slave. Pentru configurarea microcontrolerului ca și master pe acest
bus de comunicare, trebuie înscris în 1 logic bitul 4 (MSTR) al
registrului SPCR. De asemenea, interfața SPI folosește semnalul de
tact a microcontrolerului prelucrat de un circuit divizor, numit
prescaler, pentru a obține un semnal de tact utilizabil pentru
transmisia de date pe aceast bus. Semnalul de tact pentru SPI a fost
stabilit cu ajutorul prescalerului la jumătate din frecvența de
tact al microcontrolerului.
Comunicația serială de tip I2C a fost activată prin
înscrierea bitului 2 (TWEN) al registrului de control al acestei
interfețe (TWCR). Această interfață de comunicare este de tip
serial, datele fiind transmise sincron cu un semnal de tact. Acest
semnal de tact este obținut prin divizarea semanlului de tact
principal al microcontrolerului. Prelucrarea acestuia se face în
două blocuri distinte, un divizor de tip prescaler și un generator
de baudrate (bit rate).Prin configurarea acestor două module interne
de prelucrare a ratei de baud, am stabilit o rată de transmisie de
100kHz pentru aceast bus de comunicație.
De asemenea, în interiorul funcției de inițializare
am configurat și convertorul ananlog-numeric implementat în
interiorul structurii microcontrolerului, care a fost activat prin
înscrierea bitului 7 (ADEN) al registrului ADCSRA. Pentru a utiliza
convertorul cu tensiunea de referință aplicată la pinul AREF
(pin32) al microcontrolerului, am configurat registrul aferent
acestui bloc, ADMUX.
Pe durata fluxului de execuție a funcției principale
(main) reînprospătarea afișajului LCD alfanumeric și achiziția
analog-numerică, se fac la intervale de timp stabilite prin
intermediul unui bloc temporizator (eng. Timer), implementat
electronic în structura internă a microcontrolerului. Atmega32 este
echipat cu trei astfel de circuite temporizatoare, denumite în foaia
de catalog oferită de producător, Timer/Counter 0, Timer/Counter 1
și Timer/Counter 2. Timer-ul 0 și 2 au rezoluția de 8 Octeți ,
iar Timer-ul 1 are rezoluția de 16 Octeți.
Temporizatorul
Timer/Counter 0 folosit în acest proiect, este controlat de un
semnal de tact, preluat de la semnalul de tact al microcontrolerului
și prelucrat de un block divizor, prescaler. Registrul TCCR0 este
registrul de control al acestui temporizator care configurează și
valoarea prescaler-ului, cu ajutorul căruia am stabilit divizarea
semnalului de tact cu valoarea de 1024,
punând
biții CS00 și CS02 în 1 logic. Registrul OCR0 stabilește o
valoare de comparare cu valoarea incrementată de Timer 0, înscrisă
la fiecare tranziție a semnalului de tact al temporizatorului în
registrul TCNT0. De asemenea, prin înscrierea bitului OCIE0 al
registrului de control al întreruperilor TIMSK, în 1 logic, s-a
activat un fanion, OCF0 (eng. Output Comapre Flag), care indică
egalitatea dintre cele două valori comparate(eng. Output Compare
Match Interrupt). Astfel, am obținut un interval de timp, indicat de
acest fanion, cu valoarea de aproximativ 10ms. Pentru calculul acetui
inerval de timp am folosit formula recomandată de producător:
Pentru perioada de timp dorită de 10ms, valoarea
înscrisă în registrul de comparare este 155,
înlocuind valorile descrise mai sus în formulă,
obținem 16000000Hz/(1024)x(155+1) = 100,160Hz, prin urmare 1/100,160
= 0,009984, deci 9,984ms. Funcția apelată la intervalul acesta de
timp, o funcție care trateaza această întrerupere, resetează
numărătorul timerului și incrementează o variabilă de tip
întreg, denumită ”refresh”.
Variabilele
de tip întregi, ”menu”, ”refresh” și ”flags”, joacă un
rol important în desfășurarea execuției funcției principale
(main).
Valoarea
variabilei de tip întreg ”menu”, determină devierea fluxului de
execuție spre secvența de instrucțiuni pentru realizarea meniului
de ajustare a ceasului. Valoarea variabilei ”flags”, determină
executarea secvenței de instrucțiuni pentru meniul de afișare a
valorilor obținute de la senzorul de lumină și a intrărilor
analogice ale automatului programabil. Valoarea variabilei ”refresh”
este incrementată în interiorul funcției ce tratează întreruperea
generată de blocul temporizator, iar, astfel prin compararea valorii
acesteia cu o valoarea stabilită în program am obținut intervale
de timp, la care se pot executa diferite instrucțiuni, așa cum se
poate observa în figura 4.5 de mai jos, care prezintă fluxul de
execuție a programului principal (main).
În reprezentarea fluxului de execuție a programului
principal (main) sunt distinct afișate două blocuri importante,
”Ajustare ceas, calendar sau IP.” (marcat cu culoarea verde) și
”Funcție de interpretare și execuție a programului recepționat
de la interfața software” (marcat cu culoarea portocaliu).
Secvența de instrucțiuni ”Funcție de interpretare
și execuție a programului recepționat de la interfața software”
este partea cea mai importantă din programul microcontrolerului
(firmware-ului), acesta fiind algoritmul de interpretare a
instrucțiunilor primite de la consola de programare a automatului
programabil. Acesta este în detaliu descirs în subcapitolul
următor, facându-se aici precizarea că, programul este recepționat
de către automatul programabil, de la interfața software de
programare sub forma unui șir de caractere, care trebuie să conțină
la începutul acestuia secvența de caractere ”cmd” sau ”conf”,
în funcție de care se execută o comandă sau se execută programul
configurat cu ajutorul interfeței software de programare. Dacă
prima secvență de caractere din șir este ”cmd”, atunci se va
evalua cifra scrisă în șir ce urmează dupa secvența ”cmd” și
se va comuta starea ieșirii digitale corespunzătoare cifrei
respective, de exemplu daca secvența de caractere recepționată
este ”cmd0”, se va comuta starea ieșirii digitale 0, astfel
făcându-se posibilă comutarea ieșirilor digitale de la distanță.
Dacă, prima secvență de caractere este ”conf”, atunci se va
urmării șirul de caractere urmat, evaluându-se astfel execuția
programul recepționat de la interfața software de programare.
Întregul program recepționat de automat de la consola de programare
(computer personal) este memorat în memoria de tip EEPROM a
microcontrolerului, astfel, facându-se posibilă reluarea procesului
automatizat la punerea sub tensiune a automatului programabil, după
o perioadă în care tensiunea de alimentare a lipsit (exemplu poate
fi o pană de curent). Din această cauză, funcția de inițializare
a perifericelor, descrisă mai sus, încarcă, de asemenea, programul
recepționat de la interfața software de programare și memorat în
EEPROM, în memoria de tip RAM a microcontrolerului, înainte de
pornirea secvenței de interpretare și execuție a acestui program.
Secvența de instrucțiuni pentru ajustarea ceasului,
calendarului și adresei IP, urmărește, în desfășurarea fluxului
de execuție, starea butoanelor ”Valoare +” și ”Valoare -”
pentru incrementarea și, respectiv, decrementarea valorilor
selectate. Selectarea acestor valori, precum și deplasarea
cursorului pe ecranul LCD, pentru a indica utilizatorului data în
curs de ajustare, se face prin urmărirea stării butonului
”configurare”. De asemenea, în interiorul acestei secvențe,
este urmărită și starea variabilei ”menu”, a cărei valoare va
determina întroarcerea la meniul principal. Pentru selectarea
succesivă a datelor ce vor fi ajustate s-a declarat o variabilă de
tip întreg, ”submenu”. Rolul acestei variabile și cursul
funcțional al acestui bloc de instrucțiuni poate fi urmărit în
figura 4.6, care prezintă fluxul de execuție a acestei secvențe de
instrucțiuni, ”Ajustare ceas, calendar sau IP.”.
Fig.4.5
Fluxul de execuție a funcției principale ”main”
Fig.4.6 Fluxul de execuție a funcției pentru ajustarea
ceasului, calendarului și adresei IP
4.2.Descrierea algoritmului de interpretare a programului recepționat de la interfața software de programare
În subcapitolul
anterior, am menționat că programul sau comenzile transmise de la
interfața software de programare, sunt sub forma unui șir de
caractere. Înainte de a descrie șirul de caractere care reprezintă
programul realizat și transmis cu ajutorul interfeței software de
programare, de către utilizator, voi descrie, în rândurile
următoare, șirul de caractere care reprezintă comanda comutării
uneia din ieșirile digitale. În subcapitolul anterior spuneam că
șirul recepționat de la consola de programare sau comandă, trebuie
sa conțină secvența de caractere ”cmd” pentru ca
microcontrolerul să execute comutarea stării logice a uneia dintre
cele opt ieșiri digitale.
Așa cum se poate
observa și în figura 4.5, din subcapitolul anterior, la
recepționarea unui șir de caractere de către interfața ethernet
de comunicare, se caută, printre primele caractere, secvența ”cmd”,
iar dacă, aceasta este găsită, se va citi caracterul ce urmează
imediat dupa secvența ”cmd”, care trebuie să reprezinte o cifră
cuprinsă în intervalul 0 – 7 și se comută ieșirea digitală
indicată de această cifră. Acestă secvență de instrucțiuni
este reprezentată în figura 4.5 din subcapitolul anterior, în
prezentarea grafică a fluxului de execuție a funcției principale
(main).
Spre deosebire de
cazul recepționării și interpretării unei comenzi de comutare a
unei ieșiri digitale, la recepționarea unui program de la interfața
software de programare, prima secvență de caractere din șirul
recepționat trebuie sa fie ”conf”, iar daca, aceasta este
găsită, se va memora în memoria EEPROM întreg șirul ce urmează
după secvența ”conf”.
În ceea ce privește
interpretarea programului primit de către automatul programabil, am
stabilit câteva reguli în formarea șirului de carcatere, ceea ce
face ca algoritmul de citire și interpretare a datelor din acest șir
să fie rapid și ușor de urmărit. Automatul poate executa operații
logice de tipul ”și” și ”sau” între diferite intrări ale
automatului, valori ale temperaturii, umidității, intensității
luminii, a ceasului. De asemena, poate face operația de comparare a
volorilor obținute de la senzori, cu valori înscrise în program de
către utilizator. Daca operația logică ”și” se poate executa
între toate intrările automatului, deci poate fi folosită de mai
multe ori pentru a obține un șir de condiții înseriate, operația
logică ”sau” nu poate fi folosită mai mult de patru ori pentru
o ieșire digitală. Deci, prin urmare, nu pot fi realizate mai mult
de patru conexiuni de tip paralel a condițiilor de comutare a uneia
din ieșirile digitale ale automatului. În figura de mai jos, este
reprezentat printr-o diagramă scară, un exemplu de conexiune a
intrărilor digitale, folosind operațiile logice ”și” și
”sau”, unde s-a folosit numărul maxim de operații de tip ”sau”.
Fig.4.7 Reprezentarea în
diagrama scară a unui program pentru automatul porgramabil, în care
s-a folosit numărul maxim de operații ”sau”.
Așa cum se poate
observa în figura 4.7 starea ieșirii digitale 0 va fi comutată,
conform acestui program, doar când intrarea digitală 0 și intrarea
digitală 1 sunt în logic 1, sau numai daca intrarea digitală 2 și
intrarea digitală 3 sunt în logic 1 ș.a.m.d..
Pentru formarea
șirului de caractere transmis de către interfața de programare
software, am definit un caracter pentru fiecare tip de intrare,
senzor și ceas, după cum urmează :
- Intrările digitale vor fi reprezentate în șirul de caractere de ”d”;
- Intrarile analogice vor fi reprezentate în șirul de caractere de ”a”;
- Senzorul de temperatură va fi reprezentat în șirul de caractere de ”t”;
- Senzorul de umiditate va fi reprezentat în șirul de caractere de ”h”;
- Senzorul de lumină va fi reprezentat în șirul de caractere de ”l”;
- Ceasul va fi reprezentat în șirul de caractere de ”c”;
- Pentru determinarea operației logice ”sau”, am folosit caracterul ”v”;
- Caracterul ”e” delimitează condițiile pentru ieșiri digitale diferite.
Fiecare dintre aceste
caractere descrise mai sus sunt urmate în acest șir, de caractere
cifre. Acestea reprezintă numărul intrării sau ieșirii digitale
respective ori numere care trebuie comparate cu valorile citite de la
intrările analogice sau de la senzori. Astfel, secvențele de
caractere ”r0”, ”r1”, ”r2”, ”r3”, ”r4”, ”r5”,
”r6”, ”r7”, reprezintă ieșirea digitală 0,1,2,3,4,5,6 sau
7 ce urmează a fi comutată, în funcție de condițiile impuse în
program. Intrările digitale 0,1,2,3,4,5,6 și 7 sunt reprezentate în
șir, cu ajutorul secvențelor de carcatere ”d0”, ”d1”, ”d2”,
”d3”, ”d4”, ”d5”, ”d6” și ”d7”.
În ceea ce privesc
intrările analogice, se va considera condiția îndeplinită pentru
comutarea unei ieșiri digitale, conform programului, numai dacă
valoarea citită de la intrarea analogică se află cuprinsă într-un
interval impus de utilizator în cadrul programului. Astfel, dacă se
stabilește un interval de valori cuprins între 1V și 2V pentru a
se comuta ieșirea digitală 0, la citirea valorii obținute de la
intrarea analogică 1, condiția va fi îndeplinită numai dacă
valoarea citită va fi mai mare decât 1V sau mai mică decât 2V.
Acest lucru este reprezentat în șirul de caractere, respectându-se
convențiile descrise mai sus, prin secvența ”confr0a11-2ve”,
unde, ”conf” reprezintă secvența de caractere care indică
recepționarea unui program și nu a unei comenzi, ”r0”
reprezintă ieșirea digitală 0, deci condițiile ce urmează vor
comuta această ieșire dacă acestea sunt îndeplinite, ”a1”
reprezintă intrarea analogică 1 care trebuie citită, cifra ”1”,
imediat următoare, reprezintă valoarea minimă din interval, așa
cum am descris mai sus, ”-” este un simbol reprezentând un
interval de valori, cifra ”2” reprezintă valoarea maximă din
acest interval. Caracterul ”v” reprezintă operația logică
”sau” , executată între condițiile descrise pâna la apariția
acestuia și cele care urmează, în cazul de fața operația ”sau”
nu se va executa, pentru că ”v” nu este urmat de alte condiții.
Caracterul ”e” indică sfârșitul șirului de condiții pentru
acestă ieșire digitală.
Regula folosită
pentru intrarile analogice, este aplicată și senzorilor de
temperatură, umiditate și lumină. Astfel, valorie obținute de la
acești senzori, trebuie să fie cuprinse în intervale de valori
impuse în cadrul programului. Urmărindu-se explicația de mai sus,
referitoare la reprezentarea în șirul de caractere a condițiilor
impuse pentru intrările analogice, pentru senzorul de temperatură,
secvența de caractere este reprezentată ca ”t20-23”, deci,
pentru acest exemplu, valoarea citită de la sezor va trebui să fie
cuprinsă între 20°
C, și
respectiv 23°
C, pentru a se considera condiția îndeplinită, pentru senzorul de
umiditate, șirul de caractere va fi ”h30-40”, deci, pentru acest
exemplu, valoarea citită de la senzorul de umiditate va trebui sa
fie cuprinsă între 30% și 40% pentru a se considera condiția
îndeplinită, iar pentru senzorul de lumină, secvența de caractere
este ”l300-500”, deci, valoarea obținută de la senzorul de
măsurare a intensității luminii, va trebui să fie cuprinsă în
intervalul de valori 300 și , respectiv, 500.
Utilizatorul poate programa un
interval de timp, în care una sau mai multe ieșiri digitale sunt
comutate. Spre exemplu, ieșirea digitală 0 comută la ora 12:00 și
revine la starea inițială la ora 12:05. Acest exemplu este
reprezentat în șirul de caractere, prin secvența ”c12-12-00-05”.
După cum se observă, repectînd convențiile descrise pâna acum,
”c” reprezintă ceasul automatului programabil și este urmat de
ora la care se va comuta ieșirea, ora la care ieșirea revine la
starea inițială, minutul la care se comută ieșirea și, respectiv
, minutul la care se revine la starea inițială.
Folosindu-se
convențiile descrise mai sus, programul reprezentat în figura 4.7,
va fi transmis automatului programabil sub forma unui șir, astfel:
”confr0d0d1v0d2d3v1d4d5v2d6d7v3e”. Șirul va fi ”citit” de
către firmware-ul înscris în memoria program a microcontrolerului,
caracter cu caracter. După gasirea secvenței de caractere ”conf
”, aceasta este eliminată, șirul devenind :
”r0d0d1v0d2d3v1d4d5v2d6d7v3e”. Acest șir de caractere, obținut
dupa eliminarea secvenței ”conf” este memorat în memoria de tip
EEPROM a microcontrolerului.
Conform figurii
4.7, stările logice ale intrarilor digitale 0 ,”d0” și
respectiv 1 ”d1” sunt condiții înseriate, deci între acestea
se execută operația logică ”și”. La fel pentru intrarile
digitale 2 și 3, 4 și 5, 6 și 7. În secvența de caractere care
reprezintă programul recepționat de la interfața software de
programare, operația logică ”și” este executată între toate
condițiile adiacente descrise în șir, pîna la apariția primului
caracter ”v”, caracter care indică executarea operației logice
”sau”, între condițiile aflate în conexiune paralelă. Cifra
ce urmează caracterul ”v” este numărul operațiilor ”sau”
executate în program și nu trebuie să fie mai mare de 4. Prin
urmare, șirul descris în exemplul de mai sus,
”r0d0d1v0d2d3v1d4d5v2d6d7v3e”, descrie un program care va comuta
ieșirea digitală 0 (”r0”), numai dacă intrarea digitală 0
(”d0”) și intrarea
digitală 1 (”d1”) sunt în 1 logic, sau
daca
intrarea digitală 2 (”d2”) și
intrarea digitală 3 (”d3”) sunt în 1 logic, sau
daca
intrarea digitală 4 (”d4”) și
intrarea digitală 5 (”d5”) sunt în 1 logic, sau
daca
intrarea digitală 6 (”d6”) și
intrarea digitală 7 (”d7”) sunt în 1 logic.
Din punctul de vedere al firmware-ului, algoritmul citește șirul
de caractere în mod secvenșial și fiecare apariție a unui
caracter care reprezintă o condiție, ”d”, ”a”, ”t”,
”l”, ”h”, ”c”, pâna la prima întâlnire a caracterului
”v”, este numărată. De asemenea, după testare, fiecare
condiție adevărată este numărată. Daca suma condițiilor
întâlnite la citirea secvențială a șirului și suma condițiilor
adevărate sunt egale, atunci, într-o variabilă de tip tablou cu o
singură dimensiune, se înscrie valoarea 1 în primul element al
tabloului. Acest ciclu se repetă pentru următorul șir de caractere
aflat după ultimul ”v” întâlnit în secvență, de la stânga
la dreapta și continuă pâna la următoarea întâlnire a
caracterului ”v”, daca și următorul șir de condiții între
care se va executa operația logică ”și” , îndeplinește
condiția de comutare a ieșirii dorite, se va înscrie valoare 1 în
al doilea element al tabloului. Acest proces se reia, pâna la
întâlnirea caracterului ”e”. Apoi, se execută operația logică
”sau”, între valorile tabloului. Prin urmare, dacă oricare din
elementele tabloului este egal cu 1, atunci ieșirea digitală
specificată la începutul șirului este comutată.
Luându-se ca exemplu, programul descris mai sus și reprezentat de
schema din figura 4.7, se poate urmării secvența de execuție a
algoritmului, presupunând intrările digitale 2 și 3, ca fiind în
1 logic. Șirul recepționat de la interfața de programare, devine
după eliminarea secvenței de caractere ”conf”,
”r0d0d1v0d2d3v1d4d5v2d6d7v3e”. La citirea primelor caractere
”r0”, se reține faptul că toate condițiile adevărate,
reprezentate în șirul ce urmează, vor comuta ieșirea digitală 0.
Următorul caracter, ”d”, este citit și interpretat ca fiind o
intrare digitală, deci o condiție ce trebuie îndeplinită, prin
urmare se incrementează variabila în care se reține numărul
condițiilor între care există relația logică ”și” întâlnite
la citirea șirului de la stînga la dreapta. Citirea acestei
intrări, ”d0” va returna valoarea logică 0 , deci nu este
îndeplinită condiția ca această intrare sa fie în 1 logic pentru
a comuta ieșirea digitală 0, prin urmare , nu se va incrementa
variabila folosită pentru a reține numărul condițiilor adevărate.
Următoarea secvență din șirul de caractere este ”d1” și
reprezintă condiția ca intrarea digitală 1 să fie în 1 logic
pentru a se comuta ieșirea digitală 0. Citirea acestei intrări
digitale va returna, de asemenea, 0 logic, conform inițierii acestui
exemplu, prin urmare variabila în care se reține numărul
condițiilor adevărate nu este incrementată. Următoarea secvența
de caractere, ”v0”, determină compararea valorilor obținute
prin incrementarea variabilelor declarate pentru reținerea numărului
de condiții impuse de program și numărul condițiilor adevărate.
S-au numărat două condiții întâlnite în program și niciuna
dintre aceste condiții nu sunt adevărate, prin urmare, se va scrie
în elementul 1 valoarea 0 (cifra care urmează după caracterul ”v”
indică adresa din interiorul tabloului cu o singură dimensiune la
care se va înscrie valoarea dorită).
Pentru intrările digitale 2 și 3, algoritmul descris mai sus, se
repetă, cu deosebirea că, numărul condițiilor impuse de program
și numărul condițiilor adevărate sunt egale, deci, în elementul
2 al tabloului cu o singură dimeniune se va înscrie valoarea 1.
Ciclul se repetă pentru intrările digitale 4 și 5, apoi, 6 și 7 ,
înscriindu-se în valorile elementelor 3 și 4 ale tabloului valori
egale cu 0.
La apariția caracterului ”e”, în procesul de citire a șirului,
prin intermediu unei funcții de tipul IF...ELSE, se execută o
operație logică ”sau” între valorile înscrise în elementele
tabloului cu o singură dimensiune, și daca una din valorile acestor
elemente este egală cu 1, atunci se comută ieșirea digitală
dorită. În exemplul de mai sus , ieșirea digitală 0 va fi
comutată, penru că unul din elementele tabloului are o valoare
egală cu 1.
Caracterele urmate după ”e” reprezintă condițiile care
trebuiesc îndeplinite pentru a comuta o altă ieșire digitală,
însă algoritmul se desfășoară în mod similar și pentru
celelalte ieșiri digitale. Exemplu de program recepționat de la
interfața software de programare, în care s-au folosit mai multe
ieșiri digitale, precum și intrări analogice, senzorul de
temperatură și ceasul sistemului, este reprezentat în șirul de
caractere următor:
”confr0d0d1v0d2d3v1er1d4d5v0d6d7v1er2a1214-401-v1er3c07-08-30-00-v0t20-24-v1e”.
Pentru a face mai clară reprezentarea fluxului de execuție a
acestui algoritm, sunt prezentate în rândurile de mai jos,
secvențele de instrucțiuni care preiau și memorează șirul de
caractere de la interfața ethernet de comunicare sau, în cazul unei
comenzi, prelucrează acest șir în vederea executării comenzii
primite.
Secvența de instrucțiuni care preia șirul de caractere
recepționat de la interfața de programare, elimină caracterele
nedorite în algoritmul de interpretare a programului și-l înscrie
în memoria EEPROM a microcontrolerului, este :
strcpy(strRX,(char*)&buf[UDP_DATA_P]);//
copie în ”strRX” mesajul string primit pe UDP
if(strncmp("conf",strRX,4)==0)//
daca primul șir
din
mesaj este 'conf', atunci copiaza stringul in eeprom si in functia Eventcheck()
incepe decodificarea
{
strcpy(strRX,(char*)&strRX[4]);//'conf'
este eliminat
eeprom_update_block(&strRX,(void*)0,200);//șirul
obținut este înscris în memoria EEPROM
}
De asemenea, instrucțiunile executate la recepționarea unei
comenzi, de la unul din dispozitivele aflate în rețeaua ethernet de
comunicare, se pot urmării în rândurile ce urmează.
if(strncmp("cmd",strRX,3)==0)//
daca primul șir din mesaj este 'cmd', atunci...
{
strcpy(strRX,(char*)&strRX[3]);//'cmd'
este eliminat
switch(strRX[0]){//caracterul
rămas după eliminarea lui 'cmd'
case
'0'
:
RelayToggle(0);//comută
ieșirea digitală 0
break;
case
'1'
:
RelayToggle(1);//comută
ieșirea digitală 1
break;
case
'2'
:
RelayToggle(2);//comută
ieșirea digitală 2
break;
case
'3'
:
RelayToggle(3);//comută
ieșirea digitală 3
break;
case
'4'
:
RelayToggle(4);//comută
ieșirea digitală 4
break;
case
'5'
:
RelayToggle(5);//comută
ieșirea digitală 5
break;
case
'6'
:
RelayToggle(6);//comută
ieșirea digitală 6
break;
case
'7'
:
RelayToggle(7);//comută
ieșirea digitală 7
break;
}
for(i=0;i<200;i++)
{
strRX[i]
=
0;
//
șterge șirul de caractere
}
i=0;
eeprom_read_block((char*)strRX,(void*)0,200);//
reîncarcă programul din EEPROM pentru a fi evaluat și
executat
Funcția EventCheck() din
structura firmware-ului, care reprezintă algoritmul de interpretare
a programului recepționat de la interfața software de programare,
verifică starea intrărilor digitale și citește fiecare caracter
din șir, într-o buclă FOR, pâna la sfârșitul șirului.
Figura
4.8 prezintă fluxul de execuție a algoritmului de interpretare a
programului recepționat de la interfața software de programare.
Variabilele, ”eventsRX” și ”eventsTRUE”, rețin numarul
condițiilor întâlnite în program și respectiv, numărul
condițiilor adevărate obținute la testarea intrărilor, în cursul
desfășurării acestui algoritm. Variabila de tip tablou cu o
singură dimensiune este ”validare[4]”, ”relay” este
variabila în care se reține numărul ieșirii digitale care se
dorește a fi comutată, iar, ”strRX” este o variabilă care
conține șirul de caractere recepționat de la interfața de
programare.
Figura
4.9 reprezintă diagrama de secvență a firmware-ului, în care se
poate observa folosirea timer-ului 0 a microcontrolerului pentru
afișarea informațiilor dorite pe ecranul LCD. Așa cum este
reprezentat în figura 4.9, desfășurarea programului este
întreruptă de către timer o data la aproximativ 50ms sau 30 ms, în
funcție de meniul selectat.
Diagrama reprezentată în
figura 4.9 încheie acest capitol încercându-se reprezentarea cât
mai clară a desfășurării secvențelor care formează structura
programului microcontrolerului.
Fig.4.8
Fluxul de execuție a algoritmului de interpretare a programului
recepționat de la interfața software de programare
Capitolul 5
Dezvoltarea Software
5.1.Descrierea modului de operare a interfeței software de programare a automatului pentru sisteme domotice
Interfața
de programare este o aplicație ce poate rula, atât în sistemul de
operare Windows, cât și în Linux, fiind construită utilizând
limbajul de programare Java, în mediu de programare NetBeans.
Netbeans oferă posibilitatea construirii interfeței cu
utilizatorul, în mod grafic, eliminându-se astfel, necesitatea
scrierii liniilor de cod pentru fiecare element vizual din structura
interfeței. Programul propriu zis tratează evenimentele generate de
elementele interfeței și rulează instrucțiunile necesare formării
șirului de caractere ce va reprezenta programul automatului
programabil, precum și transmiterea acestuia către rețea.
Așa cum am precizat în capitolul 2,
protocolul de comunicare între interfața de programare și unul sau
mai multe automate programabile conectate într-o rețea de tip LAN
(eng. Local Area Network) este UDP . Acest protocol nu asigură
integritatea datelor transmise sau nu verifică dacă recepționarea
acestora s-a făcut cu succes. Sarcina aceasta, însă, este
îndeplinită cu succes de această interfață.
Integritatea datelor și confirmarea
recepționării acestora de către destinatar este asigurată de
interfața de programare cu ajutorul firmware-ului din memoria
microcontrolerului. După transmiterea șirului de caractere de către
interfața de programare, aceasta așteaptă de la automatul
programabil receptor, șirul de caractere primit. Procesul de
verificare a datelor constă în compararea celor două șiruri,
inegalitatea acestora generând un mesaj de eroare.
Interfața de programare nu este un mediu de
programare a automatelor industriale și nu necesită cunoștințe de
programare a acestora. Utilizarea automatului programabil în sisteme
domotice trebuie să fie facilă, iar interfața de programare să
fie intuitivă. Din această cauză, interfața nu folosește
niciunul din limbajele specifice programării automatelor
industriale. Crearea unui program pentru automatul programabil cu
ajutorul acestei interfețe software, constă în selectarea și
editarea condițiilor ce trebuiesc îndeplinite pentru a acționa un
dispozitiv conectat la una din ieșirile digitale ale automatului
programabil. Modul de operare a acestei interfețe software de
programare este prezentată, în detaliu, în rândurile următoare.
Pentru a asigura utilizarea ușoară a
interfeței, am stabilit folosirea următorilor termeni pentru
definirea intrărilor automatului și a operațiilor logice ”și”,
”sau”:
- Dispozitiv – reprezintă ansamblul comandat de automatul programabil prin intermediul ieșirilor digitale. Exemplu poate fi o pompă electromecanică aflată într-un sistem de irigare și care poate fi comandată de automatul programabil cu ajutorul unui releu electromagnetic;
- Condiție – reprezintă starea intrărilor automatului. O condiție se consideră îndeplinită pentru a comuta un dispozitiv conectat la ieșire, atunci când se află în 1 logic, pentru intrările digitale sau în cazul intrărilor analogice, a senzorilor și a ceasului, atunci când valoarea citită la ieșirea acestora se află cuprinsă în intervalul de valori stabilit de utilizator;
- Eveniment – reprezintă suma condițiilor îndeplinite între care se execută operația logică ”și”, pentru a comuta dispozitivul comandat;
- Variantă – reprezintă operația logică ”sau” executată între două intrări ale automatului sau între maximum 4 evenimente editate în program.
Crearea unui program pentru automat, presupune
respectarea unui singur principiu: dispozitivul selectat va fi
actionat numai daca toate conditiile selectate in panoul de editare a
evenimentelor sunt indeplinite sau daca oricare din cele 4 variante
de evenimente editate sunt indeplinite.
Considerând
pompa electromecanică, din exemplul de mai sus, ca fiind un
dispozitiv conectat la una din ieșirile automatului programabil,
utilizatorul poate edita un proces de comandă a sistemului de
irigare, în care acesta va fi acționat numai într-un anumit
interval de timp al zilei și
numai dacă temepratura și umiditatea măsurată în aer vor avea
valori cuprinse într-un interval prestabilit sau
dacă este acționat un întrerupător conectat la una din intrările
automatului. În acest exemplu, evenimentul
care va acționa dispozitivul conectat la una din ieșirile
automatului, este produs de momentul încadrării valorilor citite de
la ceasul automatului, în intervalul de timp stabilit de utilizator
și
numai dacă temperatura și umiditatea măsurată se află, de
asemenea, în intervalul prestabilit. Dispozitivul din acest exemplu,
pompa electromecanică, poate fi pornită în orice moment cu
ajutorul întrerupătorului conectat la una din intrările
automatului, realizându-se astfel operația logică sau
între seria de condiții descrise mai sus și starea
întrerupătorului, care reprezintă o altă variantă de eveniment.
Interfața de programare a automatului pentru
sisteme domotice este prezentată, printr-o captură de ecran, în
figura de mai jos.
Fig.5.1 Interfața
software de programare a automatului pentru sisteme domotice
Pentru a face operarea
facilă, această interfață software de operare este constituită
din patru blocuri distincte, după cum urmează:
- Bara de meniuri, ”File” și ”Help”, care conține comenzi de operare a fișierelor, facând posibilă salvarea programelor editate cu ajutorul acestei interfețe software și respectiv, instrucțiuni de operare;
- Interfața de editare a datelor de comunicare, care conține câmpuri text pentru configurarea adresei IP a automatului și butoane pentru transmiterea programului sau a comenzilor către automatul programabil;
- Interfața de editare a evenimentelor , cu ajutorul căreia utilizatorul poate configura logica programului;
- Afișarea evenimentelor sau afișarea condițiilor de comutare a dispozitivului dorit.
Figura 5.2 prezintă
meniul ”File” desfășurat și comenzile conținute. Cele cinci
opțiuni ale acestui meniu îndeplinesc funcții distincte, după cum
urmează:
- Opțiunea ”New” aduce interfața de programare la starea inițială, așa cum este ea prezentată în fugura 5.1, reinițializând toate câmpurile text, inclusiv lista de evenimente.
- Opțiunea ”Open” deschide o fereastră nouă, așa cum este prezentat în figura 5.4, cu ajutorul căreia, utilizatorul poate încărca un program salvat, specificând locația acestui program în mediul de operare;
- Opțiunea ”Save” rescrie în memoria calculatorului un program editat și salvat în trecut, sub același nume și în aceași locație;
- Opțiunea ”Save As...” deschide o fereastră nouă, similară cu cea prezentată în figura 5.4, însă cu ajutorul acesteia, utilizatorul poate salva pe una din mediile de stocare a calculatorului, un program editat, specificând locația de stocare dorită și numele fișierului memorat.
Figura
5.3 prezintă opțiunile disponibile în meniul ”Help”, iar
comenzile executate la acționarea acestor opțiuni sunt prezentate
în figurile 5.5 și 5.6. Opținea ”Instrucțiuni
editare eveniment” afișează
o descriere succintă a modului de creare a programelor pentru
automatul programabil, iar meniul ”About”
afișează într-o nouă fereastră informații despre acest proiect.
Fig.5.2 Meniul
”File”
Fig.5.3 Meniul ”Help”
Fig.5.4 Fereastra de selectare a
programului din mediul de stocare a calculatorului
Fig.5.5 Afișarea instrucțiunilor
de editare a unui program pentru automatul programabil
Configurarea datelor de
comunicare se face prin editarea câmpurilor text, indicate de
etichetele ”Adresa IP Controller” și ”Nume Controller”. La
inițializarea aplicației, aceste câmpuri conțin textele ”Name”
și ”IP”, așa cum este prezentat în figura 5.1 și nu sunt
editabile. Aceste câmpuri pot fi modificate de către utilizator,
doar prin acționarea mouse-ului. Trecerea cursorului deasupra
câmpului care se dorește a fi configurat și acționarea butonului
din stânga a mouse-ului, face posibilă editarea acestor casete.
La acționarea butonului indicat
de eticheta ”Trimte Configurația”, interfața construiește
șirul de caracatere care reprezintă programul automatului și-l
trimite la automatul cu adresa IP editată în câmpul indicat de
eticheta ”Adresa IP Controller”.
La acționarea butonului indicat
de eticheta ”Acționare Manuală” interfața trimite către
automatul programabil cu adresa IP editată, comanda de acționare a
ieșirii digitale selectată din lista indicată de eticheta
”Selectați Dispozitiv”.
Listele indicate de etichetele
”Selectați Dispozitiv” și ”Selectați Varianta”, împreună
cu blocul de comenzi indicat de eticheta ”Editare Eveniment”
formează inerfața de editare a programului pentru automat. Cu
ajutorul listei ”Selectați Dispozitiv” utilizatorul alege una
din cele opt ieșiri digitale, care se dorește a fi acționată de
logica programului sau de acționarea butonului ”Acționare
Manuală”. Lista ”Selectați Varianta” oferă posibilitatea
introducerii în logica programului a patru operații de tip ”sau”
distincte, între două intrari ale automatului sau între mai multe
evenimente. Numele ieșirilor automatului din lista menționată mai
sus și a intrărilor sale, indicate de către etichete, pot fi
modificate și memorate o dată cu salvarea programului.
Blocul etichetat ”Listă
Evenimente”, va afișa logica programului editat cu ajutorul
interfeței descrise mai sus.
Modul de operare a acestei
interfețe este prezentat detaliat în rândurile următoare,
utilizându-se un exemplu care presupune folosirea automatului
programabil într-un sistem automat de irigare a grădinii. Sistemul
de irigare are în componența sa un bazin pentru stocarea apei, o
pompă de umplere a bazinului, un senzor digital care va indica
umplerea bazinului și o pompă de irigare sau golire a bazinului.
Pentru controlul acestui sistem automat se vor folosi și datele
obținute de la senzorii de temperatură și umiditate încorporați
în structura internă a automatului programabil pentru sistemele
domotice. De asemenea, ambele pompe vor putea fi acționate în orice
moment, cu ajutorul a două întrerupătoare conectate la intrările
digitale ale automatului. În acest exemplu, se dorește irigarea
automată a grădinii, numai în intervalul de timp cuprins între
orele 7:00 și 7:30, numai dacă temperatura măsurată în mediul
ambiant este cuprinsă în intervalul 20 și 25 grade Celsius și
numai dacă umiditatea măsurată in mediul ambiant este cuprinsă în
intervalul 30 și 40 %.
În figura 5.7 este reprezentată
logica de funcționare a sistemului automat de irigare utilizându-se
diagrama scară și considerând sensorul de nivel montat în
interiorul bazinului ca fiind normal-deschis. Pompele electromecanice
sunt acționate de către ieșirile digitale prin intermediul a două
relee electromagnetice.
În ceea ce privește conexiunile
electrice, se stabilesc următoarele:
- Senzorul de nivel al apei este conectat la intrarea digitală 0;
- Întrerupătorul de acționare a pompei de irigare este conectat la intrarea digitală 1;
- Întrerupătorul de acționare a pompei de umplere a bazinului este conectat la intrarea digitală 2;
- Pompa de irigare este acționată de ieșirea digitală 0 a automatului programabil;
- Pompa de umplere a bazinului este acționată de ieșirea digitală 1 a automatului.
Fig.5.7 Diagrama scară a sistemului
automat de irigare
Utilizându-se convențiile
descrise la începutul acestui capitol și urmărind diagrama scară
din figura 5.7, se pot distinge două variante de
evenimente care vor
acționa dispozitivele, pompa
de irigare și pompa de umplere a bazinului, conectate la ieșirile
digitale a automatului programabil. Una din variantele evenimentului
care pune în funcțiune
pompa de irigare este produs numai dacă toate condițiile impuse
pentru ceas, temperatură și umiditate sunt îndeplinite. Cea de a
doua variantă a evenimentului este produs la acționarea manuală a
întrerupătorului pentru acționarea pompei de irigare. În același
mod se poate descrie și logica de acționare a pompei de umplere a
bazinului, prima variantă a evenimentului care aclanșează pompa
este produs de senzorul de nivel, iar cea de a doua variantă de
întrerupătorul de acționare manuală a pompei de umplere a
bazinului.
Înainte
de a transpune programul reprezentat cu ajutorul diagramei scară din
figura 5.7, se modifică numele afișate de către
interfața de programare ale dispozitivelor și condițiilor din
acest exemplu, respectând
conexiunile electrice stabilite mai sus.
Numele
fiecărei intrări a automatului poate fi modificat așezând
cursorul mouse-ului în interiorul etichetei ce se dorește a fi
modificată și acționând butonul din stânga a mouse-ului. Figura
5.8 prezintă interfața software, după modificarea acestor
etichete.
Pentru
redenumirea ieșirilor digitale din lista dispozitivelor, este
necesară selectarea din listă a unei ieșiri, tastarea literei ”n”,
tastarea unui nou nume în câmpul text aflat în fereastra nou
deschisă și acționarea butonului ”ok”.
Fig.5.8
Redenumirea intrărilor și ieșirilor automatului programabil
Noile
denumiri editate mai sus sunt imediat afișate în ”Lista
Evenimente”. Numele controlerului și adresa IP sunt și ele
editate(vezi figura 5.9):
- Nume Controller = Sistem Irigare;
- Adresa IP Controller = 192.168.0.10;
Editarea
primei variante de eveniment pentru punerea în funcțiune a pompei
de irigare constă în selectarea variantei 1 din lista ”Selectați
Varianta” și bifarea căsuțelor din dreptul etichetelor ”Ceas”,
”Temperatura” și ”Umiditate”. Pentru stabilirea intervalului
de valori în care condiția se consideră îndeplinită se va
acționa butonul de tip radio din dreptul uneia dintre condiții și
se acționează
cursoarele potențiometrelor aflate în dreapta sus a blocului
”Editare Eveniment”. Figura 5.9 prezintă selectarea condițiilor
pentru această variantă, stabilirea cu ajutorul potențiometrelor
valorile minime și maxime ale intervalelor stabilite pentru
temperatură și umiditate.
Stabilirea intervalului de timp presupune introducerea datelor
menționate mai sus în câmpurile text din dreptul etichetelor
”Ore”, ”Minute” , ”ON” pentru valorile minime și ”OFF”
pentru valorile maxime. Pentru memorarea acestui eveniment și
afișarea lui în lista de evenimente se acționează butonul ”OK”
din componența blocului ”Editare eveniment”(vezi figura 5.9).
Fig.5.9 Editarea variantei 1 a evenimentului care va acționa pompa
de irigare
Urmârind blocul ”Lista Evenimente” se poate observa modul în
care condițiile impuse pentru temperatură, umiditate și ceas sunt
înseriate, între ele executându-se operația logică ”și”,
iar rândurile pentru celelalte trei variante sunt afișate în
paralel, executându-se operația logică ”sau” între acestea. Acest mod de afișare a logicii programului se dorește a fi un mod
similar cu diagrama scară.
”Pompa
irigare:
Varianta
1:Temperatura: ON = 20 OFF = 25C-> Umiditate: ON = 30 OFF =
40->Ceas: ON = 07:00 OFF = 07:30->|
Varianta
2:-
Varianta
3:-
Varianta
4:-”
Pentru configurarea variantei a doua a evenimentului, sau a
condițiile paralele, se alege ”Varianta 2” din lista ”Selectați
Varianta” și se selectează intrarea automatului la care s-a
conectat întrerupătorul pentru acționarea pompei de irigare,
bifând căsuța adiacentă etichetei denumite ”Într irigare”.
La acționarea butonului ”OK” această variantă este introdusă
în logica programului și afișată în dreptul variantei 2, în
blocul ”Lista Evenimente”(vezi figura 5.10).
Fig.5.10 Editarea variantei 2 a evenimentului care va acționa pompa
de irigare
Diagrama scară din figura 5.7 și modul în care datele sunt
afișate de către interfața software în blocul ”Lista
Evenimente” descriu, până acum, faptul că pompa de irigare va fi
pusă în funcțiune numai dacă valorile citite de la senzori și
valorile citite de la ceasul aflat în structura internă a
automatului programabil se află cuprinse în intervalele de valori
stabilite sau dacă este acționat întrerupătorul conectat la
intrarea digitală 1 a automatului.
”Pompa
irigare:
Varianta
1:Temperatura: ON = 20 OFF = 25C-> Umiditate: ON = 30 OFF =
40->Ceas: ON = 07:00 OFF = 07:30->|
Varianta
2:Într Irigare->|
Varianta
3:-
Varianta
4:-”
În mod similar se procedează pentru configurarea evenimentelor
care pun în funcțiune pompa de umplere a bazinului cu apă. Se
alege din lista de dispozitive ”Pompa umplere”, iar din lista de
variante ”Varianta 1” și se bifează căsuța adiacentă
etichetei ”Senzor nivel”. Pentru varianta 2 , se va bifa căsuța
din dreptul etichetei ”Într Bazin”. Figura de mai jos prezintă
interfața de programare după editarea condițiilor pentru
aclanșarea pompei de umplere a bazinului.
Butonul ”Clear” va șterge toate câmpurile text ce conțin
intervalele de valori pentru ceas, intrări analogice și senzorii de
temperatură, umiditate și lumină.
Fig.5.11 Editarea evenimentelor care vor acționa pompa de umplere a
bazinului cu apă
”Pompa
irigare:
Varianta
1:Temperatura: ON = 20 OFF = 25C-> Umiditate: ON = 30 OFF =
40->Ceas: ON = 07:00 OFF = 07:30->|
Varianta
2:Într Irigare->|
Varianta
3:-
Varianta
4:-
Pompa
umplere:
Varianta
1:Senzor nivel->|
Varianta
2:Într Bazin->|
Varianta
3:-
Varianta
4:-”
Pentru
a transmite acest program automatului programabil cu adresa de IP
stabilită (192.168.0.10) se va acționa butonul indicat de eticheta
”Trimite Configurația”. Important de menționat este și faptul
că pompele folosite în acest exemplu pot fi acționate și prin
intermediul acestei interfețe software, acționându-se butonul
etichetat ”Actionare Manuală”. Pentru memorarea acestui program
se va folosi meniu ”File”, iar cu ajutorul ferestrelor specifice
operațiilor de salvare a fișierelor se vor menționa numele dorit
pentru fișierul
memorat și locația unde acesta este salvat. Dacă fișierul este
memorat cu succes sau memorarea a creat o eroare interfața va genera
o fereastră nouă informând utilizatorul despre aceasta.
5.2.Realizarea interfeței software în mediul de programare NetBeans utilizând limbajul de programare JAVA
Interfața software de programare a automatului
pentru sistemele domotice a fost realizată utilizând limbajul Java
în mediul de programare Netbeans. Acest mediu de programare permite
construirea interfeței folosind elemente grafice în mod similiar cu
mediu Microsoft Visual. Figura 5.12 prezintă printr-o captură de
ecran fereastra ”Design” care permite așezare elementelor
interfeței pe panoul aplicației (Form).
Fig.5.12 Mediul de programare Netbeans, interfața
Design
O
dată cu plasarea elementelor folosite la construcția acestei
interfețe și editarea proprietăților acestora cu ajutorul
ferestrei ”properties”, Netbeans instanțiază obiectele Java și
generează liniile de cod necesare descrierii proprietăților
acestora în metoda initComponents().
Elementele de tip JtextField pot fi editate de către utilizator
doar la acționarea mouse-ului, iar apoi, la apăsarea tastei ”enter”
aceastea ies din ”focus”, scrierea textului în aceste elemente
nu mai fiind permisă. Astfel s-a făcut posibilă denumirea
intrărilor și ieșirilor automatului de către utilizator, conform
cu senzorii sau întrerupătoarele conectate. Liniile de cod
următoare tratează evenimentele generate de mouse și tastatură,
pentru editarea numelui intrării digitale 0.
private
void Dig0NameMousePressed(java.awt.event.MouseEvent evt) {
Dig0Name.setFocusable(true);
}
private
void Dig0NameKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()
== KeyEvent.VK_ENTER){
Dig0Name.setFocusable(false);
}
}
Așa cum am menționat în subcapitolul anterior, intervalul de
valori impus de către utilizator, în care intrările analogice,
temperatura, umiditatea și lumina trebuiesc încadrate pentru a
îndeplinii condiții adevărate în structura logică a programului,
este stabilit cu ajutorul potențiometrelor de tip ”JSlider”.
Urmărind figura 5.13, ”JSlider1” este cel care stabilește
valoarea minimă a intervalului, iar ”JSlider2” cel care
stabilește valoarea maximă. Codul Java care tratează preluarea,
prelucrarea și afișarea valorilor de la aceste două elemente de
tip ”JSlider” urmărește ca valorile stabilite de ”JSlider1”
să fie intotdeauna mai mici decât valorile stabilite cu ajutorul
potențiometrului ”JSlider2”, în caz contrar, preluarea
valorilor de la aceste potențiometre este oprită, iar câmpul care
afișează valoarea potențiometrului acționat este colorat în
roșu. Această excepție este exemplificată în figura 5.14.
Fig.5.13 Elementele de tip ”JSlider” folosite la stabilirea
intervalului de valori
Fig.5.14 Valoarea minimă a intervalului este mai mare decât
valoarea maximă stabilită
Afișarea valorilor și memorarea lor în
câmpurile și, repectiv, în variabilele corespunzătoare intrării
analogice sau a senzorului dorit sunt realizate urmărind starea
butoanelor radio de tip ”JRadioButton”, aflat în dreapta
câmpurilor de afișare a valorilor intervalului. În cadrul liniilor
de cod Java acestea sunt An1Adj, An2Adj, An3Adj, An4Adj, TempAdj,
HumAdj și LightAdj. Câmpurile pentru afișarea valorilor minime
sunt Ain1ON, Ain2ON, Ain3ON, Ain4ON, TempON, HumON, LightON, iar cele
pentru afișarea valorilor maxime sunt Ain1OFF, Ain2OFF, Ain3OFF,
Ain4OFF, TempOFF, HumOFF, LightOFF. Figura 5.15
prezintă fluxul de execuție a funcției care tratează preluarea și
afișarea datelor ajustate cu ajutorul potențiometrului JSlider1,
considerându-se ca exemplu ajustarea valorilor pentru intrarea
analogică 1 .
Figura.5.15
Ajustarea valorii cu ajutorul potențiometrului
JSlider1
Valoarea
minimă a potențiometrelor de tip ”JSlider” este egală cu 0,
iar cea maximă cu 1023.
Prin
urmare, în ceea ce privesc valorile de comparare pentru intrările
analogice ale automatului programabil preluate de la aceste
potențiometre sunt transmise către automatul programabil fără a
fi prelucrate, procesarea acestor date de către firmware fiind ușor
de implementat având în vedere rezoluția de 10 biți a
convertoarelor analog-numerice din structura microcontrolerului.
Spre
deosebire de valorile de comparare pentru intrările analogice,
valorile de comparare pentru senzorii de temperatură, umiditate și
lumină sunt prelucrate de către interfață, cu scopul de a se
obține valori cuprinse în intervalul 10 , 40 grade C pentru
temperatură și 0 %, 100% pentru umiditate, pentru valori ale
potențiometrelor cuprinse în intervalul 0, 1023.
Butonul
”OK” aflat în interiorul blocului ”Editare Eveniment” este
de tip ”JButton” și are rolul de a construi șirul de caractere
pentru varianta selectată, conform convențiilor descrise în
capitolul 4.2 și afișarea condițiilor impuse de către utilizator
în câmpul text aflat în blocul ”Lista evenimente”. Aceste
sarcini sunt îndeplinite de către metoda SetBtnActionPerformed,
apelată
la apăsarea acestui buton.
Construirea
șirului de carcatere pentru varianta selectată constă în
adăugarea caracterelor stabilite și descrise în capitolul 4.2,
folosindu-se variabila de tip String denumită ”RelConfig”.
Pentru construirea textului afișat în câmpul de tip ”JTextArea”
aflat în interiorul blocului ”Lista Evenimente”, s-a folosit
variabila de tip String ”SetText”. Prin intermediul
instrucțiunilor de tip IF se verifică validarea căsuțelor de tip
”JCheckBox”, prioritar construirii acestor șiruri.
Pentru fiecare
variantă de eveniment a celor 8 dispozitive s-a creat o variabilă
de tip string:
String Rel0v0, String Rel0v1, String Rel0v2,
String Rel0v3, String Rel1v0, String Rel1v1, String Rel1v2, String
Rel1v3, String Rel2v0, String Rel2v1, String Rel2v2, String Rel2v,
String Rel3v0, String Rel3v1, String Rel3v2, String Rel3v3, String
Rel4v0, String Rel4v1, String Rel4v2, String Rel4v3, String Rel5v0,
String Rel5v1, String Rel5v2, String Rel5v3, String Rel6v0, String
Rel6v1, String Rel6v2, String Rel6v3, String Rel7v0, String Rel7v1,
String Rel7v2, String Rel7v3,
iar șirul
”RelConfig” este copiat în variabila corespunzatoare
dispozitivului sau ieșirii digitale selectate. Această
metodă este prezentată sub forma uni diagrame în figura de mai
jos.
Fig.5.16
Modul de execuție a metodei SetBtnActionPerformed
La
acționarea butonului ”Trimite configurația”, se apelează
metoda TxBtnActionPerformed care
îndeplinește sarcina de a concatena șirurile memorate cu ajutorul
variabilelor descrise mai sus, obținându-se șirul de caractere
complet care
reprezintă programul pentru automatul programabil și transmiterea
lui în rețea utilizând protocolul UDP. Rândurile următoare
prezintă concatenarea
și adăugarea secvenței de caractere ”conf” la șirul obținut.
RelConfig = "";
RelConfig
= "r0" + Rel0v0 + Rel0v1 + Rel0v2 + Rel0v3 + "e"
+ "r1" + Rel1v0 + Rel1v1 + Rel1v2 + Rel1v3 + "e"
+ "r2" + Rel2v0 + Rel2v1 + Rel2v2 + Rel2v3 +
"e"
+ "r3" + Rel3v0 + Rel3v1 + Rel3v2 + Rel3v3 + "e"
+ "r4" + Rel4v0 + Rel4v1 + Rel4v2 + Rel4v3 + "e"
+ "r5" + Rel5v0 + Rel5v1 + Rel5v2 + Rel5v3 +
"e"
+ "r6" + Rel6v0 + Rel6v1 + Rel6v2 + Rel6v3 + "e"
+ "r7" + Rel7v0 + Rel7v1 + Rel7v2 + Rel7v3 + "e";
RelConfig
= "conf" + RelConfig;
Transmiterea datelor
cu ajutorul protocolului UDP, presupune copierea șirului de
caractere într-o matrice de tip byte, crearea unui pachet de date
care conține adresa IP a automatului și portul pe care se
transmite, iar, în sfârșit, crearea unui socket și transmiterea
datelor.
Verificarea
integrității datelor recepționate de către automatul programabil
este realizată în interiorul acestei metode. După executarea
instrucțiunilor de transmitere a șirului de caractere, interfața
software așteaptă ca automatul programabil să răspundă
cu șirul de caractere
recepționat. Interfața software compară șirul transmis cu cel
recepționat de la automat și informează utilizatorul cu ajutorul
mesajelor de tip JoptionPane.showMessageDialog despre
rezultatul comparării. De asemenea, se
va genera un mesaj de eroare și
în cazul în care
transmisia nu a avut succes după mai multe încercări facute în
intervalul de timp 1000ms. Figura
de mai jos prezintă modul în care se face verificarea datelor
transmise către automat.
Fig.5.17 Modul în care se face
verificarea datelor transmise către automat
La
acționarea butonului ”Actionare Manuala” se apelează metoda
ManualBtnActionPerformed care
îndeplinește sarcina de a crea șirul de carcatere care reprezintă
comanda de acționare a uneia din cele 8 ieșiri digitale și
transmiterea
acestuia către automatul programabil. Așa cum s-a descris în
capitolul 4.2 acest șir este format prin adăugarea la secvența de
caractere ”cmd” a carcaterului cifră care reprezintă numărul
ieșirii digitale. Ieșirile digitale sunt așezate în mod
cronologic în lista indicată de eticheta ”Selectati Dispozitiv”,
prin urmare acest șir este format din secvența ”cmd” și
indexul elementului selectat din această listă. Rezultatul
concatenării celor două secvențe este memorat intr-o variabilă de
tip String denumită ”Cmd” și transmisă automatului cu ajutorul
protocolul UDP. Instrucțiunile pentru executarea formării și
transmiterii pachetelor UDP sunt similare cu cele folosite în metoda
TxBtnActionPerformed descrisă
mai sus.
Fig.5.18
Fluxul de execuție a metodei ManualBtnActionPerformed
Butonul
”Clear” aflat în interiorul blocului ”Editare Eveniment”
apelează funcția ClearBtnActionPerformed care
șterge textul din interiorul tuturor câpurilor editate de
utilizator, cu excepția câmpurilor de editare a numelui
controllerului și a adresei IP, cu ajutorul metodei setText().
Una
din caracteristicile importante ale acestei interfețe software este
posibilitatea de memorare a întregului program realizat de către
utilizator, intr-un fișier text. Așa
cum am prezentat în subcapitolul anterior, ”salvarea”
programului se face utilizând meniul ”File - Save As...” sau
”File - Save”. Aceste meniuri apelează metode diferite, însă
ambele vor executa formarea în formă finală a șirului de
caractere care reprezintă programul automatului, precum și formarea
unui șir de caractere care conține numele intrărilor, ieșirilor,
numele și adresa IP a automatului stabilite de către utilizator. De
asemenea, se va memora în acest fișier textul afișat de câmpul
aflat în blocul ”Lista Evenimente”.
Meniul
”File-Open” apelează metoda MenuOpenActionPerformed
care
va genera o fereastă de tip FileChooser.showOpenDialog(this)
care
permite utilizatorului să selecteze fișierul memorat, înscrie
câmpurile text cu șirurile de caractere salvate și memorează în
variabilele descrise mai sus secvențele de caractere care vor fi
utilizate în formarea programului pentru automat după efectuarea
modificărilor de către utilizator.
În componența programului se află clasa principală ”MainFrame”
care este derivată din superclasa ”javax.swing.JFrame”.
Constructorul clasei ”public MainFrame()”, obiectele, metodele
care tratează evenimentele generate de obiectele interfeței cu
utilizatorul și tipul variabilele globale folosite ăn acet program
sunt reprezentate ăn diagrama din figura 5.19
Fig.5.19 Elementele din structura
clasei principale ”MainFrame”
Capitolul 6
Concluzii
6.1.Concluzii
În cadrul acestei
lucrări s-a dorit proiectarea unui sistem de automatizare a mediului
domotic, în scopul realizării unui produs finit care să aibă un
cost redus de producție și să fie ușor de folosit și întreținut,
astfel încât să poată reprezenta o soluție viabilă în
automatizarea proceselor de întreținere sau măsurare în cadrul
mediului domestic, pentru persoanele cu dezabilități sau pentru
sporirea confortului în imobile.
Studiul bibliografic
realizat la începutul acestui proiect a evidențiat faptul că
progresul tehnologic din ultimii ani a dus la realizarea tot mai
ușoară și mai ieftină a sistemelor de comandă automată și a
transmiterii datelor la distanță facând posibilă înbunătățirea
confortului în mediul domotic. Sistemele de tip IoT (Eng. Internet
of Things) sunt dovada progresului tehnologic major din ultimii ani
care aduc în sistemele domotice controlul facil al diferitelor
dispozitive. Prețul scăzut al microcontrolerelor cu arhitectura
organizată pe 8 biți, precum și dezvoltarea fenomenului ”Open Hardware” face posibilă astăzi, realizarea diferitelor proiecte
de automatizare și control la distanță, folosindu-se viteze mari
de transmisie a datelor, utilizându-se diferite protocoale sau
soluții hardware de comunicare.
Prima etapă în
realizarea acestui proiect a fost selectarea unui microcontroler cu
ajutorul căruia s-a construit partea hardware, care să prezinte un
cost relativ scăzut de achiziționare, să dețină suficientă
memorie de program și de date, să fie echipat cu interfețele de
comunicare propuse spre utilizare în acest proiect și să fie
disponibil în capsulă de tip THT (eng. Trough Hole Technologie)
pentru a face posibilă construcția și testarea prototipului cât
mai ușor.
Cea de-a doua etapă a
constat în crearea unui protocol simplu de transmitere a datelor
către automatul programabil, astfel încât memorarea și
interpretarea acestuia să nu consume resurse majore din structura
microcontrolerului, iar implementarea acestuia în firmware să fie
posibilă pentru arhitectura organizată pe 8 biți. De asemenea, în
ceea ce privește interfața de comunicare cu acest automat
programabil, s-a dorit încă de la început posibilitatea conectării
mai multor astfel de automate într-o rețea locală de tip LAN,
oferindu-se astfel posibilitatea extinderii ariei automatizate de
către utilizator și, mai ales, facând posibilă comunicarea cu
acestea de la distanță prin intermediul conexiunii WiFi (wireless).
Cea de-a treia etapă
în dezvoltarea acestui proiect a constat în conceperea unui model
pentru interfața software de programare și comandă a automatului,
ușor de utilizat de către utilizatorii care nu dețin cunoștințe
despre domeniul automatelor programabile și programarea lor.
Cea de-a patra etapă
a fost proiectarea și crearea plăcii de circuit imprimat
folosindu-se resurse financiare scăzute.
Cea de-a cincia etapă
și cea de a șasea au constat în scrierea firmware-ului pentru
microcontroler și, respectiv a software-ului.
În final se poate
spune că automatul programabil împreună cu interfața software de
programare și control formează un sistem perfect funcțional, care
prezintă posibilități de înbunătățire în viitor. Odată cu
crearea protocolului de transmisie și memorare a programului de
către automat, odată cu realizarea unui mod facil de programare a
automatului și crearea unei interfețe prietenoase cu utilizatorul,
în acest proiect s-a creat un sistem flexibil și viabil care aduce
ajutor și confort în locuințele oamenilor.
6.2.Upgrade-ul sistemului în versiuni viitoare
Acest automat
programabil pentru sisteme domotice poate fi dezvoltat și mai mult
prin adăugarea unor noi blocuri hardware și implementarea unor noi
funcții în structura firmware-ului. Din punct de vedere al
hardware-ului este posibilă extinderea numărului de intrări și
ieșiri digitale, precum și adăugarea ieșirilor capabile să ofere
semnale de tip PWM (eng. pulse width modulation). De asemenea, se vor
putea adăuga sisteme de comunicare serială, având în vedere că
prototipul prezentat în această lucrare nu folosește portul serial
al microcontrolerului (portul UART).
Se vor proiecta și
dezvolta mai multe tipuri funcționale de module externe care pot fi
conectate la ieșirile automatului, ca exemplu module de comandă
echipate cu triace sau tranzistoare de putere mosfet.
O înbunătățire
majoră a sistemului constă în înlocuirea microcontrolerului
Atmega32 cu Atmega644 sau Atmega1284, care sunt compatibile pin la
pin cu microcontrolerul utilizat și care prezintă resurse
superioare în ceea ce privește memoria de program și de date.
Dimensiunile placii de
circuit imprimat vor fi reduse și se va concepe o carcasă
corespunzătoare pentru montarea acestui sistem.
Din punctul de vedere
al firmware-ului toate blocurile hardware adăugate vor fi
implementate în program oferindu-se astfel noi funcții, exemplu
fiind controlul în PWM a sistemului de iluminat.
Din punctul de vedere
a interfeței software de programare și comandă a automatului, se
vor adăuga funcții noi conforme cu upgrade-ul hardware și mai
ales, se va dezvolta o aplicație de comandă a automatului, capabilă
să ruleze sub sistemul de operare Android, oferindu-se astfel
posibilitatea de comandă la distanță a diferitelor dispozitive
conectate la ieșirile automatului, cu ajutorul telefonului mobil sau
a tabletei.
Posibilitatea
conectării acestui automat programabil la mediul IoT (eng. Internet
of Things) reprezintă una din cele mai importante funcții care vor
fi adăugate acestui sistem în viitor. Din acest motiv, pentru
interfața de comunicare s-a ales comunicația ethernet, iar pe
viitor, doar prin dezvoltare firmware se va implementa conectarea la
serverele de tip nori IoT.
În concluzie se poate
spune că automatul programabil pentru sistemele domotice realizat și
prezentat în această lucrare prezintă posibilități majore de
upgrade, conforme cu sistemele moderne de control și transmitere a
datelor.
Bibliografie
- Laurean_Bogdan,_PLC1,(06.06.2016) http://web.ulbsibiu.ro/laurean.bogdan/html/PLC1.pdf_
- (06.06.2016) https://ro.wikipedia.org/wiki/Domotică
- Stefan Johansson, Martin Öhman, Prototype implementation of the PLC standard IEC 1131-3_(06.06.2016)_http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.17.2253&rep=rep1&type=pdf
- (06.06.2016) http://www.plcacademy.com/ladder-logic-examples/
- (06.06.2016) https://en.wikipedia.org/wiki/User_Datagram_Protocol
- (06.06.2016) http://www.atmel.com/devices/atmega32a.aspx
- (06.06.2016) https://www.relayspec.com/specs/021265/RC2402-L.pdf
- (06.06.2016) http://www.nxp.com/documents/data_sheet/PCF8563.pdf
- (06.06.2016) http://www.ti.com/lit/ds/symlink/lm1117.pdf
- Florian Mircea Boian, Servicii Web; Modele, Platforme, Aplicații, Editura Albastă, An2011
- O.G.Popa, Învață Hardwarew Frirmware și Software Design, Editura Complement Control, An 2010
- Jim Keogh, Java fără mistere, Editura Rosetti Educational , An 2006
- Ștefan Tanasă, Ștefan Andrei, Cristian Olaru, Java de la 0 la expert, Editura Polirom, An 2011
- Elecia White, Making Embedded Systems, Editura O'Reilly, An 2011
- Stanciu, I.R., Molnar-Matei, F., Sisteme de monitorizare şi control în timp real, Editura Eurostampa, Timişoara 2013, ISBN 978-606-569-542-9
- Florin Molnar-Matei, Ioan Rareş Stanciu, Introducere în electronică analogică şi digitală. Note de curs şi îndrumător de laborator, ISBN: 978-606-569-968-7, 2015.
- Muhammad Ali Mazidi, Janice Mazidi, Sarmad Naimi, Avr Microcontroller and Embedded Systems: Using Assembly and C, Editura Pearson, 2010
- Ying Bai, Practical Microcontroller Engineering with Arm Technology: Marginalized Subjects and Sources, Editura Wiley-IEEE Press, 2016
- Daniel J. Pack , Steven Barrett, Microcontroller Programming and Interfacing, Editura Morgan & Claypool, 2011, ISBN-13: 9781608457137
- Dogan Ibrahim, Microcontroller-Based Temperature Monitoring and Control, Editura NEWNES, 2002, ISBN-13: 9780750655569
No comments:
Post a Comment