SISTEM AUTOMAT DE INCUIETOARE CONTROLAT PRIN TELECOMANDA

scroll

SISTEM AUTOMAT DE INCUIETOARE CONTROLAT PRIN TELECOMANDA

1. Motivarea alegerii temei


Tema pe care am ales-o reprezintă un sistem automat de încuietoare controlat prin telecomanda, construit prin intermediul unei plăci Arduino UNO. Mereu mi-am dorit să elaborez ceva practic, cu o utilitate mai mare decât a unui joc, iar libertatea de creație pe care am avut-o mi-a permis acest lucru. Limbajul folosit în cadrul acestui proiect a fost Arduino, foarte similar limbajului C++.

Ce este Arduino și de ce am ales acest limbaj de programare?
R: Arduino este o companie care produce atât plăcuțe de dezvoltare bazate pe microcontrolere, cât și partea de software destinată funcționării și programării acestora. Motivul pentru care am ales să folosesc o astfel de plăcuță a fost acela că în urmă cu câteva luni am participat într-un proiect intitulat „Infotron” prin prisma căruia am căpătat cunoștințele privind mecatronica și Arduino necesare realizării unui astfel de proiect. Totodată și faptul că am putut la sfarsitul fiecarui program scris sa vad finalitatea practica a acestuia a fost un factor important în privință alegerii.

2. Prezentarea aplicației
Proiectul meu are ca scop încuierea şi descuierea unei ușițe de seif cu ajutorul unui servomotor la introducerea unui cod de pe telecomandă (codul are formatul unui pin şi este necesară apăsarea mai multor butoane de pe telecomandă pentru introducerea acestuia).
Pe un breadboard1 se află un ecran LCD2, acesta pornind la apăsarea butonului „-“, afișând mesaje utilizatorului precum „Introduceți codul“ care au scopul de a-l ajuta în utilizarea obiectului. Tot pe breadboard întâlnim senzorul telecomenzii care facilitează funcționarea acesteia, un led RGB care va lumina pentru un scurt interval de timp cu albastru când un buton de pe telecomanda este apăsat, cu verde când codul introdus este corect şi cu roşu când codul este greşit. De asemenea, pe breadboard se află şi un buzzer3 care functionează concomitent cu ledul, reproducând un sunet specific de fiecare dată când un buton este apăsat, când codul introdus este corect sau când codul este greşit. Ultimele componente ale proiectului sunt fotorezistorul4 care se află pe breadboard şi cu ajutorul căruia codul necesar va diferi în funcţie de lumină şi servomotorul5 care la introducerea codului corect îşi va schimba poziţia, făcând astfel posibilă deschiderea uşiţei seifului. Legat de telecomandă, numai anumite butoane funcţionează, acelea fiind: „0”„1” „2” „3” „4” „5” „6” „7” „8” „9” – necesare introducerii codului, butonul „-“ (VOL-) care va porni LCD-ul, butonul „+” (VOL+) cu ajutorul căruia vom putea schimba parola şi butonul „EQ” care va opri ecranul LCD şi va aduce servomotorul în poziţia iniţială blocând uşiţa.
Legendă
1 – Breadboard-ul este o platformă reutilizabilă folosită pentru construirea temporară a circuitelor electronice, un instrument folosit pentru realizarea unui prototip.
2 – Afișajul cu cristale lichide (Liquid Crystal Display, prescurtat LCD) este un dispozitiv de afișare pentru litere, cifre, grafică și imagini, fiind constituit dintr-o matrice de celule lichide care devin opace sau își schimbă culoarea sub influența unui curent sau câmp electric.
3 – Buzzer-ul este un dispozitiv de pronunție care poate converti semnalul audio în semnal sonor.
4 – Un fotorezistor constă într-o piesă de material semiconductor care acționează ca un rezistor, cu excepția faptului că valoarea rezistenței depinde de câtă lumină strălucește pe ea.
5 – Un servomotor este un dispozitiv de acționare liniară care permite un control precis al poziției, vitezei și accelerației unghiulare sau lineare. Acesta constă dintr-un motor adecvat cuplat la un senzor de poziție.

Componente

3. Detalii de implementare
Deși la prima vedere pare un proiect ușor de realizat, acesta nu a fost deloc simplu. Fiind nefamiliarizat încă cu acest limbaj și această plăcuță, cele mai multe ore le-am petrecut căutând pe internet tutoriale, idei sau soluții pentru erorile întâlnite. Iar cum după fiecare eroare pe care o rezolvam apărea alta procesul a durat mai mult.
Problemele care mi-au dat cele mai mari bătăi de cap au fost legate de introducerea parolei folosind butoanele telecomenzii și adăugarea parolei de utilizator și schimbarea acesteia.
Programul conține două funcții importante: void setup și void loop și incă câtevă funcții ajutătoare. În setup se inițializează bibliotecile și modurile pinilor care pot fi INPUT sau OUTPUT. Un pin OUTPUT poate fi doar pornit și oprit, în timp ce un pin INPUT doar înregistrează anumite chestiuni. De exemplu, ledul este OUTPUT. Acesta va porni și se va opri în funcție de comanda dată. Dar de fotorezistor, care este INPUT ne putem folosi întrebând dacă înregistrează un anumit nivel de luminozitate și îi putem da o comandă unui pin OUTPUT în funcție de asta. Void setup rulează o singură dată, la pornirea proiectului sau la resetarea de pe butonul de pe plăcuță. În void loop, după cum sugerează și numele, se repetă codul la nesfârșit.
Deoarece telecomanda este indispensabilă în acest proiect, primul lucru care se va întâmpla în loop este să ne întrebăm dacă senzorul telecomenzii a primit vreun semnal (la apăsarea oricărui buton de pe telecomandă, senzorul primește un semnal adică o valoare specifică butonului apăsat). Dacă da, atunci ne vom declara un string s care primește acea valoare și apoi îl vom compara cu niște stringuri declarate anterior. Aceste stringuri au fiecare valoarea cate unui buton de pe telecomandă. De exemplu stringul „Pornire” este egal cu valoarea butonului „-” de pe telecomandă, stringul „Buton1” este egal cu valoarea butonului „1” etc.

