Câmera pan/tilt usando rádio/receptor/servos turnigy

Pessoal,

Estou usando os seguintes componentes:
 - Rádio:
 
 - Servos:
Quero fazer algo assim, porém controlado pelo rádio mesmo e não pelo nunchuck:
 
Segui este tutorial pra ler o sinal do receptor (PPM).
E segui vários outros para movimentar os servos.
Seguem os códigos em anexo: teste de leitura do receptor, teste de escrita nos servos e teste final.
Consegui fazer funcionar, porém os movimentos não ficam suaves. Ficam travando, conforme vídeo abaixo:
Já coloquei dois capacitores de 470uF na alimentação dos servos e nada. Já testei também com alimentação isolada para o arduino, receptor e servos.
Este outro vídeo mostra os servos conectados direto no receptor e os servos não tremem, ou seja, o problema não está nos servos:
Antes que perguntem, sim! Eu quero usar o arduino para ler o sinal do receptor e posicionar os servos. Mesmo o sistema funcionando bem com os servos ligados direto no receptor.
Alguém pode me ajudar como eliminar esse ruído? Como o meu objetivo é usar uma câmera, não fica legal ver a imagem tremida.
Obrigado

Exibições: 2458

Anexos

Responder esta

Respostas a este tópico

Faz uma fifo, armazene os últimos n valores recebidos e faz a media dos mesmos, depois é só jogar no servo, que vai ficar suave e quase sem vibração.  Só que dependo da tamanho do filtro, vai ter atraso considerável  no movimento. Se tiver vibração na posição de repouso,deixa um região morta próxima do zero.

É exatamente o problema que estou tendo depois de dicas anteriores. Consigo remover a vibração porém há um atraso no movimento...considerável

Leandro, ficou muito bom, poderia disponibilizar os códigos do arduino quando e da interface no pc? Obriagdo

Olá Hugo, enviei somente o do arduino bem simplificado para ser de facil entendimento. Mas é o seguinte, a comunicaçao do software do PC para o arduino é atraves de strings na porta serial. Sempre que clico na setinha para um lado ou para o outro ele envia os valores de a000 até a180. Setinha para um lado ele vai acrescentando de 1 em 1 e para o outro decrescenta. Este "A" é para saber que eh o servo1 e os valores são referentes a quantos graus ele vai girar, de acorda com a biblioteca servo.h. Na setinha para baixo e para cima é a mesma coisa porém com a letra "B" na frente.

Anexos

Vlew, brother!

Abraço!

Galera, não resolvi o problema do ruído.

Até tentei seguir as dicas dos colegas aqui mas não resolveu.

Mudei então a estratégia.

Percebi que o ideal não é movimentar os servos de acordo com o stick do controle, pois dessa forma eu sempre precisaria estar segurando na posição que eu quero; não "descansaria" meu dedo. O ideal seria ler a posição atual e incrementar a esta graus de acordo com os movimentos  do stick e ao soltá-lo (o stick volta à posição de repouso) os servos não ficariam em 90º e sim na posição atual aguardando incrementos à sua posição novamente. Dessa forma consegui resolver o ruído.

Talvez não tenha ficado claro mas verão o que quis dizer no vídeo abaixo.

O esquema que usei foi esse:

Eu utilizei LM 35 pois não sei ainda usar o fritzing e não consegui representar os pinos do receptor RC :)

Cada fileira é um canal. A última é de alimentação. De cima para baixo:  PPM, VCC, GND.

Código em anexo.

Vou continuar tentando fazer movimentar de acordo com o stick sem apresentar ruído. Se alguém conseguir compartilha aí. Por enquanto essa solução resolve.

Obrigado a todos!

Anexos

o vídeo não apareceu. estranho

http://www.youtube.com/watch?v=lHRAkF6vjMA

E aí Jean, blza?! 

Conseguiu resolver?

Eu fiz algo parecido, utilizando um TX Futaba convertido para 2,4Ghz com módulo RX Corona. Lí os pulsos do RX com arduíno e repetia para os servos... Utilizei a funcao map()... que é muito tranquilo...

Olha o link do funcionamento:

http://youtu.be/rtQmD3HawW4

Ahhh..

No meu caso é assim:

ch5=valores rx // Isso vc ja fez

ch6=valores rx // Isso vc ja fez

Tilt = map(ch5, 1000, 2000, 0, 180); // Essa função converte diretamente os valores min e max do RX direto para pos. servo

Pan = map(ch6, 1000, 2000, 180, 0); // Imprimir os valores min e max na serial para colocar uma margem menor que o                                    menor "1000" e maior que o maior "2000" para o uC nao se perder, se for necessário.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço