1. ro
  2. en
28 iulie 2025

Repetă după mine

Introducere

 

În universul jocurilor de memorie, Simon Says, jocul de la care am preluat ideea, este un clasic indiscutabil—o provocare simplă, dar captivantă, în care jucătorii trebuie să repete o secvență de culori și sunete cu precizia unui metronom. Creat în anii ’70 ca un dispozitiv electronic ce combina sunet, lumină și memorie vizuală, Simon a devenit rapid un fenomen cultural. Astăzi, în era microcontrolerelor și educației STEM, pasionații de tehnologie îl reimaginează cu gust, transformându-l într-un instrument ideal pentru învățare interactivă și experimentare DIY.

 

O astfel de reinterpretare vine cu ajutorul platformei Arduino, unde Simon Says primește un upgrade colorat și sonor: LED-uri vibrante, tonuri polifonice specifice fiecărei culori, și un afișaj digital TM1637 care adaugă un strat vizual retro-cool, afișând mesaje și scoruri într-un mod captivant. Codul prezent oferă o execuție clară și modulară, construită pentru interactivitate și feedback instantaneu, în care fiecare componentă are un rol bine definit: LED-urile semnalizează pașii, difuzorul asigură comunicarea acustică, iar butoanele permit o interacțiune directă cu jucătorul.

 

Jocul se desfășoară intuitiv: după afișarea mesajului „ROSU” pe display și apăsarea butonului roșu de către utilizator, urmează o numărătoare inversă 3–2–1 care introduce o stare de tensiune - nerăbdarea de a începe jocul. Fiecare nivel adaugă un nou element în secvență, redat prin LED-ul colorat și sunetul caracteristic (de exemplu, 261Hz, nota Do, din octava a patra, sau Do central – deoarece clapa asociată acesteia se regăsește în centrul claviaturii pianului, pentru galben, sau 784Hz, nota Sol din octava a cincea, pentru albastru.). Jucătorul trebuie să reproducă secvența apăsând butoanele corespunzătoare, fiecare asociat unei frecvențe distincte. Astfel, pe lângă latura vizuală, se activează și memoria auditivă — un detaliu important pentru cei cu ureche muzicală, care pot reține și reproduce o melodie după ce o aud. Din acest motiv, proiectul poate fi folosit și ca antrenament pentru artiști sau muzicieni.

 

Dacă jucătorul greșește, un efect sonor clasic de tip „wah-wah” semnalează eșecul, urmat de o resetare a scorului și o scurtă animație a scorului pe display. Dacă reușește, jucătorul este recompensat cu o mică melodie care marchează progresul și îl încurajează să continue în același ritm. Nivelurile avansează cu dificultate progresivă, dezvoltând capacitatea de concentrare și reacție rapidă.

 

Designul modular permite extinderea ușoară cu funcționalități suplimentare: efecte  vizuale complexe, display-uri suplimentare, salvarea scorului în EEPROM sau conectivitate wireless pentru leaderboard global. Totodată, poate fi adaptat ca instrument de stimulare cognitivă pentru copii sau vârstnici, fiind ideal pentru antrenarea memoriei de scurtă durată într-un mod ludic și accesibil.

 

În esență, această versiune Arduino de Simon Says nu este doar o reimaginare a unui joc retro, ci o platformă multisenzorială pentru explorarea conceptelor de interacțiune om-mașină, logică secvențială și învățare activă. Este un proiect complet, care îmbină nostalgia cu inovația și demonstrează cum hardware-ul educațional poate deveni o sursă de creativitate, cunoaștere și bucurie.

 

Cum se desfășoară efectiv jocul?

 

La pornirea sistemului, LED-ul roșu începe să pâlpâie iar pe ecran apare cuvântul „ROSU”, semnalând că jocul este pregătit să înceapă, însă așteaptă intervenția jucătorului. Prin apăsarea butonului roșu, jocul intră în faza de numărătoare inversă, afișând pe display cifrele 3, 2, 1, însoțite de bipuri sonore care construiesc anticiparea momentului. 

 

Imediat după, sistemul generează o secvență aleatorie de culori și tonuri, iar LED-urile se aprind pe rând, fiecare asociat cu un sunet specific, stimulând atât memoria vizuală cât și cea auditivă. 

 

Jucătorul trebuie apoi să reproducă corect secvența apăsând butoanele în aceeași ordine, iar cu fiecare nivel complet, dificultatea crește prin adăugarea unui nou element în serie.

 

