注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。

参加する理由

  • 専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。

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

  • 限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。

  • 特別割引: 最新製品を特別割引でお楽しみいただけます。

  • 季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。

👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!

1.6 モーター

はじめに

このプロジェクトでは、Fusion HAT+ を使用して DC モーターを制御し、時計回りおよび反時計回りに回転させる方法を学びます。


必要なもの

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

COMPONENT

PURCHASE LINK

DCモーター

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

以下の回路図は、モーターを制御するために必要な接続を示しています。

../_images/1.3.1_sch.png

配線図

../_images/1.3.1_bb.png

サンプルの実行

このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに用意されています。 以下の手順に従ってサンプルを実行してください。

cd ~/ai-lab-kit/python/
sudo python3 1.6_Motor.py

スクリプトを実行すると、ポート M0 に接続されたモーターがループ動作で開始と停止を繰り返します。 まず 0.5 秒間停止し、その後 −50% の出力で 1 秒間回転します。続いて再び 0.5 秒停止し、最後に 75% の出力で 1 秒間回転します。 このシーケンスは継続的に繰り返されます。プログラム終了時には、モーターは安全に停止します。


コード

以下の Python コードは、モーターの回転方向と動作タイミングを制御します。

#!/usr/bin/env python3
from time import sleep
from fusion_hat.motor import Motor

# Motor on port M0, reverse direction if needed
motor = Motor("M0", is_reversed=True)

try:
   while True:
      motor.power(0)
      sleep(0.5)

      motor.power(-50)
      sleep(1)

      motor.power(0)
      sleep(0.5)

      motor.power(75)
      sleep(1)

except KeyboardInterrupt:
   # Ctrl + C to stop
   print("\nStopped by user.")

finally:
   # Always stop the motor safely
   motor.stop()
   sleep(0.1)

コードの解説

  1. ライブラリのインポート

    fusion_hat ライブラリは GPIO の操作を簡素化し、time ライブラリは待機時間(ディレイ)を提供します。

    from time import sleep
    from fusion_hat.motor import Motor
    
  2. モーターの初期化

    Motor オブジェクトは M0 ピンを使用して作成されます。

    motor = Motor('M0', is_reversed=True)
    
  3. モーターの動作

    モーターの速度はそれぞれ 0、-50、75 に設定されています。sleep 関数は指定した時間だけプログラムを一時停止させます。

    try:
       # Loop forever
       while True:
          motor.power(0)       # Stop the motor
          sleep(0.5)           # Wait 0.5 seconds
    
          motor.power(-50)     # Run the motor at -50% power
          sleep(1)             # Run for 1 second
    
          motor.power(0)       # Stop again
          sleep(0.5)           # Wait 0.5 seconds
    
          motor.power(75)      # Run the motor at 75% power
          sleep(1)             # Run for 1 second
    

トラブルシューティング

  1. モーターが動作しない

    • 原因: 配線の誤り、または GPIO ピン設定の不備。

    • 解決方法: モーターに電源が供給されているか、また有効化(Enable)ピンが正しく接続されているかを確認してください。

  2. 一方向にしか回転しない

    • 原因: 正転または逆転用ピンの接続不良。

    • 解決方法: 各ピンが Fusion HAT+ にしっかり接続されていることを確認してください。

  3. モーターが停止せず回転し続ける

    • 原因: stop() 関数が正しく実行されていない可能性があります。

    • 解決方法: motor.stop() メソッドが呼び出されていることを確認してください。


拡張アイデア

  1. ユーザー操作による制御

    キーボード入力を使用して、ユーザーがリアルタイムでモーターを制御できるようにします。

    while True:
       num = int(input("The speed percentage (-100~100): "))
       if num >= -100 and num <= 100:
          motor.speed(num)
       else:
          print("Invalid action!")
    
  1. 時間指定によるモーター制御

    ユーザーが指定した時間だけモーターを動作させる機能を追加します。

    duration = int(input("Enter duration (seconds): "))
    motor.speed(50)
    sleep(duration)
    motor.stop()
    

まとめ

このプロジェクトでは、Fusion HAT+ を使用して DC モーターを制御する方法を紹介しました。 モーター制御の理解は、ロボットや動作を伴う電子プロジェクトを構築するうえで非常に重要な基礎となります。