注釈

こんにちは、FacebookのSunFounder Raspberry Pi & Arduino & ESP32愛好者コミュニティへようこそ!Raspberry Pi、Arduino、ESP32について、他の愛好者と一緒に深く学びましょう。

参加する理由

  • 専門家のサポート: 購入後の問題や技術的な課題をコミュニティとチームのサポートで解決できます。

  • 学びと共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。

  • 独占プレビュー: 新製品の発表や先行情報をいち早く入手できます。

  • 特別割引: 最新製品に対する独占割引を楽しめます。

  • 祝祭プロモーションとギブアウェイ: ギブアウェイや季節限定のプロモーションに参加できます。

👉 一緒に探求し、創造しませんか?今すぐ [こちら] をクリックして参加しましょう!

3.5 小型ファン(DCモーター)の制御

このレッスンでは、 DCモーター (小型ファンのようなもの)をRaspberry Pi Pico 2と L293Dモータードライバ を使用して制御する方法を学びます。L293Dを使用すると、モーターの回転方向を制御できます—時計回りと反時計回りの両方です。DCモーターはPicoが直接供給できる電流以上を必要とするため、外部電源を使用してモーターに安全に電力を供給します。

必要なもの

このプロジェクトでは、以下のコンポーネントが必要です。

セットを購入するのが便利です。リンクはこちら:

名称

セット内容

リンク

Newton Lab Kit

450+

Newton Lab Kit

以下のリンクから個別に購入することもできます。

SN

コンポーネント

数量

リンク

1

Raspberry Pi Pico 2

1

購入

2

Micro USBケーブル

1

3

ブレッドボード

1

購入

4

ジャンパーワイヤー

数本

購入

5

IC L293D

1

6

DCモーター

1

購入

7

電源モジュール

1

8

9V電池

1

回路図

sch_motor

L293Dはモータードライバーチップで、ENはL293Dが動作するために5Vに接続されています。1Aと2AはそれぞれGP15とGP14に接続されており、1Yと2Yはモーターの両端に接続されています。

Y(出力)はA(入力)と同相なので、GP15とGP14に異なるレベルを与えると、モーターの回転方向を変更できます。

配線図

wiring_motor

この回路では、ボタンがRUNピンに接続されていることがわかります。これは、モーターが高電流で動作するため、Picoがコンピュータから切断される可能性があり、ボタンを押すことで(Picoの RUN ピンに低レベルが入力され)リセットする必要があるからです。

DCモーターは高電流を必要とするため、ここでは安全のために電源モジュールを使用してモーターに電力を供給します。

コードの記述

モーターを制御するためのMicroPythonプログラムを作成しましょう。

注釈

  • 3.5_small_fan.pynewton-lab-kit/micropython から開くか、コードをThonnyにコピーして、「実行」ボタンを押すか、F5キーを押して実行します。

  • 正しいインタープリタ(MicroPython (Raspberry Pi Pico).COMxx)が選択されていることを確認してください。

import machine
import utime

# 制御用ピンの定義
motor_in1 = machine.Pin(14, machine.Pin.OUT)
motor_in2 = machine.Pin(15, machine.Pin.OUT)

def rotate_clockwise():
    motor_in1.high()
    motor_in2.low()

def rotate_counterclockwise():
    motor_in1.low()
    motor_in2.high()

def stop_motor():
    motor_in1.low()
    motor_in2.low()

while True:
    rotate_clockwise()
    utime.sleep(1)
    stop_motor()
    utime.sleep(1)
    rotate_counterclockwise()
    utime.sleep(1)
    stop_motor()
    utime.sleep(1)

コードが実行されると、モーターは1秒間時計回りに回転し、その後1秒間停止し、次に1秒間反時計回りに回転し、再度1秒間停止するというループを繰り返します。

コードの理解

  1. ピンの初期化:

    motor_in1motor_in2 は、それぞれGP14とGP15に接続され、モーターの回転方向を制御します。

    motor_in1 = machine.Pin(14, machine.Pin.OUT)
    motor_in2 = machine.Pin(15, machine.Pin.OUT)
    
  2. 関数の定義:

    • rotate_clockwise(): motor_in1 をHighに、 motor_in2 をLowに設定してモーターを時計回りに回転させます。

    • rotate_counterclockwise(): motor_in1 をLowに、 motor_in2 をHighに設定して反時計回りに回転させます。

    • stop_motor(): motor_in1motor_in2 の両方をLowに設定してモーターを停止させます。

  3. メインループ:

    モーターは時計回りに回転し、停止し、反時計回りに回転し、再度停止します。それぞれ1秒間ずつ繰り返されます。

    while True:
        rotate_clockwise()
        utime.sleep(1)
        stop_motor()
        utime.sleep(1)
        rotate_counterclockwise()
        utime.sleep(1)
        stop_motor()
        utime.sleep(1)
    

トラブルシューティングのヒント

  • プログラム停止後もモーターが回転し続ける:

    プログラムを停止してもモーターが回転し続ける場合、Picoをリセットする必要があります。RUNピンをGNDに一時的に接続することで、Picoをリセットできます。

    wiring_run_reset

  • Picoが切断される、または応答しなくなる:

    モーターが過剰な電流を引き込んでいる可能性があり、電圧の変動を引き起こしているかもしれません。モーターには別の電源を使用し、すべてのグラウンドが接続されていることを確認してください。

結論

このレッスンでは、L293DモータードライバとRaspberry Pi Pico 2を使用してDCモーターを制御する方法を学びました。これでモーターの回転方向を制御できるようになり、小型ファンやモーター駆動のデバイスなど、さまざまなプロジェクトを作成できます。

次のステップ

  • 速度制御: PWM(パルス幅変調)を使用してモーターの速度を制御する方法を試してみましょう。EN1ピンをPWM対応のGPIOピンに接続します。

  • 複数モーターの制御: L293Dの他のチャンネルを使用して、追加のモーターを制御します。

  • センサー統合: センサーを組み合わせて、入力(例えば、温度や光)に基づいてモーターを制御します。