midival

midival é un controlador midi onde se usa como interface un pinball de construcción propia

JPEG - 26.6 KB

midival é un controlador midi donde se usa como interface
un pinball de construcción propia.

Naceu como un traballo conxunto de Erick Arreola, Elena Baraut, Íngrid
Baraut e eu mesmo, a comezos do 2005.

mecánica

O Pinball está feito de madeira e con restos dun pinball de xoguete.
Tamén usamos gomas para o mecanismo das palancas de disparo, gomas
anchas para as paredes de propulsión, tacos para os leds e muelles
para os pibotes. Contamos coa axuda de Josep Baraut e Teresa Orriols para
todo o proceso de carpintería.
Para o deseño da interface, partimos dos nosos recordos sobre pinballs
cos que xogamos e fomos adaptándoos ás solucións
mecánicas que nos ofrecían Josep e Teresa, ás necesidades
dos sensores, ao circuíto e á bola e aos recursos
materiais dos que dispoñiamos.

JPEG - 10.8 KB
JPEG - 7.4 KB
JPEG - 9 KB
JPEG - 9.9 KB
JPEG - 11 KB
JPEG - 9.4 KB

electrónica

Para o circuíto, o primeiro que fixemos foi conectar
cada sensor por separado no BasicStamp, para testealos e ver que valores
daban ao ser activados pola bola. A partir de aí estruturamos
o circuíto tendo en conta o número de sensores e o número
de pins dispoñibles no Basic.

o circuíto do pinball conta con:

+ sensor de flexión para a rampa de saída.
+ sensor de posición para a ponte.
+ Piezoeléctrico para as dianas, os pibotes e as paredes de propulsión.
+ Pulsador de diana.
+ Potenciómetro.
+ Catro leds nos tacos.
+ Sensores de muelles, con leds, reciclados do pinball de xoguete.

JPEG - 9.3 KB
JPEG - 11.8 KB
JPEG - 8.4 KB
JPEG - 17.9 KB
JPEG - 9.4 KB
JPEG - 13.7 KB

programación

O programa do Pinball consiste en primeiro lugar en recoller os valores
dos sensores a través do BasicStampII con instrucións como
RCTIME e BUTTON para mandalas despois a MidiPoet -programa deseñado
por Eugenio Tisselli, utilizado nesta ocasión como xerador de imaxes-.
As mensaxes midi envíanse desde o Basic coa instrución SEROUT e
MidiPoet recolle estes datos, transformándoos en valores que controlan as
imaxes (velocidade, frames, tamaño, orde de reprodución,
etc…). A mesma mensaxe midi é mapeada polo PureData para enviar
información cara un sintetizador virtual, ou calquera outro programa
de audio en vivo como Audiomulch.

código do Basic Stamp

"{$STAMP BS2}
"{$PBASIC 2.5}

btwk VAR Byte
btwk=0
pib3 VAR Word
pib4 VAR Word
pib5 VAR Word
pib6 VAR Word
pib7 VAR Word
flex VAR Word
posicion VAR Word
potenciometro VAR Word
baudmode CON 12
midinoteon CON 144
midiconchange CON 176
midiprogchange CON 192

inicio:

HIGH 2 "potenciometro
HIGH 3 "pibote3
HIGH 4 "pibote4
HIGH 5 "pibote5
HIGH 6 "pibote6
HIGH 7 "pibote7
HIGH 14 "posicion
HIGH 15 "flex
HIGH 8 "leds

BUTTON 0,0,254,0,btwk,1,diana
BUTTON 9,0,0,0,btwk,1,nobout9
BUTTON 10,0,0,0,btwk,1,nobout10
BUTTON 11,0,0,0,btwk,1,nobout11
BUTTON 12,0,0,0,btwk,1,nobout12
BUTTON 13,0,0,0,btwk,1,nobout13

RCTIME 2,1,potenciometro
IF potenciometro =1 THEN saltarpotenciometro
SEROUT 1, baudmode, [ midinoteon, potenciometro/5, 120]
DEBUG DEC ? potenciometro/5

saltarpotenciometro:

BUTTON 0,0,254,0,btwk,1,diana
BUTTON 9,0,0,0,btwk,1,nobout9
BUTTON 10,0,0,0,btwk,1,nobout10
BUTTON 11,0,0,0,btwk,1,nobout11
BUTTON 12,0,0,0,btwk,1,nobout12
BUTTON 13,0,0,0,btwk,1,nobout13

RCTIME 3,0,pib3
IF pib3 =1 THEN saltarpib3
SEROUT 1, baudmode, [ midinoteon+1, 1, 120]
DEBUG DEC ? pib3

