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);
}

Exibições: 398

Responder esta

Respostas a este tópico

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço