LusoRobótica - Robótica em Português
Robótica => Projectos de robótica => Projectos em desenvolvimento => Tópico iniciado por: XicoMBD em 09 de Janeiro de 2011, 22:42
-
Olá a todos!
Depois da conversa toda que se gerou neste tópico (http://lusorobotica.com/index.php?topic=2981.msg33809#msg33809) , acho que já está na altura de apresentar aqui "oficialmente" este robot:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fletsmakerobots.com%2Ffiles%2Fimagecache%2Frobot_fullpage_header%2Ffield_primary_image%2FIMG_7339.JPG&hash=2e82791087eaddc477d27b1b98fa597e2c282fff)
Pião - Remote controlled by a wiimote (http://www.youtube.com/watch?v=QiJuWSAMyhU&#)
Basicamente, foi o robot que construi para testar e dar uso à placa controladora de motores que desenhei.
O arduino, utilizando essa placa, controla por PWM os motores que eram de uns berbequins/ aparafusadoras baratos que já tinha de um projecto anterior.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fletsmakerobots.com%2Ffiles%2Fuserpics%2Fu7854%2FIMG_7342.jpg&hash=3358478228289d2937be5d4809898eda78ef56ae)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fletsmakerobots.com%2Ffiles%2Fuserpics%2Fu7854%2FIMG_7361.jpg&hash=c7f80db66d8073eb04f3925c7e506dd5da468578)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fletsmakerobots.com%2Ffiles%2Fuserpics%2Fu7854%2FIMG_7335.jpg&hash=aee6c204be9dac4a7dc86d7fec40a9611e6cff21)
Neste momento controlo-o utilizando xbee's a partir de um pc com uma câmara wireless, no entanto na altura em que tirei as únicas fotos e video que tenho, utilizava o pc em cima robot. Quando tirar novas partilho-as aqui.
Para este robot fiz algumas peças, utilizando polymorph, como os suportes para os motores e para o sonar, e posso-vos dizer que estou a gostar bastante de o utilizar. Basta mete-lo numa panela com água quente, esperar que fique transparente (sinal de que está "no ponto"), retirar e moldar. Pode-se utilizar as mãos à vontade que à temperatura que é, não queima e as peças até ficam boas.
Já o programei para acelerar gradualmente, o que o tornou muito mais "domesticável". Já o consigo controlar dentro de casa sem problema nenhum :D
Em principio a próxima alteração será a adição de encoders. Vamos lá ver como corre ;D
PS: Achei estranho uma coisa: Eu tenho dois xbee shields (http://arduino.cc/en/Main/ArduinoXbeeShield (http://arduino.cc/en/Main/ArduinoXbeeShield)) e, não percebo porquê quando o coloco no arduino deixo de conseguir os PWM dos pinos 5 e 6. Resolvi o problema utilizando jumpers para ligar os pinos 0 e 1 e os ICSP ao shield, mas gostava de perceber porquê é que não dá para o ter colocado normalmente no arduino. Alguém sabe a quê é que se deve o problema?
-
O próximo passo são mesmo encoders, se encontrares sensores hall dá para fazer uns encoders magnéticos, mesmo com pó e sujidade funcionam, coisa que com óptico é diferente, visto ser um robot outdoor
Boas,
Tenho andado a tentar utilizar uns sensores de reflexão IV como encoders e não estou a ter grande sucesso. Mesmo só a fazer o "serial print" das leituras os valores não são muito consistentes.
Também tenho aqui os sensores e as respectivas rodas dentadas de um rato mas acho que não devem ficar bem aqui no robot.
Estava por isso a pensar nos hall, mas não tenho qualquer experiência com eles.
- Quais são os aspectos a ter em conta quando se compra um?
- Conhecem alguns bons e baratos à venda cá em Portugal?
-
Não tens grande sucesso porque?
-
Tens alguma foto dos sensores, um close-up dos sensores e das rodas dentadas?
Como estás a fazer a contagem?
-
Os sensores que estou a utilizar são estes: http://loja.lusorobotica.com/64-optical-detector-phototransistor.html (http://loja.lusorobotica.com/64-optical-detector-phototransistor.html). Para começar, esta roda tem um autocolante com 8 divisões, 4 partes pretas e 4 partes brancas.
Eu nunca tinha usado encoders antes, esta é a minha 1ª vez. Ainda só criei um programa para enviar as leituras do sensor por serial para o pc, para assim as poder perceber. O 1º valor é o que é directamente obtido do sensor (varia entre 0 e 1023) o segundo varia só entre 0 e 1 consoante o 1º valor seja superior ou inferior a 600.
Aqui está o que obti, no inicio portou-se bem, teve sempre cinco valores de 1 e cinco valores de 0, mas lá para diante, passou a ter apenas quatro valores de 1 com cinco valores de 0. Não percebi porquê visto que as partes têm o mesmo tamanho... Estou a ser piquinhas de mais?
sensor = 948 1
sensor = 846 1
sensor = 793 1
sensor = 769 1
sensor = 826 1
sensor = 272 0
sensor = 167 0
sensor = 155 0
sensor = 182 0
sensor = 231 0
sensor = 705 1
sensor = 761 1
sensor = 784 1
sensor = 945 1
sensor = 895 1
sensor = 332 0
sensor = 159 0
sensor = 190 0
sensor = 179 0
sensor = 200 0
sensor = 626 1
sensor = 792 1
sensor = 922 1
sensor = 904 1
sensor = 775 1
sensor = 284 0
sensor = 191 0
sensor = 149 0
sensor = 166 0
sensor = 196 0
sensor = 695 1
sensor = 949 1
sensor = 903 1
sensor = 778 1
sensor = 727 1
sensor = 309 0
sensor = 180 0
sensor = 166 0
sensor = 159 0
sensor = 212 0
sensor = 799 1
sensor = 867 1
sensor = 769 1
sensor = 806 1
sensor = 859 1
sensor = 422 0
sensor = 159 0
sensor = 154 0
sensor = 182 0
sensor = 228 0
sensor = 613 1
sensor = 764 1
sensor = 736 1
sensor = 943 1
sensor = 893 1
sensor = 428 0
sensor = 157 0
sensor = 193 0
sensor = 199 0
sensor = 187 0
sensor = 587 0
sensor = 828 1
sensor = 909 1
sensor = 918 1
sensor = 770 1
sensor = 359 0
sensor = 188 0
sensor = 175 0
sensor = 167 0
sensor = 179 0
sensor = 597 0
sensor = 941 1
sensor = 878 1
sensor = 793 1
sensor = 728 1
sensor = 475 0
sensor = 181 0
sensor = 143 0
sensor = 157 0
sensor = 198 0
sensor = 664 1
sensor = 871 1
sensor = 750 1
sensor = 811 1
sensor = 855 1
sensor = 496 0
sensor = 171 0
sensor = 154 0
sensor = 182 0
sensor = 212 0
sensor = 572 0
sensor = 765 1
sensor = 762 1
sensor = 960 1
sensor = 890 1
sensor = 442 0
sensor = 143 0
sensor = 190 0
sensor = 179 0
sensor = 201 0
sensor = 598 0
sensor = 818 1
sensor = 905 1
sensor = 904 1
sensor = 769 1
sensor = 337 0
sensor = 190 0
sensor = 176 0
sensor = 168 0
sensor = 193 0
sensor = 730 1
sensor = 930 1
sensor = 915 1
sensor = 765 1
sensor = 708 1
sensor = 221 0
sensor = 176 0
sensor = 166 0
sensor = 164 0
sensor = 252 0
sensor = 916 1
sensor = 842 1
sensor = 792 1
sensor = 760 1
sensor = 778 1
sensor = 217 0
sensor = 166 0
sensor = 157 0
sensor = 183 0
sensor = 357 0
sensor = 848 1
sensor = 737 1
sensor = 811 1
sensor = 875 1
sensor = 750 1
sensor = 190 0
sensor = 154 0
sensor = 182 0
sensor = 198 0
sensor = 379 0
-
Isso é porque os encoders, se forem de quadratura têm um comportamento que não é logo linear á primeira vista.
Mas tens ou 4 ou 5 1's não é sempre 4, isso pode ser por causa da velocidade de leitura do adc e não de todo por causa do encoder.
-
Eu também não vejo nada de anormal nisso :)
Agora vamos a outra parte, estás a usar interrupções?!
-
Se está a usar adc quase de certeza que não.
-
Se está a usar adc quase de certeza que não.
Que otario que fui :p estava a pensar nos encoders que normalmente se acopolam aos motores e que o sinal de saida é 0 ou 1. O ideal seria teres um atmega só a fazer isso, porque o que te vai interessar é saber quando passa de preto para branco e de branco para preto, cada vez que isto acontece incrementas e depois de x em x tempo ves quanto incrementou dai podes fazer as rpm.
-
Pois, eu estou a utilizar um segundo arduino para fazer as leituras dos encoders, depois é pôr os dois a comunicar.
Se a coisa funcionar bem, depois sou capaz de fazer uma placa mais definitiva. Ando a desenvolver um "mini arduino" (http://lusorobotica.com/index.php?topic=3159.0) para servir de base a essas coisas.
-
Não me parece que precises de dois arduinos para ler dois encoders e tratar do resto do robot, mas isso depende do resto do código e de quantas interrupções por volta o encoder gera, pelo menos usar um atmega328p para isso é um desperdicio, um attiny seria mais inteligente.
-
Não me parece que precises de dois arduinos para ler dois encoders e tratar do resto do robot, mas isso depende do resto do código e de quantas interrupções por volta o encoder gera, pelo menos usar um atmega328p para isso é um desperdicio, um attiny seria mais inteligente.
Senso o problema é que ele tem que estar sempre a ler o ADC, e se estiveres a fazer outras coisas não garantes isto! Eu acho que a solução de um atmega só para isto é necessária.
-
tens ai uma bela maquina bom trabalho ;)