
En este artículo, te mostramos cómo usar un sensor piezoeléctrico con Arduino para crear un sistema de apertura de puerta. Este proyecto detecta golpes en la puerta y, tras tres golpes, activa un relé que puede controlar dispositivos como un motor. Veremos cómo funciona el efecto piezoeléctrico, qué es un piezoeléctrico, y cómo ajustar el sistema para que se adapte a tus necesidades.
¿Qué es un sensor piezoeléctrico y cómo funciona?
El sensor piezoeléctrico convierte las vibraciones mecánicas, como los golpes en una puerta, en una señal eléctrica. Este efecto, conocido como efecto piezoeléctrico, se basa en la capacidad de ciertos materiales para generar una corriente eléctrica cuando se les aplica una presión. Los sensores piezoeléctricos son muy sensibles y se utilizan comúnmente para detectar vibraciones y golpes.
Cuando conectas un piezoeléctrico a un Arduino, puedes detectar cambios en la presión aplicando un golpe a la superficie donde está montado. El Arduino procesa estas señales eléctricas y, según el código que le proporciones, puede activar otros componentes, como un LED o un relé.
Configuración del Proyecto en Arduino
Para este proyecto, necesitarás un Arduino, un sensor piezoeléctrico, un LED y un relé. El código está diseñado para contar los golpes detectados por el piezoeléctrico. Tras tres golpes en la puerta, el relé se activa para controlar un motor o cualquier otro dispositivo. A continuación, te mostramos cómo configurar tu sistema.

Lista de Materiales:
- Arduino Uno (o cualquier otra placa compatible)
- Sensor piezoeléctrico
- Resistencia de 1MΩ (se usa en paralelo con el sensor piezoeléctrico para estabilizar la señal, mejorar la sensibilidad y proteger el pin de entrada del Arduino.)
- LED (color opcional)
- Módulo relé de 5V
- Cerradura electrónica (o cualquier dispositivo que desees controlar con el relé)
- Resistencia de 220Ω (para el LED)
- Cables de conexión
- Protoboard
- Fuente de alimentación (para la carga)
Desarrollo del código
Código
Aquí tienes el código que utilizarás:
const int piezo = A1; // Pin A1 donde está conectado el piezoeléctrico
const int led = 5; // Pin 5 donde está conectado el LED
const int relay = 7; // Pin 7 donde está conectado el relé
int golpeCount = 0; // Contador de golpes
unsigned long lastTime = 0; // Tiempo del último golpe
unsigned long interval = 1000; // Intervalo máximo entre golpes (1 segundo)
unsigned long debounceTime = 500; // Tiempo de debounce para evitar múltiples lecturas por un solo golpe
void setup() {
pinMode(piezo, INPUT); // Definimos el pin A1 como entrada
pinMode(led, OUTPUT); // Definimos el pin 5 como salida
pinMode(relay, OUTPUT); // Definimos el pin 7 como salida
digitalWrite(led, LOW); // Inicia con el LED apagado
digitalWrite(relay, LOW); // Inicia con el relé apagado
}
void loop() {
// Detecta si hay un golpe
if (digitalRead(piezo) == HIGH) {
// Evita múltiples lecturas debido a rebotes
delay(debounceTime);
// Comprueba si el tiempo desde el último golpe es mayor que el intervalo de 1 segundo
if (millis() - lastTime > interval) {
golpeCount = 0; // Reinicia el contador si ha pasado más de 1 segundo desde el último golpe
}
lastTime = millis(); // Actualiza el tiempo del último golpe
golpeCount++; // Incrementa el contador de golpes
// Si se detectaron 3 golpes
if (golpeCount == 3) {
digitalWrite(led, HIGH); // Enciende el LED
digitalWrite(relay, HIGH); // Activa el relé
delay(3000); // Mantiene el relé activado por 3 segundos
digitalWrite(relay, LOW); // Desactiva el relé
digitalWrite(led, LOW); // Apaga el LED
golpeCount = 0; // Reinicia el contador de golpes
}
}
}
Explicación del Código:
- Declaración de Pines: El piezoeléctrico se conecta al pin A1, el LED al pin 5 y el relé al pin 7. Estos pines pueden modificarse según tu configuración.
- Contador de Golpes: El código cuenta cuántos golpes se detectan en un intervalo específico. Si el tiempo entre golpes supera el intervalo, el contador se reinicia.
- Tiempo de Rebote (Debounce Time): El
debounceTime
se establece en 500 ms para evitar lecturas múltiples causadas por el rebote mecánico del piezoeléctrico. Puedes ajustar este valor para mejorar la precisión de la detección.
Personalización del Proyecto:
Este proyecto es flexible y permite varios ajustes:
- Intervalo entre Golpes: El intervalo (
unsigned long interval = 1000;
) determina cuánto tiempo puede pasar entre los golpes para que se consideren consecutivos. Puedes reducir este valor para detectar golpes más rápidos o aumentarlo si los golpes son menos frecuentes. - Número de Golpes Requeridos: Si prefieres que el sistema reaccione después de más o menos golpes, modifica la condición
if (golpeCount == 3)
. Por ejemplo, para cinco golpes, cambia el número 3 a 5. - Tiempo de Activación del Relé: El tiempo que el relé permanece activado se establece en 3000 ms (3 segundos). Ajusta este valor en la línea
delay(3000);
según cuánto tiempo necesitas que el relé esté activo. - Debounce Time: Ajusta el
debounceTime
según la sensibilidad deseada. Un valor más alto hará el sistema menos sensible a lecturas múltiples, mientras que un valor más bajo lo hará más sensible.
Recomendaciones:
- Ajuste del
debounceTime
: Si el sistema detecta demasiados golpes o ninguno, ajusta eldebounceTime
para filtrar mejor los ruidos eléctricos y los rebotes mecánicos. - Configuración del Sensor: Asegúrate de que el sensor piezoeléctrico esté montado de manera estable en una superficie que pueda captar claramente los golpes, como una puerta. La estabilidad del sensor es crucial para una detección precisa.
- Pruebas Iniciales: Realiza pruebas con solo el LED antes de conectar el relé y el motor. Esto te ayudará a asegurarte de que el sistema de detección funciona correctamente antes de agregar cargas adicionales.
- Seguridad con el Relé: Si estás usando un relé para controlar dispositivos que operan a alto voltaje, asegúrate de seguir las precauciones de seguridad adecuadas para evitar riesgos eléctricos.
- Ajuste de Sensibilidad: Puedes experimentar con diferentes valores de resistencia para ajustar la sensibilidad del sensor piezoeléctrico. Esto te permitirá adaptar el sistema a la intensidad de los golpes que esperas detectar.
Conclusión:
Este proyecto con Arduino y un piezoeléctrico es una excelente forma de aprender sobre detección de golpes y control de dispositivos. Al ajustar la sensibilidad, el número de golpes y otros parámetros, puedes adaptar el sistema a diferentes aplicaciones, desde la automatización del hogar hasta sistemas de seguridad.
Si estás en México y necesitas componentes electrónicos, te invitamos a visitar nuestra tienda de electrónica en la CDMX. ¡Te esperamos con todo lo que necesitas para tus proyectos!
¡Prueba y experimenta con estas configuraciones para ver qué puedes lograr!
Video
Propuesta con Tinkercad
Te proponemos un circuito para Tinkercad que simula el funcionamiento de un relevador y un piezoeléctrico utilizando componentes disponibles en la plataforma. En esta simulación:
- Relevador: Dado que Tinkercad no cuenta con un módulo de relevadores, lo hemos sustituido utilizando un relevador básico, un transistor, un diodo y una resistencia para imitar el comportamiento de un módulo de relevadores.
- Piezoeléctrico: Como no está disponible en Tinkercad, lo hemos reemplazado con un microswitch y una resistencia para replicar la función de detección.
El circuito está diseñado para que, tras activar el interruptor tres veces (según la configuración de tiempos en el código de Arduino), el motor se encienda. Este comportamiento refleja el mismo funcionamiento que tendría con los componentes originales en un entorno físico.
Si deseas una explicación detallada del uso y configuración de los diferentes componentes que hemos utilizado en Tinkercad, no dudes en dejarlo en los comentarios, y con gusto prepararemos un artículo explicativo para ti. ¡Esperamos que esta simulación te sea útil para tus pruebas y proyectos!