Pe măsură ce jocul avansează, jucătorul este provocat tot mai intens, fiind nevoit să se concentreze și să-și coordoneze atenția, memoria și reflexele. Orice greșeală duce la încheierea rundei, iar sistemul poate afișa un mesaj de încurajare sau rezultatul obținut...

 

 

REGULAMENT – REPETĂ DUPĂ MINE

 

1. Pornirea jocului

La activarea sistemului:

  • LED-ul roșu începe să pâlpâie

  • Pe ecran apare mesajul "ROSU", indicând că jocul este gata de start. Jucătorul trebuie să apese butonul roșu pentru a începe.

 

2. Numărătoare inversă

După apăsarea butonului:

  • Display-ul afișează cifrele 3, 2, 1

  • Se aud bipuri sonore ritmice, anticipând începerea jocului. La final, sistemul trece automat la generarea secvenței.

 

3. Generarea secvenței

Sistemul generează o secvență, din ce în ce mai complexă, și aprinde pe rând LED-urile din această secvență: , fiecare:

  • Tonul generat de difuzor este unic și asociat fiecărui LED. Jucătorul trebuie să memoreze fie ordinea în care au fost emise sunetele sau cea în care au fost generate culorile.

 

4. Reproducerea secvenței

  • Jucătorul apasă butoanele în exact aceeași ordine ca în demonstrație

  • Fiecare apăsare declanșează feedback vizual și auditiv imediat (sunetul asociat fiecărui buton sau fiecărei culori a luminii emise de LED)

  • Sistemul verifică pas cu pas dacă secvența reprodusă de utilizator este corectă

 

5. Niveluri progresive

După fiecare secvență reprodusă corect:

  • Se adaugă un nou pas în secvență

  • Dificultatea crește gradual, testând atenția, memoria și reflexele

 

6. Greșeală & finalul rundei

La o apăsare greșită:

  • Jocul se oprește

  • Este afișat scorul obținut

  • LED-urile se sting, iar jucătorul poate reporni jocul oricând - jocul revine la starea inițială

 

7. Obiectiv & beneficii

„Repetă după mine” este conceput pentru:

  • Îmbunătățirea memoriei de lucru

  • Dezvoltarea coordonării vizual-auditive

  • Crearea unei experiențe distractive și educative

 

 

Simularea funcționării jocului Repetă după mine

 

 

 

 

Cum funcționează jocul Repetă după mine, realizat pe breadboard

 

 

Schema electrică

 

La prima vedere, schema electrică poate părea complexă, iar liniile sale par că se încurcă într-o poveste tehnică fără sfârșit. Dar nu lăsa aparențele să te descurajeze. Vom parcurge împreună fiecare etapă — pas cu pas — interpretând schema, descoperind logica din spatele fiecărui simbol și așezând componentele pe breadboard într-un mod clar și intuitiv. Vei vedea cât de repede se transformă confuzia în curiozitate și încredere.

 

 

După cum puteți observa, avem următoarele conexiuni electrice între componentele circuitului nostru:

 

  • Terminalul 1 al butonului roșu → Pin D12 Arduino

  • Terminalul 2 al butonului roșu → GND Arduino

  • Pinul D7 Arduino → Terminalul 1 al rezistorului R1 (asociat LED-ului roșu)

  • Terminalul 2 al rezistorului R1 → Terminalul pozitiv (+) al LED-ului roșu

  • Terminalul negativ (−) al LED-ului roșu → GND Arduino

  • Terminalul 1 al butonului galben → Pin D6 Arduino

  • Terminalul 2 al butonului galben → GND Arduino

  • Pinul D10 Arduino → Terminalul 1 al rezistorului R2 (asociat LED-ului galben)

  • Terminalul 2 al rezistorului R2 → Terminalul pozitiv (+) al LED-ului galben

  • Terminalul negativ (−) al LED-ului galben → GND Arduino

  • Terminalul 1 al butonului verde → Pin D8 Arduino

  • Terminalul 2 al butonului verde → GND Arduino

  • Pinul D4 Arduino → Terminalul 1 al rezistorului R3 (asociat LED-ului verde)

  • Terminalul 2 al rezistorului R3 → Terminalul pozitiv (+) al LED-ului verde

  • Terminalul negativ (−) al LED-ului verde → GND Arduino

  • Terminalul 1 al butonului albastru → Pin D9 Arduino

  • Terminalul 2 al butonului albastru → GND Arduino

  • Pinul D5 Arduino → Terminalul 1 al rezistorului R4 (asociat LED-ului albastru)

  • Terminalul 2 al rezistorului R4 → Terminalul pozitiv (+) al LED-ului albastru

  • Terminalul negativ (−) al LED-ului albastru → GND Arduino

  • Terminalul pozitiv (+) al difuzorului → Pin D12 Arduino

  • Terminalul negativ (−) al difuzorului → GND Arduino

  • Terminalul 1 al afișajului (CLK) → Pin D3 Arduino

  • Terminalul 2 al afișajului (DIO) → Pin D2 Arduino

  • Terminalul 3 al afișajului (GND) → GND Arduino

  • Terminalul 4 al afișajului (5V) → Pin 5V Arduino

 

 

 

