RoboPi - Um rover com Raspberry Pi

Figura 1 - robô montado
Figura 1 - robô montado

A Raspberry Pi 3, apesar de relativamente nova no mercado, se popularizou muito. Grande parte de seu sucesso se deve à sua conectividade: diferentemente dos modelos anteriores, agora ela conta com Wi-Fi já nativo (ou seja, não é preciso usar dongle Wi-Fi). Isso abriu um novo leque de possibilidades e projetos, aumentando ainda mais o "poder de fogo" das Raspberry Pi.

 

Uma das possibilidades renovadas de uso da Raspberry Pi 3 é a robótica. Com base nisso, este artigo mostra como desenvolver um robô do tipo exploração/rover utilizando a Raspberry Pi 3.

 

 

Materiais necessários

 

Para reproduzir este projeto será necessário o seguinte material e ferramentas:

  • Uma Raspberry Pi 3 com case;
  • Um powerbank (utilizei um simples de 2000mA);
  • Um cabo USB (igual ao utilizado para carga de celulares, com uma ponta do tipo A e outra micro-USB);
  • Uma webcam;
  • Um suporte para quatro pilhas;
  • Quatro pilhas tipo AA (recomendo fortemente o uso de pilhas recarregáveis);
  • Chassis de quatro rodas e "dois andares", como este aqui;
  • Um protoboard de 440 pontos;
  • Dois transistores BD135;
  • Dois transistores BC548;
  • Dois resistores de 10k 1/4W;
  • Fios / jumpers diversos;
  • Aproximadamente dois metros de cabo flexível (sugestão: 0,14mm);
  • Ferro de solda e estanho;
  • Uma embalagem de abraçadeiras de Nylon;
  • Fita isolante de boa qualidade (recomendação: marca Tigre);
  • Fita dupla face;
  • Velcro (com adesivo).

 

 

Robô montado

 

Antes de iniciarmos o desenvolvimento do robô, segue a foto do mesmo já montado:

 

RoboPi montado
Figura 1 - Robô montado

 

 

Diagrama do projeto

 

Um diagrama do projeto pode ser visto na figura 2.

 

Diagrama de comando e interação com periféricos
Figura 2 - Diagrama de comando e interação com periféricos

 

Conforme pode ser observado no diagrama, o operador / usuário do robô acessa a central de controle do robô (uma Raspberry Pi 3) através de acesso remoto na sua rede local (mais precisamente, acesso por VNC), sendo que a Raspberry Pi está conectada à rede via Wi-Fi. A Raspberry Pi por sua vez interage com os periféricos do robô (motores e webcam).

 

 

Acesso VNC à Raspberry Pi 3

 

Para comandarmos a Raspberry Pi 3 à distância, precisaremos instalar nela um server VNC. Além disso, no computador com o qual desejamos comandar, é necessário instalar o client VNC. Para isso, foi escolhido o server e client VNC TightVNC. A escolha foi baseada nos seguintes fatores: é uma solução free, leve e roda sem complicações no Raspbian (sistema operacional "oficial" da Raspberry Pi).

 

Instalação do TightVNC no computador

 

Para instalar o client VNC TightVNC no seu computador basta entrar no site oficial e baixar a versão mais atual.

 

Instalação do TightVNC na Raspberry Pi 3

 

Antes de instalar o client VNC na Raspberry Pi 3, recomendo fortemente configurar a Raspberry Pi 3 com IP Fixo. A razão é que, se for utilizado DHCP, você precisará, de alguma forma, conhecer o IP que a Raspberry Pi obteve na rede antes de se conectar a ela (assim o acesso remoto perde um pouco seu propósito). Para fixar o IP da sua Raspberry Pi 3, siga este tutorial.

 

Uma vez setado o IP para fixo, execute os seguintes comandos para instalar o TightVNC:

 

 

Agora falta a última etapa: fazer o TightVNC server iniciar automaticamente no startup da Raspberry Pi. Para isto, siga este ótimo tutorial da Adafruit.

 

 

Montagem do chassis

 

O chassis contém um número considerável de peças, mas é fácil montá-lo. Se você não se sentir a vontade de fazer isto, recomendo que veja este vídeo que ensina a como montar o chassis.

 

IMPORTANTE:
1) Antes de montar o chassis, não se esqueça de soldar os fios nos motores!! 
2) Ainda antes da montagem do chassis, sugiro que remova o papel que protege todas as peças de acrílico. Assim ele perde o aspecto de um MDF e ficará com um chassis transparente (o que eu, pessoalmente, acho muito mais bonito).
3) Organize os cabos e mantenha-os o mais "juntos" possível utilizando abraçadeiras de Nylon. Isso evita que, no final das contas, os fios pareçam um emaranhado e dificultem a manutenção do robô.
4) Cole, com fita dupla face, o powerbank no andar de baixo do chassis (com as terminações USB para o lado externo). O Powerbanck alimenta SOMENTE a Raspberry Pi. Observe a figura abaixo:

 

Visão frontal do Robô
Figura 3 - Visão frontal do Robô

 

 

Drive de motor

 

Para fazer os motores DC girarem, é necessário um circuito de drive. Tal circuito é capaz de, a partir de um sinal de baixíssima potência (GIPOs da Raspberry Pi), acionar uma carga de potência muito maior (motores DC neste caso). 

 

O drive desenvolvido neste projeto é muito simples: há dois circuitos idênticos, compostos por dois transistores formando um arranjo Darlington. Cada circuito controla um par de motores (o par direito ou o par esquerdo), acionando-o somente em um sentido. Desta forma, o robô pode ir para frente, esquerda e direita (a marcha ré não é contemplada neste driver simples). O circuito de driver pode ser visto na figura 4.

 

Figura 4 - Esquemático dos circuitos de driver dos motores
Figura 4 - Esquemático dos circuitos de driver dos motores

Sendo:

J1: conector com 5V (vindo do conjunto de pilhas), GND (grampeado com o GND do conjunto de pilhas e GND da Raspberry Pi) e sinais de controle dos motores (GPIOs da Raspberry Pi).

J2: conector para o par de motores à direita.

J3: conector para o par de motores à esquerda.

 

Por fim, monte o circuito na protoboard de 440 pinos e cole-a no andar superior do chassis (sugestão: cole na extremidade que você deseja que seja a parte traseira do seu chassis).

 

A movimentação do rover, em função do acionamento de motores, ocorre como mostra a figura 5.

 

Movimentação do rover em função do acionamento dos motores
Figura 5 - Movimentação do rover em função do acionamento dos motores

 

 

Fixação da Raspberry Pi 3 e webcam no chassis

 

Para fixar a Raspberry Pi no chassis, utiliza velcro com adesivo. Desta forma, fica fácil retirar a Raspberry Pi do chassis quando for desejado (e garante que ela não vai ficar "escorregando" no chassis enquanto o robô se move). Observe a figura 6.

 

Fixação da Raspberry Pi no chassis
Figura 6 - Fixação da Raspberry Pi no chassis

 

IMPORTANTE: não tampar nenhuma abertura do case com o velcro adesivo. As aberturas do case são destinadas para ventilação da Raspberry Pi, e tampa-las pode provocar aquecimento excessivo da placa.

 

Para a fixação da webcam no chassis, não há segredo. Basta colocá-la de um jeito que não fique se mexendo. Se possível, fixe-a com velcro adesivo, assim como foi feito com a Raspberry Pi.

 

 

Ligando a Raspberry Pi ao drive de motor

 

Conforme explicado no diagrama da figura 1, a Raspberry Pi irá controlar, através de GPIOs, o acionamento dos pares de motor.

 

No caso, foram feitas as seguintes ligações:

Nome do GPIO / função do pinoNúmero do pino no conector de GPIOsOnde é ligado
GPIO1812Circuito de driver do par de motores da esquerda
GPIO2316Circuito de driver do par de motores da direita
GND06GND dos dois circuitos de driver de motores

 

Para controle dos GPIOs, foi utilizada a biblioteca Raspberry gPIo, mantida pelo SparkFun.

 

IMPORTANTE: antes de ir adiante neste tutorial, instale esta biblioteca (versão para linguagem C).

 

 

Projeto e código-fonte

 

Toda a programação do controle deste rover é feita em linguagem C, utilizando a biblioteca Raspberry gPIO. Para a parte de visualização da webcam no Raspbian, foi utilizado integralmente um script em Python extraído daqui, o qual faz uso do PyGame (recurso nativo na distribuição Raspbian).

 

O projeto deste rover é open source, sendo livre sua reprodução e uso. O repositório no GItHub para acesso ao projeto (códigos-fonte e circuito esquemático feito no Eagle) é este aqui.

 

 

RoboPi em ação!

 

Veja abaixo dois vídeos do RoboPi em ação:

 

 

Agradecimentos

 

Eu gostaria de agradecer ao articulista Haroldo Amaral por todo apoio dado na parte de drive de motor.

 

 

Referências

Sou engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP) e trabalho com desenvolvimento de firmware (sistemas embarcados bare-metal) na região do ABC paulista. Curioso e viciado em tecnologia, sempre busco me aprimorar na área de eletrônica e programação, em especial em desenvolvimento de firmware (área que mais gosto de trabalhar e estudar).