Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:imacovei:georgiana.olaru [2022/05/14 21:34]
georgiana.olaru
pm:prj2022:imacovei:georgiana.olaru [2022/05/23 22:29] (current)
georgiana.olaru
Line 5: Line 5:
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul consta in realizarea unui sistem care are ca scop deblocarea unei usi atunci cand este introdus codul pin corect, urmat de tasta '​*'​.+Proiectul consta in realizarea unui sistem care are ca scop deblocarea unei usi atunci cand este introdus codul pin corect, urmat de tasta '*'. Daca codul introdus este corect se va auzi o melodie de succes sau de fail in cazul in care codul este gresit. De asemenea, codul pin se poate schimba cu unul nou daca este apasata tasta '#'.
  
 ===== Descriere generală ===== ===== Descriere generală =====
Line 32: Line 32:
   * Incuietoare   * Incuietoare
   * Conector baterie 9v   * Conector baterie 9v
 +  * Buzzer
   * Fire   * Fire
  
Line 45: Line 46:
 La inceputul programului imi declar si imi initializez toate variabilele de care o sa am nevoie. Pentru a salva o parola am folosit memoria EEPROM. Initial am setat o parola demo (0000), dar apoi am comentat acele linii de initializare pentru a nu fi mereu acea parola. Apoi de fiecare data citesc ultima parola salvata pe Arduino si initializez parola in functia numita initialPassword,​ care este apelata mai tarziu in setup(). La inceputul programului imi declar si imi initializez toate variabilele de care o sa am nevoie. Pentru a salva o parola am folosit memoria EEPROM. Initial am setat o parola demo (0000), dar apoi am comentat acele linii de initializare pentru a nu fi mereu acea parola. Apoi de fiecare data citesc ultima parola salvata pe Arduino si initializez parola in functia numita initialPassword,​ care este apelata mai tarziu in setup().
  
-In functia setup() setez pe HIGH relay pin-ul (adica poarta este inchisa), este pornit ecranul, se citeste parola din memorie si setez timpii.+In functia setup() setez pe HIGH relay pin-ul (adica poarta este inchisa), este pornit ecranul, se citeste parola din memorie si setez registrele pentru timer.
  
