Domotica. Automatizarea Locuintei
Domotica. Automatizarea locuinței.
Rezumat
Proiectul realizat reprezintă un studiu în domeniul automatizării și controlului diferitelor aplicații din locuință. Din multitudinea de module prezente în domotică am implementat urmatoarele: controlul iluminării, controlul temperaturii, acționarea jaluzelelor și a ușii de la garaj și desigur un sistem de alarma bazat pe principiul „tripwire”.
Pentru comandă și control am folosit o platformă de dezvoltare Arduino Ethernet, o platformă modernă dezvoltată în jurul unui microcontroler de la Atmel, ATmega328. Platforma are un mare avantaj și anume poate fi folosit pe post de server Web, în acest fel având acces la controlul și comanda fiecărei aplicație în parte, practic, din orice colț al lumii, desigur, unde există și o conexiune la internet.
Domotica este încă un domeniu care se dezvoltă oarecum încet iar prin acest proiect sper să aduc la suprafață mai multe informații legate de acesta.
Abstract
This project represents a study of home automation and control. From the large amount of applications I implemented the lights control module, the temperature control module, drive of blinds and garage door, and of course an alarm system based on “tripwire” principle.
For command and control I used a Arduino Ethernet board, a modern development platform build around a microcontroller from Atmel, ATmega328. This platform has a great advantage and can be used as a Web Server, in this way provides access to control and command of every application, practically from every corner of the world, of course, where a internet connection exist.
Home automation is a domain that moves slowly and I hope, through this project, to bring to the surface more information about this domain.
Cuprins
1. Introducere
1.1. Motivație
1.2. Metodica lucrării
1.2.1. Strategie de lucru
1.2.2. Rezultate preconizate
2. Stadiul actual din domeniile vizate
2.1. Introducere
2.2. Scurt istoric
2.3. Stadiul actual al tehnologiei
2.4. Sisteme integrate
2.4.1. Senzori
2.4.2. Microcontrollere
2.4.3. Actuatori
2.5. Inginerie software
2.5.1. Evoluția ingineriei software
3. Arhitectura proiectului
3.1. Intoducere
3.2. Modulul electronic
3.2.1. Arduino Ethernet
3.2.2. Controlul iluminării
3.2.2.1. Dioda emițătoare de lumină
3.2.3. Controlul temperaturii
3.2.3.1. Senzorul de temperatură
3.2.3.2. Elementele de răcire și încălzire
3.2.4. Controlul jaluzelelor
3.2.4.1. Motorul de curent continuu
3.2.5. Controlul ușii de garaj
3.2.5.1. Servomotorul
3.2.6. Sistemul de alarmă
3.2.6.1. Fotorezistența
3.2.6.2. Dioda laser
3.2.6.3. Buzzerul piezoelectric
3.3. Programul de comandă
3.3.1. Controlul iluminării
3.3.2. Controlul temperaturii
3.3.3. Controlul jaluzelelor
3.3.4. Controlul ușii de garaj
3.3.5. Sistemul de alarmă
3.4. Macheta
4. Structura proiectului
4.1. Introducere
4.2. Modulul electronic
4.2.1. Controlul iluminării
4.2.2. Controlul temperaturii
4.2.2.1. Senzorul de temperatură LM35DZ
4.2.3. Controlul jaluzelelor
4.2.3.1. Puntea H
4.2.3.2. Pulse Width Modulation
4.2.4. Controlul ușii de garaj
4.2.5. Sistemul de alarmă
4.3. Programul de comandă
4.3.1. Serverul Web pe Arduino Ethernet
4.3.1.1. Solicitarea de la browser
4.3.1.2. Răspunsul de la server
4.3.1.3. Pagina Web
4.3.1.4. Solicitarea Ajax și Fișierul XML
4.3.1.5. Comunicarea dintre pagina Web și program
4.3.2. Funcționarea butoanelor
4.3.3. Controlul iluminării
4.3.4. Controlul temperaturii
4.3.5. Controlul jaluzelelor
4.3.6. Controlul ușii de garaj
4.3.7. Sistemul de alarmă
4.4. Proiectarea în CATIA v5 R20
4.4.1. Prezentarea modulului Sketcher
4.4.2. Prezentarea modulului Part Design
4.4.3. Prezentarea modulului Assembly Design
4.4.4. Prezentarea modulului Drafting
5. Rezultate obținute
6. Concluzii și intenții
6.1. Concluzii
6.1.1. Probleme întâmpinate
6.1.1.1. Numărul redus al pinilor
6.1.1.2. Sistemul de alarmă
6.1.1.3. Elementul de răcire
6.1.1.4. Gestionarea memoriei
6.2. Intenții
7. Referințe bibliografice
8. Anexa 1. Schemă electronică
9. Anexa 2. Cod sursă Arduino
10. Anexa 3. Codul paginii Web
11. Anexa 4. Model 3D și desene de execuție
Introducere
Motivație
Pentru mulți dintre noi, casa inteligentă, pare un concept dintr-un roman Science Fiction stabilit sute de ani în viitor. Imaginează-ți lucruri ca aparate care învață orarul nostru, lumini care se opresc după ce părăsim camera, încuietori care pot fi declanșate de la distanță. Totuși tehnologia pentru a pune în aplicare toate astea și multe altele este aici.
Farmecul irezistibil al thenologiei constă în evoluție constantă și rapidă. De îndată ce o nouă soluție devine familiară, cunoscută, noi frontiere pentru a o explora apar la vedere. Domotica, desigur, nu este o excepție. Abea născută, deja în evoluție, o evoluție care se mișcă relativ încet, dar e totuși o evoluție.
În domotică, ca și în orice alt domeniu de altfel, fiabilitatea este o valoare de bază, chiar mai mult este simplitatea în utilizare. Domotica țintește să integreze și să-și răspândească aplicațiile pretutindeni.
În principiu, toate sistemele electrice și electronice individuale din casă sunt reunite într-o singură unitate, care face posibilă coordonarea centralizată a tuturor funcțiilor, fie din interiorul locuinței, fie de la distanță prin telefonul mobil sau prin internet. De pe Smartphone-ul tău poți să răspunzi la interfon sau să stingi lumina fără să te ridici din pat.
Cel mai mare dezavantaj pentru toate sistemele conectate la internet este expunerea mai mare la riscurile de securitate și confidențialitate. Acestea pot fi surprinzător de ușor de spart, prin urmare poți intra relativ ușor în casa unui străin prin intermediul sistemelor lor de automatizare. Companiile producătoare încearcă să remedieze situația încorporând sisteme de protecție tot mai avansate, în unele situații apelânduse la monitorizarea de către furnizor a instalațiilor din casele clienților pentru a detecta intruși digitali.
Fiecare tehnologie este doar la fel de interesantă ca lucrurile pe care le poți face cu ea. Deci, am decis să iau câteva piese electronice relativ ieftine, un Arduino, o fărâmă de cod și să creez o „casă” mult mai interesantă și plăcută.
Una dintre cele mai interesante aplicații ale tehnologiei Arduino este punctul de intrare în lumea automatizării locuinței. Arduino servește o funcție importantă de a acționa în calitate de controler, coordonând intrările de la interfața cu utilizatorul cu ieșirile, care de obicei sunt relee care controlează diferite părți ale locuinței.
Metodica lucrării
Strategie de lucru
Pentru a avea o organizare cât mai bună proiectul va fi împărțit în anumite etape:
Alegerea modulelor sau aplicaților: presupune alegerea modulelor care vor fi implementate. După un studiu amănunțit am ales cinci module și anume controlul iluminării, monitorizarea și controlul temperaturii, controlul jaluzelelor, controlul ușii de la garaj și un sistem de alarmă.
Proiectarea machetei: după luarea deciziei de a distribui modulele într-o machetă am realizat un model 3D în CATIA pentru o mai bună vizualizare a produsului finit. CATIA, acronim de la „Computer Aided Three Dimensional Interactive Application”, este o colecție software comercială multiplatformă CAD/CAM/CAE dezvoltată de compania franceză Dassault Systemes și comercializată în întrega lume de IBM.
Alegerea platformei de dezvoltare: ca rezultat al unui studiu de piață am ales o platformă Arduino, o variantă „open source”, ieftină și ușor de folosit. Platforma a fost proiectată pentru a oferi mediul perfect pentru pasionați, studenți și profesioniști, pentru a creea dispozitive care interactionează cu mediul.
Alegerea componentelor și a materialului pentru machetă: constă în realizarea unui studiu de piață și desigur achiziționarea acestora. Această etapă include toate componentele de la diferitele tipuri de senzori, actuatori, elemente de încălzire și răcire până la elementele pasive de circuit.
Realizarea schemei electrice și a circuitului propriu zis: circuitul inițial a fost realizat exclusiv pe un breadboard pentru testarea funcționalității și rectificarea eventualelor erori.
Realizarea programului: această etapă merge practic în paralel cu realizarea schemei electrice și a circuitului. Programul se va face în mediul de dezvoltare oferit de Arduino folosind C/C++. Adițional se vor folosi și alte limbaje pentru realizarea comunicării dintre Arduino și utilizator prin intermediul unei pagini Web, printre ele amintim HTML, CSS, XML și JavaScript.
Realizarea machetei: după realizarea desenelor de execuție se vor debita plăcile și se va realiza macheta fizic, urmată de distribuirea modulelor în machetă.
Testarea întregului sistem: constă în testarea propriuzisă a sistemului, calibrarea acestuia dacă va fi nevoie și nu în ultimul rând detectarea eventualelor erori și rezolvarea acestora.
Rezultate preconizate
Rezultatele urmărite se pot împarți la rândul lor în mai multe categorii.
În primul rând se urmărește realizarea unei machete în care toate aplicațiile să fie implementate cu succes. Desigur, aici vorbim de implementarea fiecărui modul în parte (iluminare, temperatură, jaluzele, ușa de garaj și sistemul de alarmă), dar, cel mai important este ca aplicațiile să funcționeze bine împreună.
Arhitectura și structura proiectului trebuie să fie intuitivă. Programul va trebui să fie bine structurat în așa fel încât să fie ușor de urmărit și de înțeles. Design-ul interfaței cu utilizatorul, în cazul de față pagina Web, va fi simplu, intuitiv și ușor de utilizat.
Stadiul actual din domeniile vizate
Introducere
După cum este prezentat în și , domotica sau automatizarea locuinței se referă la folosirea calculatorului și a sistemelor informatice pentru a controla diferite aplicații și funcții. Sistemele pot varia de la controlul simplu al iluminării până la sisteme complexe, cu microcontrolere, având grade variate de inteligență și automatizare. Această automatizarea este adoptată din motive de comoditate, securitate și eficiență energetică.
Când vorbim de domotică, sau casa inteligentă, putem distinge cinci nivele de automatizare, totuși, doar de la nivelul trei putem discuta intradevăr despre o casă inteligentă.
Locuințe care conțin obiecte inteligente: la acest nivel există aplicații autonome și obiecte care funcționează intr-o manieră inteligentă.
Locuințe care conțin obiecte inteligente care comunică între ele: acest nivel adaugă o îmbunătățire foarte importantă, comunicarea și schimbul de informații intre aplicații, fapt care duce la o mai bună funcționare.
Locuințe conectate: acestea sunt dotate cu rețele interne și externe care permit controlul de la distantă și accesul la informații atât în interorul locuinței cât și în afara acesteia.
Locuințe care învață: înregistrează tipare ale activităților folosind aceste date pentru a anticipa nevoile utilizatorului și pentru a controla sistemele corespunzător.
Locuințe atente: la acest nivel activitățile și poziția utilizatorilor și obiectelor din locuință sunt tot timpul întegistrate. Aceste informații sunt folosite pentru a anticipa nevoile utilizatorului.
Scurt istoric
Domotica a fost un topic Science Fiction pentru mulți ani, devenind practică la începutul secolului XX, ca urmare a răspândirii rețelei electrice în locuințe și al progresului rapid în domeniul informaticii. Primele dispozitive controlate la distantă au inceput să apară la sfârșitul anilor 1800.
Odată cu descoperirea microcontrolelor costul contrololului electronic a căzut rapid. Tehnologii inteligente de control la distantă au fost adoptate în industria de construcții și aplicate în lumea intreagă, oferind acces ușor și control mai bun a produselor.
În timpul anilor 1990 automatizarea locuințelor a devenit cunoscută. La sfârșitul deceniului termenul de domotică era deseori folosit pentru a descrie orice sistem care combină informatica și telematica pentru a ajuta desfășurarea activităților în locuintă.
Stadiul actual din domeniile vizate
Introducere
După cum este prezentat în și , domotica sau automatizarea locuinței se referă la folosirea calculatorului și a sistemelor informatice pentru a controla diferite aplicații și funcții. Sistemele pot varia de la controlul simplu al iluminării până la sisteme complexe, cu microcontrolere, având grade variate de inteligență și automatizare. Această automatizarea este adoptată din motive de comoditate, securitate și eficiență energetică.
Când vorbim de domotică, sau casa inteligentă, putem distinge cinci nivele de automatizare, totuși, doar de la nivelul trei putem discuta intradevăr despre o casă inteligentă.
Locuințe care conțin obiecte inteligente: la acest nivel există aplicații autonome și obiecte care funcționează intr-o manieră inteligentă.
Locuințe care conțin obiecte inteligente care comunică între ele: acest nivel adaugă o îmbunătățire foarte importantă, comunicarea și schimbul de informații intre aplicații, fapt care duce la o mai bună funcționare.
Locuințe conectate: acestea sunt dotate cu rețele interne și externe care permit controlul de la distantă și accesul la informații atât în interorul locuinței cât și în afara acesteia.
Locuințe care învață: înregistrează tipare ale activităților folosind aceste date pentru a anticipa nevoile utilizatorului și pentru a controla sistemele corespunzător.
Locuințe atente: la acest nivel activitățile și poziția utilizatorilor și obiectelor din locuință sunt tot timpul întegistrate. Aceste informații sunt folosite pentru a anticipa nevoile utilizatorului.
Scurt istoric
Domotica a fost un topic Science Fiction pentru mulți ani, devenind practică la începutul secolului XX, ca urmare a răspândirii rețelei electrice în locuințe și al progresului rapid în domeniul informaticii. Primele dispozitive controlate la distantă au inceput să apară la sfârșitul anilor 1800.
Odată cu descoperirea microcontrolelor costul contrololului electronic a căzut rapid. Tehnologii inteligente de control la distantă au fost adoptate în industria de construcții și aplicate în lumea intreagă, oferind acces ușor și control mai bun a produselor.
În timpul anilor 1990 automatizarea locuințelor a devenit cunoscută. La sfârșitul deceniului termenul de domotică era deseori folosit pentru a descrie orice sistem care combină informatica și telematica pentru a ajuta desfășurarea activităților în locuintă.
În ciuda interesului în automatizarea locuinței, la sfârsitul anilor 1900 nu a fost o extindere exagerată, sistemul fiind considerat domeniu al hobiștilor sau al bogaților. Lipsa unui protocol simplu și costul ridicat de implementare a descurajat consumatorii.
Deși încă este destul loc pentru a se extinde, potrivit „ABI Research”, 1,5 milioane de sisteme de automatizare a locuințelor au fost instalate în 2012 in USA, previzionând o creștere de peste 8 milioane in 2017.
Stadiul actual al tehnologiei
Din și aflăm că elementele de automatizare sunt compuse din senzori (temperatură, luminozitate sau proximitate), controleri (un calculator cu scop general sau un controler automat), și actuatori (valve motorizate, întrerupătoare sau motoare).
Mai este nevoie de cel puțin o interfata cu utilizatorul, astfel încât proprietarii locuinței să interacționeze cu sistemul de monitorizare și control. Aceasta poate fi un terminal specializat sau o aplicație care rulează pe un smarth phone sau o tabletă. Dispozitivele pot comunica printr-o retea cablată sau wireless, folosind unul sau mai mult protocoale.
Conform au fost multe încercări de a standardiza modulul hardware, electronic și interfața de comunicare folosite pentru sistemul de automatizare a locuinței. Unele folosesc cablaj adițional pentru comunicare și control, altele folosesc semnale de radio frecvență și cele mai multe folosesc o combinație de mai multe metode.
Sistemele folosite pot fi de mai multe feluri. Sistem de încălzire, ventilație și aer condiționat: include control de temperatură și umiditate. Un termostat controlat prin internet permite proprietarului să controleze sistemul de la distanță. Poate să conțină automatizarea închiderii și deschiderii geamurilor pentru răcirea locuinței.
Sistem de control al iluminării: luminile pot fi controlate sau automatizate astfel încât să se stingă când camera nu este ocupată. Lămpiile pot fi controlate în intensitate și culoare pentru a asigura nivele diferite de lumină pentru diferite sarcini. Luminile pot fi controlate de la distanță prin internet. Se poate implementa un sistem automat de control al jaluzelelor și draperiilor pentru utilizarea mai bună a luminii naturale.
Sistem audio-vizual: aceasta categorie distribuirea sistemului audio și video. Surse multiple pot fi selectate și distribuite la una sau mai multe camere.
Sistem de securitate: un sistem de securitate integrat cu un sistem de automatizare a locuinței poate asigura servicii adiționale cum ar fi supravegherea de la distanță prin internet sau închidere centralizată a ușilor și ferestrelor. Utilizatorul poate selecta și vizualiza în timp real ce se întamplă în locuință printr-o conexiune la internet. Sistemul poate include senzori de mișcare care vor detecta orice fel de mișcare neautorizată anunțând proprietarul prin sistemul de securitate sau prin telefon. Pot fi integrate diferite sisteme de detecție in caz de incendiu, scurgeri de gaze, monoxid de carbon sau apă.
Sistem intercom: permit comunicația între diferite camere ale casei cu ajutorul microfoanelor și boxelor. Acestea se pot accesa chiar și prin internet. Deasemenea un alt scop al intercomurilor este transmisia de alarme în diferite cazuri.
Alte sisteme: folosind sisteme hardware potrivite se pot monitoriza și controla de la distanță aproape orice aparatură electrocasică.
Sisteme folosite în domotică.
Sisteme integrate
Un sistem integrat este un sistem de computer cu o funcție specifică în cadrul unui sistem mecanic sau electric, adesea cu constrângeri de calcul în timp real. Acesta este încorporat ca parte a unui dispozitiv complet de multe ori incluzând componente hardware și mecanice.
Sistemele moderne integrate sunt adesea bazate pe microcontrolere, dar microprocesoare obișnuite sunt, mai frecvente, mai ales în sisteme mai complexe. O clasă standard comun de procesoare dedicate este procesorul de semnal digital.
Deoarece sistemul integrat este dedicat unei anumite sarcini, inginerii de design îl pot optimiza pentru a reduce dimensiunea și costul produsului și de a crește fiabilitatea și performanța.
Senzori
Un senzor este defapt un convertor, care măsoară o cantitate fizică și o convertește într-un semnal care la rândul lui este citit de un observator sau printr-un instrument. Este un dispozitiv care răspunde la o mărime de intrare prin generarea unei ieșiri sub forma unui semnal electric sau optic.
Conform autorului Adrian Dumitru , în funcție de nivelul de integrare, un senzor, poate avea funcții mai simple sau mai complexe (Figura 2). Senzorul cuprinde traductorul/traductoarele pentru transformarea mărimii de intrare într-un semnal electric util, dar și circuite pentru adaptarea și conversia semnalelor și pentru prelucrarea și evaluarea informațiilor.
Structuri ale sistemelor senzoriale.
Senzorul care include și unitățile micromecanice și microelectronice de prelucrare, realizate prin integrare pe scară largă sau foarte largă, se întâlnește în literatura de specialitate și sub denumirile de „sistem senzorial” sau „senzor inteligent”. Producerea senzorilor inteligenți este facilitată de dezvoltarea tehnicii microsistemelor, care permite integrarea în volume extrem de mici atât a traductoarelor de diferite tipuri, cât și a micromecanicii și microelectronicii de prelucrare.
Sesibilitatea unui senzor arată cât de mult se schimbă semnalul de ieșire atunci când cantitatea măsurată se schimbă. Din motive de precizie cele mai multe tipuri de senzori sunt calibrați după standarde cunoscute.
În automatizare, informația calitativă/cantitativa măsurabilă livrată de senzori, dupa o eventuală amplificare și prelucrare servește la controlul și reglarea sistemelor tehnice automate.
Din mai aflăm că există senzori pentru mai mult de 100 de mărimi fizice, dar dacă luăm în considerare și senzorii pentru diferite substanțe chimice numărul lor devine de ordinul sutelor.
Clasificarea caracteristicilor senzorilor.
Microcontrollere
Un microcontroler este în esență o configurație minimală de sistem de calcul, capabil să execute la o viteză foarte mare instrucțiunile unui program stocat în memorie; acest program este o secvență logică de operații ce poate implementa algoritmii necesari pentru controlul proceselor. Microcontrolerul are integrat pe același chip: oscilatorul, memoria (RAM, ROM, EEPROM), numărătoare, blocuri analogice, interfețe de comunicație și porturi de intrare-ieșire.
Microcontrolerele sunt caracterizate prin: dimensiune redusă a memoriei program și a memoriei de date; conțin module pentru interfațarea atât digitală cât și analogică cu senzori și actuatori; răspund rapid la evenimente externe; sunt de o mare varietate pentru a putea fi satisfăcute cerințele diverselor aplicații la un raport preț / performanță corespunzător.
Ceea ce deosebește fundamental un microcontroler de un circuit integrat analogic sau digital, este faptul că el nu poate face nimic dacă nu este programat. Programul software conferă microcontrolerului, abilitatea de a realiza funcții diferite cu aceeași configurație hardware. Scrierea programului se realizează de obicei intr-un editor ce permite salvarea liniilor de comandă introduse.
După cum se prezintă în, toate aplicațile în care se utilizează microcontrolere fac parte din categoria așa ziselor sisteme integrate, la care existența unui sistem de calcul incorporat este aproape transparentă pentru utilizator.
Arhitectura unității centrale de calcul este unul din elementele cele mai importante care trebuie avut în vedere în analiza oricărui sistem de calcul. Principalele concepte luate în considerare și întâlnite aici sunt următoarele:
Arhitecturi de tip „Harvard”: la această arhitectură există spații de memorie separate pentru program și date. În consecință ar trebui să existe și magistrale separate, de adrese și date, pentru codul instrucțiunilor și respectiv pentru date.
Arhitecturi de tip CISC: aproape toate microcontrolerele au la baza realizării CPU conceptul CISC (Complex Instruction Set Computer). Aceasta înseamnă un set uzual de peste 80 instrucțiuni, multe din ele foarte puternice și specializate.
Arhitectura de tip RISC (Reduced Instruction Set Computer): este un concept de realizare a CPU care a început să fie utilizat cu succes de ceva timp și la realizarea microcontrolerelor. Prin implementarea unui set redus de instrucțiuni care se pot executa foarte rapid și eficient, se obține o reducere a complexității microcircuitului, suprafața disponibilizată putând fi utilizată în alte scopuri.
Există o mare varietate de producători de microcontrolere, din și amintim:
Texas Instruments: pe lângă faptul că sunt printre cei mai buni în procesarea numerică a semnalelor, Texas Instruments produc MSP430, un microcontroller de putere mică pe 16 biți.
Renesas Technology Corporation: este o intreprindere unită compusă din Hitachi, Mitsubishi Electric și NEC Electronics, astfel au creat cel mai mare producător de microcontrolere din lume.
Microchip: ofera soluții pentru întreaga gama de performanță pe 8 biți (PIC12, PIC16, PIC18), pe 16 biți (PIC24) și pe 32 biți (PIC32). Prezintă o arhitectură puternică, instrumente de dezvoltare ușor de folosit și documentatie tehnica complectă.
De la stânga la dreapta microcontrolere PIC16, PIC24, PIC32.
Intel Corporation: popular producător al microprocesorului Pentium, adițional la plăci de bază, procesoare pentru PC, microcontrolere, produse ethernet, memorii flash și multe altele.
Atmel Corporation: lider mondial în proiectare și producția microcontrolelor, furnizează industria electronică cu soluții de sisteme complete concentrate pe industrie, consumator, securitate, comunicații și automotive. Producția lor cuprinde microcontrolere (8 biți AVR, 32 biți AVR, bazate pe AMR și derivate intel 8051), dispozitive de radio frecvență, memorii EEPROM și memorii flash.
Microcontroler Atmega 8-16 PU.
Dallas Semiconductor: produce o linie de microcontrolere Flash 8051 de mare performanță, precum și microcontrolere „securizate”, un model 8051 cu baterie internă pentru a mentine SRAM-ul pornit.
Freescale Semiconductor: producător de o mare varietate de semiconductoare, incluzând un număr de familii de microcontrolere de la 8 biți la 32 biți. Anterior cunoscuți ca Motorola.
Actuatori
Conform putem spune că un actuator este un tip de motor responsabil pentru deplasarea sau controlul unui mecanism sau sistem. Acesta este operat de o sursă de energie, curent electric, sistem hidraulic sau pneumatic, și transformă acea energie în mișcare. Sistemele de control pot fi simple, bazate pe un software (driver), un om sau orice altă intrare.
Un actuator hidraulic constă într-un cilindru sau motor care utilizează energia hidraulică pentru a executa o operație mecanică. Mișcarea mecanică oferită poate sa fie liniară, rotativă sau oscilatorie. Un dispozitiv hidraulic poate exercita o forță considerabilă deoarece lichidul este aproape incompresibil, dar, este limitat în accelerație și viteză.
Un actuator pneumatic convertește energia formată prin vid sau aer comprimat într-o mișcare liniară sau de rotație. Un mare avantaj al acestei acționări este răspunsul rapid la pornire și oprire deoarece sursa de putere nu trebuie neapărat păstrată în rezervoare.
Principiul de funcționare al unui actuator hidraulic.
Actuatorul electric este alimentat de un motor care transformă energia electrică în cuplu mecanic. Acesta este unul dintre cele mai curate și mai ușor accesibile forme de actuație deoarece nu implică uleiuri.
Actuatorul mecanic funcționează prin transformarea mișcării de rotație în mișcare de translație. Această actuatie necesită roți dințate, șine, scripeți, lanțuri și alte dispozitive pentru a funcționa.
Măsurătorile de performanță pentru actuatori includ viteză, accelerație, forța, viteză unghiulară, accelerație unghiulară, cuplu, eficiența energetică, masă, volum, condiții de funcționare și nu în ultimul rând durabilitate.
Inginerie software
Lecturând aflăm că ingineria software se ocupă cu crearea sau dezvoltarea unor soluții software la anumite probleme date, urmărind obținerea unor anumite caracteristici ale produsului software, respectând constrângerile bugetare sau de altă natură, urmând un anumit ciclu de dezvoltare. Ingineria software combină cunoștințele de matematică, management, business și cunoștințele specifice din domeniul software pentru soluționarea problemei date.
Din alfăm că modelul cascadă, model de dezvoltare a programelor de calculator, are avantajul că fiecare fază a programării se poate gestiona separat. Astfel se poate plăti separat pentru îndeplinirea fiecărei din aceste etape. Un dezavantaj este faptul că dacă pe parcursul dezvoltării proiectului apar noi cerințe, acestea sunt greu de adăugat în etapa de design.
Modelul cascadă
Acest model conține cinci etape în realizarea programelor de calculator: obținerea cerințelor, designul, programarea efectivă, verificarea și testarea și în cele din urmă întreținerea.
Evoluția ingineriei software
Scrierea unui program a evoluat într-o profesie preocupată cu maximizarea calității soft-ului și modul de creare. Calitatea se poate referi la cât de ușor este de întreținut, stabilitatea, viteza, ușurința de utilizare, testabilitatea, lizibilitatea, dimensiunea, costul, securitatea și numărul de defecte sau „bug-uri”, precum și calități mai puțin măsurabile, cum ar fi eleganța, concizia și satisfacerea clienților.
Din aflăm că cea mai importantă parte a evoluție a fost apariția de noi calculatoare aproape în fiecare an. Softiști au fost nevoiți să rescrie programele pentru a rula pe noile calculatoare. Domeniul era atât de nou astfel încât ideea de management de program era practic inexistentă. Efectuarea unei previziuni de finalizare a proiectelor era aproape imposibilă.
Termenul de „inginerie software” a apărut pentru prima dată la sfârșitul anilor 1950, începutul anilor 1960. Programatorii erau cunoscuți ca ingineri în calculatoare și electronică dezbătând ce ar putea însemna ingineria pentru software.
Ingineria software a fost stimulată de așa zisa criză software din anii 1960-1980, care a identificat multe din problemele de dezvoltare software. Multe proiecte soft au sărit peste buget și program. Criza software era inițial definită în termeni de productivitate, dar mai târziu a evoluat în termeni de accentuare a calității.
Rezolvarea acestei crize a fost un punct de extremă importanță pentru cercetătorii și companiile producătoare de instrumente software. Costurile pentru deținere și întreținere a soft-ului în anii 1980 era de două ori mai scump decât costul de dezvoltare a soft-ului. Trei sferturi din produsele software de mari dimensiuni livrate la clienți au fost fie eșecuri, fie nu au fost folosite deloc.
Ascensiunea internetului a dus la o creștere foarte rapidă a cererii de informație și a sistemului de e-mail pe World Wide Web. A fost necesar ca programatorii să se ocupe ilustrații, hărți, fotografii, imagini și animații simple la o rată nemaivăzută pană atunci. Creșterea utilizării browser-ului, rulând pe limbaj HTML, a schimbat modul in care se organiza afișarea și recuperarea informațiilor.
Arhitectura proiectului
Capitolul este împărțit în subcapitole ce descriu elemente componente de circuit, interfața cu utilizatorul și prezentarea machetei.
Pentru a putea identifica cu ușurință fiecare aplicație în parte se vor prezenta elementele componente cum ar fi dioda emițătoare de lumină, senzorul de temperatură, elementele de răcire și încălzire, motorul de curent continuu, servo motorul, fotorezistența, dioda laser și buzzerul piezoelectric.
În a doua parte se va prezenta interfața cu utilizatorul și cum se folosește aceasta iar în partea a treia va fi prezentată macheta identificând plasamentul fiecarei aplicații în parte.
Intoducere
În acest proiect se vor implementa cinci funcții: controlul iluminării, controlul temperaturii, controlul jaluzelelor, controlul ușii de garaj și un sistem de alarmă. În cele ce urmează se va prezenta pe scurt fiecare aplicație în parte.
Controlul iluminării este cea mai simplă funcție care se poate implementa în locuință. Ea constă în a stinge și aprinde luminiile în fiecare cameră în parte cu o simplă apăsare de buton, în cazul de față un buton de pe o pagină Web care reprezintă interfața de utilizare a sistemului.
Controlul temperaturii este practic un termostat controlat de la distanță. Folosește un senzor care detectează temperatura din incintă și în funcție de temperatura setată va porni elementul de răcire sau elementul de încălzire.
Controlul jaluzelelor reprezintă controlul unui motor de curent continuu atașat la un arbore pe care se va înfășura materialul. Materialul trebuie să aibă o greutate la bază pentru a fi ținut drept.
Controlul ușii de garaj presupune controlul unui servo motor care va ridica și coborâ ușa de garaj.
Sistemul de alarmă funcționează pe principiul „tripwire” folosind o diodă laser și o fotorezistență.
Toate funcțiile prezentate vor fi implementate intr-o machetă. Acestea pot fi controlate prin intermediul internetului datorită platformei de dezvoltare Arduino Ethernet.
Modulul electronic
Arduino Ethernet
Proiectul este construit în jurul platformei de dezvoltare Arduino Ethernet. Aceasta este o placă bazată pe microcontrolerul ATmega328. Ea are 14 pini digitali de intrare sau ieșire și 6 intrări analogice, o conexiune RJ45, un jack de alimentare și un buton de resetare.
Din prezentarea producătorului aflăm că Arduino Ethernet diferă de alte plăci prin faptul că nu are un cip integrat pentru comunicarea USB-Serial, dar, în schimb, are o interfață Ethernet Wiznet, aceeași interfață găsite pe Ethernet Shield.
Prezintă un cititor de carduri microSD integrat, care poate fi folosit pentru a stoca fișiere pentru a fi folisite în rețea, este accesibil prin intermediul Bibliotecii SD.
Platforma de dezvoltare Arduino Ethernet.
Capătul de programare serială cu 6 pini este compatibil cu adaptorul serial USB și, de asemenea, cu conectorii USB FTDI. Acesta oferă suport pentru resetare automată, care permite încărcarea schițelor fără a apăsa butonul de resetare de pe placă. Atunci când este conectat la un adaptor USB-Serial, Arduino Ethernet este alimentat de la acesta.
Conectorul FTDI folosit pentru programare.
Controlul iluminării
Dioda emițătoare de lumină
Din articolul diodele emițătoare de lumină, uzual cunoscute ca LED-uri, sunt eroi necunoscuți din lumea electronicelor. Ei fac zeci de lucruri diferite și se găsesc în tot felul de dispozitive. Practic, LED-urile sunt doar becuri mici, care se potrivesc cu ușurință într-un circuit electric, dar, spre deosebire de becurile incandescente obișnuite, ele nu au un filament care va arde și nu se încălzesc.
LED-urile folosite în proiect.
În acest proiect au fost folosite LED-uri albe pe post de becuri pentru fiecare cameră în parte, un LED verde pentru atenționare când sistemul de alarmă nu este declanșat și un LED roșu ce indică faptul că alarma este pornită.
Controlul temperaturii
Senzorul de temperatură
De pe pagina producătorului , Texas Instruments, aflăm că produsele din seria LM35 sunt senzori de temperatură de precizie cu circuit integrat, cu o tensiune de ieșire proporțională cu temperatura în °Celsius. LM35 nu are nevoie de nici o calibrare externă pentru a oferi o precizie tipică de ±¼°C la temperatura camerei și ±¾°C în intervalul de temperatură -50 °C +150 °C.
Din această serie am ales modelul LM35DZ, model care se prezintă într-o carcasă TO-92 cu 3 pini.
Senzorul de temperatură LM35DZ.
Elementele de răcire și încălzire
Ca element de răcire am ales un ventilator de 12V, ventilator acționat de un motor de curent continuu fără perii. Element de încălzire ales este un bec de 12V la 10W.
Ventilator 12V și bec 12V.
Controlul jaluzelelor
Motorul de curent continuu
Din aflăm că un motor de curent continuu se bazează pe principiul polilor magnetici și anume polii de același fel se resping iar polii diferiți se atrag. O bobină pin care trece un curent generează un câmp electromagnetic aliniat cu centrul bobinei. În funcție de conexiunile de pe câmp electromagnetic la sursa de alimentare, caracteristicile de viteză și cuplu ale unui motor de curent continuu cu perii poate fi modificată pentru a oferi viteză constantă sau de a accelera invers proporțională cu sarcina mecanică.
În acest proiect au fost folosite micro motoare (recuperate din telefoane mobile, deoarece sunt suficiente pentru mărimea machetei). Motoarele au fost folosite pentru aplicația de vibrații, ca urmare prezintă o greutate excentrică pe arborele de rotație. Greutatea excentrică nu a fost îndepărtată deoarece în cazul de față viteza de rotație este mică, deci greutatea nu ne afecteaza foarte mult.
Micro motor de curent continuu cu perii.
Motorul de curent continuu cu perii este un motor cu comutație internă conceput să meargă cu o sursă de curent cuntinuu. Motoare de curent continuu cu perii poate fi variate în viteză prin modificarea tensiunii de operare sau intensității câmpului magnetic.
Un comutator este o partea mobilă a unui întrerupător electric rotativ în anumite tipuri de motoare electrice care inversează periodic direcția curentului între rotor și circuitul exterior. Comutatorii au două sau mai multe perii metalice moi în contact cu aceștia care au rolul de a completa cealaltă jumătate a comutatorului.
Controlul ușii de garaj
Servomotorul
După lecturarea din putem spune că un servomotor este un actuator de acționare rotativ, care permite un control precis al poziției unghiulare, vitezei și accelerației. Acesta constă dintr-un motor adecvat, cuplat la un senzor de confirmarea a poziției. Este nevoie, de asemenea, de un controler relativ sofisticat, de multe ori un modul dedicat special conceput pentru utilizarea cu servomotoare.
Servomotoarele nu sunt o clasă specifică de motore cu toate că termenul de servomotor este adesea utilizat cu referire la un motor potrivit pentru utilizarea într-un sistem de control în buclă închisă.
Exemplu de schemă bloc a unui mecanism cu bucla închisă.
Pentru controlul ușii de garaj am ales un micro servomotor de la firma FeeTech. Este un motor cu perii, modulație analogă cu un unghi de rotație de maxim 120°. Acest servo poate fi controlat utilizând o conexiune directă la un singur pin de intrare/ieșire al microcontrolerului fără piese electronice suplimentare.
Micro servomotorul FS90.
Sistemul de alarmă
Fotorezistența
O fotorezistență este o componentă pasivă de circuit. Cunoscută și sub numele de rezistor dependent de lumină, este practic un rezistor, al cărei rezistență variază în funcție de intensitatea luminii.
Pincipiul de funcționare al fotorezistenței.
În aplicația noastră, ca componentă a unui sistem de alarmă, folosim fotorezistența pe post de senzor de lumină, detectând astfel intensitatea razei diodei laser care „cade” pe aceasta. Fotorezistența a fost introdusă într-un tub de plastic pentru a reduce interferentele luminii ambientale.
Fotorezistența.
Dioda laser
O diodă laser, este un semiconductor în care mediul activ este format dintr-o joncțiune p-n similar cu cel găsit într-o diodă emițătoare de lumină. Un avantaj față de LED este că raza de lumină a unei diode laser este concentrată într-un punct și are o intensitate mai mare.
Diodele laser au o gamă foarte largă de utilizări care includ comunicațiile prin fibre optice, cititoare de coduri de bare, laser pointer, citire și înregistrare CD / DVD / Blu-ray, imprimare cu laser, scanare și nu numai.
Pentru proiect am folosit dioda laser dintr-un laser pointer roșu cu o putere de 5mW și lungimea de undă de 650nm.
Laser pointer roșu.
Laser pointerul a fost dezansamblat, astfel am obținut doar dioda laser, fără carcasă, fiind mai ușor de manipulat și integrat în aplicație. Acesta avea atașat un LED alb care a fost demontat.
Dioda laser obținută.
Buzzerul piezoelectric
Buzzerul piezoelectric, așa cum este prezentat în , este un dispozitiv electronic utilizat în mod obișnuit pentru a produce un sunet. El se bazează pe principiul invers al piezo electricității.
Materialele piezo electrice pot fi naturale sau sintetice. Piezoceramic este o clasă de materiale create de om, care dețin efectul piezoelectric și este utilizat pe scară largă.
Buzzer piezoelectric.
Buzzerul folosit în acest proiect este încapsulat într-un înveliș cilindric din material plastic, acesta are o gaura în partea superioară care ajută la propagarea sunetului. Acesta prezintă un disc metalic de culoare galbenă, care joacă un rol important în producerea sunetului.
Programul de comandă
În continuare va fi prezentată în detaliu interfața cu utilizatorul, pagina Web. Am ales un design simplu, plăcut și intuitiv. Interfața prezintă cinci chenare, câte unul pentru fiecare aplicație implementată.
Controlul iluminării
În aceasta aplicație se vor controla LED-urile corespunzătoare fiecărei încăperi. În machetă sunt prezente patru încăperi: camera 1 și 2, holul și garajul. Interfața prezintă câte un buton pentru fiecare încăpere în parte.
Textul din interiorul butonului reprezinta starea LED-ului, acesta se va schimba în funcție de starea LED-ului și anume ON când luminează și OFF când nu luminează. La inițializarea programului toate butoanele vor avea starea OFF.
Dacă se dorește aprinderea luminii într-o anumită încăpere se va da click pe butonul corespunzător acelei încăperi. Desigur, starea butonului se va schimba.
Interfața corespunzătoare aplicației de control al iluminării.
Aplicația se poate accesa de la mai multe calculatoare în același timp deoarece starea butonului, respectiv LED-ului, se va actualiza corespunzător.
Controlul temperaturii
Modulul de control al temperaturii se prezintă cu o interfață puțin mai complexă. Aici este afișată temperatura citită de senzorul LM35DZ, temperatură care se actualizează în timp real. Mai avem afișată o valoare, sub numele de temperatura dorită, care reprezintă valoarea temperaturii care o dorim în acea încăpere. În final sunt prezente două butoane: cel cu săgeata în jos va decrementa valoarea temperaturii dorite iar cel cu săgeata în sus va incrementa această valoare.
Interfața corespunzătoare aplicației de control al temperaturii.
Modul de funcționare este relativ simplu. La inițializarea programului valoarea temperaturii dorite va fi mereu 20°C.
Pentru a seta o anumită temperatură va trebui să incrementăm sau să decrementăm valoarea temperaturii dorite prin apăsarea butonului cu săgeata în sus respectiv săgeată în jos până când ajungem la temperatura dorită. Atenție însă, incrementarea se face cu unu.
Programul va compara această valoare cu valoarea temperaturii actuale, temperatura citită de senzor, și va acționa în funcție de aceasta. Va porni elementul de încălzire dacă temperatura setată este mai mare decât cea citită de senzor, sau elementul de răcire, în caz contrar.
Controlul temperaturii se poate accesa de la mai multe dispozitive deoarece valoare temperaturii dorite se va actualiza în timp real.
Controlul jaluzelelor
Interfața aplicației de control al jaluzelelor are un sigur buton pentru închiderea și deschiderea jaluzelelor. Textul prezent în interiorul butonului reprezintă starea în care se află jaluzelele CLOSED dacă acestea sunt închise și OPENED dacă acestea sunt deschise.
Interfața corespunzătoare aplicației de control jaluzelelor.
La apăsarea butonului programul trimite un semnal la motorele de curent continuu de la jaluzele, acesta se va roti în sensul indicat. Între timp programul va aștepta un anumit timp până când jaluzeaua ajunge în poziția indicată apoi va da o comandă de stop.
Controlul ușii de garaj
La modulul de control al ușii de garaj interfața este foarte simplă, desigur, datorită simplității aplicației în sine. Este prezent un sigur buton, textul din interiorul butonului arată starea ușii de garaj: CLOSED dacă ușa e închisă, respectiv, OPENED dacă aceasta este deschisă.
Interfața corespunzătoare aplicației de control al ușii de garaj.
Modul de operare este la fel de simplu. Dacă se dorește deschiderea sau închiderea ușii se poate apăsa butonul. În acel moment programul va trimite un semnal la servomotor și ușa va executa comanda cerută.
Sistemul de alarmă
Interfața sistemului de alarmă prezintă două butoane. Un buton care controlează pornirea sau oprirea sistemului și un buton de resetare. Textul din interiorul butonului va arăta starea sistemului respectiv daca este ON sistemul e pornit, iar daca este OFF sistemul este oprit.
Interfața corespunzătoare sistemului de alarmă.
Modul de functionare este simplu deoarece sistemul de alarmă se poate opri sau porni printr-o simplă apăsare de buton.
Dacă sistemul este pornit și raza laser este întreruptă va fi declanșată alarma. Singura modalitate de a opri alarma constă în apăsarea butonului RESET, acesta va reseta alarma, dar atenție, nu va schimba starea sistemului, deci dacă raza laser va fi întreruptă dinou alarma va reporni.
Adițional la alarma sonoră, dată de buzzer, se va aprinde și un LED roșu. Alternativ, dacă alarma nu este activată, va fi aprins un LED verde.
Macheta
Macheta este proiectată în CATIA și a fost realizată din OSB care a fost ulterior vopsit pentru o aparență mai placută.
Ea este împărțită în patru încăperi: camera 1 și 2, holul și garajul. În fiecare cameră este amplasată una din aplicațiile de domotică prezentate mai sus, cu excepția aplicației de control al iluminării care este prezentă în toate cele patru încăperi.
Camera 1 este atribuită controlului jaluzelelor. Sunt prezente două jaluzele, una pe peretele din față și una pe peretele din stânga.
În camera 2 se afla modulul de control al temperaturii. Această încăpere este închisă pentru a se păstra temperatura cu un capac de plexiglass transparent. Aici sunt prezente senzorul de temperatură LM35DZ, becul de 10W pe post de element de încălzire și ventilatorul pe post de element de răcire.
Holul adăpostește sistemul de alarmă. Aici se află desigur dioda laser și fotorezistența. Pe langă aceste două elemente sunt instalate și un LED roșu, un LED verde și desigur un buzzer piezoelectric.
În cele din urmă avem garajul, care cuprinde controlul ușii de garaj. În această încăpere sunt prezente servomotorul și ușa de garaj construită dintr-un plexiglass negru.
În dreapta machetei se pot observa placa de dezvoltare Adruino Ethernet și breadboard-ul pe care se va realiza circuitul.
Amplasarea aplicațiilor în machetă
Structura proiectului
În capitolul precedent am văzut cum arată și cum se comportă fiecare element al funcțiilor implementate, în acest capitol, se va prezenta cum funcționează aceste funcții.
În prima parte vor fi prezentate scheme electrice pentru fiecare modul în parte, iar în partea a doua vor fi prezentate și explicate bucăți din cod, pentru fiecare funcție, inclusiv modul prin care se face comunicarea între Arduino și interfața cu utilizatorul, pagina Web.
Partea a treia va conține o prezentare a programului de proiectare asistată CATIA și a modului de lucru în acesta.
Introducere
Schemele electrice au fost realizate în soft-ul EDraw Max, un soft pentru diagrame tehnice 2D. Acesta ajută la crearea de scheme logice, diagrame de organizare, diagrame de rețea, planuri de cladire, diagrame de flux de lucru, diagrame de afaceri și diagrame de inginerie. Programul este disponibil doar pentru Windows. Diagramele create în EDraw pot fi transferate în Word, Excel, PowerPoint, pe lânga acestea se pot salva și in formate PDF, SVG, JPEG și PNG.
Programul a fost scris în mediul pus la dispoziție de Arduino. Mediul open source face scrierea, compilarea și încarcarea codului pe platforma de dezvoltare mai ușoară. Acesta rulează pe sistemele de operare Windows, Mac și Linux. Programul a fost scris în limbajul de programare C++.
Codul paginii Web a fost scris în Notepad++, un program gratuit, bun înlocuitor al Notepad-ului și un bun editor al codului sursă ce poate suporta mai multe limbaje de programare. Rulează doar pe sistemul de operare Windows. Pentru scrierea codului paginii Web am folosit limbajele de programare HTML, CSS, XML și Javascript.
Macheta a fost proiectată în CATIA v5 un program cunoscut de proiectare asistată. CATIA este dezvoltat de firma franceză Dassault Systemes și suportă mai multe etape ale dezvoltării unui produs, de la concepție, proiectare (CAD), fabricare (CAM), și analiză (CAE). Din multitudinea de module care sunt prezente în CATIA, pentru acest proiect, am folosit din Mechanical Design modulele: Part Design pentru modelarea fiecărei piese în parte, Assembly Design pentru ansamblarea componentelor și modulul Drafting pentru realizarea desenelor de execuție.
Modulul electronic
Controlul iluminării
Un mare dezavantaj al platformei de dezvoltare Arduino Ethernet este faptul că aceasta aduce o limitare la numărul de pini care pot fi folosiți. În reprezentarea platformei pentru schema electrică am colorat cu roșu pinii folosiți de diferite funcții ale platformei.
Din cauza limitării numărului de pini care pot fi folosiți am ajuns la soluția de a controla patru LED-uri cu doi pini. În Figura 27 se poate observa modul de conectare a celor patru LED-uri. În această schemă sunt prezente două rezistoare de 470Ω și, desigur, cele patru LED-uri. Pinii A2 și A3 sunt folosiți în cazul de față ca ieșiri și intrări digitale.
Schema electrică a modulului de control al iluminării.
Controlul temperaturii
Schema electrică a plicației de control al temperaturii este formată din cinci rezistori de 10kΩ, doi tranzistori TIP122, un ventilator, un bec, senzorul de temperatură, un condensator de 1µF și o sursă de 12V.
Baza tranzistorilor este legată în serie cu o rezistență echivalentă de 3,3kΩ la pinii 7 și 8 ai platformei Arduino. Colectorul este legat la minusul becului respectiv ventilatorului iar emitorul este legat atât la împământarea platformei Arduino cât și la împământarea sursei de 12V. Plusul becului respectiv ventilatorului sunt legați la plusul sursei de 12V.
Pin-ul de semnal al senzorului de temperatură este legat în serie cu un rezistor de 10kΩ la pinul A5, folosit ca intrare analogică. Pin-ul de împământarea în serie cu un condensator de 1µF la împământarea platformei și pinul de V+ la pinul de 5V al platformei Arduino.
Schema electrică a modulului de control al temperaturii.
Senzorul de temperatură LM35DZ
Din amintim următoarele caracteristici ale senzorului de temperatură LM35DZ:
Calibrat direct în °C;
Factor scalar liniar +10 mV / °C;
Asigură o precizie de ±0,6 °C;
Intervalul de masurare între -55 °C și 150 °C;
Funcționează între 4 și 30V;
Consum de curent mai mic de 60 mA;
Auto încălzire scăzută 0,08 °C în atmosferă calmă;
Impedanță la ieșire redusă 0,1 Ω pentru o sarcină de 1 mA;
Carcasă de plastic TO-92;
Temperatura de stocare între -60 °C și 150 °C;
Temperatura de lucru între 0 °C și 100 °C;
Neliniaritate ±0,2 °C;
Curent în repaus 91 µA;
Variația curentului în repaus 0,2 µA;
Coeficientul de temperatură în repaus +0,39 µA / °C;
Stablitate pe termen lung ±0,08 °C.
Controlul jaluzelelor
Pentru controlul motoarelor în ambele sensuri de rotație am folosit o punte H. Pinii 5 și 6 sunt folosiți pentru a trimite semnalul de comandă la puntea H, aceștia sunt folosiți cu funcția PWM.
Schema electrică a modulului de control al jaluzelelor.
Puntea H
Din aflăm că o punte H este un circuit electronic care permite o tensiune să fie aplicată în orice direcție. Aceste circuite sunt adesea folosite în robotică și alte aplicații, pentru a permite motoare de curent continuu să ruleze înainte și înapoi.
Circuitul este folosit în general pentru a inversa polaritatea motorului, dar poate fi folosit și pentru a frână motorul, în cazul în care motorul trebuie oprit brusc, terminale motorului sunt scurtcircuitate, sau pentru a permite motorului o rulare liberă până la oprire, motorul este deconectat de la circuitu.
Modul de funcționare a unei punți H.
Pulse Width Modulation
Conform putem spune că PWM (Pulse Width Modulation) este o tehnică folosită pentru a varia în mod controlat tensiunea dată unui dispozitiv electronic. Această metodă schimbă foarte rapid tensiunea oferită dispozitivului respectiv din ON în OFF și invers.
Perioada de timp corespunzătoare valorii ON dintr-un ciclu ON-OFF se numește factor de umplere (duty cycle) și reprezintă, în medie, ce tensiune va primi dispozitivul electronic. Astfel, se pot controla circuitele analogice din domeniul digital.
Practic, asta înseamnă că un LED acționat astfel se va putea aprinde sau stinge gradual, iar în cazul unui motor acesta se va învârti mai repede sau mai încet.
Semnale PWM cu factori diferiți de umplere pe platforma Arduino.
Factorul de umplere se exprimă în procente și reprezintă cât la sută din perioada unui semnal acesta va fi pe nivelul ON. În Figura 31 se pot observa semnale PWM cu factori de umplere diferiți.
Multe circuite digitale pot genera semnale PWM. Majoritatea microcontrollerelor oferă această facilitate, pe care o implementează folosind un numărător care este incrementat periodic și care este resetat la sfârșitul fiecărei perioade a PWM-ului. Când valoarea numărătorului este mai mare decât valoarea de referință, ieșirea PWM (output-ul) trece din starea HIGH în starea LOW (sau invers).
Controlul ușii de garaj
Schema electrică pentru aplicația de control al ușii de garaj conține doar micro servomotorul FS90 deoarece conexiunea acestuia se face direct, fără alte piese electronice adiționale. Firul portocaliu este legat la pinul 3, folosit ca pin de ieșire, firul roșu este legat la pinul de 5V al platformei iar pentru a închide circuitul firul negru este legat la împământare.
Schema electrică a modulului de control al ușii de garaj.
Sistemul de alarmă
Sistemul de alarmă este format din două părți: partea de securitate care funcționează printr-un sistem tripwire și parte de atentionare.
Partea de atenționare conține un LED verde care are anodul legat în serie cu un rezistor de 470Ω la pinul de 5V al platformei Arduino și catodul la pinul 9. Un LED roșu cu anodul legat în serie cu un rezistor de 470Ω la pinul 9 și catodul la împământarea platformei. Mai este prezent un buzzer piezoelectric legat în paralel cu LED-ul roșu. Pinul 9 este folosit ca pin digital de ieșire.
Sistemul tripwire este format din dioda laser legata între 3,3v și împământarea platformei și o fotorezistență legată la pinul de 5V și la pinul A4 al platformei Arduino. Adițional am adăugat un rezistor de 10kΩ în serie cu un potențiometru de 10kΩ folosit pe post de rezistor reglabil legate între pinul A4 și împământarea platformei. Pinul A4 este folosit ca intrare analogică.
Schema electrică a sistemului de alarmă.
Această rezistență echivalentă este folosită pe post de rezistență de pull down. După ce am facut câteva măsurători am aflat că rezistența fotorezistenței variază între 200Ω la lumină și 3.2kΩ la întuneric. În acest fel am ales ca rezistența de pull down să fie undeva la mijlocul intervalului.
Intrarea analogică este de înaltă impedanță ceea ce înseamnă că atunci când fotorezistența este legată între 5V și intrarea analogică nu trece curent. Dacă nu este un curent care trece prin fotorezistență, atunci nu există nici o cădere de tensiune la bornele acesteia. În acest caz valoarea citită va fi mereu maximă deoarece prin intrarea analogică se citește tensiunea, nu rezistență. Rezistența de pull down face curentul să treacă prin fotorezistență, în acest fel diferite nivele de lumină duc la diferiți curenți, prin urmare, tensiuni diferite pe care intrarea analogică le poate măsura.
Programul de comandă
Serverul Web pe Arduino Ethernet
Înainte de a crea un server Web pe platforma Arduino Ethernet avem nevoie să declarăm câteva variabile: un buffer pentru a reține solicitările HTTP, adresa MAC a platformei Arduino, adresa IP, portul la care se va creea serverul, o variabilă pentru pagina Web de pe cardul SD și două variabile char folosite pentru solicitările HTTP.
#define REQ_BUF_SZ 60 // Size of buffer used to capture HTTP requests
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x36, 0x14 }; // MAC address
IPAddress ip( 192, 168, 1, 177 ); // IP address
EthernetServer server(80); // Create a server at port 80
File webFile; // The web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // Buffered HTTP request stored as null terminated string
char req_index = 0; // Index into HTTP_req buffer
Deoarece folosim o pagină Web stocată pe un card micro SD este nevoie, în funcția setup, de a verifica prezența cardului și a fișierului index.htm pe acesta. Verificarea se realizează în două bucle if. Un text va apărea în monitorul serial pentru a confirma dacă s-a găsit sau nu cardul și fișierul de pe acesta.
void setup()
{
Serial.begin(9600); // Start serial communication
// Initialize SD card
Serial.println(F("Initializing SD card…"));
if (!SD.begin(4)) {
Serial.println(F("ERROR – SD card initialization failed!"));
return; // Init failed
}
Serial.println(F("SUCCESS – SD card initialized."));
if (!SD.exists("index.htm")) { // Check for index.htm file
Serial.println(F("ERROR – Can't find index.htm file!"));
return; // Can't find index file
}
Serial.println(F("SUCCESS – Found index.htm file."));
Ethernet.begin(mac, ip); // Initialize Ethernet device
server.begin(); // Start to listen for clients
}
După ce s-au făcut aceste verificari se vor da comenzile de pornire a serverului Web și de așteptare solicitările de la browser.
Solicitarea de la browser
Când navighezi la adresa IP a serverului Arduino, browser-ul Web (clientul), va trimite o solicitare la server (Figura 34). Informațile din solicitare pot fi diferite, în funcție de browser-ul și sistemul de operare de unde solicitarea a fost trimisă.
Un model de solicitare browser – Web server.
Caracterele \r \n care apar la sfârșitul fiecărei linii de text sunt caractere invizibile. \r este caracterul de retur iar \n este caracterul de linie nouă. Ultima linie în care sunt prezente doar aceste două caractere este linia asteptată de program înainte să trimită un răspuns. Acest lucru se întâmplă în funcția loop.
EthernetClient client = server.available(); // Try to get client
if (client) { // Got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // Client data available to read
char c = client.read(); // Read 1 byte (character) from client
// Limit the size of the stored received HTTP request
// Buffer first part of HTTP request in HTTP_req array (string)
// Leave last element in array as 0 to null terminate string (REQ_BUF_SZ – 1)
if (req_index < (REQ_BUF_SZ – 1)) {
HTTP_req[req_index] = c; // Save HTTP request character
req_index++;
}
Cu alte cuvinte schița (programul de pe Arduino) citește fiecare caracter din solicitarea trimisă și recunoaște sfârșitul acesteia atunci când ajunge la linia goală.
Răspunsul de la server
După primirea solicitării pentru o pagină Web de la browser, server-ul trimite prima dată un răspuns HTTP standard și apoi pagina de Web în sine (Figura 35).
Un model de răspuns trimis de Adruino.
După cum se vede în imagine și în răspunsul de la server apar caracterele invizibile \r \n. Funcția println() din schiță adaugă automat caracterele \r \n la sfârșitul fiecărui rând. Răspunsul HTTP se termină cu o simplă linie de cod „client.println();”, care adaugă caracterele \r \n fără text în fața lor.
// Send a standard http response header
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println(F("Connection: keep-alive"));
client.println();
Pagina Web
Deoarece folosim un fișier XML care conține starea fiecărei aplicații în parte porgramul va verifica în ce constă solicitarea de la browser, pagina Web sau fișierul XML după care va trimite fișierul solicitat.
Dacă solicitarea este legată de pagina Web programul va citi pagina de pe cardul SD și o va trimite către browser.
// Web page or XML page is requested
if (StrContains(HTTP_req, "ajax_inputs")) { // Ajax request – send XML file
XML_response(client); // send XML file containing functions state
}
else { // Web page request
// Send web page
WebFile = SD.open("index.htm"); // Open web page file
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // Send web page
}
webFile.close();
}
Pagina Web conține JavaScript, care este utilizat ca parte a procesului Ajax. Codul JavaScript trimite o solicitare Ajax la Arduino și continuă să trimită o cerere la fiecare secundă.
function GetArduinoIO(){
nocache = "&nocache=" + Math.random() * 1000000;
var request = new XMLHttpRequest();
request.onreadystatechange = function(){
if (this.readyState == 4) {
if (this.status == 200) {
if (this.responseXML != null) {
// XML file received
}
}
}
// send HTTP GET request
request.open("GET", "ajax_inputs" + nocache, true);
request.send(null);
setTimeout('GetArduinoIO()', 1000);
}
}
Solicitarea Ajax și Fișierul XML
Avantajul în a folosi Ajax cu un fișier XML este că valorile individuale pot fi extrase cu ușurință de JavaScript pe pagina de web. Un fișier XML foloseste etichete, cum ar fi HTML sau XHTML.
Fișierul are o etichetă inițială care îl identifică ca un fișier XML. Urmează o etichetă definit de utilizator, care conține toate celelalte etichete. Arduino creează un fișier XML și introduce starea aplicaților și valorile intrărilor analogice între etichete. Fișierul XML este trimis la browser-ul web ca răspuns la o solicitare Ajax pentru date.
Fișierul XML este de forma:
<?xml version = \"1.0\" ?>
<inputs>
<TEMP>25</TEMP>
<ALARMT>ON</ALARMT>
<LED>OFF</LED>
</inputs>
În cele din urmă codul în JavaScript din pagina Web extrage valorile din fișierul XML și le afișează pe pagina Web.
Comunicarea dintre pagina Web și program
Comunicarea între cele două parți programate se face prin fișierul XML.
Programul de pe platforma Arduino folosește funcția XML_response() care generează și trimite fișierul XML în formatul care a fost deja explicat.
// Send the XML file with functions status
void XML_response(EthernetClient cl)
{
cl.print("<?xml version = \"1.0\" ?>");
cl.print("<inputs>");
// Temperature sensor value
cl.print("<TEMP>");
cl.print(Temp_val);
cl.println("</TEMP>");
// LED 1 state
cl.print("<LED>");
if (LED_state[0]) {
cl.print("on");
}
else {
cl.print("off");
}
cl.println("</LED>");
cl.print("</inputs>");
}
Pe pagina Web datele sunt extrase din fișierul XML primit folosind următoarea linie de cod:
this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue;
Funcționarea butoanelor
Atât în programul de pe Arduino cât și în codul paginii Web există variabile care salvează starea fiecărei aplicații în parte. Această stare este transmisă între program și pagina Web prin fișierul XML. În program aceasta apare sub forma „boolean Aplicație_state” iar în pagina Web „var Aplicație_state”.
La fiecare apăsare a unui buton se apelează o funcție care verifică starea aplicației și atașează fiecarui stare un șir de caractere. Aceste șiruri de caractere sunt reținute în cadrul paginii Web în variabile de forma „strAplicație” care inițial nu conțin nici un caracter.
function GetButtonAlarmT(){
if (AlarmT === 1) {
AlarmT = 0;
strAlarmT = "&AlarmT=0";
}
else {
AlarmT = 1;
strAlarmT = "&AlarmT=1";
}
}
În funcție de starea aplicației primită prin fișierul XML, scriptul de pe pagina Web trimite șirul de caractere corespunzător către program. Acesta citește șirul de caractere iar în funcție de el execută anumite funcții.
if (StrContains(HTTP_req, "AlarmT=1")) {
AlarmT_state = 1; // Save alarm state ON
}
else if (StrContains(HTTP_req, "AlarmT=0")) {
AlarmT_state = 0; // Save alarm state OFF
}
Odată ce solicitarea HTTP GET a fost trimisă șirurile de caractere stocate în variabilele de forma „strAplicație” vor fi și ele șterse.
// send HTTP GET request
request.open("GET", "ajax_inputs" + strAlarmT + nocache, true);
request.send(null);
setTimeout('GetArduinoIO()', 1000);
strAlarmT = "";
Controlul iluminării
Pentru a avea toate LED-urile stinse a trebuit să setăm inițial pini A2 și A3 să se comporte ca intrări digitale, deoarece am legat două LED-uri pe un singur pin.
Pentru a aprinde LED-ul 1, cu anodul legat la 5V, programul schimbă pinul ca ieșire digitală și setează pinul respectiv pe LOW.
// LED 1
if (StrContains(HTTP_req, "LED1=1")) {
LED_state[0] = 1; // Save LED state ON
pinMode(LEDPin1, OUTPUT);
digitalWrite(LEDPin1, LOW);
}
Pentru a aprinde LED-ul 2 programul schimbă pinul ca ieșire digitală și setează pinul respectiv pe HIGH.
// LED 2
if (StrContains(HTTP_req, "LED2=1")) {
LED_state[1] = 1; // Save LED state ON
pinMode(LEDPin1, OUTPUT);
digitalWrite(LEDPin1, HIGH);
}
În cazul în care ambele LED-uri au starea ON se apelează o funcție pe întrerupere de timp, funcție numită FlexiTimer2. Aici este prezentă o funcție if care verifică dacă starea celor două LED-uri este ON iar dacă condiția se îndeplinește schimbă pinul de pe LOW pe HIGH. Această întrerupere se apelează la o rezoluție de 0,1 ms.
void BothLEDs()
{
// Check for LED1 and LED2 on state
if ((LED_state[0] != 0) && (LED_state[1] != 0)){
digitalWrite(LEDPin1, HIGH);
digitalWrite(LEDPin1, LOW);
}
}
Deoarece în cazul în care vrem să stingem LED-ul 1 riscăm să stingem ambele LED-uri am adăugat o funcție if care verifică starea LED-ului 2. În acest caz dacă starea LED-ului 2 este OFF programul va schimba pinul în intrare digitală, iar dacă starea LED-ului 2 este ON programul va seta pinul pe HIGH.
else if (StrContains(HTTP_req, "LED1=0")) {
LED_state[0] = 0; // Save LED state OFF
// Check if LED2 state is on or off
if (LED_state[1] == 0){
pinMode(LEDPin1, INPUT);
}
else if (LED_state[1] != 0){
digitalWrite(LEDPin1, HIGH);
}
}
O funcție asemănătoare a fost implementată pentru stingerea LED-ului 2, aceasta în schimb verifică starea LED-ului 1.
else if (StrContains(HTTP_req, "LED2=0")) {
LED_state[1] = 0; // Save LED state OFF
// Check if LED1 state is on or off
if (LED_state[0] == 0){
pinMode(LEDPin1, INPUT);
}
else if (LED_state[0] != 0){
digitalWrite(LEDPin1, LOW);
}
}
Pentru a se controla LED-urile 3 și 4 s-a folosit același principiu. În acest mod am reușit să controlăm patru LED-uri cu doi pini.
Controlul temperaturii
Funcția analogRead() întoarce valori cuprinse între 0 și 1024, care corespund la tensiuni de la 0mV la 5100mV, astfel încât fiecare increment reprezintă o variație a tensiunii de aproximativ 5mV. Pentru a realiza conversia datelor analogice în temperatură este nevoie de următoarea ecuație:
// Sensor conversion
Temp_val = (5.0 * analogRead(TEMP_Pin) * 100.0) / 1024;
Pentru a evita trecerea repetată de pe încălzire pe răcire am introdus în program două variabile locale care țin valorile temperaturii minime și a temperaturii maxime. Temperatura minimă este temperatura setată de utilizator -1 °C, iar temperatura maximă reprezintă temperatura setată +1 °C.
int Temp_min = Set_temp – 1;
int Temp_max = Set_temp + 1;
Aplicația de control al temperaturii utilizează trei funcții if. Prima funcție oprește elementele de încălzire și răcire atunci când temperatura citită de senzor este cuprinsă între temperatura minimă și cea maximă.
// Decide to heat or cool the room
if ((Temp_val > Temp_min) && (Temp_val < Temp_max)){
digitalWrite(FAN_Pin, LOW); // STOP fan
digitalWrite(BULB_Pin, LOW); // STOP 12v bulb
}
A doua funcție if verifică dacă temperatura citită de senzor este mai mare decât temperatura minimă. Dacă este adevărat programul va porni elementul de răcire.
else if (Temp_val > Temp_min){
digitalWrite(FAN_Pin, HIGH); // START fan
}
A treia funcție if verifică dacă temperatura citită de senzor este mai mică decât temperatura maximă. Dacă este adevărat programul va porni elementul de încălzire.
else if (Temp_val < Temp_max){
digitalWrite(BULB_Pin, HIGH); // START 12v bulb
}
Controlul jaluzelelor
Programul pentru aplicația de control al jaluzelelor funcționează prin funcția PWM. Pentru acționarea acestora programul trimite un puls PWM la un anumit factor de umplere de 25%, pe unul dintre pini, se așteaptă până când motorul face două rotații complete după care se oprește rotația.
(aprox 8 linii de cod)
Pentru inversarea direcției de rotație se va acționa celălalt pin cu același factor de umplere, asteptând ca motorul să facă două rotații complete. Datorită modului de funcționare a punții H se poate controla motorul în ambele direcții folosind doar doi pini. Codul este scris în așa fel încât să nu se producă un scurtcircuit prin direcționarea curentului pe ambii pini în același timp.
(aprox 8 linii de cod)
Controlul ușii de garaj
Când se apasă butonul de pe pagina Web o funcție scrisă în JavaScript va trimite un șir de caractere către programul de pe platforma Arduino. Aplicația de control al ușii de garaj folosește două funcții if pentru a controla închiderea și deschiderea acesteia. În acest caz este nevoie de o variabilă locală care să memoreze poziția servomotorului.
Dacă șirul de caractere este „ServoG=1” programul va apela o funcție for care va roti motorul de la 98 grade la 0 grade în pași de 1 grad, ca urmare deschizând ușa de garaj.
if (StrContains(HTTP_req, "ServoG=1")) {
ServoG_state = 1; // Save door state OPENED
// Goes from 98 degrees to 0 degrees in steps of 1 degree
for(pos = 98; pos >= 1; pos -= 1)
{
GarageServo.write(pos);
delay(5);
}
}
Atunci când șirul de caractere este „ServoG=0” programul va apela o funcție for care va roti motorul de la 0 la 98 grade în pași de 1 grad. Această funcție închide ușa de garaj.
else if (StrContains(HTTP_req, "ServoG=0")) {
ServoG_state = 0; // Save door state CLOSED
// Goes from 0 degrees to 98 degrees in steps of 1 degree
for(pos = 0; pos < 98; pos += 1)
{
GarageServo.write(pos);
delay(5);
}
}
Sistemul de alarmă
Aplicația de alarmă folosește două funcții if. Primul if verifică starea sistemului de alarmă. În interiorul acesteia este prezentă o altă funcție if care verifică dacă valoarea citită de fotorezistență este mai mică decât 550. Dacă valoarea este mai mică înseamnă ca raza laser a fost întreruptă, ca urmare porgramul va activa buzzerul piezoelectric împreună cu LED-ul roșu.
// Check if laser beam hit the photoresistor
if(AlarmT_state != 0){
if(analogRead(FOTO_Pin) < 550){
digitalWrite(BUZZ_Pin, HIGH);
}
}
Al doilea if îndeplineste funcția de reset. Pentru această funcție avem nevoie de o variabilă locală inițializată cu 0. Când programul primește șirul de caractere „ResetA” va incrementa variabila „reset”.
int reset = 0;
if (StrContains(HTTP_req, "ResetA")) {
reset ++;
}
Funcția verifică dacă valoarea lui „reset” s-a modificat. Dacă aceasta este diferită de 0 programul va dezactiva buzzerul piezoelectric și va atribui dinou valoarea 0 variabilei „reset”.
// Reset function
if(reset != 0){
digitalWrite(BUZZ_Pin, LOW);
reset = 0;
}
În acest mod alarma nu poate fi oprită decât la apăsarea butonului RESET aflat pe pagina Web.
Proiectarea în CATIA v5 R20
CATIA este un program prin care se poate gestiona întregul ciclu de viață al produsului de la concepție până la scoaterea din uz. Gestionarea cilului de viață al produsului integrează oameni, date, procese și sisteme și oferă informații despre produs pentru producător, furnizori și beneficiari.
Ciclul de viață al produsului.
Organizarea programului este făcută în module, grupate după diferite discipline tehnice. În timpul procesului de realizare a unui produs este posibiă bascularea între diferite module. Fiecare modul beneficiază de bare de instrumente proprii care se activează odată cu modulul.
Prezentarea modulului Sketcher
Modulul Sketcher este utilizat pentru realizarea profilelor 2D, acesta fiind utilizat la majoritatea operațiilor pentru crearea unui model 3D. Pentru a realiza o schiță se pot urma următoarele etape: alegerea suportului schiței, realizarea profilului și constrângerea acestuia.
Comenzi uzuale folosite în Sketcher.
Constrângerile se utilizează pentru dimensionarea și poziționarea elementelor geometrice prin crearea unor relații între elementele schiței. Acestea împiedică distorsonarea schiței în cazul modificărilor sau mutărilor.
Exemplificarea constrângeriilor dimensionale și geometrice.
Impunerea constrângerilor dimensionale sau legate de poziția reciprocă a elementelor grafice realizate asigură în final corectitudinea unei construcții. În urma impunerii constrângerilor o schiță poate fi: incomplet definită, complet definită și supradefinită.
Model de schiță incomplet definită, complet definită și supradefinită.
Prezentarea modulului Part Design
Modului Part Design este utilizat pentru proiectarea tridimensională a pieselor, folosind operații bazate pe schițe, suprafețe sau operații booleene.
Funcțiile bazate pe schițe se pot împărții în funcții care creează corpuri de revoluție formate prin rotirea unui profil în jurul unei axe date și corpuri extrudate formate prin extrudarea unui profil după o direcție liniară.
O altă clasificare face referire operațiile care adaugă material (Pad, Shaft, Rib, Siffener) și operațiile care înlătură material (Pocket, Groove, Hole, Slot).
Funcții bazate pe schițe.
Funcțiile de dress-up sunt funcții ajutătoare care ajută la racordarea și teșirea muchiilor, înclinarea suprafețelor, modificarea grosimii unui corp, crearea filetelor interioare și exterioare, indepărtarea unei fețe și transformarea volumelor în piese cu pereți subțiri.
Funcțiile de dress-up.
Operațiile booleene se utilizează pentru proiectarea 3D a pieselor cu configurație complexă și se efectuează între două sau mai multe corpuri ale unei piese.
Există trei tipuri de operații booleene de bază: de adăugare de material (reuniunea), îndepărtare de material (diferența) și intersecție.
Operații booleene.
Prezentarea modulului Assembly Design
Modulul permite crearea și gestionarea ansamblelor mecanice prin impunerea unor constrângeri între piesele componente ale ansamblului. Utilizarea acestui modul se poate face într-o manieră colectivă cu alte module.
Proiectarea unui ansamblu constă în inserarea și poziționarea elementelor componente ale ansamblului într-un fișier ansamblu și definirea constrângerilor de ansamblare.
Etape pentru realizarea unui ansamblu:
Inserarea elementelor componente;
Poziționarea elementelor componente;
Adăugarea constrângerilor de asamblare;
Efectuarea unor operații asupra ansamblului;
Analiza ansamblului.
Constrângerile din modulul Assembly Design.
Constrângerile de ansamblare permit poziționarea corectă a unui element component al ansamblului față de celelalte elemente componente. Constrângerile se aplică doar între elementele componente ale ansamblului sau subansamblului părinte. Nu se pot adăuga constrângerile între elementele componente ale unui ansamblu sau subansamblu decât dacă acesta este activ. Nu se pot aplica constrângerile între elementele geometrice aparținând aceleiași componente.
Fiecare element component al ansamblului este identificat în arborele de specificații prin denumirea piesei și numărul de inserări al acelei piese în ansambu.
Manipularea elementelor componente ale ansamblului se poate face cu compasul sau prin comanda Manipulation.
Prezentarea modulului Drafting
Acest modul este utilizat pentru realizarea desenelor de execuție ale pieselor și ansamblurilor modelate 3D prin submodului Generative Drafting cât și pentru realizarea desenelor 2D pentru diferite piese și ansamble în cazul în care nu există nici o legătură cu modelul 3D, cu ajutorul submodulului Interactive Drafting.
Submodulul Interactive Drafting este utilizat pentru realizarea desenelor 2D pentru diferite piese sau ansambluri, în cazul în care nu există atașat un model 3D. La realizarea desenului tehnic pot fi utilizate instrumente pentru:
Generarea vederilor;
Generarea profilului;
Cotarea desenului;
Inserarea toleranțelor dimensionale și geometrice;
Adăugarea de notații;
Tabele.
Generative Drafting este submodulul utilizat pentru generarea automată a proiecțiilor (vederi, secțiuni, detalii) desenelor 2D pentru piesele și ansamblele realizate 3D într-unul din modulele programului CATIA. Între fișierul 3D care stă la baza creării fișierului 2D sunt realizate legături, astfel încât dacă se aduc modificări fișierului 3D acestea se generează automat și în fișierul 2D atașat.
Rezultate obținute
Pe langă limbajul de programare C++ am folosit și HTML, CSS, Ajax și JavaScript astfel am reușit să creez un Web server pe platforma de dezvoltare Arduino Ethernet și o pagină Web interactivă care se potrivește perfect cu domeniul ales.
Am implementat un sistem simplu, în mare parte, care funcționează și am creeat o interfață cu utilizatorul simplă și intuitivă.
În final am obținut o machetă cu dimensiuni rezonabile, în care s-au implementat aplicațiile alese cu succes. În ciuda problemelor întâmpinate aplicațiile de control al iluminării, temperaturii, jaluzelelor, ușii de garaj și sistemul de alarmă funcționează, dar mai important toate aplicațiile funcționează bine împreună.
Concluzii și intenții
Concluzii
Prima tehnologie întâlnită atunci când am decis să creem un Web server care găzduiește pagini Web HTML este Hypertext Transfer Protocol (HTTP). HTTP este în mod normal invizibil pentru utilizator unui browser Web, cu excepția http:// în bara de adrese a browser-ului. Deoarece scriem codul pentru un Web server pe platforma Arduino trebuie să înțelegem cum funcționează HTTP.
Atunci când un browser Web se conectează la un Web server introducând adresa IP în bara de adrese a browser-ului web, browser-ul trimite o cerere HTTP pentru pagina implicită a Web serverului.
Web serverul de pe Arduino trebuie să răspundă solicitării HTTP cu textul pe care protocolul îl cere și apoi să trimită pagina Web efectivă.
Fiecare pagină Web constă dintr-un fișier text scris în Hypertext Markup Language (HTML). HTML structurează pagina Web, marcând care parți ale textului sunt paragrafe, anteturi, casete de selectare, butoane sau alte elemente ale unei pagini Web.
Există de fapt mai multe versiuni de HTML. O pagina Web poate fi scrisă în oricare dintre standardele HTML, persoana care navigheaza o pagină Web în mod normal, nu ar ști ce standard se utilizează dacă nu s-ar uitat la codul sursă al acesteia.
Cascading Style Sheets (CSS) este utilizat pentru elementele de stil. Acest lucru înseamnă că CSS poate fi folosit pentru a schimba stilul de font, dimensiunea și culoarea acestuia. Poziția dimensiunea și culoarea diferitelor elemente HTML pot fi schimbate folosind CSS.
În relativul lent Arduino, un răspuns mai rapid va fi obținut prin includerea stilurilor CSS în partea de sus a paginii Web, atunci când o singură pagină Web este folosită. Acest lucru se datorează faptului că doar o cerere HTTP este necesar apoi pentru a obține pagina și codul CSS.
Am folosit JavaScript pentru a pune în aplicare Ajax pentru a trimite datele de pe pagina Web la Arduino și pentru a obține datele înapoi de la Arduino prin „spatele scenei”.
Ajax permite părți ale paginii Web să fie actualizate. Acest lucru reduce cantitatea de date care trebuie să fie trimise de la Arduino a face actualizările mai repede, deoarece întreaga pagină web nu trebuie să fie reîncărcate de fiecare dată când noi date urmează să fie afișat pe ea.
Cele mai multe dintre tehnologiile utilizate pentru a crea o pagina Web sau un Web server sunt subiecte destul de mari care au cărți întregi dedicate. Există multe resurse disponibile pentru designul de pagini Web și de creare a unui Web server care acoperă C++, HTML, CSS, JavaScript și Ajax.
Deși este un domeniu în care sunt încă multe de descoperit, domotica, prezintă un subiect interesant și plăcut care așteaptă să fie descoperit. După datele adunate sper să vedem o explozie a aplicațiilor din acest domeniu în viitorul apropiat, desigur, la un preț rezonabil.
Probleme întâmpinate
Numărul redus al pinilor
Deoarece am folosit o platformă de dezvoltare Arduino Ethernet prima și cea mai mare problema a fost numărul redus al pinilor. Din cei douăzeci de pini prezenți pe platforma folosită zece pini sunt folositi de anumite funcții ale acesteia:
Patru pini sunt folosiți de modulul Wiznet (D10 – D13);
Trei pini sunt folosiți de cardul SD (D4, A0, A1);
Un pin pentru întreruperea W5100 (D2);
Doi pini folosiți pentru conexiunea USB serial (D0, D1).
Deci, rămânem cu zece pini care pot fi folosiți, fapt pentru care am fost nevoit să controlez mai multe elemente de pe mai puțini pini.
Un bun exemplu este aplicația de control al iluminării. Aici am ajuns la soluția să controlăm patru LED-uri folosind doi pini. Pentru a aprinde toate patru LED-urile în același timp a trebuit să adaug o funcție pe întrerupere de timp, care setează pinul pe HIGH și LOW cu o rezoluție de 0,1 milisecunde.
Al doilea exemplu este partea de atenționare a sistemului de alarmă, în care, după același principiu folosit la aplicația de control al iluminării, folosesc un pin pentru a controla două LED-uri și un buzzer piezoelectric.
Sistemul de alarmă
Inițial am încercat implementarea unui sistem de alarmă în care foloseam o fotorezistență împreună cu un LED care se aprindea și se stingea cu o anumită frecvența. Dacă diferența dintre valoarea citită de fotorezistența atunci când LED-ul este stins și valoarea citită când LED-ul este aprins, era mai mică de 15 unități se declanșa alarma.
Prima implementare a fost într-o funcție, aceasta nu s-a dovedit eficientă deoarece programul intra într-o stare de buclă infinită, iar după mici modificări acesta îngreuna trimiterea răspunsului către browser.
int Allowed_Diff = 15;
int x, x1, x2;
// Record LDR value
For (int i = 0; i < 10; i++) { // Initially was while (true)
digitalWrite(3, LOW);
x1 = analogRead(4); // Read LDR LED OFF
delay(1000);
digitalWrite(3, HIGH);
x2 = analogRead(4); // Read LDR LED ON
}
// Check which one is bigger and make the difference
if (x2 < x1){
x = x1 – x2;
} else {
x= x2 – x1;
}
// Start the alarm
if (x < Allowed_Diff && x > 0){
digitalWrite(7, HIGH);
}
Ca rezolvare la această problemă am implementat funcția pe întrerupere de timp care se apela la o rezoluție de cinci milisecunde. Am folosit o funcție switch cu cinci cazuri.
int state = 0;
int c1, c2;
switch(state){
case 0: // Turn OFF LED
digitalWrite(3, LOW);
break;
case 1: // Read LDR
c1 = analogRead(4);
break;
case 2: // Turn ON LED
digitalWrite(3, HIGH);
break;
case 3: Read LDR
c2 = analogRead(4);
break;
case 4: // Start the alarm
if ((c2-c1)<20){
digitalWrite(7,HIGH);
}else{
digitalWrite(7,LOW);
}
state=-1;
break;
}
state++;
Programul funcționa bine. Singura problemă era că trebuia calibrat de fiecare dată când se schimba lumina ambientală deoarece aceasta avea o influență foarte mare asupra citirilor.
În final am înlocuit LED-ul cu o diodă laser și am introdus fotorezistența într-un tub de plastic pentru a minimiza influențele luminii ambientale.
Elementul de răcire
După instalarea în machetă a aplicației de control al temperaturii am observat că ventilatorul ales nu făcea față cu răcirea incintei.
Soluția a fost simplă, am înlocuit ventilatorul cu unul de dimensiuni mai mari.
Gestionarea memoriei
Există trei tipuri de memorie în microcontrolerul ATmega328 folosit pe platforma de dezvoltare Arduino Ethernet:
Memoria flash (spațiu de program), unde este stocată schița Arduino;
SRAM (memoria static cu acces aleator), unde sunt stocate variabilele;
EEPROM utilizată pentru a stoca informații pe termen lung.
Memoria flash și EEPROM sunt memorii non-volatile, adică informațiile persistă după ce aparatul este oprit. SRAM este o memorie volatilă, datele se vor pierde atunci când platforma este oprită.
Cipul ATmega328 are următoarele cantități de memorie: 32 kB memorie flash (din care 0.5 kB sunt folosiți pentru încărcarea sistemului), 2 kB memorie SRAM și 1 kB memorie EEPROM.
După cum se vede microcontrolerul utilizate pe placa Arduino Ethernet are o cantitate mică de memorie RAM. Deoarece folosest șiruri de caractere pentru solicităriile și răspunsurile HTTP am realizat la un moment dat că programul nu mai rulează din cauza memoriei RAM insuficiente.
Ca soluție la această problemă am folosit o sintaxă care folosește un macro pentru a pune șirurile de caractere în memoria flash în locul memoriei RAM. Sintaxa presupune inserarea șirului de caractere între paranteze rotunde în fața cărora este prezentă litera F.
Serial.println(F("Initializing SD card…"));
Implementând această sintaxă la toate liniile care scriu șiruri de caractere am reușit să eliberez memoria necesară pentru ca programul să ruleze dinou.
Intenții
În primul rând aș vrea să fac o îmbunătățire de hardware și anume trecerea la o platformă Arduino Mega cu un Ethernet Shield. În acest mod se vor putea implementa mai multe aplicații datorită numărului mai mare de pini și a memoriei mărită. Arduino Mega se prezintă într-un pachet cu 54 intrări sau ieșiri digitale și 16 intrări analogice. Acesta are o memorie Flash de 256 kB flash (din care 8 kB sunt folosiți pentru încărcarea de sistem), SRAM de 8 kB și 4 kB EEPROM.
În viitor voi încerca și implementarea altor aplicații din domeniul domoticii: un sistem de securitate cu camere video și o îmbunătățire a sistemului de control al jaluzelelor astfel încât să mențină o anumită intensitate a luminii în funcție de ambientul exterior.
Nu în ultimul rănd voi încerca implementarea sistemului într-o locuință, desigur pentru a realiza acest lucru va fi nevoie de implementarea unui sistem de securitate pentru a restricționa accesul persoanelor neautorizate.
Anexa 1. Schemă electronică
Anexa 2. Cod sursă Arduino
Anexa 3. Codul paginii Web
Anexa 4. Model 3D și desene de execuție
Anexa 1. Schemă electronică
Anexa 2. Cod sursă Arduino
Anexa 3. Codul paginii Web
Anexa 4. Model 3D și desene de execuție
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Domotica. Automatizarea Locuintei (ID: 162373)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
