Utilizarea Microcontrollerelor Pentru Implementarea Functiilor Inteligente ale Elementelor Decorative Moderne

REZUMATUL PROIECTULUI

Proiectul de licență constă într-un obiect de decor interior, reprezentat de un nor, comandat cu ajutorul unei plăcuțe de dezvoltare Arduino Uno și a unui Wave Shield. Acestea au fost folosite pentru a reda fișierele audio stocate pe un card de memorie SD. Pentru crearea efectelor luminoase a fost folosită o plăcuță Arduino Mega.

Prin intermediul senzorului, se poate măsura distanța de la nor până la un obiect sau o persoană. În funcție de această distanță, norul poate funcționa în două moduri:

unul în care se simulează o furtună cu tunete și fulgere;

unul asemănător norului din reclamă.

Prima plăcuță de dezvoltare, Arduino Uno, realizează citirea informațiilor primite de la senzor, dar și citirea fișierului audio de pe cardul de memorie SD cu ajutorul unui Wave Shield. Mai mult, permite și redarea fișierelor audio. Aceasta va transmite un semnal către cealălaltă plăcuță de dezvoltare, Arduino Mega. Aceasta din urmă va realiza un joc de lumini pentru a prezenta din punct de vedere vizual cât mai estetic efectele luminoase produse de fulger. De asemenea, jocul de lumini va avea intensități diferite, arătând astfel „starea de iritare” a norului atunci când distanța față de acesta este prea mică.

Așadar, funcționalitatea norului se raportează la capacitatea acestuia de a se integra într-o locuință sau în diferite locații de divertisment, dovedind o interactivitate ridicată pentru un obiect de decor interior.

CUPRINSUL

1 Introducere 10

1.1 Scopul 10

1.2 Motivația 11

2 Tehnologia si 12

2.1 Proiecția avansului tehnologic în artă si in alte 12

2.2 Situația tehnologiei în prezent 14

2.2.1 Evoluția sistemelor multimedia și implicațiile ei în artă 14

2.3 Tehnologii moderne în artă 16

2.3.1 Arta interactivă. Noțiuni și exemple 23

3 Descrierea echipamentelor folosite 25

3.1 Arduino 25

3.1.1 Arduino UNO 28

3.1.1.1 Microcontroller-ul ATmega328 AVR 8-bit 29

3.1.2 Arduino MEGA 33

3.1.2.1 Microcontroller-ul Atmega2560 34

3.2 Wave Shield 38

3.3 Senzorul Ultrasonic, HC-SR04 40

3.4 Mediul de programare al plăcuțelor Arduino 41

3.5 Efectele luminoase 43

3.6 Redarea sunetului 45

4 ARHITECTURA APLICAȚIEI 46

4.1 Limbajul de programare folosit pentru dezvoltarea aplicației 46

4.2 Descrierea aplicației folosită de Arduino UNO și explicarea funcțiilor 46

4.2.1 Funcția FREERAM 47

4.2.2 Funcția sdErrorCheck 48

4.2.3 Functia setup() 48

4.2.4 Funcția loop() 50

4.2.5 Funcția playcomplete 52

4.2.6 Funcția playfile 52

4.3 Descrierea aplicatiei folosita de Arduino Mega și explicarea funcțiilor 53

4.4 Alegerea componentelor 56

4.4.1 Forma obiectului de decor 56

4.5 Alegerea plăcuțelor Arduino, a senzorului HC-SR04 și a Wave shield-ului 57

4.6 Conectarea componentelor și crearea efectelor 59

5 Concluzii 62

6 Bibliografie 64

7 Referințe web 65

A. Codul sursă 66

C. 72

Index 72

LISTA FIGURILOR

Figure 1 Folosirea rotii la mijloace de transport primitive 12

Figure 2 Macheta reprezentand motorul cu abur vertical 13

Figure 3 Schema Bloc simplificata a unui microcontroller 17

Figure 4. Schema bloc a unui microcontroller 18

Figure 5 Arduino Due 25

Figure 6 Arduino Ethernet 26

Figure 7 Arduino TRE 27

Figure 8, Arduino Uno 28

Figure 9 Schema bloc a Microcontroller-ului ATmega328 30

Figure 10, Dispunerea pinilor Microcontroller-ului ATmega328 31

Figure 11, Arduino Mega2560 33

Figure 12 Schema bloc a microcontroller-ului ATmega2560 35

Figure 13 Dispunerea pinilor Microcontroller-ului ATmega2560 36

Figure 14, Wave Shield-ul 39

Figure 15, Modulul HC-SR04 40

Figure 16, Mediul de programare Arduino IDE 42

Figure 17, Schema amplificatorului de curent 43

Figure 18 Dispunerea pinilor al Tranzistorului BC547 44

Figure 19 Tranzistorul BD138 44

Figure 20 Sistemul audio 2.1 45

Figure 21 Structura din fibra de sticla 56

Figure 22 Conectarea Wave Shield-ului cu Arduino Uno 59

Figure 23 Conexiunea senzor- Arduino Uno 59

Figure 24 Conexiunea intre cele placute Arduino 60

Figure 25 Conexiune dintre Wave shield și sistemul audio 61

Figure 26 Conexiunile intre Arduino Mega, Amplificatoarele pentru benzile de led si led-urile fara amplificatoare 61

Introducere

Scopul

Scopul lucrării îl reprezintă creare de obiecte de decor interior interactive, cu ajutorul microcontrollerelor. Voi prezenta așadar posibilitatea de a crea obiecte de artă cu ajutorul componentelor electronice pasive și a microcontrollerelor programate.

Crearea de obiecte inteligente este strâns legată de apariția calculatoarelor și de evoluția din domeniul electronicii. Primele calculatoare erau folosite pentru calcul, având dimensiuni uriașe și viteză de procesare a datelor foarte mică, în comparație cu calculatoare din prezent.

Apariția calculatoarelor personale și creare de diverse sisteme multimedia a dat posibilitatea oamenilor de a folosi calculatoarele în diferite scopuri, de la dezvoltarea de documente scrise la vizionarea de fișiere video sau la implementarea de noi soft-uri care să îmbunătățească accesabilitatea unui calculator.

Odată cu apariția calculatoarelor de dimensiuni mai mici au fost create limbajele de programare, cu ajutorul cărora se pot dezvolta noi soft-uri pentru diferite utilizări ale calculatorului sau pentru a programa alte dispozitive externe cu ajutorul unor plăci de dezvoltare.

Sistemele multimedia nu pot fi universal definite, putând însă afirma că sunt „sursă a activităților de design, stocare, interogare și utilizare a documentelor electronice compuse din medii multiple ca video, audio, animație, text, grafică și imagine” . Putem spune că sistemele multimedia reprezintă tehnologia din ziua de astăzi, acestea fiind prezente în viețile noastre cotidiene indiferent de domeniul în care ne desfășurăm activitatea.

Motivația

Alegerea temei a pornit de la dorința de a crea un obiect de interior interactiv care să stârnească curiozitatea celor care îl văd. Am decis ca forma obiectului să fie asemănătoare cu forma unui nor deoarece consider că este o formă ce atrage imediat atenția celor care îl văd. Drept sursă de inspirație am avut o reclamă în care o persoană plimbă un câine care avea forma unui nor. Partea umoristică a reclamei este momentul în care o altă persoană încearcă să-l mângâie, iar norul, deranjat de acest gest, îl electrocutează.

Plecând de la aceste detalii, am căutat cele mai accesibile forme de punere în practică a celor două proiecte și îmbinarea lor. Am decis să folosesc două plăcuțe de dezvoltare Arduino și un senzor ultrasonic. Cu ajutorul senzorului, măsor distanța de la nor la un obiect sau o persoană, iar în funcție de distanță norul va funcționa în două moduri: unul în care simulează o furtună cu tunete și fulgere, și unul asemănător cu norul din reclamă.

Prima plăcuță de Arduino, Arduino UNO, realizează citirea informațiilor primite de la senzor, dar și citirea fișierului audio de pe un card de memorie SD, cu ajutorul unui Wave Shield și redarea aceastuia. De asemenea, aceasta transmite un semnal către cealaltă plăcuța de dezvoltare, Arduino Mega, realizându-se astfel jocul de lumini pentru a prezenta efectele luminoase produse de fulger, dar și un joc de lumini care va accentua starea de iritare a norului atunci când distanța față de obiect este prea mică.

În capitolele ce urmează, voi prezenta evoluția sistemelor multimedia și folosirea lor în diferite domenii de activitate.

În capitolul II voi descrie evoluția tehnologiei în timp și impactul pe care această l-a avut atât în artă, cât și în alte domenii. Voi vorbi așadar despre evoluția telefoniei mobile, apariția internetului, diferența dintre un microcontroller si un microprocesor, arătând componentele, dar și cele mai folosite arhitecturi în construcția microcontrollerelor și sistemele multimedia ce fac posibilă creare de noi obiecte de artă.

În Capitolul III voi descrie fiecare echipament folosit pentru realizarea proiectului meu, apariția și schimbările aduse de acestea. Voi discuta despre ce este o placă de dezvoltare și pentru ce este folosită, prezentând plăcuțele de dezvoltare Arduino folosite în proiectul meu, dar și modul de lucru al shield-ului pentru muzică și a senzorului de distanță.

În Capitolul IV, va fi descris și explicat codul sursă al fiecărei plăcuțe de dezvoltare, comunicarea între cele două, principiile de funcționare și rolul fiecărei componente din proiectul de licență, dar și realizarea conexiunilor.

Tehnologia si

Proiecția avansului tehnologic în artă si in alte

Oamenii au creat, de-a lungul timpului, diferite tehnologii de prelucrare a materiilor prime pentru a obține produse finite. Am putea, astfel, să definim tehnologia ca fiind totalitatea modalităților și mijloacelor de prelucrat a materiilor prime în produse finite. Un pas important în dezvoltarea omenirii l-a reprezentat, după descoperirea focului, inventarea roții și implicit a mijloacelor de transport.

Figure 1 Folosirea rotii la mijloace de transport primitive

În trecut, agricultura reprezenta principala sursă de hrană și de venit, astfel au fost create obiecte cu care oamenii își cultivau culturile mai eficient și au fost create sisteme de irigații pentru zonele în care precipitatile erau insuficiente.

Odată cu apariția industriei prelucrătoare a metalelor, toate domeniile în care oamenii își desfășurau activitatea au avut parte de îmbunătățiri ale tehnologiei, lemnul si piatra care era mult folosite înainte fiind înlocuite de obiecte metalice. Acestea oferau o perioada de operare mult mai mare față de lemn și de asemenea o fiabilitatea mai bună.

Apariția motorului cu abur a însemnat un pas uriaș în evoluția umană, fiind prima dată când un obiect putea să înlocuiască munca umană, având mai multă putere și lucrând mai eficient materiile prime.

Figure 2 Macheta reprezentand motorul cu abur vertical

Un alt mare pas în evoluția umană a fost descoperirea curentului electric, fapt ce a permis crearea de industrii precum: industria electrotehnică, industria chimică. După inventarea motoarelor cu ardere internă, a urmat o perioada în care tehnologiile celor două erau aplicate în toate domeniile, înlocuind astfel definitiv muncă umană sau pe cea animală.

În ceea ce privește interacțiunea artă – tehnologie, se poate afirma că acestea au fost mereu într-o relație de congruență și echilibru. În fiecare domeniu arta își găsește un loc, însă în domeniul tehnologic, arta rafinează și dă o „față umană”.

Relația tehnologie – artă datează încă dinaintea erei noastre, începând cu inventarea scrisului în Mesopotamia pentru a oferi o metodă civilizată de cuantificare monetară, în construcțiile din Egiptul Antic, în care arta transcende vremea și oferă o capacitate de înțelegere mai mare asupra ritualurilor funerare și culminând în zilele noastre, când arta, îmbinată cu tehnologia arată adevăratul grad de dezvoltare a unei civilizații. Tehnologia îi oferă artei aplicabilitate, iar arta îi oferă tehnologiei estetica frumosului.

Situația tehnologiei în prezent

În prezent se investesc sume mari în extinderea tehnologiei în cât mai multe arii și dezvoltarea de tehnologii noi acolo unde cele prezente sunt depășite sau devin ineficiente. Sistemele multimedia moderne sunt prezente în orice activitate desfășurată de oameni, de la obiecte uzuale până la aplicații industriale, roboți, telecomunicații, mijloace de transport, obiecte decorative, obiecte ce ajută la creearea de noi opere de artă etc.

Evoluția sistemelor multimedia și implicațiile ei în artă

Primele sisteme multimedia apărute în domeniul artei au fost folosite pentru captate imaginilor si sunetelor, până atunci pictură fiind singură modalitate de captare a imaginilor iar pentru captarea semnalelor audio se utilaza scrierea acestora cu ajutorul notelor muzicale.

Primele înregistrări sonore au aparut in a doua jumătate a secolului al XIX-lea, deși generarea mecanică a unei serii de sunete a fost posibilă încă din antichitate. Înregistrarea sonoră reprezintă procesarea unui semnal sonor astfel încât să fie pemisă păstrarea acestuia pentru a fi redat la un moment ulterior. Începând cu prima înregistrare a sunetului și până în zilele noastre au avut loc progrese remarcabile în ceea ce privește calitatea sunetului și durata de folosire a materialului pe care este păstrat. Dar pentru a se ajunge la o astfel de dezvoltare a fost nevoie de munca îndelungată a oamenilor de știință care și-au propus să capteze sunetul pentru ca mai apoi alți oameni să-l poată auzi.

Primul dispozitiv de captare a sunetului a apărut în 1857, acesta folosea o pâlnie pentru concentrarea semnalului sonor către o membrană ce avea atașat un fir de par, care corespunzător vibrațiilor inscripționa pe sticlă inegrita cu fum. Acest aparat permitea captarea sunetelor însă nu permitea și redarea lor ulterioară.

Primul dispozitiv, ce permitea și redarea ulterioară a sunetelor captate, a apărut în 1877, acesta folosea același principiu “însă ca mediu de înregistrare folosea un cilindru spiralat acoperit cu o foița de cositor (asemănătoare foliei de aluminiu de mai târziu), imprimată în adâncime la viteză de 60 de rotații pe minut.”

Apariția telegrafonului stă la baza înregistrărilor audio din ziua de astăzi. Acesta era alcătuit dintr-un cilindru înfășurat cu sârmă de oțel de 0,02 cm grosime, în jurul căreia era rotit un electromagnet influențat de semnalul unui microfon. Redarea audio presupunea repoziționarea electromagnetului și înlocuirea microfonului cu o doză telefonică.

Camerele de fotografiat au revoluționat metodele de până atunci de captare a imaginilor. Astfel, în 1839, „Daguerre a prezentat invenția numită de el „daghereotip”, ca în 1888, George Eastman să patenteze aparatul de fotografiat cu rolfilm, o bucată de pelicula fotografică de aproximativ 1m lungime, care era introdusă într-o casetă metalică izolată ermetic de lumina, înfășurată pe o rola.” . Totuși, primul aparat foto apare abia în 1900, fiind fabricat de Leica, iar prima camera foto a fost prezentată publicului larg abia în 1925, având un obiectiv „Elmar de 50mm f/3.5” .

În funcție de tipul semnalelor folosite, camerele foto se împart in: camere foto cu semnal analogic și camere foto digitale. Camerele foto analogice reprezintă camerele foto care utilizează un suport de înregistrare progresiv, care poate fi un procesc chimic sau unul electronic (folosirea senzorului CCD). Camerele foto digitale se bazează în principal pe tehnologia electronică, imaginile captate de senzorul acesteia fiind stocate într-un spațiu de memorie magnetic sau electronic.

Camerele de filmat sunt strâns legate de evoluția camerelor de fotografiat, oamenii de știință realizând că ochiul uman percepe o succesiune de imagini la un inteval scurt de timp și că este o imagine continuă. Primele imagini video erau alb-negru și fără sunet, deoarece tehnologia din acea vreme nu permitea acest lucru. Prima încercare de obținere a imaginilor video color a presupus colorarea filmului cu ajutorul unei lupe. Acest proces era unul greoi, necesitând mult timp și în care de cele mai multe ori rezultatele obținute nu erau cele dorite.

O îmbunătățire în procesul de obținere a imaginilor color a fost folosirea unor lentile cu filtre de culoare pentru a filma simultan sau cu o singură lentilă cu expuneri succesive. Problema acestui preocedeu îl reprezenta faptul că imaginea rezultată suferea deformări și erori de suprapunere a culorilor. Treptat acest procedeu a fost înlocuit de metoda Kinemacolor, „metoda este o simplificare a procedeului inventat de Edward R. Turner. Astfel, se realizau doar două expuneri a peliculei monocrome (alb-negru), prin filtrele roșu și verde. Nu puteau fi obținute nuanțe pure de albastru sau alb, dar datorită iluziei optice, imaginea era remarcabil apropiată de cea reală. Totuși, calitatea culorilor era lăsată la latitudinea proiecționistului care trebuia să aibă grijă că pelicula să fie sincronă cu filtrele (acestea se roteau practic în față obiectivului, realizând o schimbare de culoare la un cadru).”

Primele încercări de a înregistra un clip video cu sunet a avut loc în jurul anului 1900. În 1906, Eugene Augustin Lauste a primit un brevet pentru înregistrarea unei imagini video cu sunet. Însă primele clipuri video ce puteau reda atât imagini cât și sunete au apărut în 1927, când Warner Bros a lansat filmul „Don Juan” cu muzică și efecte sonore înregistrate pe discuri, precum și o serie de filme de scurt metraj cu sunet sincronizat complet pe discuri.

Tehnologii moderne în artă

Arta nu poate fi definită că fiind un domeniu fix, ea fiind sinonimă cu creația și imaginația. Tehnologia a revoluționat fiecare domeniu, arta făcând și ea parte din domeniile ce au suferit modificări, indiferent că vorbim de imagine, muzică sau artă teatrală.

Pe lângă revoluționare, tehnologia a și facilitat apariția unor domenii noi de artă, pe lângă cea fotografică. Astfel, prin intermediul tehnologiei s-a ajuns la: crearea de clipuri video, crearea personajelor dezvoltate folosind un calculator, crearea de muzică cu ajutorul calculatoarelor, arta interactivă etc. Desenele, atât cele tehnice cât și cele artistice, au fost și ele integrate în schimbările aduse de sistemele multimedia.

Apariția calculatoarelor, prima dată în scopuri militare, în cel De-al Doilea Război Mondial a însemnat apariția sistemelor multimedia moderne. Primele calculatoare erau dispozitive ce necesitau un spațiu de depozitare mare și care operau calcule foarte greu, în comparație cu dispozitivele din ziua de astăzi.

„Inventarea tranzistorului a declanșat o perioadă în care calculatoarele, la început uriașe, scumpe și dificil de utilizat, au început să evolueze în sensul miniaturizării, al reducerii costurilor de producție și utilizare și al simplificării programării; în paralel cu unitățile de efectuare a calculelor matematice, s-au dezvoltat și noi tehnologii pentru stocarea datelor. Calculatoarele cu circuite semiconductoare din a două generație au fost urmate de calculatoarele din a treia generație (cu circuite logice integrate) și din a patra generație (cu microprocesor integrat).”

Apariția cipurilor de procesare a datelor a reprezentat o revoluție în dezvoltarea tehnologiei. Cipurile folosite pentru procesarea datelor sunt: microprocesorul și microcontrollerul. Ambele au o unitate centrală de prelucrare, diferența majoră între acestea fiind faptul că un microcontroller deține, pe lângă unitatea centrală de prelucrare, o memorie care împreună cu alte resurse îi permit interacțiunea cu mediul exterior. Din aceasta cauză sunt preferate microcontrollerele în aplicații, folosirea unui microprocessor necesitând implementarea unor circuite suplimentare de memorie.

Figure 3 Schema Bloc simplificata a unui microcontroller

„Asadar un microcontroller conține sau ar trebui să conțină urmatoarele componente:

o unitate centrală (CPU), cu un oscilator intern pentru ceasul de sistem;

o memorie locală tip ROM/PROM/EPROM/FLASH și eventual una de tip RAM;

un sistem de întreruperi;

I/O – intrări/ieșiri numerice (de tip port paralel);

un port serial de tip asincron și/sau sincron, programabil;

un sistem de timere-temporizatoare/numărătoare programabile;

un sistem de conversie analog numeric (una sau mai multe intrari analogice);

un sistem de conversie numeric analogic și/sau ieșiri PWM (cu modulare în durată);

un comparator analogic;

o memorie de date nevolatilă de tip EEPROM;

facilități suplimentare pentru sistemul de temporizare/numărare (captare și comparare);

un ceas de gardă (timer de tip watchdog);

facilități pentru optimizarea propriuli consum de energie”.

Figure 4. Schema bloc a unui microcontroller

„Unitatea centrală de prelucrare (UCP) este alcătuită din unitatea aritmetică și logică (UAL) și unitatea de control.

Unitatea aritmetică și logică este responsabilă cu efectuarea operațiilor aritmetice și logice asupra operanzilor ce îi sunt furnizați. Modul de implementare a operațiilor este transparent pentru utilizator; important pentru utilizatorul de MC este repertoriul operațiilor implementate pentru a aprecia posibilitatea implementării optime a aplicației particulare de control. De asemenea, este important timpul de execuție al fiecărei operații pentru a aprecia dacă timpul necesar procesării complete satisface cerințele de timp ale aplicației.

Unitatea ce control este responsabilă cu decodificarea codului operației conținut de codul unei instrucțiuni. Pe baza decodificării, unitatea de control elaborează semnale pentru comanda celorlalte blocuri funcționale pentru a finaliza executarea unei instrucțiuni. Modul de implementare al acestui bloc este de asemenea transparent utilizatorului.”

Memoria: Microcontrollere folosesc diferite tipuri de informații, care sunt stocate în diferite tipuri de memorii. Instrucțiunile care controlează funcționarea microcontroller-ul trebuie stocate într-o memorie nevolatilă, unde informațiile se păstrează și după oprirea și repornirea sursei de alimentare.

Memoria RAM (Random Access Memory) este o memorie volatilă care poate fi citită sau scrisă de unitatea centrala. Locațiile din memorie pot fi accesate în orice ordine. Un microcontroller conține, de regulă, o memorie RAM de mici dimensiuni deoarece aceasta ocupă mult spațiu, iar o memorie RAM mare ar ridica cost-urile microcontroller-ului.

Memoria ROM (Read Only Memory) este folosită pentru stocarea programului în fază de fabricație, unitatea centrală putând doar să citească informațiile.

“Memoria PROM (Programmable Read Only Memory) este similară cu memoria ROM, dar ea poate fi programată de către utilizator.

După posibilitățile de ștergere, această memorie poate fi de mai multe feluri:

Memoria EPROM (Erasable PROM): care se poate șterge prin expunere la raze ultraviolete. Microcontrollerele cu EPROM au un mic geam de cuarț care permite ca chip-ul să fie expus la radiația ultravioletă. Ștergerea este neselectivă, adică se poate șterge doar întreaga informație și nu numai fragmente. Memoria poate fi ștearsă și reînscrisă de un număr finit de ori. Programarea EPROM-ului necesită o procedură specială, iar MC cu EPROM au nevoie de regulă pentru înscrierea EPROM-ului de o tensiune auxiliară, de 12 V, de exemplu. Unele MC au incluse circuite de programare a memoriei EPROM, cu ajutorul cărora unitatea centrală poate programa memoria EPROM.

În timpul programării, memoria EPROM nu este conectată la magistrala de date și adrese. Unele microcontrollere sunt prevăzute cu mod special de lucru, în care sunt văzute din exterior ca niște memorii EPROM obișnuite și pot fi astfel programate cu orice programator.”

OTP (One Time Programmable PROM) se folosește pentru multe serii de microcontrollere, fiind de fapt tot o memorie EPROM, dar aceasta memorie nu se poate șterge sau reprograma.

„Memoria EEPROM (Electrically Erasable Programmable Read Only Memory) poate fi ștearsă electric de către unitatea centrală, în timpul funcționării. Ștergerea este selectivă, iar pentru reînscriere trebuie parcurși mai mulți pași. Memoria este lentă și numărul de ștergeri/scrieri este limitat (tipic 10 000).”

Memoria FLASH este o memorie asemănătoare EPROM și EEPROM în sensul că poate fi ștearsă și reprogramată în sistemul în care este folosită (fără a fi necesar un sistem dedicat). Are capacitatea unui EPROM, dar nu necesită fereastră pentru ștergere. Ca și EEPROM, memoria FLASH poate fi ștearsă și programată electric. Memoria FLASH nu permite ștergerea individuală de locații, utilizatorul poate să șteargă doar întregul conținut.”

Dispozitivele de intrare/iesire (I/O) reprezintă o componenta importanta a unui microcontroller, deoarece prin intermediul acestora, microcontroller-ul comunică cu mediul exterior. Există o varietate mare de dispozitive intrare/ieșire, acestea find resposabile cu operațiile de comunicație (transfer serial sau paralel de date), operațiile de conversie analog-numerică, funcțiile generale de timp (numărare de evenimente și generare de impulsuri). O parte din resurse sunt acoperite de funcțiile de control, iar o altă parte din resurse asigură funcțiile necesare aplicațiilor în timp real.

Porturile paralele “I/O facilitează transferul simultan al mai multor biți între MC și mediu. Numărul de biți transferați ca urmare a executării unei instrucțiuni depinde de organizarea particulară a porturilor în cadrul MC; unele porturi sunt organizate pe 8 biți, altele pe un număr mai mare de biți.”

Comunicația serială este o metodă folosită și în contextual micorcontrollerelor, deoarece oferă compatibilitate cu o gamă extinsă de dispozitive și necesită un număr minim de conexiuni. În transferul serial de date trebuie să fie cunoscut începutul și sfârșitul informației transferate.

Modulul serial asincron este referit ca UART (Universal Asynchronous Receiver Transmiter). Într-un transfer serial asincron începutul fiecărui byte este marcat de o tranziție a liniei menținută pe durata corespunzătoare unui bit. Sfârșitul este marcat de asemenea de un bit de stop; bitul de stop constă în menținerea liniei pe durata unui bit într-o stare predefinită. Între bitul de start și bitul de stop sunt transferați biții de informație. O secvență completă este compusă dintr-un bit de start, opt sau nouă biți de date și un bit de stop, în total 10 sau 11 unități de cod

Fiecare microcontroller, pe lângă componentele pe care trebuie sa le coțină, au o arhitectura a sistemul central de procesare a datelor. Astfel, principalele concepte luate în considerare în ceea ce privește arhitectura acestora sunt:

Arhitectura de tip Von Neumann. Pe baza acestei arhitecturi sunt realizate cea mai mare parte a microcontrollerelor întâlnite, caracteristica acestei arhitecturi fiind existența unui singur spațiu de memorie, folosit atât pentru memorarea codului de instrucțiuni, cât și a datelor de prelucrare. Folosind un sigur spațiu de memorie, implicit și o singură magistrală de transmitere a datelor și a instrucțiunilor secvențial, acest lucru afectează viteza de lucru.

Arhitectura de tip „Harvard”. aceasta arhitectură folosește, spre deosebire de arhitectura Von Neumann, două spații de memorie, una pentru memorarea codului de instrucțiuni și una pentru datele de procesare. Cu toate că, teoretic, viteza de execuție ar trebui să fie mai mare, putând fi folosite separat magistrale de citit de date și adrese. „Datorită costului mare al implementării unei astfel de arhitecturi, în cazul microcontrolerelor se întâlnește mai ales o arhitectură Harvard modificată, cu spații de memorie separate pentru program și date, dar cu magistrale comune pentru adrese și date.”

CISC Aproape toate microcontrolerele au la bază conceptul CISC (Complex Instruction Set Computer). Acesta reprezintă un set uzual instrucțiuni, foarte diferite între ele, existând instrucțiuni care operează cu anumite spații de memorie sau registre și instrucțiuni care permit anumite moduri de adresare.

RISC (Reduced Instruction Set Computer) este un concept de realizare a CPU, folosit cu success de ceva timp și la realizarea microcontrolerelor.  Acesta constă în implementarea unui set redus de instrucțiuni ce pot fi executate rapid și eficient, reducând astfel complexitatea microcircuitului..

Soft-urile calculatoarelor au permis și facilitat dezvoltarea artei. Astfel, odată cu apariția internetului și a paginilor de internet, a apărut meseria de Web Designer, care presupune crearea unei interfețe a site-urilor pentru a fi cât mai atractive sau funcționale. Pentru a realiza acestor lucruri, sunt folosite soft-urile de design precum: Adobe Photoshop, Corel etc. cu care pot fi prelucrate și modificate imaginile sau se pot crea imagini noi.

Pentru creare fișierelor audio, sunt folosite soft-uri speciale, ce simulează sunetele produse de diferite instrumente muzicale sau de alte obiecte din natură. Cu ajutorul acestor soft-uri se pot modifică fișierele audio înregistrare, dându-le o calitate superioară și posibilitatea de a fi înmagazinate într-un spațiu de memorie.

Arta interactivă. Noțiuni și exemple

Apariția sistemelor integrate programabil, a facut posibilă creearea unei noi forme de artă, arta interactivă. Arta interactivă, spre deosebire de formele tradiționale ale artei unde interacțiunea era una psihologică, interactionează direct cu spectatorii sau artiștii. Evoluția acestei forme de artă a fost una foarte rapidă, în ton cu evoluția tehnologiei.

Când vorbim de arta interactivă, putem spune că rezultatul ei este mereu unul nou, diferența fâcând-o publicul sau mediul cu care interacționeaza. De asemenea, arta interactivă nu poate avea doar o singură formă, deoarece aceasta își poate face prezența și în formele tradiționale de artă precum: pictura, muzica, arta cinematografică sau arta teatrală.

Obiectele decorative interactive au început să fie dezvoltate în urmă cu puțin timp, fiind o ramură importantă a artei interactive. Acestea folosesc o diversitate de senzori cu care primesc informațiile necesare interacționării cu mediul înconjurător.

Un exemplu de artă interactivă în arta cinematografică îl reprezintă redarea filmelor 3D, publicul având impresia că se află în mijlocul acțiunii alături de actori. Acest lucru este posibil datorită unui sistem de ochelari cu lentile speciale, care cu ajutorul iluziei optice îi dă purtatorului senzația că face parte din acțiunea filmului, dar și cu ajutorul unui sistem audio performant, ce are dispuse difuzoarele în diferite zone, premițând astfel ancorarea utilizatorului în spațiu și folosind identificarea diferecției produsă de ochelarii 3D.

Un alt exemplu este un panou publicitar care se activeaza in momentul in care o persoana este la o anumită distanță față de acesta. Acest lucru este posibil cu ajutorul microcontrollerelor și al unor senzori de distanță.

Forma obiectelor interactive nu trebuie să respecte nicio regul. Astfel, există o diversitate de obiecte obișnuite transformate în obiecte interactive: o cană care își schimbă culoarea în funcție de lichidul folosit și de temperatura acestuia, o masă care este iluminată de îndată ce este atinsă, o fereastră care se trasformă în oglindă atunci când o persoană este la o anumită distanță față de aceasta etc.

Pe langa specacolele de lumini, a obiectelor decorative interactive, o forma de arta interactiva este reprezentata si de aparitia robotilor. Acestia folosesc circuite integrate programabile sau nu, care interactioneaza cu mediul inconjuratorul cu ajutorul unor senzori.

Aparitia robotilor, porneste de la aparitia romanelor science fiction, in care autorii isi imaginau existenta unor fiinte, asemanatoare oamenilor, capabile sa interactioneze si sa se comporte la fel ca acestia. De la romane pana la transpunerea lor practica, prima data in arta cinematografica, nu a fost decat un pas. Ulterior acestia au inceput sa fie folositi in obiecte de arta interactiva, fiind intaliniti in spectacole in care acestia puteam comunica cu publicul.

Asadar, putem afirma că arta interactivă nu poate exista fară sistemele multimedia și sistemele integrate programabile, fie ca vorbim de crearea de fișierelor text, audio, video, la creara de spectacole artistice în care acestea controlează efecte luminoase sau care se pot adapta singure mediului cu care interacționează.

Descrierea echipamentelor folosite

