Professional Documents
Culture Documents
Pasó 3
Solucionar los circuitos y avances del proyecto
PRESENTADO POR:
CARLOS RABIN CUBIDES LOPEZ COD: 79792670
JAVIER ANDRES DONCEL ZAMBRANO COD: 80030874
DIEGO JAVIER COHECHA LEON COD: 80228006
GRUPO: 309696_29
PRESENTADO A:
Ing. NESTOR JAVIER RODRIGUEZ
Programa 1:
- Metodología
- Inicio de fase del Algoritmo
- Esquema General
- Análisis de resultados
- Recursos a utilizar
Metodología
Para salir del estado de pre-alarma se debe introducir la clave correcta por teclado
en los 10 segundos siguientes a la detección de alarma.
Para salir del estado de alarma no debe haber ninguna de las dos condiciones de
alarma y se debe pulsar el botón.
En estado normal led apagado y zumbador apagado
Análisis de resultados
Recursos a utilizar
void sonido1() {
Sound_play(1000, 500);
}
void sonido2() {
Sound_play(1059, 500);
}
void main () {
TRISD=0;
PORTD=0;
while (1) {
valor=ADC_Read(2);
valor=valor * 5000 / 1023;
texto=valor / 100;
Lcd_chr(2,1,48+texto);
texto2=(valor / 10) % 10;
Lcd_chr_cp(48+texto2);
if ( texto < 2 ){
LEDV=1;
LEDA=0;
LEDR=0;
VENTILADOR=0;
Lcd_out(2,8,"MOTOR OFF");
sonido1();
delay_ms(2000);
else {
if ( texto < 3 ) {
LEDV=0;
LEDA=1;
LEDR=0;
VENTILADOR=0;
Lcd_out(2,8,"MOTOR OFF");
}
else {
if ( texto >= 3 ) {
LEDV=0;
LEDA=0;
LEDR=1;
VENTILADOR=1;
Lcd_out(2,8,"MOTOR ON ");
Sonido3();
Programa 2:
#include <16F877A.h>
#use delay(crystal=4000000)
#include <lcd.c>
void main(){
while(TRUE)
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Micropr-Microcon");
lcd_gotoxy(1,0);
printf(lcd_putc,"Grupo_25");
delay_ms(2000);
if(input(pin_D0))
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc," FABIAN CELIS ");
lcd_gotoxy(1,0);
printf(lcd_putc,"C.C. 1.098.619.117");
delay_ms(2000);
}
if(input(pin_D1))
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc," MAURICIO CARDONA ");
lcd_gotoxy(1,0);
printf(lcd_putc,"CC 18.533.116");
delay_ms(2000);
}
}
}
-Con la propuesta escogida de trabajo final debe realizar:
- Metodología
- Inicio de fase del Algoritmo
- Esquema General
- Análisis de resultados
- Recursos a utilizar
Metodología:
Conocimiento previo:
Contenidos del curso y material bibliográfico suministrado en el curso “e-BIBLIOTECA.
Emplear los conocimientos necesarios para diseñar y desarrollar algoritmos, diagramas de
flujo y programas en lenguaje ensamblador, simulación del sistema microcontrolado
“proteus”, programación de la memoria del microcontrolador “Arduino” e implementación
del circuito electrónico
Recursos a utilizar
Actividades a desarrollar
Programa 1:
Microcontrolador Pic16f877a
1 Display 16 X 2
1 Dth11 (sensor de temperatura y humedad)
3 leds (rojo , amarillo, verde)
2 Motores 12 vdc (ventilador)
3 resistencias de 220 ohmios
3 resistencias de 1 k ohmios
5 pulsadores
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
Y con respecto al número de documento designe los siguientes números
de documento de identidad respectivamente:
1033685765
1033685766
1033685767
1033685768
1033685769
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
Inicio de fase del Algoritmo:
Esquema General:
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
Una gran ventaja de los PIC es que permite controlar, programar y sincronizar
tareas electrónicas a través del tiempo simplemente realizando una correcta
programación.