Muito provavelmente, a grande maioria de hobistas e profissionais em sistemas embarcados já trabalhou ou ouviu falar das placas da linha Beaglebone. Apesar da vasta linha de SBCs (Single-Board Computers) disponível, há uma SBC dedicada para projetos na área de robótica: a Beaglebone Blue.
Este artigo irá, além de apresentar as principais características desta placa, mostrar como fazer um pequeno projeto com a Beaglebone Blue em C para controlar motores DC, utilizando a Robotics Cape Library.
Material necessário
Para fazer este experimento será necessário:
- Uma placa Beaglebone Blue operacional (com acesso à Internet, conexão SSH, enfim, já inteiramente configurada);
- Uma bateria LiPo de 2 células (7,4 V). Carga recomendada: 1100 mAh ou superior;
- De um a quatro motores DC de 4 até 6 V de tensão de operação. Importante: cada motor não deve consumir mais do que 1,2 A de corrente!
Overview do hardware
Abaixo segue um overview do hardware da Beaglebone Blue.
Recursos de hardware
A BeagleBone Blue possui um conjunto de recursos de hardware dedicado para projetos de robótica, indo desde recursos de sensoriamento até controle de motores DC e servo-motores. Observe a figura 2, onde tais recursos de hardware estão em evidência.
SiP (System in-Package)
A BeagleBone Blue utiliza o SiP Octavo Systems OSD3358, o qual possui as seguintes características:
- Processador AM335x (ARM Cortex-A8, rodando a 1 GHz), muito similar ao utilizado na Beaglebone Black;
- Memória eMMC de 4 GB;
- 512 MB de memória RAM DDR3;
- Assim como as demais BeagleBones do mercado, possui 2 PRU (Programmable Real-Time Units) de 32 bits rodando a 200 MHz, destinados ao uso em aplicações que necessitem de abordagem Real-Time.
Além disso, se mais memória de armazenamento for necessária em um determinado projeto, é possível utilizar uma imagem para a placa gravada em um SD Card (veja slot do SD Card na figura 3) e, assim, ter-se mais memória disponível. Para baixar as imagens oficiais disponíveis, acesse este link e, para saber como colocá-la no SD Card e fazer a BeagleBone utilizá-la, acesse este outro link.
Periferia de hardware
Um resumo da periferia de hardware da placa pode ser visto abaixo:
- Suporte à bateria: possui circuitos para utilizar e recarregar uma bateria LiPo de 2 células (7,4 V). A recarga é feita SOMENTE através de uma fonte de alimentação de 12 V (vendida separadamente);
- Conectividade WI-FI e Bluetooth (BLE e Bluetooth 4.1);
- Uma USB 2.0 Client para alimentação (da parte lógica) e comunicação;
- Uma USB 2.0 HOST;
- Circuitaria para controle de até 8 servo-motores;
- Circuitaria para controle de até 4 motores DC (consumindo até 1,2 A cada um). Há controle de sentido de rotação e velocidade de giro (com PWM);
- Um chip IMU de 9 eixos, disponibilizando: acelerômetro, magnetômetro e giroscópio (através do chip MPU9250);
- Barômetro e termômetro (através do chip BMP280);
- I/O: 11 LEDs programáveis e 2 botões programáveis.
Além disso, possui conectores destinados a:
- Conectores para até 4 encoders;
- Conector para módulo GPS;
- Conectores para até 4 canais de ADC e GPIOs;
- Conectores para UART e I²C;
- Conector para SPI;
- Conector para rádio DSM 2.
Conexões / conectores
Uma peculiaridade da BeagleBone Blue é o uso de conectores do tipo JST. Embora não sejam tão comuns entre os hobistas, estes conectores têm como característica serem bem firmes na conexão e por possuírem pequenas dimensões físicas. Como desvantagem, este tipo de conector costuma ser mais caro que os mais convencionais.
Em resumo, apesar de mais caros, o uso de conectores JST para projetos que estão sujeitos à vibração constante (robôs, por exemplo) é uma ótima escolha. Para saber a lista completa dos conectores JST presentes na Beaglebone Blue, acesse este link.
Bibliotecas de software
Uma biblioteca de software feita especialmente para permitir o uso de todos os recursos da placa é a Robotics Cape Library.
Esta biblioteca é totalmente open-source e destinada para desenvolver projetos de robótica em C na BeagleBone Blue (também é possível utilização na BleagleBone Black, desde que nesse caso seja utilizado um shield/cape chamado Robotics Cape). Apesar de já ser parte integrante das imagens mais recentes da Beaglebone Blue, esta biblioteca pode ser obtida neste link (repositório oficial).
Primeiro projeto – acionamento de motor DC
Descrição e montagem
Como primeiro projeto, será feito um controle de velocidade e sentido de rotação de motores DC (um, dois, três ou quatro motores simultâneos). Para isso, será utilizada a Robotics Cape Library.
A montagem é simples e rápida:
- Ligue a bateria no soquete próprio dela na Beaglebone Blue (se necessário, também ligar o adaptador 12 V para fazer a carga da bateria);
- Para cada motor que desejar controlar: ligar um chicote com conector JST de duas vias (JST-ZH, com 1,5 mm de espaçamento), e conectar o conector JST a um dos soquetes destinado a motores.
Código-fonte
O código-fonte do projeto foi baseado nos exemplos encontrados no repositório da própria biblioteca. O código fonte pode ser visto abaixo. Salve-o com o nome de primeiro_projeto_bbblue.c na sua Beaglebone Blue.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <rc_usefulincludes.h>
#include <roboticscape.h>
#include <time.h>
#include <signal.h>
#define PAUSA_MOTOR 100000 //100000us = 100ms
int main(void)
{
int duty;
int motores_ativos = 1;
//Inicializa biblioteca
if(rc_initialize())
{
perror("Falha ao inicializar biblioteca robotics cape.");
return -1;
}
//Inicializa / ativa hardware de controle do motor
rc_enable_motors();
rc_set_motor_all(0.0);
//executa até Ctrl+C nao ser pressionado
while (motores_ativos == 1)
{
printf("\r\n[SENTIDO HORARIO]\n\n");
//sentido horario
for (duty=0; duty<101; duty++)
{
printf("\r\nSentido horario: duty: %d\n\n",duty);
rc_set_motor_all((float)duty/100);
if (rc_get_state() == EXITING)
{
motores_ativos = 0;
break;
}
rc_usleep(PAUSA_MOTOR);
}
if (motores_ativos == 0)
continue;
printf("\r\n[SENTIDO HORARIO]\n\n");
//sentido anti-horario
for (duty=0; duty>-101; duty--)
{
printf("\r\nSentido anti-horario: duty: %d\n\n",duty);
rc_set_motor_all((float)duty/100);
if (rc_get_state() == EXITING)
{
motores_ativos = 0;
break;
}
rc_usleep(PAUSA_MOTOR);
}
}
//Desativa hardware de controle de motor e finaliza programa
rc_disable_motors();
return 0;
}
Para compilar, execute o comando abaixo:
gcc primeiro_projeto_bbblue.c -o primeiro_projeto_bbblue -lm -lrt -lpthread -lroboticscape
E, por fim, para rodar o projeto, execute o comando abaixo.
primeiro_projeto_bbblue
Para parar o programa, aperte Ctrl + C.
Conclusão
Este artigo apresentou a placa de desenvolvimento Beaglebone Blue, a placa da linha das Beaglebone dedicada à robótica. Dentre suas características, a principal delas é a grande quantidade de periféricos de robótica (sensores, conexões e circuito de controle de motores DC), fazendo com que projetos de robótica desenvolvidos com a Beaglebone Blue não necessitem de muitos circuitos extras / externos.
Além disso, como exemplo de utilização da placa, foi feito um projeto de controle de sentido de rotação e velocidade de até quatro motores DC, utilizando para isso a biblioteca Robotics Cape Library.
Saiba mais
Utilizando motor DC com Arduino UNO e Adafruit Motor Shield v2.3
Controle de servomotores com Arduino e ESP8266
Referências




