在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認識你,還能領(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)建傳感器控制接口

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

安裝Arduino庫

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

解壓縮或解壓縮下載文件后,導航到Arduino文件夾,復制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。

復制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!)

// 。..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!)

// (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);

}

上傳后代碼,窗口應該如下所示。

輸出代碼指令

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

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

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

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

Wekinator說明

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

設置輸入值為2.

將輸出值設置為1.

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

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

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

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

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

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

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

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

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

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

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

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

然后方框會響應傳感器傾斜的方向移動

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

    關(guān)注

    2564

    文章

    52706

    瀏覽量

    764635
  • Arduino
    +關(guān)注

    關(guān)注

    189

    文章

    6494

    瀏覽量

    190295
收藏 人收藏

    評論

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

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

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

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

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

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

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

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

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

    工業(yè)傳感器的應用領(lǐng)域 無線傳感器網(wǎng)絡的優(yōu)勢與挑戰(zhàn)

    工業(yè)傳感器的應用領(lǐng)域 1. 制造業(yè) 在制造業(yè)中,傳感器用于監(jiān)控生產(chǎn)線上的機器性能,包括溫度、壓力、濕度和振動等參數(shù),以確保產(chǎn)品質(zhì)量和生產(chǎn)效率。 2. 能源行業(yè) 傳感器在能源行業(yè)中用于
    的頭像 發(fā)表于 11-19 15:20 ?1054次閱讀

    PLC控制系統(tǒng)中的傳感器選型

    在現(xiàn)代工業(yè)自動化領(lǐng)域,PLC控制系統(tǒng)因其靈活性、可靠性和易于編程而廣受歡迎。傳感器作為PLC控制系統(tǒng)的“眼睛”和“耳朵”,其選型對于整個系統(tǒng)的效能至關(guān)重要。 1. 傳感器類型與應用場景
    的頭像 發(fā)表于 11-08 09:53 ?2275次閱讀

    電子控制裝置的主要傳感器有哪些?

    電子控制裝置在現(xiàn)代汽車、工業(yè)設備、醫(yī)療設備等領(lǐng)域中扮演著至關(guān)重要的角色。這些裝置依賴于各種傳感器來收集數(shù)據(jù),以便進行精確的控制和監(jiān)測。傳感器是將物理量(如溫度、壓力、速度等)轉(zhuǎn)換為電信
    的頭像 發(fā)表于 09-24 16:56 ?710次閱讀

    怎么區(qū)分PNP傳感器和NPN傳感器

    PNP傳感器和NPN傳感器在工業(yè)自動化、電子控制等領(lǐng)域中扮演著重要角色,它們的主要區(qū)別在于電流方向、電壓輸出以及在電路中的接線方式。以下將從多個方面詳細闡述如何區(qū)分PNP傳感器和NPN
    的頭像 發(fā)表于 09-13 17:39 ?8552次閱讀

    車載傳感器主要有哪些傳感器

    主要的車載傳感器類型及描述: 速度傳感器 : 作用 :測量車輛的行駛速度。 類型 :包括車輪速度傳感器、GPS速度傳感器等。 應用 :用于ABS系統(tǒng)、巡航
    的頭像 發(fā)表于 09-07 09:30 ?1298次閱讀

    怎樣用THS3201實現(xiàn)輸出功率可調(diào)?

    怎樣用THS3201實現(xiàn)輸出功率可調(diào)?
    發(fā)表于 08-26 08:28

    怎樣用Arduino測試鋰電池容量

    本文詳細介紹了如何用Arduino測量鋰電池的容量。并附有電路圖和Arduino的程序代碼。
    的頭像 發(fā)表于 07-30 09:14 ?1567次閱讀
    <b class='flag-5'>怎樣用</b><b class='flag-5'>Arduino</b>測試鋰電池容量

    安徽宿州:年產(chǎn)車傳感器50多萬支,精度全球第一

    、工業(yè)控制等領(lǐng)域。公司擁有國內(nèi)領(lǐng)先的精加工設備和精密檢測儀器,年產(chǎn)車傳感器50多萬支,年產(chǎn)值約6000萬元。 “傳感器,聽起來很陌生,但又無處不在。智能照明、智能家電、智能家具、安防
    的頭像 發(fā)表于 07-25 08:45 ?591次閱讀

    基于Arduino的紫外線傳感器設計 紫外線傳感器的工作原理和分類

    安全控制等多個領(lǐng)域。本文將詳細探討紫外線傳感器的定義、工作原理及其多種分類,以期為讀者提供全面深入的理解。
    的頭像 發(fā)表于 07-08 17:53 ?3056次閱讀
    基于<b class='flag-5'>Arduino</b>的紫外線<b class='flag-5'>傳感器</b>設計 紫外線<b class='flag-5'>傳感器</b>的工作原理和分類

    基于Arduino的數(shù)字電容式觸摸傳感器設計

    數(shù)字電容式觸摸傳感器,簡稱電容式觸摸傳感器,是一種通過檢測物體(如手指)與傳感器表面之間電容變化來實現(xiàn)觸摸檢測的傳感器。它利用人體或其他導電物體接近或接觸
    的頭像 發(fā)表于 07-05 17:47 ?2694次閱讀
    基于<b class='flag-5'>Arduino</b>的數(shù)字電容式觸摸<b class='flag-5'>傳感器</b>設計

    基于PIR傳感器的電路圖 帶Arduino的PIR傳感器設計

    防、智能家居、自動化控制等多個領(lǐng)域。以下將詳細闡述PIR傳感器的定義、工作原理、結(jié)構(gòu)、應用以及未來發(fā)展趨勢。
    的頭像 發(fā)表于 07-03 18:02 ?4367次閱讀
    基于PIR<b class='flag-5'>傳感器</b>的電路圖 帶<b class='flag-5'>Arduino</b>的PIR<b class='flag-5'>傳感器</b>設計
    主站蜘蛛池模板: 手机看片1024精品日韩 | 中文字幕在线观看一区 | 天天爽夜夜爽免费看 | 新网球王子u17世界杯篇免费观看 | 国模福利 | 色综合视频在线 | 欧美色视频日本片高清在线观看 | 国产黄在线观看 | 亚洲已满18点击进入在线观看 | 夜夜春夜夜爽 | 高清不卡毛片免费观看 | 亚洲国产成人在人网站天堂 | 爽好舒服老师快点 | 久久婷五月 | 六月丁香激情 | 99久久久精品 | 天天操精品视频 | 人人澡人人人人夜夜爽 | 精品一区二区三区免费爱 | 欧美精品久久久久久久小说 | a久久 | 免费看美女禁处爆涌视频 | 日韩在线免费看网站 | 免费看国产精品久久久久 | 77788色淫免费网站视频 | 1024国产手机视频基地 | 免费色片网站 | 人成网站在线观看 | 天天综合天天看夜夜添狠狠玩 | 啪啪91视频 | 午夜国产在线观看 | 俺也射 | www四虎 | 亚洲四虎| 成人五级毛片免费播放 | 亚洲日本欧美 | 91极品反差婊在线观看 | 国产亚洲卡二卡3卡4卡乱码 | 免费精品美女久久久久久久久 | 久久久免费精品视频 | 日韩毛片免费 |