Dvojosí MEMS akcelerometer: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 124: | Riadok 124: | ||
} | } | ||
</source> | </source> | ||
<source lang="c"> | |||
void writeRegister(int deviceAddress, byte address, byte val) { | |||
Wire.beginTransmission(deviceAddress); // zaciatok prenosu do zariadenia | |||
Wire.write(address); // poslanie adresy registra | |||
Wire.write(val); // poslanie hodnoty na zapis | |||
Wire.endTransmission(); // koniec prenosu | |||
} | |||
int readRegister(int deviceAddress, byte address){ | |||
int v; | |||
Wire.beginTransmission(deviceAddress); | |||
Wire.write(address); // registracia na citanie | |||
Wire.endTransmission(); | |||
Wire.requestFrom(deviceAddress, 1); // nacitanie bytu | |||
while(!Wire.available()) { | |||
// waiting | |||
} | |||
v = Wire.read(); | |||
return v; | |||
} | |||
</source> | |||
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu! | Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu! | ||
Kompletný zdrojový kód: [[Médiá:cube.pde|cube.pde]] a [[Médiá:gyroskop.ino|gyroskop.ino]] | |||
=== Overenie === | === Overenie === |
Verzia z 17:40, 7. máj 2019
Autori: | Matej Furmánek, Ľubomír Halač | |
Študijný odbor: | Aplikovaná mechatronika a elektromobilita | 1. Ing. (2019) |
Zadanie
Využite dvojosí MEMS akcelometer L3G4200D na vytvorenie aplikácie ktorá bude podľa zmeny súradníc akcelometra meniť barvu pozadia programu.
Úlohy
- Nájdite si datasheet k danému senzoru
- Nájdite si schémy zapojenia dosky
- Na základe predošlých vedomostí navrhnite spôsob pripojenia k riadiacej jednotke
- Napíšte základný demonštračný program využívajúci vaše funkcie
- Vymyslite a demonštrujte vhodnú aplikáciu
![](/sensorwiki/images/thumb/3/36/Parallax_L3G4200D.jpg/300px-Parallax_L3G4200D.jpg.png)
Literatúra:
Komponenty
Na vypracovanie zadania sme použili nasledujúce komponenty:
- 1 x Vývojová doska Arduino
- 1 x dvojosí MEMS akcelometer L3G4200D
- 1 x Mini USB kábel
- Prepojovacie kábliky
- Software - Arduino IDE
- Software - Processing
Analýza
L3G4200D je 3-osový snímač uhlovej rýchlosti s digitálnym sériovým rozhraním I2C a SPI. Modul sníma plnú stupnicu ± 250 / ± 500 / ± 2000 dps a je schopný merať rýchlosti s voliteľnou šírkou pásma. Modul L3G4200D môže byť nakonfigurovaný na generovanie signálov prerušení nezávislým budením. Prahové hodnoty a časovanie generátora prerušení sú programovateľné používateľom za behu.
Vlastnosti
- Napájacie napätie: 3V - 5V
- Merací rozsah: 250 / 500 / 2000 dps
- Prevádzková teplota: -40°C až +85°C
Rozhrania
- I2C (až do 400 kHz)
- SPI (10 MHz)
- popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.)
- obrázok zapojenia vývodov použitej súčiastky
- odkaz na katalógový list
- priebehy dôležitých signálov
- este jedna polozka
Popis riešenia
Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru (nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.
Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo nahrať už aspoň 10 študentov.
![](/sensorwiki/images/thumb/3/31/MojObrazok.jpg/250px-MojObrazok.jpg)
Algoritmus a program
Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili. Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu. Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.
Vyberte podstatné časti zdrojového kódu, použite na to prostredie source:
int L3G4200D_Address = 105;
/*Nastavenie I2C adresy*/
int x;
int y;
int z;
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println("starting up L3G4200D");
setupL3G4200D(2000); // Nastavenie L3G4200 na 2000 deg/sec
void loop(){
getGyroValues(); // Update hodnoty x, y, a z
Serial.print(x);
Serial.print(",");
Serial.print(y);
Serial.print(",");
Serial.println(z);
delay(100); //Delay aby boli hodnoty citatelnejsie
}
/*funkcia na ziskanie aktualnych suradnic x,y,z*/
void getGyroValues(){
byte xMSB = readRegister(L3G4200D_Address, 0x29);
byte xLSB = readRegister(L3G4200D_Address, 0x28);
x = ((xMSB << 8) | xLSB);
byte yMSB = readRegister(L3G4200D_Address, 0x2B);
byte yLSB = readRegister(L3G4200D_Address, 0x2A);
y = ((yMSB << 8) | yLSB);
byte zMSB = readRegister(L3G4200D_Address, 0x2D);
byte zLSB = readRegister(L3G4200D_Address, 0x2C);
z = ((zMSB << 8) | zLSB);
}
void writeRegister(int deviceAddress, byte address, byte val) {
Wire.beginTransmission(deviceAddress); // zaciatok prenosu do zariadenia
Wire.write(address); // poslanie adresy registra
Wire.write(val); // poslanie hodnoty na zapis
Wire.endTransmission(); // koniec prenosu
}
int readRegister(int deviceAddress, byte address){
int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // registracia na citanie
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1); // nacitanie bytu
while(!Wire.available()) {
// waiting
}
v = Wire.read();
return v;
}
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
Kompletný zdrojový kód: cube.pde a gyroskop.ino
Overenie
Nezabudnite napísať čosi ako užívateľský návod. Z neho by malo byť jasné čo program robí, ako sa prejavuje a aké má užívateľské rozhranie (čo treba stlačiť, čo sa kde zobrazuje). Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji, odfotografujte ho.
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.