Вы находитесь на странице: 1из 45

INSTITUTO PLITECNICO NACIONAL

Escuela Superior de Ingeniera Mecnica y Elctrica


Unidad Culhuacn

Ing. en Comunicaciones y Electrnica


Microcontroladores
Profesor: Prieto Solano Jos
Grupo: 7EV2

Bautista Prez Jess Magdiel

Miranda Chvez Alan Michel

Castaeda Durn Giovanna

PROYECTO FINAL: INVERNADERO

NDICE
OBJETIVOS.................................................................................................2
MARCO TERICO.......................................................................................3

PROYECTO FINAL

LENGUAJE C ORIENTADO A MICROCONTROLADORES......................................3


CARACTERSTICAS Y DESVENTAJAS DE LEGUAJE C...........................................3
PIC16F877....................................................................................................... 5
MPLAB............................................................................................................. 6
ISIS DE PROTEUS............................................................................................. 7
DISPLAY LCD 2X16........................................................................................... 8
CRISTAL CUARZO............................................................................................. 9
AMPLIFICADOR OPERACIONAL LM358............................................................10
TRIMPOT........................................................................................................ 11
CAPACITOR CERAMICO................................................................................... 11

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:

Sea capaz de realizar desde cero un proyecto generado de su


propio ingenio, poniendo a prueba sus expectativas y aptitudes.

Generar este proyecto en cdigo, simulacin y en fsico para poder


sustentarlo y realizar las pruebas pertinentes.

Aplicar todo lo aprendido en el semestre.

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

conveniente conocer la arquitectura interna del procesador y en muchas


ocasiones hay que combinarlo con el lenguaje Ensamblador.
Al lenguaje C, se lo puede considerar con un lenguaje intermedio entre
alto nivel y bajo nivel, debido a sus caractersticas especiales tales como
el manejo de punteros, operaciones a nivel de BIT que son propios de
lenguajes de bajo nivel. Sin dejar de mencionar la capacidad de
empotrar trozos de lenguaje Ensamblador dentro de su cdigo.
Un programa codificado en lenguaje C resulta muy til en la aplicacin
de microcontroladores, dado que su compilacin es bastante eficiente y
ptima acercndose a la codificacin de lenguaje de mquina.
CARACTERSTICAS Y DESVENTAJAS DE LEGUAJE C
C es un lenguaje de programacin de propsito general. Sus principales
caractersticas son:

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 (;))

Una de las peculiaridades de C es su riqueza de operadores, Puede


decirse que prcticamente dispone de un operador para cada una de las
posibles operaciones en cdigo mquina. Finalmente, C, que ha sido
pensado para ser altamente transportable y para programar lo
inprogramable, igual que otros lenguajes tiene sus inconvenientes.
Carece de instrucciones de entrada/salida, de instrucciones para manejo
de cadenas de caracteres, con lo que este trabajo queda para la
biblioteca de rutinas, con la consiguiente prdida de transpirabilidad.
3

PROYECTO FINAL

La excesiva libertad en la escritura de los programas puede llevar a


errores en la programacin que, por ser correctos sintcticamente no se
detectan a simple vista.
Por otra parte las precedencias de los operadores convierten a veces las
expresiones en pequeos rompecabezas. A pesar de todo, C ha
demostrado ser un lenguaje extremadamente eficaz y expresivo.
La programacin en lenguaje C, para PIC, es bastante similar en su
estructura y sintaxis a la programacin tradicional para ordenadores,
una de las diferencias esta en las libreras creadas especficamente para
los microcontroladores PIC como por ejemplo para el LCD, teclado, bus
I2C, etc. La funcin main ()es imprescindible en todo programa escrito
en lenguaje C, pues es la funcin principal, desde aqu se puede hacer el
llamado a otras funciones.
Para crear un programa en lenguaje C, hay que seguir los pasos
siguientes:
1.
2.
3.
4.
5.

Especificaciones del programa (qu tiene que hacer)


Hacer organigrama
Escribir el cdigo fuente (conocer el lenguaje)
Compilar + Enlazar (Link)
Depurar errores, si los hay

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

Fig. 1: PIC 16f877

El encapsulado ms comn para este microcontrolador es el DIP (Dual


In-line Pin) de 40 pines, propio para usarlo en experimentacin.
Los pines de entrada/salida de este microcontrolador estn organizados
en cinco puertos, el puerto A con 6 lneas, el puerto B con 8 lneas, el
puerto C con 8 lneas, el puerto D con 8 lneas y el puerto E con 3 lneas.
Cada pin de esos puertos se puede configurar como entrada o como
salida independiente programando un par de registros diseados para
tal fin.
En ese registro un bit en "0" configura el pin del puerto correspondiente
como salida y un bit en "1" lo configura como entrada. Dichos pines del
microcontrolador tambin pueden cumplir otras funciones especiales,
siempre y cuando se configuren para ello, segn se ver ms adelante.

PROYECTO FINAL

Fig. 2: Puertos en el PIC 16f877

MPLAB

Es un programa que corre bajo Windows, Mac OS y Linux. Presenta las


clsicas barras de programa, de men, de herramientas de estado, etc.
El ambiente MPLAB posee editor de texto, compilador y simulacin (no
en tiempo real). Para comenzar un programa desde cero para luego
grabarlo al C en MPLAB v7.XX los pasos a seguir son:
1.
2.
3.
4.

Crear un nuevo archivo con extensin .ASM y nombre cualquiera


Crear un Proyecto nuevo eligiendo un nombre y ubicacin
Agregar el archivo .ASM como un SOURCE FILE
Elegir el microcontrolador a utilizar desde SELECT DEVICE del
men CONFIGURE

Una vez realizado esto, se est en condiciones de empezar a escribir el


programa respetando las directivas necesarias y la sintaxis para luego
compilarlo y grabarlo en el PIC.
6

PROYECTO FINAL

Fig. 3: Entorno de desarrollo MPLab

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

Fig. 4: Entorno de desarrollo Isis de Proteus

DISPLAY LCD 2X16


Las pantallas de cristal lquido (LCD) se han popularizado mucho en los
ltimos aos, debido a su gran versatilidad para presentar mensajes de
texto (fijos y en movimiento), valores numricos y smbolos especiales,
su precio reducido, su bajo consumo de potencia, el requerimiento de
solo 6 pines del PIC para su conexin y su facilidad de programacin en
lenguajes de alto nivel (por ejemplo, lenguaje C). Desde todo punto de
vista el empleo del display LCD 16x2 (LCD 2x16) debera considerarse
como la primera opcin a la hora de decidir por un dispositivo de
presentacin alfanumrica, excepto cuando las condiciones de
iluminacin ambiental no sean las ms favorables. En este ltimo caso
se debera pensar en el empleo de displays de 7 segmentos, que aunque
no tienen la misma versatilidad tienen la ventaja innegable de sus
mejores caractersticas de visibilidad an en los ambientes ms
desfavorables. En la actualidad existen diversos modelos de display LCD,
aunque los ms comunes son los LCD 16x2 (16 caracteres x 2 filas) o
LCD 2x16, gobernados por el controlador Hitachi HD44780, que se ha
convertido en el estndar de facto para las aplicaciones con
microcontroladores PIC.
8

PROYECTO FINAL

Fig. 5: Pantalla LCD

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

Fig. 6: Cristal Cuarzo

PROYECTO FINAL

AMPLIFICADOR OPERACIONAL LM358


Amplificador operacional de doble propsito general. No requiere fuente
dual. Alta ganancia, bajo consumo de potencia.
En electrnica el uso de amplificadores operacionales es muy comn.
Sobre todo porque son muy tiles en una amplia gama de
circunstancias, gracias a sus distintas configuraciones.
Lo que nos permite un control simple de la ganancia, incluso con valores
muy altos. Teniendo en cuenta las limitaciones tcnicas: la tensin de
salida del amplificador estar por debajo de la tensin de alimentacin
positiva
Caractersticas:

Aplicacin:

Voltaje de alimentacin: 3V a 32V fuente sencilla (1.5V a


16V fuente dual)
Bajo consumo de potencia
Ancho de banda tpico: 1 MHz

Radio frecuencia
Audio frecuencia
Generacin de pulsos
Sensores

Fig. 7: Integrado LM358

TRIMPOT

10

PROYECTO FINAL

Trim o Trimpot, son potencimetros que se ajustan con la ayuda de un


destornillador. Sirven para que el circuito al que pertenecen, acte
adecuadamente (en su punto) y compensar las tolerancias en otros
componentes los Trimpot son resistencias variables que tienen 3 patitas
o pines, cuyo valor cambia a medida que mueves una perilla, la cual se
desliza en una cubierta de carbn, por lo que la resistencia entre la
patita que se desliza y uno de los extremos varia lineal o
logartmicamente segn la especificacin del trimpot.

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.

Fig. 9: Capacitor cermicos

MATERIAL

Equipo de cmputo

PIC16F877A
11

PROYECTO FINAL

Programador para PICs

Diodos led

Resistencias de distintos valores/Trimpots

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

1. Si la temperatura est entre 0 y 24 grados (temperatura


ambiente), la ventana se mantendr cerrada.
2. Arriba de 25 se abrir la ventana
3. Si la temperatura es mayor de 30 se mantiene abierta la ventana
y se activa un ventilador.
4. Si la temperatura comienza a bajar se desactivara el ventilador y
se cerrara la ventana [el ventilador se desactivara a menos de 31
y la ventana se cerrara a los 24 grados]
Esto no contara con una hora especfica, ya que se estar sensando a
toda hora la temperatura.
Todo esto ser visualizado en una pantalla LCD para que el sistema sea
ms amigable con el usuario.
IMPLEMENTACIN
Para poder implementar las especificaciones del proyecto expuestas
anteriormente, decidimos utilizar lo siguiente: Pic16f877A, LM358, LM35,
LCD, Pushbuttons, donde los ltimos servirn como perifricos de
entrada, donde el usuario lograra ingresar los datos requeridos.
En la LCD se mostraran mens amigables con el usuario, los cuales
pedirn la hora, desplegando un aumento o disminucin de minutos y
horas, que iran haciendo saltos si el usuario ya haya terminado de
ingresar los datos correctamente.
Utilizaremos el modo de 24 horas para que el usuario no pueda rebasar
de las 24 horas establecidas normalmente.
Se mostrara la hora actual y la hora de riego, adems de la temperatura
del invernadero y la temperatura senasada.
Para los actuadores del aspersor, la ventana y el ventilador, se utilizaran
LEDs para que sepamos cuando se activan o se desactivan los mismos,
todo esto ser explicado ms adelante.
Todo esto ser presentado en protoboards, con su respectivo
alambrado
13

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

Figura 10: Proyecto y archivo .c generado en MPLab

2. En el archivo .c generado realice programe las funciones del


proyecto.
Para generar el
siguientes pasos:

proyecto

propuesto

se

realizaron

los

Se agreg la librera necesario para el PIC16F877A la cual


aparece al inicio del programa.
Se definieron todas las libreras a utilizar.
Se inicializ el programa.
Se declararon los puertos necesarios tales como puertos de
entrada y salida.
Se
gener
el
cdigo
necesario
para
cubrir
los
requerimientos.
Se procedi a comentar cada lnea del proyecto para llevar
una buena relacin y entendimiento del mismo.
El programa fue compilado, indicndonos que no se gener
ningn error.
El archivo .hex fue identificado en la carpeta en dnde se
guard el proyecto.
Se extrajo el archivo .hex para posteriormente utilizarlo en
la simulacin correspondiente montado en Isis de Proteus.

