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:
Oi MRM, boa noite.
A compilar o seu código deu erro de compilação nestas linhas:
AcX = Wire.read() 8 | Wire.read();
AcY = Wire.read() 8 | Wire.read();
AcZ = Wire.read() 8 | Wire.read();
GyX = Wire.read() 8 | Wire.read();
GyY = Wire.read() 8 | Wire.read();
Está faltando algo entre os () e os 8.
Eu até imagino o que é.
Então pra que os amigos entendam quando eu digo que postar code na área de texto não é recomendado,
aqui está um caso prático.
MRM, recomendo você ler o tópico : http://labdegaragem.com/forum/topics/sugest-o-de-como-postar,
e entenderá o que ocorre.
Uma pergunta: O que você quis dizer com "só funciona com o Serial monitor conectado"?
Quis dizer que usando a alimentação da USB funciona, mas usando uma fonte externa não funciona?
Rui
Rui
Boa noite Rui.
Exatamente, o arduino so executa a função de acionar um relé quando esta conectado via USB no computador. Porém não basta estar conectado ao PC, é necessario que abra o programa Arduino e clique no "Monitor Serial" se não realizar este procedimento, o Arduino não aciona o Relé.
O objetivo deste programa, é fazer a leitura em graus, usando um acelerometro MPU6050 e acionar um relé quando o angulo de 5 graus for atingido. Algumas partes do codigo nao estão comentadas, pois nao criei todo o codigo, adaptei para a minha necessidade, segue abaixo o código.
Tentei copiar o codigo HTML aqui como você recomendou, porém não objetive sucesso. Entao resolvi carregar o arquivo .INO
Agradeço desde já a atenção,
Obrigado!!!
Correto José.
Esta foi a primeira coisa que eu pensei também, comentei esta linha, sem sucesso, na sequencia comentei também as 2 linhas que iniciam o Serial Monitor porém ainda sem sucesso. Estou usando um Arduino Nano, não sei o que pode ser, agora vou testar em um arduino Uno, em outro Nano, porém isto não faz sentido para mim.
Obrigado!
Desabilitou a serial também, não é ?
//Serial.begin(9600);
Como esta alimentando o Arduino, quando desconecta o cabo USB ?
Mostre o diagrama das suas ligações.
Oi MRM, bom dia.
Uma dúvida:
qdo esta condição é atendida?
if ((Angle[0] < 5) && (Angle[0] > -5))
Rui
Bom dia!
Quando o angulo esta entre o valor 5 e -5.
<5 (menor que 5)
>-5 (maior que -5)
Obrigado!
Ok, voce está certo, eu que me confundi.
Acabei de carregar o código em um Arduino Uno, porém o problema continua, ele só funciona após abrir o Serial Monitor.
Tenho uma boa notícia, não sei por qual motivo, mas quando conecto ele, e aperto o botão reset, o arduino funciona perfeitamente, existe alguma maneira de inserir um reset no código?
Obrigado!
MRM,
voce pode postar o desenho com esquema como ligou ele, o arduino e o PC?
Rui
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por