Boa noite Galera.

Estou fazendo TCC e utilizando o Arduino uno, porém vou precisar de 12 saídas pwm, no arduino uno existem 6, como posso duplicar essas saídas?

Se colocar transistor mosfet na saída digital para sair pwm da certo? como?

Obrigado.

Exibições: 3111

Responder esta

Respostas a este tópico

Pessoal, decidi usar 3 led em pwm, porém, não estou conseguindo fazer com que os 3 fiquem na mesma luminosidade...

O ldr precisa ficar em 150 de valor, ou seja preciso que os 3 led´s fiquem ligados mas não passem os 150, nem mais nem menos, eu fiz isso:

if (lum_val <150){
analogWrite(Led1, pwm);
analogWrite(Led2, pwm);
analogWrite(Led3, pwm);

pwm++;
delay(100);
}

else
{
analogWrite(Led1, pwm1);
analogWrite(Led2, pwm1);
analogWrite(Led3, pwm1);
pwm--;

delay(100);
}

porém os led ficam piscando ao invés de baixar ou aumentar sem percepção, eles ficam piscando, eu ja declarei eles como const int etc... alguem pode me ajudar?

Parece correto.

Vc está diante de um sistema de controle de malha fechada...

A teoria disso seria o seguinte:

- Vc tem uma leitura desejada (vc já faz isso);

- Vc le um sensor (vc já faz isso);

- Vc calcula um erro (que seria o desejado-obtido) (isso vc faz, mas de maneira simplista, só maior ou menor).

- Vc coloca um ganho nesse erro e chama de realimentação. Atuando de forma proporcional a isso.

Seria algo como:

erro=(lum_val-150) // obs:erro precisa ter sinal

realim=erro*ganho // esse ganho e realim é melhor que seja float. Vc pode precisar de valores pequenos.

Aih 

PWM=PWM*realim.

Pode estar faltando um '-' no calculo de erro.

Vale mto vc ficar acompanhando esses valores pela serial, para enxergar direitinho o que ta rolando. 

No prog que vc listou, na verdade, só vi de estranho o fato de vc usar pwm no primeiro bloco e pwm1 no segundo... Não entendi, não é erro de digitação ?

eu renomeei outra pwm1 para ver se não tinha erro no pwm, ai separei, mas ficou a mesma coisa =/...

variável pwm é de 16bits ou de 8 sem sinal?

pwm é 8 bits, pelo que eu sei, o arduino é 10, mas as saidas pwm é de 8 acredito eu....

Me refiro a variável pwm, acredito que seja uma variável, declare ela como unsigned int pwm; ou unsigned char pwm;

Declarei os dois e nao deu, ele fica piscando, se vc tampa o ldr, o led vai aumentando o brilho, até ai ta certo, so que se vc destampa o ldr o led fica piscando ao invés de diminuir o brilho e manter o valor de 150... =/

O PWM pelo que entendi precisa ser unsigned int (são 10 bits).

Tente imprimir o valor dele. Acho que está correndo mto rápido ou "virando".

Para evitar que "vire" vc precisa colocar limitadores.

if (pwm<1023) pwm++;

e

if (pwm>0) pwm--;

Faz assim entao
if(pwm<255)pwm++;
e if(pwm>0)pwm--;
nao deixe entrar em loop, vc deve ajustar melhor os ganhos dos sensores de alguma maneira.

Se você procura uma solução rapida sem precisar mudar muita coisa do seu projeto, o Arduino Mega tem 14 saidas PWM

Eduardo,
Eduardo,
Na primeira pergunta, a resposta é :
A biblioteca Servo.h permite a utilização de pwm em todas as saídas digitais. No meu projeto atual com o Duemilanove, estou utilizando 6 servos, respectivamente, nos pinos 2 a 7. (evitei 0 e 1 da serial).

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço