Olá,
Eu utilizei uma biblioteca encontrada na internet para o MPU-6050, sensor acelerômetro e giroscópio, para detectar a inclinação com o mesmo. Quando detectado, o Arduino deverá enviar um sinal para ativar um módulo motor de vibração. Utilizando o cabo serial para energizar/enviar dados no computador.
Entretanto, com um power bank como alimentação externa ou o cabo serial, o módulo motor de vibração vibra um segundo, iniciando, e para. Se quero que ele vibre quando inclino o sensor, preciso apertar o botão de reset na placa.
Preciso que quando a alimentação seja conectada, ele já funcione, sem apertar o reset.
Caso alguém puder me ajudar, agradeço imensamente.
Obs: sou nova programando no Arduino, talvez seja coisa básica e não estou sabendo resolver.
/*******************************************************************************************
MEDIÇÃO DA INCLINAÇÃO
*******************************************************************************************/
int valor=0;
//includes
#include <Wire.h>
#include <MPU6050.h>
#include <I2Cdev.h>
// O endereço do MPU6050 pode ser 0x68 ou 0x69, dependendo
// do Status AD0. Se não for especificado, 0x68 estará implícito
MPU6050 sensor;
// Valores RAW (brutos) do acelerômetro e giroscópio nos eixos x, y, z
int ax, ay, az;
int gx, gy, gz;
long tempo_prev;
float dt;
float ang_x, ang_y;
float ang_x_prev, ang_y_prev;
void setup() {
// Serial.begin(9600); //Iniciando porta serial
Wire.begin(); //Iniciando I2C
sensor.initialize(); //Iniciando o sensor
//if (sensor.testConnection()) Serial.println("Sensor iniciado corretamente");
//else Serial.println("Erro ao iniciar o sensor");
}
void loop() {
// Leia acelerações e velocidades angulares
sensor.getAcceleration(&ax, &ay, &az);
sensor.getRotation(&gx, &gy, &gz);
dt = (millis()-tempo_prev)/1000.0;
tempo_prev=millis();
//Calcular os ángulos com acelerometro
float accel_ang_x=atan(ay/sqrt(pow(ax,2) + pow(az,2)))*(180.0/3.14);
float accel_ang_y=atan(-ax/sqrt(pow(ay,2) + pow(az,2)))*(180.0/3.14);
//Calcule o ângulo de rotação com giroscópio e filtro de complemento
ang_x = 0.98*(ang_x_prev+(gx/131)*dt) + 0.02*accel_ang_x;
ang_y = 0.98*(ang_y_prev+(gy/131)*dt) + 0.02*accel_ang_y;
ang_x_prev=ang_x;
ang_y_prev=ang_y;
//Mostrar os angulos separadas por um [tab]
//Serial.print("Rotacao em X: ");
//Serial.print(ang_x);
//Serial.print("tRotacao em Y: ");
// Serial.println(ang_y);
/*****************************************************************************************
VIBRAÇÃO COM O VALOR DA INCLINAÇÃO
*****************************************************************************************/
if (ang_y>10 || ang_y< -10){
digitalWrite(13, HIGH);
//Serial.println("on");
}
else{
digitalWrite(13, LOW);
//Serial.println("off");
}
delay(5);
}