ベゼリーボードに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マイクを刺してください。
まず下記のプログラムを実行して、マイクの感度を最大にします。
amixer -D hw:1 sset Mic 100%
次にサンプルプログラム「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)
すごく小さな音でしか録音できなかった場合は、USBマイクの感度が小さいことが原因かもしれません。下記のコマンドを実行することで確認してみましょう。
alsamixer
alsamixerが起動したら、パソコンの「F6」キーを押します。サウンドカードのリストが表示されるので、「USB PnP Sound Device」を選んでください。
続いて「F4」キーを押してください。マイクの感度(録音レベル)が棒グラフで表示されます。キーボードの上下キーで調整し、感度を上げてみてください。「ESC」キーで終了します。