Proiektu hau kaxak eramateko gurdi batean instalatzeko balantza elektriko bat egitea zen, baina azkenean, proiektu hau egiteko sentsore egokia lortu ezin izan denez balantza arrunt bat egitea erabaki da. Balantza honek LCD bat dauka balioak agertzeko eta menu batean pisu arrunta eta akumulatuaren artean aukeratu ahal izango da. Menu hori kontrolatzeko hiru botoi egongo dira, OK, BERA eta ATZERA.
.
Pisua detektatzeko sentsorea, indar sentsore bat da, flexiforce sentsorea hain zuzen ere.
Sentsore honek erresistentzia bariable baten moduan funtzionatzen du. Indarrik aplikatu gabe bere erresistentzia oso altua da eta indarra aplikatzean erresistentzia jaitsi egiten da. Zirkuitu honetan, programtau ahal izateko, mikrokontralagailuak tentsio aldaketak detektatzen ditu gainean aplikatzen zaion indarraren edota pisuaren arabera, kasu honetan bezala. Hau egin ahal izateko pic mikrokontrolagailua erabili da, pic c programaren bitartez programatuz. Sentsoreak bidalitako tentsioak pic-aren bitartez LCD-an kg-tan azaltzeko, konbertsio analogiko bat egin da, while batzuen bitartez botoi bakoitza sakatuta dagoenean zer egin behar duen esanaz.
Balantza elektronikoa egiteko erabili den programa:
#include <16F88.h>
#device ADC=10 //Conversor ADC/ de 10 bits de resolución
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES PUT //Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOIESO //Internal External Switch Over mode disabled
#use delay(clock=4000000)
#include «lcd.c»
#define OK PIN_A1
#define BERA PIN_A2
#define ATZERA PIN_A3
int16 resultado; //Variable para el resultado de la conversión AD
/*****************************************************************************
Funcion principal
*****************************************************************************/
void main(void)
{
float pisua,total=0;
// int8 m1_lerro=1, m2_lerro=1;
lcd_init(); //Inicia la pantalla LCD
//Se activa el ADC y se selecciona el canal RA0/AN0. Frecuencia de trabajo Fosc/32
setup_adc(adc_clock_internal); //Ajusta frecuencia de muestreo del ADC ¡¡OJO!!
setup_adc_ports(sAN0);//VSS_VDD|sAN0); //RA0 entrada analógica
set_adc_channel(0); //Selección del canal 0 (RA0)
while(TRUE)
{
printf(lcd_putc,»\f%cPisu arrunta»,0x7e); //Visualiza el texto fijo del
printf(lcd_putc,»\n Akumulutua»); //Visualiza el texto fijo del
while((input(OK)==1)&&(input(BERA)==1)); //itxaron OK edo BERA sakatu arte
delay_ms(20); //Erreboteak ekiditzeko
if(input(OK)==0)
{
pisua=0;
while((input(OK)==0)); //Itxaron OK askatu arte
delay_ms(20); //Erreboteak ekiditzeko
printf(lcd_putc,»\fPisua: %.2f kg «,pisua);
printf(lcd_putc,»\nSakatu OK»); //Visualiza el texto fijo del
while((input(OK)==1)); //itxaron OK sakatu arte
delay_ms(20); //Erreboteak ekiditzeko
resultado=read_adc(); //Inicia la conversión y lee el resultado
pisua=resultado*(11.339/1025.0)-0.9; //Calculamos la tension
lcd_gotoxy(7,1);
printf(lcd_putc,»%.2f «,pisua); //Visualiza el resultado
if(pisua<0)
printf(lcd_putc,»\fPisua: 0.00 kg «);
printf(lcd_putc,»\nSakatu ATZERA»); //Visualiza el texto fijo del
while(input(ATZERA)==1); //itxaron ATZERA sakatu arte
continue;
}
else if(input(BERA)==0) //
{
total=0,pisua=0;
printf(lcd_putc,»\f Pisu arrunta»); //Visualiza el texto fijo del
printf(lcd_putc,»\n%cAkumulutua»,0x7e); //Visualiza el texto fijo del
while(input(OK)==1); //itxaron OK sakatu arte
delay_ms(20); //Erreboteak ekiditzeko
printf(lcd_putc,»\fPisua: %.2f kg»,pisua);
printf(lcd_putc,»\nTotal: %.2f kg»,total); //Visualiza el texto fijo del
while((input(OK)==0)); //Itxaron OK askatu arte
delay_ms(20); //Erreboteak ekiditzeko
while(TRUE)
{
while((input(OK)==1)&&(input(ATZERA)==1)); //itxaron OK sakatu arte
delay_ms(20); //Erreboteak ekiditzeko
if(input(ATZERA)==0)
break; //while-etik atera
resultado=read_adc(); //Inicia la conversión y lee el resultado
pisua=resultado*(11.339/1024.0)-0.9;//Calculamos la tension
lcd_gotoxy(7,1);
printf(lcd_putc,»%.2f «,pisua); //Visualiza el resultado
if(pisua<0)
printf(lcd_putc,»\fPisua: 0.00 kg «);
printf(lcd_putc,»\nSakatu ATZERA»); //Visualiza el texto fijo del
total+=pisua;
lcd_gotoxy(7,2);
printf(lcd_putc,»%.2f «,total); //Visualiza el resultado
while((input(OK)==0)); //Itxaron OK askatu arte
delay_ms(20); //Erreboteak ekiditzeko
} //fin de while total
}//fin de if BERA
}//fin de while 1
}//fin de main
Lcd-an agertzen de menua hauxe da, ISIS-en simulatuta:
Lehenengo menuan pisu arrunta eta akumulatuaren artean aukeratu ahal izango da. OK botoia sakatu ezgero ondorengo pantaila azalduko litzateke.











- 16F88 Pic-a
- 7805-a
- 16X2 LCD-a
- 100nF-ko kondentsadorea
- 10k-ko 3 erresistentzia
- 4k7ko erresistentzia
- Konektoreak(2 pin 3 pin 4 pin eta 10 pin)
- Kableak
- Estainua

EGILEAK: Xabier Izagirre eta Eneko Fuentes