Operácie

Dvojosí MEMS akcelerometer: Rozdiel medzi revíziami

Zo stránky SensorWiki

Riadok 76: Riadok 76:
Serial.println("starting up L3G4200D");
Serial.println("starting up L3G4200D");
setupL3G4200D(2000); // Nastavenie L3G4200 na 2000 deg/sec
setupL3G4200D(2000); // Nastavenie L3G4200 na 2000 deg/sec
delay(1500); //čakanie, kým je senzor pripravený
}
</source>
</source>
<source lang="c">
<source lang="c">
Riadok 88: Riadok 91:
Serial.println(z);
Serial.println(z);


delay(100); //Delay aby boli hodnoty citatelnejsie
delay(100); //Delay aby boli hodnoty čitatelnejsie
}
}
/*funkcia na ziskanie aktualnych suradnic x,y,z*/
/*funkcia na získanie aktuálnych súradníc x,y,z*/
void getGyroValues(){
void getGyroValues(){


Riadok 109: Riadok 112:
<source lang="c">
<source lang="c">
void writeRegister(int deviceAddress, byte address, byte val) {
void writeRegister(int deviceAddress, byte address, byte val) {
Wire.beginTransmission(deviceAddress); // zaciatok prenosu do zariadenia
Wire.beginTransmission(deviceAddress); // začiatok prenosu do zariadenia
Wire.write(address); // poslanie adresy registra
Wire.write(address); // poslanie adresy registra
Wire.write(val); // poslanie hodnoty na zapis
Wire.write(val); // poslanie hodnoty na zápis
Wire.endTransmission(); // koniec prenosu
Wire.endTransmission(); // koniec prenosu
}
}
Riadok 122: Riadok 125:
Wire.endTransmission();
Wire.endTransmission();


Wire.requestFrom(deviceAddress, 1); // nacitanie bytu
Wire.requestFrom(deviceAddress, 1); // načítanie bytu


while(!Wire.available()) {
while(!Wire.available()) {
// waiting
// čakanie
}
}


Riadok 137: Riadok 140:
<source lang="c">
<source lang="c">
void setup() {
void setup() {
   size(200,200);            // Velkost pozadia
   size(200,200);            // Veľkosť pozadia
    
    
//println(Serial.list());    // List dostupnych portov
   
   
  println(Serial.list()[4]);
  println(Serial.list()[4]);
    
    
                             // Vyber portu
                             // Výber portu
  port = new Serial(this, Serial.list()[4], 9600);  
  port = new Serial(this, Serial.list()[4], 9600);  
}
}
//Funkcia ktora vykresly farebne pozadie
//Funkcia, ktorá vykresly farebné pozadie
void draw() {
void draw() {
         // Na farbu su pouzite udaje zo serial portu.   
         // Na farbu su pouzite udaje zo serial portu.   
Riadok 154: Riadok 156:
void serialEvent(Serial port) {
void serialEvent(Serial port) {


   // Udaje zo serial portu su nacitavane zo serialEvent()  
   // Údaje zo serial portu sú načítané zo serialEvent()  


   String input = port.readStringUntil(lf);
   String input = port.readStringUntil(lf);

Verzia z 03:07, 14. 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



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 riešenia

Schéma zapojenia MEMS akcelerometra k arduinu

Algoritmus a program

Program bol napísaný v jazyku C a otestovaný v Arduinou IDE. Jeho úlohou je vyčítať x, y, z súradnice z L3G4200D a následne tieto údaje vypísať na sériovú linku.

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

delay(1500); //čakanie, kým je senzor pripravený
}
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 čitatelnejsie
}
/*funkcia na získanie aktuálnych súradníc 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); // začiatok prenosu do zariadenia
Wire.write(address); // poslanie adresy registra
Wire.write(val); // poslanie hodnoty na zápis
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); // načítanie bytu

while(!Wire.available()) {
// čakanie
}

v = Wire.read();
return v;
}

Uzivatelské rozhranie sme vytvorili v Processingu

void setup() {
  size(200,200);             // Veľkosť pozadia
  
 
 println(Serial.list()[4]);
  
                             // Výber portu
 port = new Serial(this, Serial.list()[4], 9600); 
}
//Funkcia, ktorá vykresly farebné pozadie
void draw() {
        // Na farbu su pouzite udaje zo serial portu.   
 background(r,g,b); 
}

void serialEvent(Serial port) {

  // Údaje zo serial portu sú načítané zo serialEvent() 

  String input = port.readStringUntil(lf);
  if(input!=null){
    println(input);
    int[] vals = int(splitTokens(input, ","));
    if(vals[0]<0){
      vals[0]=0;
    }
    if(vals[1]<0){
      vals[1]=0;
    }
    if(vals[2]<0){
      vals[2]=0;
    }
    r = vals[0]/100;
    g = vals[1]/100;
    b = vals[2]/100;
     println( "R:" + r);
     println( "G:" + g);
     println( "B:" + b);
  }

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.


Späť na zoznam projektov...