Dacă am apăsat „-” pe telecomandă, atunci s va fi egal cu „Pornire” și ecranul LCD va porni.

Daca am apăsat un buton de la 0 la 9, folosit pentru  introducerea pinului atunci vom avea un alt string  numit „Cifra” care va primi ca valoare numărul de pe buton, iar dacă seiful nu este deblocat atunci se va apela o nouă funcție, ActualizareParola.

În ActualizareParola se vor apela 2 funcții, Sunet și Lumina cu ajutorul cărora ledul va clipi și buzzer-ul va scoate un mic sunet iar apoi un nou string va aduna valoarea stringului Cifra. Ideea este că în antet am declarat un string numit ParolaImplicita = „123456”, aceasta fiind parola. Noi în ActualizareParola avem stringul ParolaIntrodusa = „” care memorează fiecare număr apăsat pe telecomandă și când lungimile celor două sunt egale se întreabă dacă și stringurile sunt egale, caz în care parola a fost introdusă corect, seiful se deblochează, ledul verde se aprinde și buzzer-ul scoate un sunet sugestiv. În caz contrar seiful nu s-ar fi deblocat, ParolaIntrodusa ar fi devenit din nou „”, ledul s-ar fi aprins roșu, iar buzzer-ul ar fi scos un sunet sugestiv de greșeală.

Butonul „EQ” este folosit la blocarea seifului, dar și la resetarea codului în cazul în care am introdus o cifră greșită. Așadar la apăsarea acestuia, ne întrebăm mai întâi daca vrem să-l blocăm sau resetăm adică dacă seiful e blocat sau nu. În cazul în care este deblocat, servomotorul își schimbă poziția blocând seiful, iar ParolaIntrodusa se resetează. În caz contrar, doar ParolaIntrodusa se resetează.

Și ultimul buton funcțional al telecomenzii este butonul „+”, acesta având rolul de a schimba parola. La apăsarea acestui buton se vor apela aproape mereu două funcții, SetareParola si SchimbareParola. Aici întâlnim o nouă variabilă de tip bool numită ParolaSePoateSchimba. Aceasta are rolul de a diferenția introducerea parolei pentru deblocarea seifului cu schimbarea parolei. Dacă nu ar exista această variabilă, nu ar fi posibilă schimbarea parolei. Ea are valoarea false și aproape întotdeauna va intra în al doilea if și va apela funcția SetareParola.
În acea funcție ParolaSePoateSchimba devine true, seiful se blochează, ParolaIntrodusă se resetează, iar utilizatorului i se cere să introducă o nouă parolă de 6 cifre și să apese iar „+”. Apăsând iar „+”, intrăm iar pe acel else if de mai sus, doar că de data asta ParolaSePoateSchimba este true iar noi am introdus o parolă la tastatură. Așadar se apelează SchimbareParola unde ParolaUtilizatorului (cea pe care am schimbat-o) devine ParolaIntrodusa și seiful se blochează.
Privind implementarea, asta a fost cea mai dificilă parte a proiectului, dar am reușit să o depășesc cu ajutorul multor variante precum ParolaSePoateSchimba.

De reținut faptul că în aceste imagini am modificat puțin codul pentru a fi mai ușor de înțeles.

4. Posibilități de dezvoltare
Deși proiectul se află într-o fază terminală, încă mai am niște idei de dezvoltare ale acestuia:

  •  Prima idee pe care aș vrea s-o pun în aplicare ar fi aceea ca la introducerea unui cod greșit de 3 ori, buzzer-ul să emită un sunet deranjant timp de 30 de secunde.
  •  O altă idee ar fi aceea să mai atașez un senzor de temperatură cu ajutorul căruia codul va putea diferi în funcție de câte grade sunt în cameră la momentul respectiv.
  • Ultima, dar nu cea din urmă noțiune pe care aș vrea s-o adaug proiectului meu ar fi înlocuirea telecomenzii cu o tastatură numerică.


1. Resurse hardware și software necesare

Resurse hardware minime:
– Procesor: Intel Pentium II 266 MHz
– Memorie: 128 MB RAM
– Spațiu hard disk: 600 MB
– Mouse & Tastatură

Resurse software minime:
– Sistem de operare: Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10


5. Bibliografie

  1. http://mthackathon.info/resources/The-Most-Complete-Starter-Kit-for-UNO-V1.0.17.3.6.pdf
  2.  http://www.circuitbasics.com/arduino-ir-remote-receiver-tutorial/
  3. http://forum.arduino.cc/index.php?topic=3757.0
  4. https://github.com/z3t0/Arduino-IRremote/wiki/Receiving-with-the-IRremote-library