Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Arduino Lab Akcelerometr MMA7455
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
2
Akcelerometr cyfrowy MMA7455
Trzy osie XYZ ±2g/±4g/±8g Wyjście cyfrowe (10-bitowe) I²C/SPI Obudowa LGA-14 3mm x 5mm x 1mm Zygmunt Kubiak
3
Akcelerometr cyfrowy MMA7455
Autotest dla osi Z Zasilanie 2,4V – 3,6V Wykrywanie przekroczenia zadanego poziomu przyspieszenia i swobodnego spadania Zygmunt Kubiak
4
Akcelerometr cyfrowy MMA7455
Uproszczony model fizyczny sensora przyspieszeń Sensor zbudowany jest z elementów stałych i ruchomych Od strony elektrycznej sensor tworzy układ zmiennych pojemności (półmostek) Zygmunt Kubiak
5
Akcelerometr cyfrowy MMA7455
Uproszczony model fizyczny sensora przyspieszeń Sensor zbudowany jest z elementów stałych i ruchomych Od strony elektrycznej sensor tworzy układ zmiennych pojemności (półmostek) Zygmunt Kubiak
6
Akcelerometr cyfrowy MMA7455
Wykonanie Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak
7
Akcelerometr cyfrowy MMA7455
Interfejs I²C Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak
8
Akcelerometr cyfrowy MMA7455
Interfejs I²C (adres układu 0x1D) Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak
9
Akcelerometr cyfrowy MMA7455
Interfejs I²C (adres układu 0x1D) Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak
10
Akcelerometr cyfrowy MMA7455
Interfejs SPI Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak
11
Akcelerometr cyfrowy MMA7455
Interfejs SPI Zygmunt Kubiak
12
Akcelerometr cyfrowy MMA7455
Interfejs SPI Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak
13
Akcelerometr cyfrowy MMA7455
Moduł z układem MMA7455 Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak
14
Akcelerometr cyfrowy MMA7455
Połączenie z Arduino (I²C) Sensor zbudowany jest z !!! Uwaga rezystory podciągające są już na płytce Zygmunt Kubiak
15
Akcelerometr cyfrowy MMA7455
Sensor zbudowany jest z Od strony elektrycznej sensor Zygmunt Kubiak
16
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) // MMA7455 Accelerometer // // // By arduino.cc user "Krodal". // May // Open Source / Public Domain // // Fixes to union and type conversions by Arduino.cc user "Afroviking" // August // // Using Arduino // It will not work with an older version, since Wire.endTransmission() // uses a parameter to hold or release the I2C bus. // Zygmunt Kubiak
17
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Documentation: // - The Freescale MMA7455L datasheet // - The AN3468 Application Note (programming). // - The AN3728 Application Note (calibrating offset). // // The MMA7455 can be used by writing and reading a single byte, // but it is also capable to read and write multiple bytes. // // The accuracy is 10-bits. // Zygmunt Kubiak
18
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd #include <Wire.h> // Nazwy rejestrów zgodne z dokumentacją // Rejestr 0x1C czasami nazywany jest 'PW', a czasami 'PD'. // The two reserved registers can not be used. #define MMA7455_XOUTL 0x00 // Read only, Output Value X LSB #define MMA7455_XOUTH 0x01 // Read only, Output Value X MSB #define MMA7455_YOUTL 0x02 // Read only, Output Value Y LSB #define MMA7455_YOUTH 0x03 // Read only, Output Value Y MSB #define MMA7455_ZOUTL 0x04 // Read only, Output Value Z LSB #define MMA7455_ZOUTH 0x05 // Read only, Output Value Z MSB Zygmunt Kubiak
19
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd #define MMA7455_XOUT8 0x06 // Read only, Output Value X 8 bits #define MMA7455_YOUT8 0x07 // Read only, Output Value Y 8 bits #define MMA7455_ZOUT8 0x08 // Read only, Output Value Z 8 bits #define MMA7455_STATUS 0x09 // Read only, Status Register #define MMA7455_DETSRC 0x0A // Read only, Detection Source Register #define MMA7455_TOUT 0x0B // Temperature Output Value (Optional) #define MMA7455_RESERVED1 0x0C // Reserved #define MMA7455_I2CAD 0x0D // Read/Write, I2C Device Address #define MMA7455_USRINF 0x0E // Read only, User Information (Optional) #define MMA7455_WHOAMI 0x0F // Read only, "Who am I" value (Optional) #define MMA7455_XOUT8 0x06 // Read only, Output Value X 8 bits #define MMA7455_YOUT8 0x07 // Read only, Output Value Y 8 bits #define MMA7455_ZOUT8 0x08 // Read only, Output Value Z 8 bits #define MMA7455_STATUS 0x09 // Read only, Status Register #define MMA7455_DETSRC 0x0A // Read only, Detection Source Register #define MMA7455_TOUT 0x0B // Temperature Output Value (Optional) #define MMA7455_RESERVED1 0x0C // Reserved #define MMA7455_I2CAD 0x0D // Read/Write, I2C Device Address #define MMA7455_USRINF 0x0E // Read only, User Information (Optional) #define MMA7455_WHOAMI 0x0F // Read only, "Who am I" value (Optional) Zygmunt Kubiak
20
Akcelerometr cyfrowy MMA7455
#define MMA7455_XOFFL 0x10 // Read/Write, Offset Drift X LSB #define MMA7455_XOFFH 0x11 // Read/Write, Offset Drift X MSB #define MMA7455_YOFFL 0x12 // Read/Write, Offset Drift Y LSB #define MMA7455_YOFFH 0x13 // Read/Write, Offset Drift Y MSB #define MMA7455_ZOFFL 0x14 // Read/Write, Offset Drift Z LSB #define MMA7455_ZOFFH 0x15 // Read/Write, Offset Drift Z MSB #define MMA7455_MCTL 0x16 // Read/Write, Mode Control Register #define MMA7455_INTRST 0x17 // Read/Write, Interrupt Latch Reset #define MMA7455_CTL1 0x18 // Read/Write, Control 1 Register #define MMA7455_CTL2 0x19 // Read/Write, Control 2 Register #define MMA7455_LDTH 0x1A // Read/Write, Level Detection Threshold Limit Value #define MMA7455_PDTH 0x1B // Read/Write, Pulse Detection Threshold Limit Value #define MMA7455_PD 0x1C // Read/Write, Pulse Duration Value #define MMA7455_LT 0x1D // Read/Write, Latency Time Value (between pulses) #define MMA7455_TW 0x1E // Read/Write, Time Window for Second Pulse Value #define MMA7455_RESERVED2 0x1F // Reserved Program 1 (interfejs I²C) cd Zygmunt Kubiak
21
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Definicje bitów, wprowadzają zmianę // numeru bitu w definicję binarną. // Używając numer bitu, programowanie MMA7455 // przypomina mikrokontroler AVR. // Użycie "(1<<X)", lub "_BV(X)", // w Arduino powoduje ustawienie "bit(X)”. #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D #define MMA7455_D7 7 Zygmunt Kubiak
22
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Rejestr stanu #define MMA7455_DRDY MMA7455_D0 #define MMA7455_DOVR MMA7455_D1 #define MMA7455_PERR MMA7455_D2 // Rejestr sterowania trybem #define MMA7455_MODE0 MMA7455_D0 #define MMA7455_MODE1 MMA7455_D1 #define MMA7455_GLVL0 MMA7455_D2 #define MMA7455_GLVL1 MMA7455_D3 #define MMA7455_STON MMA7455_D4 #define MMA7455_SPI3W MMA7455_D5 #define MMA7455_DRPD MMA7455_D6 Zygmunt Kubiak
23
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Rejestr sterujący 1 #define MMA7455_INTPIN MMA7455_D0 #define MMA7455_INTREG0 MMA7455_D1 #define MMA7455_INTREG1 MMA7455_D2 #define MMA7455_XDA MMA7455_D3 #define MMA7455_YDA MMA7455_D4 #define MMA7455_ZDA MMA7455_D5 #define MMA7455_THOPT MMA7455_D6 #define MMA7455_DFBW MMA7455_D7 // Rejestr sterujący 2 #define MMA7455_LDPL MMA7455_D0 #define MMA7455_PDPL MMA7455_D1 #define MMA7455_DRVO MMA7455_D2 Zygmunt Kubiak
24
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Interrupt Latch Reset Register #define MMA7455_CLR_INT1 MMA7455_D0 #define MMA7455_CLR_INT2 MMA7455_D1 // Detection Source Register #define MMA7455_INT1 MMA7455_D0 #define MMA7455_INT2 MMA7455_D1 #define MMA7455_PDZ MMA7455_D2 #define MMA7455_PDY MMA7455_D3 #define MMA7455_PDX MMA7455_D4 #define MMA7455_LDZ MMA7455_D5 #define MMA7455_LDY MMA7455_D6 #define MMA7455_LDX MMA7455_D7 // I2C Device Address Register #define MMA7455_I2CDIS MMA7455_D7 // Default I2C address for the MMA7455 #define MMA7455_I2C_ADDRESS x1D Zygmunt Kubiak
25
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // When using an union for the registers and // the axis values, the byte order of the accelerometer // should match the byte order of the compiler and AVR chip. // Both have the lower byte at the lower address, // so they match. // This union is only used by the low level functions. typedef union xyz_union { struct { uint8_t x_lsb; uint8_t x_msb; uint8_t y_lsb; uint8_t y_msb; uint8_t z_lsb; uint8_t z_msb; } reg; struct { uint16_t x; uint16_t y; uint16_t z; } value; }; Zygmunt Kubiak
26
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd int led = 13; void setup() { int error; uint8_t c; Serial.begin(9600); Serial.println("Freescale MMA7455 accelerometer"); Serial.println("May 2012"); // Initialize the 'Wire' class for I2C-bus communication. Wire.begin(); // Initialize the MMA7455, and set the offset. error = MMA7455_init(); if (error == 0) Serial.println("The MMA7455 is okay"); else Serial.println("Check your wiring !"); Zygmunt Kubiak
27
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd // Read the Status Register MMA7455_read(MMA7455_STATUS, &c, 1); Serial.print("STATUS : "); Serial.println(c,HEX); // Read the "Who am I" value MMA7455_read(MMA7455_WHOAMI, &c, 1); Serial.print("WHOAMI : "); Serial.println(c,HEX); // Read the optional temperature output value (I always read zero) MMA7455_read(MMA7455_TOUT, &c, 1); Serial.print("TOUT : "); Serial.println(c,DEC); pinMode(led, OUTPUT); } Zygmunt Kubiak
28
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd void loop() { uint16_t x,y,z, error; double dX,dY,dZ; // The function MMA7455_xyz returns the 'g'-force // as an integer in 64 per 'g'. // set x,y,z to zero (they are not written in case of an error). x = y = z = 0; error = MMA7455_xyz(&x, &y, &z); // get the accelerometer values. dX = (int16_t) x / 64.0; // calculate the 'g' values. dY = (int16_t) y / 64.0; dZ = (int16_t) z / 64.0; Zygmunt Kubiak
29
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd Serial.print("error = "); Serial.print(error, DEC); Serial.print(", xyz g-forces = "); Serial.print(dX, 3); Serial.print(", "); Serial.print(dY, 3); Serial.print(", "); Serial.print(dZ, 3); Serial.println(""); Zygmunt Kubiak
30
Akcelerometr cyfrowy MMA7455
Program 1 (interfejs I²C) cd if (dZ < 0.8) { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) } else { digitalWrite(led, LOW); // turn the LED off by making the voltage LOW } delay(100); } Zygmunt Kubiak
31
Dziękuję Zygmunt Kubiak
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.