Em geral quando alguém tenta ensinar PID ou acaba não conseguindo passar os fundamentos corretamente, ou complica tanto que acaba deixando tudo muito confuso. Seus vídeos são muito bons, pois conseguem transmitir esse conhecimento de uma forma bem simples e de fácil assimilação. Parabéns!
Muito bom! Explicou as entranhas básicas, aritméticas, do controle PID sem jogar código enrolado e sem fazer uso de 'libraries' pré-montadas (como as PID_**.h). Parabéns!
Olá, gostaria de agradecer bastante por sua explicação. Foi o único vídeo em que consegui entender o como funciona o algoritmo PID, já havia assistido outros mas não consegui entender como funcionavam os cálculos. Parabéns pela simplicidade e por ter compartilhado estes conhecimentos com outras pessoas...👏👏
Muito boa tua aula.. Trabalho com automação industrial, utilizo CLPs, normalmente uso 20 a 25 laços PIDs em cada máquina, PID é sempre confuso, vc colocou de uma forma didática bem compreensível ..... Estou começando arduino, estou gostando dos trekinhos...
Ivan, você tem uma didática excelente! Esses assuntos mais complexos de arduino não são fáceis para os leigos, e você consegue transmitir muito bem! Continue compartilhando esses conhecimentos. Um forte abraço!
Você é meu novo herói Ivan, muito obrigado pela disposição em ensinar esse processo do PID, de fato não encontrei em nenhum lugar uma explicação que chegue próxima a sua. Muito obrigado mesmo, estava procurando isso a muito tempo. Sucesso em seu canal. Ganhou mais um inscrito.
Ivan muito obrigado por desmistificar o PID da minha mente hahaha, gostei muito da sua forma de ensinar e por fim já estou inscrito no seu canal. Parabéns pelo video.
PARABÉNS, IVAN. Cara nunca mais fez mais videos, ele são muito importantes, vc tem uma boa didática e sabe passar com transparência o assunto, aprendi muito com seus video, eu realmente espero que vc continue.
Olá vi o vídeo pela primeira vez, não tinha intendido muita coisa, mais após estudar e rever o vídeo, hoje consegui implementar meu código com sucesso para controle de estufa, valeu ! Funcionando 100% !
Gostaria de cumprimenta-lo pela clareza e simplicidade pra apresentação dos conceitos. Contudo fiquei na dúvida quanto a correção do derivativo pois a ação de correção é maior quanto mais rápida for a variação do erro, o que não consegui entender na equação proposta.
Cara você é muito fera! Ainda não entendo que tem gente que ainda não gosta. Você é 10. Cara queria fazer um pedido: continue com suas vídeo aulas cara, ajuda muito mesmo.
Muito Obrigado Ivan, sua vídeo aula foi muito útil para mim, aliás assisti o primeiro vídeo explicando o básico PID também e achei sensacional, parabéns pelo seu trabalho!!!
ciao Ivan , just some considerations ..... if you want to get a P.I.D. controls which works in a right way you have to implement it in a interrupt routine handler function You have to set a timer to have for example 100 mS of time to regulate a temperature or more , it depends by the inertial of the system you want to regulate.The derivative component is the variation of the error between now and the last cycle and not between the last temperature and the actual temperature .For the integral part is important to call the pid at same time because the integral as you know is the area calculated as sum of each small rectangle with base 100mS in this case .Anyway in your case you just call the PID in your project but if I have other job to do it means the deltatime will be different eac cycle because it depends by the proram flow .Finally you made a good job , just I would like to say it's possible to increase the professionality ;) saudos
Walter Porcellini Hello Walter, Thanks for the tips, but actually, Using a timer is just a way to regulate the dT value, so that each step has an equal ammount of weight on the PID. In the video, as you can see (actually, the code without bugs posted in the description), that we regulate the Derivative and the Integral with the Delta Time. In this way, we don't actually have to set an very specific timing for the PID, and it will just work even if we increase/decrease the time step. The reason why I did this, is mainly because you can't count with the dT being fixed, and if it varies then kD and kI would have to change depending on the interval... Best, and saudos ;)
Parabéns Ivan. Eu precisava muito desse tutorial. Muito bem explicado didática e tecnicamente como sempre. Continue assim, a comunidade arduino agradece.
9 лет назад
Parabéns. Está muito bem explicado. Tão bem que além de aprender PID, também aprendi classe =] Muito obrigado.
Amigo, o vídeo é muito instrutivo e me ajudou muito, parabéns! Todavia, queria apontar que a equação da derivativa está errada! Primeiro que não se trata da variação do sample (Sampleatual - SampleAnterior) e sim da variação do ERRO (ErrorAtual - ErrorAnterior). Segundo, a fórmula da derivativa é DIVIDIDA pelo deltaTime e não multiplicada. Bom, espero poder ajudar a você e a todos que pretendem programar um controlador PID na plataforma Arduino!
Corrigindo, a primeira pode ser utilizada o sample SIM! E esqueci de frisar um terceiro ponto: a equação do PID também está errada, a correta é PID = P + kP*I + kP*D
Acredito que para a derivada, termo D, se divide pelo tempo entre as duas leituras e não multiplica, visto que o conceito de derivada é taxa de variação.
Ivan, Depois que você deixou em formato de classe, onde eu insiro o setPoint? Ou seja, a temperatura que eu quero que fique. Devo inserir dentro da classe ou no void loop? Outra dúvida que gostaria de tirar com você é sobre qual tipo de dispositivo eu devo usar pra acionar um circuito de alta voltagem utilizando o PID, já que a saída é pwm não conseguiria utilizar um relé por exemplo, que é só liga-desliga.
Fazer uma pesquisa nesse assunto é meio complicado, quando você não tem nenhuma referência e todos os trabalhos que você encontra são trabalhos acadêmicos. Sua vídeo-aula mais todo o conteúdo que da pra abstrair dos artigos e trabalhos em geral encontrados na internet deu pra ter uma boa base, mais do que suficiente para começar algum projeto com isso. Muito obrigado pela ajuda. Espero que você continue fazendo mais vídeos e ajudando que ta querendo encontrar uma solução pra pesquisar algo mais futuramente.
muito legal, como sugestão talvez colocar o set point como uma entrada analógica para esclarecer a duvida do pessoal que tem problemas co o set point, pelo demais muito bom, parabens
Olá Ivan, Muito bom o video. Acredito que faria mais sentido processar o sample já dentro da função addNewSample. Desta forma não é necessário array de samples e o valor não se perde caso não seja processado, e com isso ter uma função que apenas retorne o valor de PID, ou mesmo um atributo.
Boa noite Ivan, cara não tinha percebido mais teu código possui um erro... A parte do Derivativo você está pegando o valor do erro em relação da saída anterior com a atual... até ai ok... porém se você montar o diagrama de blocos, vai perceber que o "D" fica abaixo do "PI"... no entanto a tua saída fica pid= P+I-D, pois é um controle PI-D... Se você estivesse pegando o erro da entrada, aí sim seria um controle PID somado (P+I+D)... Você pode confirmar no Ogata - Engenharia de controle moderno 5°ed - pg 542 (figura8.26) você encontrará o diagrama de blocos com o D subtraído. Mas parabéns pela explicação, muito bom!
Amigo, já pensaste em colocar este PID como controlador de temperatura para cervejeiros caseiros. Usamos varias rampas de temperatura onde combina tempo / temperatura. Obrigado
Muito bom o vídeo, didática absurda! Tenho uma pergunta, um vez q o 'I' e o 'D' tem essa relação com a variação de tempo, vi outros videos mostrando que seria o valor /detaTime e não *deltaTime (dividido e nao multiplicado). se me puder ajudar ja agradeço, no I e D, divide ou multiplica pelo tempo?
Oi amigo parabéns pela iniciativa. Teria algum projeto prático para implementar PID com Arduíno ? Não precisa ser complexo é só para aprender o conceito.
+Edson Andrade A função "millis" e "micros" são as únicas que podem ser utilizadas para se receber o tempo de execução desde que foi ligado o microcontrolador... Mais info: www.arduino.cc/en/Reference/Millis
Caro Ivan, parabéns véi, mas dá uma força aí ? com eu faço pra controlar a velocidade de um motor dc usando PID e o arduino, sensor optico e encoder, parecido com o controle que vc faz com o robô Bob no primeiro vídeo que explica o que é PID ??? na vdd que usar ainda o labview junto ao arduino e os demais componentes, mas fazer isso usando só o arduino ja é um grande avanço.
Oie Ivan, muito obrg pelo teu video. Queria te fazer uma pergunta. Acho que falta uma parte no teu codigo. A variavel de controle co controlePwm = P+I+D + 50... nao esta faltando pasar ela para 0-255, que vai ser a saida analogica PWM? Nao esta faltando um map (controlePwm Min,Max,0,255)? Si estiver certo ..... qual seria entao o MAX e o MIN desa proporcao ? Muito obrg
Ola *****! Gostaria de saber como faço para testar essa rotina PID. Pois estou testando ele aqui no Proteus através do simulador para o Arduino e nao estou obtento a onda PWM na saida. Pois estou utilizando um potenciômetro para simular meu sensor, setpoint = 20, kp =30 e uma das saidas PWM do uC, mas mesmo assim nao consigo obter a onda, o que poderia ser?
Olá Ivan, parabéns pela aula.Gostaria que indicasse um livro para aprender C++..Eu tenho muiya necessidade de saber como criar bibliotecas para usar com simulink e o hardware arduino.Muito obrigado,
Muito boa sua video aula. Tenho uma dúvida, derepente pode me ajudar, no código na parte do calculo da integral, dessa forma como esta escrito, haverá chance de ocorrer o windup no integrador ? Se sim, pode sugerir um código para evitar isso ?
Ivan seidel muito boa videoaula mias poderia me tirar uma duvida estou fazendo um drone quadricóptero e queria aplica pid na programação esse escript q vc fez serviria como base pra um escript pra um quadricóptero, caso n , poderia me da uma ajuda ??? agradeceria sua resposta
Uma dúvida: a derivada não seria a variação do erro dividido pela variação do tempo? Meio que o contrário da Integral, q é o somatório do erro vezes o tempo?
Ivan! Vi seu vídeo de novo hoje (pra “roubar” sua explicação pra minha aula de PID 😜) e acabei percebendo um errinho: a parte de geração do termo derivativo (D, no seu código) deveria ser divida por deltaTime, e não multiplicada. É a derivada do erro no tempo: kD*d(error)/dt. Fora isso, excelente explicação e ótimo vídeo! Grande abraço!
Felipe! isso é vdd, algumas pessoas me falaram isso quando fiz upload e acabei inserindo um texto flutuante por cima do video porem ele foi removido como feature do youtube, dai deixei o código de exemplo na descrição e um comentario dizendo que está errado haha é um erro que vai me assombrar pra sempre rs
Amigo... apenas um comentário sugestivo... eh necessário um filtro digital na parte derivativa para não amplificar os erros provenientes de um sinal que tem uma variação rápida ou para eventual descontinuidade...
Olá, ótimo video, primeira vez q entendo o que é PID...rsrs...mas ficou uma dúvida quanto as constantes kI kD e kP, há alguma forma de calcula-las ? em meio ao controle de ummotor?
Cara boa noite! estou tendo controlar um um sistema de irrigação por PID mas não estou conseguindo acionar a bomba....poderia ver o que falta no meu código? preciso apresentar esse trabalha na sexta a noite dia 15/06/2018...estou desesperado....estou usando um Arduíno, ponte H, sensor de umidade e bomba de 5v. Por favor me ajude....
Ola, Estou pegando a manha agora de arduino e tentando e fazendo alguns projetos. No momento eu ainda estou brincando com leds e gostaria de saber como fazer um programa para um cubo 4*4*4 porque eu ja baixei alguns, mas gostaria de fazer o meu proprio projeto, como fazer obrigado
Leonardo Tamanhao Olá Leonardo. O PID é aplicado num valor que varie proporcionalmente à saida do controle... Portanto não necessariamente vc precisa somar os sensores. Exemplo: Se tiver 2 sensores de temperatura, você talvez queira saber a média, ou, a diferênça... Depende do que você está medindo, e o que quer fazer com isso. Se estiver tentando seguir linha com 2 sensores, o ideal é descobrir a diferença (subtrair um do outro). Abraços!
Ivan; Poderia falar sobre a comunicação entre arduino e Software SCADA (Indosoft ou SCADABR) usando o protocolo Modbus e rede RS-485. O que acha? Seria de grande ajuda. Grande Abraço.
Marcus Aurélio Silva Pereira Bacana! Está na lista... preciso de tempo livre, e tédio em casa para fazer o próximo vídeo, os dois eu até tenho, mas juntos é dificil rsAbraços
Olá, Ivan. Baixei sua classe PID para utilizar num projeto, mas ao chamar meuPid.process() este só retorna "nan". Fui tentando descobrir o problema e acho que o motivo é a primeira chamada da classe. Na parte I, o I depende de um I anterior, que ainda não recebeu qualquer valor, só foi instanciado. No caso da parte D ela precisa da lastSample, que ainda não existe também na primeira chamada. Como a parte e I e D são variações, só faz sentido chamar a partir da segunda amostra pelo menos, certo? Como posso corrigir isso?
amigo muito bom o seu trabalho implementei um duplo pid em meu tcc com base no seu código muito obrigado! mas me tire uma duvida, seu pid é ideal ou paralelo?
Please take in mind that the derivative portion should be divided by the sample time instead of multiplied. Furthermore the 'lastSample' should be subtracted from the 'sample' instead of vice versa. Since e' = de/dt ≈ Δe/Δt = (e - e_last)/dt
Hi Tom! Yes... Someone pointed me that too! I added a note to the video fixing that. About the lastSample-sample, it is only a matter of changing the constants (-1, 1..) But will add another note too! Thanks
Boa tarde Ivan,Estou tentando utilizar o seu código com um giroscópio, e estou tendo muitas dificuldades, vc conseguiria me ajudar?O meu giro se fixa em 89°, e tbm fiquei em duvida aonde eu devo seta o meu set point.