Olá,
Estou com um problema em um código, eu necessito que o arduino funcione sem uma conexão com o computador, porém o código só funciona à partir do momento que eu abro o serial monitor. Estou utilizando um Sensor MPU6050 para fazer a leitura em ângulos, e quando ele verificar o ângulo ajustado, ele irá acionar um relé. Porém so funciona com o Serial monitor conectado.
Agradeço pela ajuda!!
#include <Wire.h>
//Direcionamento de leitura
const int MPU=0x68;
//Conversão de valores
#define A_R 16384.0
#define G_R 131.0
//Conversão de radianos para graus 180/PI
#define RAD_A_DEG = 57.295779
int AcX, AcY, AcZ, GyX, GyY, GyZ;
int relep = 7;
int relen = 8;
//Angulos
float Acc[2];
float Gy[2];
float Angle[2];
void setup()
{
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
pinMode(relep, OUTPUT); //saida dos reles
pinMode(relen, OUTPUT);
}
void loop()
{
//Leitura dos valores do acelerometro.
Wire.beginTransmission(MPU);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true);
AcX = Wire.read() 8 | Wire.read();
AcY = Wire.read() 8 | Wire.read();
AcZ = Wire.read() 8 | Wire.read();
//A partir dos valores brutos do acelerômetro, calcula-se os Ângulos X e Y.
Acc[1] = atan(-1 * (AcX / A_R) / sqrt(pow((AcY / A_R), 2) + pow((AcZ / A_R), 2))) * RAD_TO_DEG;
Acc[0] = atan((AcY / A_R) / sqrt(pow((AcX / A_R), 2) + pow((AcZ / A_R), 2))) * RAD_TO_DEG;
//Leitura dos valores do giroscópio.
Wire.beginTransmission(MPU);
Wire.write(0x43);
Wire.endTransmission(false);
Wire.requestFrom(MPU, 4, true);
GyX = Wire.read() 8 | Wire.read();
GyY = Wire.read() 8 | Wire.read();
//Calculo do angulo do giroscópio
Gy[0] = GyX / G_R;
Gy[1] = GyY / G_R;
//Aplicação do filtro complementar
Angle[0] = 0.98 * (Angle[0] + Gy[0] * 0.010) + 0.02 * Acc[0];
Angle[1] = 0.98 * (Angle[1] + Gy[1] * 0.010) + 0.02 * Acc[1];
//Serial mostra os ângulos medidos.
// Serial.print("Angle X: "); Serial.print(Angle[0]); Serial.print("\n");
// Serial.print("Angle Y: "); Serial.print(Angle[1]); Serial.print("\n------------\n");
//Malha de controle de acionamento
if (Angle[0] > 5) {
digitalWrite(relen, LOW);
digitalWrite(relep, HIGH);
}
if ((Angle[0] < 5) && (Angle[0] > -5)) {
digitalWrite(relep, LOW);
digitalWrite(relen, LOW);
}
if (Angle[0] < -5) {
digitalWrite(relep, LOW);
digitalWrite(relen, HIGH);
}
delay(10);
}
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por