Академический Документы
Профессиональный Документы
Культура Документы
NDICE
OBJETIVOS.................................................................................................2
MARCO TERICO.......................................................................................3
PROYECTO FINAL
MATERIAL................................................................................................12
ESPECIFICACIONES..................................................................................12
IMPLEMENTACIN...................................................................................13
DESARROLLO..........................................................................................14
CONCLUSIONES.......................................................................................39
ANEXOS...................................................................................................41
DATASHEET PIC16F877.................................................................................. 41
DATASHEET LM358........................................................................................ 42
DATASHEET LM35.......................................................................................... 43
BIBLIOGRAFA.........................................................................................44
OBJETIVOS
Que el alumno:
MARCO TERICO
LENGUAJE C ORIENTADO A MICROCONTROLADORES
El lenguaje C es de tipo profesional, muy completo y potente, pero su
manejo exige una buena formacin en Informtica. Tambin es muy
2
PROYECTO FINAL
Programacin estructurada
Economa de las expresiones
Abundancia en operadores y tipos de datos.
Codificacin en alto y bajo nivel simultneamente.
Reemplaza ventajosamente la programacin en ensamblador
(assembler).
Utilizacin natural de las funciones primitivas del sistema.
No est orientado a ningn rea en especial.
Produccin de cdigo objeto altamente optimizado.
Facilidad de aprendizaje (;))
PROYECTO FINAL
PIC16F877
El PIC16F877 es un microcontrolador con memoria de programa tipo
FLASH, lo que representa gran facilidad en el desarrollo de prototipos y
en su aprendizaje ya que no se requiere borrarlo con luz ultravioleta
como las versiones EPROM, sino que permite reprogramarlo nuevamente
sin ser borrado con anterioridad.
El PIC16F877 es un microcontrolador de Microchip Technology fabricado
en tec- nologa CMOS, su consumo de potencia es muy bajo y adems es
completamente esttico, esto quiere decir que el reloj puede detenerse
y los datos de la memoria no se pierden.
4
PROYECTO FINAL
PROYECTO FINAL
MPLAB
PROYECTO FINAL
ISIS DE PROTEUS
Es una compilacin de programas de diseo y simulacin electrnica,
desarrollado por Labcenter Electronics que consta
de algunos
programas principales:
Ares
Isis
Mdulos VSM
mdulos Electra
ISIS (Intelligent Schematic Input System) permite disear el plano
elctrico del circuito que se desea realizar con componentes muy
variados, desde simples resistencias, hasta alguno que otro
microprocesador
o
microcontrolador,
incluyendo fuentes
de
alimentacin, generadores de seales y muchos otros componentes con
prestaciones diferentes.
Los diseos realizados en Isis pueden ser simulados en tiempo real,
mediante el mdulo VSM, asociado directamente con ISIS.
PROYECTO FINAL
PROYECTO FINAL
CRISTAL CUARZO
Tipo de resonador
Cuarzo
Frecuencia
20MHz
Tolerancia de resonadores
30ppm
Alcance de capacidad
1630 pF
Potencia
1mW
Montaje
THT
Estabilidad en tiempo
5ppm/ao
4.88mm
Rster de terminales
PROYECTO FINAL
Aplicacin:
Radio frecuencia
Audio frecuencia
Generacin de pulsos
Sensores
TRIMPOT
10
PROYECTO FINAL
Fig. 8: Trimpot
CAPACITOR CERAMICO
Capacitores de disco de cermica de baja tensin (de color naranja) y de
polister metalizado (de color verde). Los capacitores de cermica se
fabrican con muy pequeas capacidades y su tamao tambin es
pequeo. Se emplean, fundamentalmente, en circuitos de alta
frecuencia y junto con los capacitores electrolticos, son los ms
ampliamente utilizados en electrnica.
MATERIAL
Equipo de cmputo
PIC16F877A
11
PROYECTO FINAL
Diodos led
Protoboard
Alambre calibre 22
Fuente de voltaje
Capacitores
LCD
LM35/LM358
Pushbuttons
ESPECIFICACIONES
Se necesita crear un invernadero automatizado que cumpla con las
siguientes funciones y caractersticas:
Al encender todo el sistema, primeramente se configurara la hora actual
del dispositivo, luego se pedir al usuario la hora en la cual el sistema
tomara la temperatura del invernadero y despus se pedir la hora en la
que se regara el agua. Para el regado de agua se deben de tener en
cuenta las siguientes especificaciones:
1. Si la temperatura censada fue de 5 a10 grados se regara durante
10 minutos.
2. Si la temperatura censada fue de 11 a 15 grados se regara
durante15 minutos.
3. Si la temperatura censada fue de 21 en adelante se regara 20
minutos.
Adems se contara con el control de una ventana y de un ventilador, los
cuales actuaran para mantener baja o alta la temperatura del
invernadero, considerando lo siguiente:
12
PROYECTO FINAL
PROYECTO FINAL
DESARROLLO
1. Genere un nuevo proyecto en MPLab para desarollar el proyecto
explicado con anterioridad, posteriormente agregue un archivo .c
para comenzar a programar siguiendo los pasos mostrados.
a. Ejecute MPLab X en el equipo de cmputo
b. Seleccione el PIC que va a ser utilizado
c. Asgnele nombre a dicho proyecto y elija la ruta en donde
ser guardo.
d. Agregue un archivo .c y asgnele un nombre
e. Comience a programar sobre el archivo .asm antes creado
Utilizando el entorno de desarrollo MPLab X se gener un
proyecto, seguido, se selecciono el PIC16F877A, se le asigno el
nombre al proyecto llamado Invernadero, se creo un nuevo
archivo .c con el mismo nombre en cada proyecto, siguiendo
estos pasos el entorno de desarrollo qued listo para comenzar
a programar.
Cabe mencionar que para la programacin de este proyecto fu
necesario utilizar diversas libreras para ahorrar cdigo en el
programa principal, las libreras implementadas controlaron
dispositivos tales como:
LCD
Convertidor digital
Libreras para el PIC
Fuses implementados en el PIC
Retardos
14
PROYECTO FINAL
proyecto
propuesto
se
realizaron
los
15
PROYECTO FINAL
Encender el dispositivo
Definir la hora actual auxilindose de un reloj
Definir la hora en la que se tomar la temperatura para
comenzar a regar
Observar cmo funciona el dispositivo
Reiniciar el dispositivo
Cdigo generado:
#define
#define
#define
#define
#define
#define
#include
#include
#include
#include
<xc.h>
// Librerias
<stdio.h>
<stdlib.h>
<math.h>
16
PROYECTO FINAL
#include "lcd.h"
// CONFIG
#pragma config FOSC = HS
// Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF
// Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF
// Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON
// Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF
// Low-Voltage (Single-Supply) In-Circuit Serial
Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF
// Data EEPROM Memory Code Protection bit (Data
EEPROM code protection off)
#pragma config WRT = OFF
// Flash Program Memory Write Enable bits (Write
protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF
#define FOSC 20000000L
/* target device system clock freqency */
#define FCYC (FOSC/4L)
/* target device instruction clock freqency */
#define _XTAL_FREQ FOSC
/* required for __delay_ms, __delay_us macros */
int
int
int
int
int
int
usegundos3=0;
dsegundos3=0;
uminutos3=0;
dminutos3=0;
uhoras3=0;
dhoras3=0;
//Variable
//Variable
//Variable
//Variable
//Variable
//Variable
de
de
de
de
de
de
int
int
int
int
int
int
usegundos4=0;
dsegundos4=0;
uminutos4=0;
dminutos4=0;
uhoras4=0;
dhoras4=0;
//Variable
//Variable
//Variable
//Variable
//Variable
//Variable
de
de
de
de
de
de
17
PROYECTO FINAL
{
dsegundos4++; //Aumento decenas de los segundos
}
else
{
dsegundos4=0; //decenas segundos igual a 0
if(uminutos4<9) //Si unidades minutos menor a 9
{
uminutos4++; //Aumento unidades de los minutos
}
else
{
uminutos4=0; //Unidades minutos igual a 0
if(dminutos4<5) //Si decenas minutos menor a 5
{
dminutos4++; //Aumento decenas de minutos
}
else
{
dminutos4=0; //decenas minutos igual a 0
if(uhoras4<9 && dhoras4<2 || uhoras4<3 && dhoras4==2 )
////Si unidades horas menor mayor a 9 y decenas horas menor a 2
{
uhoras4++; //Aumento unidades de horas
}
else
{
uhoras4=0; //unidades horas igual a 0
if(dhoras4<2)
{
dhoras4++; //Aumento decenas horas
}
else
{
dhoras4=0; //Horas igual a 0
}
}
}
}
}
}
}
}
int main(void) // Funcin principal
{
int usegundos=0; //Variable unidades segundos igual a 0
int dsegundos=0; //Variable decenas segundos igual a 0
int uminutos=0; //Variable unidades minutos igual a 0
int dminutos=0; //Variable decenas minutos igual a 0
int uhoras=0; // Variable unidades horas igual a 0
int dhoras=0; //Variable decenas horas igual a 0
18
PROYECTO FINAL
int
int
int
int
int
int
int i=0;
//Variables utilizadas con valor entero
int time=0; //Variables utilizadas con valor entero
char s[20]; //Variable cadena s
unsigned short ADCResult;
int resultado=0; //Variable resultado igual a 0
int conversion=0; //Variable conversion igual a 0
int conversion2=0; //Variable conversion2 igual a 0
ADCON1bits.PCFG = 0;
ADCON0bits.ADON = 1;
ADCON0bits.CHS = 0;
//===================================================
====================================================
=================
Lcd_Set_Cursor(1,1); //Linea 1,1
Lcd_Write_String("INGRESE LA HORA"); //Mostrar INGRESE LA HORA en la LCD
Lcd_Set_Cursor(2,1); //Linea 2,1
Lcd_Write_String("ACTUAL..."); //Mostrar ACTUAL en la LCD
for(i=0;i<200;i++)
{
__delay_ms(10); //delay de 10 ms
}
Lcd_Clear(); // limpiar LCD
Lcd_Set_Cursor(1,1); //Linea 1,1
Lcd_Write_String("00:00:00"); // Mostrar 00:00:00 en la LCD
19
PROYECTO FINAL
//===================================================
================Parte del cdigo para ingresar la hora
while(PORTCbits.RC0==1) //Inicia While para el Puerto C = a 1
{
if(PORTCbits.RC1==0) //if = 0
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC1==0); //Inicia While para el Puerto C = a 0
__delay_ms(50); // delay 50 ms
if(dhoras<2)
{
dhoras++; // incremente decenas hora
Lcd_Set_Cursor(1,1);
sprintf(s, "%d", dhoras);
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0) // if igual a cero
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); // delay 50 ms
if(dhoras>0) // if decenas horas mayor a 0
{
dhoras--; // decrementa decenas de horas
Lcd_Set_Cursor(1,1); // lnea 1,1 del LCD
sprintf(s, "%d", dhoras); // muestra decenas de horas
Lcd_Write_String(s);
}
}
}
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); // delay 50 ms
if(uhoras<9 && dhoras<2 || uhoras<3 && dhoras==2) //if para horas
{
uhoras++; // incrementa unidades de las horas
Lcd_Set_Cursor(1,2);
sprintf(s, "%d", uhoras); // muestra unidades de las horas
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); // delay 50 ms
20
PROYECTO FINAL
while(PORTCbits.RC2==0);
__delay_ms(50); // delay 50 ms
if(uhoras>0) // si horas mayor a 0
{
uhoras--; // decrementa unidades hora
Lcd_Set_Cursor(1,2); lnea 1,2
sprintf(s, "%d", uhoras); mostrar unidades hora
Lcd_Write_String(s);
}
}
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); // delay 50 ms
if(dminutos<5)
{
dminutos++; // incrementa decenas minutos
Lcd_Set_Cursor(1,4);
sprintf(s, "%d", dminutos); // muestra decenas minutes
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); // delay 50 ms
if(dminutos>0) // si decenas minutos mayor a 0
{
dminutos--; decrementa decenas minutos
Lcd_Set_Cursor(1,4);
sprintf(s, "%d", dminutos); // muestra minutes
Lcd_Write_String(s);
}
}
}
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
21
PROYECTO FINAL
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); // delay 50 ms
if(uminutos<9)
{
uminutos++; // incrementa unidades minutos
Lcd_Set_Cursor(1,5);
sprintf(s, "%d", uminutos); // muestra unidades minutos
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); // delay 50 ms
if(uminutos>0)
{
uminutos--; //decrement unidades minutos
Lcd_Set_Cursor(1,5);
sprintf(s, "%d", uminutos); //muestra unidades de minutos
Lcd_Write_String(s);
}
}
}
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); // delay 50 ms
if(dsegundos<5) // si decenas segunos menor a 5
{
dsegundos++; // incremente decenas segundos
Lcd_Set_Cursor(1,7);
sprintf(s, "%d", dsegundos); // muestra decenas segundos
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); // delay 50 ms
if(dsegundos>0) // decenas segundos mayor a 0
{
22
PROYECTO FINAL
}
}
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); // delay 50 ms
if(usegundos<9)
{
usegundos++;
Lcd_Set_Cursor(1,8);
sprintf(s, "%d", usegundos);
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); // delay 50 ms
if(usegundos>0) // si unidades segundos mayor a 0
{
usegundos--; //decrementa unidades segundos
Lcd_Set_Cursor(1,8);
sprintf(s, "%d", usegundos); //muestra unidades segundos
Lcd_Write_String(s);
}
}
}
__delay_ms(50); // delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); // delay 50 ms
//===================================================
====================================================
=================
Lcd_Set_Cursor(1,1); // Linea 1,1
Lcd_Write_String("INGRESE LA HORA"); //Mostrar INGRESE LA HORA
23
PROYECTO FINAL
24
PROYECTO FINAL
25
PROYECTO FINAL
Lcd_Write_String(s);
}
}
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(uminutos2<9) //si unidades minutes menor a 9
{
uminutos2++; //unidades minutes aumenta
Lcd_Set_Cursor(1,5);
sprintf(s, "%d", uminutos2);// muestra unidades minutes
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); //delay 50 ms
if(uminutos2>0) //si unidades minutes mayor a 0
{
uminutos2--; //decrement unidades minutes
Lcd_Set_Cursor(1,5);
sprintf(s, "%d", uminutos2); //Muestra unidades minutes
Lcd_Write_String(s);
}
}
}
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(dsegundos2<5) //si decenas segundos menor a 5
{
dsegundos2++;// incrementa decenas segundos
26
PROYECTO FINAL
Lcd_Set_Cursor(1,7);
sprintf(s, "%d", dsegundos2); //muestra decenas segundos
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); //delay 50 ms
if(dsegundos2>0) //si decenas segundos mayor a 0
{
dsegundos2--; //decrementa decenas segundos
Lcd_Set_Cursor(1,7);
sprintf(s, "%d", dsegundos2);//muestra decenas segundos
Lcd_Write_String(s);
}
}
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(usegundos2<9) //si unidades segundos menor a 9
{
usegundos2++; //incrementa unidades segundos
Lcd_Set_Cursor(1,8);
sprintf(s, "%d", usegundos2); //muestra unidades segundos
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); //delay 50 ms
if(usegundos2>0) //si segundos mayor a 0
{
usegundos2--; decrementa unidades
Lcd_Set_Cursor(1,8);
sprintf(s, "%d", usegundos2); //muestra unidades segundos
Lcd_Write_String(s);
}
}
}
27
PROYECTO FINAL
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
//===================================================
====================================================
=====================
//==================================================
====================================================
==================
Lcd_Set_Cursor(1,1); //Linea 1,1
Lcd_Write_String("INGRESE LA HORA"); //Muestra INGRESE LA HORA
Lcd_Set_Cursor(2,1); //Linea 2,1
Lcd_Write_String("DE RIEGO..."); //Muestra DE RIEGO. . .
for(i=0;i<200;i++)//for para mostrar
{
__delay_ms(10); //delay 10 ms
}
Lcd_Clear();
Lcd_Set_Cursor(1,1); //linea 1,1
Lcd_Write_String("00:00:00"); //Muestra 00:00:00
//===================================================
====================================================
==
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(dhoras3<2) //Si decenas horas menor a 2
{
dhoras3++; //Incrementa decenas horas
Lcd_Set_Cursor(1,1); //Linea 1,1
sprintf(s, "%d", dhoras3); //Mostrar decenas horas
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); //delay 50 ms
if(dhoras3>0) //Si decenas horas mayor a 0
{
dhoras3--; //Decrementa decenas horas
Lcd_Set_Cursor(1,1); //Linea 1,1
sprintf(s, "%d", dhoras3); //Mostrar decenas horas
28
PROYECTO FINAL
Lcd_Write_String(s);
}
}
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(uhoras3<9 && dhoras<2 || uhoras3<3 && dhoras==2)//Condicion para
decenas horas y unidades
{
uhoras3++;//Incrementa decenas horas
Lcd_Set_Cursor(1,2);
sprintf(s, "%d", uhoras3); //Muestra decenas horas
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); //delay 50 ms
if(uhoras3>0) //Si horas mayor a 0
{
uhoras3--; //Decrementa unidades hora
Lcd_Set_Cursor(1,2);
sprintf(s, "%d", uhoras3); //Muestra unidades hora
Lcd_Write_String(s);
}
}
}
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(dminutos3<5) //Si decenas minutos menor a 5
{
29
PROYECTO FINAL
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); //delay 50 ms
if(dminutos3>0) //Si decenas minutos ayor a 0
{
dminutos3--; Decrementa decenas minutos
Lcd_Set_Cursor(1,4);
sprintf(s, "%d", dminutos3); //Muestra decenas minutos
Lcd_Write_String(s);
}
}
}
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(uminutos3<9) //Si unidades minutos menor a 9
{
uminutos3++; //Incrementa unidades minutos
Lcd_Set_Cursor(1,5);
sprintf(s, "%d", uminutos3); //Muestra unidades minutos
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); //delay 50 ms
if(uminutos3>0) //Si unidades minutos mayor a 0
{
uminutos3--; // Decrementa unidades minutos
Lcd_Set_Cursor(1,5);
sprintf(s, "%d", uminutos3); //Muestra unidades minutos
Lcd_Write_String(s);
}
}
}
30
PROYECTO FINAL
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(dsegundos3<5) //Si decenas segundos menor a 5
{
dsegundos3++; // Incrementa decenas segundos
Lcd_Set_Cursor(1,7);
sprintf(s, "%d", dsegundos3); //Muestra decenas segundos
Lcd_Write_String(s);
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC2==0);
__delay_ms(50); //delay 50 ms
if(dsegundos3>0) //Si decenas segundos mayor a 0
{
dsegundos3--; // Decrementa decenas segundos
Lcd_Set_Cursor(1,7);
sprintf(s, "%d", dsegundos3); //Muestra decenas segundos
Lcd_Write_String(s);
}
}
}
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==1)
{
if(PORTCbits.RC1==0)
{
__delay_ms(50);
//delay 50 ms
while(PORTCbits.RC1==0);
__delay_ms(50); //delay 50 ms
if(usegundos3<9) //Si unidades segundos menor a 9
{
usegundos3++; //Incrementa unidades segundos
Lcd_Set_Cursor(1,8);
sprintf(s, "%d", usegundos3); //Muestra unidades segundos
Lcd_Write_String(s);
31
PROYECTO FINAL
}
}
if(PORTCbits.RC2==0)
{
__delay_ms(50);
while(PORTCbits.RC2==0);
__delay_ms(50);
if(usegundos3>0)
{
usegundos3--;
Lcd_Set_Cursor(1,8);
sprintf(s, "%d", usegundos3);
Lcd_Write_String(s);
}
}
}
__delay_ms(50); //delay 50 ms
while(PORTCbits.RC0==0);
__delay_ms(50); //delay 50 ms
//===================================================
====================================================
=====================
while(1)
{
//================================================
====================================================
====================
ADCON0bits.GO = 1; //Starts ADC conversion
while (ADCON0bits.nDONE) continue; //wait till ADC conversion is over
ADCResult = (ADRESH<<8) + ADRESL ; //Merging the MSB and LSB
resultado=ADCResult;
conversion=(150.0/1024.0)*resultado; //Se realiza una conversion
Lcd_Set_Cursor(2,1);
Lcd_Write_String("Ta:"); //Muestra temperatura actual
sprintf(s, "%d", conversion);
Lcd_Write_String(s);
Lcd_Set_Cursor(2,7); //Linea 2,7
Lcd_Write_String("C");
//========================================Codigo para
las condiciones de riego
if(conversion>=0 && conversion<=5) //Condicion para conversion mayor o igual a
0 y menor igual a 5
{
PORTBbits.RB2=0;
PORTBbits.RB3=1; //Se active este puerto
PORTBbits.RB4=0;
}
if(conversion>=6 && conversion<=24) // Condicion para conversion mayor o igual
a 6 y menor igual a 24
32
PROYECTO FINAL
PORTBbits.RB2=0;
PORTBbits.RB3=1; //Se active este puerto
PORTBbits.RB4=0;
}
if(conversion>=25 && conversion<=30) //Si conversion mayor o = a 25 y menor
= a 30
{
PORTBbits.RB2=1; //Se active este puerto
PORTBbits.RB3=0;
PORTBbits.RB4=0;
}
if(conversion>30) //So conversion mayor a 30
{
PORTBbits.RB2=1; //Se active este puerto
PORTBbits.RB3=0;
PORTBbits.RB4=1; //Se active este puerto
}
else
{
PORTBbits.RB4=0;
}
//================================================
====================================================
=========================
if(dhoras==dhoras2 && uhoras==uhoras2 && dminutos==dminutos2 &&
uminutos==uminutos2 && dsegundos==dsegundos2 && usegundos==usegundos2)
{
PORTBbits.RB0=1;
ADCON0bits.GO = 1; //Starts ADC conversion
while (ADCON0bits.nDONE) continue; //wait till ADC conversion is over
ADCResult = (ADRESH<<8) + ADRESL ; //Merging the MSB and LSB
resultado=ADCResult; //ADC
conversion2=(150.0/1024.0)*resultado; //Conversion
Lcd_Set_Cursor(2,9);
Lcd_Write_String("Tr:"); //Muestra tiempo de riego
sprintf(s, "%d", conversion2);
Lcd_Write_String(s);
Lcd_Set_Cursor(2,15);
Lcd_Write_String("C");
}
if(dhoras==dhoras3 && uhoras==uhoras3 && dminutos==dminutos3 &&
uminutos==uminutos3 && dsegundos==dsegundos3 && usegundos==usegundos3)
{
PORTBbits.RB1=1;
//===============================================
====================================================
==============================
if(conversion2>=5 && conversion2<=10) //Si conversin mayor = a 5 y menor
igual a 10
{
33
PROYECTO FINAL
time=10;
riego(600);
{
time=15;
riego(900);
}
a 20
time=20;
riego(1200);
34
PROYECTO FINAL
Lcd_Set_Cursor(1,10);
sprintf(s, "%d", time);
Lcd_Write_String(s);
Lcd_Write_String("min");
//===================================================
====================================================
===================================
if(usegundos<9) //Si unidades segundos
{
for(i=0;i<100;i++) //for
{
__delay_ms(10); //delay 10 ms
}
usegundos++; //Incremento unidades segundos
}
else
{
for(i=0;i<100;i++)
{
__delay_ms(10); //Delay 10ms
}
usegundos=0; //Unidades segundos = a 0
Lcd_Set_Cursor(1,8);
Lcd_Write_Char('0');
if(dsegundos<5) //Si decenas segundos menor a 5
{
dsegundos++; //Incrementa decenas segundos
}
else
{
dsegundos=0; //decenas segundos = a 0
Lcd_Set_Cursor(1,7);
Lcd_Write_Char('0');
if(uminutos<9) //Si minutos menor a 9
{
uminutos++; //Incrementa unidades minutos
}
else
{ uminutos=0; //Unidades minutos = a 0
Lcd_Set_Cursor(1,5);
Lcd_Write_Char('0');
if(dminutos<5) // Si decenas minutos menor a 5
{
dminutos++; //Incrementa decenas minutos
}
else
{ dminutos=0; //Decenas minutos igual a 0
Lcd_Set_Cursor(1,4);
Lcd_Write_Char('0');
35
PROYECTO FINAL
Simulacin:
Se genero la simulacin es Isis de Proteus tal como se muestra
en la figura siguiente.
DISEO FINAL DE PROYECTO
36
PROYECTO FINAL
PROYECTO FINAL
38
PROYECTO FINAL
Cuadrado 1
INDICA
RIEGO
COLOR DE LED
Cuadrado 2
Amarillo
INDICA
INDICA
TEMPERATU VENTILADOR
RA TOMADA ENCENDIDO
Rojo
INDICA
VENTANA
CERRADA
Verde
INDICA
VENTANA
ABIERTA
CONCLUSIONES
Bautista Prez Magdiel
PROYECTO FINAL
los dispositivos con los que interactuamos en nuestra vida diaria, y que
pasan inadvertido hasta que ponemos un especial inters en saber cmo
logran que nuestra vida sea tan fcil.
Castaeda Durn Giovanna
PROYECTO FINAL
41
PROYECTO FINAL
ANEXOS
DATASHEET PIC16F877
42
PROYECTO FINAL
DATASHEET LM358
DATASHEET LM35
43
PROYECTO FINAL
44
PROYECTO FINAL
BIBLIOGRAFA
http://148.204.211.134/polilibros/portal/Polilibros/
www.oocities.org
www.quegrande.org
www.electronicafacil.net
http://es.aliexpress.com/popular/digital-combinations.html
http://es.scribd.com/doc/17273280/ADC
PIC16F877http://www.lawebdelprogramador.com
http://www.aurova.ua.es/microbot/index.php
http://ww1.microchip.com/downloads/en/devicedoc/39632c.pdf
http://blog.drk.com.ar/2012/amplificador-operacional-lm358
45