# センサーとアクチュエーターで物理的な世界と対話する ![このレッスンの概要を示すスケッチノート](../../../../../translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.ja.jpg) > スケッチノート作成者: [Nitya Narasimhan](https://github.com/nitya)。画像をクリックすると拡大表示されます。 このレッスンは、[Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn)の[Hello IoTシリーズ](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-)の一環として教えられました。このレッスンは2つの動画で構成されており、1時間のレッスンと、レッスンの内容を深掘りし質問に答える1時間のオフィスアワーで構成されています。 [![レッスン3: センサーとアクチュエーターで物理的な世界と対話する](https://img.youtube.com/vi/Lqalu1v6aF4/0.jpg)](https://youtu.be/Lqalu1v6aF4) [![レッスン3: センサーとアクチュエーターで物理的な世界と対話する - オフィスアワー](https://img.youtube.com/vi/qR3ekcMlLWA/0.jpg)](https://youtu.be/qR3ekcMlLWA) > 🎥 上の画像をクリックして動画を視聴してください ## 講義前クイズ [講義前クイズ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/5) ## はじめに このレッスンでは、IoTデバイスにおける重要な概念であるセンサーとアクチュエーターについて紹介します。また、これらを実際に操作し、IoTプロジェクトに光センサーを追加し、光レベルに応じて制御されるLEDを追加することで、ナイトライトを作成します。 このレッスンで学ぶ内容は以下の通りです: * [センサーとは何か](../../../../../1-getting-started/lessons/3-sensors-and-actuators) * [センサーの使用方法](../../../../../1-getting-started/lessons/3-sensors-and-actuators) * [センサーの種類](../../../../../1-getting-started/lessons/3-sensors-and-actuators) * [アクチュエーターとは何か](../../../../../1-getting-started/lessons/3-sensors-and-actuators) * [アクチュエーターの使用方法](../../../../../1-getting-started/lessons/3-sensors-and-actuators) * [アクチュエーターの種類](../../../../../1-getting-started/lessons/3-sensors-and-actuators) ## センサーとは何か センサーは物理的な世界を感知するハードウェアデバイスです。つまり、周囲の1つ以上の特性を測定し、その情報をIoTデバイスに送信します。センサーには測定可能なものが非常に多いため、さまざまな種類があります。例えば、空気の温度などの自然の特性や、動きなどの物理的な相互作用を測定するものがあります。 一般的なセンサーには以下のようなものがあります: * 温度センサー - 空気の温度や、センサーが浸されている物体の温度を感知します。ホビイストや開発者向けには、これらはしばしば気圧や湿度センサーと組み合わされています。 * ボタン - 押されたかどうかを感知します。 * 光センサー - 光のレベルを検出します。特定の色、UV光、IR光、または一般的な可視光を検出するものがあります。 * カメラ - 写真を撮影したり、ビデオをストリーミングすることで、視覚的な情報を感知します。 * 加速度計 - 複数の方向の動きを感知します。 * マイク - 一般的な音量や方向性のある音を感知します。 ✅ 調べてみましょう。あなたのスマートフォンにはどのようなセンサーが搭載されていますか? すべてのセンサーに共通しているのは、感知したものを電気信号に変換し、それをIoTデバイスが解釈できる形にすることです。この電気信号の解釈方法は、センサーやIoTデバイスとの通信プロトコルによって異なります。 ## センサーの使用方法 以下のガイドに従って、IoTデバイスにセンサーを追加してください: * [Arduino - Wio Terminal](wio-terminal-sensor.md) * [シングルボードコンピュータ - Raspberry Pi](pi-sensor.md) * [シングルボードコンピュータ - 仮想デバイス](virtual-device-sensor.md) ## センサーの種類 センサーはアナログセンサーとデジタルセンサーに分類されます。 ### アナログセンサー 最も基本的なセンサーの一部はアナログセンサーです。これらのセンサーはIoTデバイスから電圧を受け取り、センサーのコンポーネントがその電圧を調整し、センサーから返される電圧を測定して値を取得します。 > 🎓 電圧とは、電気をある場所から別の場所へ移動させる力の大きさを測るものです。例えば、標準的な単三電池は1.5V(Vはボルトの記号)で、正極から負極へ1.5Vの力で電気を押し出すことができます。電気機器によって必要な電圧は異なります。例えば、LEDは2〜3Vで点灯しますが、100Wの白熱電球には240Vが必要です。電圧について詳しくは[Wikipediaの電圧ページ](https://wikipedia.org/wiki/Voltage)をご覧ください。 例として、ポテンショメータ(可変抵抗器)があります。これは2つの位置の間で回転できるダイヤルで、センサーがその回転を測定します。 ![中央に設定されたポテンショメータが5ボルトを受け取り、3.8ボルトを返す様子](../../../../../translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.ja.png) IoTデバイスはポテンショメータに電気信号を送信します(例えば5V)。ポテンショメータを調整すると、出力される電圧が変化します。例えば、ポテンショメータが0から[11](https://wikipedia.org/wiki/Up_to_eleven)までのダイヤルとしてラベル付けされているとします。ダイヤルが完全にオフの位置(0)にある場合、0Vが出力されます。完全にオンの位置(11)にある場合、5Vが出力されます。 > 🎓 これは簡略化した説明です。ポテンショメータと可変抵抗器について詳しくは[Wikipediaのポテンショメータページ](https://wikipedia.org/wiki/Potentiometer)をご覧ください。 センサーから出力される電圧はIoTデバイスによって読み取られ、デバイスがそれに応じて動作します。センサーによっては、この電圧が任意の値である場合もあれば、標準的な単位に対応する場合もあります。例えば、[サーミスタ](https://wikipedia.org/wiki/Thermistor)を基にしたアナログ温度センサーは、温度に応じて抵抗が変化します。この出力電圧はコード内の計算によってケルビン(K)、摂氏(°C)、華氏(°F)の温度に変換されます。 ✅ センサーが送信された電圧よりも高い電圧を返した場合(例えば外部電源から供給された場合)、何が起こると思いますか?⛔️ 実際に試さないでください。 #### アナログからデジタルへの変換 IoTデバイスはデジタルで動作します。つまり、アナログ値を扱うことはできず、0と1だけを扱います。そのため、アナログセンサーの値は処理される前にデジタル信号に変換される必要があります。多くのIoTデバイスにはアナログ-デジタル変換器(ADC)が搭載されており、アナログ入力をデジタル表現に変換します。センサーもコネクタボードを介してADCと連携することができます。例えば、Seeed Groveエコシステムでは、Raspberry Piに接続された「ハット」にアナログセンサーを接続します。このハットにはADCが搭載されており、電圧をデジタル信号に変換してPiのGPIOピンから送信します。 例えば、3.3Vで動作するIoTデバイスに接続されたアナログ光センサーが1Vを返しているとします。この1Vはデジタルの世界では意味を持たないため、変換が必要です。この電圧はデバイスやセンサーに応じたスケールでアナログ値に変換されます。例えば、Seeed Grove光センサーは0から1,023の値を出力します。このセンサーが3.3Vで動作している場合、1Vの出力は300の値に相当します。IoTデバイスはアナログ値300を直接扱うことはできないため、Groveハットによって`0000000100101100`(300のバイナリ表現)に変換されます。この値がIoTデバイスで処理されます。 ✅ バイナリについて知らない場合は、0と1で数値を表現する方法を少し調べてみてください。[BBC Bitesizeのバイナリ入門レッスン](https://www.bbc.co.uk/bitesize/guides/zwsbwmn/revision/1)は良い出発点です。 コードの観点では、これらの処理は通常センサーに付属するライブラリによって処理されるため、自分で変換を心配する必要はありません。例えば、Grove光センサーではPythonライブラリを使用して`light`プロパティを呼び出すか、Arduinoライブラリを使用して`analogRead`を呼び出すことで300の値を取得できます。 ### デジタルセンサー デジタルセンサーもアナログセンサーと同様に電圧の変化を利用して周囲を検知しますが、デジタル信号を出力する点が異なります。デジタルセンサーは、2つの状態のみを測定するか、内蔵のADCを使用してアナログ値をデジタル信号に変換します。デジタルセンサーは、コネクタボードやIoTデバイス自体にADCを使用する必要がないため、ますます一般的になっています。 最も単純なデジタルセンサーはボタンやスイッチです。これはオンまたはオフの2つの状態を持つセンサーです。 ![ボタンに5ボルトが送られ、押されていないときは0ボルト、押されたときは5ボルトを返す様子](../../../../../translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.ja.png) IoTデバイスのGPIOピンなどは、この信号を0または1として直接測定できます。送信された電圧と返された電圧が同じであれば値は1、異なれば値は0となります。この信号を変換する必要はなく、1または0のいずれかしかありません。 > 💁 電圧は正確ではなく、センサーのコンポーネントにはある程度の抵抗があるため、通常は許容範囲があります。例えば、Raspberry PiのGPIOピンは3.3Vで動作し、1.8V以上の信号を1、1.8V未満の信号を0と読み取ります。 * ボタンに3.3Vが送られます。ボタンがオフの場合、0Vが返され、値は0になります。 * ボタンに3.3Vが送られます。ボタンがオンの場合、3.3Vが返され、値は1になります。 より高度なデジタルセンサーはアナログ値を読み取り、内蔵のADCを使用してデジタル信号に変換します。例えば、デジタル温度センサーはアナログセンサーと同様に熱電対を使用し、現在の温度での熱電対の抵抗による電圧の変化を測定します。ただし、アナログ値を返す代わりに、センサー内のADCが値を変換し、0と1の一連のデジタル信号としてIoTデバイスに送信します。この0と1は、ボタンのデジタル信号と同様に、1がフル電圧、0が0Vを表します。 ![アナログ読み取りをバイナリデータに変換し、0を0ボルト、1を5ボルトとしてIoTデバイスに送信するデジタル温度センサー](../../../../../translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.ja.png) デジタルデータを送信することで、センサーはより複雑になり、詳細なデータや暗号化されたデータを送信することが可能になります。例えば、カメラは画像をキャプチャし、その画像をデジタルデータとして送信します。通常はJPEGなどの圧縮形式で送信され、IoTデバイスで読み取られます。また、画像をフレームごとにキャプチャして送信するか、圧縮されたビデオストリームとして送信することで、ビデオをストリーミングすることもできます。 ## アクチュエーターとは何か アクチュエーターはセンサーとは逆の役割を果たします。IoTデバイスからの電気信号を物理的な世界との相互作用に変換します。例えば、光や音を発する、またはモーターを動かすといった動作です。 一般的なアクチュエーターには以下のようなものがあります: * LED - 点灯して光を発します。 * スピーカー - 信号に基づいて音を発します。単純なブザーから音楽を再生できるオーディオスピーカーまでさまざまです。 * ステッピングモーター - 信号を一定量の回転に変換します。例えば、ダイヤルを90°回転させるなど。 * リレー - 電気信号でオンまたはオフにできるスイッチです。IoTデバイスの小さな電圧で大きな電圧をオンにすることができます。 * スクリーン - より複雑なアクチュエーターで、マルチセグメントディスプレイに情報を表示します。シンプルなLEDディスプレイから高解像度のビデオモニターまでさまざまです。 ✅ 調べてみましょう。あなたのスマートフォンにはどのようなアクチュエーターが搭載されていますか? ## アクチュエーターの使用方法 以下のガイドに従って、センサーで制御されるアクチュエーターをIoTデバイスに追加し、IoTナイトライトを作成してください。このナイトライトは光センサーから光レベルを取得し、光レベルが低すぎる場合にLEDを点灯させます。 ![課題のフローチャート。光レベルを読み取り、チェックし、LEDを制御する流れを示す](../../../../../translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.ja.png) * [Arduino - Wio Terminal](wio-terminal-actuator.md) * [シングルボードコンピュータ - Raspberry Pi](pi-actuator.md) * [シングルボードコンピュータ - 仮想デバイス](virtual-device-actuator.md) ## アクチュエーターの種類 センサーと同様に、アクチュエーターもアナログとデジタルに分類されます。 ### アナログアクチュエーター アナログアクチュエーターはアナログ信号を受け取り、それを何らかの物理的な相互作用に変換します。この相互作用は供給される電圧によって変化します。 例として、家庭で使用される調光可能なライトがあります。このライトは供給される電圧によって明るさが変わります。 ![低電圧で暗く、高電圧で明るくなるライト](../../../../../translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.ja.png) センサーと同様に、実際のIoTデバイスはアナログではなくデジタル信号で動作します。つまり、アナログ信号を送信するには、IoTデバイスにデジタル-アナログ変換器(DAC)が必要です。このDACは、IoTデバイス自体に直接搭載されている場合もあれば、接続ボードに搭載されている場合もあります。これにより、IoTデバイスからの0と1のデジタル信号が、アクチュエータが使用できるアナログ電圧に変換されます。 ✅ IoTデバイスがアクチュエータが対応できる電圧を超える高い電圧を送信した場合、何が起こると思いますか? ⛔️ 実際に試さないでください。 #### パルス幅変調(Pulse-Width Modulation) IoTデバイスからのデジタル信号をアナログ信号に変換するもう一つの方法として、パルス幅変調(PWM)があります。これは、アナログ信号のように動作する短いデジタルパルスを多数送信する方法です。 例えば、PWMを使用してモーターの速度を制御することができます。 5Vの電源でモーターを制御していると想像してください。モーターに短いパルスを送信し、0.02秒間(200分の1秒)だけ電圧を高(5V)に切り替えます。その間にモーターは1/10回転、つまり36°回転します。その後、0.02秒間(200分の1秒)信号を停止し、低信号(0V)を送信します。このオンとオフのサイクルは0.04秒間続き、その後繰り返されます。 ![150RPMで回転するモーターのパルス幅変調](../../../../../translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.ja.png) これにより、1秒間に25回の0.02秒間の5Vパルスがモーターを回転させ、その後0.02秒間の0Vの停止が続きます。各パルスでモーターは1/10回転するため、モーターは1秒間に2.5回転します。つまり、デジタル信号を使用してモーターを1秒間に2.5回転、または150 [回転毎分(RPM)](https://wikipedia.org/wiki/Revolutions_per_minute)で回転させることができます(回転速度の非標準的な単位)。 ```output 25 pulses per second x 0.1 rotations per pulse = 2.5 rotations per second 2.5 rotations per second x 60 seconds in a minute = 150rpm ``` > 🎓 PWM信号が半分の時間オンで、半分の時間オフの場合、これを[50%デューティサイクル](https://wikipedia.org/wiki/Duty_cycle)と呼びます。デューティサイクルは、信号がオン状態にある時間の割合をオフ状態と比較して測定します。 ![75RPMで回転するモーターのパルス幅変調](../../../../../translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.ja.png) パルスのサイズを変更することでモーターの速度を変えることができます。例えば、同じモーターでサイクル時間を0.04秒のままにし、オンパルスを0.01秒に半減し、オフパルスを0.03秒に増やします。この場合、1秒間のパルス数(25)は同じですが、各オンパルスの長さが半分になります。半分の長さのパルスではモーターは1/20回転しかせず、1秒間に25パルスで1.25回転、つまり75RPMになります。デジタル信号のパルス速度を変更することで、アナログモーターの速度を半分にすることができます。 ```output 25 pulses per second x 0.05 rotations per pulse = 1.25 rotations per second 1.25 rotations per second x 60 seconds in a minute = 75rpm ``` ✅ モーターの回転を特に低速で滑らかに保つにはどうすればよいでしょうか?長いパルスと長い停止を少数送る方法と、非常に短いパルスと短い停止を多数送る方法のどちらを選びますか? > 💁 一部のセンサーもPWMを使用してアナログ信号をデジタル信号に変換します。 > 🎓 パルス幅変調についてさらに詳しくは、[Wikipediaのパルス幅変調ページ](https://wikipedia.org/wiki/Pulse-width_modulation)をご覧ください。 ### デジタルアクチュエータ デジタルアクチュエータは、デジタルセンサーと同様に、高電圧または低電圧で制御される2つの状態を持つか、内蔵のDACを持ち、デジタル信号をアナログ信号に変換することができます。 シンプルなデジタルアクチュエータの一例としてLEDがあります。デバイスがデジタル信号「1」を送信すると、高電圧が送られLEDが点灯します。デジタル信号「0」が送信されると、電圧が0Vに下がりLEDが消灯します。 ![0ボルトで消灯し、5Vで点灯するLED](../../../../../translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.ja.png) ✅ 他にどのようなシンプルな2状態のアクチュエータを思いつきますか?一例としてソレノイドがあります。これは電磁石で、ドアのボルトを動かしてロックやアンロックを行うなどの動作をすることができます。 より高度なデジタルアクチュエータ(例えばスクリーンなど)は、特定のフォーマットでデジタルデータを送信する必要があります。これらは通常、正しいデータを送信して制御を容易にするライブラリが付属しています。 --- ## 🚀 チャレンジ 前回と前々回のレッスンの課題は、自宅、学校、または職場にあるIoTデバイスをできるだけ多くリストアップし、それらがマイクロコントローラー、シングルボードコンピューター、またはその両方の組み合わせで構成されているかを判断することでした。 リストアップした各デバイスについて、それらに接続されているセンサーとアクチュエータは何ですか?これらのセンサーとアクチュエータの目的は何ですか? ## 講義後のクイズ [講義後のクイズ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/6) ## 復習と自主学習 * [ThingLearn](http://thinglearn.jenlooper.com/curriculum/)で電気と回路について学びましょう。 * [Seeed Studios Temperature Sensors guide](https://www.seeedstudio.com/blog/2019/10/14/temperature-sensors-for-arduino-projects/)でさまざまな種類の温度センサーについて学びましょう。 * [WikipediaのLEDページ](https://wikipedia.org/wiki/Light-emitting_diode)でLEDについて学びましょう。 ## 課題 [センサーとアクチュエータを調査する](assignment.md) **免責事項**: この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書が正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の利用に起因する誤解や誤認について、当方は一切の責任を負いません。