Mục lục:
- Quân nhu
- Bước 1: Thiết lập mọi thứ
- Bước 2: Tìm hiểu cách giao diện với Otto
- Bước 3: Lấp đầy khoảng trống
- Bước 4: Thực hiện điệu nhảy Otto
Video: Robot Arduino Otto với máy trạng thái: 4 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Tổng quan dự án
Trong dự án này, tôi muốn giới thiệu cho các bạn cách lập trình Robot Otto, một robot tự làm dựa trên Arduino. Sử dụng Công cụ Statechart YAKINDU (miễn phí cho phi thương mại), chúng ta có thể dễ dàng sử dụng các máy trạng thái để mô hình hóa hoạt động của Robot Otto bằng đồ thị và tạo mã C / C ++. Chúng tôi sẽ sử dụng một trong những ví dụ của họ để mở rộng hành vi theo ý thích của chúng tôi.
Đối với những người không biết máy trạng thái là gì và không muốn lục tung bài viết phức tạp trên Wikipedia, đây là một lời giải thích nhỏ:
Máy trạng thái chỉ là các nút và đường dẫn giữa các nút đó. Bạn có một nút bắt đầu và có thể đi đường dẫn đến các nút khác tùy thuộc vào các bảo vệ của chúng, có thể được biểu thị bằng các sự kiện. Những sự kiện này được tạo ra từ chính máy trạng thái hoặc từ bên ngoài (như một hàm, v.v.).
Bản thân công cụ này sử dụng giao diện kéo và thả và ngôn ngữ dành riêng cho miền. Tôi sẽ xem qua nó cho bạn, vì vậy bạn không cần phải tìm hiểu tài liệu của họ để thiết lập và chạy Otto của bạn. Việc thiết lập IDE không quá khó, vì tất cả các plugin, v.v. sẽ được cài đặt tự động.
Quân nhu
Robot Otto hoặc Robot Zowi
Cả hai robot này về cơ bản hoạt động giống nhau và sử dụng cùng một API. Robot Otto là một robot tự chế, với các bộ phận của nó trực tuyến, sẵn sàng được in bằng máy in 3D nếu bạn tình cờ có. Thay thế là Zowi Robot, có thể mua trực tuyến và sẵn sàng sử dụng.
Công cụ Statechart YAKINDU
Công cụ mà chúng ta sẽ sử dụng để lập mô hình máy trạng thái. Bạn có thể bắt đầu với bản dùng thử 30 ngày và sau đó sẽ nhận được giấy phép miễn phí cho mục đích sử dụng phi thương mại.
Eclipse C ++ IDE cho Plugin Arduino
Chúng tôi không phải tải xuống theo cách thủ công, vì IDE thực hiện việc đó cho chúng tôi. Tôi vẫn nghĩ sẽ rất hay nếu liệt kê nó ở đây.
Bước 1: Thiết lập mọi thứ
Sau khi cài đặt IDE, hãy chạy nó và thiết lập không gian làm việc ở bất kỳ đâu trên máy tính của bạn (thiết lập giống hệt như sử dụng Eclipse lần đầu tiên). Khi chương trình đã khởi động hoàn toàn, hãy nhấp vào trang chào mừng và nhấp vào 'Tệp -> Mới -> Ví dụ…' rồi chọn 'YAKINDU Statechart Examples', đợi một chút và tìm kiếm "Embedded Systems -> Zowi (C ++)" thí dụ.
QUAN TRỌNG: Nhấp vào nút trên cùng bên phải có tên 'Cài đặt phụ thuộc…'! Điều này cài đặt mọi thứ cho bạn, vì vậy bạn không phải lo lắng về Thư viện, Trình cắm và những thứ tương tự. Tải xuống ví dụ, làm theo hướng dẫn trong ví dụ "Hệ thống nhúng -> Zowi (C ++)" và sau đó tiếp tục với bước tiếp theo.
Bước 2: Tìm hiểu cách giao diện với Otto
Vào tệp ".sct" và chỉnh sửa trạng thái máy theo ý muốn của bạn. Bên phải là một menu với tất cả các món có sẵn. Chúng tôi chỉ quan tâm đến các trạng thái và quá trình chuyển đổi.
Trong hình, bạn có thể thấy, rằng tôi đã viết một số nội dung vào quá trình chuyển đổi; "after X s" khá dễ hiểu và "always" chỉ có nghĩa là nó sẽ đến đó ngay sau khi hoàn thành mã từ State. "Entry /" có nghĩa là mã phải được thực thi ngay sau khi nhập trạng thái.
IDE biên dịch máy trạng thái sang C ++, tương thích với Arduino. Để sử dụng các tính năng của Otto, chúng ta phải tự mình thực hiện một chút thao tác khi truy cập vào giao diện.
Các từ khóa sau có thể được sử dụng để xác định nội dung cho máy trạng thái sử dụng:
hằng số, giữ các giá trị và không thể thay đổi
các biến, giữ các giá trị và có thể được thay đổi
các hoạt động, sẽ được tạo cho các phương thức C ++ ảo để triển khai
giao diện:
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_happy Mở: integer = 11 hoạt động zowi_init (YL: integer, YR: integer, RL: integer, RR: integer) hoạt động zowi_home () hoạt động zowi_putMouth (miệngType: số nguyên) hoạt động zowi_sing (songName: số nguyên) hoạt động zowi_walk (các bước: thực, T: số nguyên, dir: số nguyên) hoạt động zowi_shakeLeg ()
Mẹo chuyên nghiệp: nếu bạn không biết phải nhập gì ở một nơi nào đó hoặc có vẻ như có lỗi, hãy nhấn "ctrl + dấu cách" để nhận một số gợi ý về những gì bạn có thể nhập.
Ngoài ra, bạn nên xem xét các ví dụ, chúng cũng có một số mã trong đó! Bạn cũng có thể sử dụng chúng như một cấu trúc để chỉ chỉnh sửa mô hình, đây là phần duy nhất mà chúng tôi quan tâm đến thời điểm hiện tại.
Bước 3: Lấp đầy khoảng trống
Sau khi thay đổi mọi thứ trong mô hình, bạn có thể nhấp chuột phải vào "zowiSCT.sgen -> Tạo các phần mềm mã". Điều này tạo ra các hàm ảo trong C ++, được khai báo trong máy trạng thái vào thư mục "src-gen", sau đó chúng tôi thực hiện bằng cách sử dụng C ++ bình thường.
Chỉ cần tạo hai tệp này trong thư mục "src" để có được chức năng chúng tôi muốn từ Otto.
Đầu tiên là Impl.h
#ifndef SRC_IMPL_H_
#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" class Impl: public ZowiSCT:: DefaultSCI_OCB {public: Impl (); ảo ~ 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 (bước sc_real, sc_integer T, sc_integer dir); void zowi_shakeLeg (); }; #endif / * SRC_IMPL_H_ * /
Sau đó, 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 (bước sc_real, sc_integer T, sc_integer dir) {zowi.walk (bước, T, dir); } void Impl:: zowi_shakeLeg () {zowi.shakeLeg (); }
Bước 4: Thực hiện điệu nhảy Otto
Khi bạn hài lòng với sản phẩm của mình, hãy nhấp vào chiếc búa ở trên cùng bên trái và đợi quá trình kết thúc. Sau đó nhấp vào mũi tên màu xanh lá cây ở bên phải của chiếc búa và xem Otto của bạn đang nhảy múa!
Nếu muốn, bạn có thể xem thêm một số ví dụ khác: YAKINDU Statechart Tools
Đề xuất:
Trình cập nhật trạng thái Slack với ESP8266: 5 bước (có hình ảnh)
Trình cập nhật trạng thái Slack Với ESP8266: Dự án này giúp làm cho ngày của bạn dễ dàng hơn một chút nếu bạn là người làm việc từ xa sử dụng Slack. Tôi sẽ chỉ cho bạn cách xây dựng nó bằng cách sử dụng bảng mạch wifi ESP8266. Đừng bỏ lỡ video ở trên để biết tổng quan. Cho dù bạn là người mới sử dụng Slack hay bạn chỉ là chúng tôi
Trạng thái Kicker đơn giản và hệ thống đặt chỗ với tích hợp Slack: 12 bước (có hình ảnh)
Trạng thái Kicker và Hệ thống đặt chỗ đơn giản với tích hợp Slack: Trong một công ty nơi tôi làm việc có một bàn kicker. Công ty chiếm nhiều tầng và đối với một số nhân viên, phải mất tới 3 phút để đến bàn và … nhận ra rằng bàn đã có người
Đồng hồ kỹ thuật số trên Arduino bằng máy trạng thái hữu hạn: 6 bước
Đồng hồ kỹ thuật số trên Arduino Sử dụng Máy trạng thái hữu hạn: Xin chào, tôi sẽ chỉ cho bạn cách tạo ra một chiếc đồng hồ kỹ thuật số bằng Công cụ Statechart YAKINDU và chạy trên Arduino, sử dụng Tấm chắn bàn phím LCD. đồng hồ được lấy từ David Harel. Anh ấy đã xuất bản một bài báo
Luôn BẬT Máy chủ DLNA Raspberry Pi và Máy khách Torrent với đèn LED Trạng thái: 6 bước
Luôn BẬT Máy chủ DLNA Raspberry Pi và Máy khách Torrent có đèn LED Trạng thái: Đã cố gắng tạo một cái cho riêng tôi và nó hoạt động hoàn hảo. Nó có thể phát trực tuyến video HD mà không có bất kỳ độ trễ nào và đèn LED trạng thái cho tôi biết trạng thái nhanh của nó. Tôi đã thêm các bước tôi đã thực hiện để tổng hợp nó lại với nhau bên dưới. Vui lòng xem qua, nếu bạn quan tâm
Máy trạng thái và đa nhiệm trên Arduino với SPI mở rộng: 3 bước
State Machine và Multitasking trên Arduino Với SPI Expanders: Tuần trước, tôi đã yêu cầu tạo một hệ thống để bắn pháo hoa bằng arduino. Nó cần khoảng 64 đầu ra để kiểm soát đám cháy. Một cách để làm điều đó là sử dụng bộ mở rộng IC. Vì vậy, 2 giải pháp có sẵn: - một bộ mở rộng I2C nhưng nó cần biến tần khi bạn