1. はじめに
IoT演習シラバス案その2(授業計画表)の第9週に予定している内容の一部です。
マイクロコントローラ(マイコンと呼ぶこともあります)は、コンピュータ(CPU+メモリ)と入出力機能を、ICの1つのチップや1枚のボードにまとめたものです。マイコンには電源を供給する端子の他に入出力を行う端子がついています。マイコンの入出力端子に、情報を入力するセンサ、情報を出力する表示装置、動作を行うアクチュエータ(モータなど)を接続して、様々な物を制御することができます。
今回は、IoTでよく使われるセンサとアクチュエータを紹介します。
-2. センサ
--2.1 スイッチ
--2.2 可変抵抗
--2.3 温度センサ
--2.4 湿度センサ
--2.5 気圧センサ
--2.6 光センサ
--2.7 アンテナ
--2.8 加速度センサ
--2.9 ジャイロセンサ
--2.10 磁気センサ
--2.11 重力センサ
--2.12 歪みゲージ(ストレンゲージ)
--2.13 距離センサ
--2.14 人間感知センサ
--2.15 GPS
--2.16 マイク
--2.17 カメラ
--2.18 2酸化炭素センサ
--2.19 匂いセンサ
--2.20 アルコールセンサ
--2.21 微粒子センサ(埃センサ)
--2.22 雨量計
--2.23 風向・風速計
--2.24 生体情報センサ
---2.24.1 脈拍(心拍)センサ
---2.24.2 酸素飽和度(SpO2)センサ
---2.24.3 心電図センサ
---2.24.4 脳波センサ
---2.24.5 血圧測定センサ
-3. アクチュエータ
--3.1 モータ
--3.2 サーボモータ
--3.3 ソレノイド
--3.4 リニアモーター
--3.5 リレー、SSR
--3.6 発光素子
--3.7 アンテナ
--3.8 スピーカー
--3.9 ディスプレイ
--3.10 ポンプ
--3.11 電磁弁
--3.12 ヒーター(電熱器)
--3.13 ペルチェ素子
-4. インターフェース
--4.1 GPIOインターフェース
--4.2 アナログ入出力インターフェース
--4.3 I2Cインターフェース
--4.4 SPIインターフェース
--4.5 UART
--4.6 USB
--4.7 WiFi
--4.8 BLE
-5. 演習: 光の強弱でロボットの動作を制御する。
-6. 授業の振り返り
2. センサ
センサとはデータ(情報)を入力する素子です。以下のような様々なセンサがあります。この他にもいろいろあります。
2.1 スイッチ
スイッチは電気回路を閉じたり(ON, 回路を接続したり)開いたり(OFF, 回路を切ったり)するもので、これもセンサとして考えることができます。回路を閉じることをスイッチを入れる、と言います。
第4回の「GPIOと電気回路その2」で行ったように、人間が手でスイッチを入り切りする場合もありますが、スイッチのON/OFFをドアや窓の開閉と連動することでドアや窓が開いているか閉じているかを知ることに使ったりすることもできます。このような時、「マイクロスイッチ」と呼ばれるスイッチがよく使われます。
物理的接点を持つスイッチはどうしても利用するに従って接点部分が劣化して行き、うまくON/OFFできなくなる場合があります。劣化を緩和するため、非接触スイッチも存在します。
2.2 可変抵抗
ツマミなどを回すことで抵抗値を変えることができる部品です。
第5回の「アナログ値の入力とPWM出力」で行ったように、人間が手でこのツマミを回して抵抗値を変える場合もありますが、例えば風向計の向きでツマミを回すことで風向きによって抵抗値を変え、それによって風向きを知ることに使ったりすることもできます。風向計で使うような場合は無制限に回るタイプのものが使われます。
ワイパーで抵抗線を物理的になぞる可変抵抗は、スイッチの場合と同様に、利用を続けるとワイパーや抵抗線の劣化が起こり、うまく動かなくなることがあります。この劣化を緩和するため、非接触の可変抵抗(電流制御)素子もあります。
2.3 温度センサ
温度を知るために使うセンサです。第7回「I2C」では、I2Cインターフェースを持った温度センサを使いました。
他に、温度の変化で抵抗値が大きく変わるセンサを使って温度を測ることもできますし、バイメタル(温度による収縮度が異なる2種類の細長い金属板を貼り合わせタモの)が、温度によって、その板がそりかえる角度が変わる性質を使い、その角度を可変抵抗で検出することにより温度を計測することもできます。
2.4 湿度センサ
湿度を知るために使うセンサです。第7回「I2C」で使った「BME280」は、湿度を計測することもできます。
2.5 気圧センサ
気圧を知るために使うセンサです。第7回「I2C」で使った「BME280」は、気圧を計測することもできます。
気圧センサ、気圧計の仕組みについては、以下のサイトなどを参考にしてください。
2.6 光センサ(照度)
光センサは光の強さを知ることができるセンサです。
Cds, フォトトランジスタなどで光の強さを知ることができます。
Cds は硫酸カドミウムを使った、フォトレジスタ(光の強さによって抵抗値が変わる素子)のことです。
フォトトランジスタやフォトダイオードは光の強さによって、流れる電流の大きさが変わる素子です。(実質的には光の強さによって抵抗が変わるもの、と考えても良いです)
I2Cのインターフェースがついた光センサもあります。
下の図はフォトトランジスタを使って光の強さ(照度)を測る回路の例です。
上の図の右側の、以下の記号がフォトトランジスタを表します。矢印の先の端子Eをエミッタと呼び、電源のマイナス側に接続します。反対側の端子Cをコレクタと呼び、電源のプラス側に接続します。
フォトトランジスタとして、以下のような部品が市販されています(授業で用意しているフォトトランジスタはこれです)。
発光ダイオードと同様に、足の長い方を+側に接続します。
フォトトランジスタに光が当たると、足の間の抵抗が小さくなり、多くの電流が流れるようになります。この電流は(Picoのアナログ入力端子の抵抗が非常に大きい場合)1KΩの抵抗を通じてGNDに流れます。これに従い、オームの法則、$E=IR$ によって、この抵抗の間の電圧が高くなり、アナログ入力にかかる電圧が高くなります。
上のサイトのフォトトランジスタ NJL7502L の「データシート」の「Photocurrent vs. Illuminance」の表によると、フォトトランジスタに流れる電流$I_p(μA)$は、照度($l_x$)と大体以下のような関係になります。
I_p(μA)=0.5 l_x
従って、1KΩの両端にかかる電圧$E_p$は、
e_p=i_p R = (0.5 l_x)(μA) 1000(Ω)=500 l_x 10^{-6}=0.5 l_x 10^{-3} (V)
となります。この時の$ADC_0$の値を、adc.read_u16() micropythonの関数で得た時、$ADC_0$=read_u16()の最大値 65537の時が3.3V, 0の時が0Vになります。この関数値は電圧に比例していると仮定すると、
ADC_0=e_p \frac{65537}{3.3}\fallingdotseq 9.9 l_x
となります。$lx$ が1の時は、9.9、$lx$が10の時は 99 となります。
逆に、$ADC_0$の値を10で割ると、照度の大まかな値になります。
「IoT演習第5回、アナログ値の入力とPWM出力」の、「5.2 プログラム」と同じプログラムを実行することで、1秒ごとに、$9.9 l_x$の値が表示されます。以下、プログラムを再掲します。
from machine import ADC, Pin
import time
adc = ADC(Pin(26))
while True:
print(adc.read_u16())
time.sleep(1)
2.7 アンテナ
アンテナは電波を電流(交流)に変換するセンサです。
2.8 加速度センサ
加速度センサは、センサにかかる加速度の大きさと方向を知ることができるセンサです。MEMS(Micro Electro Mechanical Systems)という技術を使い、小さなバネを使った重量計のようなものをICの中に作って、力の大きさとその方向を知ることができるようになっているものがよく使われています。
最近のスマホの多くは加速度センサを持っています。スマホの向きを変えても、地面とは反対側が上になるように表示を行う機能は、加速度センサを使っています。
以下のようなI2Cインターフェースを持った加速度センサが市販されています。
2.9 ジャイロセンサ(ジャイロスコープ)
ジャイロセンサは、回転加速度の大きさと方向を知ることができるセンサです。これもMEMSを使って実現したものが多く使われています。
ドローンやロボットの姿勢制御によく使われています。
上のLSM9DS1はジャイロセンサも持っています。
この他、光速不変の原理を使い、非常に高精度な回転加速度を計測できる光ファイバジャイロセンサもあります。
2.10 磁気センサ
磁気センサは磁気の大きさと方向を知ることができるセンサです。
磁気センサもスマホに入っている場合があります。方位磁石として使うこともできます。
ホール効果という、磁気によって、電流の流れが変わる性質を使ったセンサが多く使われています。
LSM9DS1は磁気センサも持っています。
2.11 重力センサ、力センサ
物の重さを計測するセンサです。ロードセルと呼ばれることもあります。
市販ロードセルの例:
2.12 歪みゲージ(ストレンゲージ)
物体の歪みを計測するセンサです。力をかけると変形する鉄板などに貼って、重さや力を計測することもできます。
2.13 距離センサ
センサがある位置から対象となる物までの距離を測ることができるセンサーです。音の反射に必要な時間を使ったものや、光の反射に必要な時間を使ったものがあります。
音(超音波)を使ったものの例:
光(赤外線)を使ったものの例:
2.14 人間感知センサ
人間や動物は弱い赤外線を発生しています。人が動くと、その赤外線の強さが変わります。その変化により、人や動物が動作したことを知ることができる、PIR というセンサがあります。トイレに入ったら自動的にトイレの照明がつく場合、このセンサを使っている場合が多いです。防犯のためのセンサとしてもよく利用されています。
PIRセンサの例:
2.15 GPS
Global Positioning System (GPS)は、地球を周回している複数の衛星が送信している電波をGPS受信機が受信することにより、GPS受信機の位置を知ることができるものです。正確な時間を知ることもできます。
今のスマホは大抵GPS受信機を備えています。
GPS受信機も部品として販売されており、マイクロコントローラで利用することができます。
市販されているGPS受信機の例:
2.16 マイク
音声などの音は空気振動です。音を感じるということは空気振動による気圧の変化を感じることと同じです。
マイク(マイクロホン)は、音を感じるセンサですが、気圧の変化を計測するセンサであるということもできます。
音を感じる(計測する)方法には様々な手段があり、それぞれ長所・短所があります。以下のサイトなどに、代表的な種類のマイクの説明が載っていますので読んでみてください。
コンデンサマイクの例:
音を記録するとき、音圧の時間的な変化を記録するために、短い時間の間に多くのデータを入力し、これを保存する必要があります。このため、時間による変化が音と比べて少ない温度計などと比較すると、はるかに容量の大きい記憶媒体が必要になります。
2.17 カメラ
カメラは映像を捉える素子です。フォトトランジスタを2次元平面に並べて、その値を一つずつ外に取り出すことで、映像信号を得ることができます。この値を取り出す方法によって、CCDイメージセンサやCMOSイメージセンサなどの種類がありますが、近年はCMOSイメージセンサが使われる場合が多いようです。
CCD イメージセンサの説明:
CMOS イメージセンサの説明:
市販されているカメラの例:
カメラは平面に沢山並んだ受光素子(フォトトランジスタ)の情報を取り出すため、データのサイズが大きくなります。動画を記録する場合はこの大きなデータを短時間の間に沢山入手し保存することになり、一般的には、音声データと比べて遥かに大きくなります。
2.18 2酸化炭素センサ
二酸化炭素の濃度を計測するセンサです。空気中を通る特定の波長の赤外線が二酸化炭素によって吸収される性質を使ったセンサや、電気化学反応を使って二酸化炭素を検出するセンサなどがあります。
市販されている二酸化炭素センサの例:
密閉した部屋の中に人がいると二酸化炭素が増えていくので、換気の目安を通知するためにも使われます。
2.19 匂いセンサ
匂いセンサは空気中に含まれる化学物質の有無や濃度を計測するものです。
匂いセンサの例:
2.20 アルコールセンサ
空気中のアルコール成分を検出するセンサがあります。
市販されているアルコールセンサの例:
2.21 微粒子センサ(埃センサ)
空気中の微粒子の多さを計測するセンサです。光が微粒子に当たって反射することを利用するものが多いようです。
市販されている微粒子センサの例:
2.22 雨量計
雨量計は単位時間あたりの雨の量を計測するものです。
法律で定められた「雨量」があるので、認定を受けていない雨量計で計測した値を雨量として不特定多数の人に知らせることは違法となる場合があります。
2.23 風向・風速計
風の向きや強さを計測するものです。
風によって超音波の伝搬時間が変化する性質を使った、超音波風向風速計があります。
超音波風向風速計の例:
2.24 生体情報センサ
人間から情報を得るための生体情報があります。スマートウォッチなどでよく利用されています。但し、気象観測のセンサと同様に、利用に制限がある場合があります。
2.24.1 脈拍(心拍)センサ
心拍数を計測するセンサです。
心拍センサの例:
2.24.2 酸素飽和度(SpO2)センサ
血中酸素飽和度を計測するセンサです。この値が低いと血中に取り込まれた酸素が少ないことになります。
SpO2センサの例:
2.24.3 心電図センサ
心電図を計測するセンサです。
心電図センサの例:
2.24.4 脳波センサ
脳波を計測するセンサです。
2.24.5 血圧測定センサ
血圧を測定するセンサです。
血圧測定センサの例:
3. アクチュエータ
アクチュエータとは、物を動かすものを意味しますが、広く捉えればデータを出力する装置です。以下を含む様々なものがあります。
3.1 モータ
モータは電流を流すことで物理的な回転をする素子です。ブラシ付き直流モーターとサーボモータについてはこの授業の第6回で説明しています。このほか、ブラシレスモータもあります。
ブラシ付き直流モータ
この授業の第6回で説明したように、固定した側に永久磁石を配置し、回転する側に電磁石を配置し、電磁石を整流子に接続し、整流子に固定した側のブラシを使って、電磁石に電流を供給するモーターです。ブラシに一定方向の電流を流すと、常に一方向に回転する力がかかることで軸が回転します。整流子とブラシの間に摩擦が発生するので、寿命が短く、効率も少し悪くなります。
ブラシレス直流モータ
回転する側を永久磁石にし、固定している電磁石に、インバータと呼ばれる装置を経由して電流を流すようにしたものです。インバータによって、永久磁石が回転するように電磁石に流れる電流の向きを変化させます。
摩擦が発生しないので、寿命が長く、効率も良くなります。
3.2 サーボモータ
この授業の第6回で説明したように、PWM信号を与えることにより、パルス幅に応じた位置にホーンが回転移動するモータです。
第6回のサーボモータを駆動する回路の例とプログラムの例を再掲します。
回路の例:
プログラムの例
from machine import PWM, Pin
from time import sleep
servo = PWM(Pin(9))
servo.freq(50)
angle_M90 = int(2.5 / 20 * 65536)
angle_0 = int(1.5 / 20 * 65536)
angle_90 = int(0.5 / 20 * 65536)
while True:
servo.duty_u16(angle_0)
print(angle_0)
sleep(2)
servo.duty_u16(angle_90)
print(angle_90)
sleep(2)
servo.duty_u16(angle_0)
print(angle_0)
sleep(2)
servo.duty_u16(angle_M90)
print(angle_M90)
sleep(2)
3.3 ソレノイド
ソレノイドは空芯のコイル(ソレノイドコイル)に、移動可能な鉄の棒を差し込んだ構造を持ったアクチュエータです。ソレノイドコイルに電流を流すとそれによって生じた磁気により鉄芯が引き寄せられます。電流がなくなるとバネなどにより鉄芯が元の位置に戻るようになっています。これにより、物を叩いたり、キーボードを押したりすることができます。
3.4 リニアモーター
直線運動するモーターです。
3.5 リレー、SSR
リレー(メカニカルリレー)は電流を流したり止めたりすることにより、スイッチのON/OFFを切り替えることができる素子です。通常のリレーは電磁石に電流を流したり電流を止めたりすることで、鉄などの、磁力に反応する物体を付けたスイッチをON/OFFします。
リレーの例:
SSRは、Solid State Relayのことで、電磁石で回路をON/OFFする代わりに、半導体で回路をON/OFFする素子のことです。SSRは機械的な部分を持たないため、高速で、長寿命ですが、ONの時の抵抗が電磁石を使ったリレーと比べて一般的に高く、損失が大きくなります。
リレーやSSRによって、使用する電力が大きな電気機器や電気機械を動作させたり動作を停止させたりすることができます。
SSRの例:
3.6 発光素子
LED、電球、レーザーなど、光るものはすべて発光素子です。
3.7 アンテナ
アンテナは電波を発生する装置ですが、これも一種のアクチュエータと解釈できます。発光素子は、非常に周波数の高い電波である光を発生する装置です。
3.8 スピーカー
音を出す素子です。磁石に近い場所にあるコイルの、流れる電流を変化させることにより、コイルについたコーンを振動させることによるダイナミックスピーカーがよく使われています。
この他、ピエゾ効果を使ったスピーカーもあります。ピエゾ効果(圧電効果)とは、ある種の結晶を挟んだ金属の板に電圧を加えると、その結晶が歪んで電極間の距離が変化するものです。逆に、この結晶に力を加えると、電極に電気が発生します。
3.9 ディスプレイ(画像表示装置)
発光素子等を2次元平面上に並べて個々の光や色を変えることにより、画像を表示するものです。
3.10 ポンプ
ポンプは液体を移動させるものです。
市販されているポンプの例:
3.11 電磁弁
電磁弁は電流を流したり止めたりすることで、管の一部を開けたり閉じたりして、液体の流れを制御するものです。
市販されている電磁弁の例:
3.12 ヒーター(電熱器)
ヒーターは電流を流すことで熱を発生する素子です。
3.13 ペルチェ素子
電流を流すことで熱を移動させることができる素子です。
4. センサやアクチュエータをマイクロコントローラに接続するためのインターフェース
インターフェースとは、2つの素子の間で情報を交換するためのシステムや機能のことです。
センサやアクチュエータはマイクロコントローラのインターフェースを使ってマイクロコントローラと接続されます。Pico W は、GPIO、GPIOのPWM出力機構、アナログ入力端子、I2C、SPI (Serial Peripheral Interface)、UART (Universal Asynchronous Receiver/Transmitter, ユーアート)、USB (Universal Serial Bus)、WiFi、BLE (Bluetooth Low Energy) のインターフェースを持っています。
インターフェースという名の雑誌が刊行されており、授業担当教員はその記事を執筆したことがあります。
4.1 GPIOインターフェース
「IoT演習第3回、GPIOと電気回路その1」、「IoT演習第4回、GPIOと電気回路その2」で述べたように、汎用入出力端子のことです。スイッチのON/OFFの情報の入力、LEDと抵抗を直列接続したものを接続することによるLEDの点滅などを行うことができます。「IoT演習第6回、2種類のモータ制御」で述べたように、GPIOにモータードライバ(Hブリッジ)を接続することにより、Pico Wでは直接接続することが難しい、大きな電流が必要となるモータなどのアクチュエータを接続することができます。GPIOにリレーやSSRを接続することにより、同様に、大きな電流が必要となるアクチュエータを接続することが可能になります。
4.2 アナログ入出力インターフェース
「IoT演習第5回、アナログ値の入力とPWM出力」で述べたように、Pico Wのアナログ入力端子を使うことにより、可変抵抗やマイクなどの、アナログ値を入力するためのセンサを接続することができます。GPIOをPWM出力に設定することにより、アナログ値を出力するアクチュエータを接続することができます。
4.3 I2Cインターフェース
「IoT演習第7回、I2C」で述べたように、I2Cインターフェースを持った様々なセンサやアクチュエータをPico Wに接続することができます。
小型液晶ディスプレイのような、小型ディスプレイを接続することにもできます。
4.4 SPIインターフェース
SPIインターフェースは、I2Cと同様に、マスター素子と複数のスレーブ素子の間でデータの入出力を行う物です。I2Cの場合は1本の導線を入力と出力を共用していましたが、SPIインターフェースの場合は入力と出力は異なる導線を使います。I2Cの場合は素子を区別するためにアドレスを使いましたが、SPIの場合はマスター素子が、その時に通信する素子を選ぶために、素子を選ぶための導線をスレーブ素子の数だけ持っています。
SPIはI2Cと比べて単位時間あたりに流れる情報量が多いセンサやアクチュエータを接続する時によく利用されます。記憶装置であるSDカードを接続したり、小型カメラを接続するために使われることがあります。
4.5 UART
シリアル信号(High とLowの繰り返しの信号)を送受信するためのインターフェースです。Co2センサやGPSなどのセンサを接続するときに使われる場合があります。コンピュータ同士を接続する時にもよく使われます。
4.6 USB
コンピュータ等の情報機器に周辺機器を接続するためのシリアルバス規格の1つです。キーボードやマウスなどの入力機器(入力機器はセンサです)を接続したり、USBメモリのように記憶媒体を接続したり、ディスプレイやスピーカーのような出力機器(出力機器はアクチュエータです)を接続したりすることができます。USBの上でUARTの信号を通すこともできます。
Pico WでUSBを使う時は、センサやアクチュエータを接続したPico Wを、他のコンピュータから使うような目的でよく使われます。
4.7 WiFi
Pico Wは、無線を使った情報の入出力インターフェースである、WiFiインターフェースを持っています。これにより、WiFiの入出力ができるセンサやアクチュエータをPico Wに接続することが可能になります。
4.8 BLE
BLEもWiFiと同様に、無線を使った情報の入出力インターフェースです。WiFiと比べて少ない電力で情報機器を接続することができます。Pico WはBLEインターフェースを持っています。これにより、BLEの入出力ができるセンサやアクチュエータをPico Wに接続することができます。
センサやアクチュエータを付けたPico Wを、他のコンピュータからBLEを使って利用することもできます。
5. 演習
光の強さが強い時と、弱い時で、サーボモータの向きを変える回路とプログラムを作ってください。(2.6と3.2を参考にしてください)
回路を作るとき、ショートしないようにくれぐれも注意してください。
プログラムを作るとき、Webなどで検索して類似した回路、プログラムを探し、それを使っても構いません。
プログラムの写真、光が強い時の回路とサーボモータの写真、光が弱い時の回路とサーボモータの写真を撮って提出して下さい、
余裕があれば、光の強さが強い時と弱い時で動作が変わる(整流子付き直流モータを使った)ロボットを作ってください。