Índice:

Robô Arduino Otto com máquina de estado: 4 etapas
Robô Arduino Otto com máquina de estado: 4 etapas

Vídeo: Robô Arduino Otto com máquina de estado: 4 etapas

Vídeo: Robô Arduino Otto com máquina de estado: 4 etapas
Vídeo: COMO É A FABRICAÇÃO DE UMA PLACA DA PLATAFORMA ARDUINO NO BRASIL? 2024, Novembro
Anonim
Image
Image

Visão Geral do Projeto

Neste projeto, quero mostrar a vocês uma maneira de programar o Otto Robot, que é um robô DIY baseado em Arduino. Usando YAKINDU Statechart Tools (grátis para não comerciais), podemos facilmente usar máquinas de estado para modelar graficamente o comportamento do Otto Robot e gerar código C / C ++. Usaremos um de seus exemplos para estender o comportamento ao nosso gosto.

Para as pessoas que não sabem o que é uma máquina de estado e não querem vasculhar o complicado artigo da Wikipedia, aqui está uma pequena explicação:

Uma máquina de estado é apenas nós e caminhos entre esses nós. Você tem um nó inicial e pode seguir os caminhos para outros nós dependendo de seus guardas, que podem ser representados por eventos. Esses eventos são gerados da própria máquina de estado ou de fora (como uma função, etc.).

A própria ferramenta usa uma interface de arrastar e soltar e um idioma específico de domínio. Eu irei repassá-lo para você, para que você não tenha que vasculhar a documentação para colocar o Otto em funcionamento. Configurar o IDE não é muito difícil, porque todos os plug-ins, etc. devem ser instalados automaticamente.

Suprimentos

Robô Otto ou Robô Zowi

Ambos os robôs fazem essencialmente o mesmo e usam a mesma API. O Otto Robot é um robô DIY, com suas peças online, pronto para ser impresso com uma impressora 3D se você tiver uma. A alternativa é o Zowi Robot, que pode ser adquirido online e pronto para uso.

YAKINDU Statechart Tools

A ferramenta que usaremos para modelar a máquina de estado. Você pode começar com um teste de 30 dias e depois obter uma licença gratuita para uso não comercial.

Eclipse C ++ IDE para Arduino Plugin

Não precisamos fazer o download manualmente, porque o IDE faz isso por nós. Ainda achei que seria bom listá-lo aqui.

Etapa 1: Configurando Tudo

Compreendendo como fazer a interface do Otto
Compreendendo como fazer a interface do Otto

Depois de instalar o IDE, execute-o e configure um espaço de trabalho em qualquer lugar do seu PC (a configuração é idêntica ao uso do Eclipse pela primeira vez). Quando o programa tiver iniciado completamente, clique fora da página de boas-vindas e clique em 'Arquivo -> Novo -> Exemplo…' e então selecione 'YAKINDU Statechart Exemplos', espere um pouco e procure por "Sistemas Embutidos -> Zowi (C ++)" exemplo.

IMPORTANTE: Clique no botão superior direito chamado 'Instalar dependências…'! Isso instala tudo para você, então você não precisa se preocupar com bibliotecas, plug-ins e outros. Baixe o exemplo, siga as instruções no exemplo "Sistemas Embarcados -> Zowi (C ++)" e continue com a próxima etapa.

Etapa 2: Compreendendo como fazer a interface do Otto

Vá para o arquivo ".sct" e edite a máquina de estado de acordo com sua preferência. À direita está um menu com todos os itens disponíveis. Estamos interessados apenas nos estados e nas transições.

Na foto, você pode ver que escrevi algumas coisas nas transições; o "depois de X s" é bastante autoexplicativo e o "sempre" significa apenas que vai lá logo após terminar o código do Estado. A "entrada /" significa que o código deve ser executado logo após entrar no estado.

O IDE compila a máquina de estado para C ++, que é compatível com Arduino. Para usar os recursos do Otto, temos que trabalhar um pouco para acessar a interface.

As seguintes palavras-chave podem ser usadas para definir coisas para a máquina de estado usar:

constantes, que contêm valores e não podem ser alteradas

variáveis, que contêm valores e podem ser alteradas

operações, que serão geradas para métodos virtuais C ++ para implementação

interface:

const PIN_YL: integer = 2 const PIN_YR: integer = 3 const PIN_RL: integer = 4 const PIN_RR: integer = 5 const sound: integer = 2 const mouth_heart: integer = 13 const mouth_happyOpen: integer = 11 operação zowi_init (YL: integer, YR: inteiro, RL: inteiro, RR: inteiro) operação zowi_home () operação zowi_putMouth (mouthType: inteiro) operação zowi_sing (songName: inteiro) operação zowi_walk (etapas: real, T: inteiro, dir: inteiro) operação zowi_shakeLeg ()

Dica profissional: se você não souber o que inserir em algum lugar ou se houver um erro, pressione "ctrl + espaço" para obter algumas dicas sobre o que você pode inserir.

Além disso, você deve olhar para os exemplos, eles têm algum código lá também! Você também pode usá-los como uma estrutura apenas para editar o modelo, que é a única parte na qual estamos interessados no momento.

Etapa 3: Preenchendo as lacunas

Preenchendo as lacunas
Preenchendo as lacunas

Depois de alterar as coisas no modelo, você pode clicar com o botão direito em "zowiSCT.sgen -> Gerar Artefatos de Código". Isso gera as funções virtuais em C ++, que são declaradas na máquina de estado para a pasta "src-gen", que então implementamos usando C ++ normal.

Basta criar esses dois arquivos na pasta "src" para obter a funcionalidade que desejamos de Otto.

Primeiro o Impl.h

#ifndef SRC_IMPL_H_

#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" class Impl: public ZowiSCT:: DefaultSCI_OCB {public: Impl (); virtual ~ Impl (); void zowi_init (sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR); void zowi_home (); void zowi_putMouth (sc_integer mouthType); void zowi_sing (sc_integer songName); void zowi_walk (passos sc_real, sc_integer T, dir sc_integer); void zowi_shakeLeg (); }; #endif / * SRC_IMPL_H_ * /

Então o Impl.cpp

#include "Impl.h"

#include "../Zowi/Zowi.h" Zowi zowi = novo Zowi (); Impl:: Impl () {} Impl:: ~ Impl () {} void Impl:: zowi_home () {zowi.home (); } void Impl:: zowi_init (sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR) {zowi.init (YL, YR, RL, RR); } void Impl:: zowi_putMouth (sc_integer mouthType) {zowi.putMouth (mouthType); } void Impl:: zowi_sing (sc_integer songName) {zowi.sing (songName); } void Impl:: zowi_walk (etapas sc_real, sc_integer T, dir sc_integer) {zowi.walk (etapas, T, dir); } void Impl:: zowi_shakeLeg () {zowi.shakeLeg (); }

Etapa 4: fazendo a dança Otto

Quando estiver satisfeito com o seu produto, clique no martelo no canto superior esquerdo e aguarde o término do processo. Em seguida, clique na seta verde à direita do martelo e veja seu Otto dançando!

Se desejar, você pode verificar alguns outros exemplos: YAKINDU Statechart Tools

Recomendado: