Panel táctil
Metes el dedo por un agujero del cartón y el número aparece en el computador.
Una tablet o teléfono queda apoyado plano sobre la mesa, con la pantalla hacia arriba, mostrando seis botones circulares numerados del 1 al 6. Encima se coloca una lámina de cartón decorada con agujeros recortados que calzan con esos círculos. El usuario toca la pantalla capacitiva metiendo el dedo por los agujeros, y el computador muestra en grande el mismo número seleccionado. La versión base es deliberadamente genérica (solo números, sin etiquetas temáticas ni emojis) para que cada grupo la reutilice con su propio dataset, narrativa o visualización.
El sensor
No usa ningún sensor de hardware: ni cámara, ni orientación, ni NFC, ni micrófono. La interacción es directamente la pantalla táctil capacitiva. En sensor.html cada botón escucha pointerdown y llama a Protobject.Core.send().to("index.html") con un evento semántico: { tipo: "panel", accion: "press", id: "zona1", numero: "1", marcador: "1", valor: 1 }. El número viaja en tres formatos (numero y marcador como string, valor como número) para que cada estudiante use el que le acomode; no hace falta usarlos todos. En index.html, Protobject.Core.onReceived() toma el primero disponible con datos.numero || datos.marcador || datos.valor.
Materiales
- Tablet o smartphone grande con pantalla táctil (preferentemente tablet, por su mayor área de pantalla)
- Computador con navegador Chrome o Safari
- Lámina de cartón rígido del tamaño de la pantalla
- Cortacartón o tijeras
- Cinta adhesiva o masking tape para fijar el panel
- Plumones, papeles u otros materiales para decorar el panel
Puesta en marcha
- Coloca la tablet o smartphone sobre la mesa, con la pantalla hacia arriba.
- Abre la demo en vivo (index.html) en el computador.
- Haz click en "+ Conectar tablet". Aparece un código QR.
- Escanea el QR con la tablet o teléfono que va a funcionar como panel.
- En la tablet, toca el botón "Pantalla completa".
- Marca antes de cortar: con los círculos ya visibles en pantalla completa, apoya el cartón encima y calca su posición con lápiz. El tamaño de los círculos depende del ancho de la pantalla, así que no sirve medirlos de antemano.
- Recorta los agujeros marcados y decora el cartón.
- Coloca la lámina de cartón encima de la pantalla.
- Alinea los agujeros del cartón con los círculos numerados visibles en la pantalla y fija el cartón con masking tape para que no se mueva.
- Toca a través de los agujeros: la pantalla del computador muestra el mismo número seleccionado.
El código que importa
De physicalkit/artefactos/08-panel/sensor.html (la página que corre en la tablet): cada botón .hole escucha pointerdown y llama a enviarNumero(), que resalta el botón tocado y manda el número a index.html en tres formatos (numero, marcador, valor) con Protobject.Core.send().to(). Esto es todo el "sensor": no hay hardware involucrado, solo la pantalla capacitiva.
function enviarNumero(num) {
botones.forEach((b) => b.classList.toggle("active", b.dataset.num === String(num)));
Protobject.Core.send({
tipo: "panel",
accion: "press",
id: "zona" + num,
numero: String(num),
marcador: String(num),
valor: Number(num)
}).to("index.html");
setTimeout(() => {
botones.forEach((b) => b.classList.remove("active"));
}, 180);
}
botones.forEach((boton) => {
const num = boton.dataset.num;
boton.addEventListener("pointerdown", (e) => {
e.preventDefault();
enviarNumero(num);
});
});
Parámetros que puedes ajustar
| Constante | Default | Qué cambia |
Cantidad de zonas (elementos .hole en sensor.html y .mini en index.html) | 6 | Agrega o quita elementos .hole/.mini con su data-num correspondiente para tener más o menos botones. Si usas un teléfono en vez de una tablet, conviene reducir la cantidad. |
Etiqueta visible y data-num de cada botón | 1, 2, 3, 4, 5, 6 | El texto visible puede ser una palabra o un ícono en vez de un número. data-num es lo que viaja al PC: define numero, marcador, valor y el id ("zona" + num). |
Tamaño de los círculos (.hole width/height en sensor.html) | clamp(120px, 18vw, 190px) en horizontal; clamp(110px, 32vw, 170px) en vertical | Define qué tan grandes hay que recortar los agujeros. Deben ser suficientemente grandes para que el dedo toque la pantalla con comodidad. |
Grilla del panel (grid-template-columns / grid-template-rows de .panel) | 3 columnas x 2 filas en horizontal; 2 columnas x 3 filas en vertical (media query orientation: portrait) | Determina la disposición física de los agujeros en el cartón. Con teléfono es mejor la orientación vertical. |
Duración del feedback visual (setTimeout en enviarNumero) | 180 ms | Cuánto dura el resaltado en rojo del botón tocado antes de volver al estado normal. Solo afecta la retroalimentación en la tablet, no el dato enviado. |
Protobject.setProduction (config.js) | true | Modo producción, porque la app está hospedada en HTTPS (GitHub Pages). config.js declara además qué página corre en el PC (index.html, main: true) y cuál en la tablet (sensor.html), y debe ser el último <script> del HTML. |
Cómo adaptarlo a tu proyecto
- Mapa táctil: dibuja o pega un mapa sobre el cartón y perfora un agujero por cada ciudad o región; cada número pasa a representar un lugar en vez de un dígito genérico.
- Instrumento o secuenciador simple: cada agujero dispara un sonido o una nota distinta, útil para sonificación de datos.
- Panel de control de una visualización: cada número cambia de vista, filtra una categoría o cambia el dataset mostrado en una visualización más grande en el PC.
- Teclados temáticos, cuadros de mando decorativos e instrumentos musicales de cartón, según el manual.
- Para adaptarlo basta cambiar las etiquetas visibles de los .hole en sensor.html (y de los .mini en index.html); el mecanismo de envío y recepción no cambia.
- Es una alternativa compacta y autocontenida a la superficie táctil de doble vista (artefacto 07-tacto) cuando el tamaño de la pantalla alcanza para el espacio de interacción requerido: no necesita dos cámaras ni triangulación.
Ojo con esto
- El panel depende por completo de la alineación física: los agujeros del cartón deben coincidir bien con los círculos de la pantalla.
- Conviene usar una tablet por su mayor área de interacción. Con teléfono, reduce la cantidad de agujeros o usa orientación vertical.
- Los agujeros deben ser suficientemente grandes para que el dedo toque la pantalla con comodidad.
- La pantalla debe estar desbloqueada y sin gestos del sistema que interfieran; por eso el paso de "Pantalla completa".
- No requiere permisos de cámara, orientación, NFC ni micrófono.
- El computador y la tablet deben estar en la misma red WiFi.
- En index.html, Protobject.Core.onReceived() se registra antes del resto de la lógica para no perder mensajes si la tablet se conecta muy rápido (error "New connection, but no callback registered").