midival
midival é un controlador midi onde se usa como interface un pinball de construcción propia
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.
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.
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