This is an old revision of the document!


Security Smart Alarm

Introducere

Proiectul este un sistem de securitate smart care utilizează senzori ultrasonici și PIR pentru a detecta mișcarea într-o zonă monitorizată. Odată ce mișcarea este detectată, un microcontroller activează un ecran LCD pentru a afișa un mesaj de avertizare și pornește un semnal sonor deranjant. Alarma poate fi activată/dezactivată din telefon prin intermediul unui modul bluetooth.

Scopul proiectului este de a crea o alarmă care să ofere proprietarului posibilitatea de a monitoriza și proteja zona în timp real, oferind informații relevante despre evenimentele detectate.

Descriere generală

O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.

Senzorul Ultrasonic detectează obiectele sau persoanele prin emisia de unde sonore și măsurarea timpului de întoarcere a acestora. Senzorul PIR HC-SR501 detectează mișcarea prin schimbările de radiații infraroșii emise de obiectele în mișcare. Microcontrollerul preia datele de la senzori, controlează afișajul LCD și gestionarea comunicațiilor Bluetooth/Wi-Fi. Ecranul LCD afișează informații despre starea sistemului și evenimentele detectate. Modul Bluetooth permite proprietarului să activeze sau să dezactiveze oricând alarma prin intermediul telefonului.

Laboratoare folosite:

  1. USART: https://ocw.cs.pub.ro/courses/pm/lab/lab1-2023 (Folosesc USART pentru debug și pentru analizarea real-time a datelor înregistrate de senzori)
  2. I2C: https://ocw.cs.pub.ro/courses/pm/lab/lab6-2023-2024 (Folosesc I2C în comunicarea cu ecranul LCD)
  3. ADC: https://ocw.cs.pub.ro/courses/pm/lab/lab4-2023-2024 (Folosesc ADC pentru senzorul de proximitate, in calcularea valorilor si normalizarea lor <partea de preprocesare a valorilor generate>)

Elemente de noutate ale proiectului

Fata de alte proiecte asemanatoare, am folosit mai multi senzori de acelasi tip, sau diferiti si am creat o macheta personalizata (o situatie reala) pentru o casa pe un singur nivel, cu doua camere si un hol. Am impartit senzorii astfel incat fiecare dintre ei sa detecteze miscarea pentru o anumita arie.

Hardware Design

Aici puneţi tot ce ţine de hardware design:

Listă de piese:

  • Senzor Ultrasonic HC-SR04
  • 2x Senzor PIR HC-SR501
  • Microcontroller
  • Ecran LCD
  • Modul Bluetooth
  • Breadboard
  • Buzzer activ

Schema electrică

Calibrarea senzorilor și a modulelor

În cadrul proiectului am folosit 3 senzori, doi de mișcare și unul de proximitate. Pentru a folosi cum trebuie senzorii a trebuit să îi reglez cu ajutorul potensiometrelor existe pe ei. În plus la senzorul de proximitate am făcut câteva modificări asupra valorilor citite direct în cod.

- Senzorii PIR HC-SR501: Senzorul poate înregistra mișcarea obiectelor într-o rază de pâna la 6 metrii, cu un unghi de pâna la 110 grade. Astfel că amplasat undeva deasupra, spre exemplu pe tavanul încăperii, senzorul poate să înregistreze mișcarea din întreaga încăpere (fie ea în formă dreptunghiulară, pătratică sau circulară). Pe partea din spate a senzorului se află două potensiometre, unul pentru reglarea sensibilității acestuia la mișcare și altul pentru timpul de așteptare până la următoarea depistare a mișcărilor. Am modificat puțin valoarea de delay întrucât era setată pe la aproximativ 3 minute, iar senzorul depista foarte greu mișcările. Acum senzorul este setat să citească o nouă valoare a mișcării la fiecare 0.3 secunde. (Intervalul de timp de hold este 0.3 secunde, 5 minute)

- Senzorul de proximitate: Acesta citește încontinuu valori până la cel mai apropiat obstacol din fața lui, desigur dacă acesta există pe o distanță cuprinsă între 2 centimetrii și 4 metrii. Modificările aduse asupra acestui senzor sunt doar pentru normalizarea valorilor citite, pentru a putea face verificările mai ușor.

