Table of Contents

Tamagotchi Circuits

Introducere

Tamagotchi Circuits este un proiect individual care combină embedded cu o interfață hardware interactivă pe ESP32.

Ideea principală: o fantomă (Ghost Boo) afișată pe un ecran OLED devine tristă în timp. Pentru a o menține fericită, utilizatorul trebuie să joace minigame-uri — unele dintre ele implică construirea unor circuite electronice reale pe breadboard, pe care ESP32 le validează și le face graficul pe un al doilea ecran OLED dedicat minigame-urilor.

Scopul proiectului este de a oferi un sistem de recompensă concret (menținem fantoma fericită) prin construirea și înțelegerea unor circuite electronice, învățând astfel concepte de bază din electronică și fizică.

Proiectul este finalizat cu 9 minigame-uri funcționale: potentiometer, RC circuit (6 configurații), voltage divider, diode rectifier, transistor switch, NPN amplifier, deadbeet rhythm, și metronome.

Abstractizarea generală a conceptului de „circuit minigame” ca struct `minigame_t` este implementată: fiecare minigame expune `init`, `deinit`, `run` și un `mood_reward`, toate înregistrate într-un registry cu progresie liniară.

Proiectul este util pentru că stimulează dorința de a învăța electronică și de a construi circuite corecte, într-un mod interactiv și vizual.

Descriere Generală

Minigame-uri

# Minigame Descriere GPIO-uri Status
0 Potentiometer Wiperul unui potențiometru; menții zona țintă random 3s GPIO32 (ADC1 CH4) ✓ Implementat
1 RC circuit (6 config.) Construiești R+C pe breadboard; ESP măsoară τ prin least-squares pe ln(V) GPIO25 out, GPIO34 ADC ✓ Implementat
2 Voltage divider Doi rezistori în serie; ESP validează raportul de tensiune GPIO25 out, GPIO34 ADC ✓ Implementat
3 RC low/high-pass filter R+C; ESP măsoară răspunsul în frecvență la PWM GPIO25 PWM, GPIO34 ADC TODO
4 Diode rectifier Diodă + condensator pe semnal cosine 200Hz redresat; osciloscop live GPIO25 DAC, GPIO34 ADC ✓ Implementat
5 Capacitor buffer Condensatorul menține tensiunea după tăierea GPIO-ului GPIO25 out, GPIO34 ADC TODO
6 Transistor switch NPN în saturație (1kΩ bază); ESP conduce baza, măsoară Vc la colector GPIO25 out (bază), GPIO34 ADC (colector) ✓ Implementat
6b NPN Amplifier NPN în regim activ (1MΩ bază); ESP măsoară β real (Ib=2.6µA fix) GPIO25 out (bază), GPIO34 ADC (colector) ✓ Implementat
7 LM-35 temperature Senzor temperatură extern, output direct pe ADC GPIO35 (ADC1 CH7) TODO
8 Deadbeet rhythm ESP redă o secvență de LED-uri; utilizatorul o repetă pe butoane colorate GPIO13/12/14 out (LED), GPIO19/17/16 in (R/G/B) ✓ Implementat
9 Metronome Două potențiometre (BPM + duty cycle) + buzzer pasiv; ține 3s pentru pass GPIO32, GPIO35 ADC; GPIO23 PWM ✓ Implementat

Games 1–6b partajează GPIO25 și GPIO34 — circuitul de pe breadboard se schimbă între ele, nu pinii.

Schema bloc

Modulele principale și interacțiunile dintre ele:

Hardware Design

Pinout

Display-uri

Display Diagonală Rol Bus I2C SDA SCL Adresă
SH1106 1.3” Ghost — permanent activ I2C0 (I2C_NUM_0) GPIO18 GPIO5 0x3C
SSD1306 0.96” Minigame support I2C1 (I2C_NUM_1) GPIO4 GPIO15 0x3C

Ambele display-uri au adresa 0x3C — menținute pe bus-uri separate pentru a evita conflictul. Ambele sunt cablate pe Side 1 al DevKit-ului pentru cablaj curat.

Pini minigame-uri

# Minigame Circuit Pini
0 Potentiometer Wiper pot la ADC GPIO32 (ADC1 CH4)
1 RC circuit R + C la GND GPIO25 out, GPIO34 ADC
2 Voltage divider Doi rezistori în serie GPIO25 out, GPIO34 ADC
3 RC low/high-pass filter R+C, măsurare răspuns frecvență GPIO25 PWM, GPIO34 ADC
4 Diode rectifier Diodă + cap pe semnal cosine redresat GPIO25 DAC, GPIO34 ADC
5 Capacitor buffer Cap menține tensiunea după GPIO cut GPIO25 out, GPIO34 ADC
6 Transistor switch NPN saturație: 1kΩ bază, LED pe colector GPIO25 out (bază 1kΩ), GPIO34 ADC (colector)
6b NPN Amplifier NPN activ: 1MΩ bază, 1kΩ colector, β real GPIO25 out (bază 1MΩ), GPIO34 ADC (colector)
7 Temperature LM-35 Output LM-35 la ADC GPIO35 (ADC1 CH7)
8 Deadbeet rhythm LED-uri secvență, butoane colorate repetă GPIO13/12/14 out (R/G/B LED), GPIO19/17/16 in (R/G/B buton)
9 Metronome Două pot-uri + buzzer pasiv GPIO32 ADC (BPM), GPIO35 ADC (duty), GPIO23 PWM

Pini ficși

Pin Rol
GPIO33 BTN_A — buton principal (ISR, falling edge, debounce 300ms)
GPIO23 Buzzer PWM (metronome)

Listă de piese

# Componentă Cantitate Observații
1 ESP-32 Devkit V1 (DOIT) 1 Microcontroller principal
2 Ecran OLED SH1106 1.3”, 128×64, I2C 1 SDA→GPIO18, SCL→GPIO5; display fantomă
3 Ecran OLED SSD1306 0.96”, 128×64, I2C 1 SDA→GPIO4, SCL→GPIO15; display minigame
4 Senzor temperatură LM-35 1 ADC→GPIO35
5 Butoane tactile + set butoane colorate SYB-120 4+ 3× deadbeet rhythm (R/G/B) + 1× BTN_A principal
6 LED-uri RGB 3 Deadbeet rhythm game (R/G/B)
7 Buzzer pasiv 1 Metronome minigame (PWM GPIO23)
8 Potențiometre 2+ 1× potentiometer minigame (GPIO32), 1× metronome duty (GPIO35); potențiometre colorate SYB-120
9 Rezistențe, condensatoare, diode asortate Pentru circuit minigame-uri (RC, divider, filter, rectifier)
10 Tranzistoare NPN 2N2222 2+ Transistor switch minigame (1kΩ bază) + NPN amplifier (1MΩ bază)
11 Kit breadboard SYB-120 (Optimus Digital) 1 4 breadboard-uri, fire, butoane colorate, potențiometre
12 Fire de breadboard Conectică generală

Scheme electrice

Schema hardware placa (PDF)

Voltage divider, RC circuit diode rectifier, transistor switch, NPN amplifier, deadbeet rhythm, metronome: Vezi caietul cu ecuațiile și schemele pentru referință.

TODO: Schemă electrică pentru RC low/high-pass filter

TODO: Schemă electrică pentru capacitor buffer

TODO: Schemă electrică pentru LM-35 temperature sensor

Diagrame de semnal

Vezi caietul cu ecuațiile și schemele pentru referință.

Software Design

Mediu de dezvoltare

Arhitectură

Două task-uri FreeRTOS:

Abstractizare minigame (`minigame_t`):

typedef struct {
    const char  *name;          // afișat pe SH1106 „NEXT:"
    esp_err_t  (*init)(void);   // configurare GPIO/ADC
    void       (*deinit)(void); // restaurare GPIO safe state
    bool       (*run)(void);    // loop blocant; true = pass
    uint8_t     mood_reward;    // puncte mood la PASS
} minigame_t;

Registry (`minigame_registry.c`): progresie liniară; `registry_advance()` apelat indiferent de rezultat (pass sau abort).

Ghost state machine: 5 stări — NEUTRAL, SAD, HAPPY, CELEBRATING, MEASURING. Decay de mood dependent de bandă (mai rapid la mood scăzut). Animații 2-frame per stare pe SH1106.

Buton (`g_minigame_btn`): ISR pe GPIO33 (falling edge, debounce 300ms). Când un minigame este activ, apăsările sunt rutate prin `g_minigame_btn` — fiecare minigame își gestionează propria logică de stop/avans.

RC Minigame — detalii algoritm

6 configurații modulare, toți parametrii derivați din `tau_ms`:

Config R C τ Concept
RC 100ms 1kΩ 100µF 100ms Rezistență mică → descărcare rapidă
RC 200ms 2kΩ 100µF 200ms R dublu → τ dublu
RC 500ms 10kΩ 2×100µF serie 500ms C serie reduce capacitatea
RC 1s 10kΩ 100µF 1s Configurație de bază
RC 2s 10kΩ 2×100µF paralel 2s C paralel dublează capacitatea
RC 4s 20kΩ (2× serie) 2×100µF paralel 4s Compus — τ = R×C scalează cu ambii

TODO Software

Concluzii

Proiectul a atins obiectivul principal: 9 minigame-uri funcționale, fiecare cerând utilizatorului să construiască un circuit real pe breadboard și să îl valideze cu ESP32.

Abstractizarea `minigame_t` s-a dovedit robustă — fiecare joc nou a necesitat modificări în exact 3 fișiere (minigame nou, `minigame_registry.c`, `minigame_rewards.h`), fără a atinge codul existent.

Cea mai complexă măsurătoare: RC τ prin least-squares pe ln(V) cu timestamps reale, toleranță ±35% pentru componente reale. Cea mai vizuală: diode rectifier cu osciloscop live pe SSD1306 — 128 sample-uri la 200Hz, 2 cicluri complete pe ecran.

GPIO25 și GPIO34 sunt partajate de 7 jocuri (RC, voltage divider, rectifier, transistor switch, NPN amplifier) — breadboard-ul se schimbă între minigame-uri, pinii nu. Aceasta a simplificat semnificativ cablajul permanent.

Remaparea display-urilor pe Side 1 al DevKit-ului (SSD1306→GPIO4/15, SH1106→GPIO18/5) a eliminat firele lungi care traversau breadboard-ul.

Rămân de implementat: RC filter, capacitor buffer și LM-35 — fiecare necesită aproximativ aceeași structură ca jocurile existente.

Download

TODO: Arhivă cu sursele finale, README și instrucțiuni de compilare/flash.

Jurnal

Bibliografie/Resurse

Export to PDF