0% encontró este documento útil (0 votos)
24 vistas4 páginas

Alcancía Electrónica con PIC16F887

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
24 vistas4 páginas

Alcancía Electrónica con PIC16F887

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

PROYECTO 1

INTRUDICCION: El proyecto consiste en una alcancía electrónica diseñada utilizando el


microcontrolador PIC16F887 y una pantalla LCD. El sistema tiene como propósito fomentar el
hábito del ahorro, mostrando un conteo regresivo cada vez que se inserta una moneda (simulada
por un fin de carrera ). Al llegar a cero o detectar la moneda, se muestra un mensaje de éxito. El
diseño incluye varios componentes, como un cristal de 20 MHz, un botón de reinicio y un ajuste de
contraste.

Componentes Principales

Microcontrolador PIC16F887: Controla la lógica del sistema.

Pantalla LCD de 16x2: Muestra el estado del ahorro y mensajes de motivación.

Botón de carrera: Detecta la inserción de una moneda (o algún objeto que simule la acción).

Cristal de 20 MHz: Proporciona la frecuencia de reloj necesaria para el microcontrolador.

Botón de reinicio: Permite restablecer el sistema manualmente.

Control de contraste: Ajusta la visibilidad de la pantalla LCD

Descripción del Funcionamiento

El sistema inicia mostrando un mensaje de motivación para ahorrar. Un contador comienza en 10


y disminuye de uno en uno cada segundo, representando el tiempo para insertar una moneda.

Modo Normal: El sistema espera a que el botón de carrera detecte una moneda (o un objeto en su
camino). Cuando esto sucede, la pantalla LCD muestra un mensaje de felicitación y el contador se
reinicia automáticamente para permitir un nuevo ciclo.

Sin Moneda Detectada: Si el contador llega a cero sin que se haya detectado una moneda, el
sistema despliega un mensaje motivacional indicando que se debe seguir intentando ahorrar.

El uso del botón de reinicio permite restablecer el contador manualmente en caso de ser
necesario.

Diagrama de Flujo del Programa

1. Inicialización: El microcontrolador configura los puertos y la pantalla LCD.

2. Mostrar mensaje inicial: Se presenta el texto "Ahorrar en:" en la primera línea de la pantalla.

3. Contador regresivo: Se inicia un ciclo de cuenta regresiva desde 10 hasta 1, actualizando la


pantalla con el valor actual del contador.

4. Verificación del botón de carrera: En cada paso del ciclo, se revisa si el sensor infrarrojo ha
detectado un objeto.

Moneda detectada: Si el botón detecta una moneda, se muestra un mensaje de éxito y se reinicia
el contador.
Moneda no detectada: Si el contador llega a 0 y no se detectó una moneda, se muestra un
mensaje para seguir ahorrando.

5. Reinicio: El sistema reinicia el ciclo de forma automática después de mostrar los mensajes.

Código #include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

#include <xc.h>

#include "lcd.h"

#pragma config FOSC = HS

#pragma config WDTE = OFF

#pragma config PWRTE = OFF

#pragma config MCLRE = ON

#pragma config CP = OFF

#pragma config CPD = OFF

#pragma config BOREN = OFF

#pragma config IESO = OFF

#pragma config FCMEN = OFF

#pragma config LVP = OFF

#pragma config DEBUG = OFF

#define _XTAL_FREQ 20000000

// Definir el pin donde está conectado el sensor infrarrojo

#define SENSOR_PIN PORTBbits.RB0 // Cambiar a PORTCbits para lectura correcto

int main(void)

// Configurar el puerto para el sensor

ANSELH = 0x00;

PORTB = 0x00;

TRISB = 0x01;

WPUB = 0x00;
OPTION_REG = 0xFF;

IOCB = 0x00;

TRISC |= (1 << 1); // Configurar RTRISCC1 como entrada

LCD lcd = { &PORTC, 2, 3, 4, 5, 6, 7 }; // PORT, RS, EN, D4, D5, D6, D7

LCD_Init(lcd);

while (1)

// Inicializar el contador

int contador = 10;

// Mostrar el conteo inicial

LCD_Clear();

LCD_Set_Cursor(0, 0);

LCD_putrs("Ahorrar en: ");

// Usar un ciclo for para contar de 10 a 1

for (; contador > 0; contador--)

LCD_Set_Cursor(1, 0);

LCD_putc(contador + '0'); // Convertir el número a carácter para mostrar

// Verificar si se detecta un obstáculo

if (SENSOR_PIN == 0) {

// Mostrar mensaje de ahorro

LCD_Clear();

LCD_Set_Cursor(0, 0);

LCD_putrs(" Haz ahorrado! ");

LCD_Set_Cursor(1, 0);

LCD_putrs(" Felicitaciones!

// Esperar un tiempo específico (por ejemplo, 500 ms)

__delay_ms(3000); // Esperar 1s

// Reiniciar el ciclo for


PORTCbits.RC1 = 1; // Simular que el obstáculo desapareció

contador = 10; // Reiniciar el contador

break; // Salir del for para volver a empezar el while

__delay_ms(1000); // Esperar 100 ms para permitir lecturas rápidas

// Si el ciclo for termina normalmente (contador llega a 0)

if (contador == 0) {

// Si no se detectó un obstáculo antes de llegar a 0

LCD_Clear();

LCD_Set_Cursor(0, 0);

LCD_putrs(" Ahorra! ");

LCD_Set_Cursor(1, 0);

LCD_putrs("Sigue intentando!");

__delay_ms(3000); // Esperar 1 segundo antes de reiniciar

return 0;

Conclusión: Este proyecto permite crear una alcancía electrónica sencilla que promueve el ahorro
mediante una interfaz amigable en una pantalla LCD y un sistema de detección de monedas
basado en un botón de carrera.

También podría gustarte