Práctica Dirigida 1
Sistema de alarma con 3 dispositivos
Para presentar esta práctica he decidido elaborar un video que demuestra el funcionamiento del programa, seguidamente la programación y para finalizar una explicación de cómo se programó la alarma.
Código de Programación
int pinRojo = 3;
int pinAzul = 5;
int piezo = 6;
int boton = 2;
int estado = 0;
void setup()
{
pinMode(pinRojo, OUTPUT);
pinMode(pinAzul, OUTPUT);
pinMode (piezo, OUTPUT);
pinMode (boton, INPUT);
Serial.begin (9600);
}
void loop()
{
while (digitalRead (boton) ==0)
{
analogWrite(pinRojo, HIGH);
analogWrite(pinAzul, LOW);
delay(100);
analogWrite(pinRojo, LOW);
analogWrite(pinAzul, HIGH);
delay(100);
tone (piezo, 300, 100);
Serial.println (digitalRead (boton));
delay (100);
}
while (digitalRead (boton) ==1)
{
analogWrite (pinRojo, LOW);
analogWrite (pinAzul, LOW);
Serial.println (digitalRead (boton));
}
}
Alarma LEDs
Primero se colocaron los LED en la protoboard, tomando en cuenta que de las dos terminales que tiene cada LED, la más larga es el positivo (en la misma pista que la resistencia) y la más corta el negativo, que se conecta al bus negativo de la protoboard.
Una vez elaborada la circuitería, que enlaza LEDs, una resistencia de 330 Ohmios y sus conexiones con la tarjeta Arduino, estableciendo la polaridad de las resistencia con el pin 5V y el pin 3, el contacto GND al bus negativo de la protoboard, la tierra; uno se procedió a programar el encendido y apagado de los LEDs.
En esta programación comenzamos por definir las variables, darles un nombre y asignarles el número del pin donde están conectadas:
int pinRojo = 3;
int pinAzul = 5;
Continuamos escribiendo el setup, o procedimiento de inicio. En donde le indicamos a cada puerto el trabajo que va a realizar, en este caso con la sentencia OUTPUT, que significa que van a ser puertos de salida de datos.
pinMode(pinRojo, OUTPUT);
pinMode(pinAzul, OUTPUT);
Esta sentencia:
Serial.begin (9600);
le indica al programa que tiene que iniciar a leer los datos y a través de la instrucción
y esta otra
Serial.println ( digitalRead (nombre sensor) );
se puede monitorear los datos que los sensores están recibiendo
Lista esta parte se procede a escribir el ciclo o loop, donde se programa el encendido y apagado de los LEDs, que funcionan con instrucciones booleanas de High para encendido y Low para apagado.
El programa queda así:
digitalWrite (pinRojo, HIGH);
digitalWrite (pinAzul, LOW);
delay(100);
digitalWrite (pinRojo, LOW);
digitalWrite (pinAzul, HIGH);
delay(100);
La sentencia delay ( ## ); se utiliza para indicar el tiempo en mili segundos de las pausas en el programa. En este caso el tiempo que queremos que el LED permanezca encendido, a mayor el número, mayor el tiempo.
Alarma Piezo
En esta segunda parte de la práctica, vamos a incorporar un piezo o buzzer o parlante, a la alarma. Lo primero es colocarlo en el protoboard. El parlante tiene dos terminales las cuales conectamos una a la tierra o GND y la positiva a un pin de la tarjeta arduino.
Con la cirduitiría armada, pasamos a programar, en el programa anterior declaramos la variable y el número del pin que recibe los datos.
int piezo = 6;
Configuramos en el setup el piezo como un puerto de salida de datos.
pinMode (piezo, OUTPUT);
En el loop se define cómo va a sonar el piezo cuando el Led esté encendido, con la funcióntone, le damos a esta sentencia dos tonos diferentes de manera que suene diferente al encenderse el Led Rojo y otro para el Led Azul. El programa queda así, debajo del programa de encendido y apagado de los Leds
tone (piezo, 300, 100);
delay(100);
tone (piezo, 450, 500);
delay(100);
Alarma Botón
Para finalizar se conecta el botón y la resistencia a la tarjeta Arduino Uno a través de un pin, que es el que analizará el estado booleano
del botón, en el mismo bus donde está conectada la resistencia y el botón.
Ahora estamos listos para completar el programa que controla la alarma. Se comienza con definir la variable botón y su estado.
int boton = 2;
int estado = 0;
En el setup se define el pin como puerto de entrada, INPUT
pinMode (boton, INPUT);
Por medio de la estructura de control While, se programa la función que indica que cuando el botón esté sin presionar, los LEDs estarán encendidos de forma intermitente y el piezo sonará. Cuando el botón esté presionado ambos LEDs y el piezo se apagan.
void setup ()
{
while (digitalRead (boton) ==0)
{
analogWrite(pinRojo, HIGH);
analogWrite(pinAzul, LOW);
delay(100);
analogWrite(pinRojo, LOW);
analogWrite(pinAzul, HIGH);
delay(100);
tone (piezo, 300, 100);
delay (100);
}
while (digitalRead (boton) ==1)
{
analogWrite (pinRojo, LOW);
analogWrite (pinAzul, LOW);
Serial.println (digitalRead (boton));
}
RETO 1
Alarma de movimiento
El reto de esta práctica dirigida #1 es crear una alarma que se active (suene) cuando detecta movimiento, esta se simulará utilizando la fotoresistencia, cuando se interponga un objeto sobre ella.
Primero les compartiré el video para que vean funcionar la alarma, como cuando coloco el dedo sobre la fotocelda (sensor), se activa el piezo (actuador) y suena.
Código de Programación
const int piezo = 13;
int ldrPin = A0;
void setup ()
{
Serial.begin (9600);
pinMode (piezo, OUTPUT);
pinMode (ldrPin, INPUT);
}
void loop ()
{
int ldrStatus = analogRead (ldrPin);
if (ldrStatus < 50)
{
tone (piezo, 300, 100);
delay (100);
}
else {
noTone (piezo);
delay (100);
}
}
Alarma de movimiento
Con base en un ejemplo que revisé, que plantea como encender un Led cuando se coloca un obstáculo sobre la fotoresistencia, se procedió a programar la alarma.
Lo primero fue definir las variables el actuador piezo y el sensor fotoresistencia, darles nombre y asignarles el número del pin donde estarán conectadas. Además se indica el puerto 13 como constante porque no cambia.
const int piezo = 13;
int ldrPin = A0;
En el setup, o bloque inicial, indicamos a cada puerto el trabajo que va a realizar, en este caso el actuador piezo con la sentencia OUTPUT se asigna como puerto salida de datos; y el sensor fotoresistencia con la sentencia INPUT se asigna como puerto de recepción de datos.
pinMode (piezo, OUTPUT);
pinMode (ldrPin, INPUT);
La sentencia Serial.begin (9600); le indica al programa que tiene que iniciar a leer los datos y a través de la instrucción.
En el loop se define como variable el estatus del valor del sensor ldr (fotoresistencia). De manera que pueda estar chequeando este valor para que realice una función u otra dependiendo de los parámetros establecidos en la estructura de control if o else.
int ldrStatus = analogRead (ldrPin);
Además se utilizó la estructura de control if y else (si si no) en la cual se establece que si el estatus del sensor ldr es menor que 50 lumens, se active el sonido del piezo con el tono 300 con intensidad de 100 decibelios.
if (ldrStatus < 50)
{
tone (piezo, 300, 100);
delay (100);
}
La instrucción delay (100) lo hace sonar por un intervalo de tiempo de 100 milisegundos.
Si si el estatus del sensor ldr es mayor de 50 lumens, el piezo no emite ningún sonido.
else {
noTone (piezo);
delay (100);
}
Circuitería
Para trabajar con la fotoresistencia y el piezo se necesita utilizar una resistencia de 330 Ohmios y sus conexiones con la tarjeta Arduino, para cada una. Estableciendo la polaridad de las resistencia con el pin 13y el pin A0, el contacto GND al bus negativo de la protoboard, la tierra. La circuitería luce de esta forma:Problemas enfrentados:
Siempre la transferencia de un ejemplo a un nuevo proyecto conlleva a enfrentar problemas de transferencia. El ejemplo que observé es encendiendo un led cuando se cubre la fotoresistencia, mientras que el proyecto es que cuando se cubra la fotoresistencia se active el piezo. Esta situación la resolví invirtiendo las instrucciones que tenía programadas.Además cuando la fotoresistencia recibe suficiente luz, debe de no emitir sonido el piezo, sin embargo sonaba como un chasquido, le preguntamos a Efraim por algún comando para silenciar el piezo y nos presentó la sentencia noTone, la cual resolvió el problema.
Otro problema es la cantidad de luz que recibo en mi escritorio de trabajo, lo cual hace que varíe la condición que se establece en la estructura de control if. Además tuve problemas con los operadores > y <, ya que en este reto cuando la cantidad de luz recibida por la fotoresistencia es menor que 50, es cuando debe activarse el piezo y emitir sonido. Utilizando la instrucción
Serial.println ( digitalRead (ldrPin) );
esto me permitió leer la cantidad de luz que la fotoresistencia estaba recibiendo y así establecer un número para la estructura de control if, quedando de esta manera.
if (ldrStatus < 50)












0 comentarios:
Publicar un comentario