Help us understand the problem. What is going on with this article?

Raspberry Piに360度回転するサーボモーターを取り付けて移動できるようにする

趣旨 : ラズパイを移動できるようにしよう!

Raspberry Piを移動できるようにすると、作れるモノが増えて楽しいです。移動できるようにするためには、ロボットキットなどを購入する方法もありますが、部品をいくつか購入して、自作することもできます。

作業手順

  1. Raspberry Piの初期設定 (他にたくさん記事があるので、ここでは書きません)
  2. 必要な部品をそろえる
  3. ボディの作成
  4. GPIOの制御
  5. おまけ (Flaskでウェブから操作できるようにする)

2. 必要な部品をそろえる

必要な部品
- Raspberry Pi
- MicroSDカード
- Raspberry Pi用ケース
- バッテリー(Anker PowerCore 10000)
- MicroUSBケーブル
- MDF4mm
- タイヤ付き360度サーボモーター(FS90R)
- M3-10mmトラスネジ x 4
- M3ナット x 4
- M2-10小ネジ x 4
- M2ナット x 4

Raspberry Piを持っていれば、追加で購入するのは、Raspberry Pi用のケース、モバイルバッテリー、360度サーボモーター、ネジ類です。

3. ボディの作成

Githubのページにボディのデータを置いているのでお使いください。ボディのデータはpdfになっているので、このデータをレーザー加工業者に渡すか、レーザー加工サービスが利用できる場所で加工します。素材は厚さが4mmであれば何でもよいです。上の写真はMDFを利用しています。デザインデータは上の部品表に載せているバッテリーとRaspberry Pi用のケースを利用してつくるように設計しています。他のケースやバッテリーを使うとサイズが合わないのでご注意ください

レーザー加工ができるサービスの例
- グラフィック
- FabCafe
- MakerSpace / HackerSpace

4. GPIOの制御

Raspberry PiのGPIOをPythonで制御するようにしました。PythonでGPIOを制御するためのライブラリはいくつかあるようで、最初Rpi.GPIOライブラリを利用しましたが、360度サーボの正転、逆転が指定した方向と逆に動くことがありました。そのためpigpioというライブラリを利用します。pigpioのインストール手順は以下の通り。

sudo apt install pigpio
sudo pip3 install pigpio
# デーモンを動かす
sudo pigpiod

pigpioはデーモンを動かす必要があるので、sudo pygpiodを実行して、デーモンを動かした状態でPythonから利用します。

以下のようなスクリプトを書いてテストします。Python3を使ってます。2秒間正転、2秒間逆転して、止まります。

import pigpio
import time

# サーボモーターをGPIOの18につないで使います
servo = 18

pi = pigpio.pi()

# ピンを出力に設定
pi.set_mode(servo, pigpio.OUTPUT)

# 2秒間正転 (FS90Rは1msのパルスで正転)
pi.set_servo_pulsewidth(servo, 1000)

time.sleep(2)

# 2秒間逆転 (FS90Rは2msのパルスで逆転)
pi.set_servo_pulsewidth(servo, 2000)

time.sleep(2)

# 停止 (FS90Rは1.5msのパルスで停止)
pi.set_servo_pulsewidth(servo, 1500)

# 終了
pi.stop()

サーボモーターの仕様はAdafruitのページに載ってます。
https://www.adafruit.com/product/2442

5. おまけ (Flaskでウェブから操作できるようにする)

import pigpio
import time

from flask import Flask, redirect, render_template, url_for

app = Flask(__name__)


@app.route('/')
def home():
    return render_template('index.html')


@app.route('/forward')
def forward():
    pi.set_servo_pulsewidth(left_out, 1000)
    pi.set_servo_pulsewidth(right_out, 2000)
    time.sleep(2)
    pi.set_servo_pulsewidth(left_out, 1480)
    pi.set_servo_pulsewidth(right_out, 1480)
    return redirect(url_for('home'))


@app.route('/backward')
def backward():
    pi.set_servo_pulsewidth(left_out, 2000)
    pi.set_servo_pulsewidth(right_out, 1000)
    time.sleep(2)
    pi.set_servo_pulsewidth(left_out, 1480)
    pi.set_servo_pulsewidth(right_out, 1480)
    return redirect(url_for('home'))


@app.route('/right')
def right():
    pi.set_servo_pulsewidth(left_out, 2000)
    pi.set_servo_pulsewidth(right_out, 2000)
    time.sleep(0.3)
    pi.set_servo_pulsewidth(left_out, 1480)
    pi.set_servo_pulsewidth(right_out, 1480)
    return redirect(url_for('home'))


@app.route('/left')
def left():
    pi.set_servo_pulsewidth(left_out, 1000)
    pi.set_servo_pulsewidth(right_out, 1000)
    time.sleep(0.3)
    pi.set_servo_pulsewidth(left_out, 1480)
    pi.set_servo_pulsewidth(right_out, 1480)
    return redirect(url_for('home'))


if __name__ == '__main__':
    pi = pigpio.pi()

    left_out = 18
    right_out = 19

    pi.set_mode(left_out, pigpio.OUTPUT)
    pi.set_mode(right_out, pigpio.OUTPUT)

    app.run(host='0.0.0.0', port=80)

終わりに

Githubにデータとスクリプトを置いてます。

mio_k
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした