iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
1
IoT

IoT沒那麼難!新手用JavaScript入門做自己的玩具~系列 第 24

[Day 23]-用JS控制Arduino吧!三軸一起來,速度與激情!- Johnny Five 之 Accelerometer 三軸加速度計

  • 分享至 

  • xImage
  •  

IoT沒那麼難!新手用 JavaScript 入門做自己的玩具!(iT邦幫忙鐵人賽系列書)

★本系列文章已集結成冊,和系列文不同的是:

  • 本書使用大量的圖解來說明LED系列、多種感測器等原理。
  • 補足系列文程式碼的解說,增加逐行程式碼的詳細解說!
  • 全彩的書籍,用圖解的方式,讓讀者來理解Johnny-Five各種API的功能與效果,讓你不會只讀文字看到想睡覺而學不起來。

歡迎大家做出自己想要的玩具,為了樂趣而學習,讓學習變成你的樂趣!ヽ(・×・´)ゞ
讓Arduino也能用JavaScript創造出屬於自己的作品!

★購書連結-天瓏網路書局:
https://www.tenlong.com.tw/products/9789864345328

《IoT沒那麼難!新手用 JavaScript 入門做自己的玩具!(iT邦幫忙鐵人賽系列書)》
博客來、金石堂、momo、誠品、PChome、讀冊,均有販售喔!─=≡Σ((( つ•̀ω•́)つ
ISBN:9789864345328

Sensor 篇第四彈!今天要介紹的是 (∩▲o▲)⊃━☆゚.*・。

Accelerometer - 三軸加速度計

迷之音:這個我終於知道了!就是陀螺儀嘛!!
本魯:(X)是有點相似~跟陀螺儀還是有點區別的~( ΘωΘ )
迷之音:啊?.........ಠಠ

簡介 - 三軸加速度計 ≠ 陀螺儀

加速度計(Accelerometer)主要是以重力(G力)來感測,也稱為重力感測器(G-Sensor);
透過測量的元件在某個軸向的受力大小、狀況來得到數值,也就是三軸運動的情況,三軸加速度計可以量測X、Y、Z三個方向。

而陀螺儀(Gyroscop),也稱為角速度計、地感器(GYRO-Sensor);
主要結構內部有個陀螺,利用陀螺轉子的運動來量測三維座標的夾角與角速度,三軸陀螺儀可以同時量測前、後、左、右、上、下六個方向。

兩者都屬於微機電系統(Microelectromechanical Systems,簡寫:MEMS),將微電子技術與機械工程融合到一起的一種工業技術
目前的消費性電子產品和行動裝置都能看到MEMS的身影,舉例來說:智慧型手機內的電子羅盤、陀螺儀等⋯

相關連結:

加速規 -
https://zh.wikipedia.org/wiki/%E5%8A%A0%E9%80%9F%E8%A6%8F
加速度計和陀螺儀感測器:原理、檢測與應用 -
https://reurl.cc/qDNKpD
微機電系統 -
https://w.wiki/9d6
加速計/陀螺儀/磁力計是什麼,3軸/6軸/9軸感測器又是什麼? -
https://reurl.cc/QpbVV0
關於加速度計和陀螺儀傾角測量的物理分析 -
https://kknews.cc/zh-tw/education/lnaaxy9.html

工作原理:

剛剛提到加速度計屬於MEMS,它的構成可分成固定電極可移動物體透過可移動物體在固定電極片移動產生電容值差值,進而得物體重心的位移和方向。


畫出來用看圖的方式了解工作原理,希望比較好理解一點~(。>﹏<)a

而本魯的加速度計模組「ADXL345」IC組合而成的~
搖搖模組還會發出「喀啦~喀啦~」的碰撞聲,應該是 IC 裡面的移動物體的碰撞聲。( ⁰⊖⁰)

本魯的加速度計模組「ADXL345

後面還有很多需要理解的東西,話不多說趕快來實作吧!
準備需要的東西有~ヽ(・×・´)ゞ

硬體部分

電路方面

ADXL345 有 I2C 和 SPI 兩種通訊協定可以選擇,三軸加速度的接腳有

  • VCC - Supply voltage range: 2.0 V to 3.6 V 電壓供給
  • GND - 接地
  • CS - Chip Select. 選擇晶片
  • INT1 - Interrupt 1 Output. 中斷輸出 1
  • INT2 - Interrupt 2 Output. 中斷輸出 2
  • SDO - Serial Data Output. 串列資料輸出 (SPI通訊)
  • SDA - Serial Data. 串列資料線
  • SCL - Serial Communications Clock. 串列通訊時脈線

Data Sheet - https://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf

因為 Johnny-Five 的 Accelerometer API ADXL345 使用 I2C通訊,所以我們只要接 SDA 和 SCL 資料線即可。

接線圖

附上電路圖


介紹完後,我們開始來實作吧~
準備需要的東西有~ヽ(・×・´)ゞ

硬體方面

  • Arduino Uno 一片 + USB TypeB 線材一條 (標配標配!
  • 杜邦線 看你用幾條準備幾條
  • 加速度計 一個 這邊使用 ADXL345

軟體方面

Johnny-Five - Accelerometer
http://johnny-five.io/api/accelerometer/

使用寫法 - ADXL345 範例

要使用 Accelerometer 的話,需要呼叫 Johnny-Five 的 Accelerometer 物件,物件參數 controller 指定加速度計型號,這邊使用ADXL345,Value 填寫 'ADXL345' 字串;

接腳連接

把 ADXL345 的 SDA、SCL 接腳連接到 Arduino 的 I2C 接腳 A4、A5。

SDA → A4
SCL → A5

API

Johnny-Five - Accelerometer API
http://johnny-five.io/api/accelerometer/#api

  • hasAxis(軸)
    偵測Sensor是否支援 X / Y / Z 軸。

寫法:

// 檢測 Sensor 是否有支援 Z 軸
if (accelerometer.hasAxis("z")) {
  console.log(accelerometer.z)
}
  • enable()
    啟動 Device 偵測和 Events 事件,如果 Device 支援休眠狀態,呼叫 enable() 會將其喚醒。

  • disable()
    停用 Device 偵測和 Events 事件,如果 Device 支援休眠狀態,呼叫 disable() 會將其進入休眠狀態。

Events

Johnny-Five - Accelerometer Events
http://johnny-five.io/api/accelerometer/#events

Events 也是 changedata 事件和之前介紹的一樣,就不贅述了~

實作 -

var five = require('johnny-five');
var board = new five.Board();

board.on('ready', function() {
  var accelerometer = new five.Accelerometer({
    controller: 'ADXL345',
  });

  accelerometer.on('change', () => {
    const { acceleration, inclination, orientation, pitch, roll, x, y, z } = accelerometer;
    console.log('Accelerometer:');
    console.log('  x            : ', x);
    console.log('  y            : ', y);
    console.log('  z            : ', z);
    console.log('  pitch        : ', pitch);
    console.log('  roll         : ', roll);
    console.log('  acceleration : ', acceleration);
    console.log('  inclination  : ', inclination);
    console.log('  orientation  : ', orientation);
    console.log('--------------------------------------');
  });
});

Johnny-Five 的 accelerometer 物件返回參數很多,
其中又是什麼意思呢?
明天我準備了超多圖文,讓我們繼續了解下去....

PS:今天其實有DEMO,但來不及處理動圖...只好明天繼續啦....Sorry

文後

全部純手工製作..... _(´ཀ´」 ∠)_


本系列的程式碼皆會上傳到 GitHub 上開源

2019ironman-JS-IoT :
https://github.com/tinatyc/2019ironman-JS-IoT

喜歡按個星星吧~乾蝦乾蝦<(_ _)>


團隊系列文:

CSScoke - 金魚都能懂的這個網頁畫面怎麼切 - 金魚都能懂了你還怕學不會嗎
Hina Hina - 陣列大亂鬥
阿斬 - Python 程式交易 30 天新手入門
Clarence - LINE bot 好好玩 30 天玩轉 LINE API
塔塔默 - 用Python開發的網頁不能放到Github上?Lektor說可以!!
Vita Ora - 好 Js 不學嗎 !? JavaScript 入門中的入門。


同步連載於blogger-King 學習前端之人生


上一篇
[Day 22]-用JS控制Arduino吧!偵測老闆的一個Move~薪水小偷必備 - Johnny Five 之 Motion 動作感測器 - 實務應用(?)篇
下一篇
[Day 24]-用JS控制Arduino吧!不動看不懂!最狂的加速度解說! - Johnny Five 之 Accelerometer 三軸加速度計 - 實作篇
系列文
IoT沒那麼難!新手用JavaScript入門做自己的玩具~33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言