olá a todos,
eu e mais dois amigos estamos desenvolvendo uma espécie de vertibot
http://labdegaragem.com/profiles/blogs/vertibot-o-robo-com-equilibr...
porém com dispositivos um pouco mais baratos, para os motores estamos usando dois microservos hackeados, um arduino uno e um acelerometro como sensor
fizemos uma programação para funcionar sem o controle pid e ainda não testamos o primeiro prototipo
mas parece q vamos ter q usar a programação pid para melhorar seu funcionamento, porem estamos com muitas duvidas referentes a programação
sobre os conceitos do controle pid, jah estamos embasados graças ao topicos mostrados aki no lab de garagem
peço ajuda se alguem poderia me ajudar a entender e a formular uma programação pid para os dois servos
ha um exemplo de programação mas não consegui endender e adaptá-lo ao nosso projeto
#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);
}
Tags:
Vc vai ter que ter dois objetos PID, um para cada servo (tipo myPID1, myPID2). Tem que ter também dois conjuntos de variáveis para cada um deles, para que os motores sejam comandados independentemente. No meu blog tem um bocado de teoria de PID (http://automatobr.blogspot.com.br/2013_05_01_archive.html). Se tiver dúvidas mais específicas, pode me escrever por lá.
é... realmente não tinha pensado nisso,
mas eu nao intendi essa linha da programação
(&Input, &Output, &Setpoint,2,5,1, DIRECT);
o que eu devo colocar em input, output e setpoint?
vou explicar como ficou a programação base para o projeto
como o servo rackeado perde a referencia de graus, a leitura de inclinação do acelerometro vindo de uma comunicação SPI para o arduino, vai fazer os servos girarem continuamente para o lado da inclinação até o sentido da inclinação mudar
então como nao tinhamos a programação PID, fizemos uma compensação para frear o servo
na programação setamos o set point com um botao inicial,
ele pega o valor do set point e subtrai do valor da inclinação, desse resultado faz uma mapeamento, uma comparação, com um valor fixo de compensação
esse valor é o delay para o servo girar, parar e continuar girando ou girar para o outro lado.
quero colocar a programação PID regulando o ganho delas com trimpots (por exemplo) para poder reduzir os erros no processo, ou assimilar algumas dessas variaveis a entradas analógicas para simular as açoes PID.
se precisar envio a programação, eh meio complicado de explicar (rsrsr)
kero fazer o projeto de conclusão para o curso de automação, o objetivo eh explicar as ações PID
se tiver alguma solução ou ideia agradeço de coração.
obrigado
Lá no blog explica, mas vamolá:
Input é o valor lido, ou seja, o que vem do sensor.
Output é a resposta calculada pelo PID
Setpoint é o valor desejado, ou seja, o valor a ser atingido
2,5,1 são os valores de kp, ki, kd. Eles são a chave do PID, e devem ser estimados corretamente para que o PID funcione. No blog tem um método sobre como estima-los.
DIRECT diz que a relação entre Input e Output é direta, ou seja, a um incremento de Input deve corresponder um incremento de Output.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por