Arduino

Apărut în 2005, Arduino este o platforma destinată studenților și pasionaților de sisteme multimedia capabile să interacționeze cu lumea înconjurătoare la un preț mult mai redus în comparație cu alte platforme disponibile pe piață. Numele Arduino provine de la numele unui bar folosit de fondatorii Arduino pentru diferite întâlniri, care la rândul său poarte numele unui rege al Italiei, Arduin.

Fiind o platforma destinata cercetarii, Arduino dispune de o gamă mare de modele, utilizatorul decizând care dintre acestea îi sunt necesare pentru realizarea propriului proiect. Voi prezenta în cele ce urmează câteva detalii ale unor modele folosite în prezent, dar și a unui viitor model:

„Arduino Due foloseste primul microcontroller pe 32 biți, care este bazat pe Atmel SAM3X8E ARM Cortex-M3. Aceasta are 54 de pini digitali ce pot fi utilizați atât ca pini de intrare, cât și ca pini de ieșire. 12 dintre aceștia pot fi utilizați ca ieșiri PWM, 12 pini de analogici, aceștia însă pot fi folosiți doar ca pini de intrare, 4 porturi seriale, un clock de 84 MHz, un jack de putere, un buton de reset și un buton de ștergere. Se diferențiază de toate celelalte plăcuțe de dezvoltare Arduino deoarece folosește o tensiune de 3,3 volti, atât ca tensiune de ieșire, cât și de intrare, o tensiune mai mare putând să deterioreze placa.”

.

Figure 5 Arduino Due

Arduino Ethernet folosește microcontroller-ul Atmega328, fiind o placă de dezvoltare ce oferă 14 pini digitali ce pot fi folosiți atât ca pini de ieșire, cât și ca pini de intrare. Dintre aceștia, 4 pini pot fi folosiți ca pini de ieșire PWM, 6 pini analogici, acești pot însă să fie folosiți doar ca pini de intrare. Spre deosebire de alte plăcuțe Arduino ce folosesc această structura sși microcontroller, Arduino Ethernet nu are o conexiune clasică USB-serial, aceasta folosind interfața Ethernet Wiznet.

Figure 6 Arduino Ethernet

Arduino Leonardo, folosește microcontrollerul Atmega32u4, punând la dispoziția utilizatorului 20 de pini digitali, ce pot fi folosiți atât ca pini de intrare, cât și ca pini de ieșire. 7 dintre aceștia pot fi utilizați ca pini de ieșire PWM și 12 pini ca pini de intrare analogici, un oscilator de 16 MHz, o conexiune micro USB. Leonardo diferă de toate plăcile precedente care folosesc microcontroller-ul ATMEGA32U4, având o comunicație USB fără un pre-procesor. În momentul conectarii la calculator, aceasta va apărea la fel ca în cazul conectarii unui mouse sau tastaturi USB.

Arduino TRE, este prima placuta de dezvoltare Arduino, dezvoltată în Statele Unite ale Americii, care folosește un procesor de 1 GHZ Sitara AM335x. Această placă de dezvoltare va permite dezvoltatorilor realizarea de proiecte cu o viteza de 100 de ori mai mare decât viteza actualelor plăcuțe Arduino Leonardo sau Arduino Uno, putând fi folosită pentru dezvoltarea unei imprimante 3D. De asemenea, va fi compatibilă cu toate platformele auxiliare (shield-urile) produse până acum de Arduino. În prezent, această placă este în perioada de testare, așadar nu pot fi cunoscute toate detaliile tehnice.

Figure 7 Arduino TRE

În proiectul meu, folosesc două plăcuțe de dezvoltare Arduino, Arduino UnoRV3 și Arduino Mega 2560, acestea fiind ultimele variante lansate ale acestor modele. Am ales aceste doua modele deoarece aveam nevoie de o placa de dezvoltare care împreună cu o platformă auxiliară să reda fișiere audio, să aibă capacitarea de a transmite comenzile primite și procesate de la un senzor către altă placuță de dezvoltare. Arduino Mega a fost aleasă deoarece aveam nevoie de un numar mare de pini digitali folosiți ca ieșiri, cu care să pot comanda independent un numar cât mai mare de led-uri.

Arduino UNO

Arduino Uno este o placă de dezvoltare bazată pe ATmega328, ce oferă 14 pini digitali de intrare/ieșire (dintre care 6 pot fi utilizate că ieșiri PWM), 6 intrări analogice, un rezonator ceramic de 16 MHz, o conexiune USB, un jack de putere, în afară ICSP, și un buton de resetare.

Uno diferă de toate plăcile precedente care nu utilizează chip driver FTDI USB-to-serial. De asemenea, Arduino Uno din generația a treia are pinii SDA și SCL aproape de pînul AREF și doi pini noi IOREF, lângă pînul RESET, aceștia permițând shield-urilor adaptarea la tensiunea de la nivelul plăcii.

Arduino Uno poate fi alimentat prin intermediul conexiunii USB sau cu o sursă de alimentare externă. Sursă de alimentare este selectată automat. Sursă de alimentare externă poate veni fie de la un adaptor AC-DC sau de la o baterie.

Placa poate opera pe o sursă externă de 6 până la 20 V. Dacă tensiunea de intrare este mai mică de 7V, tensiunea pe pinul de 5V va fi mai mică de 5V, placa de dezvoltare putând fi instabilă. Dacă tensiunea de intrare este mai mare de 12V, regulatorul de tensiune se poate supraîncălzi, deteriorând placă de dezvoltare.

Fiind un instrument destinat studenților, Arduino este un instrument de tip „open source” care pune gratuit la dispoziția utilizatorilor acestora o gama largă de exemple de implementare ale unor senzori, comutatoare și diferite proiecte în care pot fi folosite plăcuțele de dezvoltare.

Microcontroller-ul ATmega328 AVR 8-bit

„Microcontroller-ul ATmega328 este un microcontroler CMOS de 8 biți de mică putere bazat pe arhitectura RISC AVR imbunatațita. Dispune de un set de 131 instrucțiuni și 32 de regiștri de uz general. Cele 32 de registre sunt dresabile direct de unitatea logica aritmetică (ALU), permițând accesarea a doua registre independente într-o singură instrucțiune. Se obține astfel o eficiență sporită în execuție (de până la zece ori mai rapide decat microcontrorelerele convenționale CISC).”

Caracteristicile principale ale acestuia sunt:

32KB de memorie Flash rescriptibilă pentru stocarea programelor

2KB de memorie RAM

1KB de memorie EEPROM

două numărătoare/temporizatoare de 8 biți

un numărător/temporizator de 16 biți

conține un convertor analog-digital de 10 biti, cu intrări multiple

conține un comparator analogic-conține un modul USART pentru comunicație serială (port serial)

dispune de un cronometru cu oscilator intern

oferă 23 de linii I/O organizate în 3 porturi ( PB, PC, PD)

Figure 9 Schema bloc a Microcontroller-ului ATmega328

Port-urile VCC respectiv GND, reprezintă port-urile de alimentare ale microcontroller-ului;

PB. reprezintă un port de intrare/ieșire bidirecționali de 8 biți cu rezistori interni, al oscilatorului, al unuia din cele două număratoare de 8 biti și al numărătorului de 16 biți. Buffer-ele de ieșire ale Port-ului D au caracteristici de amplificare.

PC (pinii 0..5) reprezintă portul de intrări analogice pentru convertorul analogic-digital.

PD (5,6,7) reprezintă un port de intrare/ieșire bidirecțional de 8 biți, cu rezistori interni ai comparatorului analogic, al număratorul pe 16 biți și al unuia din cele două număratoare de 8 biți. PD(0,1) reprezintă intrarea și ieșirea comunicației seriale. Buffer-ele de ieșire ale Port-ului D au caracteristici de amplificare.

AREF este pinul de referință analogică pentru convertorul analogic-digital

XTAL1: reprezintă intrarea pentru amplificatorul inversor al oscilatorului.

XTAL2: reprezintă ieșirea pentru amplificatorul inversor al oscilatorului.

AVCC: este pinul de alimentare pentru convertorul analog-digital. Trebuie conectat exteran la Vcc, chiar dacă nu este folosit convertorul. Dacă este folosit, trebuie conectat la Vcc printr-un filtru trece-jos.

Arduino MEGA

Introduce a doua componentă multimedia a proiectului, aceasta fiind responsabilă cu comandarea individuală a led-urilor. Chiar dacă este o placă mai performantă decât Arduino Uno. Din nefericire aceasta nu este compatibilă cu Wave Shield-ul, motiv pentru care este folosită doar pentru controlul luminilor.

A două plăcuță de dezvoltare folosită, Arduino Mega 2560 este o plăcuță de dezvoltare mai performantă față de Arduino UNO, având pe lângă un microcontroller mai performant și un număr mai mare de pini digitali.

Arduino Mega 2560, are 54 de pini digitale de intrare / ieșire (dintre care 15 pot fi utilizate că ieșiri PWM), 16 intrări analogice, 4 USART (porturi seriale hardware), un oscilator cristal de 16 MHz, o conexiune USB, un jack de putere, în afara ICSP, și un buton de resetare. Mega este compatibil cu cele mai multe shield-uri destinate Arduino Duemilanove sau Diecimila.

Figure 11, Arduino Mega2560

Mega2560 diferă de toate plăcile precedente pentru că nu utilizează chip driver FTDI USB-to-serial. Deasemenea are pinii SDA și ȘCL aproape de pînul AREF și alți doi pini noi, amplasați în apropiere de pinul RESET, IOREF care permit shield-urilor să se adapteze la tensiunea de la nivelul plăcuței de dezvoltare.

În viitor, shield-urile vor fi compatibile atât cu o placă care folosește AVR, care funcționează cu 5V, dar și cu Arduino Due care operează cu 3.3V.

Microcontroller-ul Atmega2560

Principalele caracteristici ale microcontroller-ului Atmega2560 sunt:

Viteza procesorului 16 MHZ

256KB de memorie Flash rescriptibilă pentru stocarea programelor

8KB de memorie RAM

4KB de memorie EEPROM

Doua numărătoare/temporizatoare de 8 biți

Patru numărătore/temporizatore de 16 biți

Conține un convertor analog-digital de 10 biti, cu intrări multiple

Un comparator analogic

conține 4 module USART pentru comunicație serială (port serial)

dispune de un cronometru cu oscilator intern

oferă 86 de linii I/O organizate în 11 porturi ( PA,PB, PC, PD, PE, PF, PG, PH, PJ, PK, PL)

Figure 12 Schema bloc a microcontroller-ului ATmega2560

Figure 13 Dispunerea pinilor Microcontroller-ului ATmega2560

Descrierea port-urilor:

PA; Reprezintă un port de 8 biți bidirecționali, cu rezistori interni, al memoriei XRAM și al cronometrului cu oscillator inter. Buffer-ele de ieșire ale Port-ului A au caracteristici de amplificare.

