Pagina 1 di 2

Spinner "Fai-da-Te"

Inviato: 21/11/2012, 12:03
da Keyb
Ciao a tutti.

Vi volevo far vedere lo spinner che mi sono costruito. E' basato su Teensy, un clone economico e miniaturizzato di Arduino. E' stato anche l'unico pezzo acquistato; il resto e' stato recuperato in giro.

Ho usato: Una testina di un vecchio videoregistratore, uno scaffale di un mobile bagno, una ruota ottica di una stampante e un sensore di un mouse. Chi riesce a trovare tutti i pezzi?

A parte gli scherzi, lo spinner funziona perfettamente. Ho implementato anche un controllo sulla risoluzione, in modo da poter variare la velocita' con un semplice interruttore (di recupero pure lui e che devo ancora installare). Il cambio velocita' serve a gestire i diversi giochi. Arkanoid vuole una reazione immediata, quelli di guida meno!

Lo spinner montato in verticale servira' anche da volante con un semplice accessorio che sto costruendo necessario ad accogliere il volante che mi ha appena venduto PaTrYcK

Visto che lo spinner viene visto come mouse, ho previsto anche la gestione di tre pulsanti aggiuntivi che emulino i tasti del mouse.

Allegate un po' di foto, il codice sorgente e un breve test di inerzia. Ah, non sono un programmatore, per cui immagino che il codice non sia ne' pulito ne' ottimizzato. Ma funziona e a me tanto basta....

Se servono altre info chiedete pure.

Ciao,
Alessandro

[youtube]http://www.youtube.com/watch?v=ZgxyWQH_1D8[/youtube]
2012-11-21 00.04.07.jpg
2012-11-21 00.06.02.jpg
2012-11-21 00.06.21.jpg
2012-11-21 00.08.42.jpg
2012-11-21 00.09.04.jpg

Codice: Seleziona tutto

#define ENCODER_OPTIMIZE_INTERRUPTS
#include <Encoder.h>

const int encPin1 = 7;     // Piedino pin 1 encoder
const int encPin2 = 8;     // Piedino pin 2 encoder
const int SpeedPin = 12;     // Piedino controllo velocita'
const int SpeedLedPin = 11;     // Piedino led controllo velocita'
const int MousePinLeft = 13;     // Piedino pulsante sinistra
const int MousePinCenter = 14;     // Piedino pulsante centrale
const int MousePinRight = 15;     // Piedino pulsante destra


const long debounceDelay = 150;    // Tempo per il Debounce (in millisecondi)
const int SpeedSlow = 2;       // Velocita' lenta
const int SpeedFast = 5;       // Velocita' rapida

int Speed = 0;
int buttonStateLeft = 0;
int buttonStateCenter = 0;
int buttonStateRight = 0;
long lastDebounceTime = 0;  

Encoder myEnc(encPin1, encPin2);
long encOldPosition  = -999;

void setup() {  
  pinMode(SpeedPin, INPUT_PULLUP);
  pinMode(MousePinLeft, INPUT_PULLUP);
  pinMode(MousePinCenter, INPUT_PULLUP);
  pinMode(MousePinRight, INPUT_PULLUP);
  pinMode(SpeedLedPin, OUTPUT);
}

void loop(){
Spinner();
}

void Spinner(){
  
  Mouse.set_buttons(0, 0, 0);

// Imposto la velocita'

  if(digitalRead(SpeedPin) == HIGH){
    Speed = SpeedSlow;
    digitalWrite(SpeedLedPin, LOW);
  }
  else {
    Speed = SpeedFast;
    digitalWrite(SpeedLedPin, HIGH);
  }

// Gestione Pulsanti Mouse

  buttonStateLeft = digitalRead(MousePinLeft);
  buttonStateCenter = digitalRead(MousePinCenter);
  buttonStateRight = digitalRead(MousePinRight);


  if((millis() - lastDebounceTime) > debounceDelay){
    if(buttonStateLeft == LOW && buttonStateCenter == LOW && buttonStateRight == LOW){
      Mouse.set_buttons(1, 1, 1);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == LOW && buttonStateCenter == LOW && buttonStateRight == HIGH){
      Mouse.set_buttons(1, 1, 0);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == LOW && buttonStateCenter == HIGH && buttonStateRight == LOW){
      Mouse.set_buttons(1, 0, 1);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == HIGH && buttonStateCenter == LOW && buttonStateRight == LOW){
      Mouse.set_buttons(0, 1, 1);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == LOW && buttonStateCenter == HIGH && buttonStateRight == HIGH){
      Mouse.set_buttons(1, 0, 0);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == HIGH && buttonStateCenter == LOW && buttonStateRight == HIGH){
      Mouse.set_buttons(0, 1, 0);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == HIGH && buttonStateCenter == HIGH && buttonStateRight == LOW){
      Mouse.set_buttons(0, 0, 1);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
  }

// Gestione spostamento mouse asse x

 long encNewPosition = myEnc.read();
  if (encNewPosition != encOldPosition) {
    if (encNewPosition > encOldPosition){
        encOldPosition = encNewPosition;
        Mouse.move(-Speed, 0);
    }
    else {
        encOldPosition = encNewPosition;
        Mouse.move(Speed, 0);
    }
  }
}

Re: Spinner "Fai-da-Te"

Inviato: 21/11/2012, 12:20
da PaTrYcK
Complimenti per lo spinner, e' davvero ben realizzato!

Prima o poi devo farmene uno anche io..

Re: Spinner "Fai-da-Te"

Inviato: 21/11/2012, 16:34
da dR.pRoDiGy
Complimenti, il progettino è ottimo: molto hacker / "maker" come approccio! <-thumbup->

Curiosità: a parte l'aspetto "ludico" della cosa (ripeto, molto apprezzabile!), perchè hai scelto di implementarlo con un microcontrollore tipo Arduino, piuttosto che basarti su un, ad esempio, mouse hack?

Re: Spinner "Fai-da-Te"

Inviato: 21/11/2012, 16:53
da Keyb
Grazie dei complimenti, fanno sempre piacere.

Inizialmente era nato come mouse hack, ma poi l'ho trovato un po' troppo limitante, soprattutto sulla risoluzione. Anche impostando la massima sensibilita' da pannello di controllo, per effettuare uno spostamento dx-sx di tutto lo schermo mi serviva un giro e mezzo di manopola. Avrei percio' dovuto implementare un sistema di demoltiplica meccanica.

Adesso e' totalmente configurabile e adattabile alle varie esigenze. Per es. per Arkanoid ho settato lo spostamento dx-sx di tutto lo schermo con circa 70 gradi.

Re: Spinner "Fai-da-Te"

Inviato: 21/11/2012, 19:10
da dR.pRoDiGy
Capisco! :wink:

Ti dirò, anch'io tempo addietro mi sono costruito uno spinner (ancora perfettamente funzionante nel mio cab!), nel mio caso tramite un mouse hack sebbene un pò diverso dal solito (ho usato un mouse ottico invece che a pallina)..
Era stato abbastanza semplice costruirlo, oltre che quasi gratuito (tutto taglia e cuci meccanico, e un pò di falegnameria spicciola), e a livello di sensibilità va piuttosto bene.. è bastato fare qualche aggiustamento nei settaggi interni di mame per adeguarlo a tutti i titoli.

Giusto così per condividere, il post del mio progetto è questo:
http://www.arcadeitalia.net/viewtopic.php?f=14&t=7064
(purtroppo nei vari cambi server si sono "bruciate" quasi tutte le immagini.. se le ritrovo su pc le ricarico!).

PS: il tuo ha un'inerzia incredibile.. il mio coi cuscinetti da pattini se la sogna!! :-D

Re: Spinner "Fai-da-Te"

Inviato: 22/11/2012, 9:02
da Kernel
Che inerzia spettacolare! E' la testina di suo ad essere così o hai adottato qualche accorgimento?

Io anni fa avevo interfacciato lo spinner Taito di Arknaoid ad una scheda di un mouse PS2:
http://www.arcadeitalia.net/viewtopic.php?f=14&t=1502

Ma l'inerzia del tuo se la sogna!

Re: Spinner "Fai-da-Te"

Inviato: 22/11/2012, 11:44
da Keyb
Ragazzi, complimenti davvero anche per i vostri progetti! <-clap->

dR.pRoDiGy se ritrovi le foto sarebbe ottimo. Per me, ma immagino anche per altri, e' decisamente importante e "motivante" vedere cosa e' stato fatto da altri. E' estremamente utile poter "toccare con mano" quali siano stati i risultati ottenuti, i problemi riscontrati e non ultimo i costi sostenuti. Gia', perche' il fai da te e' molto dispendioso. A dispetto di quello che possa sembrare, a meno di non avere gia' le attrezzature adatte, materiale di recupero e una buona dose di fantasia e manualita', acquistare il prodotto gia' fatto costa meno. Se poi consideriamo anche la mano d'opera, allora in conto cresce a dismisura!

Per quanto riguarda l'inerzia dello spinner molto del merito va alla testina. Questa e' perfettamente bilanciata e nasce per girare con il minimo attrito possibile. In aggiunta ho eliminato buona parte della circuiteria interna in modo da avere poche parti striscianti. Ho ridotto all'osso anche la parte del disco ottico, in modo da mantenere il baricentro sulla parte superiore.

Adesso ho per le mani un altro VCR. Penso proprio che prima di buttarlo lo promuovero'... "donatore di organi per controllers arcade"!!! <-lol->

Re: Spinner "Fai-da-Te"

Inviato: 22/11/2012, 11:45
da PaTrYcK
L'idea della testina e' ottima...ora inizio a costruirmi il mio :)

Re: Spinner "Fai-da-Te"

Inviato: 22/11/2012, 11:49
da Keyb
ah, ah, ah.... T'ho fatto venire voglia!!!

Re: Spinner "Fai-da-Te"

Inviato: 22/11/2012, 11:58
da PaTrYcK
E' da tempo che penso di farmene uno, poi tra una cosa e l'altra...
Al momento ho uno schedino ottico (recuperato da un volante cab atari) ed un mouse con pallina, ora vedo di recuperare un videoregistratore, impresa nn facile :)

Re: Spinner "Fai-da-Te"

Inviato: 23/11/2012, 20:44
da dR.pRoDiGy
Keyb ha scritto:Ragazzi, complimenti davvero anche per i vostri progetti! <-clap->
Beh devo dire che il più evoluto che mi sia capitato di vedere in giro su internet è il tuo.. cmq grazie :-D
Keyb ha scritto: dR.pRoDiGy se ritrovi le foto sarebbe ottimo. Per me, ma immagino anche per altri, e' decisamente importante e "motivante" vedere cosa e' stato fatto da altri. E' estremamente utile poter "toccare con mano" quali siano stati i risultati ottenuti, i problemi riscontrati e non ultimo i costi sostenuti. Gia', perche' il fai da te e' molto dispendioso. A dispetto di quello che possa sembrare, a meno di non avere gia' le attrezzature adatte, materiale di recupero e una buona dose di fantasia e manualita', acquistare il prodotto gia' fatto costa meno. Se poi consideriamo anche la mano d'opera, allora in conto cresce a dismisura!
Nel mio caso è stato tutto molto economico.. mouse ottico recuperato, una decina di euro tra bulloneria e rotelle, tasto arcade (che come detto fa da contenitore per cuscinetti e albero, oltre a fornire il fissaggio alla plancia) sacrificato anche lui da uno recuperato.. insomma a livello materiali quasi gratis!

Poi ovviamente ci sono volute svariate orette di lavoro tra test e assemblaggio definitivo.. la manodopera farebbe senz'altro lievitare il conto di parecchio, ma noi ci si diverte così, quindi non sono mica soldi buttati! <-thumbup->

PS: se non ritrovo le foto le rifaccio, promesso ;-)

Re: Spinner "Fai-da-Te"

Inviato: 24/11/2012, 12:47
da dR.pRoDiGy
Ecco le famose foto:

