Tabla de contenido:

Robot Arduino Otto con máquina de estado: 4 pasos
Robot Arduino Otto con máquina de estado: 4 pasos

Video: Robot Arduino Otto con máquina de estado: 4 pasos

Video: Robot Arduino Otto con máquina de estado: 4 pasos
Video: Aprende a montar tu propio robot Otto en menos de diez minutos. 2024, Mes de julio
Anonim
Image
Image

Descripción del proyecto

En este proyecto, quiero mostrarles una forma de programar el Otto Robot, que es un robot de bricolaje basado en Arduino. Usando YAKINDU Statechart Tools (gratis para no comerciales) podemos usar fácilmente máquinas de estado para modelar gráficamente el comportamiento del Robot Otto y generar código C / C ++. Usaremos uno de sus ejemplos para extender el comportamiento a nuestro gusto.

Para las personas que no saben qué es una máquina de estado y no quieren hurgar en el complicado artículo de Wikipedia, aquí hay una pequeña explicación:

Una máquina de estado son solo nodos y caminos entre esos nodos. Tienes un nodo inicial y puedes tomar los caminos a otros nodos dependiendo de sus guardias, que pueden ser representados por eventos. Estos eventos se generan desde la propia máquina de estado o desde el exterior (como una función, etc.).

La herramienta en sí utiliza una interfaz de arrastrar y soltar y un lenguaje específico del dominio. Lo repasaré por usted, para que no tenga que buscar en su documentación para poner su Otto en funcionamiento. Configurar el IDE no es demasiado difícil, porque todos los complementos, etc. deberían instalarse automáticamente.

Suministros

Robot Otto o Robot Zowi

Ambos robots hacen esencialmente lo mismo y usan la misma API. El Otto Robot es un robot de bricolaje, con sus partes en línea, listo para ser impreso con una impresora 3D si tiene una. La alternativa es el robot Zowi, que se puede comprar en línea y listo para usar.

Herramientas de gráficos de estado de YAKINDU

La herramienta que usaremos para modelar la máquina de estados. Puede comenzar con una prueba de 30 días y luego obtener una licencia gratuita para uso no comercial.

Eclipse C ++ IDE para el complemento Arduino

No tenemos que descargarlo manualmente, porque el IDE lo hace por nosotros. Todavía pensé que sería bueno incluirlo aquí.

Paso 1: Configurar todo

Comprensión de cómo conectar el Otto
Comprensión de cómo conectar el Otto

Después de instalar el IDE, ejecútelo y configure un espacio de trabajo en cualquier lugar de su PC (la configuración es idéntica a la de usar Eclipse por primera vez). Cuando el programa se haya iniciado por completo, haga clic en la página de bienvenida y haga clic en 'Archivo -> Nuevo -> Ejemplo …' y luego seleccione 'Ejemplos de gráficos de estado de YAKINDU', espere un poco y busque "Sistemas integrados -> Zowi (C ++)" ejemplo.

IMPORTANTE: Haga clic en el botón superior derecho llamado 'Instalar dependencias …'. Esto instala todo por usted, por lo que no tiene que preocuparse por bibliotecas, complementos y similares. Descargue el ejemplo, siga las instrucciones del ejemplo "Sistemas integrados -> Zowi (C ++)" y luego continúe con el siguiente paso.

Paso 2: Comprensión de cómo conectar el Otto

Vaya al archivo ".sct" y edite la máquina de estado a su gusto. A la derecha hay un menú con todos los elementos disponibles. Solo nos interesan los estados y las transiciones.

En la imagen, pueden ver que escribí algunas cosas sobre las transiciones; el "después de X s" es bastante autoexplicativo y el "siempre" solo significa que va allí justo después de terminar el código del Estado. La "entrada /" significa que el código debe ejecutarse inmediatamente después de ingresar al estado.

El IDE compila la máquina de estado en C ++, que es compatible con Arduino. Para utilizar las funciones de Otto, tenemos que trabajar un poco accediendo a la interfaz.

Las siguientes palabras clave se pueden usar para definir cosas para que las use la máquina de estado:

constantes, que contienen valores y no se pueden cambiar

variables, que contienen valores y se pueden cambiar

operaciones, que se generarán en métodos virtuales de C ++ para su implementación

interfaz:

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 operación zowi_init (YL: integer, YR: integer, RL: integer, RR: integer) operación zowi_home () operación zowi_putMouth (mouthType: integer) operación zowi_sing (songName: integer) operación zowi_walk (pasos: real, T: integer, dir: integer) operación zowi_shakeLeg ()

Consejo profesional: si no sabe qué ingresar en algún lugar o parece haber un error, presione "ctrl + espacio" para obtener algunas pistas sobre lo que puede ingresar.

Además, debe mirar los ejemplos, ¡también tienen algo de código allí! También puede usarlos como una estructura para simplemente editar el modelo, que es la única parte que nos interesa a partir de ahora.

Paso 3: llenar los vacíos

Llenar los huecos
Llenar los huecos

Después de cambiar cosas en el modelo, puede hacer clic con el botón derecho en "zowiSCT.sgen -> Generar artefactos de código". Esto genera las funciones virtuales en C ++, que se declaran en la máquina de estado en la carpeta "src-gen", que luego implementamos usando C ++ normal.

Simplemente cree estos dos archivos en la carpeta "src" para obtener la funcionalidad que queremos de Otto.

Primero el 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 (pasos sc_real, sc_integer T, sc_integer dir); void zowi_shakeLeg (); }; #endif / * SRC_IMPL_H_ * /

Entonces el Impl.cpp

#include "Impl.h"

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

Paso 4: Hacer bailar a Otto

Cuando esté satisfecho con su producto, haga clic en el martillo en la parte superior izquierda y espere a que finalice el proceso. Luego haga clic en la flecha verde a la derecha del martillo y vea a su Otto bailando.

Si lo desea, puede consultar algunos otros ejemplos: Herramientas de gráficos de estado de YAKINDU

Recomendado: