Table of Contents

Security & Safety Alarm - Simion Diana-Maria 331CA

Student: Simion Diana-Maria

Grupa: 331CAa

Introducere

Ideea de baza de la care am pornit a fost crearea unei alarme multifunctionale pentru casa/apartament care sa detecteze atat prezenta unui strain, cat si situatii neprevazute precum un incendiu/gaz emanat.

Pentru a pune in dificultate intrusul in casa in care se afla sistemul, o data simtita prezenta, alarma va declansa un zgomot puternic ce va putea fi oprit doar prin introducerea parolei (setata anterior de proprietar). La introducerea parolei corecte, zgomotul va inceta, insa la introducerea unei parole gresite, sistemul va fi blocat pentru o bucata de timp, iar zgomotul va continua.

Proprietarul are atat optiunea de a dezactiva sistemul de alarma (cand este acasa de exemplu), dar si de a reseta parola curenta.

Senzorul de gaz va fi declansat de prezenta unei cantitati semnificatice de GPL, izobutan, propan, metan, alcool, hidrogen sau fum. Acesta va porni de asemenea o alarma destul de galagioasa pentru a anunta membrii locuintei aflati in alte camere.

Pentru a spori aplicabilitatea sistemului, am introdus si un modul bluetooth care anunta proprietarul ce parole au fost introduse, dar care poate salva si istoricul parolelor setate de catre el (in caz ca acesta uita parola curenta).

Consider proiectul util si usor de integrat in viata de zi cu zi, putand fi montat intr-o cutie pe un perete sau dulap.

Descriere generală

Shema bloc

Interactiunea cu utilizatorul

Diagrama starilor

Semnificatia pentru tastele folosite sunt:

Utilizarea acestora este ghidata de urmatorul flow:

Hardware Design

Lista de componente

Schema electrica

Pentru schema electrica am folosit Eagle. Dintre componentele proiectului, cateva sunt din bibliotecile Sparkfun si Adafruit, cateva piese din biblioteci externe (cele mai multe piese de aici), cateva desenate de mine.

Software Design

Implementare

Setup

Initializez pinii de input si output pentru toate componentele software si cateva variabile necesare.

/* 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;
}

In loop() am separat responsabilitatea fiecarei componente prin urmatoarele functii:

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.

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();
			}
		}
	}
}

Setarea parolei

/* 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;
				}
			}
		}
	}
}

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.

void checkPassword();

Optiunea aleasa dupa introducerea corecta a parolei

In functie de optiunea aleasa, actualizez variabilele necesare functionarii asteptate a sistemului.

void activateOrReset();

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.

void activateAlarmCountdown(int option, int timeout)

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.

/* 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);
		}
	}
}

Biblioteci folosite

Rezultate Obţinute

Demo sistem de alarma

Demo alarma de fum

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

Arhiva: security_and_safety_alarm_system.zip

Jurnal

Resurse

LCD: https://create.arduino.cc/projecthub/Arnov_Sharma_makes/lcd-i2c-tutorial-664e5a

Ultrasonic sensor: https://randomnerdtutorials.com/complete-guide-for-ultrasonic-sensor-hc-sr04/

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

Export to PDF