Boas!

Eu tenho uma grande duvida, como eu passo recebendo sinais analógicos para digital?

1ºProblema; Eu preciso que o sinal no Output seja sempre 5V

Estou a usar um analisador de som, então quando recebo as frequências eu queria ativar neste caso um modulo de rele para me ligar luzes.. só que tou muito limitado em PWM que só tenho 12

Queria usar as digitais.. Sera possível fazer isso?

Inicio do programa começo assim:

int analogPin = 5; // MSGEQ7 OUT 3
int strobePin = 4; // MSGEQ7 STROBE 4
int resetPin = 5; // MSGEQ7 RESET 7
int spectrumValue[7];

Faço o int das saidas quero ativar neste caso sao as PWM

Faço o valor a 0

int Val1=0;

depois na parte de ordem esta assim

if(spectrumValue[5]>=225);
{
  Val3 =spectrumValue[5];
}
if(spectrumValue[5]<135);
{

  Val2 =spectrumValue[5];
 
}
if(spectrumValue[5]<80);
{
  Val1 =spectrumValue[5];
 
}
analogWrite(luz1, Val1);
analogWrite(luz2, Val2);
analogWrite(luz3, Val3);
}

O programa funciona.. 3 luzes diferentes liga consoante a frequência que recebe..

Eu quero e tentar receber estas frequências mas dar o sinal apartir de digitais!

E possível? Ajudem me pf

Exibições: 408

As respostas para este tópico estão encerradas.

Respostas a este tópico

Não entendi sua duvida....

Mas se entendi vc precisa de mais portas PWM.

Se for isso, vc pode fazer em software.

Algo como:

Num loop:

{

i++; //Incrementa o indice

if (i==100) { i=0; // Se chegou a 100% vc zera e manda a 0 todas as saidas.

                   Saida1=Saida2=Saida3=Saida4... =0; // Todas as saidas sao forçadas a 0

if (i> Setup1) Saida1=1; // Se o tempo programado de largura para a saida1 até o 1 for atingido vc joga 1 nessa saida

if (i> Setup2) Saida2=1; // Se o tempo programado de largura para a saida2 até o 1 for atingido vc joga 1 nessa saida

if (i> Setup3) Saida3=1; // Se o tempo programado de largura para a saida3 até o 1 for atingido vc joga 1 nessa saida

if (i> Setup4) Saida4=1; // Se o tempo programado de largura para a saida4 até o 1 for atingido vc joga 1 nessa saida

.

.

.// repete para quantas quiser.

} //Encerra loop

Nesse loop vc poria tb suas outras necessidades como leituras e comportamentos do seu programa.

Se vc colocar isso em uma interupção fica melhor ainda.

Sem usar o hardware vc perde um pouco de velocidade, mas se quer controlar lampadas pode ser que a velocidade final ainda seja bem suficiente.

Vc está usando alguma biblioteca que consegue analisar um sinal e devolve a intensidade de spectros ? Se sim acredito que só com interrupção, pq o processamento pesado geraria muita instabilidade no PWM feito no programa principal.

Sim neste caso eu preciso de 20 saidas..neste caso 20 saidas PWM neste caso usar 2 arduinos ao mesmo tempo? seria chato..

Eu estou a utilizar arduino esqueci de mencionar isso!

Eu ja estive avaliar o loop e nao entendi muito tempo..

o Analisador tem um proprio programa.. este:

Serial.begin(9600);
// Read from MSGEQ7 OUT
pinMode(analogPin, INPUT);
// Write to MSGEQ7 STROBE and RESET
pinMode(strobePin, OUTPUT);
pinMode(resetPin, OUTPUT);
// Set analogPin's reference voltage
analogReference(DEFAULT); // 5V
// Set startup values for pins
digitalWrite(resetPin, LOW);
digitalWrite(strobePin, HIGH);
}

