
Chisme 139: el traje inteligente del Lince, sensor de vibración con ESP32
Marge The ThunderClown llevaba una hora lanzando pelotas de goma contra el Lince de la Noche. Sensor de vibración.
—¡Plaf! —decía cada vez que acertaba—. ¡Plaf! ¡Otra!
Víctor Vílchez no se había movido de su sitio. Tampoco se había quejado. En el pecho del traje parpadeaba una pequeña luz que cambiaba según el golpe: tenue con las pelotas flojas, intensa con las fuertes.
—Anota los datos, Gata —dijo sin perder la calma.
—Ya lo hago —respondió la Gata Montesa, con la libreta en la mano—. Tres golpes flojos, dos medios, uno fuerte. Y un rebote que era tuyo, por cierto.
—Perfecto. Con eso diseño la mejor respuesta.
—¿Sin devolver ni una pelota?
—Sin devolver ni una. Un traje que aprende de cada golpe no necesita devolverlos.
Marge dejó de lanzar y lo miró con las manos en la cintura.
—Qué aburrido eres.
—No —dijo el Lince—. Soy científico.
Introducción
En este chisme 139 vas a construir el traje inteligente del Lince: un módulo sensor de vibración conectado a la ESP32 Plus que detecta golpes, mide su fuerza y hace brillar un LED más o menos según lo fuerte que sea el golpe.
En la historia, el traje del Lince mezcla kevlar y nomex con nanopartículas que detectan los golpes. Eso es ficción. En nuestro prototipo usaremos un módulo del kit avanzado de robótica, pero el principio es el mismo: un sensor que nota la vibración, la convierte en señal eléctrica y un programa decide qué hacer. Antes de montarlo, practica en el simulador del traje inteligente, que tiene modo demostración.
El Lince recibe golpes, pero responde sin violencia: los mide, aprende de ellos y diseña mejores defensas. Ese es el espíritu del chisme.
Qué necesitamos
- La ESP32 Plus de Acebott y ACECode (como en el Chisme 112).
- Del kit avanzado de robótica: el módulo sensor de vibración de cuatro pines (G, V, D0 y A0) y el módulo LED.
- Cinco cables Dupont.
El módulo es muy parecido al del sensor de alcohol del Chisme 136: D0 es la salida digital y A0 la analógica.
Conexión
Con el USB desenchufado y revisando las etiquetas del módulo:
| Módulo | ESP32 Plus |
|---|---|
| Vibración · V | 3V3 (3,3 V) |
| Vibración · G | G |
| Vibración · D0 | pin 25 |
| Vibración · A0 | pin 35 |
| LED · S | pin 5 |
Alimentamos el sensor a 3,3 V para que la salida A0 nunca pase de 3,3 V, que es lo máximo que aguantan las entradas de la ESP32.
Cómo funciona un sensor de vibración
Un sensor de vibración convierte un movimiento brusco en una señal eléctrica. Según el modelo, puede llevar un muelle que cierra un contacto al sacudirse o una lámina piezoeléctrica, un material que genera una pequeña tensión cuando se deforma. Puedes leer más en la Wikipedia: piezoelectricidad.
El módulo tiene además un comparador y un potenciómetro, como el sensor de alcohol:
- A0 (analógica): un número de 0 a 4095 que sube con la vibración.
- D0 (digital): 0 o 1. Pasa a 1 cuando A0 supera el umbral que marca el potenciómetro.
Prueba: ¿qué entrega el sensor?
En nuestro módulo, los valores fueron:
- Quieto: A0 = 0.
- Golpes menores: unos 2000.
- Golpe fuerte: A0 llega a 4095.
Tu módulo dará números distintos. Lo importante es la forma: casi 0 en reposo, un pico con el golpe y de nuevo 0.
Para verlo, este programa lee A0 y D0 con el puerto serie. Importante: para que aparezca el puerto serie en ACECode hay que instalar la extensión de la shield 9 en 1, aunque no pongas la placa de expansión encima de la ESP32 Plus. Abre el monitor serie a 115200.

