Differences

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

Link to this comparison view

pm:prj2022:cristip:apartmentalarm [2022/06/02 01:44]
diana_maria.simion [Bibliografie/Resurse]
pm:prj2022:cristip:apartmentalarm [2022/06/02 10:06] (current)
diana_maria.simion [Concluzii]
Line 66: Line 66:
 ===== Software Design ===== ===== Software Design =====
  
 +==== Implementare ====
  
-Structura codului se imparte in cele 2 functii efundamentale in Arduino: +** Setup **
-  ​setup() +
-  ​loop()+
  
-In loop() am separat responsabilitatea fiecarei componente prin urmatoarele functii: +Initializez pinii de input si output pentru toate componentele software si cateva variabile necesare.
-  * void distanceSensorJob() +
-  * void gasSensorJob() +
-  * void buzzerJob() +
-  * void ledsJob() +
-  * void keypadAndLcdJob() +
-  * void checkPassword()+
  
 +<​code>​
 +/* Initializes all the hardware components */
 +void setup()
 +{
 + /* Serial setup */
 + Serial.begin(9600);​
  
-Biblioteci folosite: + /* LCD setup */ 
-  * Wire.h + lcd.init();​ 
-  * LiquidCrystal_I2C.h + lcd.backlight();​ 
-  * Keypad.h+ lcd.print("​Starting"​);​ 
 + 
 + /* Distance sensor setup */ 
 + pinMode(TRIG_PIN,​ OUTPUT); 
 + pinMode(ECHO_PIN,​ INPUT); 
 + 
 + /* Piezo buzzer setup */ 
 + pinMode(BUZZER_PIN,​ OUTPUT); 
 + 
 + /* Leds setup */ 
 + pinMode(GREEN_LED_PIN,​ OUTPUT); 
 + pinMode(RED_LED_PIN,​ OUTPUT); 
 + 
 + /* Keypad setup */ 
 + customKeypad.setDebounceTime(50);​ 
 + 
 + /* Messages to be printed setup*/ 
 + texts[0] = text0; 
 + texts[1] = text1; 
 +
 +</​code>​ 
 + 
 +In **loop()** am separat responsabilitatea fiecarei componente prin urmatoarele functii: 
 +  * Senzorul de distanta masoara distanta de la acesta <​code>​ void distanceSensorJob() </​code>​ 
 +  * Senzorul de gaz analizeaza cantitatea de gaz.fum din aer si declanseaza alarma daca este cazul <​code>​void gasSensorJob()</​code>​ 
 +  * Buzzerul porneste daca alarma est pornita si prezenta a fost detectata <​code>​ void buzzerJob() </​code>​ 
 +  * Ledurile se vor aprinde in functie de activarea /​deactivarea alarmei <​code>​void ledsJob() </​code>​ 
 + 
 +In afara de acestea tratez urmatoarele situatii astfel: 
 + 
 +** 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>​ 
 +void keypadAndLcdJob() 
 +
 + /* Updte the buzzer and lcd status */ 
 + buzzerJob();​ 
 + lcdMessages();​ 
 + gasSensorJob();​ 
 + 
 + /* Actions after the password was set */ 
 + if (isPasswordSet) { 
 + if (activeAlarm) { 
 + checkPassword();​ 
 + } else { 
 + activateOrReset();​ 
 +
 +
 + 
 + /* The password has to be set */ 
 + char key = customKeypad.getKey();​ 
 + if (key) { 
 + if (isPasswordSet == false) { 
 + if (key == NEXT_KEY) { 
 + lcd.setCursor(0,​ 1); 
 + lcd.print(emptyLine);​ 
 + setPassword();​ 
 +
 +
 +
 +
 +</​code>​ 
 + 
 +** 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>​ 
 +/* Prints helper messages on the LCD */ 
 +void lcdMessages() 
 +
 + /* First row message */ 
 + lcd.setCursor(0,​ 0); 
 + if (isPasswordSet == false) { 
 + lcd.print(setPasswordMessage);​ 
 + 
 + /* Second row message */ 
 + lcd.setCursor(0,​ 1); 
 + lcd.print(pressAMessage);​ 
 + } else if (activeAlarm == true) { 
 + if (enteredPasswordState == false) { 
 + lcd.print(alarmOnMessage);​ 
 +
 + } else if (activeAlarm == false) { 
 + if (isPasswordCorrect == true) { 
 + lcd.print(activateMessage);​ 
 + 
 + /* Second row message */ 
 + lcd.setCursor(0,​ 1); 
 + lcd.print(resetMessage);​ 
 +
 +
 +
 +</​code>​ 
 + 
 +==== Biblioteci folosite ​==== 
 +  * Wire.h ​- comunicarea cu modulul I2C 
 +  * LiquidCrystal_I2C.h ​- comunicarea cu LCD-ul cu modul I2C 
 +  * Keypad.h ​- comunicarea cu tastatura numerica
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 99: 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 115: 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>​
pm/prj2022/cristip/apartmentalarm.1654123479.txt.gz · Last modified: 2022/06/02 01:44 by diana_maria.simion
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