Processing 互動教學 : LinkIt7697 結合三軸加速度計

作者/攝影 許鈺莨
時間

0.5小時

難度

★☆☆☆☆

材料表 ADXL345………………. 一片

LinkIt7697……………… 一片

 

 

Processing最大的優勢是在於這是可以透過程式碼產生平面或者立體的圖形化互動介面,最常拿來設計成體感遊戲,而本文會使用LinkIt7697來擷取ADXL345 三軸加速度計的角度變化數值,最後透過Processing使讀者可以感受到由數值轉換成3D的視覺化效果。

ADXL345 三軸加速度計(以下簡稱ADXL345)可以透過重力加速度用來偵測物體的傾斜角度,本文結合LinkIt7697,並將其數值擷取出來,本文將分成三個步驟說明:

1、ADXL345 與LinkIt7697接線圖

2、LinkIt7697程式說明

3、Processing程式說明

 

 

1、ADXL345與LinkIt7697接線圖

ADXL345 和 LinkIt7697溝通為I²C,需接四條線至LinkIt7697 NANO擴充板,接線圖如下:

ADXL345    LinkIt7697 NANO擴充板
SDA SDA
SCL SCL
VCC 5V
GND G

 

2、LinkIt7697程式說明

LinkIt7697的程式是透過BlocklyDuino 撰寫,需要下載BlocklyDuino,而使用BlocklyDuino是因為可以快速利用積木拼出程式碼,而BlocklyDuino裡面已含有ADXL345 的函示庫,所以可直接拼出ADXL345的積木進而讀取數值。

ADXL345積木可以從左方欄位的【感測模組】→【動態感測】可以找到。

#include <Wire.h>
#include <adxl345_blockly.h>

ADXL345Block adxl345;

void setup()
{
  adxl345.begin();
  Serial.begin(9600);
}

void loop()
{
  Serial.print(adxl345.getRoll());  //顯示ADXL345的俯仰角度
  Serial.print("/");
  Serial.println(adxl345.getPitch()); //顯示ADXL345的翻滾角度
}

從程式中可以可以看出BlocklyDuino已經把ADXL345的函式庫包在積木裡面,所以可以從積木中直接找出我們需要的『翻滾』和『俯仰』角度,而LinkIt7697跟Processing溝通則是靠序列埠傳輸。

 

3、Processing程式說明

再來是Processing程式撰寫,程式是引用至下列網站修改-連結

import processing.serial.*;
Serial myPort;

String data="";
float roll, pitch;

void setup() {
  size (960, 640, P3D); //執行的視窗大小,及顯示3D圖示

  myPort = new Serial(this, "COM3", 9600);  //由序列埠COM3溝通

  myPort.bufferUntil('\n');
}

void draw() {
  translate(width/2, height/2, 0); //畫面位置置中,和縮放比例
  background(150); //背景顏色
  textSize(22); //背景文字的大小
  text("Roll: " + int(roll) + "     Pitch: " + int(pitch), -100, 265);  //背景文字的位置

 
  rotateX(radians(pitch)); // 計算ADXL345的俯仰角度
  rotateZ(radians(-roll));  // 計算ADXL345的翻滾角度
  
  fill(roll+pitch, roll*50, pitch*200); //設定3D 物件顏色,隨著翻轉而有不同的顏色變化
  box (400, 40, 200);   // 設定3D 物件的尺寸
  textSize(25); //3D 物件字的大小
  fill(255, 255, 255); //3D 物件字的顏色
  text("blog.cavedu.com", -110, 10, 101); //要在3D 物件上要顯示的文字,以及位置
}

void serialEvent (Serial myPort) {  // 從序列埠讀取數據

  data = myPort.readStringUntil('\n');

  if (data != null) {
    data = trim(data);
  
    String items[] = split(data, '/');   // 利用"/" 來分隔data,得到兩種數值,再放入items字串中  
    if (items.length > 1) {

    // 得到滾動和俯仰角度
      roll = float(items[0]);
      pitch = float(items[1]);
    }
  }
}

最後執行,將手晃動ADXL345,3D物件會依照傾斜角度不同,在3D物件中也會隨著翻轉產生不同的顏色變化。

 

  • 【教學】Processing互動專題:結合 LinkIt 7697

https://blog.cavedu.com/2020/04/01/processing-linkit-7697/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。