Sommario:
- Forniture
- Passaggio 1: impostare tutto
- Passaggio 2: capire come interfacciare Otto
- Passaggio 3: colmare le lacune
- Passaggio 4: fare ballare Otto
Video: Arduino Otto Robot con macchina a stati: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
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
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
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:
Macchina a stati finiti su un MSP430: 6 passaggi
Finite State Machine su un MSP430: ti mostrerò come programmare un Launchpad MSP430G2 con Finite State Machines (FSM) utilizzando YAKINDU Statechart Tools direttamente in Texas Instruments Code Composer Studio. Questo tutorial contiene sei passaggi: Installazione di YAKINDU Statechart Tools come
Orologio digitale su Arduino utilizzando una macchina a stati finiti: 6 passaggi
Orologio digitale su Arduino utilizzando una macchina a stati finiti: Ehi, ti mostrerò come creare un orologio digitale con YAkinDU Statechart Tools ed eseguirlo su un Arduino, che utilizza uno scudo per tastiera LCD. Il modello originale del digitale orologio è stato preso da David Harel. Ha pubblicato un articolo su
Arduino HMI con macchine a stati: 9 passaggi
Arduino HMI utilizzando macchine a stati: in questo Instructable, ti mostrerò come utilizzare gli strumenti YAkinDU Statechart per realizzare un HMI semplice ed espandibile utilizzando uno scudo tastiera LCD 16x2 per Arduino. Le macchine a stati finiti (FSM) sono un potente modello di progettazione da sviluppare macchina umana complessa
Macchina a stati e multitasking su Arduino con espansioni SPI: 3 passaggi
State Machine e Multitasking su Arduino con Expander SPI: la scorsa settimana, stavo chiedendo di creare un sistema per pilotare fuochi d'artificio con un arduino. Aveva bisogno di circa 64 uscite per controllare gli incendi. Un modo per farlo è utilizzare gli espansori IC. Quindi sono disponibili 2 soluzioni: - un'espansione I2C ma ha bisogno di inverter quando si po
Arduino PLC 32 I/O+Macchina a stati+SCADA o HMI: 8 passaggi
Arduino PLC 32 I/O+Macchina a stati+SCADA o HMI: tanti modi per programmare, controllare e supervisionare un sistema industriale con arduino