Cuprins:

Robot Arduino Otto cu mașină de stat: 4 pași
Robot Arduino Otto cu mașină de stat: 4 pași

Video: Robot Arduino Otto cu mașină de stat: 4 pași

Video: Robot Arduino Otto cu mașină de stat: 4 pași
Video: How to use MOSFET Button IRF540 to control 5A to 20A DC Motor or LED light strip 2024, Iulie
Anonim
Image
Image

rezumatul proiectului

În acest proiect, vreau să vă arăt un mod de programare a robotului Otto, care este un robot DIY bazat pe Arduino. Folosind YAKINDU Statechart Tools (gratuit pentru necomercial) putem folosi cu ușurință mașini de stat pentru a modela grafic comportamentul robotului Otto și a genera cod C / C ++. Vom folosi unul dintre exemplele lor pentru a extinde comportamentul după bunul nostru plac.

Pentru persoanele care nu știu ce este o mașină de stat și nu doresc să scotocească articolul complicat de pe Wikipedia, iată o mică explicație:

O mașină de stare este doar noduri și căi între aceste noduri. Aveți un nod de pornire și puteți lua căile către alte noduri în funcție de pazele lor, care pot fi reprezentate de evenimente. Aceste evenimente sunt generate fie de mașina de stat în sine, fie din exterior (cum ar fi o funcție etc.).

Instrumentul în sine folosește o interfață drag & drop și un limbaj specific domeniului. Voi trece peste asta pentru tine, așa că nu trebuie să le cercetezi documentația pentru a pune Otto în funcțiune. Configurarea IDE nu este prea dificilă, deoarece toate pluginurile etc. ar trebui instalate automat.

Provizii

Robotul Otto sau Robotul Zowi

Ambii roboți fac în esență același lucru și folosesc același API. Robotul Otto este un robot DIY, cu piesele sale online, gata să fie tipărit cu o imprimantă 3D dacă se întâmplă să aveți una. Alternativa este robotul Zowi, care poate fi achiziționat online și gata de utilizare.

Instrumente YAKINDU Statechart

Instrumentul pe care îl vom folosi pentru a modela mașina de stare. Puteți începe cu o perioadă de încercare de 30 de zile și puteți obține o licență gratuită pentru utilizare necomercială ulterior.

Eclipse C ++ IDE pentru pluginul Arduino

Nu trebuie să-l descărcăm manual, deoarece IDE o face pentru noi. Încă m-am gândit că ar fi frumos să o enumăr aici.

Pasul 1: Configurarea totul

Înțelegerea modului de interfață cu Otto
Înțelegerea modului de interfață cu Otto

După instalarea IDE, rulați-l și configurați un spațiu de lucru oriunde pe computerul dvs. (configurarea este identică cu utilizarea Eclipse pentru prima dată). Când programul a început complet, faceți clic pe pagina de întâmpinare și faceți clic pe „Fișier -> Nou -> Exemplu…” și apoi selectați „Exemple de grafice YAKINDU”, așteptați puțin și căutați „Sisteme încorporate -> Zowi (C ++)) "exemplu.

IMPORTANT: Faceți clic pe butonul din dreapta sus numit „Instalați dependențe…”! Acest lucru instalează totul pentru dvs., deci nu trebuie să vă faceți griji cu privire la biblioteci, pluginuri și altele asemenea. Descărcați exemplul, urmați instrucțiunile din exemplul „Sisteme încorporate -> Zowi (C ++)” și apoi continuați cu pasul următor.

Pasul 2: Înțelegerea modului de interfață Otto

Accesați fișierul „.sct” și editați mașina de stare după bunul plac. În dreapta este un meniu cu toate elementele disponibile. Ne interesează doar statele și tranzițiile.

În imagine, puteți vedea, că am scris câteva lucruri în tranziții; „după X s” este destul de auto-explicativ și „întotdeauna” înseamnă doar că merge acolo imediat după terminarea codului din stat. „Intrare /” înseamnă că codul trebuie executat imediat după intrarea în stat.

IDE compilează mașina de stat în C ++, care este conform Arduino. Pentru a utiliza caracteristicile sistemului Otto, trebuie să lucrăm singuri accesând interfața.

Următoarele cuvinte cheie pot fi utilizate pentru a defini lucruri pe care le poate folosi mașina de stări:

constante, care dețin valori și nu pot fi modificate

variabile, care dețin valori și pot fi modificate

operațiuni, care vor fi generate la metode virtuale C ++ pentru implementare

interfață:

const PIN_YL: întreg = 2 const PIN_YR: întreg = 3 const PIN_RL: întreg = 4 const PIN_RR: întreg = 5 const sunet: întreg = 2 const gură_heart: întreg = 13 const gură_happy Deschis: întreg = 11 operație zowi_init (YL: întreg, YR: întreg, RL: întreg, RR: întreg) operație zowi_home () operație zowi_putMouth (tip de gură: întreg) operație zowi_sing (numeCântec: întreg) operație zowi_walk (pași: real, T: întreg, dir: întreg) operație zowi_shakeLeg ()

Sfat Pro: dacă nu știți ce să introduceți undeva sau pare să existe o eroare, apăsați „ctrl + spațiu” pentru a obține câteva sugestii despre ce puteți introduce.

În plus, ar trebui să te uiți în exemple, au și unele coduri acolo! De asemenea, le puteți utiliza ca structură pentru a edita doar modelul, care este singura parte care ne interesează de acum.

Pasul 3: Umplerea golurilor

Umple golurile
Umple golurile

După ce schimbați lucrurile din model, puteți face clic dreapta pe „zowiSCT.sgen -> Generați artefacte de cod”. Aceasta generează funcțiile virtuale în C ++, care sunt declarate în mașina de stat în folderul „src-gen”, pe care apoi îl implementăm folosind C ++ normal.

Creați aceste două fișiere în folderul „src” pentru a obține funcționalitatea pe care o dorim de la Otto.

Mai întâi 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 (sc_real step, sc_integer T, sc_integer dir); void zowi_shakeLeg (); }; #endif / * SRC_IMPL_H_ * /

Apoi, 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_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 (sc_real steps, sc_integer T, sc_integer dir) {zowi.walk (steps, T, dir); } void Impl:: zowi_shakeLeg () {zowi.shakeLeg (); }

Pasul 4: Realizarea dansului Otto

Când sunteți mulțumit de produsul dvs., faceți clic pe ciocanul din stânga sus și așteptați finalizarea procesului. Apoi faceți clic pe săgeata verde din dreapta ciocanului și vedeți-vă dansul Otto!

Dacă doriți, puteți consulta câteva alte exemple: YAKINDU Statechart Tools

Recomandat: