Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

3º Programa - Utilizando Acelerômetro

Imprimir
Avaliação do Usuário: / 0
PiorMelhor 

Introdução

Neste tutorial farei um exemplo de uso do acelerômetro, que é outro recurso integrado da placa FDM-KL25Z.

O MMA8451Q, que é a especificação do acelerômetro, é conectado ao KL25Z via interface de comunicação serial I2C, com a seguinte pinagem:

· SCL = PTE24

· SDA = PTE25

Figura 01

Faremos uso dessa pinagem para manipular o acelerômetro.

Terceiro Exemplo – Acelerômetro

Crie um novo programa. Dê o nome de Exemplo-Acelerometro. Lembre-se de alterar o template para Empty Program. Depois crie um novo arquivo e dê o nome de acelerometro.cpp. Importe a biblioteca mbed.

Para o acelerômetro funcionar precisaremos importar a biblioteca MMA8451Q, já que MMA8451Q é a especificação do acelerômetro da placa FRM-KL25Z. Faremos a importação de maneira diferente.  Acesse o site https://developer.mbed.org/ , clique no menu Hardware -> Components. Selecione a opção Sensors.



Figura 02


Em seguida, clique em MMA8451Q Accelerometer.

Figura 03

 

Você será redirecionado para um link onde será possível importar a biblioteca para seu programa. Para isso clique em Import Library, como mostra a Figura 04.

Figura 04

Selecione em qual programa a biblioteca deverá ser adicionada em Target Path, como mostra a Figura 04, e clique no botão Import.

 

Figura 05

 

O código é o seguinte:

#include "mbed.h"

#include "MMA8451Q.h"

// Definição de acordo com o modelo do KIT

#define MMA8451_I2C_ADDRESS (0x1d<<1)

int main(void)

{

MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);

PwmOut ledr(LED1);

PwmOut ledg(LED2);

PwmOut ledb(LED3);

ledr = 1.0;

ledg = 1.0;

ledb = 1.0;

while (true) {

ledr = 1.0 - abs(acc.getAccX());

ledg = 1.0 - abs(acc.getAccY());

ledb = 1.0 - abs(acc.getAccZ());

wait(0.1);

}

}

 

A instrução MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS) cria um objeto acc pertencente a classe MMA8451Q (biblioteca MMA8451Q.h) indicando a pinagem a ser utilizada e aloca os pinos da I2C.

 

A instrução acc.getAccX() capta o ângulo no eixo X, acc.getAccY() capta o ângulo no eixo Y, acc.getAccZ() capta o ângulo no eixo Z. A instrução abs pega o valor absoluto (inteiro) que o comando acc.getAcc retorna.

Neste exemplo conforme a placa é movimentada a cor do LED sofre alterações. O código verifica em qual dos eixos há movimentação, qual o ângulo e aplica intensidade no LED. Se for detectado movimentação no eixo X, o LED vermelho recebe intensidade, se for o eixo Y o LED verde recebe intensidade e se for o eixo Z o LED azul recebe intensidade.

 

Agora vamos alterar o código para que as cores alterem a cada 45° em cada eixo, sem mistura de cores, ou seja, se está azul ao movimentar 45° no eixo x fica vermelho, chegando aos 45° do eixo y muda pra verde e chegando aos 45° do eixo z fica azul. O código é o seguinte:

 

#include "mbed.h"

#include "MMA8451Q.h"

#include "math.h"

#define MMA8451_I2C_ADDRESS (0x1d<<1)

int main(void) {

MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);

PwmOut ledr(LED1);

PwmOut ledg(LED2);

PwmOut ledb(LED3);

ledr = 1.0;

ledg = 1.0;

ledb = 1.0;

long double calc = sqrt(2.0)/2;

while (true) {

ledr = (1.0 - (abs(acc.getAccX()))/calc);

ledg = (1.0 - (abs(acc.getAccY()))/calc);

ledb = (1.0 - (abs(acc.getAccZ()))/calc);

wait(0.001);

}

}

 

Primeiro foi calculado o valor de seno de 45°. A ideia foi pegar através do acc.getAcc o ângulo (tanto pra x, y e z) dividir pelo seno do ângulo e tirar de um fazendo com que o LED acenda.

You are here: