ラズパイを使って色々なコトが出来ると知ったので、いよいよロボットを作ってみることにした。目指す姿は、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みたいなロボット」が出来たので、今度は機能を実装しよう。まずは「音声合成」で何か喋らせるよう。