2013/08/07

App Inventor erabiliz bluetooth bidez sentsore baten irakurketa burutzea

Jarduera honetan Android gailu bat PIC edota Arduino mikrokontroladore batekin bluetooth bidez komunikatuko da LM35 tenperatura sentsore analogiko bat irakurtzeko.






Helburuak

Jarduerak jarraian aipatzen diren helburu hauek beteko ditu:

- Interfaze grafikoko elementu gehiago ezagutzea.
- Bloke editoreko aukera gehiago ezagutzea.
- Bluetooth komunikazioa lantzea.
- PIC bat eta Arduino bat LM35 edota orokorrean sentsore analogiko bat kontrolatzeko programatzea.
- Android gailu batekin sentsoreen irakurketa burutzea.


Materiala

-PC bat.
-Android gailu mugikor bat.
-PIC School, PIC bat (16f887 bat erabili da kasu honetan), arduino bat eta beharrezkoa den erreminta( hariak, goraizeak,...)
-LM35 tenperatura sentsorea.
-PIC-arentzat Bluetooth modulua: LINVOR JY-MCU
 

Jardueraren sekuentzia  

1.  Aurreko sarrera batean aipatutako eta ikusitako bideotutorialei jarraituz Android aplikazioa sortu behar da. Jarraian, I. eta II. ilustrazioan erakusten dira garatu beharreko aplikazioaren diseinu lehioa eta bloke editorea:

I. ilustrazioa: App-aren diseinu lehioa

II. ilustrazioa: App-aren bloke editorea
 2. Aplikazioak bluetooth bidez jasotzen dituen datuen formatua kontuan hartuz PIC-a programatzea izango da hurrengo pausua. PIC-a programatzen ikasteko aurreko sarrera batean aipatutako bideotutoriala erabil dezakezue.

 Mikrokontroladoreak tenperatura sentsorea irakurriko du etengabe eta behin jasotako balorea tratatu ondoren LCD-an ikusiko da eta Android gailura bidaliko da bluetooth bitartez.

 Kontuan hartzeko puntuak hauexek dira App hau garatzeko garaian:

  • App-aren diseinua garatzerakoan timer bat gehitu behar zaio interfazeari. Modu honetan background-ean guk definituriko denbora tartean burutuko dira bluetooth bitarteko irakurketak eta ondorengo bisualizazioak pantailan. Komenigarria da timer hau mikrokontrolagailuan definituko dugun erlojua baino motelagoa izatea.
  • LCD-aren liburutegiak erabiliko direla adierazi behar zaiola PIC-ari.
  • PIC-ak erabiliko duen erlojua kanpokoa edota barrukoa izango den definitu behar zaio.
  • Irakurketa balioa ºC-tara pasatzeko 0,48875 koefizienteaz biderkatu behar da. Koefiziente hau 5/1023 zatitzetik eta 100-ekin biderkatzeagatik lortzen da, 5V-etara elikadura erabiltzen dugulako eta mikrokontrolagailuaren bihurgailu analogiko-digitalaren erresoluzioa 10 bit-ekoa delako, hau da, 2^10-1=1023 (1023 posizio ezberdin).

Jarraian PIC mikrokontrolagailuari grabatu beharreko programa azaltzen da. Ulergarriago egiteagatik komentarioak konbinatu dira.
#include <16f887.h>                    //PIC-aren definizioen fitxategia
#fuses HS,NOWDT
#device adc=10                   
 //adc-a 10 bitekoa izateko definizioa
#use delay(clock=4000000)
#use RS232(baud=9600, xmit=PIN_B6, rcv=PIN_B7)  
 //Serie portuaren definizioa
//#use standard_io(a)

#include "LCD.C"                  
 //LCD-aren funtzioen libreria

void main(void)
{            
   int8 temperatura;
   float medicion, temper;   
   lcd_init();                    
//LDC-a inizializatu
   set_tris_a(0b00000001);               
//A portuaren sarrera irteerak definitu
//   output_a(0);
   setup_adc(ADC_CLOCK_INTERNAL);    
//ADC-ren erlojua barrukoa izango dela definitu
   setup_adc_ports(ALL_ANALOG);      
 //Anologikoak izan daitezkeen irteerak analogikoak direla definitu
   output_bit(PIN_A1, 1);            
   delay_ms(1000);
   output_bit(PIN_A1, 0);
   delay_ms(1000);
   printf(lcd_putc, "\fTenperatura:");        
//LCD-aren lehenengo lerroan Tenperatura idatzi
 
 while (1)
   {
   set_adc_channel (0);                    
// RA0 aukeratzen du sarrera analogiko bezala
   delay_us (20);            
//Aukeratu eta gero, aurreneko neurketa baino lehenago 20us itxaron behar dira gutxienez
   medicion=read_adc ();          
//Neurketa analogikoa
   lcd_gotoxy(1,2);          
 //LCD-aren bigarren lerroaren lehenengo posizioan jarri
//   setup_adc (adc_off);                   
// ADC Itzali.
   temper=medicion*(0.48875);           
 // Neurketa gradu zentigradora pasa. ºC
    delay_ms(1000);
    printf(lcd_putc,"%02.1f",temper);  
// xxx.x °C
    temperatura=(int)temper;            
// Temper float bat da eta int batean bihurtzen dugu
    putc(temperatura);              
 // temperatura serie busetik bidaltzen dugu mugikorrean ikusteko.
   }
}


3. Azkenik PIC school-a erabiliz gailu eta osagai guztiak kableatuko dira III. ilustrazioko eskemari jarraituz, proiektuak ongi funtzionatzen duela baieztatzeko.

III. ilustrazioa: proiektuaren eskema

4. Aipatu bezala jarduera hau Arduino mikrokontrogailua erabiliz ere garatu dugu. Kasu honetan ez da LCD-a erabili datuak bisualizatzeko, baizik eta zuzenean irakurketa egin eta bluetooth bidez Android gailura bidaliko dira. App-aren programazioa ez da aldatzen, soilik jarraian ikus dezakezuen mikrokontrolagailuaren programazioa:
int sensorPin = A0;          //A0 Pinaren deklarazioa

int temperatura = 0;        
//Tenperaturarentzako aldagaia
char temper = 0;         
//Tenperaturarentzako aldagaia

void setup(){
 Serial.begin (9600);        
//Serie komunikazioa konfiguratu
}

void loop(){
                     
//Tenperaturaren kalkulua 5v erreferentzia erabilita
temperatura = (5.0 * analogRead(sensorPin)*100.0)/1023.0;
temper = (int)temperatura;         
//Aldagaiaren konbertsioa
Serial.write (temper);            
//serie portuan tenperatura idatzi
delay (1000);                
//hurrengo neurketa egin baino lehen segundo bat itxaron.
}


 5. Bukatzeko PIC school-a edota edozein ProtoBoard erabiliz gailu eta osagai guztiak kableatuko dira IV. ilustrazioko eskemari jarraituz, proiektuak ongi funtzionatzen duela baieztatzeko.

IV. ilustrazioa: proiektuaren eskema