Dwa 3: Tě Pñu«eñ 'H¿a Mě±d¿' c¿± ě±
LED
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
E cÀdug¿ báÿuc¿
Eÿče ÿu«ée cÀdug¿ hace éañéadeañ e LED
u±čegñad¿ cada ÿegě±d¿. Eÿ čě éñu«eñ éñ¿gña«a
fě±cu¿±a e± Añděu±¿.
¿Qěé eÿčá éaÿa±d¿?
setup(): Se eecěča ě±a ÿ¿a ļeś a u±ucu¿
loop(): Se ñeéuče u±fu±uča«e±če
pinMode(): C¿±fugěña e éu± c¿«¿ ÿauda
digitalWrite(): E±cue±de ¿ aéaga e LED
Día 4: Variables y
Modificaciones
Variables Básicas
Las variables almacenan datos que pueden cambiar durante
la ejecución del programa. En Arduino usamos int para
números enteros, float para decimales y boolean para
verdadero/falso.
Modificando el Parpadeo
Cambia la velocidad del LED usando una variable para el
delay. Experimenta con diferentes valores y observa cómo
afecta el comportamiento.
Patrones Creativos
Crea secuencias de parpadeo únicas combinando diferentes
tiempos de encendido y apagado. ¡Tu creatividad es el
límite!
int delayTime = 500; // Variable para controlar velocidad
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(delayTime);
digitalWrite(13, LOW);
delay(delayTime);
}
Día 7: Sensor de Temperatura
Sensor LM35
El LM35 es un sensor de temperatura
analógico preciso que proporciona
10mV por cada grado Celsius. Es ideal
para proyectos domóticos.
float tempPin = A1;
float tempValue = 0;
float temperature = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
tempValue = analogRead(tempPin);
temperature = (tempValue * 5.0 / 1024.0) * 100;
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.println(" °C");
delay(1000);
}
Conversión de Temperatura
La fórmula convierte el valor digital en grados Celsius reales
que puedes usar en tus proyectos.
Día 8: Sensor de Movimiento PIR
int pirPin = 2;
int ledPin = 13;
int pirState = LOW;
void setup() {
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
pirState = digitalRead(pirPin);
if (pirState == HIGH) {
digitalWrite(ledPin, HIGH);
Serial.println("¡Movimiento detectado!");
} else {
digitalWrite(ledPin, LOW);
}
delay(100);
}
Detección
El sensor PIR detecta
cambios en la radiación
infrarroja causados por el
movimiento de cuerpos
calientes.
Señal Digital
Cuando detecta movimiento,
el PIR envía una señal HIGH
(5V) al pin digital de Arduino.
Activación LED
Arduino procesa la señal y
enciende un LED como
respuesta al movimiento
detectado.
Dwa 9: C¿«bu±a±d¿ Se±ÿ¿ñeÿ
Lecčěña Su«ěčá±ea de MĜčuéeÿ Se±ÿ¿ñeÿ
Te«éeñačěña
M¿±uč¿ñea
c¿±ÿča±če«e±če a
če«éeñačěña a«bue±če
éaña ÿuÿče«aÿ de
cu«ačuśacuÀ±
u±čeuge±če.
Lě«u±¿ÿudad
Mude ¿ÿ ±uļeeÿ de ěś
éaña aěč¿«ačuśañ a
uě«u±acuÀ± ÿegĜ± aÿ
c¿±ducu¿±eÿ
a«bue±čaeÿ.
M¿ļu«ue±č¿
Dečecča éñeÿe±cua
hě«a±a éaña acčuļañ
ÿuÿče«aÿ de ÿegěñudad ¿
ah¿ññ¿ e±eñgéčuc¿.
// Definición de pines
int tempPin = A0;
int ldrPin = A1;
int pirPin = 2;
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
}
void loop() {
// Leer temperatura
float temp = (analogRead(tempPin) * 5.0 / 1024.0) * 100;
// Leer luz
int luz = analogRead(ldrPin);
// Leer movimiento
int movimiento = digitalRead(pirPin);
Dwa 11: C¿±čñ¿ de LEDÿ RGB
int redPin = 9;
int greenPin = 10;
int bluePin = 11;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
// Rojo
setColor(255, 0, 0);
delay(1000);
// Verde
setColor(0, 255, 0);
delay(1000);
// Azul
setColor(0, 0, 255);
delay(1000);
// Púrpura
setColor(255, 0, 255);
delay(1000);
}
void setColor(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
R¿¿
Pu± duguča c¿± PWM c¿±čñ¿a
a u±če±ÿudad de c¿«é¿±e±če
ñ¿¿ de LED RGB.
Veñde
M¿děacuÀ± é¿ñ a±ch¿ de
éěÿ¿ éeñ«uče cñeañ dufeñe±čeÿ
č¿±audadeÿ de ļeñde.
Aśě
C¿«bu±a±d¿ ¿ÿ čñeÿ c¿¿ñeÿ
éñu«añu¿ÿ éěedeÿ ge±eñañ
«u¿±eÿ de c¿¿ñeÿ dufeñe±čeÿ.
Dwa 12: Señļ¿«¿č¿ñeÿ
C¿±čñ¿ Pñecuÿ¿ de P¿ÿucuÀ±
L¿ÿ ÿeñļ¿«¿č¿ñeÿ éeñ«uče± c¿±čñ¿añ a é¿ÿucuÀ± a±gěañ
c¿± gña± éñecuÿuÀ±, deÿde 0° haÿča 180°. S¿± udeaeÿ éaña
éñ¿ōecč¿ÿ ïěe ñeïěueñe± «¿ļu«ue±č¿ c¿±čñ¿ad¿ c¿«¿
éěeñčaÿ aěč¿«áčucaÿ, bñaś¿ÿ ñ¿bÀčuc¿ÿ ¿ ÿuÿče«aÿ de
ÿegěu«ue±č¿.
Se½a PWM
E ÿeñļ¿ ÿe c¿±čñ¿a «edua±če éěÿ¿ÿ PWM. U± éěÿ¿ de 1«ÿ
c¿ññeÿ鿱de a 0°, 1.5«ÿ a 90° ō 2«ÿ a 180°. Añděu±¿
ÿu«éufuca eÿč¿ c¿± a ubñeñwa Señļ¿.
#include <Servo.h>
Servo miServo;
int pos = 0;
void setup() {
miServo.attach(9);
}
void loop() {
// Movimiento de 0 a 180 grados
for (pos = 0; pos <= 180; pos += 1) {
miServo.write(pos);
delay(15);
}
// Movimiento de 180 a 0 grados
for (pos = 180; pos >= 0; pos -= 1) {
miServo.write(pos);
delay(15);
}
}
180°
Ra±g¿ de M¿ļu«ue±č¿
R¿čacuÀ± «áŊu«a eÿčá±dañ
20«ÿ
Peñw¿d¿ de Pěÿ¿
Fñecěe±cua de c¿±čñ¿ PWM
1-2«ÿ
A±ch¿ de Pěÿ¿
Ra±g¿ éaña c¿±čñ¿ c¿«éeč¿
Día 13: Motores DC
01
Driver L298N
Los motores DC requieren más
corriente de la que Arduino
puede suministrar. El driver
L298N actúa como amplificador
y permite control bidireccional.
02
Control de Velocidad
Usa PWM para controlar la
velocidad del motor. Valores de 0
a 255 en analogWrite()
determinan la velocidad de
rotación.
03
Control de Dirección
Dos pines digitales controlan la
dirección: HIGH-LOW para un
sentido, LOW-HIGH para el
opuesto.
int motor1Pin1 = 2;
int motor1Pin2 = 3;
int enablePin = 9;
void setup() {
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enablePin, OUTPUT);
}
void loop() {
// Girar en sentido horario
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
analogWrite(enablePin, 200); // Velocidad alta
delay(2000);
// Parar
analogWrite(enablePin, 0);
delay(1000);
// Girar en sentido antihorario
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
analogWrite(enablePin, 150); // Velocidad media
delay(2000);
Dwa 17: Rueg¿ Aěč¿«áčuc¿ e± Macečaÿ
int moisturePin = A0;
int pumpPin = 7;
int moistureValue = 0;
int dryThreshold = 400; // Umbral de sequedad
void setup() {
pinMode(pumpPin, OUTPUT);
digitalWrite(pumpPin, LOW);
Serial.begin(9600);
Serial.println("Sistema de riego automático iniciado");
}
void loop() {
moistureValue = analogRead(moisturePin);
Serial.print("Humedad del suelo: ");
Serial.println(moistureValue);
if (moistureValue > dryThreshold) {
Serial.println("Suelo seco - Activando riego");
digitalWrite(pumpPin, HIGH);
delay(3000); // Riega por 3 segundos
digitalWrite(pumpPin, LOW);
Serial.println("Riego completado");
delay(10000); // Espera 10 segundos antes de medir nuevamente
} else {
Serial.println("Suelo húmedo - No necesita riego");
delay(5000); // Verifica cada 5 segundos
}
}
Tip: Aěÿča e ě«bña ÿegĜ± e čué¿ de éa±ča. Pa±čaÿ ÿěcěe±čaÿ ±eceÿuča± «e±¿ÿ agěa ïěe
éa±čaÿ čñ¿éucaeÿ.
Se±ÿ¿ñ de Hě«edad
Mude c¿±ÿča±če«e±če a
hě«edad de ÿěe¿ e± a
«aceča éaña dečeñ«u±añ
cěá±d¿ ñegañ.
B¿«ba de Agěa
Se acčuļa aěč¿«áčuca«e±če
cěa±d¿ a hě«edad eÿčá é¿ñ
deba¿ de ě«bña eÿčabecud¿.
C¿±čñ¿ de Tue«é¿
Ruega é¿ñ ě± čue«é¿
dečeñ«u±ad¿ ō ěeg¿ eÿéeña
a±čeÿ de a ÿugěue±če
«educuÀ±.
Día 18: Alarma con PIR y Buzzer
Sistema de Seguridad Mejorado
Esta versión avanzada de la alarma incluye
diferentes tonos de alerta, tiempo de activación
configurable y un sistema de armado/desarmado
más sofisticado.
Características Avanzadas
Tiempo de gracia: 10 segundos para desarmar
Tonos variables: Diferentes frecuencias de
alerta
Indicadores LED: Estado visual del sistema
Reset automático: Se desarma después de 30
segundos
int pirPin = 2;
int buzzerPin = 8;
int ledPin = 13;
int buttonPin = 3;
boolean systemArmed = true;
boolean alarmTriggered = false;
unsigned long triggerTime = 0;
unsigned long graceTime = 10000; // 10 segundos de gracia
void setup() {
pinMode(pirPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("Sistema de seguridad activado");
}
void loop() {
if (systemArmed && digitalRead(pirPin) == HIGH && !alarmTriggered) {
alarmTriggered = true;
triggerTime = millis();
Serial.println("¡MOVIMIENTO DETECTADO! Tiempo de gracia activo...");
}
if (alarmTriggered) {
unsigned long currentTime = millis();
if (currentTime - triggerTime < graceTime) {
// Período de gracia - parpadeo lento
digitalWrite(ledPin, (currentTime / 500) % 2);
} else {
// Alarma activa
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 1000 + (currentTime % 1000), 100);
}
// Auto-reset después de 30 segundos
if (currentTime - triggerTime > 30000) {
alarmTriggered = false;
digitalWrite(ledPin, LOW);
noTone(buzzerPin);
Serial.println("Alarma auto-desactivada");
}
}
Día 19: Termómetro con LCD
Pantalla LCD 16x2
Muestra la temperatura en tiempo real con dos
líneas de información: temperatura actual y
estado del sistema.
Sensor LM35
Proporciona lecturas precisas de temperatura con
una resolución de 0.5°C y rango de -55°C a 150°C.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int tempPin = A0;
void setup() {
lcd.begin(16, 2);
lcd.print("Termometro LCD");
delay(2000);
lcd.clear();
}
void loop() {
int tempValue = analogRead(tempPin);
float temperature = (tempValue * 5.0 / 1024.0) * 100;
// Indicador de estado
if (temperature > 25) {
lcd.setCursor(10, 1);
lcd.print("CALOR");
} else if (temperature < 18) {
lcd.setCursor(10, 1);
lcd.print("FRIO ");
} else {
lcd.setCursor(10, 1);
lcd.print("OK ");
}
delay(1000);
}
Próximo paso: ¡Mañana completaremos nuestro viaje con el proyecto final que integra todo lo
aprendido en un sistema Smart Home completo!