chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

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

怎樣用Arduino和Wekinator創(chuàng)建傳感器控制接口

454398 ? 來源:工程師吳畏 ? 2019-08-02 17:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

輸入指令

在這個項目的輸入方面,我們需要將MPU6050傳感器Arduino UNO連接。

參考下圖,獲取有關(guān)如何將傳感器連接到Arduino的幫助。

怎樣用Arduino和Wekinator創(chuàng)建傳感器控制接口

詳細(xì)說明了MPU6050傳感器與Arduino UNO之間的連接。

安裝Arduino庫

首先,從GitHub下載I2C和MPU6050庫,以便與Arduino接口。

解壓縮或解壓縮下載文件后,導(dǎo)航到Arduino文件夾,復(fù)制I2C和MPU6050文件夾并將它們放在Arduino IDE庫文件夾中。

Arduino IDE庫文件夾中I2C和MPU6050文件夾的位置。

上傳代碼流程

撒哈拉title title

啟動Arduino IDE。

查找MPU6050文件夾下的示例文件。

打開MPU6050_DMP6文件。

示例下的MPU6050_DMP6文件的位置和MPU6050文件夾。

現(xiàn)在,上傳Arduino IDE代碼并顯示串口監(jiān)視器。

如果顯示輸出,那么這表示你‘已成功將傳感器與Arduino連接。

輸出數(shù)據(jù)顯示在Arduino中。

要將數(shù)據(jù)發(fā)送到Processing,需要對代碼進行一些更改。

首先取消注釋117代碼行并注釋100代碼行。

上傳代碼再次和它笑uld在串口監(jiān)視器中顯示為不可讀的字符。

處理代碼說明

為了從Arduino接收數(shù)據(jù)并移動3D模型,需要從bitbucket下載’toxiclibs‘庫.org。

復(fù)制zip文件中的所有文件夾并將其粘貼到Processing library文件夾中。

Processing library文件夾可以可在以下位置找到:處理文件夾》模式》 Java》庫。

現(xiàn)在,將下面的代碼粘貼到Processing然后上傳。

代碼是MPU6050庫中包含的示例的修改版本。

import processing.serial.*;

import processing.opengl.*;

import toxi.geom.*;

import toxi.processing.*;

import oscP5.*;

import netP5.*;

OscP5 oscP5;

NetAddress dest;

ToxiclibsSupport gfx;

Serial port; // The serial port

char[] teapotPacket = new char[14]; // InvenSense Teapot packet

int serialCount = 0; // current packet byte position

int synced = 0;

int interval = 0;

float[] q = new float[4];

Quaternion quat = new Quaternion(1, 0, 0, 0);

float[] gravity = new float[3];

float[] euler = new float[3];

float[] ypr = new float[3];

void setup() {

// 300px square viewport using OpenGL rendering

size(300, 300, OPENGL);

gfx = new ToxiclibsSupport(this);

// setup lights and antialiasing

lights();

smooth();

// display serial port list for debugging/clarity

println(Serial.list());

// get the first available port (use EITHER this OR the specific port code below)

String portName = Serial.list()[0];

// get a specific serial port (use EITHER this OR the first-available code above)

//String portName = “COM4”;

// open the serial port

port = new Serial(this, portName, 115200);

// send single character to trigger DMP init/start

// (expected by MPU6050_DMP6 example Arduino sketch)

port.write(’r‘);

/* start oscP5, sending messages at port 9000 */

oscP5 = new OscP5(this,9000);

dest = new NetAddress(“127.0.0.1”,6448);

}

