Computo integrado. Proyecto arduino.
Que tal gente, esta semana esta relacionada con la clase de computo integrado,
aqui se hablara sobre el proyecto arduino.
Que es el proyecto?
Bien, el proyecto consiste en un conjunto de microsistemas que se pudiesen
implementar en una casa inteligente, la idea surge desde el semestre pasado, ya
que se venia trabajando con eso, a traves de un simulador y una aplicacion
android.
En este caso el proyecto muestra en una maqueta, como se podrian implementar
las siguientes funcionalidades:
una cerradura electronica.
una alarma a partir de un sensor de temperatura.
una alarma para ventanas.
cortinas electronicas.
sensores de luminosidad externa.
Cabe mencionar que como es una maqueta, lo mencionado arriba se elaboro con
los componentes mas simples, para hacer una implementacion real, se puede partir
de estos conceptos pero el material de elaboracin variara, ya que se tratara
entonces de una implementacion real.
A continuacin se muestra una lista de los materiales utilizados.
arduino uno.
pic16f628a
2 motores dc
8 transistores BC548B
8 diodos 1n4007
1 reed switch (relevador magnetico)
1 sensor de temperatura MT05
1 fotoresistencia
resistencias de 220, 1k, 2k y 4.7k.
push buttons y leds.
protoboard.
cable para conectar.
Esquema del proyecto.
Puentes H.
Los puentes H son un circuito para poder hacer que un motor de corriente directa
funcione en ambas direcciones, este se elaboro con los transistores, los diodos y
resistencias de 1k. Existe este circuito en microcontrolador, el L293B, pero al ver
que se pueden construir facilmente se hicieron a mano.
Se elaboraron dos puentes, uno por motor.
Esquema del diagrama:
Esquema desde Fritzing:
Se eliminaron los diodos porque no pasaba nada si no los pona.
Conexion del LM35.
El sensor LM35 te permite capturar la temperatura promedio que se presenta
alrededor del sensor, esta se calcula en base al voltaje de referencia con el que se
trabaja en el circuito. mas adelante en el codigo se explica.
la conexin del sensor es como se muestra a continuacin:
Conexin Fotocelda.
La fotocelda es una resistencia que trabaja con la incidencia de la luz
y enva constantemente un valor anlogo con la cantidad de luz que recibe en ese
momento, ya con ese parmetro, basta con mapear ese valor para generar una una
salida pwm para que los leds compensen la falta o exceso de
luz, encendindose o apagndose.
La conexin de la fotocelda.
Reed Switch.
El Reed Switch es un relevador magnetico, este se activa con la presencia de un
campo magnetico, abriendo o cerrando un circuito. esto fue lo que se implemento
para la alarma de la ventana.
imagen de conexion.
Imgenes de todo armado:
La primera versin.
Final.
Codigo arduino.
El codigo del programa es bastante sencillo, no es mas que un loop que verifica
todas las entradas y en base a eso hace salidas digitales o analogas. abajo todo el
codigo comenzarizado.
view plainprint?
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
atura
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
//variables de los puertos de arduino.
int abierto = 12;
int cerrado = 13;
int llave = 4;
int led1 = 7;
int led2 = 8;
//funcion setup, para la definicion del tipo de puerto.
void setup(){
[Link](9600); //inicializacion de la comunicacion serial
pinMode(llave,INPUT); //declaro llave como entrada
pinMode(abierto,OUTPUT); //declaro abierto como salida
pinMode(cerrado, OUTPUT); //declaro cerrado como salida
pinMode(led1,OUTPUT); //declaro led1 como salida
pinMode(led2,OUTPUT); //declaro led2 como salida
}
void loop(){ //Ciclo principal del sistema
//lee el valor recibido por el puerto analogo 0 y con la formula
// calcula el valor de temperatura con una referencia de 5V.
int temperatura = (5.0 * analogRead(0)*100.0)/1023.0;
[Link](temperatura); // escribe en el puerto serial la temper
if(temperatura >=26){ // si la temperatura >30, enciende alarma
digitalWrite(led1,HIGH); //prende led calor
for(int a=0; a<2; a++){ //ciclo para generar sonidos
//genera tono, salida puerto9, pwm 400 y frecuencia de 250.
tone(9,400,250);
delay(100); // espera 100 ms
tone(9,600,250); // otro tono diferente.
delay(100); // espera 100 ms
}
}if(temperatura <=20){
//si la temperatura es menor que 21 grados.
33.
34.
35.
digitalWrite(led2,HIGH); //enciende led frio
for(int a=0; a<2; a++){
//genera tono, salida puerto9, pwm 400 y frecuencia de 250.
36.
tone(9,400,250);
37.
delay(100);
//espera 100 ms
38.
tone(9,600,250);
39.
delay(100);
40.
}
41.
}
42.
digitalWrite(led1,LOW); //apaga el led1
43.
44.
//la entrada 2 es la que escucha al Reed Switch.
45.
//se activa cuando se abre la ventana
46.
if(digitalRead(2)==HIGH){ //si la entrada 2 esta activada?
47.
for(int a=0; a<2; a++){
48.
tone(9,200,250); //genera sonido
49.
digitalWrite(led1,LOW); //leds para simular sir
ena.
50.
digitalWrite(led2,HIGH);
51.
delay(200);
//espera
52.
tone(9,800,250); //otro tono diferente
53.
digitalWrite(led2,LOW); //cambio de leds
54.
digitalWrite(led1,HIGH);
55.
delay(200);
//espera
56.
}
57.
58.
}
59.
//llave es el puerto que escucha al pic, se eleva cuando la pone el
60.
//pasword correcto
61.
if(digitalRead(llave)==HIGH){
62.
tone(9,200,250); //sonido
63.
digitalWrite(cerrado,LOW); //baja la salida de cerrado del
puente H
64.
digitalWrite(abierto,HIGH);//sube la salida de abierto del
puente H
65.
//cuando ya no es uno. la salida de alta del pic solo dura 3 segundos
.
66.
}else{
67.
digitalWrite(cerrado,HIGH);//sube la salida de cerrado del
puente H
68.
digitalWrite(abierto,LOW); //baja la salida de abierto del
puente H
69.
70.
}
71.
72.
int valorldr = analogRead(2); //lee el valor del sensor ldr
73.
int vled = 1023 valorldr; // restamos al total, lo recibido por la fotocelda.
74.
int salida = map(vled,0,1023,0,255); //mapea los valores para obtener
una salida
75.
analogWrite(led3,salida);
76.
}