### 4.3.1 スマート温度制御ファン #### 4.3.1.1 概要 ![Img](./media/top1.png) 室内温度が設定した基準値を超えると、スマートファンが作動して室温を快適な温度まで冷却します。さらに、OLED 表示は現在の室温とファンの動作状態をリアルタイムで表示し、直感的な温度制御のフィードバックをユーザーに提供します。 ![Img](./media/bottom1.png) #### 4.3.1.2 コンポーネントの知識 ![Img](./media/2top.png) **Microbit 温度センサー** ![Img](./media/j501.png) micro:bit メインボードは実際には専用の温度センサーを搭載しておらず、nRF52833 チップを用いて温度検出を行っています。そのため、検出値はプロセッサーの温度に近く、周囲温度とは多少のズレが生じる場合があります。 検出範囲は -40 ~ 105℃ です。 **OLED ディスプレイ** ![Img](./media/A636.png) OLED 技術は豊かな色表現、高いコントラスト、広い視野角という顕著な利点があり、特に黒色表現が優れ、鮮明で生き生きとした画像を提供します。 OLED 表示の各ピクセルはバックライトを必要とせず自発光するため、比較的低消費電力です。小型(0.96 インチ)、高解像度(128×64 ピクセル)、低消費電力であるため、ウェアラブル機器に非常に適しています。 ⚠️ **注意:** 本プロジェクトでは、OLED 表示モジュールの SDA インターフェースをピン P20 に、SCL をピン P19 に接続します。 **仕様:** - 動作電圧: DC 3.3V-5V - 動作電流: 30mA - インターフェース: ピンヘッダ間隔 2.54mm - 通信方式: I2C 通信 - 内部ドライバーチップ: SSD1306 - 解像度: 128×64 - 視野角: 150° 以上 **130 モーター** ![Img](./media/cou710.png) 130 モーター モジュールには、電磁誘導とローレンツ力に基づいて動作する直流モーターが搭載されています。主にステーター、ローター、整流子で構成されます。ステーターは固定磁場を発生し、ローター(電機子)はコイル巻線で構成され、通電時に磁場を生成します。ブラシと整流子を通ってローターのコイルに電流が流れると、ローターの磁場がステーターの磁場と相互作用してローレンツ力が発生し、ローターを回転させます。この回転中に整流子が電流の方向を切り替えることで、ローターに常に同じ方向の力が作用し続け、回転が維持されます。電磁誘導とローレンツ力により、直流モーターは電気エネルギーを機械エネルギーに変換します。 優れた速度制御性能と大きな始動トルクを持つため、直流モーターは電動工具、車両、家庭用電化製品などで広く使われています。 ![j124](./media/j124.png) 130 モーターは PWM による速度制御が可能です。使用時には制御のために 2 本のピンを接続する必要があります。パソコン冷却や産業生産など、ファン速度を調整する必要がある用途に適しています。小型、軽量で取り付けが簡単なため非常に実用的です。 **回路図:** ![Img](./media/cou712.png) HR1124S チップがモーターの駆動を補助します。ただし、モーターは大電流を必要とし、トランジスタでは駆動できず、ましてや IO ポートから直接駆動することはできません。モーターの両端に電圧を加えるだけで回転させることができます。電圧の方向により回転方向が変わります。定格電圧範囲内では、電圧が高いほどモーターは速く回転します。逆に電圧が低いほど回転は遅くなるか、場合によっては回転しないこともあります。 制御方式は、高・低レベルによる制御(回転と停止の制御)と PWM による回転速度の制御の 2 種類があります。 **仕様:** - 動作電圧: DC 5V - 動作電流: (Max)400mA@5V - 最大出力: 2W - 回転速度: (16000+10%) 回/分 @5V ![Img](./media/2bottom.png) #### 4.3.1.3 必要な部品 | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 main board ×1 | micro:bit shield ×1 | OLED display ×1 | |![Img](./media/motor.png) |![Img](./media/usb.png) |![Img](./media/4pin.png)| | 130 motor ×1 | micro USB cable ×1 | 4 pin wire ×2 | |![Img](./media/fan.png) |![Img](./media/batterycase.png)| ![Img](./media/AAbattery.png)| | fan ×1 | battery holder ×1 | AA battery(**self-prepared**) ×6 | #### 4.3.1.4 配線図 ⚠️ **配線の際は、必ず電線の色に注意してください。** | 130 motor | wire color | micro:bit shield pin | micro:bit board pin | | :-------: | :--------: | :------------------: | :-----------------: | | G | black | G | G | | V | red | V2 | V | | IN+ | blue | 2 | P2 | | IN- | green | 16 | P16 | | OLED display | wire color | micro:bit shield pin | micro:bit board pin | | :----------: | :--------: | :------------------: | :-----------------: | | GND | black | G | G | | VCC | red | V2 | V | | SDA | blue | 20 | P20 | | SCL | green | 19 | P19 | ![Img](./media/couj1.png) #### 4.3.1.5 コードフロー ![Img](./media/flow-chart-01.png) #### 4.3.1.6 テストコード ⚠️ **Tip 1: Microbit ボードにコードをダウンロードする前に、ライブラリファイル “oled_ssd1306\.py” をインポートしてください。参照: ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Tip 2: if() 条件内の閾値 28 は実際の状況に応じて変更できます。** **全コード:** ```Python """ Theme: smart temperature control fan Function: OLED displays the temperature value and the microbit temperature sensor controls the on and off of the fan Compiling IDE: MU 1.2.0 Author: https://docs.keyestudio.com """ # import related libraries from microbit import * from oled_ssd1306 import * display.show(Image.HAPPY) # LED matrix displays a happy pattern # initialize and clear oled initialize() clear_oled() while True: clear_oled() # clear OLED Temperature = temperature() # Read microbit temperature sensor add_text(0, 0, "Temperature:") # Display the character string in the corresponding position of OLED add_text(13, 0, str(Temperature) + " C") # Display temperature in the corresponding position of OLED if Temperature >= 28: # when Temperature >= 28℃, fan rotates add_text(0, 2, "Fan on") # Display the character string in the corresponding position of OLED pin2.write_analog(500) # set P2 pin to analog 500 pin16.write_analog(0) # set P16 pin to analog 0 else: # or fan does not work add_text(0, 2, "Fan off") # Display the character string in the corresponding position of OLED pin2.write_analog(0) # set P2 pin to analog 0 pin16.write_analog(0) # set P16 pin to analog 0 sleep(1000) ``` ⚠️ **Tip 3: OLED 表示では ℃ が文字化けするため、本コードでは C を使用しています。** ![Img](./media/line1.png) **簡単な説明:** ① microbit と oled_ssd1306 のライブラリをインポートします。 ```Python from microbit import * from oled_ssd1306 import * ``` ② Microbit の 5×5 LED マトリックスが ![Img](./media/ab3.png) を表示します。 ```Python display.show(Image.HAPPY) # LED matrix displays a happy pattern ``` ③ OLED のピクセルを初期化し、OLED をクリアします。 ```Python initialize() # initialize oled clear_oled() # clear oled ``` ④ 温度値を読み取り、OLED に表示します。 ```Python Temperature = temperature() # Read microbit temperature sensor add_text(0, 0, "Temperature:") # Display the character string in the corresponding position of OLED add_text(13, 0, str(Temperature) + " C") # Display temperature in the corresponding position of OLED ``` ⑤ 判断文: if()...else... センサーで検出した温度が 28℃ 以上のとき、OLED に "Fan on" と表示され、ファンが回転します。それ以外では OLED に "Fan off" と表示され、ファンは動作しません。 ```Python if Temperature >= 28: # when Temperature >= 28℃, fan rotates add_text(0, 2, "Fan on") # Display the character string in the corresponding position of OLED pin2.write_analog(500) # set P2 pin to analog 500 pin16.write_analog(0) # set P16 pin to analog 0 else: # or fan does not work add_text(0, 2, "Fan off") # Display the character string in the corresponding position of OLED pin2.write_analog(0) # set P2 pin to analog 0 pin16.write_analog(0) # set P16 pin to analog 0 ``` ⑥ 1000ms(1 秒)待機します。 ```Python sleep(1000) ``` #### 4.3.1.7 テスト結果 ![Img](./media/4top.png) 配線と micro USB ケーブルでの通電後、外部電源(6 本の AA 電池)を接続して十分な電力供給を確保し、“Flash” をクリックしてコードを micro:bit ボードにダウンロードします。 ![Img](./media/A123.png) テストコードをアップロードした後、micro:bit の裏面にあるリセットボタンを押します。 ![Img](./media/A455.png) オンボードの 5×5 LED マトリックスが ![Img](./media/ab3.png) を表示し、OLED は温度とファン状態をリアルタイムで表示します。温度が 28℃ を超えるとファンが回転し、それ以下ではファンは動作しません。 ![Img](./media/dongtu-1.gif) ⚠️ **注意: OLED 表示では ℃ が文字化けするため、本コードでは C を使用しています。** ⚠️ **注意: 実験で使用されているブロックはこのキットに含まれていません。** (**Tip:** 結果が表示されない場合は、micro:bit ボードのリセットボタンを押してください。) ![Img](./media/4bottom.png)