Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Arduino + Max8 (4) ToF距離センサを使ってみる

More than 1 year has passed since last update.

ここまでのおさらい

前回は、jitterによる様々な映像加工について学習しました
(4)と(5)ではさらに2つの新しいセンサを使っていきます

  • ToF距離センサ

推奨測定距離は30mm - 1000mm(最大2mまで)、1mm単位で測定できる対象物の反射率に関わらず正確な測距が可能

  • 3軸加速度センサ(±1.5g)

X, Y, Z軸にかかる加速度を検出する
"g"は重力を基準とした加速度の大きさを表す単位で、重力と同じ大きさの力が加わる状況のことを"1g"ということがある。

この記事ではToF距離センサの使用法について説明します

ToF距離センサを使う

ハードウェアの準備

img

  1. センサ(上の写真のもの)にコードを繋いで、Seeeduinoの「I2C」のポートに接続
  2. SeeeduinoをPCに接続

ソフトウェアの準備

  1. センサを使用するためのライブラリを下記URLからダウンロード

緑色のアイコンClone or Downloadを選択→Download ZIPを選択

  1. Arduino IDEを起動してスケッチライブラリをインクルード.ZIP形式のライブラリをインストールを順に選択し、先ほどダウンロードしたzipフォルダを選択
  2. 下部ウインドウに「ライブラリが追加されました」と表示されたらライブラリのインストールは完了

サンプルプログラムを試す

  1. ファイルスケッチ例Grove _Ranging_sensor_vl5310xcontinuous_rangingを選択してスケッチを開く

  2. をクリックしてスケッチを書き込む

  3. シリアルモニタをクリックして値を確認する

※このとき、通信レートを「115200bps」に変更する

  1. スケッチ上のdelay(100)の値を「10」に変更し、より早く値を取得できるように変更する

  2. 再びをクリックしてスケッチを書き込み、シリアルモニタをクリックして値を確認

値をMax8で読めるようにスケッチを改変

//continuous_ranging_2max
//シリアル通信でToFセンサの値を送信するスケッチforMax8

#include "Seeed_vl53l0x.h"
Seeed_vl53l0x VL53L0X;

#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
  #define SERIAL SerialUSB
#else
  #define SERIAL Serial
#endif



void setup()
{ 
    VL53L0X_Error Status = VL53L0X_ERROR_NONE;
    SERIAL.begin(9600);
    Status=VL53L0X.VL53L0X_common_init();
    if(VL53L0X_ERROR_NONE!=Status)
    {
        SERIAL.println("start vl53l0x mesurement failed!");
        VL53L0X.print_pal_error(Status);
        while(1);
    }
    VL53L0X.VL53L0X_continuous_ranging_init();
    if(VL53L0X_ERROR_NONE!=Status)
    {
        SERIAL.println("start vl53l0x mesurement failed!");
        VL53L0X.print_pal_error(Status);
        while(1);
    }
}


void loop()
{
    VL53L0X_RangingMeasurementData_t RangingMeasurementData;
    VL53L0X.PerformContinuousRangingMeasurement(&RangingMeasurementData);
    if(RangingMeasurementData.RangeMilliMeter>=2000) //2000ミリ以上距離がある時
    {
    Serial.print(200);
    Serial.println();
        //SERIAL.println("out of ranger"); //何も出力しない
    }
    else
    {
        //SERIAL.print("distance::");
        //SERIAL.println(RangingMeasurementData.RangeMilliMeter);
    Serial.print(RangingMeasurementData.RangeMilliMeter/10); //単位をcmに変換
    Serial.println(); //改行データを送る
    }
    delay(10); //10ミリ秒待つ
}

Max8で値をみてみる

下記の文字列をコピーして、Max8でFileNew From Clipboardを選択

ここを押して展開される内容をコピー
----------begin_max5_patcher----------
1586.3oc2Zk0iahDD94IR4+.hmcr56i8sceI+FVkMJBay3PBl1BZmLSh1+6a
e.XOLbz1FOYy3QZ.2PSU0WcW3e912bW7J0CoUwQ+QzGht6teZV4N2Z1UtqYg
6h2k7v57jJ2MFuVsaWZgNdQ8E0oOncWXSVkNoXcZ6Ux13VWs5KuCJaWcehd8
myJ19oxz0ZOoILzRNcQDjRVRoTDlC7evjEQL3RvhHDXIH5iMOihC6xJxS0NN
BdxppC5lkAtU+229F6QygEAKgEoe2vyOW.2mr9qQY9+5SHI3wDRjvJGXB2IN
b+AzfREoeopUX8qoebep+wGGG8wKVhqxy1jV1mLgjiKSTmhCKgKkR.P.k9Ob
rWkYzojmn49ZgZ0ZUtpz+..KIXIBxVXNiSj.j8DD0eFbZU99jxjco5zxOkVj
rJ2gEfIPtpre3tODksDbSfSCgW0Obhgg.mTBZojwI.VMbJLqAlvf4RvDzvh+
hn3UIEauQVUhQgAfSVuBiJLjyHbqsDi1XUIsKA+M1pZD3jNFbBg3qDNkVORK
FhMPHv4rhIPCF+5DMAADF+J.SFfKHVLTf3DJzdFjxDL7uwn4fEE7OqV+YkpJ
MpJsLKIeupT2KlOpALvUB.08eHk+RWOfVscaduk0f4ix2jZNFsjhPLBotpFn
Q6iHNofbkJ7J8i9UpYx2qx2DetUNjYTbWS1tgJWpz7fitWUtKQqS2zK9IB.+
PPiFGarcQM3mwSQvCMc3stpvsI59sMjgXaXkCFEhH0wQj1povSHanWxZCGz0
NxTteoNZuJO2HaQ5O23jGMjWNTLcjUD9WjW9k0WCcZIhxwOuZNwKdSMCVSJD
GPwXuRJIcDT.EPMTu9QAX.1yuR.gAhmenXp97gATfHRvBqO+AbzIilsdQeGt
AXw8kpcUOtakJuObPF.LXKZqataNJTL4X4MdN78kooEuCF+Rl+aHrISqR5CU
BIGGzcfvl.GvCgC+U9gzK.FtQVI+HOZao5vdSg5f9PD9zHBTXPAImCaioX52
jSur5fFOtw0f.C2I.aZYjPaJ4uag+q19zNDk.puuPJvz5svdlwIRZ6ZDN2ML
X8n9+hgjgqKUlbI8AvATnE2milM2UOeqxzTklGAwQvdkWR.NMlDwPL.CAMej
sUVFPPkmJ93wE+EGOdafBWiCIQRV+wPBntDHPrjXmISStFfwG5Ry+hlJ+60f
Bl9gKOz+qPfEvfP714HROgGuWUnal1CDcbXOOOBCwOzcJ.fXx5HLBVXSzyx+
Mpsmzq2.dTVtpvDSxsm+zpoiGKU8oa69j0oWWiO6Njqy5LsuukT1xO8c8SM7
N5HtNoXyil+41G+zUyrqxN2WoQOZXJg3eKQtDFX5R6aC.wNcWszibtzqcmny
cvtcLe.RJQ3GbI.fkr5yPxvFgYKevO640WYdVMYvPWSKEMNIjSdxMVgfmwn3
ylQa2JsYqBlcbut49xATgvelffelL5rEurYFOTEOmHkFMhw+nUUZqQmZeDcb
v76INOq3YufXmcq8Bcb6pTGJW2P35FDhNg41jVoyJRzYphStIa5uHvXQSCld
hPnWGlRUZc7slmuTLfcvfQvi20trM6UlrJ0vLlac5QPrMYFD113j0LgQF3Z8
HOfYPd3gHOhYS+wBgbzYib12We.1mj4ifgPO9rRNTfja.iQNyZvAMcryfDSy
6MSo1DBzam1yklEdGGTrC77Y6g4A66NODDElDBmOBFTzIHd9HHMHBhlOBBBh
fyGjBChfciyLqobbr.LHV3VkkvwBnfXAzsjEvAwB3eor.RdqsElTQzMNvu.y
wtQFleVXRmxtwJlWagfBKLeI5Cpvo4KrG8xIWcaEI62+szxp5c3ojos8u3a4
Qrv+8rB+28MjEWl9srlsTeKIklNn0l1mOT56l+AVc+5w6TFEZwgrFyJqrZIs
q+wtszzNMfdlutQ9tO4PttCpjrdcZg979Ym0.FKZ.7Ryi33HYaHnajDs1hOU
I0gSe5aDIbVE3F9C19w0LIy1d5MiK+6z7b02mhMOc3UevM9JpcbdGMz5QNDH
Jzg3bAzORByln19rmeQw8VSs+Bat.7l2NfEpDAob+HSfR10ZZT6P4l2kkUq1
WOwL2bwd6aL2x+09pFjF
-----------end_max5_patcher-----------

前回と同じ手順(COMポートの選択, toggleを押す)で値を確認

復習も兼ねた応用

  1. 距離センサを使って音を再生するパッチを作る
  2. 同様に、映像を再生するパッチを作る
  3. エフェクトの掛かり具合を変化させるパッチを作る

<参考>

sensorPlayerパッチ(音の再生)
https://www.dropbox.com/s/1o8e3gjbsg2z46n/sensorPlayer.maxpat?dl=1

someFuncMoviePlayerパッチ(映像の再生)
https://www.dropbox.com/s/xmhsuilvjchctja/someFuncMoviePlayer.zip?dl=1

someFunkパッチ(センサデータ活用用オブジェクト)
https://www.dropbox.com/s/ixa35sulwtkua4a/someFunk.maxpat?dl=1

jitterエフェクトパッチ(画像データの加工)
https://www.dropbox.com/s/8jv1ssoehabzsbe/jitterEffect.maxpat?dl=1

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away