Nivel 2 - Inputs + Outputs

P3: ALARMA

Sistema de seguridad con sensor ultrasonico. Construye una fortaleza LEGO y protegela de intrusos. Si alguien se acerca demasiado... suena la alarma!

45
Minutos
5
Componentes
93
Lineas de codigo
01

Que vamos a conseguir?

Un sistema de alarma que detecta cuando algo se acerca a menos de 20cm. El sensor envia ondas de sonido y mide cuanto tardan en volver.

Distancia: 45 cm

Lo que aprenderas:

  • 1 Como funciona un sensor ultrasonico (HC-SR04)
  • 2 Medir tiempo de pulsos con pulseIn()
  • 3 Usar condicionales if/else para tomar decisiones
  • 4 Crear funciones que devuelven valores
02

Hardware necesario

El HC-SR04 es un sensor barato pero muy util. Mide distancias de 2cm a 400cm usando ultrasonido.

Arduino UNO
El cerebro
HC-SR04
Sensor ultrasonico
Buzzer
Sonido de alarma
LED Rojo
Indicador visual
Resistencia 220ohm
Para el LED

Como funciona el sensor ultrasonico

HC-SR04 TX RX Objeto Envia pulso Tiempo viaje Recibe eco
Distancia = (Tiempo x Velocidad) / 2
Dividimos entre 2 porque el sonido va y vuelve

Diagrama de conexion

ARDUINO UNO 5V 7 6 8 9 GND HC-SR04 VCC TRIG ECHO GND BUZZER + LED 220 GND Pin 7: TRIG (disparo) Pin 6: ECHO (eco) Pin 8: Buzzer Pin 9: LED

TRIG y ECHO - Los dos pines del sensor

TRIG (Trigger/Disparo): Cuando enviamos un pulso de 10 microsegundos, el sensor emite 8 pulsos ultrasonicos a 40kHz.

ECHO: Este pin se pone en HIGH mientras el sonido viaja. Midiendo cuanto tiempo esta en HIGH, calculamos la distancia.

La formula de la distancia

El sonido viaja a 343 m/s (a 20C). Si el eco tarda 1000 microsegundos en volver, el sonido recorrio: 1000us x 0.0343 cm/us = 34.3 cm (ida y vuelta). La distancia real es la mitad: 17.15 cm.

Simplificado: distancia_cm = tiempo_us / 58

Ideas para construir con LEGO

El nino construye la fortaleza mientras tu preparas la alarma:

Castillo

Con torres y puente levadizo

Bunker

Base militar secreta

Banco

Con caja fuerte protegida

Museo

Protege las joyas!

03

El codigo explicado

Este programa introduce funciones que devuelven valores y condicionales para tomar decisiones.

p3_alarma.ino
// P3: Alarma de Fortaleza - EigenRobotics

const int TRIG = 7;
const int ECHO = 6;
const int BUZZER = 8;
const int LED = 9;

const int DISTANCIA_ALARMA = 20;  // cm

void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(LED, OUTPUT);

  Serial.begin(9600);
  Serial.println("Alarma de Fortaleza activada!");
}

void loop() {
  int distancia = medirDistancia();

  Serial.print("Distancia: ");
  Serial.print(distancia);
  Serial.println(" cm");

  if (distancia > 0 && distancia < DISTANCIA_ALARMA) {
    activarAlarma();
  } else {
    desactivarAlarma();
  }

  delay(100);
}

int medirDistancia() {
  // Enviar pulso de 10 microsegundos
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  // Medir tiempo del eco
  long duracion = pulseIn(ECHO, HIGH, 30000);

  // Calcular distancia
  int distancia = duracion / 58;

  return distancia;
}

void activarAlarma() {
  digitalWrite(LED, HIGH);
  digitalWrite(BUZZER, HIGH);
}

void desactivarAlarma() {
  digitalWrite(LED, LOW);
  digitalWrite(BUZZER, LOW);
}

Explicacion linea por linea:

1

pinMode(ECHO, INPUT);

Primera vez que usamos un pin como INPUT (entrada). El pin ECHO recibe informacion del sensor, no la envia. TRIG es OUTPUT porque nosotros enviamos el pulso de disparo.

2

int distancia = medirDistancia();

Llamamos a nuestra funcion medirDistancia() y guardamos el resultado en la variable distancia. La funcion hace todo el trabajo de medir y calcular, y nos devuelve un numero.

3

if (distancia > 0 && distancia < DISTANCIA_ALARMA)

Condicional: Si la distancia es mayor que 0 (lectura valida) Y (&&) menor que 20cm, hay un intruso. El && significa que ambas condiciones deben cumplirse.

4

delayMicroseconds(10);

Pausa de 10 microsegundos (no milisegundos). 1 microsegundo = 0.001 milisegundos. Es una pausa muy corta, necesaria para que el sensor genere los pulsos ultrasonicos.

5

long duracion = pulseIn(ECHO, HIGH, 30000);

pulseIn() mide cuanto tiempo esta un pin en HIGH (o LOW). Devuelve la duracion en microsegundos. El 30000 es un timeout: si no hay eco en 30ms, devuelve 0. Usamos long porque puede ser un numero grande.

6

int medirDistancia() vs void activarAlarma()

int significa que la funcion devuelve un numero. void significa que no devuelve nada, solo hace algo. Por eso medirDistancia() tiene return distancia; al final.

Conceptos clave:

pulseIn(pin, estado, timeout)

Mide la duracion de un pulso en microsegundos. Espera a que el pin cambie al estado indicado, mide, y espera a que vuelva.

Condicionales if/else

if (condicion) { A } else { B }
Si la condicion es verdadera, ejecuta A. Si no, ejecuta B.

Operador && (AND)

A && B es verdadero solo si A y B son verdaderos. Tambien existe || (OR): verdadero si A o B lo son.

Funciones con return

int miFuncion() { return 42; }
Puedes usar el resultado: int x = miFuncion();

04

Simulador interactivo

Prueba el sensor ultrasonico en Wokwi. Puedes mover objetos para simular intrusos.

Wokwi Simulator

Abrir en Wokwi

Configurar el simulador

1. Copia el codigo del proyecto.
2. Anade un HC-SR04 desde el menu de componentes.
3. Conecta: VCC-5V, TRIG-Pin7, ECHO-Pin6, GND-GND.
4. Anade un buzzer (pin 8) y LED (pin 9 con resistencia).
5. En el simulador, puedes arrastrar un "objeto" virtual para cambiar la distancia.
6. Abre el Monitor Serial para ver las lecturas.

05

Paso a paso

Monta tu sistema de alarma en 8 pasos.

1

Identifica los pines del HC-SR04

El sensor tiene 4 pines (de izquierda a derecha): VCC, TRIG, ECHO, GND. VCC va a 5V, GND va a tierra.

2

Conecta el HC-SR04

VCC a 5V de Arduino. GND a GND. TRIG al pin 7. ECHO al pin 6. El sensor ya esta listo para medir.

Tip: Monta el sensor mirando hacia afuera de tu fortaleza, para detectar quien se acerca.
3

Conecta el buzzer

El buzzer tiene dos patas. La mas larga (o marcada con +) va al pin 8. La corta va a GND. Es un buzzer activo: solo necesita encenderse.

4

Conecta el LED

Pin 9 - resistencia 220ohm - LED (pata larga) - GND (pata corta). Sera el indicador visual de alarma.

5

Sube el codigo

Conecta Arduino, abre Arduino IDE, pega el codigo y subelo.

6

Abre el Monitor Serial

Ctrl+Shift+M para ver las lecturas de distancia en tiempo real. Acerca la mano al sensor y observa como cambian los numeros.

7

Ajusta la distancia de alarma

Cambia DISTANCIA_ALARMA segun el tamano de tu fortaleza. 20cm es un buen valor inicial. Para fortalezas grandes, prueba 50cm.

8

Juego: No actives la alarma!

El nino intenta acercar la mano a la fortaleza sin que suene la alarma. Muevete lento... muy lento... oops!

06

Experimentos

Mejora tu sistema de alarma con estas modificaciones.

Facil

Cambia la sensibilidad

Modifica DISTANCIA_ALARMA a 10cm (muy sensible) o 50cm (detecta de lejos).

Facil

LED parpadeante

En lugar de LED fijo, hazlo parpadear durante la alarma con delay(100) entre HIGH y LOW.

Medio

Cuenta atras

Antes de activar la alarma, da 3 segundos de advertencia con el LED parpadeando rapido.

Medio

Diferentes tonos

Usa un buzzer pasivo y tone(BUZZER, 1000) para crear diferentes frecuencias de alarma.

Desafio

Zonas de alerta

Menos de 10cm: alarma fuerte. 10-30cm: advertencia suave. Mas de 30cm: todo tranquilo. Usa multiples if/else if.

Desafio

Medidor de distancia

Anade un segundo LED. Usa map() para que el brillo del LED indique la distancia (mas cerca = mas brillante).