saltarpib3:
BUTTON 0,0,254,0,btwk,1,diana
BUTTON 9,0,0,0,btwk,1,nobout9
BUTTON 10,0,0,0,btwk,1,nobout10
BUTTON 11,0,0,0,btwk,1,nobout11
BUTTON 12,0,0,0,btwk,1,nobout12
BUTTON 13,0,0,0,btwk,1,nobout13

RCTIME 4,0,pib4
IF pib4 =1 THEN saltarpib4
SEROUT 1, baudmode, [ midinoteon+2, 8, 120]
DEBUG DEC ? pib4

saltarpib4:
BUTTON 0,0,254,0,btwk,1,diana
BUTTON 9,0,0,0,btwk,1,nobout9
BUTTON 10,0,0,0,btwk,1,nobout10
BUTTON 11,0,0,0,btwk,1,nobout11
BUTTON 12,0,0,0,btwk,1,nobout12
BUTTON 13,0,0,0,btwk,1,nobout13

RCTIME 5,0,pib5
IF pib5 =1 THEN saltarpib5
SEROUT 1, baudmode, [ midinoteon+3, 13, 120]
DEBUG DEC ? pib5

saltarpib5:
BUTTON 0,0,254,0,btwk,1,diana
BUTTON 9,0,0,0,btwk,1,nobout9
BUTTON 10,0,0,0,btwk,1,nobout10
BUTTON 11,0,0,0,btwk,1,nobout11
BUTTON 12,0,0,0,btwk,1,nobout12
BUTTON 13,0,0,0,btwk,1,nobout13

RCTIME 6,0,pib6
IF pib6 =1 THEN saltarpib6
SEROUT 1, baudmode, [ midinoteon+4, 25, 120]
DEBUG DEC ? pib6

saltarpib6:
BUTTON 0,0,254,0,btwk,1,diana
BUTTON 9,0,0,0,btwk,1,nobout9
BUTTON 10,0,0,0,btwk,1,nobout10
BUTTON 11,0,0,0,btwk,1,nobout11
BUTTON 12,0,0,0,btwk,1,nobout12
BUTTON 13,0,0,0,btwk,1,nobout13

RCTIME 7,0,pib7
IF pib7 =1 THEN saltarpib7
SEROUT 1, baudmode, [ midinoteon+5, 32, 120]
DEBUG DEC ? pib7

saltarpib7:
BUTTON 0,0,254,0,btwk,1,diana
BUTTON 9,0,0,0,btwk,1,nobout9
BUTTON 10,0,0,0,btwk,1,nobout10
BUTTON 11,0,0,0,btwk,1,nobout11
BUTTON 12,0,0,0,btwk,1,nobout12
BUTTON 13,0,0,0,btwk,1,nobout13

RCTIME 14,1,posicion
IF posicion >780 THEN saltarposicion
SEROUT 1, baudmode, [ midinoteon+6, posicion/6, 120]
DEBUG DEC ? posicion

saltarposicion:
BUTTON 0,0,254,0,btwk,1,diana
BUTTON 9,0,0,0,btwk,1,nobout9
BUTTON 10,0,0,0,btwk,1,nobout10
BUTTON 11,0,0,0,btwk,1,nobout11
BUTTON 12,0,0,0,btwk,1,nobout12
BUTTON 13,0,0,0,btwk,1,nobout13

RCTIME 15,1,flex
IF flex <3700 THEN saltarflex
SEROUT 1, baudmode, [ midinoteon+7, flex/250, 120]
DEBUG DEC ? flex

saltarflex:
GOTO inicio

nobout9:
SEROUT 1, baudmode, [ midinoteon+8, 50, 120]
DEBUG "999999999999999999999999999999"
GOTO inicio
diana:
SEROUT 1, baudmode, [ midinoteon+9, 1, 120]
DEBUG "ffffffffffffffffffffffffffffffff"
GOTO inicio
nobout10:
SEROUT 1, baudmode, [ midinoteon+8, 10, 120]
DEBUG "101010101010101010101010101010"
GOTO inicio
nobout11:
SEROUT 1, baudmode, [ midinoteon+8, 20, 120]
DEBUG "111111111111111111111111111111"
GOTO inicio
nobout12:
SEROUT 1, baudmode, [ midinoteon+8, 30, 120]
DEBUG "222222222222222222222222222222"
GOTO inicio
nobout13:
SEROUT 1, baudmode, [ midinoteon+8, 40, 120]
DEBUG "3333333333333333333333333333333"
GOTO inicio

Programa do MidiPoet

JPEG - 27.7 KB
JPEG - 15.4 KB