LusoRobótica - Robótica em Português
Robótica => Projectos de robótica => Projectos em desenvolvimento => Tópico iniciado por: GnobarEl em 04 de Fevereiro de 2013, 23:47
-
Viva!
Iniciei um novo projecto, que consiste em ligar o meu alvo de setas ao PC (sem fios) e assim poder criar jogos novos e criar uma maior interactividade com o jogo.
O alvo por dentro tem duas folhas de acetato, quando a seta bate no alvo, as folhas tocam uma na outra e fecham o circuito. Ambas as folhas estão ligadas com uma flatcable ao PCB e criam uma matrix.
O problema esta em conseguir receber o sinal que o circuito foi fechado.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fs8.postimage.org%2F4htri9hup%2FP1220544.jpg&hash=71f5969d2b2b9022630238b74e5a7db9bb7b7aa0) (http://postimage.org/image/4htri9hup/)
Como podem ver na imagem, soldei 3 fios, para testar. Por ex. se chantar o fio laranja com um dos pretos, o
circuito 'e fechado e aparece a respectiva pontuação no display.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fs9.postimage.org%2Fj85pdn8uz%2FP1220547.jpg&hash=3c3cb19d61750659e9857b7bc0d0444b998f621e) (http://postimage.org/image/j85pdn8uz/)
Nesta imagem podem ver as duas folhas de acetato, cada uma com as pistas e os pontos que vão tocar na outra folha quando uma seta atinge o alvo.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fs7.postimage.org%2Fo1b4p59zr%2FP1220550.jpg&hash=c07d580bb28955b28d3e2bd7ab2a40e0d6757ea8) (http://postimage.org/image/o1b4p59zr/)
As duas flat cables ligadas ao PCB.
Feita a introdução do projecto.
Problemas.
Numa das folhas de acetato, se colocar o multímetro, em dois pontos seguidos, consigo fazer o teste de continuidade, no entanto se seguir as pistas e afastar muito as duas pontas de prova do multimetro, deixo de consegui efectuar o teste. Mesmo estando na mesma pista.
Se ligar dos dois fios ao arduino, sempre que uma seta atinge o alvo na posicao X e fecha o circuito, era suposto o arduino detectar isso. Mas não... não detecta nada...
Alguma sugestão? Se precisarem de informação adicional basta dizerem.
Obrigado.
-
Viva,
Estive a ligar as flats do alvo ao arduino, e estou a utilizar a library keypad http://playground.arduino.cc/code/Keypad (http://playground.arduino.cc/code/Keypad) para detectar qual o ponto onde a seta acertou.
Pelo que entendi, e 'e aqui que começam os problemas, o arduino, lê todas as linhas e colunas.
Por ex. começa a ler a linha 1 e varre as colunas todas.
Linha 1 Coluna 1
Linha 1 Coluna 2
....
quando termina, muda de linha e inicia o mesmo processo.
Linha 2 Coluna 1
Linha 2 Coluna2
....
O que acontece, 'e que quando a seta bate no alvo, o circuito 'e fechado e aberto tão rapidamente que o arduino nem sempre consegue detectar.
Umas vezes detecta, outras não.
Alguma sugestão para contornar esse problema?
Obrigado.
-
Ou seja,
tens 7 fios que vem do dardo, linhas e colunas.
Isso de ser demasiado rápido, pode ter haver com a ligação Serial, se estiveres a ver o resultados no serial monitor ou a o contacto linha com coluna é tão rapido que o arduino pode estar a meio e do codigo e não apanha a linha e coluna que foi tocada.
-
Se a questão é mesmo a velocidade de varrimento ser lenta, para resolveres o problema sem usar hardware diferente tens de conseguir torná-la mais eficiente. Não me parce que tenha a ver com a velocidade da ligação Serial, a não ser que estejas a fazer prints a toda a hora...
Sugeria que tentasses olhar para o modo como a library funciona e tentares aproveitar um pedaço do código da função "scanKeys" para fazeres a tua versão mais eficiente. Por exemplo, em vez de varreres as posições todas, varreres logo as linhas, e ao descobrir um contacto numa das linhas ir logo á procura da coluna certa. Pelo que vi do código, ele faz o varrimento completo, e vai guardando os vários botões pressionados em cada varrimento. Isto permite detectar por exempl vários botões pressionados ao mesmo tempo, mas tambem vai tormar a coisa bastante mais lenta. Visto que no teu caso só vais querer um de cada vez, podes tornar a coisa mais directa.
-
então nesse caso se calhar é melhor não usar a biblioteca keypad.
Explica-me uma coisa.
ao lançares o dardo,ao prencionar a posição, o pino que representa a linha e o pino que representa a coluna tem 5v?
Se ambos tiverem 5v podes simplesmente fazer if linha1=high and coluna2=high{pontos = 20}, mas não sei se vais ter o mesmo problema
Ou exprimentares http://www.instructables.com/id/Arduino-3-wire-Matrix-Keypad/step2/Wiring-up-the-resistors/ (http://www.instructables.com/id/Arduino-3-wire-Matrix-Keypad/step2/Wiring-up-the-resistors/) mas depende quanto tempo a linha com coluna fica a fazer contacto entre si, porque pode não ter tempo suficiente para porta analogica ter uma leitura certa.