This is an old revision of the document!


Masca Iron Man

Introducere

Proiectul constă într-o mască similară cu cea a lui Iron-Man. Masca se va putea deschide la o comanda sau în momentul în care cineva se apropie de ea cu ajutorul unui senzor de proximitate. De asemenea atunci când se va deschide și închide, un difuzor cu vocea lui Jarvis va vorbi despre ce și cum se întâmplă.

Descriere generală

Schema bloc generală:

DISCLAIMER : DREPTUNGHIUL MIC CONECTAT LA DIFUZOR ESTE DFPLAYER-UL

Descriere module și interacțiuni:

  • Arduino Uno Rev3

Microcontroler ATmega328P, operare la 5 V, 14 pini digitali I/O (6 PWM), 6 pini analogici. Primește semnal de la senzor și comandă servomotoarele și modulul audio.

  • 2× Servo SG90

Rotație 0–180°, alimentare 4,8–6 V, cuplu ~1,8 kg·cm. Montate pe balamaua feței măștii; primesc poziție în grade prin semnale PWM de la Arduino.

  • Senzor HC-SR04 Ultrasonic

Detectează distanțe între 2 și 400 cm, precizie ±3 mm. Conectat la Arduino (Trig→D2, Echo→D3); când distanța <30 cm, declanșează deschiderea măștii.

  • DFPlayer Mini

Modul MP3 cu DAC 24-bit și microSD (FAT16/FAT32 până la 32 GB), control UART (RX/TX). Redă fișiere `0001.mp3` (deschidere) și `0002.mp3` (închidere) la comanda `player.play(n)`.

  • Difuzor 8 Ω / 3 W

Conectat la SPK1/SPK2 ale DFPlayer Mini. Oferă feedback sonor cu vocea „Jarvis”.

  • Baterie LiPo 7,4 V / 1200 mAh

Sursă mobilă de alimentare pentru întregul sistem.

  • Modul powerbank 18650

Modulul powerbank 18650 furnizeaza stabil 5V DC dintr-o singura baterie Li-Ion, fiind ideal pentru alimentarea placilor de dezvoltare Arduino sau Raspberry Pi.

Din pacate nu a ajuns DFplayer Mini si placa arduino asa ca am improvizat pe o placa esp32. Singurul lucru ramas este sa adaug acel DFPlayer.

Hardware Design

5. Interrupt Handling

<pre> void echoInterrupt() {

  // ISR pentru ECHO pin change
  // Debounce protection
  // Flag setting pentru main loop
  // Execution time: <10µs

} </pre>

6. Audio Control Functions

<pre> bool initializeDFPlayer() {

  // DFPlayer initialization sequence
  // Volume configuration (0-30)
  // SD card validation
  // Error handling pentru connection

} </pre>

7. Utility Functions

<pre> void printSystemInfo() {

  // Debug information output
  // Pin configuration display
  // System status monitoring

}

bool validateDistance(float dist) {

  // Input validation pentru măsurători
  // Range checking: 2-400cm
  // Invalid reading filtering

} </pre>


Memory & Performance Metrics

Resource Utilization

<pre> Flash Memory Usage Program Storage: ~18,432 bytes (56.9% of 32,256 bytes) Dynamic Memory: ~1,024 bytes (50.0% of 2,048 bytes) Execution Performance Setup Time: ~2 seconds (DFPlayer init) Loop Cycle: ~100ms (măsurare + processing) Interrupt Response: <50µs (hardware priority) </pre>

Algorithm Complexity

* 'measureDistance()': O(1) - constant time * 'State transitions': O(1) - boolean comparison * 'PWM generation': O(1) - hardware timer * 'ISR execution': O(1) - direct flag setting


Software Architecture Pattern

Event-Driven Architecture

<pre> Hardware Events → ISR → Flag Setting → Main Loop Processing → Action Execution

    ↑              ↑         ↑              ↑                    ↑
 GPIO/Timer    Interrupt   Volatile      State Machine      PWM/Serial

</pre>

Non-Blocking Design

* 'Concurrent execution': PWM, Audio, GPIO în paralel * 'Interrupt priority': Hardware events cu prioritate maximă * 'Timer-based delays': Evitarea blocking calls în loop principal


Error Handling & Recovery

Implemented Safeguards

<pre> Timeout protection long duration = pulseIn(ECHO_PIN, HIGH, 30000); if (duration == 0) return 0; Invalid reading

Debounce filtering if (currentTime - lastInterruptTime < DEBOUNCE_TIME) return; DFPlayer connection validation if (!dfPlayer.begin(dfPlayerSerial)) {

  Serial.println("DFPlayer Error!");
  while(true) delay(0); // Safe halt

} </pre>

Graceful Degradation

* 'Sensor failure': Continue operation cu last known state * 'Audio failure': Maintain servo functionality * 'Power fluctuations': Automatic recovery după reset


Tabel Funcții Implementate

{| class=“wikitable”

! Funcție !! Tip !! Complexitate !! Descriere

setup()
Initialization O(1)
loop()
Main Control O(1)
measureDistance()
GPIO O(1)
moveServosTo()
PWM O(1)
echoInterrupt()
ISR O(1)
activateProximityMode()
Composite O(1)
deactivateProximityMode()
Composite O(1)
initializeDFPlayer()
Audio O(1)

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/prj2025/vradulescu/robert_ion.bolfa.1748205477.txt.gz · Last modified: 2025/05/25 23:37 by robert_ion.bolfa
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