PB; Reprezintă un port de 8 biți bidirecționali, cu rezistori interni, al celor două număratoare de 8 biți si al unuia din cele 4 număratoare de 16 biți. Buffer-ele de ieșire ale Port-ului D au caracteristici de amplificare.

PC reprezintă un port de intrare/ieșire bidirecționali de 8 biți, cu rezistori interni, al memoriei XRAM. Buffer-ele de ieșire ale Port-ului D au caracteristici de amplificare.

PD; Reprezintă un port de 8 biți bidirecționali, cu rezistori interni, modulului de comunicație USART1, numerator de 8 biți (TC0) si numaratorul de 16 biți (TC1). Buffer-ele de ieșire ale Port-ului D au caracteristici de amplificare.

PE; Reprezintă un port de 8 biți bidirecțional, cu rezistori interni, al unui număratorului de 16 biți (TC3) si un port de intrare pentru comparatorul analogic. Buffer-ele de ieșire ale Port-ului E au caracteristici de amplificare.

PF; este un port ce deservește ca intrare al convertorului analog-digital. Dacă convertorul nu este folosit, acesta este folosit ca un port de 8 biți bidirecțional cu rezistori interni (opționali). Buffer-ele de ieșire ale Port-ului F au caracteristici de amplificare. Daca interfața JTAG (de depanare) este activată, rezistorii pinilor PF5 (TDI), PF4 (TMS) și PF3 (TCK) vor fi activați, chiar daca are loc o resetare..

PG; Reprezintă un port de 6 biți bidirecțional, cu rezistori interni, folosit ca ieșire de memoria XRAM și de număratorul de 8 biți (TC0). Buffer-ele de ieșire ale Port-ului G au caracteristici de amplificare.

PH; Reprezintă un port de 8 biți bidirecțional, cu rezistori interni, folosit de număratorul de 16 biți (TC4) și cel de 8 biti(TC2) doar ca ieșire și ca intrare/ieșire de modul de comunicație USART2. Buffer-ele de ieșire ale Port-ului H au caracteristici de amplificare.

PK; Reprezintă un port de 8 biți bidirecțional, cu rezistori interni, folosit ca intrare de convertorul analogic-digital. Buffer-ele de ieșire ale Port-ului K au caracteristici de amplificare.

PJ; Reprezintă un port de 8 biți bidirecțional, cu rezistori interni, folosit de modulul de comunicație serial USART3. Buffer-ele de ieșire ale Port-ului J au caracteristici de amplificare.

PL; Reprezintă un port de 8 biți bidirecțional, cu rezistori interni, folosit de numaratoarele de 16 biți TC4 si TC5.

Wave Shield

Adăugarea de sunet de calitate la un proiect de electronic este dificil, astfel Wave Shield-ul pentru Arduino rezolva această problemă, putând reda fișiere audio de tip WAVE de orice lungime.

Formatul WAV (Waveform Audio File Format) este un format standard Microsoft sau IBM de stocare a unui fisier audio pe calculator. Deși poate conține semnal audio comprimat, cel mai des întâlnit format audio WAV este necomprimat în formatul LPCM (Linear Pulse Code Modulation – Codul de Impulsuri Modulate Linear). LPCM este formatul audio standard de codare pentru CD-uri care stochează două canale audio LPCM eșantionate de 44.100 ori pe secundă cu 16 biți pe eșantion. Din moment ce LPCM este necomprimat și memorează toate eșantioanele semnalului audio, experții audio utilizează formatul WAV împreună cu LPCM pentru calitatea maximă a semnalului audio.

Shield-ul folosește un regulator de tensiune de 3,3 V, luând tensiune de la pînul de 5V de la plăcută Arduino, acest lucru fiind necesar deoarece cititorul de card funcționează cu o tensiune de 3,3V. O tensiune mai mare va produce deteriorarea cardului SD. Regulatorul de tensiune folosit este MCP1700-330, care poate oferi o intensitate a curentului de până la 250 mĂ. Pentru a-și îndeplini funcția, regulatorul folosește 4 condensatori, doi pentru a stabiliza tensiunea de intrare de 5 volți și doi pentru a stabiliza tensiunea de ieșire de 3,3V. Se poate folosi și pinul de 3,3V de pe plăcuța Arduino,însă nu este indicat, deoarece nu redă curentul necesar shield-ului.

Pe lângă regulatorul de tensiune, shield-ul folosește și un convertor analog-digital pe 12 biți, care folosește un filtru trece jos pentru a elimina zgomotul din semnalul digital, redând astfel un semnal audio de o calitate superioară. Shield-ul este prevăzut și cu un potențiometru de volum.

Shield-ul vine cu o bibliotecă pentru Arduino ușurând utilizarea acestuia, astfel după încărcarea unui fișier audio wave necomprimate pe cardul SD și introducerea acestuia în cititorul de card, permite redarea acestuia. Fișierul audio este folosit asincro, ca o întrerupere, Arduino Uno putând efectua și alte sarcini în timp ce este redat sunetul..

Figure 14, Wave Shield-ul

Senzorul Ultrasonic, HC-SR04

Modulul HC-SR04, folosește un senzor cu ultrasunet pentru determinarea distanței. Acesta permite determinarea unei distanțe între 2 centimetri și 4 metri, având o precizie variabilă ce poate ajunge la 3 milimetri. Modulul include un emițător de ultrasunete, un receptor de ultrasunete și un circuit de control.

Modulul dispune de 4 pini, 2 de alimentare, cu care se alimentează la o tensiune de 5 volți , ceilalți doi, Trigger și Echo, unde Trigger, reprezintă pinul emițătorului iar Echo pinul receptorului.

Principiul de funcționare constă în trimiterea unui semnal pe terminalul Trigger cu o durată de 10us, așteptându-se un răspuns pe terminalul Echo. Durata acestui impuls obținut este împărțită la viteza sunetului, fiind apoi împărțită la 2.

Pentru proiectul meu îl voi folosi pentru a-mi detecta 2 distanțe, astfel în cazul în care senzorul va detecta prezența unui obiect la o distanță de cel mult 10 centimetri, norul va reacționa, simulând reacția unui câine atunci când este deranjat. Pentru a doua distanță, între 10 și 30 de centimetrii, va fi simulat modul furtună, norul creând efecte luminoase, asemănătoare cu cele create de fulger, cu ajutorul ledurilor și va reda audio sunetul produs de tunet.

Figure 15, Modulul HC-SR04

Mediul de programare al plăcuțelor Arduino

Pentru a programa un microcontroller, cu ajutorul plăcuțelor de dezvoltare arduino, este folosită o varianta simplificată a limbajelor de programare C/C++ și un compilator, creat de compania Arduino, care permite încărcarea programului din calculator în memoria microcontroller-ului cu ajutorul unui cablu USB.

Limbajul C, a fost dezvoltat în anii ’70, doarece dezvoltatorii sai Ken Thompson și Dennis Ritchie, aveau nevoie de un limbaj pentru scrierea nucleului UNIX. Acesta este considerat un limbaj minimalist, fiind foarte apropriat de limbajul de asamblare, care operează în strânsă legătură cu structura hardware.

Este un limbaj ce folosește paradigma programarii procedurale, facilitând programarea într-un mod structurat. De asemenea, nu folosește mult spațiu de memorie din memoria calculatorului, permițând accesul folosind pointeri. Diferă de un limbaj de asamblare, deoarece poate fi folosit pe mai multe platforme. Permite folosirea structurilor de date, ce permit ca datele să fie combinate și folosite ca un întreg. Acest limbaj a stat la baza limbajelor de programare orientate pe obiect, precum C++,Java, C#, Python etc.

Limbajul C++ se bazează pe limbajul C, având însă câteva îmbunătățiri notabile. Printre acestea putem aminti faptul că C++ este un limbaj de programare orientat pe obiect, ce permite folosirea unui sistem complex de tipuri de date: supraincarcarea metaprogramarea și procesarea listelor.

„Limbajele de programare orientate pe obiect au fost create deoarece limbajele de până atunci foloseau pentru gruparea instrucțiunilor doar funcții și proceduri, altfel spus o problemă din natură trebuia fragmentată pentru a se putea programa. Pe lângă aceasta, limbajele de programarea clasice realizau separarea datelor de unitățile ce trebuiau procesate. S-a decis așadar separarea acestora, apărând noțiunea de clasă. Clasa grupează datele și unitățile de prelucrare a acestora într-un modul, unindu-le astfel într-o entitate mult mai naturală”.

Principalele caracteristici ale unui limbaj de programare orientat pe obiecte sunt:

Abstractizarea, presupune abilitatea programului de a se concentra asupra unei porțiuni din informație, ignorând restul.

Încapsularea prespune asigurarea ca obiectele nu pot schimba în mod direct starea internă a altor obiecte.

Polimorfismul reprezintă posibilitatea procesarii obiectelor în mod diferit în funcție de tipul sau clasa acestora.

Moștenirea reprezintă permisiunea de a defini și crea clase noi plecând de la clase generale deja definite. Acest lucru este realizat prin gruparea obiectelor în clase și definirea de clase ca extinderi ale claselor deja existente.

Mediul de programare Arduino IDE poate fi extins cu ajutorul bibliotecilor ca majoritatea mediilor de programare. Fiind un produs destinat studenților sau persoanelor pasionate de programare și electronică, Arduino IDE are deja instalate mare parte din bibliotecile necesare creării de programe, iar în cazul în care acestea nu sunt instalate deja, sunt disponibile pe gratuit, putând fi descărcate de pe site-ul oficial al Arduino.

Arduino IDE oferă posibilitatea utilizatorului de a vedea ce execută programul cu ajutorul unui monitor serial. Pentru a afișa mesaje în diferite locații din execuția programului va trebui ca în program să fie inițializată comunicația serială cu ajutorul funcției Serial.begin. De asemenea, pentru fiecare mesaj trebuie folosită sintaxa Serial.print() sau Serial.println().

Figure 16, Mediul de programare Arduino IDE

Efectele luminoase

Pentru a reproduce efectele luminoase produse de fulger, am folosit led-uri și benzi de led-uri conectate la ieșirile digitale ale plăcuței Arduino Mega2560. Pentru a suplini curentul necesar aprinderii benzilor de led, am folosit un amplificator de curent format din 2 tranzistori: unul NPN și unul PNP și două rezistente una de 10 și 1 kiloOhmi, alimentat la o tensiune de 12V.

Banda LED albă folosită pentru generarea luminii de flash are lungimea totală de 5 metri, din care am utilizat 12 bucăți de bandă a cate 10 cm fiecare. Aceastea folosesc o alimentare de 12V pentru un randament maxim cu o putere de 14,4 W pe metru și cu o dimensiune a ledului de 3 mm. Fiecare bandă este împarțită în grupuri de câte trei leduri la o dimensiune a benzii de 5 cm pentru fiecare grup și are un consum de 20mA pe grup, curentul total pe banda de 10cm fiind de:

5*40mA=200mA/bandă

100mA*12=1200mA Curentul total consumat de cele 12 benzi de led folosite.

Pentru restul led-urilor aprinse de Arduino Mega nu am folosit amplificator deoarece curenctul debitat de 40 mA era suficient.

Figure 17, Schema amplificatorului de curent

Tranzistorul BC547 este un tranzistor ce folosește joncțiunea bipolară NPN, putând fi folosit că amplificator sau comutator. Este folosit pentru a aplifica curentul debitat de Arduino Mega, în vederea obținerii curentului de 1 A la ieșirea tranzistorului BD138.

Figure Dispunerea pinilor al Tranzistorului BC547

Tranzistorul BD138 este un tranzistor ce folosește joctiunea PNP, fiind un tranzistor des întâlnit la amplificatoarele audio și drivere, folosind circuite complementare. Acesta poate amplifica curentul de intrare pana la o valoare 1A.

Figure 19 Tranzistorul BD138

Redarea sunetului

Pentru redarea sunetului, am ales un sistem audio 2.1, format din 3 difuzoare: unul de sunete medii și joase și două pentru sunete înalte. Cu o putere de 25 W, 15 W fiind puterea difuzorului de sunete medii și joase, ceilalți 10 W reprezentând puterile adunate ale celor două difuzoare de sunete înalte și având nevoie de un cablu jack de 3,5 milimetri pentru conectarea la Wave shield, este ideal pentru scopul proiectului meu.

Am ales acest sistem de sonorizare in detrimentul unor difuzoare clasice deoarece sunetul produs de difuzorul de bass amplifică efectul norului în ambele moduri de funcționare.

Figure 20 Sistemul audio 2.1

ARHITECTURA APLICAȚIEI

Limbajul de programare folosit pentru dezvoltarea aplicației

Pentru dezvoltarea aplicației am folosit limbajul de programare C dar si limbajul C++ , împreună cu mediul de programare oferit de Arduino, Arduino IDE. Acesta vine de regulă cu un număr mare de librării instalate și oferă totodată posibilitatea de a descarcă gratuit librăria necesară unui proiect de pe site-ul oficial al Arduino, în cazul în care această nu există. Un exemplu este librăria pentru Wave Shield, această nefiind inclusă în librăriile de bază ale Arduino.

Întrucât folosesc două plăcuțe de Arduino, ambele necesită crearea de programe diferite și utilizarea anumitor pini pentru comunicația între acestea.

Descrierea aplicației folosită de Arduino UNO și explicarea funcțiilor

Programul pentru Arduino uno începe prin definirea librăriilor folosite de program pentru citirea de pe cardul SD. Este prezentă, de asemenea, declararea pinilor folosiți de senzorul de distanță HC-SR04(trigPin și echoPin) și a pinilor de comunicație(pornire și oprire), dar și declararea obiectelor ce țin de funcționarea shield-ului.

#include <FatReader.h>

#include <SdReader.h>

#include <avr/pgmspace.h>

#include "WaveUtil.h"

#include "WaveHC.h"

SdReader card;

Acest obiect deține informații despre citirea cardului

FatVolume vol;

Acest obiect reține informații despre formatul cardului de memorie

FatReader root;

Acest obiect reține informații despre tipul fișierelor de pe card

FatReader f;

Acest obiect reține informații despre fișierul redat

WaveHC wave;

Acesta este singurul obiect audio Wave, din moment ce este folosit doar o dată

int trigPin = 8; //pinul emitator

int echoPin = 7; //pinul receptor

int pornireprimulmod = 6; //pornirea primului joc de lumini

int pornirealdoileamod = 9; // pornirea celui de-al doilea joc de lumini

Funcția FREERAM

Funcția freeRam, este folosită pentru a vedea numărul de biți liberi din memoria RAM, acest lucru fiind de mare ajutor în momentul în care există probleme la aplicație și se încearcă repararea acesteia.

int freeRam(void)

{

extern int __bss_end;

extern int *__brkval;

int free_memory;

if ((int)__brkval == 0) {

free_memory = ((int)&free_memory) – ((int)&__bss_end);

}

else {

free_memory = ((int)&free_memory) – ((int)__brkval);

}

return free_memory;

} ;

Funcția sdErrorCheck

Funcția „sdErrorCheck” este folosită pentru a verifica dacă există probleme în citirea cardului.

void sdErrorCheck(void)

{

if (!card.errorCode()) return;

putstring("\n\rSD I/O error: ");

Serial.print(card.errorCode(), HEX);

putstring(", ");

Serial.println(card.errorData(), HEX);

while (1);

};

Functia setup()

Funcția setup() este executată o singură dată, la inițializarea plăcii, fie că vorbim de începerea alimentării plăcii, resetarea ei sau încercarea unui program nou.

Sunt definiți pinii folosiți de aplicație, de la pinii folosiți pentru senzorul de distanță și cei pentru comunicarea cu plăcută Arduino Mega, până la pinii ce sunt folosiți pentru controlul convertorului digital analogic de pe wave shield.

Tot în interiorul funcției setup(), se verifică funcționalitatea shield-ului și slot-ului de card, pentru a vedea dacă este un card și dacă acesta respectă formatul necesar.

void setup() {

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode (pornire, OUTPUT);

pinMode (oprire, OUTPUT);

Serial.begin(9600); Setează rata de transfer a biților pentru transmiterea de date seriale.

putstring_nl("WaveHC with ");

putstring("Free RAM: ");

Serial.println(freeRam()); Afișează spațiul disponibil din memoria RAM

Acești sunt pinii folosiți pentru controlul DAC-ului. Aceștia sunt definiți în librărie

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

if (!card.init()) {

putstring_nl("Card init. failed!");

sdErrorCheck();

while (1);

}

card.partialBlockRead(true);

// În această secțiune se verifică dacă cardul are formatul FAT

uint8_t part;

for (part = 0; part < 5; part++) {

if (vol.init(card, part))

break;

}

if (part == 5) {

putstring_nl("No valid FAT partition!");

sdErrorCheck();

while (1);

}

// În această secțiune, utilizatorul este informat de situatia cardului, dacă acesta îl poate folosi sau nu.

putstring("Using partition ");

Serial.print(part, DEC);

putstring(", type is FAT");

Serial.println(vol.fatType(), DEC); // Afiseaza Formatului cardului, FAT sau FAT32

if (!root.openRoot(vol)) {

putstring_nl("Can't open root dir!");

while (1);

}

putstring_nl("Ready!");

}; “

Funcția loop()

După crearea unei funcții de configurare, funcția Setup(), care initializeaza și definește pinii folosiți, funcția loop, loop în engleză însemnând buclă, face exact ceea ce sugerează și numele, fiind partea din program în care se calculează și se iau decizii.

În funcția loop din programul meu, la începutul acesteia, sunt declarate și definite variabilele folosite pentru interpretarea datelor primite de la senzorul de distanță. Sunt inițializați pinii folosiți de senzorul de distanță.

După declararea și initializarea pinilor, urmează condițiile, dorind să folosesc norul în două moduri, am folosit trei instrucțiuni if-uri “dacă”, punând condițiile astfel:

Dacă distanța detectată de senzor este mai mare de 30 de centimetri, norul să nu facă nimic, ambii pini de comunicare cu Arduino Mega având valoarea “LOW”,Arduino Mega nu va execută nimic în acest caz.

Dacă distanța este mai mică de 10 centimetri, norul va simula reacția unui câine deranjat, fiind selectat de pe cardul de memorie fișierul audio aferent.

Dacă distanța este între 10 și 30 de centimetri, norul va funcționa în modul furtună, simulând efectele luminoase produse de fulger și va fi selectat fișierul audio afferent acestui mod.

În concluzie, funcția loop reprezintă locul în care este creat programul, fiind locul în care se iau majoritatea deciziilor.

