Sommario:

Arduino Otto Robot con macchina a stati: 4 passaggi
Arduino Otto Robot con macchina a stati: 4 passaggi

Video: Arduino Otto Robot con macchina a stati: 4 passaggi

Video: Arduino Otto Robot con macchina a stati: 4 passaggi
Video: Creiamo una macchina a stati con i puntatori a funzione su Arduino - Video 364 2024, Novembre
Anonim
Image
Image

Panoramica del progetto

In questo progetto, voglio mostrarti un modo per programmare Otto Robot, che è un robot fai-da-te basato su Arduino. Usando YAkinDU Statechart Tools (gratuito per non-commerciali) possiamo facilmente usare macchine a stati per modellare graficamente il comportamento di Otto Robot e generare codice C/C++. Useremo uno dei loro esempi per estendere il comportamento a nostro piacimento.

Per le persone che non sanno cosa sia una macchina a stati e non vogliono rovistare nel complicato articolo di Wikipedia, ecco una piccola spiegazione:

Una macchina a stati è solo nodi e percorsi tra quei nodi. Hai un nodo di partenza e puoi prendere i percorsi verso altri nodi a seconda delle loro guardie, che possono essere rappresentate da eventi. Questi eventi vengono generati dalla stessa macchina a stati o dall'esterno (come una funzione, ecc.).

Lo strumento stesso utilizza un'interfaccia drag&drop e un linguaggio specifico del dominio. Lo esaminerò per te, così non dovrai scavare nella loro documentazione per far funzionare il tuo Otto. Configurare l'IDE non è troppo difficile, perché tutti i plug-in, ecc. dovrebbero essere installati automaticamente.

Forniture

Robot Otto o Robot Zowi

Entrambi questi robot fanno essenzialmente lo stesso e utilizzano la stessa API. L'Otto Robot è un robot fai-da-te, con le sue parti online, pronto per essere stampato con una stampante 3D se ne hai una. L'alternativa è lo Zowi Robot, acquistabile online e pronto all'uso.

Strumenti per diagrammi di stato YAKINDU

Lo strumento che utilizzeremo per modellare la macchina a stati. Puoi iniziare con una prova di 30 giorni e ottenere successivamente una licenza gratuita per uso non commerciale.

Plugin Eclipse C++ IDE per Arduino

Non dobbiamo scaricarlo manualmente, perché l'IDE lo fa per noi. Ho comunque pensato che sarebbe stato carino elencarlo qui.

Passaggio 1: impostare tutto

Capire come interfacciare l'Otto
Capire come interfacciare l'Otto

Dopo aver installato l'IDE, eseguilo e configura uno spazio di lavoro ovunque sul tuo PC (la configurazione è identica all'utilizzo di Eclipse per la prima volta). Quando il programma è stato avviato completamente, fai clic sulla pagina di benvenuto e fai clic su "File -> Nuovo -> Esempio …", quindi seleziona "Esempi di diagramma di stato YAchindu", attendi un po 'e cerca "Sistemi incorporati -> Zowi (C++).)" esempio.

IMPORTANTE: fare clic sul pulsante in alto a destra chiamato "Installa dipendenze…"! Questo installa tutto per te, quindi non devi preoccuparti di librerie, plug-in e simili. Scarica l'esempio, segui le istruzioni nell'esempio "Sistemi incorporati -> Zowi (C++)" e poi continua con il passaggio successivo.

Passaggio 2: capire come interfacciare Otto

Vai nel file ".sct" e modifica la macchina a stati a tuo piacimento. Sulla destra c'è un menu con tutti gli articoli disponibili. Ci interessano solo gli stati e le transizioni.

Nella foto, puoi vedere, che ho scritto alcune cose sulle transizioni; il "dopo X s" è abbastanza autoesplicativo e il "sempre" significa solo che va lì subito dopo aver terminato il codice dello Stato. La "voce /" significa che il codice deve essere eseguito subito dopo essere entrato nello stato.

L'IDE compila la macchina a stati in C++, che è compatibile con Arduino. Per utilizzare le funzionalità dell'Otto, dobbiamo fare un po' di lavoro noi stessi accedendo all'interfaccia.

Le seguenti parole chiave possono essere utilizzate per definire elementi da utilizzare per la macchina a stati:

costanti, che contengono valori e non possono essere modificate

variabili, che contengono valori e possono essere modificate

operazioni, che verranno generate in metodi C++ virtuali per l'implementazione

interfaccia:

const PIN_YL: intero = 2 const PIN_YR: intero = 3 const PIN_RL: intero = 4 const PIN_RR: intero = 5 const suono: intero = 2 const bocca_cuore: intero = 13 const bocca_feliceOpen: intero = 11 operazione zowi_init(YL:: integer, RL: integer, RR: integer) operazione zowi_home() operazione zowi_putMouth(mouthType: integer) operazione zowi_sing(songName: integer) operazione zowi_walk(steps: real, T: integer, dir: integer) operazione zowi_shakeLeg()

Suggerimento avanzato: se non sai cosa inserire da qualche parte o sembra esserci un errore, premi "ctrl+spazio" per ottenere alcuni suggerimenti su cosa puoi inserire.

Inoltre, dovresti esaminare gli esempi, hanno anche del codice! Puoi anche usarli come struttura per modificare solo il modello, che è l'unica parte che ci interessa al momento.

Passaggio 3: colmare le lacune

Colmare le lacune
Colmare le lacune

Dopo aver modificato le cose nel modello, puoi fare clic con il pulsante destro del mouse su "zowiSCT.sgen -> Genera artefatti codice". Questo genera le funzioni virtuali in C++, che vengono dichiarate nella macchina a stati nella cartella "src-gen", che poi implementiamo usando il normale C++.

Basta creare questi due file nella cartella "src" per ottenere la funzionalità che vogliamo da Otto.

Prima l'Impl.h

#ifndef SRC_IMPL_H_

#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" class Impl: public ZowiSCT::DefaultSCI_OCB{ public: Impl(); virtuale ~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(sc_real steps, sc_integer T, sc_integer dir); void zowi_shakeLeg(); }; #endif /* SRC_IMPL_H_ */

Quindi l'Impl.cpp

#include "Impl.h"

#include "../Zowi/Zowi.h" Zowi zowi = new Zowi(); Impl::Impl() {} Impl::~Impl() {} void Impl::zowi_home() { zowi.home(); } void Impl::zowi_init(sc_intero YL, sc_intero YR, sc_intero RL, sc_intero 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(sc_real steps, sc_integer T, sc_integer dir) { zowi.walk(steps, T, dir); } void Impl::zowi_shakeLeg() { zowi.shakeLeg(); }

Passaggio 4: fare ballare Otto

Quando sei soddisfatto del tuo prodotto, clicca sul martello in alto a sinistra e attendi che il processo finisca. Quindi fai clic sulla freccia verde a destra del martello e guarda il tuo Otto ballare!

Se vuoi, puoi dare un'occhiata ad altri esempi: YAKINDU Statechart Tools

Consigliato: