ROBÔ ADR1R (Revisado)




Já tem um tempo que não publico um robô por aqui. Decidi marcar esse "retorno" com uma revisão de um robô que representou muito para mim. Claro que todos os outros também tiveram sua importância, mas este em particular foi realmente especial. O ADR-1 foi meu primeiro robô publicado pela Revista Mecatrônica Fácil da saudosa Editora Saber. Foi através desse pequeno projeto que me tornei um colaborador dessa revista e de outras da editora. Natural eu querer reviver essa montagem.

E foi o que fiz nessa nova versão! E de quebra ainda juntei ao "pacote" outras paixões minhas: os retrocomputadores (em especial a linha MSX) e impressão 3D!!!

A montagem é simples, sem componentes complexos ou difícieis de se encontrar, mas garanto que será bastante prazerosa (pelo menos assim foi para mim). Sendo assim meu caro amigo, prepare-se para o que vou detalhar a seguir.  ;)


O QUE MUDOU?

A tabela abaixo mosta as principais características entre ambos os robôs:


Robô ADR1
Robô ADR1R
Controle
- Basic Stamp 1 - Arduino Micro
Motores - 2 Servos de Rotação - 2 Servos de Rotação
Sensores - Bumper de colisão via "chaves"
- Sensor IR Sharp
Alimentação

- 1 bateria 9V + 4 pilhas pequenas AA
- 1 bateria Lipo 3S 700mA/H + 2 baterias Lipo 2S 610mA/H
Chassi
- Madeira
- ABS (impressão 3D)
Controles extras
- Nenhum
- Controle RF 433mHz via MSX

O primeiro robô ADR1 foi montado usando basicamente dois servos de aeromodelo adaptados para rotação e um BASIC STAMP 1 Parallax (uma espécie de Arduino, porém bem mais antigo - lançado em meados da década de 1990 - Eu comprei o meu em 1996!) e outras poucas peças (se quiser saber mais sobre a primeira versão do ADR1, clique aqui).

Nessa versão "revisada" resolvi manter os servos de rotação, mas troquei o BASIC STAMP 1 por um Arduino Micro (para ficar mais atual), mudei os "bumpers" (sensores de toque) por um sensor IR da Sharp e também inseri a possibilidade do controle "externo" através de um pequeno computador "retro" (um MSX, mas pode ser adaptado para qualquer outro claro!) ou mesmo moderno usando para isso um simples par transmissor/receptor RF de 315/433MHz em conjunto com um par "encoder/decoder".

O chassi, que na primeira versão foi montado com madeira, nessa nova versão foi impresso em uma impressora 3D (veja as imagens abaixo). As baterias utilizadas nessa nova versão também são diferentes e agora são de "Lipo" o que permite que sejam recarregadas!!!




O CICUITO DO ROBÔ


Na figura abaixo você tem o esquema eletrônico do robô. Note que ele é bem simples. O "cérebro" é um Arduino Micro com um ATMEGA328 5VDC 16MHz. RF_RX1 é um receptor RF com modulação AM ASK muito comum no mercado especializado. A saída digital deste módulo foi ligada a CI3, que é um decoder HT12D HOLTEK, responsável pela validação e decodificação do sinal recebido.



Quando o receptor capta um sinal, este é automaticamente inserido no decoder e este tentará a decodificação da parte do endereço A0 a A7, de acordo com a chave DIP ADDRESS. Com uma chave em ON, tem-se GND ligado ao pino e conseqüentemente “0” lógico no mesmo. Se aberta, o pino será ligado ao VCC através de um resistor de pull-up interno, e desta forma tem-se “1” lógico no pino. A seleção nesta chave deve ser feita de maneira que o endereçamento seja o mesmo usado nos jumpers ADDRESS A0 a A7 do transmissor (a ser demonstrado mais a frente neste artigo).

Se o endereço estiver correto, CI3 ativará momentaneamente seu pino VT (Valid Transmission) ativo de “0” para “1 (Isso poderá ajudar a encontrar uma possível falha de comunicação/conexão entre os módulos TX e RX). Além disso o dado de 4 bits será disponibilizado nas linhas D8 e D11 do CI3 que foram ligadas, respectivamente, aos pinos 6
a 9 do ARDUINO MINI e esse tratará o "dado" recebido (direção que o robô deve tomar).

O resistor R3 foi colocado no circuito para que o oscilador interno de CI3 fique "casado" com seu par HT12E. Não altere esse resistor sem consultar o datasheet do par HT12D/HT12E.

