Avaliação do Usuário

Estrela ativaEstrela ativaEstrela ativaEstrela inativaEstrela inativa

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.

Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa

Introdução

No primeiro artigo sobre a FRDM-KL25Z falei sobre a placa, seus recursos principais, seu ambiente de desenvolvimento e um primeiro exemplo.

 

A figura abaixo mostra a pinagem para manipulação do LED, sendo LED1 o vermelho, LED2 o verde e LED3 o azul.

 

Figura 01

 

Neste artigo vamos codificar um semáforo. Acesse o link https://developer.mbed.org/ e entre na sua conta. Depois clique na opção Compiler para entrar no ambiente de desenvolvimento.

 

Segundo Exemplo - Semáforo

Como faremos um novo código, clique no Menu New -> New Program. A Figura 02 mostra a tela que será exibida.

Figura 02

Diferente do que fizemos no primeiro exemplo, faremos alterações quanto ao Template e o Program Name. No template selecione a opção Empty Program e dê o nome do programa de Exemplo-Semaforo. Por fim, clique em OK.

Agora vamos criar um arquivo com o código a ser implementado. Clique com o botão da direita em Exemplo-Semaforo –> New File.

Figura 03

Dê o nome semaforo.cpp para seu arquivo.

Figura 04

O próximo passo é importar a biblioteca mbed. Clique com o botão da direita em Exemplo-Semaforo  -> Import Library -> From Import Wizard.

Figura 05 – Importando a biblioteca MBED

Na aba libraries, pesquise por mbed, selecione a biblioteca e clique em Import. Prefira as bibliotecas cujo Author seja mbed oficial.

Figura 06 – Pesquisando e selecionando a biblioteca MBED

Certifique-se que a importação está correta e clique em Import.

Figura 07

 

Agora vamos codificar. Clique duas vezes no semáforo.cpp e insira o código abaixo.

#include "mbed.h"

DigitalOut led1(LED1);

DigitalOut led2(LED2);

int main() {

led1 = 0;

led2 = 1;

while(1) {

wait(7);

led1 = 1;

led2 = 0;

wait(5);

led1 = 0;

wait(2);

led2 = 1;

}

}

Neste código declaramos duas variáveis do tipo DigitalOut para controlar os LEDs: led1 para vermelho (LED1) e led2 para verde (LED2). Como já ditto no exemplo anterior, quando atribuimos 0 a uma variável que contra o LED estamos acendendo o LED e 1 apagando. Entao estamos iniciando o código com o LED vermelho aceso e o verde apagado. Dentro das estrutura de repetição o LED vermelho fica aceso por 7s. Em seguida apagamos o vermelho, acendemos o verde e esperamos 5s. Por fim, acendemos o vermelho e como o verde já está aceso, temos a cor amarela como resultado dos LEDs vermelho e verde acesos. Esperamos 2s e o processo é repetido.

 

Compile e copie o arquivo .bin gerado para o flash-drive do MBED. Desconecte e reconecte o USB e veja o resultado.

Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa

Introdução

A placa Freescale Freedom FRDM-KL25Z é uma plataforma de desenvolvimento de aplicações de baixo custo e com baixo consumo de energia. Essa placa possui pinout Arduino, permitindo o acesso aos pinos do microcontrolador e o uso de shields presentes no mercado.

Neste artigo falarei um pouco sobre os recursos disponíveis nesta placa bem como sobre seu ambiente de desenvolvimento.

 

O hardware da placa

O microcontrolador presente nesta placa é o MKL25Z128VLK4. Ela possui 128 KB de memória flash, 16 KB de memória SRAM, USB OTG (FS) e opera a até 48 MHz.

Os recursos integrados, como mostrado na Figura1, são:

· Touch Slider capacitivo

· LED RGB

· Acelerômetro 3D

· Conectores de expansão Arduino R3

 

 

Figura 01 - FRDM-KL25Z

Ligando a FRDM-KL25Z ao PC

Como mostra a figura2, há duas portas USB para ligação: uma denominada USB SDA e outra USB KL25Z. A porta USB SDA é a interface usada para receber o código desenvolvido.

Figura 02

Para fazer a ligação é necessário um cabo com uma extremidade padrão A e a outra extremidade com padrão mini-B.

 

Figura 03 – Padrão USB tipo mini-B

Conecte a ponta USB no computador, segure o botão de reset pressionado e plugue o padrão mini-B na porta USB SDA. Pressionar o reset será necessário uma única vez. Assim que fizer a ligação surgirá um flash-drive junto aos demais dispositivos do seu computador chamado BOOTLOADER.

 

 

Figura 04 – BOOTLOADER

Primeiramente é necessário atualizar o firmware. Para isso acesse o link: https://developer.mbed.org/handbook/Firmware-FRDM-KL25Z e faça download do arquivo 20140530_k20dx128_kl25z_if_opensda. Descompacte e copie o arquivo 20140530_k20dx128_kl25z_if_opensda.s19 para o BOOTLOADER. Desconecte e reconecte o USB da placa sem pressionar o botão de RESET. Surgirá um flash-drive chamado MBED.

 

Figura 05 – Flash-drive MBED

Pronto, sua placa está configurada e pronta para utilização.

 

O ambiente de desenvolvimento

O ambiente de desenvolvimento para a FRDM-KL25Z é o MBED. Ele é um ambiente de desenvolvimento todo baseado em computação na nuvem (editor, compilador, projetos), cujo objetivo principal é oferecer um ambiente de prototipagem rápida. O desenvolvimento é todo baseado em bibliotecas disponibilizadas pelo projeto MBED.

Para utilizar o ambiente é necessário criar uma conta. Para isso acesse o site: https://developer.mbed.org/ e clique na opção Log In/Signup.

 

 

