Coin hopper e arduino

Perdonami orso ... si il sensore è lui .. per quanto riguarda il mamehooker devo in realtà ancora guardarlo bene perche oltre a quell'esperimento del led non ho visto piu altro. Magari domani comincio a guardarlo bene e ti faccio sapere con certezza. Grazie ancora

Ciao e buongiorno . sto cominciando a guardare il mamehooker per fornirti le informazioni che mi chiedevi. nel frattempo ho trovato un link a una pagina di come settare e impostare il suddetto. Se posso te lo posto , altrimenti se va fuori dal regolamento , lo elimino , cosi che puoi guardare anche tu se il mamehooker fa al caso mio. Grazie

http://dragonking.arcadecontrols.com/static.php?page=mhtutorials

e qui ti allego parte di un forum dove sta praticamente dicendo la identica cosa che vorrei fare io.

Ad oggi non esistono prodotti commerciali economici per far fronte al “problema”: per le luci esistono periferiche tipo LedWiz e SmartASD, mentre per il rumble… praticamente niente (forse la smartASD è configurabile per il rumble, ma costa 20 volte tanto).
MAME supporta gli output da parecchio tempo, tipo dalla versione 0.110; questi output, propri delle schede emulate, non possono essere utilizzati direttamente per il semplice fatto che MAME non li indirizza su alcuna periferica del PC. La cosa non deve sorprendere più di tanto dal momento che sarebbe codice che esula dallo scopo del MAME stesso. A questo fine ci viene in aiuto un software a mio avviso geniale, scritto da Howard Casto, utente molto attivo sul forum BYOAC. Questo software si prende la briga di “leggere” i mistici messaggi di output di MAME e di “tradurli” in formati digeribili da hardware esterni. Questi formati sono vari ed eventuali, ma a noi interessa la sola comunicazione seriale. Perché? Beh, guarda un po’, le nostre amate schede a microcontrollore Arduino sono in grado, se opportunamente programmate, di leggere questo tipo di segnale e renderlo un segnale logico sfruttabile per controllare altro hardware!
Ok, ma qual è lo schema complessivo necessario per trasformare questi segnali di output intimamente nascosti in MAME nell’accensione di un LED oppure nel movimento di un motore? Ecco lo schema a blocchi…
schema a blocchi.png In sostanza: MAMEhooker traduce i messaggi di output di MAME rendendoli digeribili da Arduino (o altro hardware); Arduino a sua volta aziona dei driver di potenza (dispositivi cioè in grado di generare correnti anche significative) che accendono LED cicciotti, mettono in movimento motori, etc etc, tutto secondo le volontà di MAME (o, in altre parole, della scheda gioco emulata… mica cazzi!).
Ciò che questa guida copre è sia la filiera MAME -> MAMEhooker -> Arduino, sia una introduzione all'uso di driverboard per pilotare motori DC, LED grandi e piccoli. I pin di arduino infatti possono erogare solo poche decine di mA di corrente, di conseguenza è impensabile controllare direttamente hardware poco più grande di un mini LED
Ad ogni modo: andiamo a vedere come si configurano mamehooker e arduino per avere dei segnali logici “utili” a costo praticamente zero (che ci tengo :wink: )!!

hashmaker:
allora..... 0.1 cent 0.2 cents 0.3 cents.... significa centesimi di euro... percio a casa mia 0.20 centesimi.... sarebbe sottinteso 0.20 centesimi di euro !!!!!

Eh? A casa tua 0.1 cent significa 1 centesimo di Euro? :o Scusa ma la matematica non è mica un'opinione, e ha ragione Datman a puntualizzare. ;D
Ma lo diceva giusto per capire la "convenzione": non cambia nulla nel progetto se tu la moneta da 20 centesimi la chiami 0.20 cent o Eurini, o Gettoncino o Mario. La moneta è la stessa.

Ma 0.1 cent non è 1 cent, e 0.20 cent NON sono 20 cent (tra l'altro se composta da 20 monete da "0.1 cent" sarebbero "2.0 cent" visto che 0.1x20 fa 2.0): la moneta da 20 cent si chiama "20 cent", o 0.20 EURO caso mai (che è quello che secondo me intendevi).

Poi, va bene tutto il resto delle domande... :wink:

pienamente daccordo ma non è questo il punto ... come stai dicendo 20 potrebbe essere anche un pezzo di legno o quel che sia .. sta di fatto che non è questo quello che cerco per risolvere il mio problema e sinceramente stare a puntualizzare su sta cosa gia per 4 post.... dai....

Sono anche io d'accordo, è una questione marginale, ma se il numero di post su questo argomento è salito, è perchè dopo che Datman ti ha correttamente sottolineato l'errore hai continuato ripetendo "0.20 cent" invece di dire "si, vero, intendevo 20 cent o 0.20 Euro". Tutto qui, per me finisce qui ovviamente... :wink:

la moneta da 20 cent si chiama "20 cent", o 0.20 EURO

[/quote]
esattamente intendevo dire questo ... 0.20 euro... chiedo perdono!!!

Comunque io non ho ben capito qual'è il tuo problema.........

Se vuoi collegare il motore ti serve un relè, o un transistor ( meglio un Mosfet )
Per collegare l'opto basta che usi un collegamento come questo


Poi per comandare il tutto sono poche linee di programma

domanda stupida ... i 5 v e gnd posso prenderli da arduino? mentre output dovrebbe andare a uno dei pin di arduino sempre giusto?

qui ho tutto il materiale che dovrebbe servirmi per la parte hardware giusto ? adesso come effettuo i collegamenti ? vi prego aiutatemi non voglio bruciare nulla :smiley: :smiley:

dunque per quanto riguarda il motorino il collegamento dovrei averlo fatto. Cioè ho collegato il positivo del motorino al rele e il gnd del motorino alla sua alimentazione , poi dall'alimentatore del motorino ho messo il positivo al rele sempre. Dall'altra parte del rele ho collegato il positivo ad arduino a 5v e gnd alla gnd del arduino e il segnale al pin 2. E' corretto?

E' corretto?

Pare di si

questo è il collegamento per il sensore

confermo ho collegato il rele e il motorino e per prova ho collegato per adesso un modulo pulsante , che dovrebbe ( per ora ) sostituire l'impulso che mi darà successivamente mamehooker e ho caricato uno scheckt e funziona . cioe appena schiaccio il pulsante mi comincia a girare il motore ! :slight_smile:
ora provo a fare il collegamento del sensore però qui avro bisogno di un aiuto anche per la compilazione. Grazie davvero infinite :slight_smile:

Ok anche il sensore è collegato . Adesso dovrei compilare di modo che questo sensore a un tot di impulsi generat i dai passaggi della moneta dovrebbe far fermare il motorino. Questo valore degli impulsi che dovra conteggiare sara successivamente inviato dal mamehooker.

ok...che arduino usi?

arduino uno, cmq ho una grande novità. Caricando uno schetc apposta per mamehooker e impostando mamehooker in comunicazione sulla com4 (quella di arduino) ho la seguente situazione : mamehooker rileva nella slot output luminosi e li chiama come lamp1 lamp2 e per ultimo led1. Ho provato qua e la è ho capito che al pagamento della slot mi accende il led1. Percio ho detto a mamehooker che quando riceve questo impulso deve accendere il rele sul pin2 di arduino. E in effetti sta funzionando!!!! Tutto questo pero senza il sensore... e da quel che mi sn reso conto dovrebbe essere importante in quanto il giro del motore eroga molte piu monete di quelle vinte.
Se volete e se posso posto il codice e le configurazioni che ho fatto su mamehooker

ad arduino serve sapere quando erogare monete e quante erogarne...il "problema" sta nel capire come passare la quantità da erogare...da un'occhiata veloce al link che hai postato ho visto che questo mamehooker riesce a passare dati via seriale...per esempio al verificarsi di un evento:

MA_Check_Point_lamp=cmw 4 2., cmw 4 %s%, cmw 4 x

dove "cmw" comando scrittura su seriale; "4" COM di destinazione, "2." il dato passato su seriale...il "." serve da delimitatore per eventuale parseInt() su Serial di arduino; "," separa due comandi..."%s%" è un dato che prende dalla ROM rispetto allo stato di "MA_Check_Point_lamp" e passato ad arduino...valutato sempre con il parseInt() di Serial....fino all'invio di "x" che arduino interpreterà (da codice scritto...mica per miracolo divino) come fine informazione.
quindi...devi ricavare il valore dei gettoni da erogare...inserire la stringa di comando nel tuo "evento pulsante" con passagio valore da erogare ed abilita erogazione.

per quanto riguarda la verifica del sensore (se conta i passaggi delle monete)...prova questo:

#define PIN_INTERRUPT 2  //collegare il segnale del sensore al pin 2
#define PIN_RELE 3 //attivazione relè pin 3
#define CREDITO 10 // inserire quante monete si vuole erogare

volatile int moneteUscite = 0;


void setup() {
  Serial.begin(9600);
  Serial.println("...scrivi \"a\" per erogare monete");
  pinMode(PIN_RELE, OUTPUT);
  digitalWrite(PIN_RELE, LOW);
  pinMode(PIN_INTERRUPT, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(PIN_INTERRUPT), erogaMonete, FALLING);
}

void loop() {
  if (Serial.available() > 0) {
    char c = Serial.read();
    if (c == 'a') {
      digitalWrite(PIN_RELE, HIGH);
    }
  }
}

void erogaMonete() {
  moneteUscite++;
  if (moneteUscite == CREDITO) {
    digitalWrite(PIN_RELE, LOW);
    moneteUscite == 0;
    delay(50);
  }
}

PS: il comando per attivare il motore lo invii da monitor seriale inviado la lettera 'a'
PS2: pensandoci bene il delay() in "erogaMonete", essendo una ISR, non dovrebbe funzionare...ma va bene lo stesso

ad arduino serve sapere quando erogare monete e quante erogarne...il "problema" sta nel capire come passare la quantità da erogare...da un'occhiata veloce al link che hai postato ho visto che questo mamehooker riesce a passare dati via seriale...per esempio al verificarsi di un evento:
Code: [Select]
MA_Check_Point_lamp=cmw 4 2., cmw 4 %s%, cmw 4 x

dove "cmw" comando scrittura su seriale; "4" COM di destinazione, "2." il dato passato su seriale...il "." serve da delimitatore per eventuale parseInt() su Serial di arduino; "," separa due comandi..."%s%" è un dato che prende dalla ROM rispetto allo stato di "MA_Check_Point_lamp" e passato ad arduino...valutato sempre con il parseInt() di Serial....fino all'invio di "x" che arduino interpreterà (da codice scritto...mica per miracolo divino) come fine informazione.
quindi...devi ricavare il valore dei gettoni da erogare...inserire la stringa di comando nel tuo "evento pulsante" con passagio valore da erogare ed abilita erogazione.

esatto e quello che ho fatto sulla parte di mamehooker e in effetti quando adesso do il tasto pagamento il coin hopper comincia a funzionare ( il motore gira). ovviamente l'erogazione dei gettoni parte con un lasso di ritardo , che quindi mi fa sfasare tra il credito erogato dal gioco e quello erogato realmente. Quindi in teoria dovrei settare il sensore di maniera che ad ogni impulso che riceve via seriale arduino corrisponde una moneta lanciata e quindi il motore parte appena viene premuto il tasto e arduino conta gli impulsi e quando attraverso il sensore passano il numero giusto di impulsi deve far fermare il rele. è giusto?

int pin;
int value;

void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);

Serial.begin(9600);
}

void loop(){ 
while (Serial.available()>0){
  pin = Serial.parseInt();
  value = Serial.parseInt();
  if (Serial.read() == 'x'){
    digitalWrite(pin, value);
    Serial.println();
  }
}
}

allora con quello schetch caricato io riesco a fare quello che voglio in piu mi sono reso conto che posso settare le varie configurazioni di pagamento e quindi anche il tipo di gettone erogato e la scala eventuale anche. però questo schetch non fa altro che ad ogni impulso (credito) in output accende e spegne il rele. invece io vorrei al primo impulso ricevuto mettere il rele su on e quindi tenerlo acceso , successivamente entra il gioco il conteggio degli output del mame e quindi il sensore... che al numero esatto di impulsi /erogazione moneta deve far fermare il rele. e giusto?