Smart Stairway Access

Iarina-Ioana Popa, 332CA

Introducere

Proiectul își propune realizarea unui sistem integrat de automatizare și monitorizare pentru mediul casnic, capabil să gestioneze automat deschiderea/închiderea unei uși, să ofere efecte luminoase interactive și să monitorizeze eventualele scurgeri de apă. Scopul principal este crearea unui sistem inteligent care să îmbunătățească confortul și siguranța locuinței prin automatizare și alertare în timp real. Această platformă vine în sprijinul utilizatorilor care doresc să își modernizeze casa cu soluții inteligente și să beneficieze de un sistem de alertare timpurie în cazul problemelor cu apa.

Video Funcționalitate Completă https://www.youtube.com/shorts/vK7qDZlOeQ

Descriere generală

Laboratoare folosite: GPIO, PWM, Analog Read, Timer, Interrupt

Module hardware:

  • Arduino UNO: Microcontroller central ce gestionează întregul sistem – citește senzorii, controlează servo, buzzerul și LED-urile.
  • Senzor de apă: Detectează prezența lichidului și declanșează alarma vizuală și sonoră.
  • Senzor ultrasonic (HC-SR04): Detectează apropierea unei persoane și acționează ușa automat.
  • Servo motor: Deschide/închide ușa în funcție de detecția senzorului de proximitate.
  • LED-uri RGB: Aprinse cu efect de fade-in/fade-out controlat printr-un buton.
  • Buzzer: Emite semnal sonor continuu pentru alarmă sau scurt pentru activările clasice din afara stadiului de urgență.
  • Buton: Utilizat pentru a activa manual efectul LED cu fade.

Module software - Arduino UNO:

  • Citește senzorul ultrasonic pentru a detecta apropierea și controlează servo-ul.
  • Monitorizează senzorul de apă; dacă detectează o valoare peste un prag, activează alarma și aprinde LED-urile.
  • Gestionează fade-ul LED-urilor în mod automat sau la apăsarea butonului.
  • Verifică starea butonului pentru a opri alarma sau pentru a activa LED-urile.

Interacțiune între module:

  • Când o persoană se apropie de ușă:
    • Senzorul ultrasonic detectează prezența la o distanță mică (4cm aici).
    • Arduino activează servo-ul pentru a deschide ușa.
    • După câteva secunde, servo-ul revine pentru a închide ușa.
  • Dacă se detectează apă:
    • Arduino activează buzzerul și aprinde LED-urile la intensitate maximă.
    • Ușa se deschide automat pentru evacuare.
    • Sistemul rămâne în starea de alarmă până când utilizatorul apasă butonul.
  • La apăsarea butonului:
    • Dacă NU este alarmă, se activează efectul LED RGB (fade).
    • Dacă ESTE alarmă activă, se dezactivează alarma și toate efectele.

Schema bloc:

Hardware Design

Listă de piese:

  • Arduino UNO - 1 buc
  • Senzor ultrasonic HC-SR04 - 1 buc
  • Senzor detectare apă - 1 buc
  • Servo motor - 1 buc
  • Buzzer activ - 1 buc
  • LED-uri (alb, verde, albastru) - 3 trepte (6 bucăți în cazul meu)
  • Buton - 1 buc
  • Breadboard - 1 buc
  • Fire de conexiune - multe, diverse dimensiuni

Schema electrică pentru ușa

BOM:

Nr. Componenta Datasheet Link Magazin
1 Arduino UNO Datasheet Optimusdigital
2 Servo Motor Datasheet Optimusdigital
3 Senzor de apă Datasheet Optimusdigital
4 Senzor HC-SR04 Datasheet Optimusdigital
5 LED-uri Datasheet Optimusdigital
6 Buzzer activ Datasheet Optimusdigital
7 Buton Datasheet Optimusdigital
8 Fire de conexiune - Optimusdigital

Software Design

Mediu de Dezvoltare: Am folosit ca mediu principal de dezvoltare Arduino IDE și C/C++ ca limbaj.

Librării și alte funcții:

  • Servo.h (gestionarea servo motorului)
  • Funcții Arduino standard

Algoritmi și structuri de date:

  • Algoritm Măsurare Distanță - Generează un impuls pe pinul trigger, măsoară timpul impulsului de pe pinul echo și calculează distanța la care se află persoana nfață de senzor.

digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);

long duration = pulseIn(ECHO_PIN, HIGH);
float distance = (duration * 0.034) / 2;

return distance;

  • Algoritm Control Ușa - Verifică continuu distanța măsurată - dacă detectează un obiect la mai puțin de 4cm și ușa este închisă, activează servo-ul pentru deschidere. După 5 secunde, închide automat ușa. Include și deschiderea automată a usii în caz de pornire a sistemului de alarmă.

float distance = masoaraDistanta();

if (alarmActive) {
  if (!doorOpen) {
    doorServo.write(90);
    doorOpen = true;
  }
  return;
}

if (distance < 4.0 && !doorOpen) {
  doorServo.write(90);
  doorOpen = true;
  doorOpenTime = millis();
  
  digitalWrite(BUZZER_PIN, HIGH);
  delay(100);
  digitalWrite(BUZZER_PIN, LOW);
}

if (doorOpen && !alarmActive && (millis() - doorOpenTime > 5000)) {
  doorServo.write(0);
  doorOpen = false;
}

  • Algoritm Detectare și Alarmă Apă - Citește valoarea de la senzorul de apă la fiecare secundă. Dacă valoarea depășește pragul de 300, activează protocolul de urgență (buzzer continuu + LED-uri la maxim + ușă deschisă permanent). Alarma se dezactivează automat când nivelul apei scade.

  if (alarmActive) {
    alarmActive = false;
    
    // Opreste buzzer
    digitalWrite(BUZZER_PIN, LOW);
    
    // Stinge LED-urile
    analogWrite(LED1_PIN, 0);
    analogWrite(LED2_PIN, 0);
    analogWrite(LED3_PIN, 0);
  }

  • Algoritm Efect Fade LED - Realizează un efect de fade pe ledurile treptelor în momentul în care este apăsat butonul. Se aprinde întâi ledul1, apoi ledul2, apoi ledul3, fiecare înainte ca cel anterior să fi ajuns la aprindere maximă. Ledurile rămân aprinse, apoi se sting în sens invers, pentu a facilita urcarea scărilor.

if (!alarmActive) { // Nu porni fade dacă e alarma
  fadeActive = true;
  fadeStep = 0;
  lastFadeUpdate = millis();
}

  • Algoritm Debouncing Buton - Identifică treceri de la LOW la HIGH ca să detecteze apăsarea de buton.

Pentru că unele acțiuni pot să le oprească pe altele, am setat și niște priorități. De exemplu, activarea alarmei de apă și activarea modului de urgență oprește toate celelalte funcționalități până când senzorul nu mai detectează umiditate.

if ((millis() - lastDebounceTime) > debounceDelay) {

  // Daca starea s-a stabilizat 
  if (reading != buttonCurrentState) {
    buttonCurrentState = reading;
    
    // Detecteaza tranzitia de la LOW la HIGH
    if (buttonCurrentState == HIGH) {
      // Butonul a fost apasat - porneste efectul fade
      startFade();
  }
}

Funcții implementate: Am organziat codul în funcții pentru înțelegrea mai ușoară. Acestea sunt câteva dintre ele

  • setup() - inițializare sistem, configurare pini
  • loop() - bucla principală de execuție
  • masoaraDistanta() - citire senzor HC-SR04
  • gestioneazaUsa() - logica controlului uși
  • gestioneazaButon() - debouncing și control buton
  • monitorizeazaApa() - verificare nivel apă și alarmă
  • startFade() - inițializare efect LED
  • procesareFade() - executie efect fade în timp real

Cod sursă: https://github.com/iarinapopa13/Smart_Stairway_Access

Rezultate Obţinute

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

Bibliografie/Resurse

pm/prj2025/mdinica/iarina_ioana.popa.txt · Last modified: 2025/05/29 17:57 by iarina_ioana.popa
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