Figura 06 – site para desenvolvimento das aplicações

 

E depois crie a conta clicando em mbed, como mostra a figura 07.

 

Figura 07 – Como criar a conta

 

Na tela seguinte, clique em No, I haven´t created na account before, como mostra a figura 08.

 

 

Figura 08

Preencha os dados solicitados e habilite a opção I agree to ARM´s Terms and Conditions. Você será redirecionado para o site https://developer.mbed.org e você já estará logado. Clique em Get started.

 

 

Figura 09

 

Para começar a codificar, clique na opção Compiler, que se encontra na parte superior a direita. Você foi redirecionado para o Workspace de desenvolvimento do MBED.

Agora você pode selecionar ou alterar o dispositivo a ser programado em “Select Plataform” . Caso não exista nenhum hardware (No device selected), e não haverá, selecione clicando no canto superior direito, como mostra a figura 10.

 

 

Figura 10

O próximo passo é clicar em Add Plataform.

 

Figura 11 – Adicionando a plataforma

 

Serão exibidas TODAS as plataformas aos quais o MBED dá suporte. Selecione FRDM- KL25Z.

 

Figura 12 – selecionando a FRDM-KL25Z

 

Ocorrerá o redirecionamento para um link contendo os dados da plataforma selecionada. Basta clicar em Add to MBED complile para continuar.

Atualize a página do Workspace. O dispositivo FRDM-KL25Z, foi adicionado.

 

Figura 13

 

Primeiro Exemplo

A linguagem de programação é o C\C++. Para criar um programa, clique no menu New -> New Program.

Figura 14 – criando um programa

 

Como um primeiro exemplo, vamos usar um pronto que o MBED tem, o clássico Hello World. Se preferir troque o nome do programa.

 

Figura 15

 

Note que a biblioteca MBED já foi importada e um arquivo main.cpp já codificado.

 

Figura 16

 

#include "mbed.h"

DigitalOut myled(LED1);

int main() {

while(1) {

myled = 1; //desliga

wait(0.2);

myled = 0; //liga

wait(0.2);     }

}

 

O código acima faz a declaração de uma variável chamada myled que usa o LED embutido na placa, por isso é do tipo DigitalOut. LED1 faz referencia ao LED de cor vermelha. Quando myled recebe 1, significa apagado e 0 aceso. O comando wait(0.2) faz com que o led fique apagado por 0.2s e depois aceso por 0.2s. A estrutura de repetição while(1) é para que o código fique rodando infinitamente.

Agora é só compilar o código e um arquivo .bin será gerado na pasta downloads. Copie este arquivo para o flash-drive do MBED desconecte e reconecte o cabo USB e veja o resultado.

 

Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa

Introdução

No artigo Exemplo 01 – usando LED fiz um exemplo para manipular o LED usando saída digital (DigitalOut), ou seja, atribuímos valores 0 ou 1 para as variáveis que controlam o LED. Neste artigo vamos controlar as variáveis que manipulam o LED com saída PWM – Modulação de Largura de Pulso, que permite que controlemos a intensidade do LED.

Segundo Exemplo – Semáforo com controle de intensidade da cor

Como já ensinado no artigo anterior, crie um novo programa. Dê o nome de Exemplo-SemaforoPWM. Lembre-se de alterar o template para Empty Program. Depois crie um novo arquivo e dê o nome de semaforopwm.cpp . Importe a biblioteca mbed e abra o arquivo para iniciar a codificação.

Primeiro vamos testar um código simples de controle de LED.

#include "mbed.h"

 

PwmOut ledr(LED1);

 

int main() {

int t=0;

float p=0;

while(1) {

if(t==0) p+=0.1f;

if(t==1) p-=0.1f;

if(p<=0) t=0;

if(p>=1) t=1;

ledr = p;

wait(0.1);

}

}

 

Neste exemplo a variável p controla a intensidade do LED e a variável t verifica se o LED está aumentando de intensidade ou diminuindo. Assim que a variável p (que controla a intensidade) fica menor ou igual a zero, a variável t recebe 0, o que significa que o LED precisa começar a diminuir a intensidade. Quando a variável p fica maior ou igual a um, a variável t recebe , que significa que o LED precisa começar a aumentar a intensidade. Como a estrutura for é bloqueante, achamos mais adequado fazer uso do próprio while (que precisa ter pra termos um processo contínuo) e validar através de Ifs a oscilação do LED, que neste caso é o vermelho (LED1).

 

Agora vamos simular o funcionamento do semáforo usando PWM. Conforme passa o tempo a intensidade do LED para cada cor diminui. Para isso usamos uma estrutura de repetição (FOR) para controlar o PWM. Para o vermelho foi feito decremento na intensidade de 0.01 com espera de 0.5s, totalizando 10s. Para o verde o decremento na intensidade foi de 0.1 com espera de 0.5s, totalizando 5s. Por fim, o amarelo com decremento de 0.3 e espera de 0.9s, totalizando 3s.

O código ficou da seguinte maneira:

 

#include "mbed.h"

 

PwmOut ledr(LED1);

PwmOut ledg(LED2);

 

int main() {

while(true)  {

ledr=0;

ledg=1;

for(float p=0.0f;p<1.0f;p+=0.05f) //10s no vermelho

{

ledr=p;

wait(0.5);

}

ledr=1;

for(float p=0.0f;p<1.0f;p+=0.1f)//5s no verde

{

ledg=p;

wait(0.5);

}

for(float p=0.0f;p<1.0f;p+=0.3f)//3s no amarelo

{

ledg=p;

ledr=p;

wait(0.9);

}

}

 

}