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.

Beaglebone blue.
Figura 1 – 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:

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.

Projeto com a Beaglebone Blue - Recursos de hardware da Beaglebone Blue.
Figura 2 – Recursos de hardware da Beaglebone Blue.

SiP (System in-Package)

A BeagleBone Blue utiliza o SiP Octavo Systems OSD3358, o qual possui as seguintes características:

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.

Figura 3 – slot para SD-Card

Periferia de hardware

Um resumo da periferia de hardware da placa pode ser visto abaixo:

Além disso, possui conectores destinados a:

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:

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

Controle de Motores

Referências