.. note:: こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 愛好者コミュニティ (Facebook) へようこそ! Raspberry Pi、Arduino、ESP32 を仲間と一緒にさらに深く学びましょう。 **参加する理由** - **専門的なサポート**: 販売後の問題や技術的な課題をコミュニティとチームで解決。 - **学びと共有**: 技術やチュートリアルを交換し、スキルを向上。 - **限定プレビュー**: 新製品発表や先行情報に早期アクセス。 - **特別割引**: 新製品を特別価格で購入可能。 - **イベント・プレゼント企画**: プレゼントや季節キャンペーンに参加。 👉 一緒に探求し、創造しましょう。今すぐ [|link_sf_facebook|] をクリックして参加! .. _3.1.7_c_mcp3008: 3.1.7 過熱モニター (MCP3008) ================================== .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left キットのバージョンによって **ADC0834** または **MCP3008** が含まれています。 該当するセクションを選択してください。 はじめに ------------------- 工場などで回路の過熱が発生した際に警報を出したり、機械を自動的に停止させたい場合があります。 このプロジェクトでは、サーミスタ・ジョイスティック・ブザー・LED・LCD を使用して、しきい値を調整可能なスマート温度監視装置を作成します。 必要な部品 ------------------------------ このプロジェクトには以下の部品が必要です。 .. image:: ../img/list2_Overheat_Monitor.png :align: center 部品をまとめて購入するのが便利です。リンクはこちら: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - 名前 - キット内数量 - リンク * - Raphael Kit - 337 - |link_Raphael_kit| 以下から個別に購入することもできます。 .. list-table:: :widths: 30 20 :header-rows: 1 * - 部品紹介 - 購入リンク * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_led` - |link_led_buy| * - :ref:`cpn_joystick` - \- * - :ref:`cpn_mcp3008` - \- * - :ref:`cpn_transistor` - |link_transistor_buy| * - :ref:`cpn_i2c_lcd` - |link_i2clcd1602_buy| * - :ref:`cpn_thermistor` - |link_thermistor_buy| * - :ref:`cpn_buzzer` - \- 回路図 -------------------------- ============ ======== ======== === T-Board 名 physical wiringPi BCM SPICE0 Pin 24 10 8 SPIMOSI Pin 19 12 10 SPIMISO Pin 21 13 9 SPISCLK Pin 23 14 11 GPIO22 Pin 15 3 22 GPIO23 Pin 16 4 23 GPIO24 Pin 18 5 24 SDA1 Pin 3 SCL1 Pin 5 ============ ======== ======== === .. image:: ../img/Schematic_three_one8.png :align: center 実験手順 ----------------------------- **ステップ 1:** 回路を組み立てます。 .. image:: ../img/july24_3.1.8_overheat_monitor_mcp3008.png **ステップ 2:** コードのあるフォルダに移動します。 .. raw:: html .. code-block:: cd ~/raphael-kit/c/3.1.7-2/ **ステップ 3:** コードをコンパイルします。 .. raw:: html .. code-block:: gcc 3.1.7_OverheatMonitor.c -lm -lwiringPi **ステップ 4:** 実行ファイルを実行します。 .. raw:: html .. code-block:: sudo ./a.out コードを実行すると、現在温度と高温しきい値 **40** が **I2C LCD1602** に表示されます。 現在温度がしきい値を超えると、ブザーと LED が作動して警告します。 **ジョイスティック** は高温しきい値を調整するために使用します。 ジョイスティックを X 軸または Y 軸方向に倒すと、しきい値が上下に調整されます。 ジョイスティックを押すとしきい値は初期値にリセットされます。 .. note:: * 「wiringPi.h: No such file or directory」というエラーが出た場合は :ref:`install_wiringpi` を参照してください。 * 「Unable to open I2C device: No such file or directory」というエラーが出た場合は :ref:`i2c_config` を参照し、I2C を有効にして配線を確認してください。 * コードや配線が正しいのに LCD が表示しない場合は、裏面のポテンショメータを回してコントラストを調整してください。 コード解説 ---------------------- .. code-block:: c int read_ADC(int channel) { ... } MCP3008 の指定チャネル (CH0〜CH7) から 10 ビットのアナログ値を読み取り、0〜1023 の整数値を返します。 .. code-block:: c int get_joystick_value() { ... } ジョイスティックの X 軸・Y 軸のアナログ値を読み取り、方向に応じて整数値を返します。 .. code-block:: c void upper_tem_setting() { ... } ジョイスティックを使用して高温しきい値を調整します。方向を押し続けても連続変化しないようにしています。 .. code-block:: c double temperature() { ... } CH0 に接続されたサーミスタのアナログ値を読み取り、Steinhart–Hart 式を用いて摂氏温度を計算します。 .. code-block:: c void monitoring_temp() { ... } 現在温度としきい値を LCD に表示し、温度がしきい値を超えた場合にブザーと LED を動作させます。 .. code-block:: c void setup_all() { ... } LCD、SPI、ジョイスティックボタン、ブザー、LED 用の GPIO を初期化します。 .. code-block:: c int main(void) { ... } メインループでは次の 2 つのモードを切り替えます: 1. 温度監視 2. ジョイスティックによるしきい値調整 ジョイスティックボタンが押されて離されたとき (立ち上がりエッジ) にモードが切り替わります。