Acelerômetro 🎮
Detecte movimento, vibração e orientação espacial da placa
🎯 O que você vai aprender
Vamos criar dois projetos:
1️⃣ Detector de Vibração - Alarme quando a placa é movida
2️⃣ Joystick Virtual - Use a placa como controle de jogo
📚 O que é um Acelerômetro?
Um acelerômetro mede a aceleração e a orientação em 3 dimensões: X (esquerda/direita), Y (frente/trás) e Z (cima/baixo).
Eixo X
↔️
Esquerda / Direita
Eixo Y
↕️
Frente / Trás
Eixo Z
⬆️⬇️
Cima / Baixo
📱 Exemplo do dia a dia: Seu celular usa acelerômetro para girar a tela quando você vira o aparelho, e para contar seus passos!
🔧 Hardware
Acelerômetro MMA8452Q
Comunicação I2C (integrado ao kit)
📚 Biblioteca necessária: RoboCore_MMA8452Q (instale via Library Manager)
Detector de Vibração / Movimento
Este código detecta quando a placa é movida e exibe um alerta. Útil para sistema de segurança ou alarme anti-furto!
/************************************************
* RoboCore - IoT DevKit - Detector de Movimento
***********************************************/
#include "RoboCore_MMA8452Q.h"
//Criamos o objeto do acelerômetro
MMA8452Q acel;
void setup() {
Serial.begin(115200);
//Inicializa o sensor
acel.init();
Serial.println("Sistema de Alarme Ativo! 🔒");
}
void loop() {
//Faz a leitura dos 3 eixos
acel.read();
//Se houver movimento significativo, dispara o alerta
if((acel.x > 0.40) || (acel.y > 0.40) || (acel.z < 0.80)){
Serial.println("⚠️ ALERTA! MOVIMENTO DETECTADO ⚠️");
}
delay(100);
}
💡 Como funciona: Quando a placa está parada na horizontal, Z ≈ 1.0 (gravidade), X ≈ 0 e Y ≈ 0. Qualquer movimento muda esses valores!
Joystick Virtual - Sensor de Orientação
Transforme a placa em um controle de jogo! Incline para cada direção e veja a resposta no terminal. 🎮
/*
* JOYSTICK ACELERÔMETRO
* Objetivo: Ensinar orientação X, Y e Z de forma visual
*/
#include "RoboCore_MMA8452Q.h"
MMA8452Q acel;
void setup() {
Serial.begin(115200);
acel.init();
Serial.println("Calibrando o Nível Digital...");
delay(1000);
}
void loop() {
// 1. Faz a leitura dos eixos
acel.read();
float x = acel.x;
float y = acel.y;
float z = acel.z;
Serial.println("=============================");
Serial.println(" SENSOR DE ORIENTACAO 🧭 ");
Serial.println("=============================");
// Mostra os dados brutos
Serial.print("EIXO X (Lado): "); Serial.println(x);
Serial.print("EIXO Y (Frente): "); Serial.println(y);
Serial.print("EIXO Z (Cima/Baixo): "); Serial.println(z);
Serial.println("-----------------------------");
Serial.print("STATUS: ");
// Lógica de Decisão (0.3 = zona morta)
if (x > 0.3) {
Serial.println("⬅️ INCLINADO PARA ESQUERDA");
}
else if (x < -0.3) {
Serial.println("➡️ INCLINADO PARA DIREITA");
}
else if (y > 0.3) {
Serial.println("⬇️ INCLINADO PARA TRÁS");
}
else if (y < -0.3) {
Serial.println("⬆️ INCLINADO PARA FRENTE");
}
else {
Serial.println("⏹️ ESTÁVEL / PLANO");
}
// Detecção de Agito forte
if (abs(x) + abs(y) + abs(z) > 1.8) {
Serial.println("⚠️ AGITO DETECTADO!");
}
Serial.println("=============================");
delay(250);
}
🔍 Conceitos Importantes
Zona Morta (Threshold)
O valor 0.3 é um limiar (threshold). Valores abaixo disso são considerados "neutros" para evitar que pequenas vibrações disparem ações. É como uma "margem de tolerância".
abs() - Valor Absoluto
A função abs() retorna o valor sem o sinal.
abs(-0.5) = 0.5
Útil para somar as forças independente da direção!
📝 Teste seus Conhecimentos
Quiz Gamificado
Responda às perguntas para ganhar XP e desbloquear a próxima atividade!
Carregando quiz...