Contenido
Presentación del proyecto
En este proyecto aprenderás a utilizar los componentes que más adelante formarán parte de un coche robot de cuatro motores.
Antes de construir el coche completo, trabajaremos por etapas para comprender qué hace cada componente, cómo se conecta y cómo se controla desde un programa.
El proyecto se divide en dos partes:
| Parte | Qué vamos a trabajar | Resultado |
|---|---|---|
| Parte 1. Medir y observar el entorno | Sensor de ultrasonidos, servomotor y combinación de ambos | Un escáner que mide distancias en distintas direcciones |
| Parte 2. Controlar el movimiento | Motores DC, controlador L293D y combinación con el sensor | Un montaje de banco que detiene los motores ante un obstáculo |
En la primera parte no conectaremos motores DC ni el controlador L293D. El servomotor se utilizará para orientar el sensor.
El coche completo será una fase posterior. En estas dos partes nos centraremos en comprender y comprobar sus componentes.
Objetivos generales
Al finalizar el proyecto deberás ser capaz de:
- Identificar los cables y conexiones de cada componente.
- Distinguir entre un sensor y un actuador.
- Medir distancias con un HC-SR04.
- Colocar un servo en diferentes posiciones.
- Combinar el servo y el sensor para observar distintas direcciones.
- Controlar el sentido y la velocidad de motores DC mediante un L293D.
- Utilizar una lectura del sensor para tomar una decisión.
- Documentar los montajes y explicar los resultados.
Forma de trabajo
En cada práctica seguirás este proceso:
- Comprender: lee qué hace el componente y para qué sirve.
- Predecir: escribe qué esperas que ocurra.
- Montar: realiza las conexiones con la alimentación desconectada.
- Programar: introduce el código y súbelo al Arduino.
- Comprobar: observa el resultado y registra las pruebas.
- Modificar: cambia una parte del programa y explica su efecto.
No basta con conseguir que el montaje funcione. Debes poder explicar por qué funciona.
Parte 1. Medir y observar el entorno
Material necesario
- Arduino Uno R3 y cable USB.
- Sensor de ultrasonidos HC-SR04.
- Servomotor de posición SG90 o similar.
- Fuente regulada de 5 V adecuada para el servo.
- Cables y protoboard.
- Regla o cinta métrica.
- Una caja o superficie plana para realizar las mediciones.
- Un soporte ligero para colocar el sensor sobre el servo.
Preparación del entorno
Antes de comenzar:
- Abre Arduino IDE.
- Selecciona la placa Arduino Uno.
- Selecciona el puerto al que está conectado el Arduino.
- Crea un programa diferente para cada práctica.
- Guarda los programas con estos nombres:
01_ultrasonidos
02_servo
03_escaner
Mapa de conexiones de esta parte
| Componente | Conexión al Arduino |
|---|---|
| HC-SR04: VCC | 5V |
| HC-SR04: GND | GND |
| HC-SR04: TRIG | D12 |
| HC-SR04: ECHO | D13 |
| Señal del servo | D9 |
| Alimentación del servo | Fuente externa regulada de 5 V |
| GND de la fuente del servo | Unido al GND del Arduino |
Práctica 1. Medir distancias con ultrasonidos
Qué vamos a aprender
El HC-SR04 permite medir la distancia hasta un objeto.

Para hacerlo:
- El Arduino envía una orden por el pin TRIG.
- El sensor emite una señal ultrasónica.
- La señal rebota en el objeto.
- El sensor comunica por ECHO el tiempo asociado al recorrido.
Como el sonido viaja hasta el objeto y vuelve, debemos dividir el recorrido entre dos.
Conexiones

| Pin del HC-SR04 | Arduino Uno |
|---|---|
| VCC | 5V |
| GND | GND |
| TRIG | D12 |
| ECHO | D13 |
Comprueba los nombres impresos en el sensor antes de conectar los cables.

Montaje paso a paso
- Desconecta el cable USB del Arduino.
- Conecta VCC a 5V.
- Conecta GND a GND.
- Conecta TRIG a D12.
- Conecta ECHO a D13.
- Coloca el sensor de forma que sus dos cápsulas apunten hacia la zona que quieres medir.
- Revisa las conexiones antes de conectar el USB.
Programa
const byte TRIG = 12;
const byte ECHO = 13;
float medirCm() {
// Preparar el disparo.
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
// Enviar el pulso de disparo.
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
// Esperar el eco, con un límite de tiempo.
unsigned long tiempo = pulseIn(ECHO, HIGH, 30000UL);
// Un resultado de cero significa que no llegó el eco.
if (tiempo == 0) {
return -1.0;
}
// Convertir el tiempo en distancia.
return tiempo * 0.0343 / 2.0;
}
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
}
void loop() {
float distancia = medirCm();
if (distancia < 0) {
Serial.println("Sin eco");
} else {
Serial.print("Distancia: ");
Serial.print(distancia, 1);
Serial.println(" cm");
}
delay(100);
}
Cómo comprobarlo
- Sube el programa.
- Abre el Monitor serie a 9600 baudios.
- Coloca una caja plana aproximadamente a 10 cm.
- Mide la distancia real con una regla.
- Repite a 20 y 40 cm.
- Inclina la caja y observa si cambia la lectura.
- Retira el objeto y observa qué sucede.
Tabla de resultados
| Distancia medida con regla | Lectura del sensor | Diferencia |
|---|---|---|
| 10 cm | ||
| 20 cm | ||
| 40 cm |
Resultado esperado
La distancia mostrada cambia al mover el objeto.
Cuando no se recibe el eco dentro del tiempo de espera, aparece «Sin eco». Esto no significa que el objeto esté a cero centímetros.
Modificación obligatoria
Modifica el programa para que, además de la distancia, muestre:
- «Objeto cercano» cuando la distancia sea de 20 cm o menos.
- «Objeto alejado» cuando supere los 20 cm.
- «Sin eco» cuando no exista una lectura.
Preguntas
- ¿Qué función tiene TRIG?
- ¿Qué función tiene ECHO?
- ¿Por qué dividimos entre dos?
- ¿Por qué una superficie inclinada puede afectar a la lectura?
- ¿Por qué no debemos interpretar «Sin eco» como cero centímetros?
Práctica 2. Controlar la posición de un servo

Qué vamos a aprender
Un servo de posición permite mover su eje hasta un ángulo determinado.
Lo utilizaremos para orientar el sensor de ultrasonidos hacia diferentes direcciones.
Este servo recibe una orden de posición. Su funcionamiento es distinto al de los motores DC que harán girar las ruedas.
Conexiones
| Cable del servo | Conexión |
|---|---|
| Señal, normalmente naranja o amarillo | D9 del Arduino |
| Rojo | Positivo de la fuente regulada de 5 V |
| Marrón o negro | GND de la fuente |
| GND de la fuente | GND del Arduino |
Comprueba los colores y las características de tu modelo.
La masa de la fuente y la del Arduino deben estar unidas.

Montaje paso a paso
- Desconecta todas las alimentaciones.
- Conecta la señal del servo a D9.
- Conecta los cables de alimentación del servo a su fuente.
- Une el GND de la fuente con el GND del Arduino.
- Coloca el servo sobre una superficie estable.
- Revisa las conexiones.
- Conecta el Arduino y sube el programa.
Programa
#include <Servo.h>
Servo giro;
const byte PIN_SERVO = 9;
void setup() {
giro.attach(PIN_SERVO);
// Comenzar en la posición central.
giro.write(90);
delay(1000);
}
void loop() {
giro.write(30);
delay(1000);
giro.write(90);
delay(1000);
giro.write(150);
delay(1000);
}
Cómo comprobarlo
- Observa el movimiento entre las tres posiciones.
- Comprueba que el brazo no choque con ningún objeto.
- No fuerces el eje con la mano.
- Cambia las posiciones a 45°, 90° y 135°.
- Cambia los tiempos de espera y observa la diferencia.
Tabla de resultados
| Ángulo solicitado | Posición observada | Observaciones |
|---|---|---|
| 30° | ||
| 90° | ||
| 150° |
Resultado esperado
El servo se coloca sucesivamente en las posiciones indicadas.
Los ángulos del programa son órdenes de posición; la posición física exacta depende del servo y de cómo se haya colocado su brazo.
Modificación obligatoria
Crea una secuencia que:
- Comience a 90°.
- Se mueva a 45°.
- Regrese a 90°.
- Se mueva a 135°.
- Regrese a 90°.
Espera un segundo entre posiciones.
Preguntas
- ¿Para qué sirve el cable de señal?
- ¿Qué hace
attach()? - ¿Qué hace
write()? - ¿Por qué unimos las masas?
- ¿Qué diferencia existe entre un servo de posición y un motor DC de una rueda?
Práctica 3. Construir un escáner de distancias
Qué vamos a aprender
Combinaremos los dos montajes anteriores.
El servo orientará el HC-SR04 hacia distintas posiciones y el Arduino realizará una medición en cada una.
El resultado será un pequeño escáner del entorno.
Conexiones

Mantén las conexiones de las prácticas anteriores:
| Elemento | Conexión |
|---|---|
| HC-SR04 VCC | 5V del Arduino |
| HC-SR04 GND | GND del Arduino |
| HC-SR04 TRIG | D12 |
| HC-SR04 ECHO | D13 |
| Señal del servo | D9 |
| Alimentación del servo | Fuente externa regulada de 5 V |
| GND de la fuente | GND del Arduino |
Montaje paso a paso
- Lleva el servo a 90° con un programa de prueba.
- Desconecta las alimentaciones.
- Fija el sensor sobre el brazo del servo mediante un soporte ligero.
- Deja holgura en los cables del sensor.
- Comprueba que puede moverse entre 30° y 150° sin tirar de los cables.
- Combina las conexiones.
- Sube el programa.
Programa
#include <Servo.h>
Servo giro;
const byte PIN_SERVO = 9;
const byte TRIG = 12;
const byte ECHO = 13;
float medirCm() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
unsigned long tiempo = pulseIn(ECHO, HIGH, 30000UL);
if (tiempo == 0) {
return -1.0;
}
return tiempo * 0.0343 / 2.0;
}
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
giro.attach(PIN_SERVO);
giro.write(90);
delay(600);
}
void loop() {
const byte angulos[] = {30, 90, 150, 90};
for (byte i = 0; i < 4; i++) {
giro.write(angulos[i]);
// Esperar a que termine el movimiento antes de medir.
delay(500);
float distancia = medirCm();
Serial.print("Angulo: ");
Serial.print(angulos[i]);
Serial.print(" grados | ");
if (distancia < 0) {
Serial.println("Sin eco");
} else {
Serial.print(distancia, 1);
Serial.println(" cm");
}
delay(100);
}
}
Cómo comprobarlo
- Abre el Monitor serie a 9600 baudios.
- Coloca objetos en distintas direcciones.
- Observa la distancia asociada a cada ángulo.
- Anota qué ángulo corresponde físicamente a izquierda, centro y derecha en tu montaje.
- Cambia la posición de los objetos y repite.
Tabla de resultados
| Ángulo | Dirección física | Distancia | Lectura válida |
|---|---|---|---|
| 30° | |||
| 90° | |||
| 150° |
Resultado esperado
El sensor se orienta hacia varias posiciones y muestra una distancia asociada a cada una.
Modificación obligatoria
Modifica el programa para guardar las lecturas de las tres posiciones y mostrar cuál tiene mayor distancia entre las lecturas válidas.
Si ninguna lectura es válida, debe mostrar:
No se puede determinar la dirección más despejada.
Preguntas
- ¿Por qué esperamos después de mover el servo?
- ¿Por qué debemos relacionar cada distancia con su ángulo?
- ¿Podemos considerar que una dirección sin eco está necesariamente libre?
- ¿Cómo podría utilizar esta información el futuro coche?
Entrega de la parte 1
Entrega una carpeta comprimida con:
parte_1/
├── README.md
├── imagenes/
├── 01_ultrasonidos/
├── 02_servo/
└── 03_escaner/
En el README.md incluye:
- Explicación de las tres prácticas.
- Fotografías y conexiones.
- Tablas de resultados.
- Respuestas a las preguntas.
- Modificaciones realizadas.
- Una conclusión sobre cómo funciona el escáner.