15

PROYECTO FINAL

Figura 11: Compilacin correcta del proyecto Invernadero

Los pasos a seguir para hacer funcionar el proyecto generado,


son mostrados a continuacin.

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

RS RD2 // Inicializacin de puertos


EN RD3
D4 RD4
D5 RD5
D6 RD6
D7 RD7

#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

unidades para los segundos


decenas para los segundos
unidades para los minutos
decenas para los minutos
unidades para las horas
decenas para las horas

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

unidades para los segundos


decenas para los segundos
unidades para los minutos
decenas para los minutos
unidades para las horas
decenas para las horas

void riego (int x)


//Inicia funcin para el reloj del tiempo
{
usegundos4=usegundos3; //Igualamos variables
dsegundos4=dsegundos3;
uminutos4=uminutos3;
dminutos4=dminutos3;
uhoras4=uhoras3;
dhoras4=dhoras3; // Fin de la igualacin
int j=0;
for(j=0; j<x;j++)
{
if(usegundos4<9) //Si unidades segundos menor a 9
{
usegundos4++; //Aumentamos las unidades de los segundos
}
else
{
usegundos4=0; //Unidades segundos igual a 0
if(dsegundos4<5) //Si decenas segundos menor a 5

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

usegundos2=0; //Variable unidades segundos2 igual a 0


dsegundos2=0; //Variable decenas segundos2 igual a 0
uminutos2=0; //Variable unidades minutos2 igual a 0
dminutos2=0; //Variable decenas minutos2 igual a 0
uhoras2=0; // Variable unidades horas2 igual a 0
dhoras2=0; //Variable decenas horas2 igual a 0

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

TRISB = 0x00; //Inicia Configuracion de puertos


PORTB = 0x00;
TRISD = 0x00;
TRISC = 0xFF; //Finaliza Configuracion de puertos
Lcd_Init(); //Inicializar LCD
Lcd_Clear(); // Limpiar LCD
ADCON0bits.ADCS = 0; //Selecting the clk division factor = FOSC/2
ADCON0bits.ADCS1 = 1;
ADCON1bits.ADCS2 = 0; //Selecting the clk division factor = FOSC/2
ADCON1bits.ADFM = 1;

//Result right justified

ADCON1bits.PCFG = 0;

//Setting all the analog ports as Analog inputs

ADCON0bits.ADON = 1;
ADCON0bits.CHS = 0;

//Turns on ADC module


//Selects channel 0 ( AN0 )

//===================================================
====================================================
=================
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

}
}

dsegundos--; // decrementa decenas segundos


Lcd_Set_Cursor(1,7);
sprintf(s, "%d", dsegundos); //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(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

Lcd_Set_Cursor(2,1); // Linea 2,1


Lcd_Write_String("DE TEMPERATURA..."); //Mostrar DE TEMPERATURA. . .
for(i=0;i<200;i++) // for hasta i menor a 200
{
__delay_ms(10); //delay 10 ms
}
Lcd_Clear(); //Limpiar LCD
Lcd_Set_Cursor(1,1); //Linea 1,1
Lcd_Write_String("00:00:00"); //Mostrar "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 10 ms
if(dhoras2<2) //decenas horas mayor a 2
{
dhoras2++; // aumenta decenas horas
Lcd_Set_Cursor(1,1);
sprintf(s, "%d", dhoras2); // 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(dhoras2>0) // si decenas horas mayor a 0
{
dhoras2--; //decrementa decenas horas
Lcd_Set_Cursor(1,1);
sprintf(s, "%d", dhoras2); //mostrar decenas 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

24

PROYECTO FINAL

if(uhoras2<9 && dhoras<2 || uhoras2<3 && dhoras==2)//Condicion horas


decenas, unidades
{
uhoras2++; //unidades horas aumenta
Lcd_Set_Cursor(1,2);
sprintf(s, "%d", uhoras2);// muestra unidades 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(uhoras2>0) //si unidades horas mayor a 0
{
uhoras2--; //decrementa unidades hora
Lcd_Set_Cursor(1,2);
sprintf(s, "%d", uhoras2); // muestra unidades 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(dminutos2<5) // decenas minutos menor a 25
{
dminutos2++; //incrementa decenas minutos
Lcd_Set_Cursor(1,4);
sprintf(s, "%d", dminutos2); // muestra decenas 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(dminutos2>0) //si minutos mayor a 0
{
dminutos2--; //decrementa decenas minutos
Lcd_Set_Cursor(1,4);
sprintf(s, "%d", dminutos2); //muestra decenas minutos

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

dminutos3++; //Incrementa decenas minutos


Lcd_Set_Cursor(1,4);
sprintf(s, "%d", dminutos3); //Muestra decenas 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(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);

if(conversion2>=11 && conversion2<=15) //Conversion mayor= a 11 y menor


= a 15

{
time=15;
riego(900);
}

a 20

if(conversion2>=16 && conversion2<=20)//Conversion mayor= a 16 y menor=


{
}

time=20;
riego(1200);

if(conversion2>=21)//Si conversion mayor= a 21


{
time=25;
riego(1200);
}
//===================================================
====================================================
==================================
}
if(dhoras==dhoras4 && uhoras==uhoras4 && dminutos==dminutos4 &&
uminutos==uminutos4 && dsegundos==dsegundos4 && usegundos==usegundos4)
{
PORTBbits.RB1=0;
}
Lcd_Set_Cursor(1,1); //Cursor 1,1
sprintf(s, "%d", dhoras); //Muestra decenas horas
Lcd_Write_String(s);
sprintf(s, "%d", uhoras); //Muestra unidades horas
Lcd_Write_String(s);
Lcd_Write_Char(':');
sprintf(s, "%d", dminutos); //Muestra decenas minutos
Lcd_Write_String(s);
sprintf(s, "%d", uminutos); //Muestra unidades minutos
Lcd_Write_String(s);
Lcd_Write_Char(':');
sprintf(s, "%d", dsegundos); //Muestra decenas segundos
Lcd_Write_String(s);
sprintf(s, "%d", usegundos); //Muestra unidades segundos
Lcd_Write_String(s);
//===================================================
====================================================
===================================

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

if(uhoras<9 && dhoras<2 || uhoras<3 && dhoras==2 )//Condicion


unidades horas menos a 9 y decenas horas menor a 2 o unidades hora menor a 3 y
decenas horas igual a 2
{
uhoras++; //Incrementa unidades horas
}
else
{
uhoras=0; //Unidades horas = a 0
Lcd_Set_Cursor(1,2);
Lcd_Write_Char('0');
if(dhoras<2) // Si decenas horas menor a 2
{ dhoras++; //Incrementa decenas horas
}
else
{ dhoras=0; //decenas horas = a 0
Lcd_Set_Cursor(1,1);
Lcd_Write_Char('0');
}
}
}
}
}
}
}
return 0;
} //Fin del cdigo

Simulacin:
Se genero la simulacin es Isis de Proteus tal como se muestra
en la figura siguiente.
DISEO FINAL DE PROYECTO

36

PROYECTO FINAL

Figura 12: Diseo de circuito en Isis de Proteus

INGRESAR HORA ACTUAL

Figura 13: Ingresar hora actual

INGRESAR HORA PARA TOMAR TEMPERATURA


37

PROYECTO FINAL

Figura 14: Ingresar hora para censar temperatura

INGRESAR HORA DE RIEGO

Figura 15: Ingresar hora para regar

38

PROYECTO FINAL

Cada uno de los LEDS ingresados en el proyecto actan


conforme a una caracterstica especfica , estas caractersticas
se muestran en la tabla siguiente.

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

Para nuestro proyecto decidimos hacer un invernadero automtico, ya


que podramos llevarlo a nivel industrial en algn futuro; basndonos en
esto, aplicamos todo lo visto en clase durante el corto semestre, adems
de que se investigo y se encontr una extensa gama de documentacin
disponible y herramientas de ayuda que nos facilitaron la creacin del
proyecto.
Con todo lo anterior ya visto, ya nos es posible construir autmatas con
componentes diversos que a la vez podran ser reutilizables y de bajo
costo, crendonos as nuevas formas de tecnologas, ya que el PIC, como
lo mencione anteriormente, puede ser aplicable a muchas cosas.
La creacin de Software para la programacin de Microcontroladores ya
no es una labor compleja debido a que se encuentran diversas
alternativas, nosotros logramos pasar de una de bajo nivel a otro de alto
nivel, facilitndonos la estructura de nuestro proyecto.
Por lo expresado anteriormente la elaboracin de este proyecto nos sirve
para comprender un poco ms la teora de los microcontroladores y su
aplicacin; de ah la importancia del mismo, pues a travs de l se
puede apreciar lo interesante que es la programacin en nuestra vida
cotidiana, ya que los microcontroladores estn presentes en muchos de
39

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

