lunes, 14 de enero de 2013

Báscula Electrónica

Hola, Me gustaría compartir con ustedes como mi primer Post en este blog un avance de una báscula electrónica que desarrollé con un PIC 16f877A, ya que engloba muchas de las aplicaciónes útiles que este PIC tiene y las muestro tanto gráficamente como analíticamente para la comprensión de su funcionamiento.





El sensor de peso o FSR es una resistencia que varía su resistividad óhmica entre los 6 Kohms, y los 250 Kohms lineales que comprenden un rango de 0 a 10Kg.


Es una resistencia sensible a una fuerza con una ronda, 0,5 "de diámetro es su área de detección. Este FSR puede variar su resistencia en función de la presión que se está aplicando a la zona de detección. Mientras mayor sea la fuerza, menor es la resistencia. Cuando no hay presión aplicada a la FSR, su resistencia será mayor que 1MΩ. Este FSR puede sentir la fuerza aplicada en cualquier lugar de su periferia.

Dos pasadores se extienden desde la parte inferior del sensor con 0,1 ".
Estos sensores son sencillos de configurar y grandes para detectar la presión, pero no son muy precisos. Se pueden emplear para detectar si se está siendo exprimido algo, pero es posible que no se pueda usar por su precisión escasa como una escala o método de medición.



Gráfica que corresponde a la ecuación de caracterización de datos, donde el eje y corresponde al peso en Kg, y X corresponde el valor del ADC desde 41 hasta 511 con ADC=10 para el rango lineal del sensor.
y=(511-x)/41
Ecuación calculada con la ecuación de la recta, y la fórmula de punto/pendiente.


Tabla de algunos pesos comparativos

Para poder sensar estas propiedades en el sistema, se puede emplear un puente de wheatstone, donde la resistencia a medir o “rara” sea el sensor, y medir el voltaje en los centros del puente, pero en este caso, solamente se ocupó un divisor de voltaje, donde la resistencia que no varía tiene el mismo valor óhmico que la resistencia en 0Kg.

Esquemático de conexiones, donde RV1 es equivalente al sensor de fuerza resistivo.

Faceta de alta resistencia o cero presión

Faceta de baja resistencia o presión máxima

Imagen real aplicando variaciones de fuerza al sensor resistivo

Para lograr la caracterización y los 3 estados de sensado, se empleó el pic 16f877a sin necesidad de un pre-amplificador operacional o algo, ya que no se requería mucha exactitud. Para ello, se empleó el siguiente código en Lenguaje C:



#include <16f877a.h>
#device adc=10   // Usa resolución de 10 bits
#fuses HS, NOWDT
#use delay(clock=8000000)
#include <lcd.c> //incluye librería del LCD

#define use_portd_lcd TRUE             //Configuración puerto D control lcd

float32 A=0.0;
float32 V=0.0;
float32 Kg=0.0;
void main()
{
set_tris_b(0XF0);
lcd_init(); //Se inicia el LCD

lcd_putc("\f    Bascula   \n");          // Saca texto
lcd_putc("   Electronica  ");               // Saca texto
delay_ms(2000);

lcd_putc("\f");                             // Limpia pantalla

lcd_putc("Peso actual Kg\n");          // Saca texto
delay_ms(1000);
lcd_gotoxy(13,2);                       // Acomoda cursor LCD
lcd_putc("Kg");
delay_ms(50);

setup_adc (adc_clock_internal);

setup_adc_ports (0);

set_adc_channel (0);                // Elige canal a medir RA0

delay_ms(20);
while(true)
{
lcd_gotoxy(4,2);      // Acomoda cursor LCD

delay_ms(10);         // Limpia ese sector de pantalla
lcd_gotoxy(4,2);     // Acomoda cursor LCD
A=read_adc();
Kg=(511.0-A)/(41.0);
if(A>515)
{
lcd_gotoxy(1,2);     // Acomoda cursor LCD
printf(lcd_putc,"No hay peso");   // xxx.x Kg
delay_ms (20);
while(true)
{
A=read_adc();
if(A<515)
{
lcd_putc("\f");                             // Limpia pantalla
lcd_putc("Peso actual Kg\n");          // Saca texto
delay_ms(100);
lcd_gotoxy(13,2);                       // Acomoda cursor LCD
lcd_putc("Kg  ");
delay_ms(50);
break;
}
}
}
if(A<80)
{
lcd_gotoxy(1,2);     // Acomoda cursor LCD
printf(lcd_putc,"Peso Maximo");   // xxx.x Kg
delay_ms (20);
while(true)
{
A=read_adc();
if(A>80)
{
lcd_putc("\f");                             // Limpia pantalla
lcd_putc("Peso actual Kg\n");          // Saca texto
delay_ms(100);
lcd_gotoxy(13,2);                       // Acomoda cursor LCD
lcd_putc("Kg  ");
delay_ms(50);
break;}
}
}
printf(lcd_putc,"%02.3f",Kg);   // xxx.x Kg
delay_ms (300);}
}


7 comentarios:

  1. NESECITO AYUDA..... NO ENTIENDO COMO SACASTE LA ECUACION ME AYUDAS XFA

    ResponderEliminar
    Respuestas
    1. Hola me pidieron para la escuela aun proyecto similar ¿Podrías ayudarme?

      Eliminar
  2. Hola me pidieron para la escuela aun proyecto similar ¿Podrías ayudarme?

    ResponderEliminar
  3. Excelente articulo, pero también esto aplica para la calibracion de basculas ?

    ResponderEliminar
  4. Saludos estimado, A Pesar del tiempo transcurrido tu proyecto sigue siendo interesante, pregunto que compilador de C utilizaste (electroabel200@hotmail.com)por si acaso.

    ResponderEliminar
  5. Buenas noches, de casualidad podrias solucionarme algunas dudas sobre la ecuacion y las graficas que has obtenido ?

    ResponderEliminar