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:47]
diana_maria.simion [Biblioteci folosite]
pm:prj2022:cristip:apartmentalarm [2022/06/02 10:06] (current)
diana_maria.simion [Concluzii]
Line 68: Line 68:
 ==== Implementare ==== ==== 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);​
 +
 + /* LCD setup */
 + lcd.init();​
 + lcd.backlight();​
 + 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 ==== ==== 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 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.1654123653.txt.gz · Last modified: 2022/06/02 01:47 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