Realizzare gioco con Arduino

buongiorno a tutti
volevo chiedervi (specialmente a quelli che masticano Arduino da molto più tempo)
vorrei realizzare un gioco "tipo clementino ,un gioco per ragazzini ,per aiutarli a imparare )
mi direte perché non acquisto quello che ce già in commercio (costa 15 euro più o meno)

il problema e che questo gioco/progetto che voglio fare e per un bambino disabile
(quindi un po' delicato ) ed ha bisogno di qualcosa ad hoc per lui
che voi sappiate ce qualcosa in giro di simile realizzato con Arduino

grazie

Non conosco nessun "gioco clementino" (a parte tirarsi i mandarini :wink: ) spiega magari cosa hai in mente, e vediamo.. :slight_smile:

;D ;D ;D ;D
esempio 1
esempio 2

più o meno cosi

Ah, capito (hai mischiato "Sapientino", la linea di giocattoli, e "Clementoni", il produttore, ecco il "clementino".. :smiley: ).

Beh in teoria lo vedo possibile, il problema maggiore potrebbe essere come realizzare l'interfaccia (una tavola con alcune zone conduttive da unire con i puntali, diciamo che simulano dei pulsanti, oppure proprio alcuni piccoli pulsanti), seguito dal resto: quelli originali prevedono delle "cover" per implementare vari giochi, simili ma con risposte e combinazioni magari diverse, realizzare queste "cover" la vedo una cosa non semplice per farne una cosa che possa essere resistente "a prova di bambino". Inoltre i giochi stessi, se prevedono qualcosa di più di un buzzer o di emettere frequenze, come delle risposte vocali, devi prevedere un circuito per riprodurre audio, una qualche cassa amplificata, e una scheda SD per memorizzare i suoni in formato mp3 (non credo esista un text to speech per Arduino).

L'alternativa alla realizzazione "fisica" della board e puntali/pulsanti è cambiare interfaccia e usare un tablet, ma gli altri problemi restano gli stessi, a meno di non spostare anche il programma su Android (e allora Arduino non c'entra più nulla).

Infine, potresti "pensare" tu dei giochi relativamente semplici ma divertenti, come alcuni che ho visto al Maker Faire Rome che possono implementare giochi diversi a seconda dello sketch caricato. Ad esempio un gioco di "riflessi", collegare una fila di LED RGB (quindi controllata da Arduino) posta in verticale, ed una spia LED ed un pulsante su una scatoletta che ospita Arduino: quando il LED si accende il giocatore deve premere il pulsante nel minor tempo possibile, in base al tempo intercorso (in millisecondi) si fa "alzare" una colonna di LED della striscia. Un LED sempre acceso ma di colore diverso (es. rosso) indica il "record" corrente.

E' solo un esempio, ovviamente, ma credo che sia utile pensare a qualcosa di più semplicemente realizzaile e adatto al bambino che hai in mente.

Vedi tu.. :wink:

hai perfettamente ragione su tutto :slight_smile:
il tablet assolutamente non il rischio che si rompano e molto grande (poi diventa pericoloso)
partendo dai pulsanti ,pensavo di fare dei pulsanti capacitivi o a sfioramento
la realizzazione fisica per adesso non mi importa tanto (se funziona il corpo ) l'esterno lo si poi in base alle esigenze
per quanto riguarda le domande io pensavo di fare de le schede in cartone (cartone più spesso ) cosi da poter inserire al interno un lettore rfid (cosi se ho più schede le riconosce in automatico )
io sono abbastanza convinto che si possa fare, l'unico problema se posso chiamarlo cosi e come impostare il codice
io pensavo
scheda 1
Arduino legge il codice e va a posizionarsi nel caso corrispondente alla scheda1
se si premono tasti A +b risposta corretta
se si premono altri tasti (voglio mettere 4 per parte ) ritorna a punto iniziale in modo da poter inserire un altra combinazione
più o meno cosi
il codice (la scrittura intendo)
come lo imposto (non ho la minima idea di come iniziare :slight_smile:

grazie per i consigli :slight_smile:

Beh si, dovresti iniziare da una cosa semplice tanto per sperimentare il meccanismo di base quantomeno.
non so che esperienza e quale hardware tu abbia diciamo che ti potrebbe servire un Arduino UNO, una manciata di pulsanti (coi quali per ora "simuli" quelli a sfioramento), qualche LED, resistenze, cavi Dupont, una breadboard, un buzzer, e magari un display LCD (16x2 possibilmente con interfaccia I2C per semplificare la gestione e tenere liberi i pin). Inoltre per memorizzare le schede direi un lettore di scheda SD (col PC creerai i file che conterranno i dati di ogni scheda).

Quindi inizia a pensare ad una configurazione (quanti pulsanti? disposti come?), allo schema di gioco (associazione di due tasti, da premere insieme per dare la risposta?), alla sua evoluzione (una domanda per scheda o più combinazioni "valide"?) ed inizia a implementare qualcosa di semplice, diciamo 4 pulsanti non di più. Risposta esatta: LED verde, sbagliata: LED rosso e buzzer. Per ora puoi anche "cablare" la scheda nello sketch, poi successivamente penserai ai file su scheda SD.

Ma devi iniziare TU a scrivere qualcosa, che poi qui possiamo aiutarti a far funzionare.

Buongiorno a tutti
allora sono andato avanti con il gioco ,pero incontro diverse difficoltà
mi sono creato il codice per i pulsanti (8 pulsanti)
gli ho enumerati da 1,2,3,4-A,B,C,D(la loro combinazione giusta sara 1A,2B,3C,4D,e cosi via diversa per ogni scheda
questo e il codice

#define ctsPin1 31 
int ctsValue1 = digitalRead(ctsPin1);
    if (ctsValue1 == HIGH){
        digitalWrite(ledPinVerde1, HIGH);
    digitalWrite(ledPinVerde2, HIGH);
        Serial.println("TOUCHED");        
    }    
    else
    {
        digitalWrite(ledPinRosso1, HIGH);
    digitalWrite(ledPinRosso2, HIGH);
        Serial.println("not touched");
          }

dopo di che ho utilizzato un lettore RFID "lettoreRFID
in modo da poter assegnare a ogni foglio che andrò a mettere il suo codice identificativo

vado a leggere il codice (xxxxx) assegno al codice xxxxx la combinazione giusta dei tasti ( 1A,2B,3C,4D)
il problema sorge quando io leggo il codice rfid "10A713A40" tipo questo
dovrei poi andare a confrontarlo con la stringa della combinazione giusta dei tasti ,
per 2/3 codice puo andare bene ,ma se devo inserire 20-30 codici diventa molto complicato
ce un modo per scrivere la scheda rfid in modo da poter avere subito
la combinazione giusta
mi spiego

adesso io leggo il codice 10A713A40 ,vorrei poter riscrivere la scheda per poter leggere da subito la combinazione corretta tipo cosi "1A,2B,3C,4D" e poi quando andro a fare il confronto mi vera piu facile

spero di essermi espresso bene ,e che abbiate capito il mio problema :slight_smile:

Non lo so se ho capito :slight_smile:
ma se il codice lo formi in 2 parti non va bene ?

codicescheda-codicerispost

da programma poi lo dividi.

ciao...sinceramente non sono sicuro di aver capito e quindi ti chiedo conferma.

hai 8 "pulsanti"...che sono 8 possibili risposte?...oppure 2 possibili risposte a 4 domande...o cosa/come?

detto questo...se non ho capito male tu vorresti che se arduino riconosce la scheda SCHEDA1 sappia già che la combinazione giusta sia...tipo pulsante 2, 4, 6 (gli altri sbagliati)....se riconosce SCHEDA2 la combinazione giusta sarà pilsante 1,3,5 (gli altri sbagliati)...giusto!?
detto questo (2) tu vorresti un modo automatico per fare questo, da codice scheda accoppiare pulsanti "risposta ok", senza scrivere tutto hardcode...giusto?

dovresti, almeno per me, spiegarmi un po' meglio le "regole" del gioco...appunto quante domande/risposte...se proprio come il gioco originale, diviso per sezioni con più risposte..etc.

si esatto,piu o meno dovrebbe essere cosi
8 pulsanti ,con 4 domande e 4 possibili risposte
si pensavo di scrivere (la combinazione delle risposte direttamente sulla scheda rfid ,cosi mi e piu facile fare il confronto con la combinazione dei pulsanti ,perche se no devo scrivere le risposte giuste per ogni scheda e diventa impossibile poi
ho allegato due immagini una e come vorrei realizzare il gioco e un altra del gioco originale

vediamo se ho capito...4 domande con possibili 4 risposte per domanda..il tutto gestito da 8 pulsanti così mappati:

pulsante 1 = domanda 1
pulsante 2 = domanda 2
pulsante 3 = domanda 3
pulsante 4 = domanda 4
pulsante 5 = risposta A
pulsante 6 = risposta B
pulsante 7 = risposta C
pulsante 8 = risposta D

...quindi...se voglio rispondere alla domanda 1 premerò il pulsante 1 e poi uno dei 4 pulsanti (A,B,C,D) dedicati alla risposta..giusto!?

Se è così al codice RFID potresti abbinare la sequenza delle lettere delle risposte esatte che, al momento del riconoscimento del nuovo tag della scheda, salvi in una stinga classica del C ; poi abbini alla pressione di ogni pulsante risposa una lettera, che sarà sempre la stessa...a questo punto verifichi se alla posizione della stringa acquisita dal tag corrisponde la lettera del pulsante.
Spero di essere stato chiaro

perfettamente giusto :slight_smile:
anche io ho pensato alla stessa cosa,creo una stringa con la combinazione giusta e la assegno alla tessera rfid ,facendo cosi mi semplifico di molto la compilazione del codice
il problema che riscontro e la scrittura della tessera rfid
nel senso
io ho la tessera la leggo e mi da "86 11 6A AC"che sarebbe il codice uid
quello che vorrei fare e riscrivere questo codice (ho provato diversi modi ma mi da sempre errore)
(ci sarebbe anche la possibilità di non intervenire sul codice uid ,e di scrivere nello spazio di 1K che ce sulla scheda )
ma poi quando la vado a leggere mi da sempre il codice uid

UID sta per "UNIQUE ID" ,,, cioe', ogni singolo dispositivo ha uno, ed un solo codice, diverso da qualsiasi altro dispositivo ... se fosse possibile riscriverlo a piacere, non sarebbe piu "unique" ... :wink:

kirpidik:
(ci sarebbe anche la possibilità di non intervenire sul codice uid ,e di scrivere nello spazio di 1K che ce sulla scheda )
ma poi quando la vado a leggere mi da sempre il codice uid

Ecco, questa è la soluzione corretta. Se leggi l'UID ti dà l'UID, se leggi il resto ti dà il resto...

Non sono certo di aver capito, comunque io farei così:

  • Un array con tutti gli UID, esempio se ho 3 RFID:
    #define NUM_RFID 3
    char scheda[NUM_RFID][9] = { "86116AAC", "86116AAD", "86116AAE"};
  • Un array con le risposte per ogni UID, diciamo massimo 3 risposte per UID in questo esempio, ogni risposta è un carattere per domanda (es. "ACBD" significa domanda 1 risposta A, domanda 2 risposta C, 3 B, 4 D.) per cui con 3 risposte abbiamo massimo 4 caratteri (compreso lo '\0'):
    char risposte[NUM_RFID][7] = {"AABD", "DCAD", "BDBB"};

A quel punto leggi lo UID, lo cerchi con un for() dentro a scheda[] ed una volta trovato leggi con lo stesso indice le risposte previste dall'array risposte[]. Quindi ad esempio per l'RFID "86116AAD" le risposte sarebbero "DCAD".

Diciamo una cosa del genere (qui non gestisco eventuali UID non esistenti e altri controlli, mica posso fare tutto io.. :wink: ):

  #define NUM_RFID 3
  char scheda[NUM_RFID][9] = { "86116AAC", "86116AAD", "86116AAE"};
  char risposte[NUM_RFID][7] = {"AABD", "DCAD", "BDBB"};
  // Diciamo di avere in codUID[] il codice da cercare
  char codUID[] = "86116AAD";
  int i;
  Serial.print("Cerco ");
  Serial.print(codUID);
  Serial.println("...");
  for (i=0; i<NUM_RFID; ++i)
    if ( strcmp(scheda[i],codUID) == 0 )
      break;

  Serial.print("Trovato ");
  Serial.println(i);
  Serial.println(scheda[i]);
  Serial.println(risposte[i]);
  Serial.println();

@Etemenanki
si ha ragione,anzi ha perfettamente ragione ,pero ho visti in rete diversi scketch in cui dicevano che era possibile cambiarlo :slight_smile:
adesso provo a fare delle prove scrivendo dentro alla scheda e vediamo se ripesco a ottenere qualcosa
@docdoc provo il suo suggerimento :slight_smile:

questo gioco si sta rivelando più complesso di quanto avevo immaginato al inizio :smiley: :smiley:

grazie a tutti per le risposte
vi tengo aggiornati sul procedimento del lavoro

buongiorno a tutti
una piccola domanda ,ho visto in rete questo video video
come fa a scrivere in contemporanea con la programmazione?
usa una compilatore esterno/diverso dall ide Arduino
grazie :slight_smile:

non capisco cosa tu intenda per "come fa a scrivere in contemporanea con la programmazione?"

uno degli esempi della libreria MFRC522 è: rfid_write_personal_data
ed un altro esempio è: rfid_read_personal_data.

che ti consentono di scrivere e leggere dati nei vari blocchi del TAG.

questo metodo è quello che intendevo io quando dicevo di inserire nel TAG la sequenza delle risposte e poi gestirla.

mi sembra che il tipo del video, c'è anche scritto sotto, usi appunto questi esempi.

se stia scrivendo da shell o da altra console...non saprei....sicuramente invia dati alla porta USB xx connessa con arduino.