Saturday, July 21, 2012

苺サーボでヒューマノイドをつくる その1

 久しぶりにヒューマノイドロボットを仲間と作ることにしました。
ヒューマノイドは2人でチームを組んで作っていたのですが、今回は新たに後輩に参加してもらいました。
電気回路に強いM1と、オールラウンドになんでもこなす優秀なB3の二人です。

まずは準備として、今まで使っていた苺サーボ(PRS-S40M)の特性を測定しなおしました。
調べる項目は、以下の3つです。
 ・トルク
 ・消費電流
 ・消費電力

今まで電気系統が貧弱だったので、今回は安定した電気系統にするために消費電力などを知る必要があります。
実験内容は動画にしてYoutubeにUPしたので以下の動画で御覧ください。



実験結果として、およその値ですが以下のようになりました。

実験結果
印加電圧8.4 [V]
消費電流2.9 [A]
消費電力24 [W]
トルク23 [kg・cm]

*この値はこちらの実験環境による結果なので参考程度に留めてください。

他の会社のサーボモータなどでも比較のために試してみたくなりました。
ストール時の消費電流は結構大きく、予想を上回っています。
全部のサーボが一度にストールするとは考えられませんが、電気系統の設計を後輩には頑張ってもらわないといけないことがわかりました。
それでは今回はここまでです。

Monday, July 16, 2012

pyMCUで遊んで見る その2

 こんにちは。
今日はこのまえ紹介したpyMCUについてです。

前回はLEDがチカチカするだけでしたが、今回は7セグメントLEDを使用します。
参考にする例題はこちらです
http://www.pymcu.com/SevenSegmentLED.html

準備する部品一覧です。
高輝度ブルー7セグメントLED表示器(カソードコモン)C-551UB
カーボン抵抗(炭素皮膜抵抗) 1/4W220Ω 7本

例題で使用している7セグメントLEDはアノードコモンで、私が用意したのはカソードコモンとなっています。
単に在庫があったので使用しているのでどちらでも構いません。
ただし、当たり前ですがアノードコモンとカソードコモンで回路とプログラムが異なるので注意して下さい。
アノードコモンの回路とプログラムは例題を見てもらうとして、この記事ではカソードコモン用の回路とプログラムを記述します。

使用する7セグメントLEDと回路は以下のようになります。
pyMCU:7LED回路
抵抗値は好みに合わせて決めて下さい。
実際にブレッドボードに実装したのが以下の図です。
pyMCU:7LED回路実装

それでは次に環境設定です。
前回import sysのsys.pathにpymcuなどのフォルダを追加しましたが、その方法では一時的にしか追加されないとうい事がその後わかりました。
Windows上において自分のフォルダを追加するには、環境変数に記述する必要があります。
以下の変数を新規で作成します。

追記2012/07/19:Linux上においてもsys.pathには一時的にしか追加できず、PYTHONPATHに記述する必要があるようです。


変数名:PYTHONPATH
変数値:C:\Python26\Lib\site-packages\pymcu-1.0.8;C:\Python26\Lib\site-packages\pyserial-2.6


PYTHONPATHという変数名は決まった変数名で、この変数をPythonが自動的に参照してくれるようです。
この環境変数はsiteにもsysにも関係ないので、sys.pathにもこの変数の値は反映されないようです。
これで永続的に自分が用意したフォルダを参照出来るようになりました。

最後にプログラムを入力し、7セグメ ントLEDを点灯させます。


>>> import pymcu
>>> mb = pymcu.mcuModule()


ここまでは前回同様です。
pymcuモジュールをインポートし、pyMCUのボードを初期化します。



>>> led = [[1,2,3,4,5,6],[2,3],[1,2,7,5,4],[1,2,7,3,4],[6,7,2,3],[1,6,7,3,4],[1,6,5,4,3,7],[1,2,3],[1,2,3,4,5,6,7],[1,2,3,4,6,7]]


次にledというリストに上記のリストを入れ子にします。
これは順に0-1-2-3-4-5-6-7-8-9を表現するためにどのLEDを光らせるかというものです。
先ほど示した図のように、A-Gまである7セグメントLEDのどの位置を光らせれば目的の数字が得られるか考えれば、数字の意味がわかると思います。


>>> mb.pinLow([1,2,3,4,5,6,7])


1-7までのIOをLowにします(Highで点灯)。


>>> x = 0
>>> while 1:
        mb.pinLow([1,2,3,4,5,6,7])
        mb.pinHigh(led[x])
        mb.pausems(500)
        x += 1
        if x > 9:
                x = 0


xという変数を用意し、whileの中でカウンターの役割をさせます。
whileで無限ループを作り、プログラムを止めるまでカウントを繰り返させます。
mb.pinLow([1,2,3,4,5,6,7])は点灯しているLEDを消灯し初期化します。
mb.pinHigh(led[x])で順々に0-9までの数字を表示します。
mb.pausems(500)500 [ms]ウェイトします。
x += 1で次の数字に移ります。
if x > 9:変数xが9より大きければx = 0でカウントーを初期化します。

最後にプログラムから抜けるときはCtrl+Cで抜けることができます。
実際に実行すると以下のように数字がカウントされます(写真なので2だけですが)。
pyMCU:7LED点灯
以上のように簡単に7セグメントLEDが制御できました。
今回はここまでとなります。

