LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: c3dr1c em 21 de Janeiro de 2012, 12:15

Título: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 21 de Janeiro de 2012, 12:15
Boas pessoal. Ja acabei o meu projecto de labview e como forma de contributo para o forum vou disponibilizar aqui. Pode ser que de jeito a algum noob como eu eheheh :D
Muito obrigado pela ajuda que me dao no forum...

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg51.imageshack.us%2Fimg51%2F5033%2Fsemttulojmu.png&hash=d79881195669bd2278baafdd287e77c7061276c4) (http://img51.imageshack.us/i/semttulojmu.png/)

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg99.imageshack.us%2Fimg99%2F7135%2Faquisiotempd.png&hash=de6f3e4628aac6aee5b77854e910a9eef1506acd) (http://img99.imageshack.us/i/aquisiotempd.png/)

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg100.imageshack.us%2Fimg100%2F8702%2Ftempdu.png&hash=48c2e40347bd9d228057273505ee816929fc4ffa) (http://img100.imageshack.us/i/tempdu.png/)

Cumprimentos

Edit: É verdade, esqueci-me de dizer que o registador da temperatura de alarme nao esta em pleno funcionamento, pois nao consegui gerar um pulso para activar. Ta a funcionar com um interruptor...
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 22 de Janeiro de 2012, 15:43
Pessoal uma pergunta... O arduino tem um conversor AD de 10bit. Porque so consigo receber 8bits no labview? Tambem tiver a experimentar usar PWM para controlar a reistencia mas so congigo enviar 8 bits (0 a 255).

Será algum conflito ou é devido as caracteristicas do arduino?
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 22 de Janeiro de 2012, 22:05
Provavelmente estás a enviar os dados que o adc retorna num byte e não em dois bytes, porque o adc.read retorna um valor entre 0 e 1023 ou seja 10 bits, o atmega suporta pwm até 10 bits, mas usando o IDE do Arduino e todas as suas simplicidades só podes usar os timers em modo de 8 bits, e só o timer 1 que é de 16 bits é que pode fazer pwm a 10 bits.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: Ninja em 23 de Janeiro de 2012, 10:39
Se tiveres a UART configurada com 8N1 só envia um byte
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 23 de Janeiro de 2012, 13:26
Bem como nao tou muito bem dentro do que voces falam, pelo que percebi do post do senso nao posso utilizar 10bits ou para poder tenho de usar o timer 1. Onde vejo essas infos e altero? se der....

Ninja do que se trata 8N1? Da para alterar isso?

O que pude verificar foi isto no gestor de dispositivos e la so da para seleccionar no maximo 8 bits.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg406.imageshack.us%2Fimg406%2F2662%2F31696561.png&hash=95917d3ab874a069c1a035c5b1220fd050c3f745) (http://img406.imageshack.us/i/31696561.png/)

Quanto ao programa ja fiz avanços. Implementei PWM para controlar a velocidade de uma fan caso a temeperatura ambiente, passe a temperatura de alarme. E um registo em txt dos valores do grafico, temperatura em função do tempo... Para mais tarde analisar e implementar uma função de controlo da resistencia de aquecimento atraves de pwm.

Abraços pessoal...
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: Ninja em 23 de Janeiro de 2012, 13:39
8 - Bits de dados
N - Paridade nenhum
1 -  1 bit de paragem

Só recebes 1 byte porque a tua ligação está configurada com 8n1, as tuas tramas UART só conseguem transmitir no máximo 1 byte(8bits) de cada vez, logo o labview só vai receber os 8 bits menos significativos da tua variável de 10bits.
Se queres processar 10bits no labview tens de mandar estes 10bits divididos em 2 tramas, uma com os 8bits e a outra com os restantes 2, e adicionar algoritmo de processamento no labview para juntar os bits todos.
Alguém que me corrija se estiver enganado.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 23 de Janeiro de 2012, 14:08
Mostra o código do lado do Arduinio, porque um print do Arduino envia o valor lido pelo adc com 16 bits e assim recebes tudo, tambem depende é do que tens no labview que pode só estar a ler os primeiros 8 bits a e mandar os outros 2 para o lixo.
Porque é que precisas de pwm de 10 bits?
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 24 de Janeiro de 2012, 19:07
Boas obrigado pelas respostas.
Como eu queria controlar a resistencia de aquecimento por PWM, conseguia ser mais preciso. Bem como em termos de recepção de temperatura, consegui mais sensibilidade. E quanto mais precisão melhor, visto que se trata de um projecto de instrumentação...

Quando dizes mostra o codigo do lado do arduino, é o codigo programado no microcontrolador?

Eu quando corro o meu programa, realmente aparece-me um aviso do labview a dizer que está tudo bem, mas que consigo receber mais bits do que os que recebo actualmente.

Realmente estou a utilizar 8N1, ja percebi... Entao mas preciso de configurar duas tramas?

Cumprimentos
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 24 de Janeiro de 2012, 19:22
Controlo de uma resistência de aquecimento?
A inércia térmica disso é tão grande que até um simples controlo on-off é suficiente na maioria dos casos, pwm de 8 bits é mais que suficiente para fazer o controlo de uma resistência.
Como te disse, não precisas nada de duas tramas, se fizeres isto:
Serial.print(adc.read(0));
Ele envia os dados em ascii com valor entre 0 e 1023.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 24 de Janeiro de 2012, 19:39
Controlo de uma resistência de aquecimento?
A inércia térmica disso é tão grande que até um simples controlo on-off é suficiente na maioria dos casos, pwm de 8 bits é mais que suficiente para fazer o controlo de uma resistência.
Como te disse, não precisas nada de duas tramas, se fizeres isto:
Serial.print(adc.read(0));
Ele envia os dados em ascii com valor entre 0 e 1023.

Mas uma das importancias deste projecto é a redução de custos, logo o pwm apresenta uma optima solução ou estarei enganado?

Ok vou averiguar isso... thanks
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 24 de Janeiro de 2012, 20:38
E em que é que o pwm te reduz os custos?
Essa tal resistência, é alimentada por AC ou DC?

EDIT:
A primeira pergunta não é para ser levada a mal, é mais para ser levada como se fosse um professor a perguntar, e tens de dar uma resposta coerente e plausivel.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 25 de Janeiro de 2012, 11:15
Se calhar nao reduz assim tanto os custos. Tipo comparando um sistema pwm com um usando um termostato com histerese, o pwm vai fornecer a potencia necessaria para aquecer ate uma determinada temperatura. Usando o termostato, ele aquece um pouco mais que a temperatura desejada e talvez por isso gaste mais electricidade, mas pensando bem dps quando arrefece um pouco mais que a temperatura desejada, talvez compense ai o gasto extra.... Mas isso ja depende do isolamento.

Se calhar o meu prof nao quis ividenciar que podemos poupar energia electrica usando pwm, mas sim um modo de controlo inteligente e que vai de encontro ao pretendido, directamente e sem percas de tempo.

O que tens a dizer sobre pwm e aquecimento???

A resistencia é alimentada por AC, iria usar um optoacoplador e um triac/tiristor...

Abraços
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 25 de Janeiro de 2012, 14:28
Isso dos gastos nada como agarrar na tralha toda e fazer uns testes, medir a voltagem e a corrente, integrar isso ao longo do tempo e ver se poupa ou gastas mais energia.
Um termostato com histerese é um controlo on-off, ou seja forneces um pouco mais de energia que o precisas para atingir o set-point, depois desligas e não consomes nada, passas abaixo do set-point+histere e voltas a ligar a todo o vapor, e assim sucessivamente, o que o pwm(que não é pwm, mas já lá vamos) te permite fazer conjuntamente com um bocadinho de PI/PD/PID é atingir o set-point, sem overshot ou undershot do mesmo, e manter depois no set-point ao controlar a quantidade de energia que é fornecida á resistência.
Esse controlo em AC não se chama pwm mas sim controlo de fase, convem que tenhas um método para detectar a passagem por 0 da onda AC que é para puderes ligar o Triac e depois consoante a energia que queres fornecer á resistência desligas o triac, integrando os dois valores ao longo do tempo é provavel que tenhas ganhos minimos com controlo de fase se o sistema estiver bem afinado e calibrado, porque o over e undershot do termostato não vão fazer com que haja um consumo de energia assim tão massivo quanto isso.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 25 de Janeiro de 2012, 18:12
Hum estou a entender-te. Bem mas o objectivo é mesmo esse, utilizar um controlador PID (ou atraves de labview ou atraves de codigo arduino) e fornecer a potencia necessaria à resistencia.

Agora fiquei com umas duvidas, mas ainda bem, pois nem sequer eram duvidas :P

Eu pensava que ao utilizar um triac iria funcionar como um transistor normal mas para corrente alternada... Mas ya agora que penso isso, andar a ligar e desligar o triac muitas vezes seguidas (como fiz com um transistor para uma fan, usando pwm) nao funciona. Trata-se de uma onda sinusoidal que varia no tempo...

Estou à nora de como fazer isso, mas bora la pesquisar :D Falas que é importante saber quando a onda passa por 0, para poder ter um ponto de referencia, certo? Para poder ligar o triac nessa altura e depois sabendo o tempo que está ligado é so integrar a onda e tenho a energia fornecida... será?

Isto cada vez torna-se mais interessante  ;D

Muito obrigado e cumps...
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 25 de Janeiro de 2012, 18:33
Tens de saber quando a onda passa por zero, pois o TRIAC só liga quando a voltagem AC é 0v, se o tentares ligar noutra altura ele não liga, ou usas um transformador, divisores resistivos e um opto-isolador, com mais uma resistencia ou duas para a partir dos 250vAC teres uma onda quadrada que é 1 ou 0 (depende do circuito e não importa para a programação) quando a onda sinusoidal passa por zero, ligas isso a uma das interrupções do Arduino e nessa interrupção ligas o triac, ou então usas um MOC3031 que é o opto-isolador que faz o drive do TRIAC que mas que já tem um circuito que só liga o TRIAC a quando da passagem por zero, simplifica-te o circuito, mas deixas de saber quando passas-te por zero e pode ser mais dificil fazer o controlo de fase dessa maneira, com essa MOC podes aplicar-lhe pwm que o TRIAC vai disparar quando deve, mas o controlo de fase sem saber quando passou por zero é impossivel de se fazer, dai ser mais vantajoso usar um pequeno circuito e usar interrupções no Arduino.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 25 de Janeiro de 2012, 19:53
Boa boa nao sabia que o triac so liga quando passo por zero. O que queres dizer com interrupções do arduino??? Sao entradas/saidas digitais?

Sim prefiro fazer o mini circuito do que usar a moc... Acho que assim, a lidar com as coisas directamente, aprendo mais e nao deve ser muito complicado. Alem disso como tu dizes, com a moc nao sei quando passa por 0.

O opto isolador vai servir para comunicar ao arduino quando a onda quadrada é 0 ou 1 certo?

Bem entao primeiro passo é criar uma onda quadrada :D

Abraços...
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 25 de Janeiro de 2012, 19:58
Interrupções são pinos especiais, que quando configurados de uma certa maneira em código chamam uma função quando mudam de 0 para 1 ou de 1 para 0, o mais simples de usar para isso é os pinos digital 2 e 3 do Arduino que são respectivamente o Int0 e o Int1, para mais leitura tens isto:
http://arduino.cc/it/Reference/AttachInterrupt (http://arduino.cc/it/Reference/AttachInterrupt)

A onda quadrada é derivada dos 250vAC da tomada, por isso usa um transformador e cuidado.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 25 de Janeiro de 2012, 20:10
Rigth ja percebi...

Agora tenho umas duvidas... Preciso de um transformador que vai converter a corrente alternada em continua, sem o circuito de rectificação, para a onda se manter sinusoidal certo?

Com essa corrente continua, imaginando que sao 12v, basta fazer um divisor de tensão para alimentar o led do opto-isolador + resistencia para limitar a corrente para o led nao queimar? Ou como a corrente nao é rectificada, não é bem assim?
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 25 de Janeiro de 2012, 20:13
Não, um transformador só baixa(ou aumenta) a voltagem ac que tens da tomada, quem transforma isso numa tensão continua seria uma ponte rectificadora e um condensador ou dois, usas um transformador para baixar a tensão ai para 5v DC, para ser relativamente seguro, mas AC é sempre AC, e depois baseia-te nisto por exemplo:
http://www.mcselec.com/index.php?option=com_content&task=view&id=89&Itemid=57 (http://www.mcselec.com/index.php?option=com_content&task=view&id=89&Itemid=57)
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 25 de Janeiro de 2012, 20:37
Oh nao ligues... claro que sim dei isso a electronica 1 e tudo... Nao tou é habituado a falar de electronica com o pessoal e depois escapa-se sempre permonores ou digo coisas sem jeito nenhum... E depois vêm os termos que vos vejo falar no forum e nem faço a minima... Por exemplo quando falaste em PID, nao fazia a minima do que estavas a dizer... Depois fui pesquisar, ho ta claro é aquilo que o prof me explicou loool

O importante é que tou a curtir bue a aprender muito... Sempre curti electronica mas nunca pus maos ao trabalho a nao ser à uns mesitos... :D

Entao é o que queria dizer... transformar a alta corrente em baixa, em torno dos 12v ou dos 5v, divisor de corrente, resistencia e tenho a alimentação do led feita... O led acende e apaga conforme a onda sinusoidal... Os diodos (que nem me lembrei) vao permitir que a corrente flua sempre no mesmo sentido em torno do led, quando a onda tem valor negativo bem como quando a onda tem valor positivo...

Edit: Bem o opto acoplador ja ca canta... Tava aqui uma pcb com um CI mesmo a olhar para mim a dizer, eu sou um optoacoplador :P EL817
Tambem tem um transformador, mas encontrar info na net sobre ele, nem pensar...
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 26 de Janeiro de 2012, 18:52
Bem mudança de planos... Este projecto vai ficar em stand by. O semestre começa daqui a uma semana e vou começar a trabalhar no projecto final de curso, ou seja, a cnc. Obirgado pelo vossa ajuda neste meu projecto. De qualquer maneira so nao fiz o controlo inteligente PID, mas la pa setembro ja volto a este projecto que parece-me bastante util para a minha carreira profissional, em termos de bases. É pena na cadeira de controlo e automação, que fiz a uns anos, nao ter tado com mais atenção :P

Abraços e muito obrigado pela vossa ajuda...
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: carlos_augusto em 29 de Maio de 2012, 01:15
Isso dos gastos nada como agarrar na tralha toda e fazer uns testes, medir a voltagem e a corrente, integrar isso ao longo do tempo e ver se poupa ou gastas mais energia.
Um termostato com histerese é um controlo on-off, ou seja forneces um pouco mais de energia que o precisas para atingir o set-point, depois desligas e não consomes nada, passas abaixo do set-point+histere e voltas a ligar a todo o vapor, e assim sucessivamente, o que o pwm(que não é pwm, mas já lá vamos) te permite fazer conjuntamente com um bocadinho de PI/PD/PID é atingir o set-point, sem overshot ou undershot do mesmo, e manter depois no set-point ao controlar a quantidade de energia que é fornecida á resistência.
Esse controlo em AC não se chama pwm mas sim controlo de fase, convem que tenhas um método para detectar a passagem por 0 da onda AC que é para puderes ligar o Triac e depois consoante a energia que queres fornecer á resistência desligas o triac, integrando os dois valores ao longo do tempo é provavel que tenhas ganhos minimos com controlo de fase se o sistema estiver bem afinado e calibrado, porque o over e undershot do termostato não vão fazer com que haja um consumo de energia assim tão massivo quanto isso.
Olá pessoal, terei de implementar um controlador de  temperatura  PID e irei utilizar labview ou matlab com arduino e este vai controlar um triac via tca. Eu verifiquei que o labview possui biblioteca PID. é por ai?
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 30 de Maio de 2012, 04:01
Deve ser por ai... Por acaso nao faço a minima. Mas é uma materia que mais tarde estudarei.

Sempre podes fazer sem a biblioteca. Procura por PDI control que tens boa info por ai.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 30 de Maio de 2012, 04:05
Isso dos gastos nada como agarrar na tralha toda e fazer uns testes, medir a voltagem e a corrente, integrar isso ao longo do tempo e ver se poupa ou gastas mais energia.
Um termostato com histerese é um controlo on-off, ou seja forneces um pouco mais de energia que o precisas para atingir o set-point, depois desligas e não consomes nada, passas abaixo do set-point+histere e voltas a ligar a todo o vapor, e assim sucessivamente, o que o pwm(que não é pwm, mas já lá vamos) te permite fazer conjuntamente com um bocadinho de PI/PD/PID é atingir o set-point, sem overshot ou undershot do mesmo, e manter depois no set-point ao controlar a quantidade de energia que é fornecida á resistência.
Esse controlo em AC não se chama pwm mas sim controlo de fase, convem que tenhas um método para detectar a passagem por 0 da onda AC que é para puderes ligar o Triac e depois consoante a energia que queres fornecer á resistência desligas o triac, integrando os dois valores ao longo do tempo é provavel que tenhas ganhos minimos com controlo de fase se o sistema estiver bem afinado e calibrado, porque o over e undershot do termostato não vão fazer com que haja um consumo de energia assim tão massivo quanto isso.
Olá pessoal, terei de implementar um controlador de  temperatura  PID e irei utilizar labview ou matlab com arduino e este vai controlar um triac via tca. Eu verifiquei que o labview possui biblioteca PID. é por ai?

Eu faria todo o controlo de baixo nivel no Arduino, e simplesmente recebia e enviada valores de tensão/duty-cycles e coisas assim por serial, fazer pid no pc e mandar para o arduino é pedir para que isso funcione muito lentamente ou oscile.
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: maurosmartins em 30 de Maio de 2012, 12:16
Viva pessoal, tenho andado por fora do forum, mas gostaria de contribuir neste post.

@Senso:
Tens de saber quando a onda passa por zero, pois o TRIAC só liga quando a voltagem AC é 0v, se o tentares ligar noutra altura ele não liga.

creio que não está correcto, o Triac liga noutras alturas, regra geral liga-se quando a tensão é 0V porque é mais facil controlar o Ton da onda e também  para diminuir distorções harmónicas.

O Triac só desliga quando a corrente (e não a tensão) que o atravessa é zero (ou perto de zero, chamada corrente de manutenção) por acaso quando a carga é resistiva a corrente anula-se em simultâneo com a tensão.

A questão do controlo de temperatura não é assim tão trivial, um simples on/off vai dar resultados pobres, mas um controlador PI/PID também necessita de ter em conta algumas considerações. Devido à inercia termina da resistencia este sistema tem um atraso na resposta. Isto significa que dado um setpoint, o controlador vai dar uma saida (duty cycle) e espera pela proxima amostra, como o sistema é lento o setpoint e a temperatura da resistencia ainda nao vao ser iguais, entao o controlador ira produzir novo valor de duty cycle ainda maior (devido à componente integral). Quando a resistencia chega por fim ao valor desejado tem a inercia termica mais uma vez e vai continuar a aquecer causando overshoots de temperatura.

Cumprimentos, Mauro.

 
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: carlos_augusto em 30 de Maio de 2012, 18:12
Isso dos gastos nada como agarrar na tralha toda e fazer uns testes, medir a voltagem e a corrente, integrar isso ao longo do tempo e ver se poupa ou gastas mais energia.
Um termostato com histerese é um controlo on-off, ou seja forneces um pouco mais de energia que o precisas para atingir o set-point, depois desligas e não consomes nada, passas abaixo do set-point+histere e voltas a ligar a todo o vapor, e assim sucessivamente, o que o pwm(que não é pwm, mas já lá vamos) te permite fazer conjuntamente com um bocadinho de PI/PD/PID é atingir o set-point, sem overshot ou undershot do mesmo, e manter depois no set-point ao controlar a quantidade de energia que é fornecida á resistência.
Esse controlo em AC não se chama pwm mas sim controlo de fase, convem que tenhas um método para detectar a passagem por 0 da onda AC que é para puderes ligar o Triac e depois consoante a energia que queres fornecer á resistência desligas o triac, integrando os dois valores ao longo do tempo é provavel que tenhas ganhos minimos com controlo de fase se o sistema estiver bem afinado e calibrado, porque o over e undershot do termostato não vão fazer com que haja um consumo de energia assim tão massivo quanto isso.
Olá pessoal, terei de implementar um controlador de  temperatura  PID e irei utilizar labview ou matlab com arduino e este vai controlar um triac via tca. Eu verifiquei que o labview possui biblioteca PID. é por ai?

Eu faria todo o controlo de baixo nivel no Arduino, e simplesmente recebia e enviada valores de tensão/duty-cycles e coisas assim por serial, fazer pid no pc e mandar para o arduino é pedir para que isso funcione muito lentamente ou oscile.
A minha primeira ideia, inclusive na parte do arduino já está assim, é seguir esta lógica, mas o requisito do sistema é existir interação com matlab por exemplo. A comunicação com o matlab ta sendo o problema!
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 30 de Maio de 2012, 20:43
Eu com o matlab so experimentei a ligar um led... Por acaso nunca fiz mais nada.

Mas ya o senso tem razão. E eu que o diga com a minha cnc. A programação base no micro é muito mais eficiente.

Eu nunca percebi uma coisa. Nós é que criamos as funções para o controlo P, I e D ou elas ja são conhecidas? Temos de criar a função transferencia ne? Arrependo-me de nao ter estado com atenção nas aulas de controlo  :-\

Cumps

Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: senso em 30 de Maio de 2012, 22:51
Não leves a mal dar-te um link para leres, mas aconselho a leitura dos 8 ou 9 posts que compõe este fantástico tutorial sobre PID:
http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/ (http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/)
Título: Re: Labview Arduino Controlo de Temperatura
Enviado por: c3dr1c em 31 de Maio de 2012, 00:24
Senso fiquei mt ofendido eheh  ;D

Tenho depois de ver isso. É que isto do PID parece-me bastante util para vários projectos. E eu tou a zeros :P

Ainda tenho este projecto para acabar...