void loop() {

long duration, distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = (duration / 2) / 29.1;

if (distance > 20) {

digitalWrite(oprire, LOW);

digitalWrite(pornire, LOW);

}

if (distance <= 8) {

digitalWrite(pornire, HIGH);

digitalWrite(oprire, LOW);

Serial.print("prima distanta este ");

Serial.print("–––––––");

Serial.print(distance);

Serial.print(" cm");

playcomplete("test.wav");

}

În această secțiune este determinată prima distanță și transmiterea datelor către Arduino Mega pentru primul joc de lumini.

else if (distance >= 9 && distance <= 15)

{

digitalWrite(oprire, HIGH);

digitalWrite(pornire, LOW);

Serial.print("a doua distanta este ");

Serial.print("–––––––");

Serial.print(distance);

Serial.print(" cm");

playcomplete("test.wav");

}

În această secțiune este determinată a două distanță și transmiterea datelor către Arduino Mega pentru al doilea joc de lumini.

Funcția playcomplete

Funcția playcomplete redă complet melodia selectata de pe cardul de memorie.

void playcomplete(char *name) {

playfile(name);

while (wave.isplaying)

{

// În acest moment, funcția nu face nimic în timp ce este redat fișierul audio

}

Serial.println(" s-a oprit melodia");

// Afișarea unui mesaj când s-a terminat redarea fișierului audio

}

Funcția playfile

La nivelul acestei funcții, se verifică dacă fișierele audio de pe cardul de memorie sunt formatul wav pentru a putea fi redată.

void playfile(char *name) {

if (wave.isplaying) {

wave.stop();

}

if (!f.open(root, name)) {

putstring("Couldn't open file "); Serial.print(name); return;

}

if (!wave.create(f)) {

putstring_nl("Not a valid WAV"); return;

}

wave.play();

}

Descrierea aplicatiei folosita de Arduino Mega și explicarea funcțiilor

Arduino Mega este folosită pentru a redă efectele luminoase, aplicația folosită neavând complexitatea aplicației destinată Arduino Uno.

În prima parte a programului sunt declarați pinii pentru controlul luminilor dar și pinii prin care aceasta primește comenzi de la plăcuta Arduino Mega.

Funcția Setup(), la fel că la Arduino Uno, rulează o singură dată, fiind locul în care sunt definiți pinii destinați jocului de lumini și pinii folosiți pentru comunicare.

Funcția loop(), este locul în care se găsesc instrucțiunile ce interpretează datele primate și în funcție de condiții, realizează sau nu unul din cele două jocuri de lumini. Astfel, dacă condiția pusă este:

if (digitalRead(pornire) == LOW && digitalRead(oprire)==LOW )

{

Serial.print("nu fac nimic");

} // Nu va fi niciun joc de lumini, neexistând nicio informație transmisă de Arduino Uno.

if (digitalRead(pornire) == HIGH && digitalRead(oprire)==LOW )

{

Serial.println("primul joc de lumini");

digitalWrite(led1, HIGH);

digitalWrite(led2, HIGH);

digitalWrite(led3, HIGH);

digitalWrite(led4, HIGH);

digitalWrite(led5, HIGH);

digitalWrite(led6, HIGH);

digitalWrite(led7, HIGH);

digitalWrite(led8, HIGH);

digitalWrite(led9, HIGH);

digitalWrite(led10, HIGH);

digitalWrite(led11, HIGH);

digitalWrite(led12, HIGH);

digitalWrite(led13, HIGH);

digitalWrite(led14, HIGH);

digitalWrite(led15, HIGH);

digitalWrite(led16, HIGH);

digitalWrite(led17, HIGH);

digitalWrite(led18, HIGH);

delay(10);

digitalWrite(led1, LOW);

digitalWrite(led2, LOW);

digitalWrite(led3, LOW);

digitalWrite(led4, LOW);

digitalWrite(led5, LOW);

digitalWrite(led6, LOW);

digitalWrite(led7, LOW);

digitalWrite(led8, LOW);

digitalWrite(led9, LOW);

digitalWrite(led10, LOW);

digitalWrite(led11, LOW);

digitalWrite(led12, LOW);

digitalWrite(led13, LOW);

digitalWrite(led14, LOW);

digitalWrite(led15, LOW);

digitalWrite(led16, LOW);

digitalWrite(le17, LOW);

digitalWrite(led18, LOW);

); // În urmă instrucțiuni de mai sus, dacă sunt îndeplinite condițiile, Arduino Mega va genera jocul de lumuni pentru primul mod, acela în care redă reacția unui câine când este iritat.

else if (digitalRead(pornire) == LOW && digitalRead(oprire)==HIGH )

{ Serial.print("al doilea joc de lumini");

digitalWrite(led1, HIGH);

delay (6);

digitalWrite(led3, HIGH);

delay (3);

digitalWrite(led4, HIGH);

delay (2);

digitalWrite(led9, HIGH);

delay(10);

digitalWrite(led10, HIGH);

delay(15);

digitalWrite(led11, HIGH);

delay(17);

digitalWrite(led12, HIGH);

delay(10);

digitalWrite(led7, HIGH);

delay (6);

digitalWrite(led8, HIGH);

delay (3);

digitalWrite(led5, HIGH);

delay (6);

digitalWrite(led15, HIGH);

delay (3);

digitalWrite(led13, HIGH);

delay (6);

digitalWrite(led4, HIGH);

delay (3);

digitalWrite(led9, LOW);

delay (20);

digitalWrite(led15, LOW);

delay (12);

digitalWrite(led4, LOW);

delay (17);

digitalWrite(led11, LOW);

delay (20);

digitalWrite(led12, LOW);

delay (12);

digitalWrite(led14, LOW);

delay (17);

digitalWrite(led1, LOW);

delay (20);

digitalWrite(led7, LOW);

delay (12);

digitalWrite(led2, LOW);

delay (17);

}

// În cazul în care nu sunt respectate condițiile din prima instrucțiune și sunt respectate cele din această condiție, Arduino Mega va produce un alt joc de lumini, fiind simulate efectele luminoase produse de fulger.

Alegerea componentelor

Având în vedere că scopul proiectului meu este acela de a crea un obiect de decor inteligent care să interacționeze cu mediul în care este amplasat, alegerea pieselor necesare a fost realizată pe măsură ce am decis funcțiile pe care trebuie să le îndeplinească acesta dar și ce formă ar fi ideală.

Forma obiectului de decor

Pentru a redă formă norului, am ales ca material pentru structură fibra de sticlă deoarece este suficient de rezistență și în același timp nu are o greutate mare. Am construit, cu ajutorul câtorva tuburi cu spumă poliuretanică, matrița folosită pentru a turna fibră de sticlă. Norul este format din două forme identice, ce sunt îmbinate ca o carapace.

Pentru a da un aspect cât mai apropiat de cel al unui nor, am folosit vată sintetică, pe care am lipit-o de structura din fibră de sticlă. Încercând să redau cât mai bine formă de nor, am avut ceva dificultăți, deoarece nu puteam folosii o cantitate foarte mare de vată, pentru că aș fi afectat intensitatea luminii produse de led-uri.

Figure 21 Structura din fibra de sticla

Alegerea plăcuțelor Arduino, a senzorului HC-SR04 și a Wave shield-ului

Pentru a îndeplini funcțiile unui obiect intelligent, acesta are nevoie de un microcontroller care să ia decizii și să acționeze independent în baza unor instrucțiuni predefinite. Având în vedere că sunt pasionat de construcția obiectelor inteligente, în trecut realizând un răcitor, pentru laptop cu ajutorul unei plăcute Arduino Uno, care cu ajutorul unui senzor de temperatura pornea un ventilator dacă temperaturea laptop-ului era ridicată. Astfel, alegerea platformei și a microcontroller-ului pentru îndeplinirea funcțiilor acestui obiect nu a fost una foarte grea.

După alegerea microcontroller-ului, aveam nevoie de un dispozitiv care să-mi redea fișierele audio, stocate pe un card de memorie. După câteva căutări am găsit Wave Shield-ul și MP3 Shield-ul ce pot redă fișere audio de un card de memorie. Am ales acest Wave Shield-ul deoarece pentru proiectul meu nu aveam nevoie de fișiere audio comprimate de o calitate superioară, dar și din considerente economice, MP3 Shield-ul fiind ceva mai scump.

Inițial, proiectul era gândit cu un senzor de mișcare, însă am decis înlocuirea acestuia cu senzorul de distanță HC-SR04. Am luat această hotărâre deoarece cunoșteam senzorul, l-am folosit în trecut într-un alt proiect, în care am construit un senzor de parcare ce funcționa asemănător cu cele montate pe autoturisme. De asemenea, cu acest senzor puteam programa norul să funcționeze în mai multe moduri și să interacționeze ușor cu mediul înconjurător.

Senzorul, în proiectul meu, este amplasat pe una din lateralele norului, dar poate fi amplasat și în alte locații, chiar să nu fie atașat norul. Acest lucru este hotărât în funcție de mediul în care este amplasat norul, dar și de scopul în care se dorește folosirea acestuia, pentru că pe lângă rolul estetic și de divertisment, acesta poate fi folosit și pentru construirea unui sistem de securitate sau de avertizare pentru diferite locații.

După achiziționarea plăcuței Arduino Uno, a senzorului de distanță și a shield-ului, am realizat că pinii rămași disponibili sunt prea puțini pentru a crea efectele luminoase dorite, așadar am căutat o altă placă de dezvoltare ce avea disponibili mai mulți pini digitali.

Am achiziționat plăcuță Arduino Mega deoarece această dispune de un număr mare de pini digitali, cu care pot controla un număr foarte mare de led-uri. Astfel pot să creez jocuri de lumini complexe, redând cât mai exact efectele luminoase produse de fulger.

Pe lângă componentele inteligente și sursele de lumina, pentru redarea audio am folosit un sistem audio 2.1. Acesta are o putere totală de 25W, 15 W fiind puterea difuzorului de bass și ceilalți 10W fiind distribuiți egal între cele două difuzoare, folosite pentru sunetele de medii și înalte.

Am ales acest sistem audio deoarece consider că sunetul redat de acesta este suficient de puternic pentru a creea efectul dorit. De asemenea, calitatea sunetului este una foarte bună, indeplinandu-și cu succes scopul.

Conectarea componentelor și crearea efectelor

Wave Shield-ul este compatibil în totalitate cu Arduino Uno, iar conectarea lor nu necesită niciun cablu, shield-ul având pinii distribuiți după formă pinilor de pe plăcută Arduino Uno, ci doar conectarea pinilor între ei, folosind pini de tip mama-tată, acest lucru fiind posibil prin montarea Wave Shield-ului deasupra plăcuței Arduino Uno.

Figure 22 Conectarea Wave Shield-ului cu Arduino Uno

Conectarea senzorului la Arduino Uno este realizată cu ajutorul unor fire, ce leagă pinii 7 și 8 de pinii trigger respectiv echo ai senzorului. Alimentarea senzorului se face cu ieșirea de 5V a Arduino Uno și o masă.

Figure 23 Conexiunea senzor- Arduino Uno

Conexiunea între cele două plăcuțe Arduino este realizată cu ajutorul a 4 pini, conectați doi câte doi cu ajutorul unor fire. Prin intermediul acestei conexiuni, Arduino Uno comandă jocul de lumini produs de Arduino Mega. Pentru a-i putea identifica ușor, aceștia au primit același nume atât în prima cât și în cea de-a doua aplicație.

Figure 24 Conexiunea intre cele placute Arduino

Conexiunea între Wave Shield și sistemul audio este realizată cu ajutorul unui cablu audio de tip tată-tată, ce are la capete un jack de 3,5 milimetri.

Figure 25 Conexiune dintre Wave shield și sistemul audio

Conexiunea între Arduino Mega și amplificatoarele folosite pentru aprinderea led-urilor este realizată tot cu ajutorul unor cabluri, fiecare ieșire fiind conectată la câte un amplificator.

Figure 26 Conexiunile intre Arduino Mega, Amplificatoarele pentru benzile de led si led-urile fara amplificatoare

Concluzii

Proiectul meu prezintă modul de integrare a microcontrollerelor în obiecte decorative și interactive ce pot avea funcționalități multiple, putând fi folosite și cu un scop practic, pe lângă cel de decor și divertisment.

În viitor vreau să îmbunătățesc funcționarea proiectului meu, astfel încât să îi pot controla modurile de lucru de la distanță cu ajutorul unui telefon mobil, prin bluetooth sau wifi. Pot astfel să adaug norului încă două moduri de lucru, ca lampă de iluminat și ca parte a unui sistem audio complex cu efecte luminoase. Pentru aceste îmbunătățiri, va trebui să fie conectat la Arduino Uno un modul bluetooth sau wifi și, de asemenea, va trebui implementat și un modul cu microfon, pentru ca led-urile să fie aprinse în funcție de frecvență melodiei redate.

Folosirea norului ca un sistem audio complex înseamnă folosirea unui sistem 7.1, în care difuzoarele sunt conectate între ele prin bluetooth, sunetul având un efect impresionant. Cele 7 difuzoare vor fi incluse în câte un nor, formând astfel un sistem de nori. Fiecare nor va avea, pe lângă difuzor, câte o plăcuță de dezvoltare și o diversitate de senzori, formând astfel un sistem complex de obiecte decorative inteligente.

Doresc să realizez acest sistem de nori, deoarece ar fi primul pas în dezvoltarea unei case inteligente, în care fiecare obiect sa poată interacționă cu mediul și locuitorii, dar și să ia decizii singură. Pentru a fi capabilă să ia decizii singură, voi dezvolta o aplicație care să monitorizeze sistemele ce sunt folosite într-o locuință: sistemul electric, sanitar etc., avertizând locuitorii în cazul apariției unei defecțiuni. De asemenea, aplicația va putea să ajusteze temperatura din locuință, aceasta fiind setată de locatar cu ajutorul unui telefonul mobil.

Pe lângă acestea, casa inteligentă se va ocupă de supravegherea stării să sănătate a locuitorilor, măsurând constant ritmul cardiac, tensiunea arterială și orele de odihna. Pentru funcțiile ce țin de sănătate, casa inteligentă va transmite informațiile unui medic la anumite perioade de timp sau dacă detectează schimbări majore.

Va putea să „simtă” starea de spirit a locuitorilor, redând în locuință un anumit gen de muzică, încercând să binedispună locuitorii sau să îi încurajeze. Așadar, casa inteligentă nu va avea doar rolul de supraveghere, ci va interacționa activ cu locuitorii săi, dându-le informații diverse, de la ultimele știri apărute la situația conturilor. Casa inteligentă va fi așadar un prieten al locuitorilor săi, capabilă să ia decizii singură. Pentru realizarea acestui proiect, este necesară o conexiune stabilă și de viteză mare la internet, pentru ca cel care o folosește să poată lua măsuri în cazul semnalării unei defecțiuni.

Pe lângă dezvoltarea aplicație pentru o casă inteligentă, doresc să îmbunătățesc funcțiile unui autoturism cu ajutorul microcontrollerelor. În cazul acestei aplicații, vreau ca autoturismul să comunice cu un satelit, informându-l pe șofer de starea drumului si să își ajusteze singură intensitaea și direcția luminilor. De asemenea, în funcție de starea drumului, să limiteze performantele și consumul de energie, dar și posibilitatea de a se putea autodirecționa, transformând șoferul în pasager.

Pentru a doua aplicație va fi nevoie de o conexiune bună la satelit, dar și de o conexiune la fel de bună la internet, pentru situațiile în care autoturismul se află în zone în care nu se poate stabili o conexiune cu un satelit.

La fel ca și în cazul primei aplicații, și în aceasta poate fi controlată de la distantă cu ajutorul telefonului mobil. Pe lângă control, soferul poate primi date referitoare la cantitatea de combustibil disponibilă, presiunea pneurilor sau dacă autoturismul are o defecțiune și necesită o revizie tehnică.

Aceste două proiecte sunt doar cele mai importante și cele la care am început deja să lucrez, sperând că într-un viitor nu foarte îndepărtat să fie puse în practică și să fie ambele controlate cu aceeași aplicație.

Tehnologia din ziua de azi, bazată pe construcții ce folosesc microcontrollere, se poate integra ușor în orice domeniu, chiar și în creearea obiectelor de artă. Fiecare dintre noi avem o viziune diferită în ceea ce privește artă și obiectele de artă, dar consider că obiectele decorative sunt elementele accesorii ce pot îmbunătății percepția creată de obiectele de artă clasice. Așadar, nu contează forma sau aspectul materialelor brute, ci cum pot fi ele transformate în elemente unice. În asta constă artă, această nu impune limite superioare, ci încurajează folosirea imaginației umane în transformarea obiectelor banale în adevărate opere.

În concluzie, pentru a evidenția utilizarile tehnologiei, pot aminti cuvintele spuse de Winston Churchill referitoare la bătălia din Egipt în cel de-al Doilea Razboi Mondial:

„Acesta nu este sfârșitul.

Nu este nici măcar începutul sfârșitului.

Dar este, poate, sfârșitul începutului”

Bibliografie

T. Mucica și M. Perovici (1982). Universul mijloacelor audiovizuale, Editura Albatros, București

McWilliams, Jerry. The Preservation and Restoration of Sound Recordings. Nashville, Tenn.: American Association for State and Local History, 1979. ISBN 0-910050-41-4

Fleischmann, Monika and Reinhard, Ulrike (eds.). Digital Transformations – Media Art as at the Interface between Art, Science, Economy and Society, disponibil online tnetzspannung.org, 2004, ISBN 3-934013-38-4

Augarten, Stan (1983). The Most Widely Used Computer on a Chip: The TMS 1000. State of the Art: A Photographic History of the Integrated Circuit (New Haven and New York: Ticknor & Fields). ISBN 0-89919-195-9. 

Referințe web

http://www.myria.ro/myria

http://inf.ucv.ro/~mihaiug/courses/poo/slides/Curs%2001%20-%20Introducere%20in%20POO.pdf

http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet_complete.pdf

https://ro.scribd.com/doc/58907199/Curs-Atmega-16-III-Tet

http://profs.info.uaic.ro/~busaco/publications/articles/hipermedia.pdf

https://istoriiregasite.files.wordpress.com/2010/03/roata.jpg

https://ro.wikipedia.org/wiki/Motor_cu_abur

http://web.ulbsibiu.ro/laurean.bogdan/html/Microcontrolere%20introducere.pdf

Codul sursă

Codul pentru Arduino Uno:

#include <FatReader.h>

#include <SdReader.h>

#include <avr/pgmspace.h>

#include "WaveUtil.h"

#include "WaveHC.h"

SdReader card; // Acest obiect deține informații despre citirea cardului

FatVolume vol; // Acest obiect reține informații despre formatul cardului de memorie

FatReader root; // Acest obiect retine informatii despre tipul fisierelor de pe card

FatReader f; // Acest obiect retine informatii despre fisierul redat

WaveHC wave; // Acesta este singurul obiect audio Wave, din moment ce este folosit doar odata

int trigPin = 6;

int echoPin = 7;

int pornire = 8;

int oprire = 9;

// Aceasta functie va returna numarul de biti liberi in memoria RAM,

// Acest lucru fiind foarte folositor cand se face depanarea programului

int freeRam(void)

{

extern int __bss_end;

extern int *__brkval;

int free_memory;

if ((int)__brkval == 0) {

free_memory = ((int)&free_memory) – ((int)&__bss_end);

}

else {

free_memory = ((int)&free_memory) – ((int)__brkval);

}

return free_memory;

} ;

// Aceasta functie este folosita pentru a verifica daca exista o problema cu citirea cardului

void sdErrorCheck(void)

{

if (!card.errorCode()) return;

putstring("\n\rSD I/O error: ");

Serial.print(card.errorCode(), HEX);

putstring(", ");

Serial.println(card.errorData(), HEX);

while (1);

};

//aceasta functie este functia in care sunt definiti pinii folositi de aplicatie

void setup() {

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode (pornireprimulmod, OUTPUT);

pinMode (pornirealdoileamod, OUTPUT);

Serial.begin(9600);

putstring_nl("WaveHC with ");

Serial.print("NUMBUTTONS, DEC");

putstring_nl("buttons");

putstring("Free RAM: ");

Serial.println(freeRam());

//pinii folositi pentru controlul DAC-ului.Acestia sunt definiti in librarie

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

if (!card.init()) { //redarea cu 8MHZ SPI

putstring_nl("Card init. failed!"); // Something went wrong, lets print out why

sdErrorCheck();

while (1); // then 'halt' – do nothing!

}

// permite citirea optima a card-ului

card.partialBlockRead(true);

// in aceasta sectiune se verifica daca cardul are format FAT

uint8_t part;

for (part = 0; part < 5; part++) {

if (vol.init(card, part))

break;

}

if (part == 5) {

putstring_nl("No valid FAT partition!");

sdErrorCheck(); // afisarea unui mesaj in cazul in care ceva nu a mers bine

while (1);

}

// in aceasta sectiune, utilizatorul este informat de situatia cardului, daca acesta il poate folosi sau nu.

putstring("Using partition ");

Serial.print(part, DEC);

putstring(", type is FAT");

Serial.println(vol.fatType(), DEC); // Afiseaza Formatului cardului, FAT sau FAT32

if (!root.openRoot(vol)) {

putstring_nl("Can't open root dir!");

while (1);

}

putstring_nl("Ready!");

};

void loop() {

long duration, distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = (duration / 2) / 29.1;

if (distance > 20) {

digitalWrite(pornirealdoileamod, LOW);

digitalWrite(pornireprimulmod, LOW);

}

if (distance <= 8) {

digitalWrite(pornire, HIGH);

digitalWrite(oprire, LOW);

Serial.print("prima distanta este ");

Serial.print("–––––––");

Serial.print(distance);

Serial.print(" cm");

playcomplete("test.wav");

}

else if (distance >= 9 && distance <= 15) {

digitalWrite(oprire, HIGH);

digitalWrite(pornire, LOW);

Serial.print("a doua distanta este ");

Serial.print("–––––––");

Serial.print(distance);

Serial.print(" cm");

playcomplete("test.wav");

}

else {

}

delay(700);

}

void playcomplete(char *name) {

playfile(name);

while (wave.isplaying) {

// nu face nimic cat timp este redata melodia

}

// melodia a fost redata

Serial.println(" s-a oprit melodia");

}

void playfile(char *name) {

if (wave.isplaying) {

wave.stop();

}

if (!f.open(root, name)) {

putstring("Couldn't open file "); Serial.print(name); return;

}

if (!wave.create(f)) {

putstring_nl("Not a valid WAV"); return;

}

wave.play();

}

Codul pentru Arduino Mega

#include <avr/pgmspace.h>

int pornireprimulmod=8;

int pornirealdoileamod=9;

int led1=52;

int led2=50;

int led3=40;

int led4=46;

int led5=44;

int led6=42;

int led7=41;

int led8=39;

int led9=37;

int led11=35;

int led12=33;

int led13=2;

int led14=3;

int led15=4;

int led16=5;

int led17=6;

int led18=7;

void setup() {

Serial.begin (9600);

pinMode (pornire,INPUT);

pinMode (oprire,INPUT);

pinMode(led12,OUTPUT);

pinMode(led13,OUTPUT);

pinMode (led2, OUTPUT);

pinMode (led7, OUTPUT);

pinMode (led8, OUTPUT);

pinMode (led9, OUTPUT);

pinMode (led10, OUTPUT);

pinMode (led11, OUTPUT);

pinMode (led14, OUTPUT);

pinMode (led3, OUTPUT);

pinMode (led4, OUTPUT);

pinMode (led5, OUTPUT);

pinMode (led6, OUTPUT);

pinMode (led15, OUTPUT);

pinMode (led16, OUTPUT);

pinMode (led17, OUTPUT);

pinMode (led18, OUTPUT);

}

void loop() {

if (digitalRead(pornire) == LOW && digitalRead(oprire)==LOW ){

digitalWrite(led13, LOW);

digitalWrite(led12,LOW);

Serial.print("nu fac nimic");

}

if (digitalRead(pornire) == HIGH && digitalRead(oprire)==LOW ){

Serial.println("primul flash");

digitalWrite(led13, HIGH);

digitalWrite(led12,LOW);

}

else if (digitalRead(pornire) == LOW && digitalRead(oprire)==HIGH ){

Serial.print("al doilea flash");

digitalWrite(led12, HIGH);

digitalWrite(led13, LOW);

}

delay(100);

}

Index

C

CUPRINSUL viii

L

LISTA FIGURILOR ix

R

Referințe web 65

Similar Posts