Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MICROPROCESADORES Y MICROCONTROLADORES
PASO 3
SOLUCIONAR LOS CIRCUITOS Y AVANCES DEL PROYECTO
PRESENTADO POR:
GRUPO: 309696_29
PRESENTADO A:
Ing. NESTOR JAVIER RODRIGUEZ
BOGOTA - COLOMBIA
ABRIL 2018
INTRODUCCION
void start_signal(){
Data_Pin_Direction = 0; // Configure connection pin as output
Data_Pin = 0; // Connection pin output low
delay_ms(25);
Data_Pin = 1; // Connection pin output high
delay_us(30);
Data_Pin_Direction = 1; // Configure connection pin as input
}
short check_response(){
delay_us(40);
if(!Data_Pin){ // Read and test if connection pin is low
delay_us(80);
if(Data_Pin){ // Read and test if connection pin is high
delay_us(50);
return 1;}
}
}
unsigned int8 Read_Data(){
unsigned int8 i, k, _data = 0; // k is used to count 1 bit reading duration
if(Time_out)
break;
for(i = 0; i < 8; i++){
k = 0;
while(!Data_Pin){ // Wait until pin goes high
k++;
if (k > 100) {Time_out = 1; break;}
delay_us(1);}
delay_us(30);
if(!Data_Pin)
bit_clear(_data, (7 - i)); // Clear bit (7 - i)
else{
bit_set(_data, (7 - i)); // Set bit (7 - i)
while(Data_Pin){ // Wait until pin goes low
k++;
if (k > 100) {Time_out = 1; break;}
delay_us(1);}
}
}
return _data;
}
//Cadena para el manejo del char donde se enviara los datos para el i2c
void main(){
lcd_init(); // Initialize LCD module
CGRAM_x(5);
lcd_putc('\f'); // LCD clear
for(i=0;i<=7 ;i++) lcd_send_byte(1,Letra1[i]);
output_high(pin_b3); //Sentido motor
output_low(pin_b4); //Sentido motor
output_low(pin_b7); //Apaga Motor RH
output_low(pin_b5); //Apaga Motor
while(TRUE){
delay_ms(1000);
Time_out = 0;
Start_signal();
if(check_response()){ // Si hay respuesta del sensor
RH_byte1 = Read_Data(); // lee Humedad Relativa del byte1
RH_byte2 = Read_Data(); // lee Humedad Relativa del byte2
T_byte1 = Read_Data(); // lee Temperatura del byte1
T_byte2 = Read_Data(); // lee Temperatura del byte2
CheckSum = Read_Data();
Temp=((T_byte2*10)+T_byte1);
RH=((RH_byte2*10)+RH_byte1);
lcd_putc('\f');
lcd_gotoxy(1, 1);
printf(LCD_PUTC,"Temp: ");
printf(LCD_PUTC,"%d", Temp);
lcd_gotoxy(1, 2);
printf(LCD_PUTC,"RH: ");
printf(LCD_PUTC,"%d", RH);
delay_us(1000);
delay_us(1000);
}
if(Temp<=15){
output_high(pin_b2);
output_low(pin_b1);
output_low(pin_b0);
}else if(Temp >=20 && Temp <=28){
output_low(pin_b2);
output_high(pin_b1);
output_low(pin_b0);
}
if(Temp >=30){
output_low(pin_b2);
output_low(pin_b1);
output_high(pin_b0);
output_high(pin_b5); //Encender motor
output_high(pin_b6); //Encender Alarma
lcd_putc('\f');
lcd_gotoxy(1, 1);
printf(LCD_PUTC,"Temp: ");
printf(LCD_PUTC,"%d", Temp);
lcd_gotoxy(1,2);
printf(LCD_PUTC,"MOTOR ON ");
delay_us(1000);
delay_ms(1000);
}else if(Temp <=20){
output_low(pin_b5); //Apaga Motor
output_low(pin_b6); //Apaga Alarma - buzzer
lcd_putc('\f');
lcd_gotoxy(1, 1);
printf(LCD_PUTC,"Temp: ");
printf(LCD_PUTC,"%d", Temp);
lcd_gotoxy(1,2);
printf(LCD_PUTC,"MOTOR OFF ");
delay_us(1000);
delay_us(1000);
}
if(RH>=60){
output_high(pin_b7); // Apaga Motor RH
lcd_putc('\f');
lcd_gotoxy(1, 1);
printf(LCD_PUTC,"RH: ");
printf(LCD_PUTC,"%d", RH);
lcd_gotoxy(1,2);
printf(LCD_PUTC,"MOTOR ON ");
delay_us(1000);
delay_ms(1000);
}
if(RH<=50){
output_low(pin_b7); // Apaga Motor RH
lcd_putc('\f');
lcd_gotoxy(1, 1);
printf(LCD_PUTC,"RH: ");
printf(LCD_PUTC,"%d", RH);
lcd_gotoxy(1,2);
printf(LCD_PUTC,"MOTOR OFF ");
delay_us(1000);
delay_us(1000);
}
}
}
Como para esta práctica utilice un I2C, se requiere incluir la librería I2C en la
misma carpeta de realización del ejercicio para que funcione correctamente, es
decir en la carpeta del proyecto.
Montaje de la Práctica en Proteus
Programa 2:
Se diseñara un sistema de cerradura electrónica el cual deberá en un
display 16X2 desplegar en la primera línea el nombre del curso y
numero de grupo, habrá un teclado matricial de 4 x4, y al digitar el
número de cedula de cada estudiante debe aparecer en el display y al
ser el correcto se debe encender un led para cada uno de los
estudiantes, serán 5 leds (verde, amarillo, rojo, azul y blanco)
En primer lugar para este ejercicio los integrantes del grupo somos:
Diego
Carlos
Nestor
Roosber
Javier
void main(){
lcd_init();
CGRAM_x(5);
for(c=0;c<=7 ;c++) lcd_send_byte(1,Letra1[c]);
kbd_init();
port_b_pullups(TRUE); // resistencias o internas del pic
for(;;){
lcd_putc("\f");
lcd_putc("MICROCONTROLADOR "); // Nombre del programa
lcd_putc("\n GRUPO 29 "); // numero del grupo
delay_ms(1000);
delay_ms(1000);
lcd_putc("\fINGRESE SU CLAVE ");
output_low(PIN_D0);
output_low(PIN_D1);
i=0;
while(i<10){
k=kbd_getc(); // leer la tecla presionada
if(k!=0){
dato[i]=k;
i++;
lcd_gotoxy(i,2); // posición i de la segunda línea
lcd_putc(k);
}
}
if( u==0 && dato[0]==clave1[0] && dato[1]==clave1[1] && dato[2]==clave1[2] && dato[3]==clave1[3]
&& dato[4]==clave1[4] && dato[5]==clave1[5] && dato[6]==clave1[6] && dato[7]==clave1[7] &&
dato[8]==clave1[8] && dato[9]==clave1[9])
{
lcd_putc("\fClave Correcta! ");
lcd_putc("\nUsuario Diego ");
delay_ms(2000);
output_high(pin_c0);
u=1;
}
if( u==0 &&dato[0]==clave2[0] && dato[1]==clave2[1] && dato[2]==clave2[2] && dato[3]==clave2[3]
&& dato[4]==clave2[4] && dato[5]==clave2[5] && dato[6]==clave2[6] && dato[7]==clave2[7] &&
dato[8]==clave2[8] && dato[9]==clave2[9])
{
lcd_putc("\fClave Correcta! ");
lcd_putc("\nUsuario Carlos ");
delay_ms(2000);
output_high(pin_c1);
u=1;
}
if( u==0 && dato[0]==clave3[0] && dato[1]==clave3[1] && dato[2]==clave3[2] && dato[3]==clave3[3]
&& dato[4]==clave3[4] && dato[5]==clave3[5] && dato[6]==clave3[6] && dato[7]==clave3[7] &&
dato[8]==clave3[8] && dato[9]==clave3[9])
{
lcd_putc("\fClave Correcta! ");
lcd_putc("\nUsuario Nestor ");
delay_ms(2000);
output_high(pin_c2);
u=1;
}
if(u==0 && dato[0]==clave4[0] && dato[1]==clave4[1] && dato[2]==clave4[2] && dato[3]==clave4[3]
&& dato[4]==clave4[4] && dato[5]==clave4[5] && dato[6]==clave4[6] && dato[7]==clave4[7] &&
dato[8]==clave4[8] && dato[9]==clave4[9])
{
lcd_putc("\fClave Correcta! ");
lcd_putc("\nUsuario Roosber ");
delay_ms(2000);
output_high(pin_c3);
u=1;
}
if( u==0 &&dato[0]==clave5[0] && dato[1]==clave5[1] && dato[2]==clave5[2] && dato[3]==clave5[3]
&& dato[4]==clave5[4] && dato[5]==clave5[5] && dato[6]==clave5[6] && dato[7]==clave5[7] &&
dato[8]==clave5[8] && dato[9]==clave5[9])
{
lcd_putc("\fClave Correcta! ");
lcd_putc("\nUsuario Javier ");
delay_ms(2000);
output_high(pin_c4);
u=1;
}
if(u==0){
lcd_putc("\fClave incorecta ");
lcd_putc("\n -_- ");
delay_ms(2000);
}else u=0;
}
}
SISTEMA DE SEGURIDAD:
Alarma con 6 puntos de sensibilidad con sensores de movimiento,
infrarrojos, temperatura, presión etc. con indicación de zona de
ingreso y por medio de un lcd 16x2, y 3 salidas que activen los leds
de color rojo, amarillo y verde como zona segura(verde),
alerta(amarilla) y alarma(rojo), zona segura no se activa ningún
sensor, alerta máximo 2 sensores activados y alarma 3 sensores
activados, más una salida a relevos para sirena.
Metodología:
Para este proyecto se utilizara Proteus para su simulación donde
implementaremos los componentes necesarios para dar solución a la problemática
planteada.
Insertaremos como nos lo pide la guía; 6 sensores los cuales los simularemos por
medio de Switches - pulsadores, la visualización será por medio de un LCD de
16x2, como salidas tendremos 3 leds lo cuales nos mostraran su visualización
mediante su encendido, teniendo en cuenta que el led rojo nos indica alarma; es
decir que hay presencia de peligro y se activaran 3 sensores, el led amarillo nos
indica alerta: es decir que muy posiblemente hay presencia de algún peligro y se
activaran 2 sensores y el led verde nos indica zona segura y por lo tanto no se
activara ningún sensor.
Como alarma utilizaremos un buzzer.
Y posteriormente procederemos a utilizar Arduino para la realización del código
Para este utilizaremos del pin 1 al 6 como entradas (serian los sensores) y del pin
7 al 9 como salidas (serian los leds de visualización)
En el código es importante identificar los pines asignados tanto para los sensores
como para las salidas y la configuración del display y la declaración de las
variables.
Y teniendo en cuenta lo anterior se utilizaría un If (si condicional) para el
reconocimiento de los 6 sensores según su estado, es decir; nos validara si están
en 0 (low) o en 1 (hight) para la detección del sistema de seguridad y así
dependiendo del estado se nos activaría los leds. Así mismo teniendo en cuenta
esta condición también se visualizara en el LCD el análisis de resultados
Análisis de Resultados:
El análisis de resultados lo tendremos básicamente de 3 maneras según el estado
de activación de los 6 sensores.
Tendremos la visualización en LCD del estado de los 6 sensores, es decir de las
entradas y nos dirá si están activados o encendidos o están desactivados o
apagados y simultáneamente podemos visualizar el estado de las salidas, que
para la práctica son los led’s, y también tenemos un tercer dispositivo como salida
que es un buzzer el cual únicamente se activara cuando se activen 3 o más
sensores lo que indicara que la alarma de activo, a este buzzer le podremos
controlar el tono mediante un potenciómetro de 1KΏ
Recursos a utilizar:
Tarjeta Arduino MEGA (1)
LCD 16x2 (1)
Pulsadores N/A (6)
Resistencias (varios valores)
Potenciómetro 1 kΏ(1)
Led Verde (1)
Led Amarillo (1)
Led Rojo (1)
Buzzer (1)
CONCLUSIONES
REFERENCIAS BIBLIOGRAFICAS
Di Jasio, Lucio (2007) Programming 16-bit PIC Microcontrollers in C ,
Learning to Fly the PIC 24. Recuperado
de http://bibliotecavirtual.unad.edu.co:2139/eds/detail/detail?vid=3&si
d=bb49356b-11e7-4189-97ff
c78729359ced%40sessionmgr198&hid=127&bdata=Jmxhbmc9ZXMmc2l
0ZT1lZHMtbGl2ZQ%3d%3d#AN=193636&db=nlebk