Além do controle temos o sensor SHARP_IR modelo 2Y0A21. A função desse sensor é "ficar de olho" no caminho, impedindo que o robô seja levado pelo controlador a uma colisão indesejada. Assim o Arduino realiza uma medida dos obstáculos a frente e quando este se encontrar a 10cm ou menos, um desvio automático será realizado.

O circuito também possui um buzzer que será sempre acionado quando for realizado um desvio. Seu controle é feito pelo transistor Q1, um BC338, mas qualquer NPN de uso geral pode ser utilizado aqui. O resistor R1 é o limitador de corrente para Q1 e R2 serve como carga no coletor para Q1, equilibrando a corrente. Note que o buzzer está ligado a entrada de tensão do circuito, 12VDC.

Para a alimentação do circuito eu selecionei uma bateria Lipo 3S (3 células) de 700mAH para os motores, Arduino e o sensor. Essa bateria totalmente carregada oferece 12,6V aproximadamente. O diodo D1 foi colocado na entrada de tensão do circuito para prevenir possíveis inversões ao conectar a bateria. Reg1 é um regulador de 5V 7805 TO-220 com dissipador (meus servos são bem fominhas!). C1, C2 e C3 são capacitores de filtros.

Um segundo conjunto de bateriais pode ser visto nas imagens. Esse segundo conjunto é um
par de baterias Lipo 2S 600mAH ligados em série para alimentar apenas o HT12D e receptor RF (um segundo regulador 78L05 está presente na segunda placa). Fiz dessa forma porque montei duas placas já que na verdade o robô foi acontecendo aos poucos e também devido a "fome" dos servos utilizados (rsrsrs).

SRV1 e SRV2 são servos de rotação. No meu caso usei dois antigos Futaba FP148 que tenho comigo há muito tempo e que eu mesmo adaptei. Mas isso é fácil de se encontrar pronto hoje em dia no mercado especializado.



O CIRCUITO DO TRANSMISSOR (MSX)

Na figura abaixo é dado o circuito eletrônico do transmissor. Basicamente temos duas partes: codificação (CI1) e transmissão (TXC1). CI1 é um encoder HT12E da HOLTEK. Este CI permite a codificação da informação em até 212 combinações. No circuito, através de ADDRESS é possível ligar as linhas A0 a A3 ao GND. Se a ligação ficar “aberta” a linha será ligada ao VCC através de resistores de pull-up internos. Ou seja, se o jumper não for fechado, tem-se “1” lógico no pino e se for fechado, “0” lógico. As linhas A4 a A7 são utilizadas para, juntamente com A0 e A3, formar o endereço e as linhas AD8 e AD11 são utilizadas para dados. 



As linhas A4 a A7 foram conectadas respectivamente ao pinos PB4 a PB7 da Placa Projeto Hardware. Estas linhas complementam o endereço a ser enviado para o HT12D. Dessa forma é possível, sem qualquer alteração interna no hardware controlar 16 dispositivos para cada conjunto de 16 endereços configuráveis via chave ADDRESS.

Já as linhas AD8 e AD11 foram conectadas respectivamente aos pinos PB0 a PB3 também da mesma placa (lembra a ideia é usar o MSX no controle desse robô, mas você pode substituir o mesmo por qualquer outro, até mesmo um Arduino!). Dessa forma o MSX fica responsável pelo controle dos dados e de parte do endereço!

O LED1 indica alimentação presente e LEDBARG é uma barra com 8 LEDs usada apenas para informação ao usuário (nibble MSB do endereço e dados).

O resistor R2 é muito importante no circuito! O mesmo não deve ser alterado, já que seu valor permite que o oscilador interno trabalhe de forma adequada, permitindo que o mesmo se comunique perfeitamente com o seu par, o HT12D.
Não altere esse resistor sem consultar o datasheet do par HT12D/HT12E.

Para alimentação desse circuito escolhi utilizar uma fonte externa de 9VDC. O diodo D1 está presente para evitar um problema maior caso ocorra uma inversão na conexão da fonte no circuito (nem pensar colocar em risco meu MSX!). REG1 é um regulador 78L05. C1, C2 e C3 são capacitores de filtro para o regulador e C4 é um capacitor de desacoplamento para CI1.

Obs.: Se você quiser saber mais sobre o par HT12D/HT12E eu sugiro o estudo dos respectivos datasheets. Muita informação poderá ser encontrada nos mesmos.


MONTAGEM DO ROBÔ

Eu optei por montar o circuito do robô usando duas placas padrão separadas, mas nada impede que você o faça de outra maneira. Isso ficará por sua conta ok!

Sugiro apenas utilizar barra de pinos fêmea para conexão do Arduino ao circuito e um suporte de CI para CI3. Além disso seria interessante utilizar também barra de pinos para o módulo de RF, servos e o sensor. Dessa forma você pode reutilizar facilmente estes componentes em outros circuitos/ideias.

Lembre-se que os componentes indicados com D1, Q1, C3, CI3, RF_RX1, SHARP_IR, REG1 e ARDUINO MINI são polarizados ok. Muito cuidado ao montá-los!

Como antena eu usei um pequeno pedaço de fio que pode ser facilmente calculo com a fórmula abaixo:

Comprimento da antena = 7500/Frequência em MHz [cm]

dessa forma temos:

Comprimento da antena = 7500 / 315Mhz = 23,8cm


MONTAGEM DO TRANSMISSOR (MSX)

Na figura abaixo eu apresento o layout de circuito impresso do meu protótipo (apenas sugestão ok, afinal você pode desenhar o seu se assim preferir). Recomendo o uso de um suporte para CI1 e o uso de barra de pinos fêmea para TXC1. Aqui também deve-se tomar cuidado ao montar os componentes polarizados.



Obs.: Eu usei nesse layout alguns resistores SMD 0805. É relativamente fácil de encontrar os mesmos e também de soldá-los a placa. Fiz essa opção porque quando preparei a placa estava sem os mesmos no referido valor em PTH! Como eu disse anteriormente, você poderá desenhar o seu próprio layout de circuito impresso para esse projeto.


O PROGRAMA DO ROBÔ

O programa para o robô é também bem simples e pode ser obtido mais abaixo em "DONWLOADS". Ele começa configurando o Arduino (pinos, Servos, sensor Sharp, LED Live, etc) e em seguida entra em um laço principal (você vai perceber que costumo usar um "while" dentro do "loop" do Arduino). No laço principal um período de aproximadamente 2ms é contado. Esse tempo é aproveitado para piscar o LED Live (500ms) e fazer a leitura dos pinos de controle 6 a 9 a cada 250ms. O Arduino trata os pinos reprogramando os tempos dos servos através da biblioteca inserida no inicio do scketch (Servo.h).

Obs.: Recomendo o estudo do programa para a compreensão do mesmo!


O PROGRAMA DO TRANSMISSOR (MSX)

O programa para o MSX foi desenvolvido em ASSEMBLY Z80 com um "loader" em MSX BASIC, mas poderia sem maiores problemas ter sido todo montado em MSX BASIC. É mais uma questão de gosto mesmo.


No programa (figuras da tela acima) é possível selecionar o controle via teclado ou joystick (essa segunda opção é a mais legal!). Feita a escolha o mesmo parte para a tela de controle e essa informa as opções válidas e também a condição atual do dado que está sendo enviado e também o estado atual do movimento do robô. Tudo muito simples!!!


AQUELA AJUDA PARA QUEM NÃO TEM UM MSX

Se você não tem um MSX, mas gostaria de testar o robô proposto neste artigo a figura abaixo mostra uma possível solução utilizando um Arduino Nano (pode ser o Uno ou qualquer outro que você tenha em mãos!).



O circuito é bem simples e não deve trazer complicações em sua montagem e pode ainda ser montado numa prot-o-board (matriz de contatos). O link para o scketch está mais abaixo em DOWNLOADS, mas já aviso que eu não testei muito isso ok. Deixo o mesmo apenas como exemplo. Se não funcionar, você terá uma ótima oportunidade de revisar e acertar o código!


CONCLUSÃO

Esta nova versão do robô ADR1 não é tão parecida com a primeira. A ideia para esse robô era manter a simplicidade aproveitando os recursos que eu tinha em mãos, além claro de utilizar um microcomputador "retrô" no controle do mesmo (principal objetivo). E ai está o resultado! Espero que você, de alguma maneira, possa curtir também este projeto. Em breve trarei outros mais e sempre com algum diferencial! Sorte e sucesso em suas montagens/projetos!

Obs.: Se você quiser conhecer outros projetos usando o MSX, veja em "MSX" ou ainda em "Eletrônica & Microcontroladores". Aqui o link para a página inicial do meu site. Divirta-se!!!

Se quiser falar mais a respeito, envie um email para arne_robotics@hotmail.com.


DOWNLOADS

- Circuito eletrônico do robô
- Circuito eletrônico do transmissor MSX - complemento para Placa Projeto Hardware
- Desenho da placa do transmissor MSX -
complemento para Placa Projeto Hardware
- Programa (Scketch) para Arduino no Robô
- Programa Binário + Loader em Basic para MSX
- Arquivos STL do chassi do robô (Thingiverse!)


EXTRAS


- Circuito eletrônico do transmissor Arduino
- Exemplo de Scketch para exemplo de controle (transmissor) usando um Arduino



Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.