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:
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:
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 |
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).
#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.
}
}
#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.
}
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.
}