Necessário apertar reset na placa para sensor funcionar

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);
}

Olá.
Não vejo que tenha declarado o pino 13 como saída e, além do mais, costumo evitar esse pino por estar associado ao led da placa, nada precisa acontecer, mas não gosto.
Você não indica como controla o motor, sabe quanto ele consome? Pode ser que você tenha que acioná-lo com um transistor. Você colocou um diodo Flyback para evitar que o FEM passe para o arduino? Talvez você deva colocá-lo, se não o fez.
Saudações.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.