-In functia loop() se verifica initial timer-ul, adica daca au trecut mai mult de secunde de cand a fost introdusa parola si nu a fost apasata tasta '​*', ​se reseteaza si codul pin trebuie introdus din nou. De asemenea, se apasa cate o cheie de pe tastatura si se verifica ce tasta reprezinta. Daca este '#',​ atunci se apeleaza functia change() care schimba parola cu una noua, daca este '​C',​ se sterge tot de pe ecran si se revine cu indexul la 0. Daca este altceva introdus, inseamna ca a fost apasata o tasta care reprezinta o bucata din parola ​si incepe timer-ul sa contorizeze, iar caracterul se adauga in string. Apoi, daca se apasa tasta '​*',​ incepe sa se verifice cu parola initiala. Se citeste iar parola, se verifica si daca este corecta, apare mesajul 'Pass Accepted!',​ se trece relay pin-ul in LOW si se deblocheaza poarta si ramane asa timp de 4 secunde. Tot aici iti afiseaza pe ecran daca vrei sa schimbi parola. Daca parola introdusa este gresita, relay pin-ul ramane in continuare pe HIGH, afiseaza 'Wrong Password!'​ si te intreaba din nou daca vrei sa schimbi parola.+Functia ISR este o functie de intrerupere care se declanseaza la fiecare 4 secunde si doar seteaza o variabila pe true pentru resetarea ecranului. 
 + 
 +Functia resetScreen() reseteaza ecranul daca trec 4 secunde si reseteaza timer-ul. 
 + 
 +In functia loop() se verifica initial timer-ul, adica daca au trecut mai mult de secunde de cand nu a fost apasat vreun buton si se reseteaza si codul pin trebuie introdus din nou. De asemenea, se apasa cate o cheie de pe tastatura si se verifica ce tasta reprezinta. Daca este '#',​ atunci se apeleaza functia change() care schimba parola cu una noua, daca este '​C',​ se sterge tot de pe ecran si se revine cu indexul la 0. Daca este altceva introdus, inseamna ca a fost apasata o tasta care reprezinta o bucata din parola, iar caracterul se adauga in string. Apoi, daca se apasa tasta '​*',​ incepe sa se verifice cu parola initiala. Se citeste iar parola, se verifica si daca este corecta, apare mesajul 'Pass Accepted!',​ se trece relay pin-ul in LOW si se deblocheaza poarta si ramane asa timp de 4 secunde. Tot aici iti afiseaza pe ecran daca vrei sa schimbi parola. Daca parola introdusa este gresita, relay pin-ul ramane in continuare pe HIGH, afiseaza 'Wrong Password!'​ si te intreaba din nou daca vrei sa schimbi parola.
  
 Functia change() schimba parola cu una noua. Cand este apasata tasta '#',​ trebuie introdusa parola curenta si daca este cea corecta, poti sa introduci noua parola si se salveaza in EEPROM caracter cu caracter si afiseaza ca s-a schimbat parola cu succes. Functia change() schimba parola cu una noua. Cand este apasata tasta '#',​ trebuie introdusa parola curenta si daca este cea corecta, poti sa introduci noua parola si se salveaza in EEPROM caracter cu caracter si afiseaza ca s-a schimbat parola cu succes.
 +
 +Folosindu-ma de functiile playSuccessSong() si playWrongSong() am implementat functionalitatea de a se auzi o melodie de succes pentru atunci cand parola este cea corecta si una de fail pentru atunci cand parola este gresita. Am 2 vectori ce contin notele muzicale pentru parola corecta, respectiv gresita. In cele doua functii, mai intai se calculeaza lungimea (numarul de note), apoi se trece prin fiecare nota, se genhereaza un sunet si apoi cate o pauza, care este mai mare decat durata notei.
  
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +Demo: [[https://​www.youtube.com/​watch?​v=nUW5KafqmEY&​ab_channel=LetitiaOlaru]] 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+ 
-</​note>​+{{:​pm:​prj2022:​imacovei:​whatsapp_image_2022-05-14_at_22.20.16.jpeg?​400|}} 
 + 
 +{{:​pm:​prj2022:​imacovei:​whatsapp_image_2022-05-14_at_22.20.16_1_.jpeg?​400|}} 
 + 
 +{{:​pm:​prj2022:​imacovei:​whatsapp_image_2022-05-14_at_22.20.16_2_.jpeg?​400|}} 
  
 ===== Concluzii ===== ===== Concluzii =====
  
-Realizarea acestui proiect a fost o experienta interesanta pentru ca am putut expune cunostintele dobandite pe parcursul semestrului intr-un mod fun, practic si putand ​implementa un proiect ​la alegere.+Realizarea acestui proiect a fost o experienta interesanta pentru ca am putut expune cunostintele dobandite pe parcursul semestrului intr-un mod fun, putand ​sa ne alegem ce proiect ​vrem noi.
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +{{:pm:prj2022:imacovei:pm-proiect.zip|}}
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +
-</​note>​+
  
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +{{:​pm:​prj2022:​imacovei:​pm_pin_door_lock.pdf|}} 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+ 
-</note>+[[https://​ocw.cs.pub.ro/​courses/​pm]] 
 + 
 +[[https://​github.com/​fdebrabander/​Arduino-LiquidCrystal-I2C-library]] 
 + 
 +[[https://​playground.arduino.cc/​Code/​Keypad/#​Download]] 
 + 
 +[[https://​gist.githubusercontent.com/​mikeputnam/​2820675/​raw/​bbe995aa22826a8fbbb6b56ccd56513f9db6cb00/​pitches.h]] 
 + 
 +[[https://​create.arduino.cc/​projecthub/​GeneralSpud/​passive-buzzer-song-take-on-me-by-a-ha-0f04a8]] 
 + 
 + 
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2022/imacovei/georgiana.olaru.1652553248.txt.gz · Last modified: 2022/05/14 21:34 by georgiana.olaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0