Components and supplies
MMA8452Q Low-Power Accelerometer
Arduino Nano R3
Female/Female Jumper Wires
Project description
Code
Accelerometer
arduino
1#include <Wire.h> 2 3//#include <SFE_MMA8452Q.h> 4#include <SparkFun_MMA8452Q.h> 5//#include <MMA8452Q.h> 6 7//Cria uma instancia do MMA8452 chamada acelerometro 8//com endereco I2C 0x1C (pino SA0 em LOW/Desligado) 9MMA8452Q acelerometro(0x1C); 10 11 12void setup() { 13 Serial.begin(9600); 14 Serial.println("Teste de comunicacao MMA8452"); 15 acelerometro.init(); //Inicializa o acelerometro com o valores padrao de +/-2g e saida de 800 Hz 16 17 18 if (! acelerometro.init()) { 19 Serial.println("Couldnt start"); 20 while (1); 21 } 22 Serial.println("MMA8451 found!"); 23 24 25 //Utilize a linha abaixo para inicializar o acelerometro com 26 //+/-2g, 4g, or 8g, usando SCALE_2G, SCALE_4G, ou SCALE_8G 27 //acelerometro.init(SCALE_4G); 28 //Utilize a linha abaixo para determinar tambem a frequencia 29 //de saida do acelerometro (padrao de 800 Hz), utilizando 30 //como segundo parametro ODR_800 (800 Hz), ODR_400 (400 Hz), 31 //ODR_200 (200 Hz), ODR_100 (100 Hz), ODR_50 (50 Hz), 32 //ODR_12 (12.5 Hz), ODR_6 (6.25 Hz), ou ODR_1 (1.56 Hz) 33 acelerometro.init(SCALE_8G, ODR_800); 34} 35 36void loop() { 37 //A linha abaixo aguarda o envio de novos dados pelo acelerometro 38 if (acelerometro.available()) { 39 //Efetua a leitura dos dados do sensor 40 acelerometro.read(); 41 //acelerometro.read() atualiza dois grupos de variaveis: 42 //* int x, y, e z armazena o valor de 12 bits lido do 43 //acelerometro 44 // * float cx, cy, e cz armazena o calculo da aceleracao 45 //dos valores de 12 bits. Essas variaveis estao em unidades de "g" 46 // printAccels(); 47 48 //Mostra as coordenadas lidas do sensor 49 printCalculatedAccels(); 50 delay(50); 51 //Selecione a linha abaixo para mostra os valores digitais 52 //printAccels(); 53 54 //Mostra a orientacao (retrato/paisagem/flat) 55 //printOrientation(); 56 57 Serial.println(); 58 if (acelerometro.cx == 0) 59 Serial.println("origem"); 60 smoothing_Readings(); 61 float averagey; 62 Serial.print("Med_y"); 63 Serial.print (averagey); 64 65 /* 66 67 float averagex; 68 69 float averagez; 70 Serial.print(averagex); 71 Serial.println("AVERAGEx"); 72 Serial.print(averagey); 73 Serial.println("AVERAGEy"); 74 Serial.print(averagez); 75 Serial.println("AVERAGEz"); 76 */ 77 } 78} 79//Funções automáticas da library!!! 80 81void printAccels() { 82 Serial.print(acelerometro.x, 3); 83 Serial.print("t"); 84 Serial.print(acelerometro.y, 3); 85 Serial.print("t"); 86 Serial.print(acelerometro.z, 3); 87 Serial.print("t"); 88 89} 90void printCalculatedAccels() { 91 Serial.print(" x: "); 92 double x= ((acelerometro.cx * 10)); 93 Serial.print(x); 94 Serial.print("m/s^2 "); 95double limitX = constrain(x, -8, 8); //limtar o valor das amostraS ao valor máximo da escala "8G" 96 double X = map(limitX, -8, 8, -90, 90); //converter os valores máximos e mínimos de aceleração em graus! 97 Serial.print(X); //"Our" new value for x 98 Serial.print("º "); 99 if (x > 0) { 100 Serial.print("Forward"); 101 } else { 102 Serial.print("Backward"); 103 } 104 105 Serial.print(" y: "); 106 double y = ((acelerometro.cy * 10)); 107 Serial.print(y); 108 Serial.print("m/s^2 "); 109 double limitY = constrain(y, -8, 8); //limtar o valor das amostraS ao valor máximo da escala "8G" 110 double Y = map(limitY, -8, 8, -90, 90); //converter os valores máximos e mínimos de aceleração em graus! 111 Serial.print(Y); 112 Serial.print("º "); 113 if (y > 0) { 114 Serial.print(",Left"); 115 } else { 116 Serial.print(",Right"); 117 } 118 Serial.print(" z: "); 119 double z = ((acelerometro.cz * 10)); 120 Serial.print(z); 121 Serial.print("m/s^2 "); 122 double limitZ = constrain(z, -8, 8); 123 double Z = map(limitZ, -8, 8, -90, 90); 124 Serial.print(Z); 125 Serial.print("º "); 126 if (acelerometro.cz > 0) { 127 Serial.print(",UP"); 128 } else { 129 Serial.print(",DOWN"); 130 } 131} 132void printOrientation() { 133 //acelerometro.readPL() retorna um byte contendo informacoes sobre 134 //a orientacao do sensor (retrato/paisagem) 135 //PORTRAIT_U (Retrato Up/Para cima), PORTRAIT_D (Retrato Down/Para Baixo), 136 //LANDSCAPE_R (Paisagem right/direita), LANDSCAPE_L (Paisagem left/esquerda) 137 //e LOCKOUT (bloqueio) 138 /* byte pl = acelerometro.readPL(); 139 switch (pl) { 140 case PORTRAIT_U: 141 Serial.print("Retrato Para Cima"); 142 break; 143 case PORTRAIT_D: 144 Serial.print("Retrato Para Baixo"); 145 break; 146 case LANDSCAPE_R: 147 Serial.print("Paisagem Direita"); 148 break; 149 case LANDSCAPE_L: 150 Serial.print("Paisagem Esquerda"); 151 break; 152 case LOCKOUT: 153 Serial.print("Plano"); 154 break; 155 */ 156}
Downloadable files
untitled
untitled
untitled
untitled
Comments
Only logged in users can leave comments
smuqui
0 Followers
•0 Projects
Table of contents
Intro
1
0