Introduction
Raspberry Pi を使ってロボットを作ってます!
ロボットの解説は後半から →
Raspberry Pi を使ったロボットの制作
備忘録も兼ねています。機種やバージョンなどの違いによって使い方が変わっている可能性もあるのでご注意ください。
Raspberry Pi Zero
ちっちゃな5$のコンピュータRaspberry Pi Zero
まだ、ちょっと入手難なのが残念なところ…
"Raspberry Pi Zero" in FRISK! case (2015/12/11)
Raspberry Pi Zeroはフリスクケースにちょうどのサイズです。
下側のケースを基板の厚み分削ればちょうと入ります。
赤丸の部分だけは慎重に削らないと外から基板が見えちゃいます。
ピンヘッダを付けました。 (2016/01/17)
Raspberry Pi Zeroにピンヘッダを付けました。
裏を平らにしたかったので、ロープロタイプのピンヘッダを使って
黒いプラスチックの部分を下にずらしています。
オーディオ端子の追加 (2016/01/23〜)
Raspberry Pi Zeroにはオーディオ端子がないのですが…GPIO端子からステレオ出力を行うオーバーレイモジュールがインストールされています。
こちらのサイト従ってステレオで音楽を再生することが出来ました!
Tuto:Get analog audio(3.5mm Audio Jack) in Raspberry Pi Zero
@ WiringPi(ワイヤリング・パイ)のインストール (Raspbian[Jessie]ではインストール済み)
(コンパイル出来なければビルド済みパッケージを入手してください。)
sudo apt-get update
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
A PWMの割り当て変更
(root権限は不要です)
gpio -g mode 18 ALT5 (GPIO18をPWM0に割り当てます)
(GPIO13かGPIO19のいずれか選択)
gpio -g mode 13 ALT0 (GPIO13をPWM1に割り当てます)
or
gpio -g mode 19 ALT5 (GPIO19をPWM1に割り当てます)
それだけです!(起動後に毎回実行が必要)
gpio readall (割り当ての確認)
機能の詳細はこちら
BCM2835-ARM-Peripherals (102ページ〜)
B mp3ファイルの再生
wget https://goo.gl/XJuOUW -O example.mp3 --no-check-certificate (テストファイルが無いときは入手)
omxplayer example.mp3
(音量指定)
alsamixer (alsamixerの設定はomxplayerでは無効のようです。--volオプションで音量を指定します。)
omxplayer --vol -800 example.mp3 (ボリュームはdBで指定 x100)
Raspberry Pi Zero W (Raspberry Pi 3) のBluetoothとシリアルポート
・ Bluetoothとシリアルポートを同時に使う場合 /boot/config.txt に下記を追加
enable_uart=1
core_freq=250
・ Bluetoothは使わずにシリアルポートだけ使う場合 /boot/config.txt に下記を追加
dtoverlay=pi3-miniuart-bt
・ Bluetoothとシリアルポートのいずれも使わない場合 /boot/config.txt に下記を追加
dtoverlay=pi3-disable-bt
Raspberry Pi Zero W のWiFi無効化
/etc/modprobe.d/raspi-blacklist.conf に下記を追加
blacklist brcmfmac
blacklist brcmutil
Raspberry Pi Zero W と技適(工事設計認証の表示) (2017/07/21)
Raspberry Pi Zero Wireless(Raspberry Pi Zero W)はZeroの性能とサイズはそのままで、WiFiとBluetooth(BLE)が実装された期待の新機種です。2017/02/28に発表され海外からは入手が可能な状態だったのですが、
国内では技適の関係で電波暗室以外では使用出来ない状況が続いていて、2017/7/18にやっと国内販売が開始されました。
2017/07/21日現在:SWITCH SCIENCEで購入したZero Wは基板裏面に認証シールが貼られていました。(下の写真参照)KSYで購入した場合は基板ではなく絶縁チャック袋に認証シールが貼られています。購入の際は確認が必要です。
SWITCH SCIENCE 工事設計認証の表示について
2017年製造版は工事設計認証がシルクでプリントされました。 このバージョンであれば海外で購入しても日本で適法となり使用可能です。(PIMORONIの販売サイトで確認)
→ PIMORONI (在庫ありました。2017/07/21)
※ 届いた商品にマークが無くても責任とれません… 注文は自己責任で、またはショップに確認してから購入してください。
Raspberry Pi Howto
Jessie以降のRaspbianについて!
1.4.2以降のRaspbianはJessieベースに変更されているので注意が必要です。→
jessie で知っておくべき問題点
Jessie以降はinitプログラムもsystemdに変更されています。
新 デーモン(サービス)の自動起動の設定/解除 systemd
sudo systemctl enable デーモン名(サービス名) .service .serviceは省略可能
sudo systemctl disable デーモン名(サービス名) .service .serviceは省略可能
旧 デーモン(サービス)の自動起動の設定/解除 SysV init
sudo update-rc.d デーモン名(サービス名) defaults
sudo update-rc.d -f デーモン名(サービス名) remove
jessie以降でもSysV initの関連ファイルは残されています。一部コマンドは使用可能ですが非推奨になります。
シリアルからのオートログイン設定 (2016/01/18)
ラズパイ ゼロにてシリアル経由でログイン。
ほぼ最小構成ですね。(^_^)
Jessie以降になってシリアルからのオートログイン設定も変更になっています。
@ /etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf の編集
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin pi -s %I 115200,38400,9600 vt102
※ Raspberry Pi Zero WでBluetoothを有効にした場合は ttyAMA0 の部分が ttyS0 になります。
A /boot/cmdline.txt の編集 (通信速度の変更)
console=ttyAMA0,19200
※ Raspberry Pi Zero WでBluetoothを有効にした場合は ttyAMA0 の部分が serial0 になります。
Raspberry Pi 無線LANアクセスポイント化
@ パッケージのインストール
sudo apt-get -y install hostapd isc-dhcp-server
A /etc/network/interfaces の編集 (アドレスは環境に合わせて変更して下さい)
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.11.81
netmask 255.255.255.0
#iface wlan0 inet manual
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
B /etc/dhcpcd.conf に下記を追加
denyinterfaces wlan0
C /etc/dhcp/dhcpd.conf に下記を追加 (アドレスは環境に合わせて変更して下さい)
subnet 192.168.11.0 netmask 255.255.255.0 {
range 192.168.11.100 192.168.11.120;
option broadcast-address 192.168.11.255;
default-lease-time 600;
max-lease-time 7200;
option routers 192.168.11.81; ルーターの設定
option domain-name "local"; ルーターの設定
option domain-name-servers 8.8.8.8, 8.8.4.4; ルーターの設定
}
D /etc/default/isc-dhcp-server の編集
INTERFACES="wlan0"
E /etc/hostapd/hostapd.conf の編集(抜粋)
サンプルからコピー /usr/share/doc/hostapd/examples/hostapd.conf.gz
interface=wlan0
driver=nl80211
ssid=myssid 任意の名前
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=raspberry 任意のパスワード
F /etc/sysctl.conf の編集
net.ipv4.ip_forward=1 コメントアウト
net.ipv6.conf.all.disable_ipv6 = 1 コメントアウト
G iptablesの設定
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
H /etc/network/if-pre-up.d/iptables の編集
#!/bin/sh
iptables-restore < /etc/iptables.ipv4.nat
exit 0
I パーミッション変更
sudo chmod 755 /etc/network/if-pre-up.d/iptables
lircで赤外線を送受信する (2017/09/01)
@ パッケージのインストール
sudo apt-get install lirc
A /etc/lirc/hardware.conf の編集 (通信速度の変更)
LIRCD_ARGS="--uinput" 変更前 LIRCD_ARGS=""
LOAD_MODULES=true
DRIVER="default" 変更前 DRIVER="UNCONFIGURED"
DEVICE="/dev/lirc0" 変更前DEVICE=""
MODULES="lirc_rpi" 変更前MODULES=""
B /etc/lirc/hardware.conf に下記を追加
dtoverlay=lirc-rpi
dtparam=gpio_in_pin=20 任意のピン番号
dtparam=gpio_out_pin=21 任意のピン番号
dtparam=gpio_in_pull=down
C 赤外線テスト受信(赤外線モジュールの接続後)
mode2 -d /dev/lirc0 受信パルスを表示
D リモコンコードの学習
sudo /etc/init.d/lirc stop サービスを停止
sudo irrecord -n -d /dev/lirc0 test.conf 任意のファイル名
※ やり直すときはファイルを削除すること。
E /etc/lirc/lircd.conf にリモコンコードを追加
irrecordで作ったファイルから begin remote 〜 end remote までを切り取ってlircd.confに追加する
サンプル→
lircd.conf (以下のリモコンコードが入っています)
F サービスを自動起動に設定
sudo /etc/init.d/lirc start 起動
sudo update-rc.d lirc defaults 自動起動に追加
G 学習したリモコンコードの受信確認
irw 受信したリモコンコードに対応した名前が表示される
H 学習したリモコンコードの送信
% irsend SEND_ONCE リモコン名 コード名
samba のインストール
@ パッケージのインストール
sudo apt-get install samba
A /etc/samba/smb.conf に下記を追加
[share]
path=/home/pi/share
read only=no
browsable=yes
guest ok = yes
force user = pi
B サービス停止(起動が遅くなるため)
sudo systemctl disable smbd
sudo systemctl disable nmbd
C フォルダ作成
cd
mkdir share
mkdir bin
D bin/smb の編集
#!/bin/bash
sudo systemctl start smbd
sudo systemctl start nmbd
sudo systemctl disable samba-ad-dc.service
systemd-analyze blame
E パーミッション変更
sudo chmod 755 bin/smb
外部RTCを搭載した場合のサービス停止
sudo systemctl disable fake-hwclock
sudo systemctl disable systemd-timesyncd ntpサーバーとの同期が不要の場合
Raspberry Pi のパワーパック[PiPower:8188] 製作
製作開始 (2015/04/17)
1400mAのバッテリーも含めてラズパイの基板内に納めました!
Raspberry Pi Zero でテスト (2016/01/31)
Raspberry Pi Zero + 有線LAN搭載3ポートUSBハブ(RUH-OTGU3E+C) + 無線LAN(GW-USNano2)に電源供給して動作中。
LiPo電池の保護回路 (2017/07/20)
レゴRCXのケースに納めることを前提にLiPo電池はSPYDERS UT-004 2000mAh(70mm×41mm×8mm)を選択。
基板には二つのIC、
DW01 、
8205A があって
それぞれ調べると、DW01はセイコーインスツル
S-8200Aシリーズ の互換IC、8205AはDual N-ChannelのFETでした、回路図は下記。過電流を検知すると保護モードに入り電力の供給を停止するので要注意。
保護ICモジュール
バッテリースペース
昇圧IC (2017/07/20)
Raspberry Piは5Vの電源が必要なので1セルのLiPo電池(3.7V)から5Vに昇圧するためにtps63000 を使ったモジュールを使用します。
これで最大5V/1A程度の電力が得られます。
さらに電力が必要な場合はtps63020 を使ったモジュールであれば、最大5V/2A程度の電力が得られます。
ただしLiPo電池から急激に電力を取り出すと保護回路が働くので要注意。
Raspberry Piのケース製作
"Raspberry Pi" と PiTFT 2.8inch 用のケース (2015/03/10)
Raspberry Pi 2 Model B と PiTFT 2.8inch 用のケースです。端子位置が合わないので調整しています。
(新バージョンのPiTFT 2.8inchはA+/B+/Pi2に対応しています)
"Raspberry Pi" in LEGO-RCX case (2015/04/04〜)
LEGO-RCXのケースにラズパイを納めました!コネクタ、ボタンなどインターフェースは可能な限りオリジナルを踏襲します。
LEGOマインドストームはMITのシーモア・パパート教授の構築主義の理論を基に生み出された傑作なのです。
LOGO(タートル)を作った人としても有名ですね。
そして、パパート教授はOLPCの登場にも寄与しているので、その潮流を汲むRaspberry Piとの合体は
尾道3部作におけるBoy Meets Girlなんです。
※ OLPC→One Laptop per Child 世界中の子供達にPCを届けるプロジェクト
VIDEO
内部フレームは再設計して3Dプリンタで作り直しています。
本体メインフレーム
スピーカー&DCジャック ホルダ
Raspberry Pi Zero
リポ電池
本体メインフレーム
液晶ディスプレイ
赤外線ユニット
モータードライバモジュールの中身は(SEEED Grove-I2C Motor Driver) コネクタは接続はマインドストームRCX準拠
"Raspberry Pi" in National JR-100 (2018/01〜)
37年前のパソコンにRaspberry Piを入れました。貴重なパソコンなのでケースの加工はせずにアダプタを作って対応しています。
Raspberry Pi を使ったロボットの制作
恋するフォーチュンクッキーを踊らせてみました。(with 猫)
Version.1 (2016/12/31)
上で紹介している"Raspberry Pi" in LEGO-RCX caseを使ってキャタピラ走行とリモコン操縦を出来るようにしました。
Version.2 (2017/01/05)
走行性能の向上を目指してキャタピラを交換 & レーザー距離計(VL53L0X)を実装
Version.3 (2017/01/13)
ヘッドが左右に動くようにサーボを追加 & 持ち歩き用のケースを用意
Version.4 (2017/03/19)
両腕をサーボ化
Version.5 (2017/03/19)
SONY DualShock3コントローラに対応
VIDEO
コントローラかドングルを変更した後の手順(必要なモジュールはインストール済み)
sudo sixad -stop (実行中なら停止)
DualShock3をUSBケーブルで繋ぐ
cd ./sixpair
sudo ./sixpair
DualShock3を外す
sudo bluetoothctl
discoverable on
agent on
DualShock3のPSボタンを押す
[NEW] Device xx:xx:xx:xx:xx:xx PLAYSTATION(R)3 Controller デバイス番号をメモ
DualShock3のPSボタンを押す
connect xx:xx:xx:xx:xx:xx エラーが出ても無視?
trust xx:xx:xx:xx:xx:xx 必須
CTRL-d
設定に関してはこちらを参考にしました。→ PlayStation 3 controller help sheet
Version.6 (2017/05/10)
光学センサー実装、床面をセンスして移動距離、回転角度を取得できるようになりました。
背面に取付
ブルーLED タイプ
変換モジュール
ブルーLED(内部)
プロトタイプ
VIDEO
直進時は正確に移動距離が測定できます。ただし回転角度の取得には苦労しました。
回転時は、床の摩擦係数、テーブルの傾き、速度による遠心力、キャタピラの状態などでロボットが外側か内側に斜行します。
マウスは最短でも3〜4ms程度のサイクルでしか位置情報を取得できないので(人間が使う限り十分に早いスピードですが)
マウスの位置情報を使ってロボットにかかる重力等による影響をアクティブに制御してモーターに補正指示を出すには遅いのです。
さらに、今回使っているレゴ純正のモーターは単純なDCモーターが使われているので正確な回転速度の指示も難しいです。
そのため、今回は理論上想定される動作と実際の測定値との誤差を常に計算で算出して、誤差が発生したらモーターの直接制御を行うのではなく移動データの補正を行うことで対応しました。
一応レゴの部品で構成したロボットでも正確に動く事が検証できました。
オムニホイールのロボットであればここまでしなくてもマウスのセンサーを使って移動距離の測定が出来るはずです。
Version.7 (2017/07/9)
手で掴めるようにハンドグリップ用のサーボを追加
ウルトラマイクロサーボ HK 5320Sを使いました。
このサーボは指定位置に行くまで動作し続けます。そのため手で何か掴んでいる状態では内部のモーターが回り続けて加熱してしまいます。これでは耐久性が落ちるので、指定位置の移動指示から一定の時間が過ぎたら電源の供給を止めるようにしています。
VIDEO
Version.8 (2017/08/25)
ハンドグリップ用のサーボを見えにくくするためアームの裏側に移動。
レゴのキャノン発射装置(純正)を追加。
コントローラから射出角度を調整して発射できます。キャノンの射出角度はアームのサーボから動力を伝達して調整していたのですが4連装ではパワー不足となるので、射出角度の変更用のサーボを追加しています。
VIDEO
Version.9 (2017/11/03)
ヘッドが上下に動くようにサーボを追加
サーボを収めるスペースが狭いので部品を新規に設計することで対応しました。
3Dプリンタで部品をつくります。
レゴ互換設計をしているので3Dプリンタで作った部品もレゴ部品で固定します。
サーボからの動力伝達はクラウンギアを使って90度向きを変えています。
ヘッドの重量をサーボで支える事になるのでサーボはメタルギアのTower Pro MG90D(改)を使っています。
ヘッドを取り付けて完成。
3Dプリンタで作った平ギアでも動作したのですが耐久性が心配なので射出成形のギアに交換しました。
VIDEO
モニター セレクション
SHARP 7インチ高細密 IGZO LCD接続キット LQ070M1SX01
ラズパイと相性ばっちりのモニターですが、現在入手難…
Lilliput 7インチワイド小型USB液晶モニター タッチパネル搭載 UM-70/C/T
解像度:800×480、USB接続(Displaylink)
@ パッケージのインストール
sudo apt-get install xserver-xorg-input-evdev
sudo apt-get install xinput-calibrator
A /etc/X11/xorg.conf の編集
サンプル
xorg.conf
カメラ
adafruit スパイカメラ
adafruitのスパイカメラ、Zero用もありますがケーブルが短いです。純正のラズパイカメラと互換性があります。
adafruit Spy Camera for Raspberry Pi
純正カメラモジュールを使う
@ /boot/config.txt に下記を追加
start_x=1
gpu_mem=128
とりあえずのテスト (CSI-2経由カメラモジュール)
@ 静止画テスト
raspistill -o photo.jpg
A ストリーミングテスト
raspivid -o - -t 9999999 -w 640 -h 480 -fps 30 --hflip | cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8080}' :demux=h264
mjpg-streamer (CSI-2経由カメラモジュール)
@ ビルド
sudo apt install libjpeg8-dev cmake
git clone https://github.com/jacksonliam/mjpg-streamer.git mjpg-streamer
cd mjpg-streamer/mjpg-streamer-experimental
make
A ストリーミング開始
./mjpg_streamer -o "./output_http.so -w ./www -p 8080" -i "./input_raspicam.so -fps 15 -q 10 -x 320 -y 240 -vf -hf"
-q はJPEGのクオリティ -vf は上下反転 -hf は左右反転
B スマホから見るとき
SimpleMjpegViewなど
サーボいろいろ (2017/03/19)
Tower Pro MG90D
Tower Pro SG90 (Umemoto LLP 2014年版)
Tower Pro SG92R(秋月購入版)
HK 5320S (2017/7/6)
VIDEO
小型キャラクタLCDにまつわるエトセトラ (2016/02/13〜)
小型キャラクタLCD
AQM0802A-RN-GBW がRaspberry Piに直接接続出来ない事が判明しました。
問題が判明するまで、だいぶ時間を無駄にしました…(泣)
厳密に言うと、接続出来るロットも存在します。(1年以上前の購入分は問題なく接続できました)
また今後のロットで解決される可能性もあります。
バックライト付き含め10枚程度確認しましたが、2016/02/13以降に店頭購入した分は全て直接接続出来ませんでした。
2016/02/17に
公式 に対応方法がアップされました。
I2Cレベル変換モジュールを挟んで下さいとのこと… (追確認していません!)
2016/02/18 対応方法が記述されていたQ&Aが削除されました。ここに直リンクを置くのも判断に迷うところですが…
この問題で悩んでる方も多いと思いますので当面そのままとします。
実はレベル変換モジュール不要で直接接続できるシンプルな解決方法があります!!
Strawberry LinuxのSB0802GN が互換品として使えます。 見た目では同一仕様にみえます。
Raspberry Piに直接LCDを繋ぎたいときは現状こちらを使うのがベストです。
2017/04/19に秋月電子からRaspberry Piに対応した
キャラクタ液晶ディスプレイモジュールキット が発売されました。
I2C接続小型キャラクタLCD(AQM0802A)をRaspberryPiで使用する為にバスリピーターIC(PCA9515)を実装したRaspberryPi用変換モジュールです。ピンの配列はRaspberryPi共通ピンヘッダに合わせてあるため、6ピンのピンソケットをハンダ付けする事でRaspberryPiに直接差し込むことができます。