• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Raspberry Pi / Raspberry Pi はじめてのラズパイ:サーボモータを制御する

Raspberry Pi はじめてのラズパイ:サーボモータを制御する

2020年11月18日 by STEMSHIP コメントを書く

モーターのシャフトの回転角度を正確に制御したい場合には、サーボモーターも使用できます。
サーボモーターは電子制御回路とシャフトの位置を検出するための部品が内蔵されており、どの位置にいても間違いなく目的の位置に移動させることができます。モーターが自分で基準点を持っているので、基準点のスイッチや外付けのセンサーがなくても位置を判断できます。

サーボモーターの原理

サーボモーターはここまでで紹介したモーター(ブラシ付き/ブラシレスモータ、ステッピングモータ)とは異なり、連続回転させることができません。
多くのサーボモーターはシャフトを0~180°の範囲で回転させる仕様になっています。
(一部、図1のSG90-HVのように連続回転させられるサーボモーターもあります。)

図1 サーボモータ(SG90-HV)

メーターの針や自動車のワイパー、踏切の遮断機のように、同じ範囲を行ったり来たりする、といえば想像しやすいでしょうか。

サーボモーターという名称は、本来特定のモーターを指し示すものではなく、このような制御方式をとっているモーター全般を指すものです。また、モーターのシャフトに歯車を取り付けてトルクを得るということも行われます。

サーボモーターは位置決めの精度が高く、過負荷などで位置がずれてしまっても問題なく目的の位置に動かすことができるというメリットがあるので、産業機械などの制御によく利用されています。小型のサーボモーターであれば、追加の部品なしにRaspberry Piに直接つないで動作させられます。

  • SG-90HVの分解写真
  • サーボモータの構造

サーボモータの接続とプログラミング

サーボモーターには3本の電源線があります。
赤と黒は電源ですのでそれぞれ3.3V(または5V)ピンとGNDピンに接続します。
黄色などの信号線にはPWM信号を入力するので、GPIO18ピンに接続します。

  • 小型のサーボモーターとRaspberry Piを接続

以下のpythonプログラムで、サーボモーターを動作させることができます。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)

servo = GPIO.PWM(18, 50)
servo.start(7.5)

servo.ChangeDutyCycle(5)
time.sleep(1)
servo.ChangeDutyCycle(10)
time.sleep(1)
servo.ChangeDutyCycle(5)
time.sleep(1)
servo.ChangeDutyCycle(10)
time.sleep(1)
servo.ChangeDutyCycle(5)
time.sleep(1)

GPIO.cleanup()

PWM信号の周波数と、デューティ比(ON時間とOFF時間の比率)と回転角度との対応はサーボモーターのデータシートを確認します。

ここでは、1パルスの長さは20ミリ秒、つまり50HzのPWM信号としました。
シャフトの位置は1パルス中のON時間の長さによって決まります。今回の例では1ミリ秒とすると左端、2ミリ秒とすると右端になりました。

デューティ比で言うと、5%で左側、10%で右端となります。
例えば中間位置に止めたい場合には、ON時間を7.5%の1.5ミリ秒とすればよいということになります。

サーボモーターをRaspberry Piに直接接続した状態で、シャフトに過負荷をかけるなどすると大きな電流が流れてRaspberry Piがダメージを受けることがあります。
大きなサーボモーターは直接接続せず、別に電源を用意して実験を行ってください。


Filed Under: Raspberry Pi 関連タグ:サーボモータ

Reader Interactions

コメントを残す コメントをキャンセル

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM