0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スマート人感検出(SPD)ライブラリでスマート卓上ファンを作ってみた!(6)制作記 ~ 動かないときは?

Last updated at Posted at 2025-09-17

この一連の記事ではスマート卓上ファンを作ってみます。このファンにはSTマイクロエレクトロニクスのToF(Time-of-Flight)測距センサを使っています。一部のToF測距センサはst.comで提供されるスマート人感検出(以下SPD:Smart Presence Detection)を使うことで高度な人感センサとして動作します。このSPDの結果を使い、羽の回転や左右の首振りを制御します。
0.1.「全体構成」.png

前の記事へのリンク
前回までの記事では機構やモータ制御を考えるところからスタートしました。その次にSTM32H533のプロジェクトにSPDを移植しました。一つ前の記事ではファン制御のアルゴリズムを入れました。この記事ではToFセンサやSPDプロジェクトのデバッグをしていきます!

6 動きません!

ここまで作ってきてコンパイルが通って、すぐに動いた!となれば素晴らしいですが、私の場合は動きませんでした。ToF測距センサが動かないときは以下のチェックポイントを順番に確認していきます。

6.1 初期化ができているか?

main.cのinit_vl53lmz_sensor()でToF測距センサの初期化処理をしています。返り値であるstatusを確認します。以下のようにエラー処理に入っている場合には初期化でエラーが起こっています。ボードのI2CやGPIOの接続と、ソフトウェアの設定が正しく対応しているかを確認しましょう。
6.1. 「初期化ができているか?のデバッグ画面」.png

main.cのinit_vl53lmz_sensor()の前
  /* Enable Power */
    HAL_GPIO_WritePin(PWR_EN_C_GPIO_Port, PWR_EN_C_Pin, GPIO_PIN_RESET);
    HAL_Delay(100);
    HAL_GPIO_WritePin(PWR_EN_C_GPIO_Port, PWR_EN_C_Pin, GPIO_PIN_SET);
    HAL_Delay(100);

うまく初期化ができている場合には以下のようにバージョン情報がUARTターミナルから出力されます。
6.1. 「初期化ができているか?のTeraTerm画面」.png

6.2 測距が開始されているか?

SPDのコードではCommandData.enable=1;により、測距が始まります。このサンプルのようにボタンと連動している場合には、enableが1にされているかを確認します。まずは初期化のコードの後で、これをenableにするのもありだと思います。
6.2.「測距が開始されているか?のデバッグ画面1」.png
正しくenable=1になると、メインループの以下のコードに入っていきます。
6.2.「測距が開始されているか?のデバッグ画面2 」.png

6.3 Interruptが受け取れているか?

enableが正しく行われると、定期的にVL53L7CXから割り込み用の信号が送られます。まずEXTI1_IRQHandler()が正しく呼ばれていることを確認します。そこからHAL_GPIO_EXTI_Falling_Callback()が呼ばれていて、IntCountがインクリメントされているかを確認します。
6.3. 「 Interruptが受け取れているか?のデバッグ画面」.png
私はPB1のGPIO modeの「External Interrupt Mode with Rising edge trigger detection」になっていて、「External Interrupt Mode with Falling edge trigger detection」にしたら、HAL_GPIO_EXTI_Falling_Callback()が呼ばれるようになりました。
6.3. 「Interruptの設定」.png

6.4 動きました!、、、けど

ついに動きました。人がくると動き出し、人の動きに合わせて、左右に首を振り、人がいなくなると止まる扇風機ができました。ここまで来るのに、配線のトラブルやうまく制御できないGPIOにも少し悩まされました。兎にも角にも動いたのは良かったです。けれど、どうも動きはそこまでスムーズではありません。

まずは対象物の接近を検知して、送風を開始します。どうも初めに認識した後にむかって左の方に対象物を検知するくせのようなものがあるようです。その後、中央に戻ってきますが、首振りの最中はSPDの検知を動かしていないので、修正が遅いです。
SPD_FAN_8.gif
中央に戻ってきた後に対象物をむかって右の方に動かすと、右の方にファンが向いていきます。そして中央に戻すと、中央に戻っていきます。
SPD_FAN_9.gif

今回はデバッグして動くようになりました。ただ動きが少しおかしいところもありました。次回、最後の記事では、より正確に動くようにさまざまな調整をしてきます。次の記事につづきます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?