ラズパイを使って色々なコトが出来ると知ったので、いよいよロボットを作ってみることにした。目指す姿は、R2D2みたいなロボット。実装する機能は、遠隔でカメラ画像を取得できて、音声でコマンドを認識できて、機械語?を喋って、動く、光るとか?
ラズパイ本体を収納する「ダイソーの木箱(108円)」を購入。ちょうど取っ手の部分に頭を動かすためのサーボモータを取り付けすることが出来た。ケーブル収納用に粘着テープ付きのケーブルタイを固定。

ゴミ箱から適当なプラスチックプレートを拾ってきて、これにサーボモータと連結する歯車部品をセンターに装着。フルカラーLED点灯実験で作った回路を基盤にハンダ付けしたものをプレートに装着。USBカメラは上下に稼働するパーツが付属していたのでそのままプレートに装着。いいぞ、メカメカしくなってきた。

スピーカーを木箱に固定し、ボリューム調整付きのアンプは、マイナスドライバーで音量調整できるような場所に配線した。

木箱に装着したサーボモータに、USBカメラ頭部をマウントした。LEDは、濁った透明プラスチックを取り付けしてフルカラーの混合色が表現できるようにした。

R2D2の頭脳となるRaspberry pi3をダイソーの100円木箱に内蔵させる。USBケーブルのコネクタ部分の長さを考慮しなかったため、若干サイズが合わない。メンテナンス期間は、AC-DCケーブル接続だが、iPhoneでも利用できるモバイルバッテリー(TEC TMB-4K 4000mAh)に換装して、外に持ち出すことも可能。

Raspberry Pi3のGPIO配線図

R2D2の横についている足みたいなパーツって、腕だよね?でも本体からライターのアームが出てくるのを映画で見たから、これは足なのかな。家で余っていた木材を整形して足部分を作った。

たぶん足部分のパーツをネジで取り付けしたので、多少は角度を変更できるようになった。ラズパイは結局、木箱から飛び出す設置になってしまった。裏側は見せないようにしよう。

全ての部品を取り付けたけれど、うーん、何となくカッコよくない。何かいい部品ないかなー。

再びダイソーでタッパー2個で108円を調達。ニッパーで切り込みを入れてみた。

じゃーん。R2D2みたいなロボットがついに完成しました。箱型ロボット2号機なので、名付けて BB-2 (ビービーツー:Box roBot Twoの略だよ)。

iPhone用のモバイルバッテリーを借りてきた。無理矢理、本体に詰め込んだら、青空の下に飛び出せるモバイルバッテリー仕様になった。

横から見るとこんな出っ張り。

頭部分は角度指定とランダムの2つの方式とした。角度指定の場合は「python servo4.py angle 4」というように数字の部分に2.0から6.0の間の数字を指定する[小数点で細かく指定も可]。ランダムの場合は、「python servo4.py random」で動きます。これを他のpythonプログラムにimportして、音声認識でコマンドを与えてアクション動作をさせてみる。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# servo4.py
import RPi.GPIO as GPIO
import sys
import time
import os
import random
contPIN = 18
GPIO.setmode( GPIO.BCM )
GPIO.setup( contPIN, GPIO.OUT )
servo = GPIO.PWM( contPIN, 50 ) #50Hz
servo.start( 0.0 )
####################
# サーボの移動(角度指定)
####################
def move( intAng ):
try:
servo.ChangeDutyCycle( intAng ) # angle
print(str(intAng))
time.sleep(0.3)
servo.ChangeDutyCycle( 0.0 ) # to be stable
except KeyboardInterrupt:
print("\nStop servo4.")
servo.ChangeDutyCycle(2.0)
servo.stop()
GPIO.cleanup()
sys.exit(0)
####################
# サーボの移動(ランダム)
####################
def rand():
intAng = random.randint(2,6)
servo.ChangeDutyCycle( intAng ) # random angle
time.sleep(0.3)
servo.ChangeDutyCycle( 0.0 ) # to be stable
####################
# スタート:処理の分岐
####################
if __name__ == '__main__':
if (len(sys.argv) <=2):
print("Syntax: servo4.py [cmd] [var]")
print(" cmd = 'angle', var = [angle from '2.0' to '6.0']")
print(" cmd = 'random', var = [times from 1 to 10]")
sys.exit()
strCMD = sys.argv[1]
floatVAR = float(sys.argv[2])
if ( strCMD == "angle" ):
if ( floatVAR < 2 or floatVAR > 6 ):
init()
else:
move(floatVAR)
elif ( strCMD == "random" ):
rand()
動き回ったり、戦ったりするロボットでは無いけれど、ラズパイで制御する「R2D2みたいなロボット」を約1万円で作ることが出来た。見た目はしっかり手作り感満載のR2D2みたいなロボットですよね。言い換えると、おんぼろロボットではあるが、実装している機能は意外と凄いぞ。どんな機能を実装しているのかは、次の記事で書くことにする。
▼「BB-1」ロボットのレシピ
| Raspberry pi 3 Model B | 約5,500円 |
| スピーカー(50mm) | たぶん180円 |
| 超小型アンプモジュール | たぶん500円未満 |
| マイク内蔵USBカメラ | 約1,500円 |
| AC-DCアダプター | 約1,500円 |
| ダイソー木箱 | 108円 |
| ダイソー丸型タッパー | 108円 |
| モバイルバッテリー | 980円 |
| その他:ネジ、端材 | ???円 |
| 合計 | 約10,380円 |
見た目が「R2D2みたいなロボット」が出来たので、今度は機能を実装しよう。まずは「音声合成」で何か喋らせるよう。