動作チェックしてみよう

ベゼリーボードにHDMIケーブルと電源ケーブルを接続してください。

ラズパイが立ち上がったら、LXTerminalを開いてください。

サーボのセンタリングを確認する

サーボをセンタリングしたとき、ロボットの姿勢が初期状態になることを確認しましょう。「べゼリーボードを接続しよう」のページに書かれている通りの手順でロボットを組み立てる前にサーボのセンタリングをしていれば、問題はないはずですが、組み立てている最中にサーボをいじってしまうと、ズレてしまうことがあります。

下記のとおりPython3用スクリプトbezelie.pyを実行してください。

python3 bezelie.py

上記の結果、もしべゼリーの向きが傾いていたら、data_trim.jsonというファイルを編集することでサーボの初期状態の角度を微調整することができます。エディター「nano」を使ってdata_trim.jsonを編集してみましょう。
nanoを使ったことがないかたは、「nanoエディターの使いかた」をご覧ください。

sudo nano data_trim.json

初期状態ではpitch(首の縦振り)、roll(首の横振り)、yaw(体の横振り)の数字がすべて0になっていますが、時計回りなら正の数、反時計回りなら負の数で角度を入力することで、ロボットの初期状態の姿勢を調整することができます。

編集が終わったら、再度bezelie.pyを実行し、姿勢が修正されたことを確認してください。

サーボを動かしてみる

3つのサーボを順に動かすテストプログラム「test_servo1.py」を実行してみましょう。「Ctrl+C」で終了します。

cd
cd bezelie/flitz/
python3 test_servo1.py

ここで「サーボドライバーボードを接続してください」というエラーメッセージが表示されてしまった場合は、サーボモータドライバボードがしっかりと接続されているかどうかを再確認してください。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Test Code : サーボ動作テスト
# 3つのサーボを順に右と左に回転させる。

# モジュールのインポート
from time import sleep                # ウェイト処理
import bezelie                        # べゼリー専用モジュール
import sys                            # 最後にsys.exit(0)するために必要

# セッティング
bez = bezelie.Control()               # べゼリー操作インスタンスの生成
bez.moveCenter()                      # サーボをセンタリング
sleep(0.5)

# メインループ
try:
  print ("開始します")
  while True:
    # 頭のサーボ(pitch)
    bez.movePitch(1,10)
    sleep(1)
    bez.movePitch(1,-10)
    sleep(1)
    bez.movePitch(1,0)
    sleep(1)
    # 背中のサーボ(roll)
    bez.moveRoll(1,20)
    sleep(1)
    bez.moveRoll(1,-20)
    sleep(1)
    bez.moveRoll(1,0)
    sleep(1)
    # 回転台のサーボ(yaw)
    bez.moveYaw(1,30)
    sleep(1)
    bez.moveYaw(1,-30)
    sleep(1)
    bez.moveYaw(1,0)
    sleep(1)
except KeyboardInterrupt:
  print ("  終了しました")
  sys.exit(0)

アンプボードから音がでるように設定しよう

ラズパイは初期状態ではHDMI、イヤホンジャック、USBスピーカーから音がでるようになっていますが、ベゼリーボードに接続したアンプボードから音がでるように設定を変えてみましょう。

「setup_max98357.sh」はラズパイの設定を変えるためのシェルスクリプトです。 これを実行するとアンプボード以外から音がでなくなり、alsamixerによる音量調整もできなくなります。

sudo sh setup_max98357.sh
#! /bin/bash
# MAX98357が使えるようにラズパイの設定を変えます。

echo "Step1=/etc/modprobe.d/raspi-blacklist.conf"
sudo sed -i -e 's/blacklist i2c-bcm2708/#blacklist i2c-bcm2708/' /etc/modprobe.d/raspi-blacklist.conf
sudo sed -i -e 's/blacklist snd-soc-pcm512x/#blacklist snd-soc-pcm512x/' /etc/modprobe.d/raspi-blacklist.conf
sudo sed -i -e 's/blacklist snd-soc-wm8804/#blacklist snd-soc-wm8804/' /etc/modprobe.d/raspi-blacklist.conf

echo "Step2=/etc/modules"
# ヘッドホンオーディオの無効化
sudo sed -i -e 's/snd_bcm2835/#snd_bcm2835/' /etc/modules

echo "Step3=/etc/asound.conf"
sudo cp asound-conf.txt /etc/asound.conf

echo "Step4=/boot/config.txt"
# デバイスツリーオーバレイの追加
sudo sed -i -e 's/dtparam=audio=on/#dtparam=audio=on/' /boot/config.txt
sudo sh -c "echo dtoverlay=hifiberry-dac >> /boot/config.txt"
sudo sh -c "echo dtoverlay=i2s-mmap >> /boot/config.txt"

echo "設定完了。再起動(sudo reboot)してください"

音がでるかチェックしてみよう

下記のテストプログラムを実行して、アンプボードにつながったスピーカーから「フロント、センター」という声がでたら成功です。確認したら「ctrl+C」で終了しましょう。

$ python3 test_aplay1.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Test Code : スピーカーテスト
# wavファイル「Front Center」をaplayで再生する。

# モジュールのインポート
from time import sleep     # ウェイト処理
import subprocess          # 外部プロセスを実行するモジュール
import sys

# カード番号とデバイス番号の確認
print ("カード番号とデバイス番号の確認")
subprocess.call("aplay -l", shell=True)

# メインループ
try:
  while (True):
    cmds = ['aplay','-D','plughw:0,0','Front_Center.wav'] # コマンドリストの作成
    # plughw:の後の2つの数字が、カード番号とデバイス番号に合っていることを確認してください。
    proc = subprocess.Popen(cmds, stdout=subprocess.PIPE) # コマンドの呼び出し
    proc.communicate() # コマンド実行プロセスが終了するまで待機
except KeyboardInterrupt:
  print (' 終了しました')
  sys.exit(0)

マイクのチェックをしてみよう

ラズパイのUSB端子にUSBマイクを刺してください。

サンプルプログラム「test_usbMic1.py」は、USBマイクから3秒間録音したあと、それを再生するプログラムです。

python3 test_usbMic1.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Test Code : USBマイクテスト
# USBマイクの音をarecordで録音し、aplayで再生する。

# モジュールのインポート
from time import sleep                # ウェイト処理
import subprocess                     # 外部プロセスを実行するモジュール
import sys

# メインループ
print ("カード番号とデバイス番号の確認")
subprocess.call("arecord -l", shell=True)

print ("3秒間の録音を開始します")
cmds = ['sudo','arecord','-d','3','-D','hw:1,0','-r','44100','-f','S16_LE','test.wav'] # コマンドリストの作成
# hw:の後の2つの数字が、カード番号とデバイス番号に合っていることを確認してください。
proc = subprocess.Popen(cmds, stdout=subprocess.PIPE) # コマンドの呼び出し
proc.communicate() # コマンド実行プロセスが終了するまで待機
print ("録音終了")
sleep(1)

print ("録音した音を再生します")
cmds = ['aplay','-D','plughw:0,0','test.wav'] # コマンドリストの作成
proc = subprocess.Popen(cmds, stdout=subprocess.PIPE) # コマンドの呼び出し
proc.communicate() # コマンド実行プロセスが終了するまで待機

sys.exit(0)