Materiale necesare:

 

  • Arduino Uno sau un model echivalent al acestuia

  • 4 LED-uri, de preferat de 5mm, care să emită lumină de culori diferite – roșu, galben, verde și albastru

  • 4 întrerupătoare cu revenire, normal deschise, care pot fi instalate pe breadboard  

  • un afișaj cu șapte segmente, cu 4 digiți, controlat de circuit integrat TM1637

  • un difuzor 

  • un breadboard de dimensiune mare, 830 puncte 

  • fire de legătură

Materiale necesare:

 

  • Arduino Uno sau un model echivalent al acestuia

  • 4 LED-uri, de preferat de 5mm, care să emită lumină de culori diferite – roșu, galben, verde și albastru

  • 4 rezistoare de 220Ω (roșu-roșu-maro-auriu)

  • 4 întrerupătoare cu revenire, normal deschise, care pot fi instalate pe breadboard  

  • un afișaj cu șapte segmente, cu 4 digiți, controlat de circuit integrat TM1637

  • un difuzor 

  • un breadboard de dimensiune mare, 830 puncte 

  • fire de legătură

 

 

 

 

Instalarea componentelor pe breadboard 

 

 

După cum observați, nu avem foarte multe conexiuni electrice de realizat. Trebuie doar să fiți atenți la câteva detalii esențiale pentru montajul corect:

 

  • LED-urile au polaritate și trebuie conectate în direcția corectă. Am notat cu A – anod (plus) și K – catod (minus) pentru a vă ghida mai ușor. Dacă sunt montate invers, nu vor lumina.

 

  • Întrerupătoarele au patru pini dispuși într-un dreptunghi, nu într-un pătrat perfect. Acest lucru înseamnă că, fără a forța, ele se vor potrivi natural într-o singură direcție pe breadboard.

  • Rezistoarele nu au polaritate, deci pot fi instalate în orice sens, fără restricții. Rolul lor este să limiteze curentul și să protejeze componentele, în special LED-urile.
  • Difuzorul poate avea fire colorate. Dacă nu este marcat, rețineți că firul roșu indică polul pozitiv și trebuie conectat la pinul D12, iar firul negru la GND (masa).
  • În zona de alimentare a breadboardului, pinii laterali sunt conectați grupat câte 25. Pentru a asigura continuitatea tensiunii, este necesară interconectarea între cele două sectoare — adică alimentarea trebuie să fie comună pe toată lungimea plăcii.
  • Dacă utilizați pentru prima dată placa Arduino, atunci puteți realiza conexiunile fără griji. În acest caz, placa este liberă de orice program anterior, astfel că nu există riscul unor execuții necontrolate.

 

 

 

Codul sursă

 

Înainte de a compila codul sursă, trebuie să instalați o bibliotecă — aceea care ne permite să interacționăm cu afișajul cu 7 segmente controlat de circuitul integrat TM1637. Această bibliotecă poartă denumirea „TM1637”, creată de Avishay Orpaz, și aceasta înseamnă că, în căsuța care permite căutarea bibliotecilor, veți căuta termenul „TM1637”, veți selecta biblioteca „TM1637 by Avishay Orpaz” și apoi veți apăsa butonul „INSTALL”.

 

Puteți descărca de aici codul sursă. Acesta conține explicații pentru aproape fiecare linie de cod.
 

(Link-ul va deschide un fișier de tip .ino într-o pagină nouă, însă browser-ul îl va interpreta ca pe un fișier text, ceea ce înseamnă că atunci când îl veți salva, apăsând eventual combinat Ctrl+S, selectați la “Save as type” – “All files”, și apoi introduceți după denumirea fișierului textul: .ino, astfel va fi salvat un fișier care poate fi accesat direct de către Arduino IDE. Altfel, selectați tot textul (Ctrl + A), îl copiați (Ctrl + C), deschideți o fereastră nouă în Arduino IDE, unde îl veți lipi (Ctrl + V) și îl puteți rula.)

 

 

