This is an old revision of the document!
Schema bloc generală:
DISCLAIMER : DREPTUNGHIUL MIC CONECTAT LA DIFUZOR ESTE DFPLAYER-UL
Descriere module și interacțiuni:
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.
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.
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.
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)`.
Conectat la SPK1/SPK2 ale DFPlayer Mini. Oferă feedback sonor cu vocea „Jarvis”.
Sursă mobilă de alimentare pentru întregul sistem.
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.
= Software Design =
<pre> void echoInterrupt() {
// ISR pentru ECHO pin change // Debounce protection // Flag setting pentru main loop // Execution time: <10µs
} </pre>
<pre> bool initializeDFPlayer() {
// DFPlayer initialization sequence // Volume configuration (0-30) // SD card validation // Error handling pentru connection
} </pre>
<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>
<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>
* 'measureDistance()
': O(1) - constant time
* 'State transitions
': O(1) - boolean comparison
* 'PWM generation
': O(1) - hardware timer
* 'ISR execution
': O(1) - direct flag setting
<pre> Hardware Events → ISR → Flag Setting → Main Loop Processing → Action Execution
↑ ↑ ↑ ↑ ↑ GPIO/Timer Interrupt Volatile State Machine PWM/Serial
</pre>
* 'Concurrent execution
': PWM, Audio, GPIO în paralel
* 'Interrupt priority
': Hardware events cu prioritate maximă
* 'Timer-based delays
': Evitarea blocking calls în loop principal
<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>
* 'Sensor failure
': Continue operation cu last known state
* 'Audio failure
': Maintain servo functionality
* 'Power fluctuations
': Automatic recovery după reset
{| 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) | |||
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.