LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: Cynary em 30 de Julho de 2010, 02:06
-
Recebi hoje o meu arduino novo (tenho de comentar acerca do excelente serviço da loja lusorobótica -- a encomenda mais rápida que recebi, vinda do continente :D), e já comecei a fazer algumas experiências com o mesmo :P
Liguei uma fan de cooler de CPU antiga a arduino. Estas fans têm três cabos: um vermelho, um preto e um amarelo.
Deduzi que os cabos vermelho e preto são para alimentação, e o amarelo para dar informações acerca da velocidade da ventoinha. Por isso, liguei o cabo amarelo a um pino de analog input. No entanto, os dados que aparecem lá (uso o Serial.println para enviar os dados), não fazem sentido ... Alguém tem sugestões para eu conseguir perceber esses dados?
-
olá..
se tem três cabos e se se confirmar que são vcc, gnd e sinal, o sinal n é um valor que seja pra tu 'leres' mas sim pra ser 'escrito'.. ou seja.. esse pino deves ligá-lo a um pino digital (com pwm) e enviar-lhe um valor que varia entre 0 e 255..
-
Tentei fazer o que sugeriste, mas não deu em nada.
Penso que para regular a velocidade da fan, é mesmo regulando a voltagem.
Além disso, caso o cabo amarelo fosse para controlar, não emitiria valores para o analog in (emite os valores, e consigo lê-los, mas não consigo percebê-los, pois a uma velocidade constante, eles variam, o único que faz sentido é o 6 que ocorre quando a fan está parada. Os outros, são o 5, 0, 1023, e mais alguns que agora não me lembro).
O que quero é saber como pegar nos valores e perceber o seu sentido (uma possibilidade é que os 10 bits lidos pelo leitor analog podem não corresponder aos bits da mensagem ... alguém sabe quantos bits usam as mensagens da fan? E se há alguma forma de mudar a resolução do leitor?).
-
Deixa-me ver se entendi, tu tens o fio preto que deves ligar em gnd e o vermelho no vcc de uma fonte exterior, penso que seria mais conveniente porque o arduino só te vai dar 5V e a FAN deve funcionar a 12V, deduzo que estas a usar uma fonte externa para te dar o valor máximo no analog os tais 1023.
Podes tentar fazer assim passar o valor que tens no analog.in para percentagem (Em que o valor que te dá 1023 ~=102%), se é isto que queres fazer.
Serial.println(analogRead(0)/10,DEC); //se ligado na entrada analógica 0
Coloca também um delay(1000) a seguir a leitura, até mesmo nos PC's tens +/- este atraso de leitura.
Verifica agora como esta o serial. Se tiver tempo no domingo testo a tua situação com uma FAN.
EDIT: Experimenta questionar o user que esta a fazer este projecto (http://lusorobotica.com/index.php?topic=2424.0), sobre como é que ele esta a controlar as FAN's dele, se calhar esta mais dentro do assunto.
-
Deixa-me ver se entendi, tu tens o fio preto que deves ligar em gnd e o vermelho no vcc de uma fonte exterior, penso que seria mais conveniente porque o arduino só te vai dar 5V e a FAN deve funcionar a 12V, deduzo que estas a usar uma fonte externa para te dar o valor máximo no analog os tais 1023.
Podes tentar fazer assim passar o valor que tens no analog.in para percentagem (Em que o valor que te dá 1023 ~=102%), se é isto que queres fazer.
Serial.println(analogRead(0)/10,DEC); //se ligado na entrada analógica 0
Coloca também um delay(1000) a seguir a leitura, até mesmo nos PC's tens +/- este atraso de leitura.
Verifica agora como esta o serial. Se tiver tempo no domingo testo a tua situação com uma FAN.
EDIT: Experimenta questionar o user que esta a fazer este projecto (http://lusorobotica.com/index.php?topic=2424.0), sobre como é que ele esta a controlar as FAN's dele, se calhar esta mais dentro do assunto.
Quanto à alimentação, estava a usar os 5v do arduino, que também achei estranho, dado os valores de 1023 :/
Eu tenho feito as leituras de 1 em 1 segundo, e o problema é que os dados não são regulares, variando entre 1023 e 0, sem eu alterar a velocidade da fan ...
A única vez em que se mantêm constantes é quando eu paro a fan com a mão, e ela dá-me um valor constante.
Por isso é que penso que a informação dada pela fan deve ser constituída de menos bits do que aqueles lidos pelo analog input.
Pelo que vi desse projecto, ele não está a ler as velocidades das fans, apenas a controlá-las por PWM, conforme a temperatura ... além disso, são ventoinhas diferentes (as dele têm quatro fios, a que estou a usar tem 3).
-
Depois de alguma pesquisa (acho que ontem estava mesmo a ser muito preguiçoso xD), descobri alguma informação sobre como funciona a fan, e como ler os dados de RPM da mesma:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1152891511 (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1152891511)
e
http://www.arduino.cc/playground/Main/ReadingRPM (http://www.arduino.cc/playground/Main/ReadingRPM)
Aparentemente os dados que recebia eram porque a fan envia um pulso para cada meia rotação que faz ... a ideia é usar os interrupts para registar esses pulsos, e actualizar a contagem de rpms de x em x pulsos (vou ter de ler como funcionam os pulsos para perceber isto bem ...). Além disso, também vou ter de associar resistências, apesar de ainda não ter percebido porquê xD.
-
Depois de seguir os tutoriais consegui contar o número de rotações da fan facilmente ... No entanto, estou agora com uma dúvida: para que serve exactamente a resistência pull-up?
Já pesquisei, mas as explicações são um pouco confusas, pois não percebo a necessidade da resistência para puxar a diferença de potencial para 5V.
Além disso, como sabemos quando são necessários? E quando são, como sabemos quais os valores aconselhados? (no site que vi, aconselhavam 10K, mas estou a usar uma de 2K para experimentar -- a única que tinha xD -- e não tenho problemas ...).
-
Um pull-up serve para fixar uma dada linha(fio) digital a um valor definido em meios com ruido ou por outras razões, mas se ligasses directamente aos 5v ou á massa, mais nenhum dispositivo ia conseguir mudar esse valor pois estava ligado directamente á fonte e mais ninguem tem tanta corrente como a fonte, então usa-se resistência de 10k ou mais, que apesar de puxarem a linha a um valor, seja ele 5v ou massa, é um valor fraco e outro dispositivo consegue alterar esse valor, no caso de uma resistência de 10k a corrente dada por esta é de apenas 0,0005A ou seja 0,5mA e com uma resistência de 2k esse valor passa para 0,0025A ou seja 2,5mA o que tambem não é assim muito muito nesse caso especifico.
-
Obrigado pela explicação ... penso que percebi.
Então, os pinos analógicos do arduino funcionam basicamente como um voltímetro, medindo a diferença de potencial entre o que entra, e o GND, certo? Se não houvesse a resistência, essa diferença seria sempre a de 5V (neste caso), dado que estamos a medir o circuito todo.
Outra pergunta, então qual a diferença entre uma pull-up e uma pull-down? xD
-
Mas os pull-ups estão ligados é ao sinal de rotação que vem da ventoinha e esse sinal é para ligar a uma das linhas de interrupção e o pull-up está lá para não se gerarem interrupções devido ao ruido gerado pelo motor da ventoinha, não estou a perceber para que usas o adc para isso.
-
Mas os pull-ups estão ligados é ao sinal de rotação que vem da ventoinha e esse sinal é para ligar a uma das linhas de interrupção e o pull-up está lá para não se gerarem interrupções devido ao ruido gerado pelo motor da ventoinha, não estou a perceber para que usas o adc para isso.
Pois, eu fiz isso xD
Falei no analógico, pois pensei que também se aplica da mesma forma :P
Então o pull-up serve para evitar o ruído também ...
Novamente, pergunto, qual a diferença entre o pull-up e o pull-down?
Obrigado pela paciência.
-
uma fan é um motor dc, nao convem usar diodos de protecção?
-
Pull up é ligar com uma resistencia aos 5v, e pull down é ligar com uma resistencia á massa, depende do circuito em questão e como funciona para determinar se se usar pull up ou pull down.
Uma ventoinha usa um motor brushless com alguma electrónica de controlo e tem 2 ou 3 ou 4 fases, não é realmente um motor dc.