サーボモーターSG90とRaspberry Pi Zero WHで金魚にエサをやる

公式Raspberry Pi OS

使用するのは「OSOYOO マイクロサーボモーターSG90」という格安のサーボモーターです。

電子工作のキットに含まれていて、とても小さな実験用のモーターです。それでも多少のことなら実用的に使えそうです。

意外と力もあるので、そんなに重たくない物なら動かせます。

ネットにはこの制御についてたくさん記事があります。

その中から、目的もドンピシャで、一番簡単なコードで紹介されていた記事がQiitaにありました。

今回はそのまま使わせていただきます。

https://qiita.com/elyoshio92/items/b2e7a7728875ebebe542

このサーボモーターSG90の制御に関してこちらの記事通りで間違いありません。だから、コピペするだけでOKです。ここではちょっと補足だけしています。詳しくは元のサイトで読んでください。

GPIOとの接続

このSG90は3本の線が出ています。

サイトによってはGPIOの番号が色々と出てきます。いくつか試したのですけど、やはりこの参考にしたサイトの通り、電源とGND以外のデータ通信については、GPIO14でOKです。

  • 赤色が電源(5V)へ
  • 茶色がGNDへ
  • オレンジが通信のGPIO14へ
丸で囲った3箇所へ接続しました

Pythonプログラムコード

Pythonプログラムを用意します。

適当な場所(ユーザーフォルダなど)で新規に.pyファイルを作ります。

sudo nano sg90.py

基本は元のサイトで紹介されているコードをコピペでOKです。

import RPi.GPIO as GPIO
import time

INTERVAL = 0.6
PIN = 14
FREQ = 50

GPIO.setmode(GPIO.BCM)

GPIO.setup(PIN, GPIO.OUT)
servo = GPIO.PWM(PIN, FREQ)

#init
servo.start(0.0)

for i in range(2):
  servo.ChangeDutyCycle(2.5)
  time.sleep(INTERVAL)

  servo.ChangeDutyCycle(12.0)
  time.sleep(INTERVAL)

GPIO.cleanup()

これ、思ったのはLチカ同様に非常に簡単なうえ、短いコードなので初心者に最適ですね!感謝!

角度を理解する

電源入れた時にGPIOに接続していたら、勝手に動いてちょっとズレてしまいました。手で無理矢理戻しても良いのですけど、せっかくなのでプログラム部分をイジって試してみましょう。

後半部分のfor文前に角度で遊んでみます。

for文をコメントアウトして、その前に1回だけ動作するようにします。

〜後半部分
#init
servo.start(0.0)

servo.ChangeDutyCycle(2.5)
time.sleep(INTERVAL)

#for i in range(2):
#  servo.ChangeDutyCycle(2.5)
#  time.sleep(INTERVAL)

#  servo.ChangeDutyCycle(10.0)
#  time.sleep(INTERVAL)

GPIO.cleanup()

servo.ChangeDutyCycle(2.5)とある2.5の部分が動く角度となります。正しくは電流量です。

ちょっと理解しにくいなと思ったのですけど、簡単なんです。

左水平位置が12.0、垂直方向から右水平に向かって数値が小さくなり、右水平位置が2.5です。垂直方向が7.5となります。

範囲は2.5〜12.0で指定すれば、あまり難しく考えなくても動作します。

角度ではないですが、決まった電流量で決まるので、正しくはありませんが座標みたいに考えれば簡単です。

左水平位置にしたいので、12.0を指定してあげれば良いだけです。

〜後半部分
#init
servo.start(0.0)

servo.ChangeDutyCycle(12.0)
time.sleep(INTERVAL)

#for i in range(2):
#  servo.ChangeDutyCycle(2.5)
#  time.sleep(INTERVAL)

#  servo.ChangeDutyCycle(10.0)
#  time.sleep(INTERVAL)

GPIO.cleanup()

書き換えたら保存して実行します。

python sg90.py

このように長い方が左側で水平になりました。

\ Raspberry Pi 4はメモリー8GBが最新 /

【セット概要】「データーベース」「Webサーバー」「NAS」「AI処理」「4K画像での2画面処理」などの高負荷がかかる処理を、長時間稼働させるのに必要な負荷テスト行い、当社で厳選した高品質なパーツを組み合わせたセットです。高品質なAnker製USB電源の採用、トラブルの原因になりやすい電源周りをデジタルモニターリングできるをType-Cケーブル、Raspberry財団認定モデル 高速タイプ 100MB/sec 128GB MicroSD、静音FANによる強制冷却など、高負荷運用でも長期に渡る安定稼働が可能です。また単品でご購入いただくよりお得です。

お手本コードの動き

最初のお手本コードを見てみると、for文で2回動かしています。最初に2.5の位置へ動かして、その後に10.0の位置へ動かし、それを2回繰り返しています。

ただ、2回目の10.0の位置だと結果的に扇形の動きをします。

ここは水平に180度を動かしたいので、10.0ではなく12.0に変更してみました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time

INTERVAL = 0.6
PIN = 14
FREQ = 50

GPIO.setmode(GPIO.BCM)

GPIO.setup(PIN, GPIO.OUT)
servo = GPIO.PWM(PIN, FREQ)
GPIO.setwarnings(False)

#init
servo.start(0.0)

for i in range(2):
  servo.ChangeDutyCycle(2.5)
  time.sleep(INTERVAL)

  servo.ChangeDutyCycle(12.0)
  time.sleep(INTERVAL)

GPIO.cleanup()

しかし、完全な水平の動きにはなっていませんね??

概ねこれで良かったのでヨシとしておきます。

https://youtu.be/Qo3puNFh4vA

エラーが出たので以下を追加しました。

GPIO.setwarnings(False)
sg90.py:11: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
   GPIO.setup(PIN, GPIO.OUT)

とりあえずエラー出さないようにしただけです。なんでchannelが被っているのか??
これで一応は問題無く動きます。

時間で制御

自動的に実行させたい場合、cronを使います。

crontab -e

最初に使うエディタを選びます。

cornへの書式は以下です。

分 時 日 月 曜日 コマンド

例えば、毎朝の8時に実行したい場合

0 8 * * * python /home/pi/sg90.py

詳しくはmanファイルを読んでみてください。

man 5 crontab

スクリプトに実行権限がない場合は付与してください。

sudo chmod 755 /home/pi/sg90.py

権限の付与状態を確認するコマンド

ls -l /home/pi/sg90.py

最後に

スゴイ簡単です。

当初の予定通り、サーボモーターの白いプラスティック部分を金魚のエサに取り付けて真上から真下へ動かすことでエサを放出させます。

このような筒型のエサをお手本のサイトでは板と輪ゴムで取り付けていました。

エサを出す量は、穴を開ける数や大きさであったり、サーボモーターの動きを2回ではなく3回とすることで調節できますね。

あとは水槽に固定するだけで完成です。

設置してみました

ポテチの箱が高さピッタリでした!

水温を測ったり、LEDを制御したり、合わせて使いたい場合はGPIOが被らないようにしてブレッドボードに配線します。

実際に動かすモーター類なら、意外と他にもアイディアが沸きますね。

ラズパイダ

ラズパイダ

学べる楽しむ便利になる。小さいくせにヤケにパワフル。そんなRaspberry Pi をまだ知らない人に伝えたい。様々な場所で利用されているRaspberry Pi を知って「あっ、これもラズパイだっ!」だからラズパイダ!

関連記事

特集記事

コメント

この記事へのコメントはありません。

最近の記事 はじめて向け
  1. Pimoriniからシンプルスーパースリムな「Audio DAC SHIM」

  2. Raspberry Pi OS のバージョンアップ方法とaptについて

  3. 遊び半分、学び半分でRaspberry Piを活用しよう!

  4. Raspberry Pi Imager更新、イメージ選択数を計測のためデータ収集も

  5. 「fre:ac」はラズパイでもmp3やFLACに変換できる無料のオーディオコンバーター

  1. 【初心者向け】Raspberry Pi 4との接続方法(電源、HDMI)

  2. 【初心者向け】はじめてRaspberry Pi OS をダウンロードする人へ

  3. Raspberry Pi OS のインストールは、公式ツール1つだけでOK

おすすめの記事

  1. 期待が高まるWindowsに似ている新しいLinuxのフレーバー「Endless OS」がRaspberry Pi 4用に登場予定

  2. ラズパイ4にも対応している軽量でクールなOS「Manjaro」はアリ

  3. 正式にUbuntuがラズパイ4に対応(Ubuntu 20.10)

  4. ラズパイ4で動いたOS一挙に10選とおすすめのデスクトップ代替OS

  5. TwisterOSで懐かしのWindows、最新macOSの見た目でラズパイを使う

  6. NextcloudとRaspberry Pi 3B+で作る自分専用クラウド

今月の人気記事

  1. 1

    Raspberry Pi で動く様々なOS一覧まとめ13種類!

  2. 2

    ラズパイ4をUSB接続のSSDから起動する方法(USBブート)

  3. 3

    初心者でもラズパイでNASサーバーを作ってみよう!

  4. 4

    Raspberry Pi 4の初期設定2020年版

  5. 5

    Raspbian のWi-Fi設定(Raspberry Pi 初期設定)

  6. 6

    ラズパイ4とOMV5(openmediavault5)で作る自宅NASサーバーの設定方法

  7. 7

    Raspberry Pi 4を起動したのにモニターに画面が映らない対処法

  8. 8

    ラズパイで使うmicroSDカードの選び方

  9. 9

    Raspberry Pi 4のOSをデスクトップPCとして使うためにUbuntuMATEをインストールしてみた

  10. 10

    ラズパイ4はPCライクな性能になったけどPCではないよという話

記事ランキングページ

TOP