Go Down

Topic: Arduino Mega 2560 acende o led do on e vai apagando (Read 90 times) previous topic - next topic

ribkar


Boa tarde,

tenho tido um problema com o código que estou utilizando para o meu robô seguidor de linha. Quando ligo o Arduíno, o LED que sinaliza que está ligado (LED do on) vai apagando gradualmente até ficar tão fraco que fica difícil perceber que está ligado. O código que estou utilizando é o seguinte:

Code: [Select]

#define md 9 // Motor direito
#define me 10 // Motor esquerdo
#define pe A0 // Potenciômetro esquerdo
#define pd A1 // Potenciômetro direito
#define s1 A2 // Sensor esquerdo
#define s2 A3 // Sensor central esquerdo
#define s3 A4 // Sensor central direito
#define s4 A5 // Sensor direito
#define pwm_e90 255 // Valor do PWM para fazer curva de 90º para a direita
#define pwm_d90 255 // Valor do PWM para fazer curva de 90º para a esquerda
#define cte 4 // Constante pela qual o valor de PWM é dividido para o acionamento devagar do motor
byte pwm_d = 0, pwm_e = 0; // Variáveis de PWM
unsigned short int per = 0, pdr = 0, s1r = 0, s2r = 0, s3r = 0, s4r = 0; // Variáveis de leitura dos potenciômetros e sensores

void setup() {
  TCCR2B = TCCR2B & 0b11111000 | 0x01; // Configuração do timer para que o PWM não seja audível, muda a frequência para 31kHz
  pinMode(me, OUTPUT);
  pinMode(md, OUTPUT);
  pinMode(pe, INPUT);
  pinMode(pd, INPUT);
  pinMode(s1, INPUT);
  pinMode(s2, INPUT);
  pinMode(s3, INPUT);
  pinMode(s4, INPUT);
  digitalWrite(me, LOW);
  digitalWrite(md, LOW);
  Serial.begin(9600); // Inicia comunicação serial
}

void loop() {
  Serial.println(s1r); // Imprime o valor de s1
  Serial.println(s2r); // Imprime o valor de s2
  Serial.println(s3r); // Imprime o valor de s3
  Serial.println(s4r); // Imprime o valor de s4
  per = analogRead(pe);
  pdr = analogRead(pd);
  s1r = analogRead(s1);
  s2r = analogRead(s2);
  s3r = analogRead(s3);
  s4r = analogRead(s4);
  pwm_e = map(per, 0, 1023, 0, 255);
  pwm_d = map(pdr, 0, 1023, 0, 255);
  if (s1r < 512 and s2r > 512 and s3r > 512 and s4r < 512) {
    analogWrite(me, pwm_e);
    analogWrite(md, pwm_d);
    // Frente
  }
  else if (s1r < 512 and s2r > 512 and s3r < 512 and s4r < 512) {
    analogWrite(me, 0);
    analogWrite(md, pwm_d);
    // Esquerda
  }
  else if (s1r < 512 and s2r < 512 and s3r > 512 and s4r < 512) {
    analogWrite(me, pwm_e);
    analogWrite(md, 0);
    // Direita
  }
  else if (s1r > 512 and s2r < 512 and s3r < 512 and s4r > 512) {
    analogWrite(me, pwm_e / cte);
    analogWrite(md, pwm_d / cte);
    // Frente devagar
  }
  else if (s1r > 512 and s2r < 512 and s3r < 512 and s4r < 512) {
    analogWrite(me, pwm_e / cte);
    analogWrite(md, pwm_d);
    // Corrigir para esquerda
  }
  else if (s1r < 512 and s2r < 512 and s3r < 512 and s4r > 512) {
    analogWrite(me, pwm_e);
    analogWrite(md, pwm_d / cte);
    // Corrigir para direita
  }
  else if (s1r < 512 and s2r > 512 and s3r > 512 and s4r > 512) {
    analogWrite(me, pwm_e90);
    analogWrite(md, 0);
    // 90º Direita
  }
  else if (s1r > 512 and s2r > 512 and s3r > 512 and s4r < 512) {
    analogWrite(me, 0);
    analogWrite(md, pwm_d90);
    // 90º Esquerda
  }
  else if (s1r < 512 and s2r < 512 and s3r > 512 and s4r > 512) {
    analogWrite(me, pwm_e);
    analogWrite(md, 0);
    // Direita
  }
  else if (s1r > 512 and s2r > 512 and s3r < 512 and s4r < 512) {
    analogWrite(me, 0);
    analogWrite(md, pwm_d);
    // Esquerda
  }
}


bubulindo

O que tens ligado ao teu sistema e como estás a alimentar o sistema?
This... is a hobby.

ribkar

Eu liguei o Arduino à dois motores e seus espectivos pwm's e tudo isso está sendo alimentado por uma bateria de 9V.

bubulindo

O teu problema não é o código, mas falta de potência. As pilhas de 9V são bastante más no que toca a alimentar cargas com corrente alta e os motores são cargas de corrente alta.

Usa pilhas AA.
This... is a hobby.

Go Up