Table of Contents

Accelerometer

Vajalikud teadmised: [HW] Kasutajaliidese moodul, [HW] Kombomoodul,
[AVR] Analoog-digitaalmuundur, [LIB] Analoog-digitaalmuundur, [LIB] Graafiline LCD

Teooria

Kiirendusandur

Kiirendusandurit kasutatakse peamiselt kiiruste muutuste mõõtmiseks. Samuti saab kiirendusanduriga mõõta anduri nurka maapinna suhtes. Kiirendusandurid on konstrueeritud ja valmistatud mikroelektromehaanika tehnoloogial (inglise keeles Microelectromechanical system, lühend MEMS), kus elektroonika ja mehaanika komponendid on integreeritud mikrotasandil.

Tüüpiline kiirendusandur koosneb mikrofreesitud mahtuvuslikust andurelemendist (g-rakk) ja mõõte- ning andmetöötluselektroonikast. Mõõteelement koos elektroonikaga on suletud vee ja õhukindlalt anduri korpusesse. G-rakk on mikrokiipi söövitatud polüsilikooni kiht, mis koos kahe fikseeritud mahtuvusliku plaadiga moodustab kaks kondensaatorit. Kui andurile rakendada mingi kiirendus, siis g-raku keskmine kiht liigub vastavalt ühe või teise fikseeritud plaadi poole ning kondensaatorite mahtuvus muutub proportsionaalselt kiirendusele. Andurisse sisse ehitatud elektroonika tegeleb g-rakkude mõõtmisega ning analüüsimisega. Elementidest tulev informatsioon võimendatakse, filtreeritakse ning teisendatakse pingeks, mida saab otse ühendada mikrokontrolleri sisendiga. Tavaliselt lisatakse anduritesse ka 0G väljund, millega on võimalik kontrollerisse tekitada katkestus juhul kui andur tuvastab 0G ehk kukkumise.

Praktika

Kodulabori lisakomplektiga on kaasas lihtne 3-teljeline MMA7361L kiibil põhinev kiirendusandur. Kiirendusandur võimaldab valida kahe erineva mõõtepiirkonna vahel, milleks on ±1.5g ja ±6g. Anduril on sisseehitatud temperatuuri kompensatsioon, madalpääsu filter, testfunktsioon ja madala voolutarbega puhkeoleku režiim.

Kiirendusanduri viigud
Tähis plaadil Signaali tüüp Kirjeldus
0GD Digitaalväljund 0G tuvastamise
signaal
X Analoogväljund X-telje väljundsignaal
Y Analoogväljund Y-telje väljundsignaal
Z Analoogväljund Z-telje väljundsignaal
G Toide Maa
+ Toide Toide 3.0-3.6 V
G Toide Maa
SLEEP Digitaalsisend Puhkerežiim,
madal olek: aktiivne
GS Digitaalsisend Režiimi valik
ST Digitaalsisend Enesetesti funktsioon

Kiirendusanduri lugemiseks on vaja kasutada kontrolleril kolme ADC sisendit (1 iga telje jaoks). Teiste anduri funktsioonide jaoks saab kasutada digitaalsignaale. Näitekood näitab kanalitest mõõdetud ADC väärtust ning joonistab kiirendusanduri lugemid ka punktidena LCD-le.

// Kodulabori kiirendusanduri näidisprogramm
// Loetakse kiirendusanduri kolme telje väärtused ja kuvatakse need ekraanil
// X ja Y telje näidud  visualiseeritakse tingliku punktina ekraanil
#include <homelab/pin.h>
#include <homelab/adc.h>
#include <homelab/module/lcd_gfx.h>
 
// Väärtuste teisendusfunktsioon
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
	return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
 
// Põhiprogramm
int main(void)
{
	// LCD ekraani algseadistamine
	lcd_gfx_init();
	lcd_gfx_write_string("Kiirendusandur");
 
	// ADC muunduri algseadistamine
	adc_init(ADC_REF_AVCC,ADC_PRESCALE_128);
 
	// Lõputu tsükkel
	while (1)
	{
		char buffer[60];
 
		// x, y, z telgede analoogväärtuse lugemine
		uint16_t x = adc_get_value(1);
		uint16_t y = adc_get_value(2);
		uint16_t z = adc_get_value(3);
 
		// Kiirendusanduri telgede lugemite teisendamine ekraani
		// mõõtkavasse, et neid saaks punktidena ekraanil kuvada
		uint16_t x_map = map(x,950,1300,128,0);
		uint16_t y_map = map(y,1000,1400,0,160);
 
		// Lugemite teisendamine tekstiks ja LCD ekraanile kuvamine
		sprintf(buffer,"x: %4d\ny: %4d\nz: %4d\n",x,y,z);
		lcd_gfx_goto_char_xy(0,2);
		lcd_gfx_write_string(buffer);
 
		// Punktide joonistamine
		lcd_gfx_drawPixel(x_map, y_map);
		sw_delay_ms(10);
	}
}