Dacă ați realizat montarea componentelor pe breadboard, descărcați codul sursă din link-ul de mai sus și încărcați-l în memoria dispozitivului Arduino, apoi bucurați-vă de joc! 🎮

 

Totuși, înainte de a începe să vă distrați, iată câteva lucruri care pot merge greșit și cum le puteți verifica:

Componente conectate incorect

  • Verificați dacă toți pinii sunt așezați în breadboard conform schemei.

  • Uneori, un pin greșit afectează funcționarea LED-urilor, butoanelor sau afișajului.

Difuzor fără sunet

  • Asigurați-vă că pinul SPEAKER_PIN (12) este corect conectat și pinii difuzorului sun corect conectați.

  • Verificați tensiunea și conexiunea GND/VCC.

Displayul nu afișează

  • Verificați conexiunile CLK și DIO.

  • Puteți reduce viteza de transfer sau testa afișajul cu ajutorul unui exemplu simplu din biblioteca TM1637.

LED-urile nu se aprind

  • Asigurați-vă că LED-urile nu sunt inversate (pinii de anod și catod sunt conectați corect).

  • Pinii 7, 10, 4, 5 trebuie să fie setați ca OUTPUT.

Butoanele nu răspund

  • Verificați dacă pinii 11, 6, 8, 9 sunt setați ca INPUT_PULLUP.

  • Dacă nu se detectează apăsarea, testați-le pe rând utilizând funcția Serial.println(digitalRead(pin)); 

Secvența nu se salvează corect

  • Dacă jocul se resetează brusc, verificați dacă array-ul gameSequence[] este modificat accidental sau gameIndex depășește limita (ceea ce se poate întâmpla doar dacă ați modificat accidental valoarea sa).

 
 

 

 

Mecanismul codului sursă

 

Totul începe cu importarea bibliotecii TM1637Display, care permite controlul unui afișaj cu 4 cifre. Acest afișaj va fi folosit pentru a prezenta nivelul, mesaje precum „ROSU”, care îi indică jucătorului, la începutul jocului, că trebuie să apese butonul roșu, și o numărătoare inversă.

 

Se definesc apoi pinii utilizați pentru conectarea componentelor:

  • CLK și DIO pentru afișaj.

  • SPEAKER_PIN pentru difuzor.

  • patru LED-uri conectate la pinii 7, 10, 4 și 5.

  • patru butoane conectate la pinii 11, 6, 8 și 9.

 

Fiecărui LED îi este asociat un ton muzical distinct (frecvență), stocat în vectorul tones. De exemplu, odată cu aprinderea LED-ului roșu se va produce un sunet cu frecvența de 196 Hz, 784 Hz — pentru cel galben, etc.

 

Ca răspuns auditiv, există două melodii:

  • levelUpMelody[] — redată când utilizatorul trece la nivelul următor.

  • wahwah[] — sunet trist pentru greșeli.

 

Se instanțiază obiectul display și se definește gameSequence[], un vector de maxim 100 de pași — fiecare pas fiind un index de la 0 la 3, corespunzător unui LED/buton. gameIndex ține evidența nivelului curent.

 

Pentru interacțiunea audio-vizuală, funcția lightLedAndPlayTone(index, durata) aprinde LED-ul dorit și emite tonul aferent.

 

În funcția setup() se configurează hardware-ul: se setează pinii, se pornește afișajul și se inițializează generatorul de numere aleatorii.

 

Apoi, jocul pornește în stareInitiala(), unde se afișează textul „ROSU” pe display, iar LED-ul roșu clipește. Utilizatorul trebuie să apese butonul roșu ca să înceapă jocul.

 

După confirmare, se redă o scurtă numărătoare inversă în numaratoareInversa(), afișând pe display cifrele 3 → 2 → 1, la intervat de o secundă, însoțite de tonuri.

 

Apoi intrăm în loop() — nucleul jocului. Aici se generează un pas nou aleator, se adaugă la gameSequence, și se afișează nivelul curent. Urmează playSequence(), care parcurge întreaga secvență și aprinde LED-urile respective, redând tonurile.

 

După ce secvența este redată, utilizatorul trebuie să o reproducă — apăsând butoanele în aceeași ordine în care au fost aprinse anterior LED-urile. Acest lucru se realizează în checkUserSequence(), care compară fiecare apăsare cu pasul corespunzător din gameSequence. Fiecare apăsare corectă oferă feedback (lumina LED-ului + sunet), iar dacă apare o greșeală, se redă melodia wahwah[], LED-urile iluminează intermitent și jocul se resetează.

 

În caz de succes, se redă levelUpMelody[], se crește gameIndex, iar jucătorul trece la nivelul următor, cu o secvență mai lungă de reprodus.

 

Funcția readButtons() citește apăsarea unui buton, așteptând eliberarea (debounce), și returnează indexul — folosit pentru verificarea răspunsului.

 

În momentele critice, când jucătorul eșuează, funcția gameOver() intră în acțiune. Afișajul arată scorul final, se aprind toate LED-urile secvențial, se redă melodia eșecului și se revine la starea inițială.

 

 

 

Îmbunătățiri posibile pentru acest joc

 

Personalizare vizuală

  • Folosirea unui afișaj OLED sau LCD cu mesaje și animații.

  • Realizare unei carcase personalizate, imprimată 3D, pentru un aspect profesional.

 

Sunete și muzică

  • Introducerea de sunete diferite pentru fiecare etapă (start, greșeală, victorie).

  • Crearea unei melodii tematice, ce va fi redată cu ajutorul difuzorului.

  • Adăugarea unui mod „silent” pentru jocuri în bibliotecă .

 

Moduri de dificultate

  • Creșterea vitezei secvențelor în funcție de progres.

  • Activarea unui mod „Challenge” cu memorarea inversă a secvenței. Am realizat acest proiect aici.

  • Modul „Time Attack” — răspunde corect într-un interval de timp limitat!

 

Salvare și reluare

  • Implementarea unui sistem de salvare a scorului maxim în EEPROM.

  • Posibilitatea de a relua jocul din ultima etapă atinsă.

 

Multiplayer sau competiție

  • Doi jucători, fiecare cu propriul set de butoane și LED-uri.

  • Modul versus — cine reproduce secvența mai repede și corect.

 

Integrare Bluetooth sau Wi-Fi

  • Trimiterea scorurilor online pentru clasamente.

 

 

Și asta nu e tot! Proiectul poate fi dus la următorul nivel prin integrarea componentelor într-o carcasă personalizată. Dacă aveți acces la o imprimantă 3D, puteți crea o cutie atractivă și ergonomică, perfect adaptată designului dorit. În lipsa unei imprimante 3D, se poate opta pentru o cutie din ABS, specifică instalațiilor electrice, care oferă rezistență, siguranță și un aspect profesional. Astfel, proiectul capătă nu doar funcționalitate, ci și o prezentare demnă de admirat. Accesează resursele de aici.

 

 

 

O mică modificare. V2.0. 

 

Părea prea simplu așa că vom interpune ceva haos în timpul fiecărei runde. Nu haios, ci HAOS, ca să fie clar: 

 

  • Jucătorului îi va fi prezentată mai întâi secvența pe care trebuie să o repete, dar, după ce secvența principală este prezentată, programul mai așteaptă o secundă și apoi declanșează o altă secvență, extrem de rapidă, menită să-i distragă atenția jucătorului. Abia după această provocare, utilizatorul poate încerca să apese butoanele în ordinea corectă. Și asta se va întâmpla la fiecare rundă. Acum începe spectacolul cu adevărat. Îți mai amintești secvența corectă...? Sau te-a furat strălucirea efemeră a confuziei? Scena e a ta. Arată-ne ce poți!

 

Puteți descărca de aici codul sursă.
 

(Link-ul va deschide un fișier de tip .ino într-o pagină nouă, însă browser-ul îl va interpreta ca pe un fișier text, ceea ce înseamnă că atunci când îl veți salva, apăsând eventual combinat Ctrl+S, selectați la “Save as type” – “All files”, și apoi introduceți după denumirea fișierului textul: .ino, astfel va fi salvat un fișier care poate fi accesat direct de către Arduino IDE. Altfel, selectați tot textul (Ctrl + A), îl copiați (Ctrl + C), deschideți o fereastră nouă în Arduino IDE, unde îl veți lipi (Ctrl + V) și îl puteți rula.)

 

 

 

 

Simularea funcționării jocului Repetă după mine V2.0

 

 

 

 

Repetă după mine V2.0 în carcasă personalizată

 

 

 

Ai reușit să reții culorile? Hai să trecem la următorul nivel — Repetă după mine în sens invers te pune cu adevărat la încercare!

 

​​​​​​​

​​​​​​​