Olá garagistas, estou desenvolvendo um projeto o qual necessita da comunicação entre um Arduino "mestre" e outro "escravo".

Para testar essa comunicação, fiz um código para o Arduino mestre ler um potenciômetro e habilitar uma de suas saídas PWM, sendo esta ligada à uma entrada analógica do Arduino escravo.

Medi a saída do Arduino mestre com um multímetro e ao variar o potenciômetro, varia também a tensão desta, ou seja, até aí tudo está ok.

Porém, através de um "Serial.print" da variável que mapeia a entrada analógica do Arduino escravo, percebe-se que no escravo são mostrados apenas os valores máximo e mínimo do potenciômetro (ou seja, é printado no escaninho apenas 1023 ou 0). Porque isso ocorre??

É possível acionar uma entrada analógica de um Arduino a partir da saída PWM de outro??

Desde já agradeço.

Abraço

Exibições: 6802

Responder esta

Respostas a este tópico

Victor,

A leitura do serial.print está em 0 ou 1023 porque o sinal PWM tem apenas dois níveis, 0V ou 5V.

Para conseguir obter a leitura do nível médio do sinal é preciso integrar os pulsos, e ai existem dois meios, o modo analógico e o modo digital, não vou detalhar este último. 

O modo analógico usa simples filtros RC para integrar os pulsos PWM em um valor analógico contínuo que irá variar entre 0 e 5V.

A frequência de corte do filtro deve ser aproximadamente 10 vezes menor que a frequência do PWM, mas para o arduino experimente R com 10k e C de 1uF, se quiser um desempenho melhor use 3 filtros em cascata com R de 10k e C de 100nF.

Só gostaria de enfatizar que este recurso não é o mais indicado para estabelecer a comunicação entre dispositivos digitais. Para isso existem métodos melhores de transmitir uma informação que já está digitalizada diretamente para o outro dispositivo sem ter que converter a informação para analógico e em seguida digitaliza-la de novo.

Este recurso da conversão digital para analógico é mais usado para controle de servos e equipamentos industriais que possuem apenas uma entrada analógica. 

Abraços.

Wiechert,

Boa noite,

Fiz o teste com o circuito acima e não consegui obter o resultado esperado.

Se eu mando escrever analogWrite(9, 127) esta saindo na porta analogica um tempo 0 e outro alguns valores tipo 7 e 8 quando deveria ser 512, certo.

Tem alguma outra dica?

Grato

se o problema for só comunicar usa outro meio tipo usart, spi,i2c que vão garantir maior precisao nos dados, se for usar pwm e ler com um pino adc, voce vai sempre ler valores diferentes mesmo que a diferença seja minima.

Jonas,

A questão é que eu fiz um equipamento usando Arduino, mas quando eu fiz eu usei todas as portas para  então ficou difícil. agora eu preciso integrar um equipamento com ele e a solução foi essa.

Eu refiz o circuito e ajustei, mas realmente da uma diferença, ainda não sei como ajustar, mas eu preciso fazer dar certo.

O circuito acima funciona, bem mas como eu já tinha apontado esta não é a melhor forma de fazer isso, pois sempre poderão pequenas variações nos valores.

Você tem que ter certeza de que não está ocorrendo interferência nos cabos que interligam os dois mcus.

Também pode estar ocorrendo de interferência na leitura analógica entre dois ou mais canais do AD do arduino que recebe as leituras, isso se você estiver usando mais de uma porta analógica.

Wiechert,

O circuito funciona mesmo, a questão é que eu estava fazendo uma leitura da porta para ver na Serial, e quando fiz isso os valores não apareciam corretamente.

Mas tirei isso e funcionou, agora tenho que ver uma forma de tirar essa diferença.

Você deve verificar o desvio em toda a faixa do sensor e plotar um gráfico, isso vai ajudar a perceber se o desvio ocorre de forma igual em toda a faixa ou de maneira irregular.

Assim poderá fazer correções no software de forma a diminuir o desvio.

Se atente a deixar a faixa a  útil do sensor com o menor desvio, aquela faixa que compreende os limites máximos e mínimos de umidade que se quer manter, afinal em um sensor de umidade do solo não importa muito se o valor medido estiver com um erro maior fora da faixa de valor que importa ao controle...

Wagner, 

Há outras formas de fazer, comunicaçãoserial (RX de um TX de outro) acredito ser uma possibilidade, se vc não estiver estes pinos.

Uma coisa que pode dar certo, (desprezando a elegância!) é usar comunicação por IR (pensei na biblioteca IRRemote), você poderia utilizar o protocolo da Sony por exemplo nos dois, e colocar sensor e receptor alinhados (pode ser até dentro de um tubo para evitar interferências) vc usará apenas um pino de cada, desde que o emissor fique no pino 3. 

que 

 

O melhor jeito de fazer Arduinos conversarem é usar um dos protocolos de comunicação que já existem para ele: Serial ou i2c.

Mauro,

Vou tentar por i2c, já uso para o LCD e o RTC, então não terá acréscimos no código.

VLW

Infelizmente não cabe mais bibliotecas no código, já está cheio. vou tentar por I2C

vlw!!!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço