Spinner "Fai-da-Te"

Guide, richieste e tutto ciò che c'è da sapere sui controlli del cab
Avatar utente
Keyb
Affezionato
Affezionato
Messaggi: 193
Iscritto il: 13/10/2012, 11:02
Città: Roma

Spinner "Fai-da-Te"

Messaggio 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);
    }
  }
}
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
Ciao,
Alex
Avatar utente
PaTrYcK
Moderatore
Moderatore
Messaggi: 11584
Iscritto il: 12/10/2009, 20:35
Città: Cagliari
Grazie Ricevuti: 26 volte

Re: Spinner "Fai-da-Te"

Messaggio da PaTrYcK »

Complimenti per lo spinner, e' davvero ben realizzato!

Prima o poi devo farmene uno anche io..
Avatar utente
dR.pRoDiGy

Donatore
Moderatore F.E.E.L.
Moderatore F.E.E.L.
Messaggi: 3069
Iscritto il: 17/11/2009, 15:55
Medaglie: 1
Città: Prov_Milano_zona_Sempione
Grazie Inviati: 10 volte
Grazie Ricevuti: 17 volte

Re: Spinner "Fai-da-Te"

Messaggio 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?
"Non si smette di giocare perché si diventa vecchi, ma si diventa vecchi perché si smette di giocare"

Immagine F.E.E.L. - FrontEnd (Emulator Launcher)
http://feelfrontend.altervista.org
https://github.com/dr-prodigy/feel-frontend/
Avatar utente
Keyb
Affezionato
Affezionato
Messaggi: 193
Iscritto il: 13/10/2012, 11:02
Città: Roma

Re: Spinner "Fai-da-Te"

Messaggio 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.
Ciao,
Alex
Avatar utente
dR.pRoDiGy

Donatore
Moderatore F.E.E.L.
Moderatore F.E.E.L.
Messaggi: 3069
Iscritto il: 17/11/2009, 15:55
Medaglie: 1
Città: Prov_Milano_zona_Sempione
Grazie Inviati: 10 volte
Grazie Ricevuti: 17 volte

Re: Spinner "Fai-da-Te"

Messaggio 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
"Non si smette di giocare perché si diventa vecchi, ma si diventa vecchi perché si smette di giocare"

Immagine F.E.E.L. - FrontEnd (Emulator Launcher)
http://feelfrontend.altervista.org
https://github.com/dr-prodigy/feel-frontend/
Avatar utente
Kernel
God of Arcade
God of Arcade
Messaggi: 6794
Iscritto il: 25/07/2005, 10:54
Grazie Inviati: 2 volte
Grazie Ricevuti: 2 volte

Re: Spinner "Fai-da-Te"

Messaggio 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!
Avatar utente
Keyb
Affezionato
Affezionato
Messaggi: 193
Iscritto il: 13/10/2012, 11:02
Città: Roma

Re: Spinner "Fai-da-Te"

Messaggio 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->
Ciao,
Alex
Avatar utente
PaTrYcK
Moderatore
Moderatore
Messaggi: 11584
Iscritto il: 12/10/2009, 20:35
Città: Cagliari
Grazie Ricevuti: 26 volte

Re: Spinner "Fai-da-Te"

Messaggio da PaTrYcK »

L'idea della testina e' ottima...ora inizio a costruirmi il mio :)
Avatar utente
Keyb
Affezionato
Affezionato
Messaggi: 193
Iscritto il: 13/10/2012, 11:02
Città: Roma

Re: Spinner "Fai-da-Te"

Messaggio da Keyb »

ah, ah, ah.... T'ho fatto venire voglia!!!
Ciao,
Alex
Avatar utente
PaTrYcK
Moderatore
Moderatore
Messaggi: 11584
Iscritto il: 12/10/2009, 20:35
Città: Cagliari
Grazie Ricevuti: 26 volte

Re: Spinner "Fai-da-Te"

Messaggio 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 :)
Rispondi

Torna a “Controlli (joystick, pulsanti, trackball, spinner, volanti, ecc...)”