Arduino

Arduino UNO R4 MINIMAでSG90サーボが動かない原因と解決方法【エラー対処】

【Arduino UNO R4 MINIMA】SG90サーボが使えないときの対処法

Arduino UNO R4 MINIMAでSG90サーボモータを動かそうとしたらエラーが出て動かない、という経験はありませんか? UNO R3では問題なく動いていたのに、R4 MINIMAに切り替えたとたんにトラブルが発生するケースが報告されています。この記事ではその原因と具体的な解決方法を丁寧に解説します。

純粋なPython記事ではありませんが、「Pythonで顔認識してサーボモータでカメラを顔の方向へ向けたい」という制作過程でつまづいたトラブルを解決できましたので、同じ悩みを持つ方のために公開します。あくまで一つの解決策ですが、お役に立てれば幸いです。

実行環境

まず、本記事での動作確認環境を紹介します。

  • OS:Windows 10 / 11
  • Arduino IDE:2.2.1
  • Arduino本体:UNO R4 MINIMA
  • サーボモータ:SG90
  • Python:3.11

上記は執筆時点での最新バージョンです。動作確認にはPythonのinput()メソッドからサーボの回転角度を指示するスクリプトを使用しています。

UNO R3とUNO R4 MINIMAの違い【トラブルの根本原因】

今回のトラブルを理解するうえで、UNO R3とUNO R4 MINIMAの技術的な違いを把握しておくことが重要です。

マイクロコントローラの変更

UNO R3は8ビットのATMega328Pマイコンを搭載していましたが、UNO R4 MINIMAは32ビットのルネサス RA4M1マイコンを搭載しています。

この変更によりクロック速度・メモリ・フラッシュストレージがそれぞれ3〜16倍に向上しています。これはWindowsのCore i3からi7へのアップグレードのような話ではなく、MacのCPUがIntelからAppleシリコン(M1)に切り替わったほどのアーキテクチャ変更です。

つまり、以前のマイコン向けに書かれたコードや使用していたライブラリが、そのままでは動作しない場合があります。今回のSG90サーボトラブルも、このマイコン変更が直接の原因です。

PWM(パルス幅変調)出力の仕様変更

SG90のようなサーボモータはPWM信号で角度を制御します。UNO R3とUNO R4 MINIMAではPWM出力の内部実装が異なるため、従来のServoライブラリをそのまま使用すると正常に動作しない・エラーになるケースがあります。

トラブルの状況:どんなエラーが出るのか

Arduino UNO R4 MINIMAでSG90サーボをR3と同じスケッチで動かそうとすると、以下のような問題が発生します。

  • サーボが全く動かない(無反応)
  • コンパイルは通るが動作しない
  • サーボが震える・異音がする
  • シリアル通信との併用でクラッシュする

解決方法:Arduino UNO R4 MINIMAでSG90を動かす手順

解決策①:Servoライブラリのバージョンを確認・更新する

まず、Arduino IDEのライブラリマネージャーでServoライブラリが最新版になっているか確認してください。UNO R4 MINIMAのRA4M1マイコンに対応したServoライブラリは、バージョンによってはR4をサポートしていない場合があります。

  1. Arduino IDE上部メニュー →「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」
  2. 検索欄に「Servo」と入力
  3. 「Servo by Michael Margolis, Arduino」を最新バージョンに更新

解決策②:ボードマネージャーを最新にする

UNO R4 MINIMAのボードパッケージが古いと、PWM制御が正常に機能しないことがあります。

  1. Arduino IDE →「ツール」→「ボード」→「ボードマネージャー」
  2. 「Arduino UNO R4 Boards」を検索
  3. 最新バージョンへ更新

解決策③:動作確認用Arduinoスケッチ

ライブラリとボードパッケージを更新したら、以下のシンプルなスケッチで動作を確認してみましょう。

#include <Servo.h>

Servo myServo;

void setup() {
  Serial.begin(9600);
  myServo.attach(9);  // サーボをデジタルピン9に接続
  Serial.println("サーボ初期化完了。角度(0〜180)を入力してください:");
}

void loop() {
  if (Serial.available() > 0) {
    int angle = Serial.parseInt();
    if (angle >= 0 && angle <= 180) {
      myServo.write(angle);
      Serial.print("角度を設定しました: ");
      Serial.println(angle);
    } else {
      Serial.println("0〜180の範囲で入力してください");
    }
  }
}

このスケッチをUNO R4 MINIMAに書き込み、シリアルモニターから角度(例:90)を送信してサーボが動けば正常に動作しています。

解決策④:Pythonからシリアル通信でサーボを制御する

Pythonからサーボを制御したい場合は、pyserialライブラリを使用してArduinoにシリアル通信で角度を送信します。

import serial
import time

# COMポートはご自身の環境に合わせて変更してください(例: COM3, /dev/ttyUSB0)
ser = serial.Serial('COM3', 9600, timeout=1)
time.sleep(2)  # Arduino起動待ち

print("SG90サーボ制御 (Pythonから)")
print("終了するには 'q' を入力してください")

while True:
    user_input = input("角度を入力してください (0〜180): ")
    if user_input.lower() == 'q':
        print("終了します")
        break
    try:
        angle = int(user_input)
        if 0 <= angle <= 180:
            ser.write(f"{angle}\n".encode())
            time.sleep(0.5)
        else:
            print("0〜180の範囲で入力してください")
    except ValueError:
        print("数値を入力してください")

ser.close()

pyserialがインストールされていない場合は以下のコマンドでインストールしてください。

pip install pyserial

配線方法:SG90とArduino UNO R4 MINIMAの接続

SG90サーボモータのケーブルは3本(茶・赤・橙)です。Arduino UNO R4 MINIMAへの接続は以下のとおりです。

SG90ケーブル色 接続先(Arduino) 役割
茶色 GND グランド
赤色 5V 電源(5V)
橙色 デジタルピン9 PWM信号

注意: 複数のサーボモータを同時に使用する場合、ArduinoのUSB給電だけでは電力不足になる場合があります。その際は外部電源(単三電池4本など)を用意することをおすすめします。

まとめ:Arduino UNO R4 MINIMAでSG90を使うポイント

Arduino UNO R4 MINIMAでSG90サーボが動かない問題の原因と解決方法をまとめます。

  • 原因:マイコンがATMega328P(8bit)からルネサスRA4M1(32bit)に変更されたため、PWM仕様が異なる
  • 解決策①:Arduino IDEのServoライブラリを最新版に更新する
  • 解決策②:ボードマネージャーの「Arduino UNO R4 Boards」を最新版に更新する
  • 解決策③:Arduinoスケッチとシリアル通信で動作確認する
  • 解決策④:Pythonのpyserialでシリアル通信を介して制御する

UNO R3で動いていたコードがR4 MINIMAで動かない場合は、まずライブラリとボードパッケージのアップデートを試してみてください。この記事が同じトラブルで悩む方の助けになれば幸いです。

ArduinoとPythonを組み合わせた制御については、以下の関連記事もぜひご参照ください。

PythonとArduinoをシリアル通信で連携させる基本ガイド(関連記事)

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です