- Por siempre:
- Serial 115200 imprimir «unir» (
A:y leer pin analógico 35). - Serial 115200 imprimir «unir» (
D:y leer pin digital 25). - Esperar 0,1 segundos.
- Serial 115200 imprimir «unir» (
Fíjate en el 0,1 segundos. Un golpe dura una fracción de segundo. Si el programa mirase solo una vez por segundo, se perdería casi todos los golpes. Esto es importante para todo lo que mide cosas rápidas.
El mismo programa en Arduino
ACECode genera código Arduino por debajo. Este es el que ha generado el programa de prueba, por si prefieres usar el Arduino IDE o quieres ver cómo se escribe en texto:
// generated by Block
#include <Arduino.h>
void setup() {
pinMode(35,INPUT);
Serial.begin(115200);
pinMode(25,INPUT);
}
void loop() {
Serial.println((String("A:") + String((analogRead(35)))));
Serial.println((String("D:") + String((digitalRead(25)))));
delay(0.1 * 1000);
}
Fíjate en tres cosas:
analogRead(35)da el número de 0 a 4095 (la lectura analógica) ydigitalRead(25)da 0 o 1 (la digital).setup()se ejecuta una vez yloop()se repite sin parar: es el «por siempre» del bloque.delay(0.1 * 1000)espera 100 milisegundos: el «esperar 0,1 segundos» del bloque.
El programa: el escudo del traje
Ahora hacemos que el LED muestre la fuerza del golpe. Es la técnica del Chisme 137: el LED acepta de 0 a 255 y A0 da de 0 a 4095, así que dividimos entre 16.
- Por siempre:
- Serial 115200 imprimir «unir» (
A:y leer pin analógico 35). - escribir pin analógico 5 a (leer pin analógico 35 / 16).
- Esperar 0,1 segundos.
- Serial 115200 imprimir «unir» (
Con un golpe flojo el LED brilla poco, con uno fuerte brilla al máximo. Eso es el «escudo» del traje.
Qué estamos midiendo realmente
El número de A0 no son newtons. Es una señal eléctrica relativa que depende del sensor, de dónde lo golpees, de la superficie y del ajuste del potenciómetro. Dos módulos iguales darán lecturas distintas con el mismo golpe.
Además, el programa no ve la señal entera: solo toma una muestra cada 0,1 s. Un golpe dura muy poco y puede caer entre dos muestras. Por eso conviene mirar muy a menudo y, si importa la fuerza máxima, quedarse con el valor más alto. Medir no significa necesariamente medir bien.
Para el aula
- Predice: ¿qué valores de A0 esperas con un golpe flojo, medio y fuerte?
- Mide: golpea la mesa a 10, 20 y 40 cm del sensor. ¿Cambia el valor con la distancia?
- Compara: ¿qué da A0 si golpeas la mesa y qué si golpeas el módulo directamente?
- Cambia el muestreo: prueba con 1 s en vez de 0,1 s. ¿Cuántos golpes de diez se pierde el programa?
- Ajusta el umbral: gira el potenciómetro y comprueba a partir de qué golpe pasa D0 a 1.
- Calibra: ¿cómo calibrarías el traje con una pelota que cae desde alturas conocidas?
- Debate: ¿qué datos necesitaría guardar el traje para aprender de los golpes, y qué privacidad habría que cuidar?
Retos
- Reto 1: haz que el LED brille más cuanto más fuerte sea el golpe.
- Reto 2: muestra en el monitor serie un texto distinto según la fuerza: VERDE (flojo), AMARILLO (medio) o ROJO (fuerte).
- Reto 3: cuenta los golpes. Cuidado: un solo golpe puede dar varias lecturas altas seguidas.
- Reto 4: guarda el valor máximo de los últimos dos segundos («memoria de pico»).
- Reto 5: añade un zumbador que suene solo con golpes rojos.
- Reto 6: guarda las lecturas con la página del Chisme 135 y dibuja la gráfica de una tanda de golpes.
- Reto 7: clasifica los golpes en flojo, medio y fuerte a partir de los datos guardados, como primer paso del «traje que aprende».
- Reto 8: convierte el proyecto en una investigación: ¿qué superficie absorbe mejor un golpe, madera, goma o tela?
Qué hemos aprendido
Has conectado un sensor de vibración a la ESP32 Plus y has usado sus dos salidas, D0 y A0. Has visto que un golpe es una señal brevísima y que hay que muestrear muy a menudo para no perderla. Has aprendido que A0 es una medida relativa, no newtons, y has regulado un LED con la fuerza del golpe.
Marge lanzó una última pelota. El LED del pecho del Lince brilló al máximo durante un instante y la Gata lo anotó en la libreta: «Golpe fuerte. 4095. El Lince ni parpadeó». El Lince sonrió: ya tenía datos para la siguiente versión del traje.