Sunday, July 8, 2012

pyMCUで遊んで見る その1

 こんばんは。
今日は友人から借りているマイコン”pyMCU”について書きます。
公式ページ:http://www.pymcu.com/index.html
pyMCU:外観

このマイコンはまだマニアック過ぎて日本では公式ホームページからしか買えないようですが、そのうち流行ると思います。

"pyMCU”の特徴はなんと言ってもPythonでプログラム可能な点です。
Pythonなのでコンパイルもいらず、対話型シェルから気軽に動かせます。
テストが簡単にできたり、開発環境の準備が非常に簡単などメリット満載です。

今回は開発環境を用意します。
ちなみに私の環境は以下のとおりです。基本的な説明はWindows基準で行います。
Windows7 64bit
Python2.6.6
pymcu1.0.8
pyserial2.6

1.Pythonのダウンロード
http://www.python.jp/Zope/download/pythoncore
ここから好きなPythonをダウンロードします。
ちなみに、私はPython2.6.6を使用していたので、2.6.6を使用していますが、2.7系列が推奨のようです。
このあとの作業を考えると2.7系列が良いでしょう。

2.Pythonのインストール
インストーラを起動して、順次したがっていきます。
インストール先はCドライブ直下にあるとしてこの先は説明します。

3.pymcuのダウンロード
以下のサイトからpymcuをDLします。
http://pypi.python.org/pypi/pymcu/1.0.8

4.pyserialのダウンロード
*この作業はPython2.7の人は最初から入っていると思われるので多分いりません。
以下のサイトからpyserialをDLします。
http://pypi.python.org/pypi/pyserial/2.6

5.pymcuとpyserialモジュールのパス設定
ダウンロードしたpymcuとpyserialを展開し、以下のフォルダ上に配置します。
C:\Python26\Lib\site-packages
*バージョンが違う人は適せん読み替えsite-packages下に配置して下さい。
ここにフォルダごと移しましょう。
次にPythonを立ち上げ、対話シェルで以下のようなコマンドを入力します。


>>> import sys
>>> sys.path.append('C:\\Python26\\lib\\site-packages\\pymcu-1.0.8')
>>> sys.path.append('C:\Python26\Lib\site-packages\pyserial-2.6')


と打ちましょう。最後に


>>> sys.path
['C:\\Python26\\Lib\\idlelib', 'C:\\Windows\\system32\\python26.zip', 'C:\\Python26\\DLLs', 'C:\\Python26\\lib', 'C:\\Python26\\lib\\plat-win', 'C:\\Python26\\lib\\lib-tk', 'C:\\Python26', 'C:\\Python26\\lib\\site-packages', 'C:\\Python26\\lib\\site-packages\\OpenRTM_aist', 'C:\\Python26\\lib\\site-packages\\OpenRTM_aist\\RTM_IDL', 'C:\\Python26\\lib\\site-packages\\pymcu-1.0.8', 'C:\\Python26\\Lib\\site-packages\\pyserial-2.6']


と入力し、パスが追加されているか確認します。
これは私の環境のものなので、完全には一緒にならないと思います。
重要なのは"pymcu"と”pyserial”が追加されているかどうかです。
*ちなみにモジュールの追加場所はどこでも構いませんが、Pythonはsite-packagesに入れることを推奨しているようです。

6.環境設定の確認
対話シェルに以下のコマンドを入力して下さい。


>>> import pymcu


pymcuをインポートしてエラーが出なければ環境設定は完了です。
もしpymcuをインポートして以下のようなエラーが出た場合はモジュールがうまく取り込めていません。


>>> import pymcu
Traceback (most recent call last):
File "", line 1, in
import pymcu
File "C:\Python26\lib\site-packages\pymcu-1.0.8\pymcu.py", line 12, in
import sys, os, serial, time
ImportError: No module named serial


pyserialが見つかっていないので、もう一度パスが合っているか確認してやり直して下さい。

7.動作確認
それでは早速動作させてみましょう。
以下の公式チュートリアルのBlinking an LEDをやってみます。
http://www.pymcu.com/BlinkingLed.html

このチュートリアルには回路図や実装図まであるので非常にわかりやすです。
開発にはブレッドボードを使うとやりやすいとおもいます。

用意するものは以下のものです。ただし、あくまでも例で正直なんでも構いません。
・ブレッドボード
EIC-801
・LED
L314LBD 
・抵抗
カーボン抵抗1/4W 330Ω
・配線
ブレッドボード・ジャンパーコード(オス-オス)セット


 
import pymcu # pymcuモジュールのインポート

mb = pymcu.mcuModule() # pymcuの初期化 pymcuとPCの接続を行います COMやBaudrateの設定は自動

for x in range(25): # 25回ループ
mb.pinHigh(1) # IOのD1をHighに設定 LEDが光る
mb.pausems(500) # 500ms待つ
mb.pinLow(1) # IOのD1をLowに設定 LEDが消える
mb.pausems(500) # 500ms待つ


このプログラムを実行するとLEDが点滅してある程度したら終了すると思います。
pyMCU:LED点滅

これでpymcuの導入編は終わりです。