En este proyecto se logr maximizar el uso del lenguaje C orientado a


microcontroladores.
En la actualidad, tecnolgicamente han cambiado muchas cosas, dentro
de estos procesos tienen un rol importante los microcontroladores que
son programables, la programacin de los microcontroladores se ha
realizado en varias plataformas una de las plataformas que utilizamos
en el proyecto es basada en lenguaje C ya que la programacin de este
lenguajes es mucho ms sencilla.
Para desarrollar el control del aspersor utilizamos amplificadores uno se
utiliz para censar la temperatura LM35 el otro a utilizar fue el LM358
este a su vez hace la funcin de un sensor de temperatura que al variar
la temperatura del sensor, tambin vara el voltaje, el PIC que usamos
fue el 16f877A es un microcontrolador que por su memoria de programa
tipo FLASH representa gran facilidad en el desarrollo de prototipos este
no requiere borrarlo con luz ultravioleta tiene la facilidad que permite
reprogramarlo nuevamente sin ser borrado con anterioridad; un LCD de
2X16 para mostrar el tiempo la temperatura el oscilador de cuarzo.
Miranda Chvez Alan Michel

Los microcontroladores son dispositivos cerrados que realizan tareas


especificas programables, para la aplicacin de este proyecto se utilizo
un dispositivo de este tipo, PIC16F877A con el que se logr realizar
todas las tareas sealadas, armar de forma sencilla y sobre todo la
posibilidad de tener los recursos indispensables a la mano que son de
gran utilidad.
Los lenguajes de programacin han ido evolucionando ao con ao, en
la implementacin de este proyecto se uso el lenguaje C que junto con el
microcontrolador antes sealado hacen una gran fusin para desarrollar
prcticamente cualquier desafo que se presente, dadas las capacidades
de programar de forma coherente y fluida, las conexiones y armado son
mucho ms sencillas.
Para la implementacin d este proyecto se ocupar muchos puntos
estratgicos en cuestin de teora y que se aplicaron muchos temas muy
40

PROYECTO FINAL

bastos y robustos que fue necesario desglosar para obtener la


informacin ms puntual.
Cabe destacar que este proyecto fue construido en varias partes, si bien
la parte ms grande fue la creacin del termmetro, las otras se
consideraron subcategoras que dependieron del termmetro.
Finalmente podemos concluir que para el diseo del invernadero se
tomaron muchas cosas en cuenta, es importante sealar que con forme
se va avanzando en la programacin van surgiendo muchas ms
preguntas y consideraciones que se deben tomar en cuenta, la fue el
caso de la implementacin de la temperatura y de la hora en el reloj
programado.
El proyecto se logr concluir satisfactoriamente, se tuvieron algunas
fallas dadas algunas lneas de cdigo, las cuales fueron superadas.

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

Вам также может понравиться