void loop()
{
// Set reset pin low to enable strobe
digitalWrite(resetPin, HIGH);
digitalWrite(resetPin, LOW);
// Get all 7 spectrum values from the MSGEQ7
for (int i = 0; i < 7; i++)
{
digitalWrite(strobePin, LOW);
delayMicroseconds(30); // Allow output to settle
spectrumValue[i] = analogRead(analogPin);
// Constrain any value above 1023 or below filterValue
spectrumValue[i] = constrain(spectrumValue[i], filterValue, 1023);
// Remap the value to a number between 0 and 255
spectrumValue[i] = map(spectrumValue[i], filterValue, 1023, 0, 255);
// Remove serial stuff after debugging
Serial.print(spectrumValue[i]);
Serial.print(" ");
digitalWrite(strobePin, HIGH);
}

Neste caso este analisador divide a musica em 7 frequencias.. eu pego em 1 frequencia e dentro dela posso mexer entre os 0 e 255 .. neste caso eu quero dividir como fiz em 3 zonas a 80 a 135 e a 225.. que quando recebe esse sinal do analisador de som que envia para o arduino o arduino da o sinal na porta neste caso PWM.. eu quero tentar da o sinal na digital porque uso modulo de reles que recebe o sinal de 5V.. porque eu ja fiz esse pequeno teste em leds e ele envia o sinal.. so que quando mudo para os reles ele perde a força de sinal.. queria saber se ah alguma maneira de fazer ou inverter isto

Obrigado

Não entendi bem o seu objetivo.

Quer montar um analisador de espectro na faixa de áudio, usando lâmpadas?

Você deseja um efeito visual para o som ? 

Eu uso o Arduino, um analisador de som que e compatível com o arduino, apenas meto a musica a dar, esse pequeno espectro divide sozinho em 7 bandas a musica.. como esta em cima no programa dele.. apartir dai eu escolho por exemplo a banda 1 da sinal apartir dos 100 a banda 2 apartir dos 200.. assim como eu quiser..como mostrei em cima

O meu problema aqui e o seguinte.. eu tenho tudo a dar, mas pelas portas PWM mas eu preciso de ter 21 saidas.. que no arduino e impossivel ter em apenas 1 que so da 12 PWM .. meu objetivo e ver se da por algum meio usar para dar o sinal pela digital.. porque o rele funciona a 5v e como sao muitas saidas a funcionar ele perde a força de sinal..logo o rele nao sao ativados.. se usar leds eles ligam e fazem tudo como eu quero.. ou terei usar um conversor logico? se receber sinais abaixo de 5v ele da saida de 5v?

Tenho estas duvidas..

Parece que vc tem 2 problemas:

1) Conseguir mais saidas PWM;

2) Fazer o acionamento com Reles.

Para 1) a solução realmente seria usar caminhos que não usem o PWM do microcontrolador, como era feito antes dos microcontroladores possuirem hadware pra isso.

Vide:

http://www.atmel.com/Images/doc8020.pdf (Nesse doc parece que esqueceram de colocar o codigo...)

http://www.naun.org/main/NAUN/circuitssystemssignal/cssp-102.pdf

2) O sinal PWM é uma forma digital de representar valores analógicos. O tempo em ON em relação ao tempo total determinaria a intensidade do sinal. A frequencia precisa ser suficiente para que a "magia" não seja perceptível (piscar). Ou seja: A frequencia precisa ser um tanto elevada. Já reles são elementos mecanicos, sujeitos a inercia, tempo de magnetização, molas, etc. Incompatível com altas frequencias. 

Já vi até contatores ligados em PWM, para aqueciemento de maquinas de injeção, com ciclo de 2segundos. Mas em geral reles não servem para acionar coisas em PWM.

Vc teria as alternativas: Triac e Chave Estática.

Recomendo para iniciantes as chaves estáticas. Elas são hoje tão baratas quanto um bom rele e isolam a entrada da saída, o que não ocorre nos triacs. Ainda, se vc está na Europa pode comprar direto da China a um custo muito baixo, sem impostos e com um frete muito rápido (de Trem).

Ainda, fica a sugestão geral, sempre imaginei uma plaquinha com a mesma forma da base de um rele (pode ser o clássico A1RC2-12V) só que com um optoacoplador e um triac. Pq assim vc poderia pegar qq placa Rele com ele e transformar em acionamento sólido. Uma versão 2.0 poderia ter um LED indicativo de acionamento e outro indicativo de corrente fluindo (mais que 100mA, por ex), esse com terminais de acesso para o microcontrolador. Ficaria mto bom !

 

Aproveitando, gostaria de te perguntar: De onde vc é, se já comprou da China, qual o prazo de entrega deles para vc e qual o valor pago em impostos de importação para pessoas físicas comprando pelo correio. Só por curiosidade.

Mas o meu problema e que quero mesmo usar o arduino.. agora tenho de ver se e possível e de que maneira consigo usar as saídas digitais.

O triac pelo que vi so da para usar.. mas com isso já não preciso dos reles?

A placa que você imagina eu ja tenho uma..comprei aqui em portugal por 30euros

Sao 16 reles em uma placa apenas, e que funciona com o microcontrolador.. cada rele aguenta com cargas de 230v 10A.. e muito bom!

Ja comprei algumas coisas pelo ebay e demora 2 3 semanas.. nao pagava imposto nem nada porque vivo em portugal e cada vendedor diz se os portes sao gratis ou nao.. tudo depende de muita coisa.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço