はじめに
このブログでは、赤外線センサーをRaspberry Pi Picoに接続して、センサー状態を取得するプログラムを作成していきます。赤外線センサーは、KKHMFのものを使ってみます。
ミニブレッドボード 170穴 35mm × 47mm はんだレス BREADBOARD レッド ホワイト ブラック イエロー グリーン パープル 2点セット 価格:624円 |
ジャンパーワイヤー 3本セット 10cm Emith ジャンパー線 Arduino Raspberry pi 用 ブレッドボード ジャンパーケーブル オス メス 価格:1,495円 |
Raspberry Pi Picoの開発環境の構築とプロジェクトの作成、実行の仕方については、下記のブログ記事にまとめていますので、そちらをご覧ください。それでは、はじめていきます。
回路図
回路には、押しボタンスイッチ、サーボモータも接続していますが、ここで使うのは、赤外線センサーの部分のみです。
赤外線センサーは、VCC、GND、OUTの3ピンからなります。
VCCは、回路図上の赤色線で3.3VOUT(36ピン)に接続するようにします。黒色線のGND線は、8ピンのGNDにつなぎ、出力信号OUTの白色線は、9ピンのGP6に接続します。
ちなみに、押しボタンスイッチの一方は、1kΩの抵抗をRapberry Pi PicoのGND(8ピン)とGP0(1ピン)に接続します。もう一方は、36ピンの3.3VOUTに接続しています。
サーボモータは、信号線(黄色)、電源線(赤色)、接地線(黒色)の3線があり、それぞれ、GP2(4ピン)、3.3VOUT(36ピン)、GND(3ピン)に接続しています。
サーボモータを動かすための外部電源として、単三電池3本(4.5V)をVSYS(39ピン)とGND(38ピン)につないでいます。
これらのパーツは、下記の記事で使用しているので、ご興味のある方は、見てみてください。
プロジェクトのディレクトリ作成
作成するプロジェクトのディレクトリをつくります。
環境構築の部分で、pico-sdkが作成されているとして、次のようなディレクトリ構成とします。
irsensorディレクトリ内にirsensor.cファイルを作成して、このファイルにプログラムを書いていきます。
C:¥prog¥pico¥DL
┗¥pico-sdk
┗¥irsensor
┗¥build
┗irsensor.c
┗CMakeLists.txt
┗pico_sdk_import.cmake
SourceファイルとMakeファイルの作成
まず、ソースファイルとビルドファイルを準備します。
作成したプロジェクトディレクトリに移動します。(ここでは、irsensorディレクトリ)
irsensorディレクトリの中に実行するソースファイルirsensor.cを作成します。
irsensor.cには、次のようなコードを記述します。
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
//---------------------------------------
//define
//---------------------------------------
#define DF_IRSIG 6
//---------------------------------------
//function : main
//return : ---
//---------------------------------------
int main()
{
stdio_init_all();
gpio_init(DF_IRSIG);
gpio_set_dir(DF_IRSIG,GPIO_IN);
//main loop
while(1)
{
//wait
printf("%d\n",gpio_get(DF_IRSIG));
busy_wait_ms(1000);
}
}
センサーの状態を表示するためにTera Termを使って状態を出力します。
そのために、stdio_init_all()という関数を呼び出し、printf()関数を使えるようにしています。
センサーのOUT信号線のGP6をGPIOで初期化、GPIO_INに設定します。
whileループで1秒ごとにGP6の信号を読み取って出力するというプログラムになります。
続いて、myprjディレクトリの中にCMakeLists.txtを作成します。
CMakeLists.txtには次のように記述しておきます。
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(irsensor_project C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(irsensor
irsensor.c
)
target_link_libraries(irsensor pico_stdlib hardware_gpio)
pico_enable_stdio_usb(irsensor 1)
pico_enable_stdio_uart(irsensor 1)
pico_add_extra_outputs(irsensor)
target_link_libraries(irsensor pico_stdlib)
さらに、pico-sdk¥externalディレクトリの中にあるpico_sdk_import.cmakeというファイルをコピーして保存します。
ビルド
プロジェクトディレクトリirsensorにbuildディレクトリを作成し、カレントディレクトリとします。そこで、パス設定をしていなければ、次のコマンドを実行します。
C:\prog\pico\DL\irsensor\build>setx PICO_SDK_PATH "..\..\pico-sdk"
実行ファイルを生成するため、cmakeを実行します。
C:\prog\pico\DL\irsensor\build>cmake -G "NMake Makefiles" ..
C:\prog\pico\DL\irsensor\build>nmake
nmakeを実行するとビルドが開始され、正常に終了するとbuildディレクトリの中にirsensor.uf2という実行ファイルが作成されます。
このファイルをRaspberry Pi Picoに書き込むことで、作成したプログラムが実行されます。
実行
nmake実行後、buildディレクトリを確認するとirsensor.uf2ファイルが生成されています。
このファイルをターゲットボードに書き込みます。
Raspberry Pi Picoのリセットボタン(ボード上の白色のボタン)を押しながらRaspberry Pi PicoにつないだUSBケーブルをPCに接続します。
この環境では、DドライブとしてRPI-RP2が認識されたので、このDドライブ内にirsensor.uf2ファイルをドラッグアンドドロップで入れ込みます。これで、書き込みは終了です。
書き込みが終わった時点で、プログラムが実行されます。
tera termを実行します。
tera termがインストールされていない場合は、こちらのサイトからダウンロードできます。
tera termを起動して接続先を設定します。
接続をシリアルにして、ポートをUSBシリアルデバイスで認識されているCOMポートにします。
ここでは、COM9で認識されています。
設定の選択が完了したらOKボタンを押します。
そうするとセンサーの出力値が1秒おきに表示されます。
このセンサーはデジタル出力のみで、センサーを遮光していなければ、「1」、遮光されていれば「0」が出力されます。
センサー基板には、電子ボリュームが付いていて、その電子ボリュームを調整すると、検知する感度を変えることができます。基板上には、検知LEDが付いていて、遮光を検知するとLEDが光るようになっています。そのLED発光タイミングと出力値を確認することで動きが分かると思います。
まとめ
いかかでしたでしょうか。このブログでは、赤外線センサーをRaspberry Pi Picoに接続して、センサー状態を取得するプログラムを作成し、センサーの出力を確認しました。
赤外線センサーは、ロボットの障害物検知や自動開閉装置のセンサーなどに使われています。
センサー出力からモーター制御につなげていくといろいろなものが作れると思います。
このセンサーは、安価で3.3Vでも動作するのでとても使いやすいセンサーです。
コメント