Arduino Uno não mantém programação com fonte externa

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, tudo funciona corretamente.
Entretanto, quando eu utilizo uma bateria de 9V, conectada o Vin da placa, pois necessito de fonte externa para o projeto final, o código não funciona. Somente após várias tentativas apertando o botão de reset que começa a funcionar. Abaixo está o meu código.
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 acho que seja uma questão de código, então nem mesmo olho para ele.

É a fonte de alimentação, não sei quanto o módulo de vibração consome mas com certeza muito e os 9V da célula seca não chegam. Meça-os se perceber que assim que o usar, você não terá mais os 9v, mesmo que sejam novos, com certeza terá algo menos.

Baterias secas, quando gastam ou pedem muita corrente, baixam os volts nominais até abaixo dos 5V que o seu arduino precisa, (principalmente nos picos de partida do módulo vibrador), produzindo um "brown out reset", "BOR", e nada funcionando .

Você deve mudar para baterias recarregáveis ​​do tipo ni-mh ou lipo, pois elas mantêm a voltagem constante, independentemente dos requisitos de corrente do dispositivo conectado a elas. Saudações.

Muitíssimo obrigada pela ajuda!

Medi no Vin a tensão e tem 7V somente.
Já sobre o módulo motor de vibração, fiz uma placa de circuito impresso externa, utilizando um transistor para conseguir fazê-lo funcionar. Sobre o quanto ele consome, aqui estão os dados:

  • Tensão de operação: 2,5V - 4V
  • Corrente de operação: 90 mA máx

Seria isto mesmo, trocar a bateria?

Você vê ?. Você não tem mais o 9V, essa bateria pra mim está em 60%.

Esses mA estão funcionando, mas nas partidas e durante um certo tempo, (micro segundos), esse consumo pode ser muito multiplicado, (picos iniciais). Com uma bateria seca eu não poderia fornecer instantaneamente aqueles consumos elevados e a voltagem que ela fornece cai abaixo de 5v. Isso é detectado pelo UNO e o BOR é produzido.

Trocar aquela bateria por uma nova resolveria o problema por um curto período de tempo e no final você teria uma gaveta cheia de baterias a 60%.
Aconselho você a mudar para baterias recarregáveis.

Saudações.

Novamente agradeço a atenção.

Indicaria baterias recarregáveis de 9V também ou com uma tensão maior/menor?

Os links que vou dar são apenas exemplos e existem muitas fórmulas.

  • se você já tem seu projeto, caixa, porta-bateria, etc ...
    Existem baterias recarregáveis ​​lipo via USB como estas: LINK.
  • Você também pode ir para esse cara LINK
  • Eu particularmente uso este apenas por conveniência LINK

Obviamente, nos dois últimos exemplos, você precisará de um carregador específico para cada tipo.
Pode utilizar uma única bateria com uma "Power up" como esta: LINK.
Ou use dois em série e ligue o protótipo sem o "Power up"
Saudações.

1 Like

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