BÁSCULA CON PIC16F1937 Y LCD.

Comparte en tus redes sociales.

Saludos Compañeros.

En este post les entregamos un circuito electrónico que ilustra el funcionamiento de una báscula.

Esta tiene una capacidad de peso máxima de 0 a 80 kg

Se empleó un microcontrolador PIC 16F1937 para esta aplicación en concreto

Se implementó una celda simulada en proteus en conjunto con un amplificador de instrumentación AD620 el cual nos ofreció una mejor resolución en la medida.

Se empleó un display LCD para visualizar el peso de cualquier material.

Como primera prueba, se tomaron ciertos valores de voltaje simulando una medida en la celda de carga.

Cabe resaltar que la celda de carga tiene una zona elástica donde fue posible trabajar el dispositivo sensor.

toma de datos celda de carga
Figura 1. Toma de datos de la celda de carga

 

Posteriormente se procedieron a graficar los datos obtenidos para determinar la zona lineal de trabajo así como la ecuación que modela los datos obtenidos.

celda de carga
figura 2. Comportamiento de la celda de carga

 

Basado en los datos obtenidos, se procedió a diseñar el circuito y el algoritmo que permite tomar la medición de masa en la celda de carga.

 

PROGRAMA.

 

/*

 * File:   newmain.c

 * Author: WIN

 *

 * Created on 28 de octubre de 2020, 11:11 PM

 */

 

 

#include <xc.h>

 

#include<stdio.h>

#include <string.h>

 

char outbuffer[100]={0};

float peso = 0.0;

float voltaje = 0.0;

 

// CONFIG1

#pragma config FOSC = HS        // Oscillator Selection (HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins)

#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)

#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)

#pragma config MCLRE = ON       // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)

#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)

#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)

#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)

#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)

#pragma config IESO = ON        // Internal/External Switchover (Internal/External Switchover mode is enabled)

#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

 

// CONFIG2

#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)

#pragma config VCAPEN = OFF     // Voltage Regulator Capacitor Enable (All VCAP pin functionality is disabled)

#pragma config PLLEN = OFF      // PLL Enable (4x PLL disabled)

#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)

#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)

#pragma config LVP = OFF        // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)

#define _XTAL_FREQ 20000000

 

#define LCD_RS RB4

#define LCD_EN RB5

#define LCD_DATA PORTC

 

void set_lcd (void){

    LCD_RS=0;

    LCD_EN=1;

    __delay_ms(2);

    LCD_EN=0;

}

void lcd_init(void)

{

    LCD_DATA=2;

    set_lcd();

    LCD_DATA=56;

    set_lcd();

    LCD_DATA=12;

    set_lcd();

    LCD_DATA=6;

    set_lcd();

    LCD_DATA=1;

    set_lcd();

}

 

void lcd_write(unsigned char c)

{

     LCD_EN=1;

     LCD_DATA = ( c );

     __delay_ms(2);

     LCD_EN=0;

}

 

void lcd_goto(unsigned char pos)

{

     LCD_RS = 0;

     lcd_write(0x80+pos);

}

 

// Escribo una cadena de caracteres en el LCD

void lcd_puts(const char * s)

{

     LCD_RS = 1;

     while(*s)

          lcd_write(*s++);

}

// Escribo un caracter en el LCD

void lcd_putch(char c)

{

     LCD_RS = 1;     // write characters

     lcd_write( c );

}

 

void main(void) {

    // Pagina 40 del data sheet

    // Configurar el RA0 con entrada analogica

    ADCON0=0B00000001;

    // Organizamos los 10 bits a la derecha

    ADCON1=0B10010000;

   

    //Configuramos los pines de salida digitales

    TRISB=0;

    ANSELB=0;

    PORTB=0;

 

    //Configuramos los pines de salida digitales

    TRISC=0;

    PORTC=0;

 

    // Inicializamos la LCD

    lcd_init();

   

    while(1){

        GO=1;

        while(GO) continue;

       

        // Limpiamos la variable

        memset(outbuffer, 0 ,sizeof(outbuffer));

        // (ADRESH*256)+ADRESL, con esta operación convertimos de binario a decimal

        // 5.0/1023.0 == Convertimos de decimal (0 – 1023) a (0 – 5 voltios)

        voltaje = ((ADRESH*256)+ADRESL)*5.0/1023.0;

        // calculamos el peso a través de la ecuación de la gráfica

        peso = 16.562*voltaje – 0.1045;

        // sprintf perm ite convertir un numero de punto flotante a string

        sprintf(outbuffer, “%2.0f”, peso);

       

        //Contruimos el mensaje de la segunda fila de la LCD

        // ”  Peso = 59 kg  ” que equivale a 16 caracteres

        char mensaje1[] = ”  Peso = “;

        char mensaje2[] = ” kg  “;

        char mensaje3[25];

       

        // Copiamos los 4 espacio en blanco en la variable mensaje3 y concatenamos el mensaje

        // que se va imprimir en la fila 2, la información se guarda en la vble mensaje3

        strcpy(mensaje3, mensaje1);

        strcat(mensaje3, outbuffer);

        strcat(mensaje3, mensaje2); // En la vble mensaje3 se almacena ”  Peso = 59 kg  “

       

        lcd_goto(0);                    // selecciono primera línea

        lcd_puts(” Celda de carga “);   // Imprimimos la primera fila

        lcd_goto(0x40);                 // Selecciono segunda línea

        lcd_puts(mensaje3);             // Imprimimos la segunda fila

       

        __delay_ms(100);

       

    }

}

 

CONTENIDOS MÁS RELEVANTES.

LOS MEJORES SITIOS PARA APRENDER ELECTRICIDAD GENERAL

Que tal compañeros: ¿ como están? pues espero que se encuentren de maravilla ¡así como yo también! el día de ...
Leer Más

LOS MEJORES SITIOS PARA APRENDER ELECTRONICA

 LOS MEJORES SITIOS PARA APRENDER ELECTRONICA nuestra red global llamada Internet está inundada de muchos sitios para aprender electrónica de ...
Leer Más
plc aprender a programar

PLC: APRENDER A PROGRAMAR

PLC: APRENDER A PROGRAMAR Que tal amigos. ¿como están? ¿quieren aprender a programar PLCs? ¿estás buscando sitios que te ofrezcan ...
Leer Más

LOS MEJORES SITIOS PARA APRENDER ROBOTICA COMPLETAMENTE GRATIS.

saludos compañeros. Les cuento que el día de hoy estuve en una búsqueda exhaustiva por buscar los mejores sitios para ...
Leer Más

DESCARGAR GRATIS LIBROS DE ELECTRÓNICA

como descargar los libros gratis de electrónica saludos amigos, el día de hoy les comparto una serie de links  que ...
Leer Más

LOS MEJORES SITIOS PARA APRENDER INSTRUMENTACIÓN Y CONTROL

 En el post de hoy hablaré de 5 sitios web que marcan la diferencia para aprender todo lo que necesitas ...
Leer Más

MICROCONTROLADORES: CURSO COMPLETAMENTE GRATIS.

nota: estos cursos no pertenecen a sensoricx. Recuerda que debes suscribirte al canal https://www.youtube.com/channel/UCwbBivwbFv8GVitX5dKzPFQ antes de empezar el curso. VIDEO ...
Leer Más

PLC: CURSO COMPLETAMENTE GRATIS.

Saludos compañeros. A continuación les comparto una serie de vídeos que les servirán para su formación técnica en programación de ...
Leer Más
destacada

APRENDE LABVIEW CON ESTOS SENCILLOS TUTORIALES

saludos compañeros. El día de hoy les comparto una serie de vídeos relacionados con el entorno de desarrollo de LABVIEW ...
Leer Más
igbt

IGBT. QUE ES- PARA QUE SIRVE- COMO FUNCIONA

IGBT QUE ES- PARA QUE SIRVE- COMO FUNCIONA Hablar de los IGBT son mayores palabras puesto que estos transistores son ...
Leer Más

INVERSOR DE GIRO DE MOTOR TRIFÁSICO

INVERSOR DE GIRO DE MOTOR TRIFÁSICO. En este post se trabajó con un circuito inversor de giro de un motor ...
Leer Más

CONTROL ELECTRICO-INTRODUCCION

CONTROL ELECTRICO-INTRODUCCION Dentro de los sistemas de control electromagnético o sistemas cableados destacamos como elemento principal el contactor.   El ...
Leer Más

soy el administrador del sitio web. si tienes alguna duda, no dudes en contactarme

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

ArabicChinese (Simplified)DutchEnglishFrenchGermanItalianPortugueseRussianSpanish