BioErrorLog Tech Blog

試行錯誤の記録

Raspberry Piで複数のサーボモーターを制御する

PWM/サーボ制御モジュールを使わずに、複数のサーボモーターを制御する方法の備忘録です。

はじめに

こんにちは、@bioerrorlogです。

最近またRaspberry Piを触って遊び始めています。

複数のサーボモーターを制御したい、となったとき、世の事例を検索してみると、多くの場合はPWM/サーボ制御モジュールを取り付けることが多そうです。

ただ今回は外部モジュールを使わずに、とりあえず素のGPIOで複数サーボを制御してみました (パーツの用意やはんだ付けが面倒だったので...)。

やり方の備忘録を残します。

Raspberry Piで複数のサーボモータを制御する

OS環境の準備

モデルはRaspberry Pi 4 Model B (4GB RAM)を使いました。

Raspberry PiにはUbuntu 22.04.1 LTS (64-bit)を入れています (Raspberry Pi OSなど他の環境でも特に動作に違いはないはず)。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:    22.04
Codename:   jammy

Raspberry PiにUbuntuを入れる方法は別途記事にしているので、こちらを参照ください: www.bioerrorlog.work

回路を組む

回路は↓のように組みました。

  • サーボモーターにはSG90を使用
  • サーボモーターに供給する外部電源は単4電池4本パック/6Vを使用
    (データシートによるとギリギリSG90の動作範囲)
  • 外部電源とサーボモーターのマイナス端子はRaspberry PiのGNDに接続
  • サーボモーターのPWM制御線とRaspberry PiのGPIOを1kΩ抵抗を挟んで接続
    (今回は17, 18, 27のpinを使用)

サーボモータを動かすスクリプトの用意

では、サーボモーターの動作チェックのための簡単なスクリプトを書きます。 今回はPythonで書きました。

ソースコード: github.com

import math
import time
from gpiozero import AngularServo


def main():
    servo_17 = AngularServo(17)
    servo_18 = AngularServo(18)
    servo_27 = AngularServo(27)

    t = 0
    max_angle = 60
    gap_angle = 30

    try:
        while True:
            servo_17.angle = math.sin(math.radians(t % 360)) * max_angle
            servo_18.angle = math.sin(math.radians((t % 360) + gap_angle)) * max_angle
            servo_27.angle = math.sin(math.radians((t % 360) + (gap_angle * 2))) * max_angle

            t += 2
            time.sleep(0.01)
    except KeyboardInterrupt:
        servo_17.angle = 0
        servo_18.angle = 0
        servo_27.angle = 0


if __name__ == '__main__':
    main()

gpiozeroAngularServoを使って3つのサーボを動かす、動作確認用のちょっとしたスクリプトです。 回転を滑らかにするため、角度の計算にはsin関数を挟んでいます。

サーボモータを動かす

では用意したスクリプトをRaspberry Piで実行します。

スクリプトをcloneして、必要なライブラリをRaspberry Piにインストールします:

# Clone
git clone https://github.com/bioerrorlog/raspberry-pi-examples.git
cd raspberry-pi-examples/multi_servo_gpio/

# Install required packages
sudo apt update
sudo apt upgrade
sudo apt install python3-pip python3-dev gcc git
sudo pip install -r requirements.txt

そしたら、Pythonスクリプトを実行します:

sudo python3 main.py

# sudoで実行するのは、下記エラー回避のため:
# RuntimeError: No access to /dev/mem. Try running as root!

上手く実行できれば、↓みたいな感じでサーボモーターが動きます。

(サーボモーター同士をダンボールで固定しています)

おわりに

Raspberry Piで複数のサーボモーターを制御する方法の備忘録でした。

PWM制御モジュールも使ってないし、ソフト面での工夫もしていないので結構ジッターが入ってしまいますが、とりあえず動く、というところは見ることができます。

以上、備忘録でした。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

O'Reilly Japan - Raspberry Piクックブック 第3版

マイクロサーボ9g SG-90 | 秋月電子通商

GitHub - gpiozero/gpiozero: A simple interface to GPIO devices with Raspberry Pi

GitHub - bioerrorlog/raspberry-pi-examples: Example projects for Raspberry Pi.

Raspberry PiにUbuntuをインストールする | Raspberry Pi Imager

Raspberry PiにUbuntu 22.04.1 LTSをインストールする方法の備忘録です。

はじめに

こんにちは、@bioerrorlogです。

これまではRaspberry Pi OSをインストールしていましたが、いろんなツールでの互換性を考えるとやはりUbuntuをインストールしたくなってきます。

今回はRaspberry Pi Imagerを使って、Ubuntu Desktop 22.04.1 LTS をRaspberry Piにインストールしてみます。

※環境
Raspberry Pi 4 Model B 4GB RAM

※Raspberry Pi Imagerのインストール方法は↓の記事を参照ください。 www.bioerrorlog.work

Raspberry PiにUbuntuをインストールする

以下の手順で、Raspberry PiにUbuntuをインストールしていきます。

  1. microSDをPCに挿してRaspberry Pi Imagerを起動する

    起動画面

  2. "OSを選ぶ"を選択

  3. "Other general-purpose OS"を選択

  4. "Ubuntu"を選択

  5. インストールしたいUbuntuのversionを選択
    (今回は"Ubuntu Desktop 22.04.1 LTS"を選びます)

  6. OSが選択できたので、次はストレージを選択します。
    "ストレージを選ぶ"を選択

  7. 挿入してるSDカードを選択

  8. "書き込む"を選択

  9. "はい"を選択

書き込み処理が終了したら、SDカードをPCから取り出します。

Raspberry Piを起動する

Raspberry Piの起動方法は、Raspberry Pi OSのときと変わりません。

やり方は下記リンクを参照ください。

www.bioerrorlog.work

おわりに

以上、Raspberry PiにUbuntuをインストールする方法の備忘録でした。

Raspberry Pi Imagerに従ってポチポチするだけだったので簡単ですね (この備忘録を書く必要もなかったかも)。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Install Ubuntu on a Raspberry Pi | Ubuntu

ROS 2 on Raspberry Pi — ROS 2 Documentation: Foxy documentation

Raspberry Pi OSを削除する | Raspberry Pi Imager

microSD上のRaspberry Pi OSを削除する方法の備忘録です。

はじめに

こんにちは、@bioerrorlogです。

Raspberry Piで使うOSのバージョンを変えり、他のOSを入れたくなったときは、先にmicroSDに入れているOSを削除する必要があります。

今回は、microSD上のRaspberry Pi OSをRaspberry Pi Imagerで削除する方法をまとめます。

※Raspberry Pi Imagerのインストール方法は↓の記事を参照ください。 www.bioerrorlog.work

Raspberry Pi OSをmicroSDから削除する

以下の手順で、Raspberry Pi OSをmicroSDから削除します。

  1. microSDをPCに挿してRaspberry Pi Imagerを起動する
    起動画面


2. "OSを選ぶ"を選択


3. "削除"を選択


4. "ストレージを選ぶ"を選択


5. 挿入してるSDカードを選択


6. "書き込む"を選択


7. "はい"を選択


削除処理が終了したら、SDカードをPCから取り出して完了です。

削除完了画面

おわりに

以上、microSD上のRaspberry Pi OSを削除する方法のちょっとした備忘録でした。

Raspberry Pi Imagerを使えば、いろいろと面倒を見てくれるので簡単ですね。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Raspberry Pi OS – Raspberry Pi

Raspberry Pi

Raspberry PiのGPIOピン配置を確認する

Raspberry PiのGPIOピン配置位置を確認する方法を整理します。

はじめに

こんにちは、@bioerrorlogです。

Raspberry PiのGPIOピン配置は複雑です。
私は毎度ピン配置を調べてから作業しています。

ピン配置の調べ方はしばしば忘れがちので、備忘録を残します。

想定環境

Raspberry Pi 2/3/4 ではGPIOピン配置は同じ(40本)で、本記事ではこちらを想定します。

一方、Raspberry Pi 1 Model B+以前はピン配置が異なります(26本)。

Prior to the Pi 1 Model B+ (2014), boards comprised a shorter 26-pin header.

ドキュメントより

Raspberry PiのGPIOピン配置を確認する

GPIOピン配置を確認する方法は、ざっくり以下のふたつがあります。

  • pinoutコマンドで確認する
  • ドキュメントから確認する

pinoutコマンドで確認する

Raspberry Piのターミナルでpinoutコマンドを実行することで、ピン配置を簡単に確認することが出来ます。

pi@raspberrypi:~ $ pinout
,--------------------------------.
| oooooooooooooooooooo J8   +======
| 1ooooooooooooooooooo  PoE |   Net
|  Wi                    1o +======
|  Fi  Pi Model 4B  V1.2 oo      |
|        ,----. +---+         +====
| |D|    |SoC | |RAM|         |USB3
| |S|    |    | |   |         +====
| |I|    `----' +---+            |
|                   |C|       +====
|                   |S|       |USB2
| pwr   |hd|   |hd| |I||A|    +====
`-| |---|m0|---|m1|----|V|-------'

Revision           : c03112
SoC                : BCM2711
RAM                : 4GB
Storage            : MicroSD
USB ports          : 4 (of which 2 USB3)
Ethernet ports     : 1 (1000Mbps max. speed)
Wi-fi              : True
Bluetooth          : True
Camera ports (CSI) : 1
Display ports (DSI): 1

J8:
   3V3  (1) (2)  5V
 GPIO2  (3) (4)  5V
 GPIO3  (5) (6)  GND
 GPIO4  (7) (8)  GPIO14
   GND  (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND
GPIO22 (15) (16) GPIO23
   3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND
 GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8
   GND (25) (26) GPIO7
 GPIO0 (27) (28) GPIO1
 GPIO5 (29) (30) GND
 GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
   GND (39) (40) GPIO21

POE:
TR01 (1) (2) TR00
TR03 (3) (4) TR02

For further information, please refer to https://pinout.xyz/


ドキュメントから確認する

Raspberry Piにログインしているときは先述のpinoutコマンドを実行するのが簡単ですが、普通にドキュメントから調べることもできます。

Rapsberry Pi公式ドキュメントでは、GPIOピン配置や各ハードウェア仕様を確認できます:


pinout.xyzからもGPIOピン配置を確認できます。

先述のpinoutコマンドで参考URLに指定されていたのは、こちらのサイトの方ですね。

# pinout コマンド出力結果最終行
For further information, please refer to https://pinout.xyz/

おわりに

今回は、Raspberry PiのGPIOピン配置を確認する方法をメモしました。

ピンの場所は油断するとすぐ間違えがちなので、気を付けて作業したいものです。 ピン配置が記載されたカードを装着することも考えた方がよいかもしれません。

このメモがどなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Raspberry Pi GPIO Pinout

documentation/using-gpio.adoc at develop · raspberrypi/documentation · GitHub

Raspberry Pi Documentation - Raspberry Pi OS

GPIO Pin Numbering - Raspberry Pi Forums

Raspberry Pi OSにDockerをインストールする

Raspberry Pi OSにDockerをインストールする方法をまとめます。

はじめに

こんにちは、@bioerrorlogです。

先日、Raspberry Pi 4を購入しました。

Raspberry Piで色々と遊んでいると、Dockerもインストールしてみたくなりました。

今回はそのインストール方法をまとめます。

前提

使用機器:Raspberry Pi 4

Raspberry Pi OSが動作済みで、ディスプレイ/キーボード接続またはSSH接続によってRaspberry Pi OSのターミナルが操作できる状態を前提としています。

Raspberry Pi OSのセットアップにはこちらも参考にしてください: www.bioerrorlog.work

Raspberry Pi OSにDockerをインストールする

以下の手順でDockerをインストールしていきます。

  1. OSアップデート
  2. Dockerのダウンロード/インストール
  3. Dockerインストールの確認
  4. ユーザにDockerへの権限を付与
  5. 再起動
  6. 動作確認:hello-worldコンテナを動かす

1. OSアップデート

まず、以下のコマンドでOSをアップデート/アップグレードして最新の状態に更新します。

sudo apt update && sudo apt upgrade

2. Dockerのダウンロード/インストール

Docker公式が提供しているインストールスクリプトを取得/実行して、Dockerをインストールします。

curl -sSL https://get.docker.com | sh

3. Dockerインストールの確認

docker --versionを実行し、Dockerが無事インストールされたことを確認します。

$ docker --version
Docker version 20.10.7, build f0df350

4. ユーザにDockerへの権限を付与

Dockerをインストールした直後の状態では、ユーザにDocker実行の権限がありません。 毎回sudoで実行する必要があります。

これを解消するために、ユーザにDocker実行の権限を付与(dockerグループに追加)します。

sudo usermod -aG docker ${USER}

${USER}は、現在のユーザを指し示す変数です。 ユーザ名を直接指定しても同じく権限を付与することが出来ます。

sudo usermod -aG docker [user_name]

5. 再起動

ユーザへのDocker実行権限付与を反映させるため、Raspberry Piを再起動します。

6. 動作確認:hello-worldコンテナを動かす

ここまでの手順で、Dockerのインストールとユーザへの実行権限付与が出来ました。

最後にhello-worldコンテナを実行して、Dockerが実行できることを確認します。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2c7ed585684a: Pull complete 
Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm32v7)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

上記のようにhello-worldコンテナが実行できれば成功です。

おわりに

今回は、Raspberry PiにDockerをインストールする方法をまとめました。

Raspberry Pi OSのアーキテクチャ(Arm32)には気を付ける必要がありますが、これでコンテナをRaspberry Piで動かすことが出来るようになりました。

どんな使い方が出来るか、想像が膨らみます。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

How To Install Docker and Docker-Compose On Raspberry Pi - DEV Community 👩‍💻👨‍💻

Docker comes to Raspberry Pi - Raspberry Pi

Raspberry Piを購入してセットアップする | Raspberry Pi入門

Raspberry Pi 4とその周辺パーツの購入から、Raspberry Pi OS起動までの作業をまとめます。

はじめに

こんにちは、@bioerrorlogです。

先日、Raspberry Piを買ってきました。

私はRaspberry Piはもちろん、電子工作的なものにも経験ありません。 新しい世界にワクワクしてます。

本記事では、Raspberry Pi 4とその周辺パーツの購入から、Raspberry Pi OS起動までを記録します。

Raspberry Piを購入してセットアップする

Raspberry Piとその周辺パーツの購入

まず、Raspberry Pi 4と周辺パーツを購入します。

Raspberry Pi 2や3など他のバージョンで必要なパーツと、Raspberry Pi 4で必要なパーツは異なります。

ネット上の情報を参考にする場合は、その記事がどのバージョンのRaspberry Piに言及しているのかに注意してください。 本記事ではRaspberry Pi 4を使います。

必要なもの:

  • Raspberry Pi 4 (筆者はModel B 4GB RAMを購入)
  • USB-C 電源コード (出力 3A, 5Vほど)
  • microSDカード (容量8GB以上、Class10のものが良い)
  • microSDカードアダプタ (microSDにPCからデータを書き込む用)
  • USBキーボード (有線)
  • USBマウス (有線)
  • micro HDMIケーブル (Raspberry Pi側がmicro HDMI)
  • ディスプレイ

ディスプレイは既に持っているものがあれば、使いまわして大丈夫です。

これらパーツを、ネットでもリアル店舗でもよいので購入します。

私は以下の秋葉原の電気屋を巡って購入しました。 ネットでポチるのも良いですが、実物を見ながら買うのもまた一興です。 東京にいる方は参考にしてみてください。

microSDカードのセットアップ

パーツが揃ったら、Raspberry Pi Imagerを使ってmicroSDにRaspberry Pi OSを書き込みます。

Raspberry Pi Imagerとは、Raspberry Pi OSをmicroSDに自動でインストールしてくれるアプリケーションです。 書き込み後のmicroSDをRaspberry Piに挿して電源を付ければ、OSを起動することが出来ます。

Raspberry Pi Imager is the quick and easy way to install Raspberry Pi OS and other operating systems to a microSD card, ready to use with your Raspberry Pi.

公式の説明より


以下の手順でmicroSDに書き込んでいきます。

今回私はWindows PCを使っていますが、MacやLinux (Ubuntu)でも同様の操作が可能です。


1.Raspberry Pi Imagerのインストーラをダウンロード

Raspberry Pi OS – Raspberry Pi

上記リンクから、PCのOSに合ったRaspberry Pi Imagerのインストーラをダウンロードします。


2.Raspberry Pi Imagerをインストール

ダウンロードしたRaspberry Pi Imagerのインストーラをダブルクリックし、画面に従ってインストールを進めます。

"Install" をクリック

"Finish" をクリック


3.Raspberry Pi ImagerでmicroSDに書き込み

Raspberry Pi Imagerのインストールが終わると、ウィンドウが自動で立ち上がります。 立ち上がったら、下記の手順でmicroSDにRaspberry Pi OSを書き込んでいきます。

起動画面でCHOOSE OSを選択


Raspberry Pi OS (32-bit)を選択


"CHOOSE STORAGE"からSDカードを選択


書き込み終了


書き込みが終了したらmicroSDを取り出し、Raspberry Piの起動に移ります。

Raspberry Piの起動

Raspberry Piを起動するには、順番に各部品を取り付けてから電源コードを挿入します。

1.microSDを挿入

microSDを挿入する | 画像は公式チュートリアルより


2.USBマウス・USBキーボードを取り付け

マウス・キーボードを取り付ける | 画像は公式チュートリアルより


3.micro HDMIディスプレイを取り付け

ディスプレイを取り付ける | 画像は公式チュートリアルより


4.電源コードを取り付け

電源コードを取り付ける | 画像は公式チュートリアルより改変


電源コードを取り付けると、自動でOSが立ち上がります。

Raspberry Pi OSの起動後画面 | 画像は公式チュートリアルより

これで、今回の目的は達成しました。

おわりに

今回は、Raspberry Pi 4とその周辺パーツを揃えてOSを起動するまでの作業をまとめました。

今後もRaspberry Piで遊びながら、作業記録を記事に残していこうと思います。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Projects | Computer coding for kids and teens | Raspberry Pi

Raspberry Pi OS – Raspberry Pi