collapse

* Links de Robótica

* Posts Recentes

Ideias para construir um quadrúpede simples por Njay
[Hoje às 03:04]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]


Power_OK Enermax por edeweld
[12 de Novembro de 2017, 17:15]


Driver motor por beirao
[11 de Novembro de 2017, 17:40]


Preciso de uma fonte de corrente constante ? por samc
[09 de Novembro de 2017, 14:18]


Pressoestato 0-10V por artur36
[07 de Novembro de 2017, 23:22]

Autor Tópico: Arduino - PID - Segue Linha - Controle  (Lida 2024 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Gelson Filho

  • Mini Robot
  • *
  • Mensagens: 3
Arduino - PID - Segue Linha - Controle
« em: 03 de Julho de 2014, 07:04 »
E aí pessoal. Aí vai um código depois explico o problema:

Código: [Seleccione]
const int pwm_a = 3;  //controle PWM para motor A (saídas 1 e 2) no pino digital 3
const int pwm_b = 11;  //controle PWM para motor B (saídas 3 e 4) no pino digital 11
const int dir_a = 12;  //controle de direação para motor A (saídas 1 e 2) no pino digital 12
const int dir_b = 13;  //controle de direação para motor B (saídas 3 e 4) no pino digital 13

void setup()
{
  pinMode(pwm_a, OUTPUT);
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);
}
void loop()
{
  //leitura sensores refletância (para enxergar preto e branco / linha)
  int leitura_sensor2=analogRead(A2); 
  int leitura_sensor3=analogRead(A3);
 
  int ganho = 6;
 
  int proporcional = ((leitura_sensor2 - leitura_sensor3) / ganho);
   
  int acertoB = (75 + proporcional); //75 PWM mínimo do motor
  int acertoA = (75 - proporcional);

  digitalWrite(dir_a, HIGH);  //para motores irem para frente
  digitalWrite(dir_b, HIGH);
  analogWrite(pwm_a, acertoA);
  analogWrite(pwm_b, acertoB);
}

Estou com um problema aqui. Tenho um robô com dois motores DC comandados pela Shield Ardumoto. Microcontrolador Arduino. Dois sensores refletância que eu mesmo fiz. Eles tem uma variação de 650 a 950 no sinal analógico. Onde 950 é quando sensor está no branco, e 650 no preto. Os sensores obrigatoriamente estão a aproximadamente 1 cm do chão. E estou tentando aplicar um controle PROPORCIONAL no meu segue linha. Já fiz uma vez esse controle com um robô feito com LEGO e programado no NXT, e dava muito certo, então fiz os mesmos cálculos só que com o Arduino e adaptando a minha entrada (sensores) e saída (PWM dos motores). Mas não está dando muito certo. O controle PROPORCIONAL já bastaria pra mim, se eu conseguisse o PID por completo eu ficaria MUITO feliz, mas só o PROPORCIONAL já está de bom tamanho. Alguém poderia me ajudar???

Offline Gelson Filho

  • Mini Robot
  • *
  • Mensagens: 3
Re: Arduino - PID - Segue Linha - Controle
« Responder #1 em: 03 de Julho de 2014, 07:07 »
Achei também uma bilioteca que já faz todos os cálculos PID tudo certinho. Mas como adaptar iso ao meu problema? Teria que fazer 2 PID's? Como? Sendo que a variação de um sensor faz com que um motor ande mais que outro. Tipo são 2 PID's que se interligam, então como fazer??

Aí vai o exepmlo básico que já vem junto com a biblioteca....




Código: [Seleccione]
/********************************************************
 * PID Basic Example
 * Reading analog input 0 to control analog PWM output 3
 ********************************************************/

#include <PID_v1.h>

//Define Variables we'll be connecting to
double Setpoint, Input, Output;

//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint,2,5,1, DIRECT);

void setup()
{
  //initialize the variables we're linked to
  Input = analogRead(0);
  Setpoint = 100;

  //turn the PID on
  myPID.SetMode(AUTOMATIC);
}

void loop()
{
  Input = analogRead(0);
  myPID.Compute();
  analogWrite(3,Output);
}

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.164
  • NERD!
Re: Arduino - PID - Segue Linha - Controle
« Responder #2 em: 03 de Julho de 2014, 08:55 »
Um problema que vejo do teu código original é o a velocidade "base" ds motores, o valor '75'.

Dizes que é o mínimo PWM do motor, e depois adicionas ou subtrais o resultado do proporcional. Implica que um dos motores vai estar sempre parado, pelo que tornaste o controlo proporcional em "on-off".
Acho que devias escolher um valor mais elevado, para quando estiver na linha seguir em frente em vez de andar aos ziguezagues.

Quanto ao PID, é ler a documentação da biblioteca e escolheres o que queres controlar.



Offline Gelson Filho

  • Mini Robot
  • *
  • Mensagens: 3
Re: Arduino - PID - Segue Linha - Controle
« Responder #3 em: 04 de Julho de 2014, 05:38 »
eu tentei aumentando o pwm dos motores alí, troquei o 75 por 150, mas mesmo assim o acerto é muito pequeno, perde a linha facilmente.

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.164
  • NERD!
Re: Arduino - PID - Segue Linha - Controle
« Responder #4 em: 04 de Julho de 2014, 08:37 »
Podes tentar várias coisas:
-Mudar o espaçamento dos sensores
-Aumentar a variável "ganho" para ficar menos sensível (que na realidade é diminuir o ganho)
-Inserir um delay de uns milissegundos no loop para diminuir o ritmo das atualização.