0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣用機(jī)器學(xué)習(xí)和openFrameworks控制伺服電機(jī)

454398 ? 來(lái)源:工程師吳畏 ? 2019-08-02 17:52 ? 次閱讀

電路圖

伺服電機(jī)Arduino之間建立以下連接:

黃色線是信號(hào)線。將其連接到Arduino上的數(shù)字引腳2。

棕色線是地線。將它連接到Arduino上的GND 。

紅色線是電源線。將其連接到Arduino上的 5V 引腳。

怎樣用機(jī)器學(xué)習(xí)和openFrameworks控制伺服電機(jī)

根據(jù)上面的電路圖在伺服電機(jī)和Arduino UNO之間建立連接。

編程Arduino

在Arduino代碼中,我們首先包含了伺服庫(kù)并為伺服初始化了一些變量。

然后在設(shè)置函數(shù)中,我們將伺服連接到Arduino的引腳2并開(kāi)始串行通信

在循環(huán)功能中,我們查找了輸入數(shù)據(jù),如果有任何數(shù)據(jù)可用,我們將讀取它并根據(jù)此值伺服電機(jī)將移動(dòng)。

// Code to control servo motor from openframeworks using wekinator

#include //including the servo library

Servo sg90; //including a variable for servo named sg90

int servo_pin = 2;

void setup() {

sg90.attach(servo_pin); //Giving the command to arduino to control pin 2 for servo

// Start the serial communication

Serial.begin(9600);

}

void loop() {

if (Serial.available()) { // If there is any data available

int inByte = Serial.read(); // Get the incoming data

sg90.write(inByte);

}

}

編程openFrameworks

在openFrameworks方面,我們有三個(gè)用于發(fā)送和的文件從Wekinator接收數(shù)據(jù),也將幫助我們將數(shù)據(jù)發(fā)送到Arduino。

Main.cpp

Main .cpp運(yùn)行應(yīng)用程序并打開(kāi)輸出窗口。

以下代碼適用于Main.cpp:

#include “ofMain.h”

#include “ofApp.h”

//========================================================================

int main( ){

ofSetupOpenGL(600, 480, OF_WINDOW); // 《-------- setup the GL context

// this kicks off the running of my app

// can be OF_WINDOW or OF_FULLSCREEN

// pass in width and height too:

ofRunApp(new ofApp());

}

OfApp.cpp

OfApp.cpp代碼是Arduino和openFrameworks之間存在串行通信的地方。它也是openFrameworks和Wekinator之間的OSC通信。

#include “ofApp.h”

#include “ofxOsc.h”

//--------------------------------------------------------------

void ofApp::setup(){

sender.setup(HOST, SENDPORT);

receiver.setup(RECEIVEPORT);

ofSetFrameRate(60);

serial.listDevices();

vector deviceList = serial.getDeviceList();

// this should be set to whatever com port your serial device is connected to.

// (ie, COM4 on a pc, /dev/tty.。.. on linux, /dev/tty.。. on a mac)

// arduino users check in arduino app.。..

int baud = 9600;

serial.setup(0, baud);

//open the first device

// windows example

//serial.setup(“COM10”, baud);

// mac osx example

//serial.setup(“/dev/tty.usbserial-A4001JEC”, baud);

//linux example

//serial.setup(“/dev/ttyUSB0”, baud);

}

//--------------------------------------------------------------

void ofApp::update(){

// Sending data to the wekinator

ofxOscMessage m;

m.setAddress(string(SENDMESSAGE));

m.addFloatArg((float)mouseX);

m.addFloatArg((float)mouseY);

sender.sendMessage(m, false);

// looking for incoming messages from wekinator

while (receiver.hasWaitingMessages()) {

ofxOscMessage msg;

receiver.getNextMessage(&msg); // Get Message

if (msg.getAddress() == RECEIVEMESSAGE) {

outputData = msg.getArgAsFloat(0); // Stored it

}

}

serial.writeByte(outputData); // sending the data to arduino

}

//--------------------------------------------------------------

void ofApp::draw(){

ofSetColor(255, 0, 0);

string buf = “Sending message ” + string(SENDMESSAGE) + “ to ” + string(HOST) + “ on port ” + ofToString(SENDPORT);

ofDrawBitmapString(buf, 10, 20);

buf = “X=” + ofToString(mouseX) + “, Y=” + ofToString(mouseY);

ofDrawBitmapString(buf, 10, 50);

ofSetColor(0, 255, 0);

ofDrawRectangle(mouseX, mouseY, boxSize, boxSize);

}

//--------------------------------------------------------------

void ofApp::mouseDragged(int x, int y, int button){

mouseX = x;

mouseY = y;

}

