LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: mrr em 07 de Abril de 2010, 11:28
-
Boas pessoal,
Tenho um arduino ligado a um sensor de temperatura(LM35), estou com problemas quando ligo o sensor com um cabo de 30metros, começa a dar valores errados e inconstantes. Se ligar o sensor directo ao arduino(20cm de cabo) esse problema desaparece.
Estou a utilizar um sensor LM35 mais uma resistência de 10K.
Não percebo nada de electrónica, se alguém me poder ajudar a resolver este problema agradecia.
-
Num cabo de 30m, não admira apanhar ruído, campos eléctricos, etc...
Deves pôr o Arduino perto do sensor e fazer o resto da comunicação depois disso.
Nada de valores analógicos. Para fazeres a maratona dos 30m, apenas HIGH ou LOW.
-
Obrigado pela ajuda.
O problema é que tenho vários sensores para ligar e com alguma distancia considerável.
E se utilizar um sensor digital tipo SHT15 será que vou ter o mesmo problema?
-
Podes tentar as recomendações do fabricante, páginas 7 e 8:
http://www.national.com/ds/LM/LM35.pdf (http://www.national.com/ds/LM/LM35.pdf)
-
Obrigado Njay pela dica. Mas como não percebo nada de electrónica torna-se complicado para perceber.
E se utilizar o TMP102 será que deixo de ter esse problema, já que se trata de um sensor digital?
Arduino ->-----30 metros cabo-----> TMP102.
-
30 metros de cabo precisas de usar rs-232 dos dois lados para teres algo mais que ruido na ponta do cabo
-
O meu objectivo é ter um arduino ligado a uns reles e ler a temperatura de uma estufa, o problema é que queria ter o sensor a 30 metros de distancia(centro da estufa). não estou a ver como o vou fazer de forma simples, existe sempre algum problema :'( .
Agradeço a todos os que me têm ajudado e me possam vir a ajudar.
-
existe sempre o wireless :)
-
O meu objectivo é ter um arduino ligado a uns reles e ler a temperatura de uma estufa, o problema é que queria ter o sensor a 30 metros de distancia(centro da estufa). não estou a ver como o vou fazer de forma simples, existe sempre algum problema :'( .
Agradeço a todos os que me têm ajudado e me possam vir a ajudar.
Se queres ter o sensor a 30metros eu aconcelhava-te a usar por exemplo um Attiny da Atmel que são a familia mais simples/pequena dos AVR de 8bits e depois utilizas por exemplo rs232 a baixas velocidades de transmissão de dados ou por exemplo rs485 entre o sensor e os reles. Esta solução parece-me a mais indicada a menos que digas que não pode ter fios e ai só tens a solução wireless.
-
Obrigado pessoal pela dica.
Pensei que seria algo mais simples. Isto porque tenho um sistema de uma empresa holandesa lá montado, onde tem duas sondas uma a 30metros e outra a 120metros de distancia do computador e não existe nada entre elas, apenas um cabo de rede que utiliza apenas dois fios. A sonda é parecida a foto que anexei.
-
Vê a figura 6 das páginas da datasheet que te indiquei, é isso que podes experimentar. Adicionar aquelas 3 resistências (só a ligada ao OUT é que fica com o sensor, as outras 2 ficam ao pé do arduino) e usar o cabo entrançado.
Usar sensores digitais só por si não te resolve o problema (que é o comprimento do cabo).
-
Obrigado Njay, por acaso já me tinhas indicado. Vou tentar fazer tal como indica na figura 6. Depois digo o resultado, espero que seja satisfatório ;) .
-
Já agora que tipo de cabo estas a utilizar, por acaso é cabo com malha ligada a terra.
-
Estou a usar cabo de rede, pelo menos parece, é igual e tem seis fios.
-
Eu costumo utilizar liycy para as sondas com a malha ligada a terra apenas num dos lados.
http://www.eurocabos.pt/catalogo/detalhes_produto.php?id=1237 (http://www.eurocabos.pt/catalogo/detalhes_produto.php?id=1237)
Antes utilizava-mos tvhv mas tinha-mos muitos problemas com interferências( ruídos) nas leituras.
-
Boa noite,
Alguém me pode indicar quais são as cores das riscas de uma resistencia de 200 1%?
é que eu comprei uns de 200, mas não sei se são de 1%, os que tenho e: vermelho, preto, castanho e dourado, segue em anexo uma foto.
-
Queres saber o valor da resistência (resistor), não do transístor.
Pelas cores que deste é de 200 ohm com 5% tolerância.
Se quisesses 1% tolerância teria de ser vermelho, preto, castanho e castanho.
-
Obrigado microbyte,
Já corrigi, de facto era uma resistencia e não transistor. Parece é que me enganei no que comprei :-\
-
Pega num multimetro e mede a resistência delas na escala mais baixa possível. As que tiverem entre 198 e 202 Ohm inclusivé (se alguma) são na prática equivalentes a resistências de 200 Ohm 1%.
-
Ou então trocar o LM35 por um DS1820, e ter centenas de metros de distância :)
-
Em que tipo de ambientes?
É que centenas de metros para um sinal de 5v dc não sei bem se é possivel, digo eu :s
-
É possivel devido ao protocolo de comunicação que é usado :: 1-wire (http://www.maxim-ic.com/app-notes/index.mvp/id/1796) e 1-wire (http://www.1wire.org/) e 1-wire (http://en.wikipedia.org/wiki/1-Wire)
É bastante robusto, e permite muitos participantes no barramento.
Vejam os links, que vale a pena saber desta tecnologia.
-
Obrigado a todos pelas dicas que me têm dado.
Eu de electrónica não percebo nada, só consigo fazer coisas simples e começa-se a tornar complicado fazer algo mais complexo.
Estou agora com um problemazito que é o seguinte:
Neste momento estou a tentar ligar o LM35 como indica na figura 6 do datasheet, o problema é que não consegui arranjar resistências de 200 Ohm a 1% então estou com resistências de 200 Ohm a 5% não sei se isso influencia.
O problema que tenho agora é o código no arduino que ei de utilizar para ler os valores, estou a utilizar o seguinte, mas os valores estão errados, muito acima da temperatura ambiente:
/*
An open-source LM35DZ Temperature Sensor for Arduino. This project will be enhanced on a regular basis
(cc) by Daniel Spillere Andrade , http://www.danielandrade.net
http://creativecommons.org/license/cc-gpl
*/
int pin = 0; // analog pin
int tempc = 0,tempf=0; // temperature variables
int samples[8]; // variables to make a better precision
int maxi = -100,mini = 100; // to start max/min temperature
int i;
void setup()
{
Serial.begin(9600); // start serial communication
}
void loop()
{
for(i = 0;i <= 7;i++){ // gets 8 samples of temperature
samples = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + samples;
delay(1000);
}
tempc = tempc/8.0; // better precision
tempf = (tempc * 9)/ 5 + 32; // converts to fahrenheit
if(tempc > maxi) {maxi = tempc;} // set max temperature
if(tempc < mini) {mini = tempc;} // set min temperature
Serial.print(tempc,DEC);
Serial.print(" Celsius, ");
Serial.print(tempf,DEC);
Serial.print(" fahrenheit -> ");
Serial.print(maxi,DEC);
Serial.print(" Max, ");
Serial.print(mini,DEC);
Serial.println(" Min");
tempc = 0;
delay(1000); // delay before loop
}
Alguém me pode dar uma ajuda?
-
1º a fórmula de cálculo da temperatura é ligeiramente diferente para esse circuito, está lá na figura 6 (+1ºC).
Depois eu faria o seguinte. Ligava o LM35 da forma habitual e via a temperatura; depois arranjava um potenciómetro de 10K e colocava no lugar da resistência de 6.8K da figura, a ajustava-o até ler a temperatura certa. Depois mudava de local para um alguns graus mais frio ou mais quente e comparava a leitura do LM ligado de forma normal com a do LM35 no novo circuito, para ver se tudo bate certo. Se não batesse, arranjava as resistências de 200 Ohm (ou, com um multimetro, pegava nas que já tinha e escolhia 2 com um valor separado de até 4 Ohm) e repetia. Se ainda assim não batesse certo, pensaria depois no que fazer...
-
É raro os LM35 estarem muito desviados da temperatura certa. A melhor for de aferir, é usar um termómetro de mercúrio para comparar. Esses não falham.
Se mesmo assim houver um desvio, ou corrige-se na equação ou na resistência veriavel.
Aumentar a saida do LM35 em 4x, ajuda a fazer as leituras. Mas o desvio tem q ser sempre corrigido por soft/hardware.
-
Como é que posso aumentar a saída do LM35?
-
Podes fazê-lo com um Amplificador Operacional. Tens aqui literatura (http://cadeiras.iscte.pt/cse//Folhas/AMPOPs/AMPOPs.htm)tirada do google, aleatoreamente. Lê com atenção, está lá muita informação. Se quiseres mais e-livros, tenho muita coisa.
E tens em anexo, um circuito simples que multiplica o sinal 2x.
As resistências R1 e R2 estipulam o ganho do amplificador.
-
Boas pessoal,
O problema da distancia esta resolvido, liguei o LM35 como indica na figura 6 do datasheet, depois de ter conseguido arranjar resistências de 200 a 1% consegui obter valores de temperatura correctos...
Agora estou com outra questão, tenho um potenciómetro e gostava de sabes se é possível liga-lo apenas com dois fios ao arduino, tal como acontece com o LM35, acabo por ter apenas dois fios, o resto fica perto do arduino(resistências).
Muito obrigado a todos que me ajudaram, sem a vossa ajuda acho que nunca teria conseguido...
-
Um potenciometro tem de ter 3 fios, dois estão ligados á resistencia do potenciometro, tal e qual como uma resistencia e o outro fio liga á escova do potenciometro e é essa que te dá a leitura variavel de resistencia.
-
Agora estou com outra questão, tenho um potenciómetro e gostava de sabes se é possível liga-lo apenas com dois fios ao arduino, tal como acontece com o LM35, acabo por ter apenas dois fios, o resto fica perto do arduino(resistências).
Dá se aceitares algumas limitações. De que valor é o teu potenciómetro?
-
Njay tenho um potenciómetro, mas não sei a potencia dele.
podes-me dar algum exemplo?
-
Njay tenho um potenciómetro, mas não sei a potencia dele.
podes-me dar algum exemplo?
Tu não deves querer saber a potencia dele, embora uma das características das resistências é a potencia que aguentam, neste caso queres saber a resistência do potenciómetro.
Dá aqui uma vista de olhos Qué son los potenciometros (http://www.youtube.com/watch?v=x4I_i2P4QTg#) e Potentiometers - How They Work, Disassembly and Exploration (http://www.youtube.com/watch?v=rUkrpqEmXb8#ws)
-
Eu quero saber é a resistência (máxima) dele, deve lá ter escrito.
-
A única coisa que vi lá escrito foi M20, não sei será de 20K....
Não há uma "formula" tipo universal para se conseguir ligar um potenciómetro apenas com dois fios?
-
M20? Não tou a ver o que é.
O que eu propunha para ligares um pot com apenas 2 fios é usar uma resistência com o mesmo valor do pot e ligar assim:
+-----+
| |
5V ---\/\/\---+---\/\/\---+--- GND
|
|
ADC do Arduino
A limitação desta ligação é que só vais ler valores do ADC entre 0 e ~511, e és capaz de ter que "corrigir" a leitura pois ela não é linear (se usares uma resistência de umas 5 vezes o valor do pot a aceitares teres leituras apenas entre 0 e talvez uns 170, a leitura já deve ser linear q.b.)... mas é uma forma de conseguir o que queres.
-
Não percebi o porque de ligarem o pot so com 2 fios e depois usarem uma resistencia em serie.
Se ele usar o pot directamente tem 10bits de resoluçao.
____
5v -------|__/__|-------- Gnd
/
/ arduino analog
-
FET_Destroyer,
Dá forma como indicas-te quando ligado com um cabo comprido acaba por ter um sinal muito variado devido ao ruído...
Por isso é que preciso saber como ligar apenas com dois fios para não ter problemas com a distancia.
Vou tentar fazer como o Njay indicou.
Obrigado a todos pela ajuda que me têm dado.
-
FET_Destroyer,
Dá forma como indicas-te quando ligado com um cabo comprido acaba por ter um sinal muito variado devido ao ruído...
Por isso é que preciso saber como ligar apenas com dois fios para não ter problemas com a distancia.
Vou tentar fazer como o Njay indicou.
Obrigado a todos pela ajuda que me têm dado.
Boas
Continuo sem perceber porque penso que tenha ruido com 2 ou 3 fios, mas lá está, com essa ligação ficas com muito menos resolução, segundo disse o Njay 170, não chega a 8bits, mas de ser para o que queres sempre poupas um condutor, pk em vez de 3 levas 2.
cumps
-
A minha sugestão vem de apenas ter sido pedido um potenciómetro com 2 fios, nada mais.
Para o problema do ruído, é experimentar uma ou várias de
1) Colocar uma resistência em série e depois um condensador para a massa na entrada do ADC no Arduino
2) Usar resistência e potenciómetro de valores baixos, como 1K (menos não)
3) Entrançar o cabo do potenciómetro
-
Experimenta usar um cabo cat5, é barato ao metro, ou então um cabo para microfones e no lado do arduino ligas o shield do cabo á massa para assim se tornar mais imune ao ruido.
-
Boas pessoal,
Depois de algum tempo ausente decidi voltar, desta vez para publicar o resultado do sistema que consegui montar.
Desde já agradeco a todos os que me ajudaram, sem vocês isto não era possível.
Agora o sistema, já está a funcionar a quase dois meses e meio sem problema nenhum até agora detectado, 24hx7dias sempre a bombar.
O sistema actual esta a controlar a abertura e fecho de janelas de uma estufa, apenas tem como valores de input a temperatura e % do estado a que se encontra a janela, a partir desses dois valores tenho um PC com um programa feito em C# que tem um interface simples onde se pode parametrizar vários valores e que esta constantemente a fazer cálculos de forma a dar ordens ao arduino quando algo deve acontecer.
O sistema é composto por:
- Arduino;
- LM35 (Sensor de temperatura);
- Potenciómetro (Sensor de % de abertura);
- 2 Rele 12V (Manda abrir ou fechar a janela);
- PC (Programa que controla o sistema).
O próximo passo era integrar mais sensores (humidade+temperatura exterior+velocidade do vento+chuva+direcção do vento) para ter um melhor controlo, mas algo que para mim esta-se a tornar complexo de mais para quem não percebe nada de electrónica. Mesmo assim vou tentar, penso conseguir obter ajuda com vocês, ;).