This shows you the differences between two versions of the page.
pm:prj2022:cristip:apartmentalarm [2022/06/02 02:04] diana_maria.simion [Implementare] |
pm:prj2022:cristip:apartmentalarm [2022/06/02 10:06] (current) diana_maria.simion [Concluzii] |
||
---|---|---|---|
Line 113: | Line 113: | ||
** Sincronizarea intre tastele apasate si LCD ** | ** Sincronizarea intre tastele apasate si LCD ** | ||
+ | |||
+ | Flowul descris este similar cu cel din diagrama de stari. Folosesc variabilele boolean isPasswordSet si activeAlarm ca sa identific state-ul din diagrama. | ||
+ | |||
<code> | <code> | ||
void keypadAndLcdJob() | void keypadAndLcdJob() | ||
Line 144: | Line 147: | ||
</code> | </code> | ||
- | **Mesajele afisate pe LCD** | + | ** Setarea parolei ** |
+ | |||
+ | <code> | ||
+ | /* Sets the current password */ | ||
+ | void setPassword() | ||
+ | { | ||
+ | while (true) { | ||
+ | /* Pretty prints for the user */ | ||
+ | ... | ||
+ | |||
+ | char key = customKeypad.getKey(); | ||
+ | if (key) { | ||
+ | if (passwordIndex < MAX_INDEX) { | ||
+ | /* Show the current character and then replace with a "*" */ | ||
+ | ... | ||
+ | |||
+ | /* Save the current character and advance */ | ||
+ | ... | ||
+ | } else { | ||
+ | if (key == ACTIVATE_KEY) { | ||
+ | /* Send the complete password to the user via bluetooth */ | ||
+ | ... | ||
+ | |||
+ | /* Prints a countdown until the alarm is activated */ | ||
+ | activateAlarmCountdown(0, ACTIVATE_ALARM_TIMEOUT); | ||
+ | |||
+ | /* Mark the set alarm and reset indexes */ | ||
+ | ... | ||
+ | |||
+ | /* The function can exit when the activate key was pressed */ | ||
+ | return; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ** Verificarea parolei ** | ||
+ | |||
+ | Pentru aceasta parte, am ales sa pastrez un loop infinit care se opreste cu introducerea corecta a parolei. Intre incercari am pus un countdown care sa blocheze incercarile abuzive. Pentru a testa mai usor insa, am lasat niste timpi mici. Implementarea urmeaza un pattern similar cu setPassword. | ||
+ | |||
+ | <code> | ||
+ | void checkPassword(); | ||
+ | </code> | ||
+ | |||
+ | ** Optiunea aleasa dupa introducerea corecta a parolei ** | ||
+ | |||
+ | In functie de optiunea aleasa, actualizez variabilele necesare functionarii asteptate a sistemului. | ||
+ | |||
+ | <code> | ||
+ | void activateOrReset(); | ||
+ | </code> | ||
+ | |||
+ | ** Countdown ** | ||
+ | |||
+ | Functia poate fi folosita atat pentru numaratoarea inversa pana la activarea alarmei (dupa ce a fost setata), dar si dupa o incercare gresita, prin cei doi parametri pentru mesajul dorit de afisat si numarul de la care sa inceapa numaratoarea inversa. | ||
+ | |||
+ | <code> | ||
+ | void activateAlarmCountdown(int option, int timeout) | ||
+ | </code> | ||
+ | |||
+ | ** Mesajele afisate pe LCD ** | ||
+ | |||
+ | In plus, prin variabila enteredPasswordState am retinut starea in care userul a introdus de introdus parola, insa nu a trecut la pasul urmator. | ||
<code> | <code> | ||
/* Prints helper messages on the LCD */ | /* Prints helper messages on the LCD */ | ||
Line 174: | Line 243: | ||
==== Biblioteci folosite ==== | ==== Biblioteci folosite ==== | ||
+ | * Wire.h - comunicarea cu modulul I2C | ||
* LiquidCrystal_I2C.h - comunicarea cu LCD-ul cu modul I2C | * LiquidCrystal_I2C.h - comunicarea cu LCD-ul cu modul I2C | ||
* Keypad.h - comunicarea cu tastatura numerica | * Keypad.h - comunicarea cu tastatura numerica | ||
Line 191: | Line 261: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Proiectul a fost placut de realizat si am categoric o mai buna intelegere a celor lucrate la laborator, intrucat am avut mai mult timp de gandire. | ||
+ | |||
+ | Provocarea principala a venit din structurarea interactiunii cu tastatura numerica si LCD-ul astfel incat sa nu fie nevoie de instructiuni suplimentare de utilizare ale acestora. | ||
+ | |||
+ | Conectarea cu modulul bluetooth a fost de asemenea satisfacator, iar o idee de imbunatatire consta in crearea unui UI mai dragut si a posibilitatii efectuarii de configurari pentru alarma de pe telefon. | ||
+ | |||
+ | Testarea pentru senzorul de fum a fost putin problematica pentru ca a trebuit sa dau foc hartiei:). | ||
===== Download ===== | ===== Download ===== | ||
Arhiva: {{:pm:prj2022:cristip:security_and_safety_alarm_system.zip|}} | Arhiva: {{:pm:prj2022:cristip:security_and_safety_alarm_system.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
+ | |||
+ | * 9.05.2022 - Alegerea proiectului si definitivarea functionalitatilor | ||
- | <note tip> | + | * 16.05.2022 - Documentatie: Introducere, descriere generala, schema bloc, componente shema electrica |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
+ | * 21-22.05.2022 - Conectarea componentelor, comunicarea cu LCD-ul | ||
+ | |||
+ | * 28.05.2022 - Logica pentru setarea, activarea si resetarea parolei | ||
+ | |||
+ | * 29.05.2022 - Conectarea cu modulul bluetooth | ||
+ | |||
+ | * 30.05.2022 - Documentatie: Software design, rezultate obtinute | ||
+ | |||
+ | * 31.05.2022 - Rezolvare bug-uri si imbunatatiri | ||
===== Resurse ===== | ===== Resurse ===== | ||
Line 207: | Line 293: | ||
Keypad: https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/ | Keypad: https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/ | ||
+ | |||
+ | Modul Bluetppth: https://www.instructables.com/Remotely-Control-LED-using-HC-05-Bluetooth-Arduino/ | ||
+ | |||
+ | Piese Eagle: https://github.com/ErichStyger/mcuoneclipse/tree/master/Eagle/Library | ||
+ | ===== Export to PDF ===== | ||
<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> |