在設(shè)置功能中,我們首先設(shè)置發(fā)送器和接收器,然后查找串口。一旦找到,它將自動(dòng)連接。

在更新功能中,我們首先將滑塊的X和Y值發(fā)送到Wekinator。然后,我們從接收器中查找傳入的消息。當(dāng)任何數(shù)據(jù)可用時(shí),它將存儲(chǔ)它并將其發(fā)送到Arduino。

在繪圖功能中,我們制作了一個(gè)滑塊,當(dāng)我們拖動(dòng)它時(shí)它會(huì)移動(dòng)。

OfApp.h

OfApp.h文件是頭文件。

#pragma once

#include “ofMain.h”

#include “ofxOsc.h”

//Defaults for OSC:

#define HOST “127.0.0.1”

#define SENDPORT 6448

#define RECEIVEPORT 12000

#define SENDMESSAGE “/wek/inputs”

#define RECEIVEMESSAGE “/wek/outputs”

class ofApp : public ofBaseApp{

public:

void setup();

void update();

void draw();

void mouseDragged(int x, int y, int button);

ofxOscSender sender;

ofxOscReceiver receiver;

ofSerial serial;

int mouseX = 0;

int mouseY = 0;

int boxSize = 30;

char outputData;

};

如何運(yùn)行openFrameworks草圖

使用openFrameworks中的項(xiàng)目生成器創(chuàng)建一個(gè)新項(xiàng)目。此項(xiàng)目需要‘Ofxosc’插件。

將上一節(jié)中給出的代碼復(fù)制到相應(yīng)的文件中并構(gòu)建項(xiàng)目。構(gòu)建項(xiàng)目后,您將看到如下所示的輸出窗口。

openFrameworks中的輸出窗口。

在Wekinator中設(shè)置項(xiàng)目

設(shè)置openFrameworks后,打開(kāi)Wekinator并調(diào)整設(shè)置以匹配下圖所示的設(shè)置。

將輸入設(shè)置為2,輸出設(shè)置為1.選擇輸出類型為“custom”,然后單擊“configure”。

在Wekinator中設(shè)置輸入,輸出和類型字段以匹配上面顯示的字段。

接下來(lái),將最小值設(shè)置為0,將最大值設(shè)置為180,然后單擊“完成”。

自定義輸出類型至少為0和a最多180個(gè)。

點(diǎn)擊“下一步”,將出現(xiàn)“新建項(xiàng)目”窗口。

按照上面列出的步驟并單擊下一步后,您將進(jìn)入Wekinator的New Project窗口。

將處理窗口中的綠色框拖動(dòng)到屏幕左側(cè)的中心,然后單擊“隨機(jī)化” ”。開(kāi)始錄制一秒鐘,讓W(xué)ekinator記錄一些樣本。

將綠色框拖到屏幕左側(cè)以記錄您的第一個(gè)輸出。

現(xiàn)在將處理窗口中的綠框拖到窗口中心,然后單擊“隨機(jī)化”。開(kāi)始錄制半秒。

將綠色框移動(dòng)到中心以允許Wekinator記錄更多樣本。

最后,將處理窗口中的綠色框拖動(dòng)到右側(cè)中心,然后單擊隨機(jī)化。開(kāi)始錄制半秒。

將綠色框移動(dòng)到窗口的右側(cè),以允許Wekinator制作第三組樣本。

為Wekinator制作了三組樣本后,點(diǎn)擊“ train”,然后點(diǎn)擊“運(yùn)行”。

現(xiàn)在,當(dāng)您在openFrameworks窗口中拖動(dòng)滑塊時(shí),它將控制并移動(dòng)連接到Arduino的伺服。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    伺服電機(jī)機(jī)器人中的應(yīng)用有哪些

    伺服電機(jī)作為現(xiàn)代工業(yè)自動(dòng)化領(lǐng)域的核心組件,其精確控制和高效性能在機(jī)器人技術(shù)中扮演著至關(guān)重要的角色。 伺服
    的頭像 發(fā)表于 11-20 09:53 ?1364次閱讀

    伺服電機(jī)原理及控制應(yīng)用

    伺服電機(jī)(Servo Motor)是一種高精度、高性能的電動(dòng)機(jī)系統(tǒng),廣泛應(yīng)用于需要精確控制位置、速度和加速度的場(chǎng)合。 一、伺服電機(jī)的工作原理
    的頭像 發(fā)表于 10-22 16:58 ?1715次閱讀

    伺服電機(jī)有什么,伺服電機(jī)可以當(dāng)普通電機(jī)

    一、伺服電機(jī)的作用與特點(diǎn) 伺服電機(jī)(Servo motor),作為伺服系統(tǒng)中的關(guān)鍵組件,扮演著控制
    的頭像 發(fā)表于 10-22 16:16 ?927次閱讀

    伺服電機(jī)控制方式有哪些?舉例分析

    伺服電機(jī)是一種高精度的電機(jī),廣泛應(yīng)用于工業(yè)自動(dòng)化、機(jī)器人、精密機(jī)械等領(lǐng)域。伺服電機(jī)
    的頭像 發(fā)表于 10-22 11:13 ?763次閱讀

    什么是伺服電機(jī)?伺服電機(jī)的工作原理是什么?

    伺服電機(jī)是一種高精度的電機(jī),廣泛應(yīng)用于自動(dòng)化控制、機(jī)器人、精密機(jī)械等領(lǐng)域。它能夠根據(jù)輸入的控制
    的頭像 發(fā)表于 10-22 10:58 ?1267次閱讀

    步進(jìn)電機(jī)伺服控制系統(tǒng)的作用

    步進(jìn)電機(jī)伺服控制系統(tǒng)是一種精密的電機(jī)控制系統(tǒng),它通過(guò)精確控制
    的頭像 發(fā)表于 09-04 09:46 ?910次閱讀

    PLSY指令怎樣控制伺服正反轉(zhuǎn)

    PLSY指令(PLC中的脈沖輸出指令)通常用于控制伺服電機(jī)的正反轉(zhuǎn)和速度。 1. 伺服電機(jī)概述 伺服
    的頭像 發(fā)表于 08-19 14:51 ?2581次閱讀

    伺服電機(jī)轉(zhuǎn)速調(diào)整方法

    引言 伺服電機(jī)是一種將電能轉(zhuǎn)換為機(jī)械能的裝置,具有高精度、高響應(yīng)速度、高穩(wěn)定性等特點(diǎn)。在工業(yè)自動(dòng)化、機(jī)器人、航空航天等領(lǐng)域,伺服電機(jī)被廣泛應(yīng)
    的頭像 發(fā)表于 07-14 10:44 ?1915次閱讀

    伺服電機(jī)也是脈沖控制嗎為什么

    伺服電機(jī)是一種高精度、高響應(yīng)速度的電機(jī),廣泛應(yīng)用于工業(yè)自動(dòng)化、機(jī)器人、航空航天等領(lǐng)域。伺服電機(jī)
    的頭像 發(fā)表于 07-14 10:37 ?1215次閱讀

    伺服電機(jī)矢量控制原理詳解

    伺服電機(jī)矢量控制作為現(xiàn)代電機(jī)控制技術(shù)的重要分支,廣泛應(yīng)用于工業(yè)自動(dòng)化、精密加工、機(jī)器人技術(shù)等領(lǐng)域
    的頭像 發(fā)表于 06-18 17:58 ?1352次閱讀

    plc控制伺服電機(jī)的指令有哪些

    PLC(可編程邏輯控制器)是一種廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域的控制設(shè)備。伺服電機(jī)作為執(zhí)行元件,可以通過(guò)PLC進(jìn)行精確控制。以下是關(guān)于PLC
    的頭像 發(fā)表于 06-12 11:39 ?2990次閱讀

    伺服電機(jī)常用的三種控制模式有哪些

    伺服電機(jī)是一種高精度、高響應(yīng)速度的電機(jī),廣泛應(yīng)用于自動(dòng)化設(shè)備、機(jī)器人、數(shù)控機(jī)床等領(lǐng)域。伺服電機(jī)
    的頭像 發(fā)表于 06-05 15:51 ?6654次閱讀

    伺服電機(jī)最簡(jiǎn)單控制方法是什么

    伺服電機(jī)是一種高精度、高響應(yīng)速度的電機(jī),廣泛應(yīng)用于工業(yè)自動(dòng)化、機(jī)器人、航空航天等領(lǐng)域。伺服電機(jī)
    的頭像 發(fā)表于 06-05 15:49 ?1040次閱讀

    伺服電機(jī)控制器怎么調(diào)參數(shù)

    的基本原理 1. 伺服電機(jī)控制器概述 伺服電機(jī)控制器是一種高精度、高性能的
    的頭像 發(fā)表于 06-05 15:47 ?2599次閱讀

    直流伺服電機(jī)控制方式的基本形式是什么

    引言 直流伺服電機(jī)以其高響應(yīng)速度、高精度、高可靠性等優(yōu)點(diǎn),在工業(yè)自動(dòng)化、機(jī)器人、航空航天等領(lǐng)域得到了廣泛應(yīng)用。直流伺服電機(jī)
    的頭像 發(fā)表于 06-05 14:14 ?1007次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品