void draw() {

if (millis() - interval 》 1000) {

// resend single character to trigger DMP init/start

// in case the MPU is halted/reset while applet is running

port.write(’r‘);

interval = millis();

}

// black background

background(0);

// translate everything to the middle of the viewport

pushMatrix();

translate(width / 2, height / 2);

// 3-step rotation from yaw/pitch/roll angles (gimbal lock?。?/p>

// 。..and other weirdness I haven’t figured out yet

//rotateY(-ypr[0]);

//rotateZ(-ypr[1]);

//rotateX(-ypr[2]);

// toxiclibs direct angle/axis rotation from quaternion (NO gimbal lock?。?/p>

// (axis order [1, 3, 2] and inversion [-1, +1, +1] is a consequence of

// different coordinate system orientation assumptions between Processing

// and InvenSense DMP)

float[] axis = quat.toAxisAngle();

rotate(axis[0], -axis[1], axis[3], axis[2]);

// draw main body in red

fill(255, 0, 0, 200);

box(10, 10, 200);

// draw front-facing tip in blue

fill(0, 0, 255, 200);

pushMatrix();

translate(0, 0, -120);

rotateX(PI/2);

drawCylinder(0, 20, 20, 8);

popMatrix();

// draw wings and tail fin in green

fill(0, 255, 0, 200);

beginShape(TRIANGLES);

vertex(-100, 2, 30); vertex(0, 2, -80); vertex(100, 2, 30); // wing top layer

vertex(-100, -2, 30); vertex(0, -2, -80); vertex(100, -2, 30); // wing bottom layer

vertex(-2, 0, 98); vertex(-2, -30, 98); vertex(-2, 0, 70); // tail left layer

vertex( 2, 0, 98); vertex( 2, -30, 98); vertex( 2, 0, 70); // tail right layer

endShape();

beginShape(QUADS);

vertex(-100, 2, 30); vertex(-100, -2, 30); vertex( 0, -2, -80); vertex( 0, 2, -80);

vertex( 100, 2, 30); vertex( 100, -2, 30); vertex( 0, -2, -80); vertex( 0, 2, -80);

vertex(-100, 2, 30); vertex(-100, -2, 30); vertex(100, -2, 30); vertex(100, 2, 30);

vertex(-2, 0, 98); vertex(2, 0, 98); vertex(2, -30, 98); vertex(-2, -30, 98);

vertex(-2, 0, 98); vertex(2, 0, 98); vertex(2, 0, 70); vertex(-2, 0, 70);

vertex(-2, -30, 98); vertex(2, -30, 98); vertex(2, 0, 70); vertex(-2, 0, 70);

endShape();

popMatrix();

//Send the OSC message

sendOsc();

}

void serialEvent(Serial port) {

interval = millis();

while (port.available() 》 0) {

int ch = port.read();

if (synced == 0 && ch != ‘$’) return; // initial synchronization - also used to resync/realign if needed

synced = 1;

print ((char)ch);

if ((serialCount == 1 && ch != 2)

|| (serialCount == 12 && ch != ‘ ’)

|| (serialCount == 13 && ch != ‘ ’)) {

serialCount = 0;

synced = 0;

return;

}

if (serialCount 》 0 || ch == ‘$’) {

teapotPacket[serialCount++] = (char)ch;

if (serialCount == 14) {

serialCount = 0; // restart packet byte position

// get quaternion from data packet

q[0] = ((teapotPacket[2] 《《 8) | teapotPacket[3]) / 16384.0f;

q[1] = ((teapotPacket[4] 《《 8) | teapotPacket[5]) / 16384.0f;

q[2] = ((teapotPacket[6] 《《 8) | teapotPacket[7]) / 16384.0f;

q[3] = ((teapotPacket[8] 《《 8) | teapotPacket[9]) / 16384.0f;

for (int i = 0; i 《 4; i++) if (q[i] 》= 2) q[i] = -4 + q[i];

// set our toxilibs quaternion to new data

quat.set(q[0], q[1], q[2], q[3]);

// below calculations unnecessary for orientation only using toxilibs

// calculate gravity vector

gravity[0] = 2 * (q[1]*q[3] - q[0]*q[2]);

gravity[1] = 2 * (q[0]*q[1] + q[2]*q[3]);

gravity[2] = q[0]*q[0] - q[1]*q[1] - q[2]*q[2] + q[3]*q[3];

// calculate Euler angles

euler[0] = atan2(2*q[1]*q[2] - 2*q[0]*q[3], 2*q[0]*q[0] + 2*q[1]*q[1] - 1);

euler[1] = -asin(2*q[1]*q[3] + 2*q[0]*q[2]);

euler[2] = atan2(2*q[2]*q[3] - 2*q[0]*q[1], 2*q[0]*q[0] + 2*q[3]*q[3] - 1);

// calculate yaw/pitch/roll angles

ypr[0] = atan2(2*q[1]*q[2] - 2*q[0]*q[3], 2*q[0]*q[0] + 2*q[1]*q[1] - 1);

ypr[1] = atan(gravity[0] / sqrt(gravity[1]*gravity[1] + gravity[2]*gravity[2]));

ypr[2] = atan(gravity[1] / sqrt(gravity[0]*gravity[0] + gravity[2]*gravity[2]));

// output various components for debugging

//println(“q: ” + round(q[0]*100.0f)/100.0f + “ ” + round(q[1]*100.0f)/100.0f + “ ” + round(q[2]*100.0f)/100.0f + “ ” + round(q[3]*100.0f)/100.0f);

//println(“euler: ” + euler[0]*180.0f/PI + “ ” + euler[1]*180.0f/PI + “ ” + euler[2]*180.0f/PI);

println(“ypr: ” + ypr[0]*180.0f/PI + “ ” + ypr[1]*180.0f/PI + “ ” + ypr[2]*180.0f/PI);

}

}

}

}

void drawCylinder(float topRadius, float bottomRadius, float tall, int sides) {

float angle = 0;

float angleIncrement = TWO_PI / sides;

beginShape(QUAD_STRIP);

for (int i = 0; i 《 sides + 1; ++i) {

vertex(topRadius*cos(angle), 0, topRadius*sin(angle));

vertex(bottomRadius*cos(angle), tall, bottomRadius*sin(angle));

angle += angleIncrement;

}

endShape();

// If it is not a cone, draw the circular top cap

if (topRadius != 0) {

angle = 0;

beginShape(TRIANGLE_FAN);

// Center point

vertex(0, 0, 0);

for (int i = 0; i 《 sides + 1; i++) {

vertex(topRadius * cos(angle), 0, topRadius * sin(angle));

angle += angleIncrement;

}

endShape();

}

// If it is not a cone, draw the circular bottom cap

if (bottomRadius != 0) {

angle = 0;

beginShape(TRIANGLE_FAN);

// Center point

vertex(0, tall, 0);

for (int i = 0; i 《 sides + 1; i++) {

vertex(bottomRadius * cos(angle), tall, bottomRadius * sin(angle));

angle += angleIncrement;

}

endShape();

}

}

void sendOsc() {

OscMessage msg = new OscMessage(“/wek/inputs”);

msg.add((float)ypr[2]); // x-axis

msg.add((float)ypr[1]); // y -axis

oscP5.send(msg, dest);

}

上傳后代碼,窗口應(yīng)該如下所示。

輸出代碼指令

就輸出過程而言,一個簡單的界面將被設(shè)置為從Wekinator接收一個DTW輸出。

在界面內(nèi),一個方框根據(jù)收到的Wekinator輸入向左或向右移動。

你可以找到并下載加工草圖在Wekinator網(wǎng)站上。

下載‘Simple DTW-controlled-game’文件并在Processing中運行后,它應(yīng)該如下例所示。

Wekinator說明

啟動Wekinator軟件并按照以下步驟操作:

設(shè)置輸入值為2.

將輸出值設(shè)置為1.

將輸出類型保留為默認(rèn)設(shè)置“所有動態(tài)時間扭曲”并指定3種手勢類型。

‘創(chuàng)建新項目’窗口,顯示W(wǎng)ekinator中的輸入,輸出和手勢類型字段。

單擊“下一步”,彈出“新建項目”窗口。

‘新項目’窗口,在Wekinator中包含輸出行字段。

然后,單擊輸出1行上的“加號”按鈕并向左傾斜傳感器。輸出將沿該方向移動框。

‘新項目’窗口,帶有添加/刪除按鈕。

現(xiàn)在,單擊輸出2行上的“加號”按鈕,然后向右傾斜傳感器。輸出將相應(yīng)地移動框。

‘New Project’窗口,在Wekinator中用輸出2行中的添加/刪除按鈕。

最后,單擊輸出3行中的加號按鈕并向后傾斜傳感器。輸出將導(dǎo)致框跳轉(zhuǎn)。

‘New Project’窗口,帶有在Wekinator中圈出的添加/刪除按鈕。

‘新建項目’窗口,輸出3行中的添加/刪除按鈕被圈起來。

錄制完成后,根據(jù)樣本訓(xùn)練Wekinator并運行程序。

然后方框會響應(yīng)傳感器傾斜的方向移動

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

    關(guān)注

    2573

    文章

    54315

    瀏覽量

    785374
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6514

    瀏覽量

    195852
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    ?基于TE Connectivity LUMAWISE運動傳感器的智能照明控制技術(shù)解析

    。LUMAWISE傳感器適合用于Zhaga-D4i生態(tài)系統(tǒng),可用作獨立控制器件,也可與Zhaga-D4i光電管或通信節(jié)點搭配使用,以提高控制水平。該傳感器是一款可插拔器件,設(shè)有標(biāo)準(zhǔn)Zh
    的頭像 發(fā)表于 11-07 17:03 ?522次閱讀
    ?基于TE Connectivity LUMAWISE運動<b class='flag-5'>傳感器</b>的智能照明<b class='flag-5'>控制</b>技術(shù)解析

    STMicroelectronics AIS25BA MEMS運動傳感器深度解析與應(yīng)用指南

    汽車非安全應(yīng)用的需求,例如寬帶有源噪聲控制 (ANC) 和振動監(jiān)測。AIS25BA具有用戶可選的±3.85g至±7.7g滿量程范圍、傳感器數(shù)據(jù)TDM接口以及器件配置
    的頭像 發(fā)表于 10-29 10:17 ?253次閱讀
    STMicroelectronics AIS25BA MEMS運動<b class='flag-5'>傳感器</b>深度解析與應(yīng)用指南

    溫度傳感器一般走哪些協(xié)議和接口

    溫度傳感器常用的通信協(xié)議和接口可根據(jù)應(yīng)用場景(如工業(yè)控制、智能家居、物聯(lián)網(wǎng)等)和傳輸需求(距離、速度、功耗等)分為有線和無線兩大類,具體協(xié)議和接口的選擇需結(jié)合
    的頭像 發(fā)表于 09-23 17:22 ?886次閱讀

    怎樣正確使用霍爾傳感器

    霍爾電流傳感器憑借著自身的優(yōu)勢,成為最主要、應(yīng)用最廣的電流測量手段之一 銀河
    的頭像 發(fā)表于 09-08 13:26 ?709次閱讀
    <b class='flag-5'>怎樣</b>正確使用霍爾<b class='flag-5'>傳感器</b>

    #紅外傳感器有哪幾種?怎么?怎樣才能選對?

    傳感器
    iczoom
    發(fā)布于 :2025年09月02日 10:52:41

    什么是照度傳感器和接近傳感器

    近年來,照度傳感器和接近傳感器在我們身邊各類設(shè)備中的應(yīng)用越來越廣泛。除了單獨使用照度傳感器和接近傳感器外,將這些傳感器組合使用的情況也在不斷
    的頭像 發(fā)表于 08-22 14:46 ?2460次閱讀
    什么是照度<b class='flag-5'>傳感器</b>和接近<b class='flag-5'>傳感器</b>

    使用位置傳感器進行無刷電機控制

    刷直流電機或場定向控制 (FOC) 無刷交流電機,確實可以實現(xiàn)無需任何旋轉(zhuǎn)角度傳感器即可工作。但實際情況是,工業(yè)和人形機器人、自主移動機器人和直線電機運輸系統(tǒng)等終端設(shè)備,旋轉(zhuǎn)角度傳感器或線性位置
    的頭像 發(fā)表于 08-07 14:25 ?5464次閱讀
    使用位置<b class='flag-5'>傳感器</b>進行無刷電機<b class='flag-5'>控制</b>

    傳感器有哪些類型?有哪些接口?

    傳感器的類型和接口種類繁多,以下是一些常見的分類和接口方式: 傳感器類型 溫度傳感器:用于測量溫度,常見的有熱電偶、熱電阻、數(shù)字溫度
    的頭像 發(fā)表于 05-22 09:33 ?1.1w次閱讀

    示波器測量傳感器的放大電路及供電

    傳感器放大電路的測量傳感器信號一般都比較小,示波器直接測量可能難以檢測,但傳感器的主板上面都有信號放大部分,找到這個放大器的輸出端,示波器就可以測量這個被放大后的信號。
    的頭像 發(fā)表于 05-19 13:24 ?597次閱讀
    <b class='flag-5'>用</b>示波器測量<b class='flag-5'>傳感器</b>的放大電路及供電

    ADUCM356集成化學(xué)傳感器接口的精密模擬微控制器技術(shù)手冊

    ADuCM356是一款片內(nèi)系統(tǒng),可控制和測量電化學(xué)傳感器和生物傳感器。ADuCM356是一款基于Arm^?^ Cortex ^?^ -M3處理的超低功耗混合信號微
    的頭像 發(fā)表于 05-08 09:55 ?733次閱讀
    ADUCM356集成化學(xué)<b class='flag-5'>傳感器</b><b class='flag-5'>接口</b>的精密模擬微<b class='flag-5'>控制器</b>技術(shù)手冊

    風(fēng)壓傳感器怎樣在風(fēng)管安裝

    風(fēng)壓傳感器作為風(fēng)管系統(tǒng)監(jiān)測與控制的關(guān)鍵組件,其正確安裝對于確保系統(tǒng)性能、提高能源效率及保障室內(nèi)空氣質(zhì)量至關(guān)重要。本文旨在深入探討風(fēng)壓傳感器在風(fēng)管系統(tǒng)中的安裝步驟、注意事項及最佳實踐,為工程師和技術(shù)人員提供一套全面、高效的安裝指南
    的頭像 發(fā)表于 01-30 15:39 ?1881次閱讀

    干簧管傳感器屬于什么傳感器

    干簧管傳感器,又稱磁簧開關(guān)傳感器或磁敏開關(guān),是一種基于干簧管(Reed Switch)原理工作的傳感器。作為一種重要的磁傳感器,干簧管傳感器
    的頭像 發(fā)表于 01-30 15:33 ?2312次閱讀

    多通道傳感器接入集中控制頻率溫度 傳感器集線器帶來更多方便

    多通道傳感器接入集中控制頻率溫度 傳感器集線器帶來更多方便 現(xiàn)場傳感器太多,編號容易混亂?傳感器集線器可以將多路
    的頭像 發(fā)表于 01-08 11:18 ?603次閱讀
    多通道<b class='flag-5'>傳感器</b>接入集中<b class='flag-5'>控制</b>頻率溫度 <b class='flag-5'>傳感器</b>集線器帶來更多方便

    電位傳感器的工作原理

    在電子電路中,精確控制電壓和電阻是至關(guān)重要的。電位傳感器(電位計)是一種簡單而有效的解決方案,它允許用戶通過物理方式調(diào)整電壓或電阻。這種傳感器廣泛應(yīng)用于音頻設(shè)備、可調(diào)電源、傳感器
    的頭像 發(fā)表于 12-28 14:06 ?2121次閱讀

    光電傳感器故障排查技巧 光電傳感器與機器視覺的結(jié)合

    、氧化、接觸不良或變形等情況。 斷開傳感器導(dǎo)線插接并檢測 : 根據(jù)傳感器類型(單導(dǎo)線、雙導(dǎo)線或三導(dǎo)線),使用萬表測量導(dǎo)線與搭鐵之間的電壓、電阻值。 測量信號端子電壓是否隨工況變化而
    的頭像 發(fā)表于 12-17 16:52 ?2480次閱讀