Questa foto è piuttosto bruttina..si vede la rotella da carrelli usata come knob, al suo interno c'è avvitata la barra filettata, e appena sotto si intravede lo spezzone di tubo in alluminio che ho usato come distanziale tra rotella e cuscinetti (che ovviamente non si vedono). Ancora più sotto si vede il tasto tipo Happ, nero, che è stato forato per far passare l'albero.
22052011239.jpg
In queste altre 2 foto si vede l'interno: al tasto ho tagliato il fondo del contenitore, ho inserito all'interno i cuscinetti da pattini (si incastrano perfettamente a pressione) e poi via di barra filettata: dadi e rondelle qua e là per aggiungere massa volanica e distanziare l'altra rotella all'interno, che girando viene "letta" dal sensore ottico del mouse ( quindi risulta movimento sull'asse x del mouse).
A completare il tutto una piccola struttura di alluminio e legno (quest'ultimo ha una finestrella da dove si affaccia la rotella) che sostiene il mouse alla distanza corretta.
22052011240.jpg
22052011241.jpg
Soluzione molto più casalinga.. ma funziona bene! 8-)

Re: Spinner "Fai-da-Te"

Inviato: 24/11/2012, 17:10
da Jorghino
Non riesco a vederle le foto. Colpa mia o c'è qualcosa che non va?

Re: Spinner "Fai-da-Te"

Inviato: 24/11/2012, 18:46
da dR.pRoDiGy
No colpa mia!
Mi è uscito il solito post doppio.. quando l'ho rimosso si son perse le foto anche dal primo <-on_cry->

.. Stavolta dovremmo esserci! <-on_lol->

Re: Spinner "Fai-da-Te"

Inviato: 26/11/2012, 14:52
da Keyb
Ah, ottimo! Grazie mille per le foto. Sicuramente il grip che hai sulla rotella e' eccezionale!

Molto interessante il fatto di aver usato un mouse ottico invece di quello classico a pallina. Hai dovuto applicare sistemi di demoltiplica software?

Re: Spinner "Fai-da-Te"

Inviato: 26/11/2012, 17:17
da dR.pRoDiGy
La rotella in realtà è in plastica semi-dura (non proprio gomma), ma il grip è molto buono cmq, confermo!

Funziona bene sia con i vari Arkanoid/Tempest etc., che con i giochi di guida tipo SuperSprint (nel primo caso il knob si impugna con l'intera mano tipo volume dello stereo, mentre nel secondo caso paga di più l'approccio dito singolo, modello DJ sui piatti per capirci) :wink:

Il mouse ottico funziona perfettamente così com'è, senza nessuna demoltiplica, ed è anche preciso.. a voler proprio dirla tutta la rotella interna è un filo più piccola dell'esterna, ma ci sarà giusto 1 cm di differenza tra i 2 diametri (se vuoi stasera prendo le misure e ti dico).
A livello sw ho solo provveduto a fare del "tuning" nella config di MAME (dal menu attivato col TAB), gioco per gioco: con poche modifiche ho ottenuto una sensibilità ottima su tutti i titoli; comodo anche il fatto che la config giusta una volta salvata si attivi automaticamente aprendo il gioco.

Per concludere, il sistema con mouse a pallina è forse più "professionale" (in quanto sostanzialmente identico a quello dei veri spinner), ma oltre ad essere sempre più difficile trovare mouse di quel tipo, spesso la risoluzione come dici tu diventa un problema..

Ciao <-thumbup->

Re: Spinner "Fai-da-Te"

Inviato: 03/12/2012, 15:50
da Keyb
Ieri pomeriggio ho sfruttato un momento libero per costruire l'adattatore per il volante che mi ha dato PaTrYcK. Adesso posso mettere tutto in verticale e giocare a Championship Sprint!
csprint.png
Stasera metto qualche foto!

Re: Spinner "Fai-da-Te"

Inviato: 03/12/2012, 20:38
da dR.pRoDiGy
Azz l'estensione volante è un bel plus 8-) .. aspettiamo foto! <-gamers3->

Re: Spinner "Fai-da-Te"

Inviato: 04/12/2012, 9:22
da Keyb
Aggiorno il topic con qualche foto. L'adattatore e' fatto in plastica (non so esattamente cosa sia, ma e' molto duro!). Avrei voluto farlo in alluminio, ma in casa non l'avevo delle misure che mi servivano e per certe cose sono come un bambino: tutto e subito! Per cui mi sono adattato con quello che avevo disponibile al volo!

Le tre viti sono M4 e andranno sostituite con delle manopoline (piccole, senno' mi sballano il bilanciamento!). Il foro e' preciso e le viti servono solo per evitare che possa uscire o che prenda gioco.

La rapida prova su un paio di giochi ha dimostrato che e' perfettamente funzionante e funzionale!

Adesso ho piu' o meno tutto cio' che mi serve in tema di controllers. Almeno per ora <-lol-> (ma sto gia' iniziando la mod per collegare i controller Wii...)
2012-12-03 23.00.53.jpg
2012-12-03 23.01.06.jpg
2012-12-03 23.01.30.jpg
2012-12-03 23.27.49.jpg
2012-12-03 23.00.47.jpg

Re: Spinner "Fai-da-Te"

Inviato: 04/12/2012, 12:50
da Jorghino
Me lo studio bene e provo a copiarti!