Olá,

Eu estou vendo como montar um sistema de feedback para atividade de Tiro Esportivo.

Basicamente o que pretendo é identificar quem acertou o alvo primeiro em um uma linha digamos de 4 alvos ( 1 alvo para cada atleta).

Os alvos são simples placas que caem para trás com o impacto do projétil. As placas são de MDF. O projétil é de plástico. Não se trata de armas de fogo e sim de armas de ar comprimido.

Na placa vai um parafuso que encosta em outro parafuso na base do alvo. Assim, enquanto o alvo permanecer em pé a corrente passa pelo contato dos parafusos. Se o alvo tomba, a corrente é interrompida.

As 4 pessoas atiram cada uma no seu alvo e, com o impacto, os alvos (placas redondas) caem para trás. Cada uma destas placas fica em um poste fixados sobre um eixo que pivota com o impacto na placa ( e faz ela tombar para trás).

Trata-se de uma prova de "saque rápido" então precisamos determinar quem derrubou a sua placa primeiro.

Como as performance devem ser muito próximas. Pode ser difícil definir no olho quem venceu. Então a idéia é usar o apoio da eletrônica.

Eu pensei num simples projeto que mantém uma fileira de 4 LEDs apagados enquanto o Arduino ler o pino analógico e perceber que há corrente nele ( Usando AnalogRead ). Aí, quem acertar primeiro o seu alvo, a placa vai cair abrindo o contato com o parafuso da base e vai interromper a corrente para o pino analógico do arduíno (vai ler um valor "zero" para aquele pino/alvo).

Quando ele ler o valor zero indicando que a placa caiu para trás abrindo o circuito, o programa acende o LED que se relaciona com o pino que deixou de apresentar corrente. Acende o LED por 10 segundos e desabilita a leitura dos demais indicando assim qual atleta acertou o seu alvo mais rápido que os outros.

Perguntas que eu tenho:

Preciso de algum biblioteca específica para usar a função AnalogRead?

A função AnalogRead é a melhor função para este projeto?
Ou tem outra forma mais simples de fazer?

Exibições: 401

Responder esta

Respostas a este tópico

Eu li o exemplo do uso da interrupção. Realmente parece mais lógico simplesmente checar a tensão dos contatos.

E vi que o Uno não dá conta. Tem que ser o Mega ou o Leonardo.

Obrigado.

Mas tenho uma questão.

Eu preciso declarar variáveis para os 4 contatos que o arduíno vai monitorar. ( que vem dos alvos ).

E vou executar a função extraordinária ( que vai ser acender o LED daquele que interromper a tensão para 0V.

Porém como eu bloqueio que os outros sinais sejam detectados e acendam os outros LEDs ?

eu vou precisar de uma instrução executada imediatamente após a ele ler a primeira interrupção que desabilite as demais. Como eu faço isso?

Acho que eu preciso fechar o loop quando ocorrer a primeira interrupção e com um botão e dou um reset no aparelho para ele voltar a ler as quatro interrupções.

Olá, primeiramente eu queria dar os parabéns. Esse foi um dos tópicos mais bem explicados que já vi rsrsrsrsr.

Como nosso amigo TO disse, não precisa usar analogRead, simplesmente o digitalRead dá conta do recado pois a informação que você precisa é digital(alvo em pé/alvo deitado).

Uma dica que eu daria era para você usar o esp-12. Muitas pessoas o vêem como um chip inteiramente dedicado para se conectar a uma rede Wifi, mas ele é mais do que isso. No seu caso, por exemplo, ele se encaixa perfeitamente pois todos os pinos(com exessão do gpio 16) são pinos de interrupão então você não precisa gastar dinheiro com um arduino mega, vai de NodeMCU que seu problema estará resolvido. Sem falar que posteriormente se quiser pode implementar uma comunicação com o computador do juiz sem fio.

Espero ter ajudado.

Provavelmente o UNO dá conta desse seu projeto sim. É possível realizar esse projeto sem utilizar interrupções.

Na verdade é possível fazer isso de várias formas diferentes incluindo com CI`s ou até mesmo componentes discretos. De qualquer forma, veja esse exemplo utilizando o Arduino UNO

http://forum.arduino.cc/index.php?topic=57558.0

O principio é basicamente o mesmo

Qual a distância entre um alvo e outro ?

Sinais digitais podem sofrer interferências se os cabos forem muito grandes. 

As pistas são paralelas. Cada atleta tem 90 cm de linha.
Os alvos, portanto ficam 90cm de distância entre um e outro.

Assumindo que a caixa de comando fique no meio, dela derivam 4 saídas, 2 saídas para as posições 1 e 4 com 1,80m e 2 saídas para as posições 2 e 3 com 90 cm.

Uma linha com 4 posições de 0,90m ( 1, 2, 3, 4 ):


Pos1 <--1,80m------------- Arduino ----------1,80m--> Pos4
Pos2 <--0,90m------- Arduino -------0,90m--> Pos3

Putz eu dei uma olhada no ESP12 e o NodeMCU. Acho que não vou saber mexer com ele. Meu conhecimento não é grande.

Mas acho que com o Mega daria. Vou ver o exemplo com o UNO.

Eu acredito que com essa distância não terá problemas.

Mas recomendo que use cabo blindado para maior proteção contra ruidos. 

João Arthur,

Vi o código do exemplo com os botões e acho que inclusive o código é muito próximo do que quero fazer. Já me veio até a idéia de por um LCD para informar o posto vencedor além do LED .

Basicamente o que tenho que fazer é inverter a leitura do sinal pois no esquema dos alvos o contato fica ativo e ele deve ler quando a vontagem cair a zero pela perda de contato do alvo que for atingido primeiro que os outros.

Vi que a leitura dos contatos é com o DigitalRead. Será que conectar cabos dos quatro alvos numa caixa com Plugues P2 teria algum tipo de perda. O maior tamanho seria perto de 2 metros...

Muito bom! Turma boa essa aqui! Altas dicas valiosas!

Bom dia HC,

Este projeto é possível ser feito com componentes discretos, com arduino mini, uno, etc.

Com o uno/mini você pode fazer assim

QQ porta ao ser ativada, bloqueia as outras três.

O tempo de leitura da porta e bloqueio das outras acontece em fração de poucos microssegundos.

Com componentes discretos, você usa 4 Latchs CD. O primeiro que for ativado, bloqueia os outros Latchs

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço