#include <Servo.
h> // Biblioteca para controlar servomotores
// Definición de pines para servomotores
#define SERVO_PIERNA_DERECHA 3
#define SERVO_PIERNA_IZQUIERDA 4
#define SERVO_PIE_DERECHO 5
#define SERVO_PIE_IZQUIERDO 6
// Definición de pines para sensor ultrasónico
#define TRIG_PIN 8
#define ECHO_PIN 9
// Definición de pines para otros dispositivos
#define BUZZER_PIN 10
// Definición de umbral de distancia en cm
#define DISTANCIA_UMBRAL 20
// Creación de objetos de servomotores
Servo piernaDerecha;
Servo piernaIzquierda;
Servo pieDerecho;
Servo pieIzquierdo;
// Variables para medición de distancia
long duration;
int distance;
// Variables para el sistema de estado
enum Estado { CAMINANDO, BAILANDO };
Estado estadoActual = CAMINANDO;
void setup() {
[Link](9600); // Inicializar comunicación serie
// Inicializar servomotores
[Link](SERVO_PIERNA_DERECHA);
[Link](SERVO_PIERNA_IZQUIERDA);
[Link](SERVO_PIE_DERECHO);
[Link](SERVO_PIE_IZQUIERDO);
// Configuración de pines del sensor ultrasónico
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Configuración del buzzer
pinMode(BUZZER_PIN, OUTPUT);
[Link]("Sistema iniciado."); // Mensaje de inicio
void loop() {
// Medir distancia y tomar decisiones basadas en el estado
distance = medirDistancia();
[Link]("Distancia: ");
[Link](distance);
[Link](" cm");
// Cambiar el estado basado en la distancia
if (distance < DISTANCIA_UMBRAL) {
estadoActual = BAILANDO;
} else {
estadoActual = CAMINANDO;
// Ejecutar acciones basadas en el estado
switch (estadoActual) {
case CAMINANDO:
caminar();
break;
case BAILANDO:
bailar();
cantarNocheDePaz();
break;
delay(1000); // Pausa de un segundo
void caminar() {
// Movimiento básico de caminar alternando las piernas
[Link]("Robot está caminando.");
for (int i = 0; i < 3; i++) {
moverPiernaDerecha();
moverPiernaIzquierda();
void moverPiernaDerecha() {
[Link](180);
[Link](90);
delay(500);
[Link](0);
[Link](0);
void moverPiernaIzquierda() {
[Link](180);
[Link](90);
delay(500);
[Link](0);
[Link](0);
void bailar() {
// Movimiento de baile simple con sincronización
[Link]("Robot está bailando.");
for (int i = 0; i < 5; i++) {
[Link](90);
[Link](90);
[Link](90);
[Link](90);
delay(300);
[Link](0);
[Link](0);
[Link](180);
[Link](180);
delay(300);
void cantarNocheDePaz() {
// Notas y duraciones para "Noche de paz"
int notas[] = { 523, 523, 587, 587, 659, 659, 587, 0, 523, 523, 587, 587, 659, 659, 587, 0 };
int duraciones[] = { 500, 500, 500, 500, 500, 500, 1000, 500, 500, 500, 500, 500, 500, 1000,
500, 500 };
[Link]("Robot está cantando 'Noche de paz'.");
for (int i = 0; i < 16; i++) {
if (notas[i] > 0) {
tone(BUZZER_PIN, notas[i]);
delay(duraciones[i]);
noTone(BUZZER_PIN);
long medirDistancia() {
// Medir distancia utilizando el sensor ultrasónico
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
long distanciaCm = duration * 0.034 / 2;
return distanciaCm; // Retorna distancia en cm
Resumen de cada palabra clave y función
• Servo: Biblioteca para controlar servomotores.
• define: Define constantes que se pueden usar en el código.
• enum: Crea un tipo de dato personalizado con valores específicos (aquí
se usa para definir estados).
• [Link](): Inicia comunicación serial para enviar y recibir datos.
• attach(): Asocia un pin a un objeto Servo.
• digitalWrite(): Establece un pin como HIGH o LOW.
• delay(): Pausa la ejecución del programa por el tiempo especificado en
milisegundos.
• tone() y noTone(): Activa y desactiva el tono de sonido en un pin.
• switch: Controla el flujo del programa dependiendo del valor de una
variable.
Definiciones de Variables y Bibliotecas
• Servo.h: Biblioteca que permite controlar los servomotores,
permitiendo especificar posiciones angulares.
• pines de servos (SERVO_PIERNA_DERECHA, etc.): Definen los pines a
los que están conectados los servos.
• pines de sensor (TRIG_PIN, ECHO_PIN): Controlan el sensor ultrasónico
de distancia.
• BUZZER_PIN: Pin para el buzzer, usado para reproducir tonos de
canciones.
• duration: Tiempo de viaje de ida y vuelta del sonido en el sensor
ultrasónico.
• distance: Distancia calculada en centímetros.
• enum Estado: Enumera estados como CAMINANDO y BAILANDO.
• medirDistancia(): Calcula la distancia usando el sensor ultrasónico.