- Ecranul LCD: Pentru acest ecran a fost nevoie să introduc o nouă bibliotecă în cod și să depistez cu ajutorul unui cod găsit pe internet adresa modului (codul poate fi găsit aici: https://playground.arduino.cc/Main/I2cScanner). Apoi a trebuit să ajustez potensiometrul de pe partea anterioară a ecranului pentru a se afișa mesajele transmise către acesta.

- Modulul Bluetooth: Pentru acest modul am schimbat sursa de alimentare, pentru a nu îl arde, de la 5v la 3.3v și am instalat pe telefon o aplicație (Bluetooth Serial Terminal) pentru a mă putea conecta la el. A fost nevoie și de adăugarea în cod a unei noi biblioteci specifică modulului.

Poze cu circuitul final

Circuitul conectat la alimentare, dar fără să fie pornită alarma (se poate observa că ledurile sunt stinse, iar senzorii nu vor detecta niciun fel de mișcare).

Senzorul 1, amplasat în prima cameră detectează mișcare:

Senzorul 2, amplasat în a doua cameră detectează mișcare:

Ambii senzori, din ambele camere detectează mișcare:

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Mediu de dezvoltare

Pentru proiectarea placutei de Arduino Uno R3 am folosit Arduino IDE, integrand in cod diverse librarii si functii ale acestora.

Librarii

  • Wire.h : Aceasta este o librarie standard pentru comunicatia I2C pe Arduino, folosita pentru a interactiona cu dispozitivele conectate pe magistrala I2C.
  • LiquidCrystal_I2C.h : O librarie pentru controlul afisajelor LCD prin intermediul protocolului I2C, oferind functionalitati pentru setarea cursorului, stergerea ecranului si afisarea de text. Am folosit-o pentru a afisa diverse mesaje pe ecranul LCD.
  • SoftwareSerial.h : Permite utilizarea unor pinii digitali pentru comunicatie seriala, oferind posibilitatea de a crea porturi seriale suplimentare pe Arduino. Am folosit-o pentru interactiunea cu modulul Bluetooth, intrucat unul dintre pinii mei de pe placuta (RX sau TX) era stricat si nu aveam cum sa ii folosesc pe aceia.

Functii implementate

  • setup() : Functia de initializare a componentelor hardware si software. Configureaza pini, initializează comunicația serială și modulul LCD, și setează starea inițială a sistemului.

Initializarea comunicatiei seriale: Serial.begin(9600)

Initializarea ecranului LCD: lcd.init() | lcd.backlight()

Initializarea comunicatiei cu modulul Bluetooth: HM10.begin(9600)

  • loop() : Funcția principală care se execută continuu, monitorizând starea senzorilor și gestionând afișajul și alarmarea.

Ascultarea portului serial HM10:

HM10.listen();
while (HM10.available() > 0) 
  appData = HM10.read();
  inData = String(appData);
  Serial.write(appData);
if (Serial.available()) 
  delay(10);
  HM10.write(Serial.read());

Controlul stării alarmei:

if (inData == "0") {
  Serial.println("Alarm OFF");
  digitalWrite(13, LOW); 
  if (nr == 0) {
    refresh();
    digitalWrite(ledPin, LOW);
    nr = 1; 
  }
}
while (inData == "1") {
  nr = 0;
  Serial.println("Alarm ON");
  digitalWrite(13, HIGH);
  val = digitalRead(pirPin);
  val_cam2 = digitalRead(pirPinCam2);
  ...
}

Măsurarea distanței folosind senzorul ultrasonic

digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
float distance = pulseIn(ECHOPIN, HIGH) / 58;
Serial.print("Door distance: ");
Serial.println(distance);

-refresh() : Funcție care resetează afișajul LCD și afișează mesajul “You are safe!”.

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You are safe!");

-pericol() : Funcție care afișează mesajul de avertizare de la camera 1 pe LCD.

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Warning from ");
lcd.setCursor(0, 1);
lcd.print("camera 1!");

-pericol_cam2() : Funcție care afișează mesajul de avertizare de la camera 2 pe LCD.

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Warning from ");
lcd.setCursor(0, 1);
lcd.print("camera 2!");

-pericol_both() : Funcție care afișează mesajul de avertizare de la ambele camere pe LCD.

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Warning from ");
lcd.setCursor(0, 1);
lcd.print("both cameras!");

-alarm(long duration, int freq) : Funcție care activează buzzerul pentru un anumit timp și frecvență.

tone(buzzerPin, freq);
delay(duration);
noTone(buzzerPin);

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/avaduva/matei.costescu2301.1716682834.txt.gz · Last modified: 2024/05/26 03:20 by matei.costescu2301
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