ishikawaTweetししかわです。社員研修の一環で、自作マウスを作って大会に出場します。MicroMouse前回はマウスモジュール側の開発環境構築をしました。これから数回に渡って、マウスモジュール側にセンサやモータを繋いで動かしてみます。今回はSTM32で光センサの値を読み取ってみました。赤外線LEDを発光させる壁に反射した光を光センサで読み取る読み取った値がしきい値を超えていれば「壁あり」と判断するという方法を取るのがメジャーです。赤外線LEDの代わりに可視光(緑色)のLEDを使ったり、ToFセンサと組み合わせたりする方もいます。マイクロマウスの光センサについてはアールティのショップブログの解説が詳しいです。Blog私のマウスは次の部品を使います。どちらもマイクロマウスで動作実績があります。SFH4550以降では、STM32にフォトトランジスタを繋いで動作確認させてみます。フォトトランジスタは受光した光量に比例して電流が流れる素子です。この電流を抵抗に流すと、電流値に応じて電圧が変わる回路になります。この電圧値をSTM32のA/Dコンバータで読み取ります。STM32の開発の流れ今回用意したSTM32環境での基本的な開発の流れは、次のステップで行います。STM32CubeMX(以下CubeMX)でSTM32のピンやクロックの設定を変更するコード雛形を出力する必要な処理を書き足す場合によっては開発の途中でピンやクロック設定を変更したくなるでしょう。そんなときは1.~3.を繰り返せばOKです。囲まれた部分は上書きしないようになっています。開発の際は上記のコメントで囲まれた部分を編集するよう注意しましょう。STM32の設定CubeMXを開いて、AD変換のための設定を加えます。Configuration」メニューのIN0にチェック「Configuration」で様々な設定ができますが、動作確認では特に手を加えません。CODE」をクリックして雛形を出力します。出力した雛形には新たにA/Dコンバータ初期化のコードが加わっています。*/}必要な処理を書き足す出力した雛形は初期化までを行いますが、AD変換の開始・停止や値の読み取り処理はユーザ側で追記する必要があります。CubeMXのデフォルト設定の場合、次の3つの関数を実行することでAD変換された電圧値を取得できます。AD変換の開始:HAL_ADC_StartAD変換処理を待つ:HAL_ADC_PollForConversion変換された値を取得する:HAL_ADC_GetValueコード例は次のようになります。例では取得した値の大小に応じてLチカの間隔を変化させてみました。いえ、デバッグの方法がLED1個だと心許ないので、プリントデバッグやJTAGを使ったデバッグの方法も近く記事にします。