La capacidad de controlar el movimiento mecánico en respuesta a cambios de orientación o posición es fundamental en innumerables aplicaciones, desde sistemas de nivelación automática hasta pequeños robots que se adaptan a su entorno. Este artículo explora un proyecto de electrónica que combina la detección de inclinación simple a través de los módulos KY-027 (sensor de inclinación de mercurio) con el control de dos motores de DC utilizando una placa Arduino y un Driver L293D (Puente H). El objetivo es crear un sistema reactivo donde la inclinación hacia una dirección activa un motor específico para corregir o mover una plataforma.
🔩Funcionamiento
El objetivo de este proyecto es controlar el movimiento de dos motores usando una placa Arduino. Los módulos de mercurio KY-027 detectarán inclinaciones u orientación, y dependiendo de cuál se active, se moverá el motor correspondiente. El L293D actuará como puente H, permitiendo controlar la dirección de los motores.
El Sensor de Inclinación KY-027 (Interruptor de Mercurio)
El módulo KY-027 es un sensor de inclinación simple pero efectivo, a menudo referido como un “interruptor de mercurio” o “sensor de bola de rodillo” (aunque el KY-027 típicamente usa una bola conductiva en lugar de mercurio por seguridad).
- Principio de Funcionamiento: Consiste en un pequeño tubo o cápsula con dos contactos eléctricos y una pequeña bola conductiva (o una gota de mercurio). Cuando el sensor se inclina lo suficiente en una dirección, la bola rueda y conecta los dos contactos, completando un circuito. Cuando se inclina en la dirección opuesta, la bola se mueve y rompe el circuito.
- Salida Digital: El módulo KY-027 suele tener una resistencia pull-up o pull-down interna que convierte esta conexión/desconexión física en una señal digital clara: HIGH cuando los contactos están abiertos (no inclinación) y LOW cuando los contactos están cerrados (inclinación detectada). Esto lo hace ideal para ser leído por un pin digital de Arduino.
El Driver L293D (Puente H): Potencia y Dirección para Motores DC
Los microcontroladores como Arduino no pueden suministrar suficiente corriente o voltaje directamente para accionar la mayoría de los motores de DC. Además, necesitan una forma de invertir la polaridad para cambiar la dirección del giro del motor. Aquí es donde entra en juego el Puente H L293D.
- Función: Es un circuito integrado diseñado específicamente para controlar motores de DC. Contiene dos Puentes H internos, lo que le permite controlar dos motores de DC de forma independiente.
- Control de Dirección: Un Puente H funciona utilizando cuatro interruptores (transistores). Al activar pares de interruptores diagonalmente opuestos, la corriente fluye en una dirección a través del motor. Al activar el otro par diagonal, la corriente se invierte, cambiando la dirección del motor.
- Control de Velocidad (PWM): Aunque el L293D es principalmente un controlador de dirección, también puede utilizarse para controlar la velocidad del motor aplicando una señal de Modulación por Ancho de Pulso PWM a sus pines de “Enable” (habilitación). Esto permite variar el voltaje promedio que llega al motor.
Lógica de Control: Condicionalidad y Reacción
El núcleo lógico del proyecto se basa en la detección condicional. Si el “Sensor 1” detecta una inclinación, el “Motor 1” se activa en una dirección. Si el “Sensor 2” detecta una inclinación, el “Motor 2” se activa en su dirección correspondiente. Es crucial implementar una lógica que detenga los motores cuando ninguno de los sensores detecte inclinación, para evitar movimientos innecesarios o descontrolados.
🔨Componentes
| Componente | Cantidad | Especificación | Función |
|---|---|---|---|
| Placa Arduino | 1 | Arduino Uno, Nano, etc. | Control de componentes(cerebro) |
| Módulo de mercurio | 2 | KY-027 | Detectar la inclinación |
| Circuito integrado | 1 | L293D | Alimentar motores |
| Motor | 2 | 5v DC | Girar |
| Cables de conexión | n | Unir componentes | |
| Fuente de alimentación | 1 | 5v-12v DC | Suministro de energía |
🔨Componentes
- Conexión de los sensores KY-027:
- Conecta sus pines de señal a los pines digitales 11 y 12 del Arduino, y asegúrate de alimentarlos con 5V y GND con el arduino.
- Conexión del L293D:
- Pin 1, 9 y 16 a 5v del arduino.
- Pin 4, 5, 12 y 13 a GND.
- Pin 8 a 5v de la fuente de alimentación(Une GND de la fuente almentacion a GND de arduino).
- Los pines de entrada (IN1, IN2, IN3, IN4) se conectan a los pines 2, 3, 4 y 5 del Arduino.
- Los motores se conectan a las salidas del L293D (OUT1, OUT2 para el motor 1; OUT3, OUT4 para el motor 2).
0️⃣Código
El código se encargará de leer los estados de los sensores y, en consecuencia, activar los motores en la dirección apropiada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <Arduino.h> // Pines del Arduino conectados al L293D y a los sensores const int motor1Pin1 = 2; // Dirección Motor 1 const int motor1Pin2 = 3; const int motor2Pin1 = 4; // Dirección Motor 2 const int motor2Pin2 = 5; const int sensor1Pin = 11; // Señal Sensor KY-027 para Motor 1 const int sensor2Pin = 12; // Señal Sensor KY-027 para Motor 2 void setup() { // Configurar pines de motores como salida pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(motor2Pin1, OUTPUT); pinMode(motor2Pin2, OUTPUT); // Configurar pines de sensores como entrada pinMode(sensor1Pin, INPUT); pinMode(sensor2Pin, INPUT); // Comunicación serial para depuración Serial.begin(9600); } void loop() { // Leer estado de los sensores int sensor1State = digitalRead(sensor1Pin); int sensor2State = digitalRead(sensor2Pin); // Control del motor 1 if (sensor1State == HIGH) { // Mover motor 1 hacia adelante digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); Serial.println("Motor 1: Moviendo hacia adelante"); } else { // Detener motor 1 digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); Serial.println("Motor 1: Detenido"); } // Control del motor 2 if (sensor2State == HIGH) { // Mover motor 2 hacia adelante digitalWrite(motor2Pin1, HIGH); digitalWrite(motor2Pin2, LOW); Serial.println("Motor 2: Moviendo hacia adelante"); } else { // Detener motor 2 digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, LOW); Serial.println("Motor 2: Detenido"); } delay(200); // Pausa para estabilizar lecturas } |
NOTAS IMPORTANTES:
- El mercurio es tóxico, tener cuidado de no romper el cristal
- Asegúrate de usar una fuente de alimentación con suficiente corriente para los motores.
- Si los motores se mueven en la dirección equivocada, intercambia las conexiones a los pines de salida del L293D o modifica el código.
- Supervisa las lecturas de los sensores con la consola serial para facilitar la depuración
🖌️Diseños

🎬Videos
📑Conclusión
La conclusión del proyecto de control de motores por inclinación con Arduino, sensores KY-027 y el puente H L293D es que se logra establecer un sistema de control de movimiento simple, binario y reactivo.
Este proyecto demuestra con éxito los siguientes puntos clave:
- Integración de Detección Simple: El uso de los módulos KY-027 (o interruptores de inclinación) es ideal para detectar cambios de orientación de manera digital (ON/OFF), lo que permite una interfaz sencilla y de bajo costo con el microcontrolador Arduino.
- Control de Actuadores con Interfaz de Potencia: Se valida la importancia del Puente H L293D como el elemento crucial que aísla la lógica de control de Arduino (baja corriente) de la potencia requerida por los motores (DC) para su movimiento bidireccional. La utilización de pines PWM permite, además, un control preciso sobre la velocidad.
- Lógica Condicional: La programación implementada en Arduino establece una relación directa y condicional entre la entrada del sensor (inclinación) y la salida del actuador (dirección del motor). Esto confirma el principio de un sistema de posicionamiento activo básico, donde el movimiento se ejecuta hasta que la condición de inclinación detectada se elimina.
En resumen, este proyecto sirve como una sólida base educativa y funcional para entender cómo la lógica de programación puede traducir una entrada física simple (inclinación) en una acción mecánica controlada (movimiento de motores) a través de los componentes electrónicos de interfaz adecuados.

