PAPER INVESTIGACIÓN " proyecto"

PAPER DE INVESTIGACION
CURSO:
MICROCONTROLADORES

TITULO:
PROGRAMACION DE UNA MAQUINA EXPENDEDORA UTILIZANDO EL PIC16F877A

AUTORES:
QUISPE CONDORI RAFI
SENCARA AJAHUANA EMIL
TOLENTINO SAMAR GUSTAVO


TECSUP

RESUMEN

Fundamentalmente en este trabajo expondremos sobre el uso del PIC para programar una máquina expendedora, siendo éstas una prioridad en la vida cotidiana de los seres humanos, debido a su revolución en la industria tecnológica. También daremos a conocer los conceptos y características necesarias para la realización del proyecto además de los detalles exactos de cómo realizar la programación y la simulación respectiva. Es necesario tener en cuenta que este trabajo se realizó sin fines de lucro por lo que su utilidad es responsabilidad del usuario.

PALABRAS CLAVES: programar, máquina expendedora, microcontrolador PIC

ABSTRACT

Fundamentally in this work we will discuss the use of the PIC to program a vending machine, being these a priority in the daily life of the human beings, due to its revolution in the technological industry. We will also disclose the concepts and characteristics necessary for the realization of the project as well as the exact details of how to carry out the programming and the respective simulation. It is necessary to take into account that this work was carried out non-profit so its usefulness is the responsibility of the user.

KEYWORDS: program, vending machine, PIC microcontroller



INTRODUCCION

El presente trabajo tiene como objetivo servir como manual para todas aquellas personas interesadas en la programación en el PIC16F877A, consta de la programación básica, así como el funcionamiento de la misma.

Los microcontroladores PIC suponen un avance significativo en la materia de dispositivos digitales empleados en el control de sistemas, su reducido tamaño así como sus elevadas prestaciones lo convierten en un ejemplo indispensable en el campo de los microcontroladores.
Las máquinas expendedoras se encuentran en oficinas, salas de espera, terrapuertos, aeropuertos, etc. A nosotros se nos dio la intriga de saber cómo es que se programaron dichas máquinas, además de querer programar alguna. Después de realizar algunas investigaciones observamos que la programación se podía resolver con la ayuda del PIC y ahora podemos presentar una idea básica de programación para aquellos interesados en programar una máquina expendedora. Es necesario saber que el lenguaje que utilizamos es el C.


 CARACTERISTICAS GENERALES

MICROCONTROLADOR

¿Qué es?

Se denomina microcontrolador a un dispositivo programable capaz de realizar diferentes actividades que requieran del procesamiento de datos  digitales y del control y comunicación digital de diferentes dispositivos. Los microcontroladores poseen una memoria interna que almacena dos tipos de datos; las instrucciones, que corresponden al programa que se ejecuta, y los registros, es decir, los datos que el usuario maneja, así como registros especiales para el control de las diferentes funciones del microcontrolador.
PIC16F877A
En este proyecto se utilizó el PIC 16F877. Este microcontrolador es fabricado por MicroChip familia a la cual se le denomina PIC. El modelo 16F877 posee varias características que hacen a este microcontrolador un dispositivo muy versátil, eficiente y práctico para ser empleado en la aplicación que posteriormente será detallada.
Características:
·         Soporta modo de comunicación serial, posee dos pines para ello.
·         Amplia memoria para datos y programa.
·         Memoria reprogramable: La memoria en este PIC es la que se denomina FLASH; este tipo de memoria se puede borrar electrónicamente (esto corresponde a la "F" en el modelo).
·         Set de instrucciones reducidas (tipo RISC), pero con las instrucciones necesarias para facilitar su manejo.



Imagen 1
(Encapsulado del PIC16F877A)























Imagen 2
(Diagrama de pines del PIC16F877A)


MAQUINA EXPENDEDORA
¿Qué es?

Es una máquina que  proporciona productos a los consumidores. Este consiste en vender sin la necesidad de que haya un dependiente para cobrar; un empleado se encarga de reponer los productos y de adquirir el dinero obtenido.

Imagen 3
(ejemplo de una maquina expendedora)

Funcionamiento de una máquina expendedora

Las máquinas expendedoras cuentan con sensores de luz que miden el tamaño de la moneda que introducimos. Posteriormente, esta pasa por unos sensores electromagnéticos que identifican el material del que está compuesta la moneda. De este modo, separan las de curso legal de las falsas. Además las máquinas modernas cuentan con sensores de infrarrojos para identificar si el producto que hemos comprado cae correctamente. En caso de que no sea así, se activará el mecanismo para repetir el proceso de nuevo.

Imagen 4
(Diagrama de bloques de una máquina expendedora)

METODOLOGIA UTILIZADA

PARTICIPANTES
Para la realización del proyecto solo fue necesario la investigación y preocupación de tres estudiantes de “Electrónica y Automatización Industrial”

INSTRUMENTOS
Para realizar el proyecto hicimos uso del PIC16F877A y de los siguientes programas:
·         CCS COMPILER
·         PROTEUS 8.5
·         PICKIT 2

PROCEDIMIENTO
Ahora presentamos la programación de la maquina expendedora:

...................................................................................................................................................................
#include <16f877a.h>
#use delay (clock=20M)
#fuses HS, NOPROTECT, NOWDT
#define LCD_ENABLE_PIN        PIN_D3
#define LCD_RS_PIN            PIN_D2
#define LCD_RW_PIN            PIN_A0
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7  
#include <lcd.c>
#define use_portb_kbd TRUE
#include <kbd4x4_1.c>

void main()
{
     
   char k;
   int x;
   int car;
   lcd_init ();
   kbd_init ();
   port_b_pullups (TRUE);
   
   
       {
        lcd_gotoxy (2,1);                       //Uvicamos la palabra en la primera fila y la primera columna
        printf(lcd_putc, " Bienvenido");        // manifestamos la palabra en nuestro lcd
        lcd_gotoxy (1,2);                       //Uvicamos la palabra en la segunda fila y la primera columna
        printf(lcd_putc, "  Venta segura");
        delay_ms(3000);                         // Le damos un retardo de 3000 ms
        lcd_putc("\f");                         // borramos la palabra para entrar a otra instruccion
        for (car = 0;car<=16;car++)
        {
        lcd_gotoxy(car,1);
        printf(lcd_putc, "Bienvenido");
        delay_ms(300);
        lcd_putc("\f");
        }
        for (car=16;car>=1;Car--) 
        {
        lcd_gotoxy(car,1);
        printf(lcd_putc, "Bienvenido");
        delay_ms(300);
        lcd_putc("\f");
        }
       }
     
     while(true)
      {
      if(input(pin_A1)==1)   // INSERTAR NONEDA DE UN SOL
      {
         k=kbd_getc();
        x=k-48;
         if(k!=0)
         {
            lcd_gotoxy(1,1);
             if(x>=1 && x<=9)                         // CONCIONES DE LA CANTIDAD DEL PRODUCTO
                  { printf(lcd_putc,"\fpro:%i",x);
            if(x>0 && x<2)                             // CONDICIONES DEL TECLADO 
            {
               printf(lcd_putc, "\fProducto:AGUA"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"despachando...");
               output_high(pin_c0); 
               delay_ms(2000);
               output_low(pin_c0);
               printf(lcd_putc,"\fhasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos,");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
              
            }
             if(x>1 && x<3)  
            {
               printf(lcd_putc, "\fProducto:gaseosa");
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 3.00");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
              
            }
             if(x>2 && x<4)   
            {
               printf(lcd_putc, "\fProducto:cerveza"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 5.00");
               delay_ms(500);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
                
            }
            
            if(x>3 && x<5)
            {
               printf(lcd_putc, "\fProducto:CIGARRO"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 7.00");
               delay_ms(500);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
                
            }
             if(x>=5 && x<=9)   
            {
               printf(lcd_putc, "\f   Elija Otro"); 
               delay_ms(200);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"    Producto");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
            }
            }
            
           
         }
      }
      
      
      if(input(pin_A2)==1)  // una modeda de 3 soles 
      {
         k=kbd_getc();
         x=k-48;
         if(k!=0)
         {
            lcd_gotoxy(1,1);
             if(x>=1 && x<=9)
                  { printf(lcd_putc,"\fproducto:%i",x);
            if(x>0 && x<2)
            {
               printf(lcd_putc, "\fProducto:AGUA"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c0);
               delay_ms(2000);
               output_low(pin_c0);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 2.00");
               output_high(pin_c4);
               delay_ms(2000);
               output_low(pin_c4);
               printf(lcd_putc,"\f");
               printf(lcd_putc," hasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
              
            }
             if(x>1 && x<3)
            {
               printf(lcd_putc, "\fPro:gaseosa");
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"despachando...");
               output_high(pin_c1);
               delay_ms(2000);
               output_low(pin_c1);
               printf(lcd_putc,"\f");
               printf(lcd_putc," hasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
              
            }
             if(x>2 && x<4)
            {
               printf(lcd_putc, "\fProducto:cerveza"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 5.00");
               delay_ms(500);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
                
            }
            if(x>3 && x<5)
            {
               printf(lcd_putc, "\fProducto:CIGARRILO"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 7.00");
               delay_ms(500);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
                
            }
             if(x>=5 && x<=9)
            {
               printf(lcd_putc, "\f   Elija Otro"); 
               delay_ms(200);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"     Producto");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
            }
            }
            
           
         }
      }
      
        if(input(pin_A3)==1) //moneda de 5 soles
      {
         k=kbd_getc();
         x=k-48;
         if(k!=0)
         {
            lcd_gotoxy(1,1);
             if(x>=1 && x<=9)
                  { printf(lcd_putc,"\fpro:%i",x);
            if(x>0 && x<2)
            {
               printf(lcd_putc, "\fProducto:AGUA"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c0);
               delay_ms(2000);
               output_low(pin_c0);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 4.00");
               output_high(pin_c4);
               delay_ms(2000);
               output_low(pin_c4);
               printf(lcd_putc,"\f");
               printf(lcd_putc," hasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
              
            }
             if(x>1 && x<3)
            {
               printf(lcd_putc, "\fProducto:gaseosa");
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c1);
               delay_ms(2000);
               output_low(pin_c1);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 2.00");
               output_high(pin_c4);
               delay_ms(2000);
               output_low(pin_c4);
               printf(lcd_putc,"\f");
               printf(lcd_putc," hasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
              
            }
             if(x>2 && x<4)
            {
               printf(lcd_putc, "\fProducto:cerveza"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"despachando...");
               output_high(pin_c2);
               delay_ms(2000);
               output_low(pin_c2);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"\fasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
                
            }
             if(x>3 && x<5)
            {
               printf(lcd_putc, "\fProducto:CIGARRILO"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 7.00");
               delay_ms(500);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
            }
             if(x>=5 && x<=9)
            {
               printf(lcd_putc, "\f   Elija Otro"); 
               delay_ms(200);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"    Producto");
               delay_ms(100);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
            }                       
            }
                      
            }
                    
         }
     /*if(input(pin_A4)==1)
      {
         k=kbd_getc();
         x=k-48;
         if(k!=0)
         {
            lcd_gotoxy(1,1);
             if(x>=1 && x<=9)
                  { printf(lcd_putc,"\fproducto:%i",x);
            if(x>0 && x<2)
            {
               printf(lcd_putc, "\fProducto:AGUA"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c0);
               delay_ms(2000);
               output_low(pin_c0);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 9.00");
               output_high(pin_c4);
               delay_ms(2000);
               output_low(pin_c4);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"hasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
              
            }
             if(x>1 && x<3)
            {
              printf(lcd_putc, "\fProducto:gaseosa"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c1);
               delay_ms(2000);
               output_low(pin_c1);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 8.00");
               output_high(pin_c4);
               delay_ms(2000);
               output_low(pin_c4);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"hasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
              
            }
             if(x>2 && x<4)
            {
               printf(lcd_putc, "\fProducto:cerveza"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c2);
               delay_ms(2000);
               output_low(pin_c2);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 5.00");
               output_high(pin_c4);
               delay_ms(2000);
               output_low(pin_c4);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"hasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
                
            }
            if(x>2 && x<4)
            {
               printf(lcd_putc, "\fProducto:CIGARRO"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c3);
               delay_ms(2000);
               output_low(pin_c3);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 3.00");
               output_high(pin_c4);
               delay_ms(2000);
               output_low(pin_c4);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"hasta luego....");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
                
            }
             if(x>=5 && x<=9)
            {
               printf(lcd_putc, "\f   Elija Otro"); 
               delay_ms(200);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"     Producto");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"  Venta segura");
            }
            }
            
           
         }
      }    
         */      
   }
}
...................................................................................................................................................................

Para realizar la programación anterior se tuvo que revisar comandos que anteriormente (en el presente blog) se estuvo ejecutando en diferentes sesiones.





Los resultados anteriormente mostrados fueron ejecutados en los programas CCS COMPILER y PROTEUS 8.5, ambos programas se leen mutuamente. Como se pudo observar nuestra programación al compilarlo funciona correctamente sin ningún error, además nuestro proteus fue ejecutando la acción necesaria cada vez que se estableció un pulso en los diferentes valores de dinero.

 CONCLUSIONES y OBSERVACIONES

  • Para poder poder realizar este proyecto se tuvo que aprender previamente estos código ya se estaban practicando en el Laboratorio en diferentes simulaciones en el entrenador como en proteus.
  • Ya que estos códigos son libres tenemos la gran libertad de probar con ellos y realizar programas como nuestro proyecto.
  • Se observa que gracias al programa proteus podemos probar, si lo que nuestra programación esta correcto o no.
  • También al usar un bucle infinito como es (while true) nos ayuda a ver ciclicamente nuestra programación con respecto lo que se muestra en la pantalla LCD.
  • En síntesis se aprendió a programar con un conjunto de  códigos que fueron útiles para realizar nuestro proyecto. OJO (nuestro proyecto se puede perfeccionar mas con mas investigación, etc.)
AUTORES: TOLENTINO, QUISPE

No hay comentarios:

Publicar un comentario