Tuesday, October 2, 2012

Python:グローバル変数 -Global Variables-

Tell the readers who do not read Japanese
Important thing is translated in English that is colored green.
I'm not good at English,so I apologize you if you struggle to read my page.
Summary:
This page is written about global value on Python.
You have to declare a 'global' to use global variables in Python.
I show some example ,and in last describe how to use global variables in class.

 こんばんは。
ここしばらくロボットではなくPythonの話ばかりですね。
でもブログとかに書いておかないと忘れちゃうのでご勘弁を。

では今日はPythonでのglobal変数の扱いです。
C言語のようにアクセスするとハマるので確実に一回は検索することでしょう。
そして、検索しても見つからなかったクラス内のグローバル変数の使い方について書きます。
��たぶんちょっと考えればわかるからあえて書いてないのかもしれませんが・・・)

それでは早速一番基本的な使い方を示します。
関数内でglobal宣言することで、グローバル変数を使用できます。
I show how to use simple global variables.
You can use a global variables by declaring a 'global' in the function

>>> def gl_test1():
        global g1
        print g1

>>> gl_test1()
0


次に、グローバル変数の値を変更してみます。
値が保存され、呼び出しのたびに加算されているのがわかります。
Next I try to change the value of a global variables.
You can recognize that saved the value adding one to every call.

>>> g2 = 0

>>> def gl_test2():
        global g2
        g2 += 1
        print g2

>>> for i in range(10):
        gl_test2()

1
2
3
4
5
6
7
8
9
10


最後に、クラスからグローバル変数を使う例を示します。
このように'self'を付けないとクラス内でグローバル変数にアクセス出来ません。
またグローバル変数を使うときは、安全性を考えてメソッドを使って値のやり取りをするのがお行儀の良いプログラムらしいです。
なので一番最後のように直接アクセスするような使い方はやめましょう。
Last, I show example of using global variables at Class.
You can access a global variables from the class by putting 'self' as an example.
I recommend that you access to the global variables via the method.


>>> class GlTest(object):
        g = 0
   
        def get(self):
                global g
                return self.g
        
        def add(self, x):
                global g
                self.g += x

>>> gc = GlTest()
>>> gc.get()
0
>>> gc.add(100)
>>> gc.get()
100
>>> gc.g
100


地味にこのselfをつけるのがわからず少し悩んだので書いておきました。

ちなみに今回から記事の一部を英語化しました。
これはアクセス解析したら外国の人もいるということがわかったのと、英語の勉強です。
英語間違ったり、不自然だったりしたら教えてください。
それでは今回は以上です。
Thanks you for read my page.

Sunday, September 30, 2012

Python:ビット演算

 こんばんは。今回もPythonです。

最近は、苺サーボ(PRS-40M)をPythonから制御しています。
昔はマイコンから制御して実験していたのですが、Pythonだと効率良く開発が進みます。
その時にハマった、C言語辺りからPythonに入った人が陥りやすい罠ついて書きます。

コマンド式サーボモータはコマンド生成や、データを読み込む時によくビット演算を用います。
負の値として苺サーボは二の補数表現を用いています。
これは1の負数である-1を表現するなら以下のようにな流れになります。

① ビット反転する
② 反転した数字から1を足す

これを実際にPythonで実行します。


>>> ~1 + 1
-1


正しそうな値が出てきました。

次に、苺サーボの現在位置を複合してみます。(苺サーボは現在位置を16bitのデータとして送ってくる。)
複合の手順は逆にたどり最後にマイナスを掛けます。
① 値から1引く
② ビットを反転する
③ 値に-1を掛ける(複合した値は正の数のため)

それでは実際に負の限界値である-3600(二の補数表現で61936)を複合します。


>>> ~(61936 - 1)
-61936


①と②を実行しただけでもうすでにおかしいです。
負の値になっています。何が問題なのでしょうか。
疑問としては桁数が不明なPythonでどのよにビット反転をしているのでしょうか?
二の補数表現は一番上位のビットを1にする決まりですが、一番上位とは変数のサイズが決まらないPythonでは表現できません。

そこでPythonではビット反転演算を以下のように定義しいるそうです。


-(値 + 1)


これなら納得です。最初の値が合って、現在位置の複合がうまく行かない理由がわかります。
実際には何が悪いのかわからずかなり戸惑いました。
C言語上がりの私には、こんな罠があるとは思いもしませんでした。

そこでビット反転はXORを使ってやることにします。


>>> -((61936 - 1) ^ 0xFFFF)
-3600


現在位置は16bitとわかっているので、0xFFFFでビット反転することが出来ます。



1111 0001 1111 0000 :-3600の二の補数表現
1111 0001 1110 1111 :-1した値

1111 1111 1111 1111 :0xFFFF

0000 1110 0001 0000 :XORした値(1がひとつだけあるところは1)


以上がビット演算の流れです。
Pythonではビット反転をするときはXORを使って反転するしかなさそうです。
知っていればハマりませんが、思い込むとなかなか抜けられなくて苦労しました。

今回は以上です。

2012/10/01 追記
せっかくなので、負値を二の補数表現に変換するプログラムも記述しておきます。
-3600という値を二の補数表現にします。


>>> p = -3600
>>> (-p ^ 0xFFFF) + 1
61936


これで上記の二の補数表現と同じになりました。

Tuesday, August 28, 2012

Python:PILをWindows7 64bit環境で使う

こんにちは。もう9月だというのにまだまだ暑いですね。

 今回はPythonを使用していてハマったエラーの対処法を載せておきます。
Pythonにおいて画像を処理しよとするとよく用いられるのが、PIL(Python Imaging Library )です。

[参考]Python Imaging Library (PIL) : http://www.pythonware.com/products/pil/

このライブラリを使うと簡単に画像処理ができます。
具体的にはPNG画像を表示するためにPILを使用したいと考えました。
しかし、ライブラリをインストール後以下の様なエラーメッセージが表示され、正常に動作しません。

ImportError: The _imaging C module is not installed

モジュールをインストールしたはずなのに見つからないようです。
*インストールはインストーラではなく手動で行いました
このエラーメッセージを頼りに検索していくと、Windowsの64bit環境において起きるということがわかりました。

[参考]流れ着いたら。。。:http://www.flotsam-fareast.com/2011/02/64bit-windows-python-image-library-20110212.html

そこで、以下のサイトから64bit用のPILのインストーラをダウンロードしてインストールしました。

Unofficial Windows Binaries for Python Extension Packages:http://www.lfd.uci.edu/~gohlke/pythonlibs/

しかし、インストラーを起動すると以下の様なメッセージが表示され、それ以上進めなくなりました。
Python version 2.* is required, which was not found in the registry
PILを手動でインストールしなければその時点で発生したエラーだと思います。
そこで対処法を調べると、レジストリを読み間違えているということがわかりました。
[参考]Yamada Program:http://yamada-program.blogspot.jp/2011/05/pythonsetuptools-64bit.html

ただし、私はPythonのレジストリを書き換えたくないという事情があり、他の方法を模索することとしました。

Unofficial Windows Binaries for Python Extension PackagesでダウンロードしたPILはインストールできないので、EXEファイルをExplzhで解凍して問題のあるDLLを直接置き換えることとしました。

まず、Python Imaging Library (PIL)からPython Imaging Library 1.1.7 Source Kitをダウンロードし、解凍します。
次にUnofficial Windows Binaries for Python Extension Packagesから自分のPython環境に合致するインストーラをダウンロードします。
ダウンロードしたインストーラをExplzhで解凍します。
展開すると中には、以下の二つのフォルダがあります。

・PLATLIB
・SCRIPTS

まず、PLATLIBの中のPILというフォルダの中身をすべて、Imaging-1.1.7>PILに上書きします。
次にSCRIPTSの中身をすべて、Imaging-1.1.7>Scriptsに上書きします。

最後にImaging-1.1.7のフォルダをPython26\Lib\site-packagesなどに移し、PYTHONPATHを通せば完了です。
PYTHONPATHの通し方は、前の記事を参照して下さい。

これでレジストリを書き換えることなくWindows7 64bit環境でPILが使用出来るようになりました。
今回は以上となります。

Sunday, August 12, 2012

Python:super()の謎エラー

こんばんは。最近健康面に不安を感じ、大学近くのジムに通い始めました。
大学に入る前より15キロ太ったので、なんとかそのときの体重に戻したいです。

 さて、最近Pythonにはまっております。
[参考]日本Pythonユーザ会 :http://www.python.jp/Zope
Pythonは非常に開発がやりやすいうえ、WindowsだろうがLinuxだろうが同じコードで動いてくれるのが研究でも趣味でも役に立ちます。
特にお気に入りなのは、対話型シェルを使用して一行ずつプログラムを書ける点です。
これを使えば、使い方の分からないメソッドをその場でテストしたり、自作関数の動作テストも容易に出来ます。
 また豊富な機能を実現するモジュールが数多く存在するのが素晴らしいです。
例としてTkinterというGUI製作用のモジュールが存在します。
[参考]Tkinter 8.4 reference: a GUI for Python :http://infohost.nmt.edu/tcc/help/pubs/tkinter/
PythonをWindowsにインストールしたときに標準でついてくるIDLEは、Tkinterで製作されているようです。
Tkinterの使い方は日本語のサイトはいつかあるようですが、紫藤さんのWebページを参考にさせていただきました。
[参考]紫藤のページ :http://www.shido.info/py/index.html

 今回はそのときに真っ先にハマった内容を備忘録を兼ねて書きます。
参考にしたサンプルの内容としてはWidgetを配置する簡単なものです。
その際の初期化を再現すると以下の様になります。


class Son(Parent):
    def __init__(self):
        Parent.Frame.__init__(self)



直接、親クラスの初期化メソッドを呼んでいました。
しかし、Python(2.x系列)では、


super(クラス名, self).メソッド(…)


と書けば親クラスのメソッドを呼べるのに、なぜそうしないのか気になりました。
そこで、実際にsuperを使用して記述しなおしました。


class Son(Parent):
    def __init__(self):
        super(Son, self).__init__()


これを実行すると、以下のようなエラーが出ました
TypeError: super() argument 1 must be type, not classobj
検索してみると、結構困っている人が多いようですが、なんとか以下のような記述を発見しました。
"the problem is that you are using old-style python classes, which do not support super. The easy way to fix this is to put object at the base of your inheritance tree. "
[参考]Open Source Applications Foundation :http://chandlerproject.org/Projects/UsingSuper
どうもクラスのスタイルが古いらしいです。
最初の例題通りのやり方で回避できるようですが、クラスのスタイルが古いとはどういうことでしょうか。
もう少し調べると、hope-echoesさんのwebページを参考にして答えが出ました。
[参考]大カフェイン :http://d.hatena.ne.jp/hope-echoes/20080409/1207732499
Objectクラスを親にもつクラスは全て新形式のクラスで、持たないものは旧形式のクラスのようです。
type()で調べると

・新形式


>>> type(datetime.datetime)
��type 'type'>


・旧形式


>>> type(Tkinter.Frame)
��type 'classobj'>


となりました。
ここでtypeが'classobj'になるものは旧形式のクラスのようです。
つまりTkinterのFrameは旧形式のクラスなので、super()のサーポート外だったようです。

 これでsuper()でエラーが出る理由と回避方法がわかりました。
Pythonはやりはじめなので、今後もこのようなエラーにハマると思いますが、がんばります。
今回は以上で終わりです。

Tuesday, August 7, 2012

苺サーボでヒューマノイドを作る その2

こんばんは。
そろそろ世間は夏休みでしょうか? 電車で親子連れや子供をよく見ます。

前回の実験にサーボモータを7つ追加して再実験しました。
今回も以下の項目を調べます。
 ・トルク
 ・消費電流
 ・消費電力

実験に使用したサーボは以下の8つです。すべてシリアル(コマンド)サーボとなっています。
選定基準は手元に合ったものや、借りられたものです。

・Pirkus
PRS-DE07MS
PRS-S40M

・Futaba
RS301CR-H3b
RS405CB

・KONDO
KRS-6003HV ICS
KRS-4033HV ICS
KRS-4034HV ICS
KRS-2552RHV ICS

実験の詳細や様子は以下の動画を御覧ください。


実験結果として、およその値ですが以下のようになりました。
シリアルサーボ実験結果
*この値はこちらの実験環境による結果なので参考程度に留めてください。

 実験結果を眺めるとRS-DE07MS以外は、公称値のトルクより低く出ました。
どのように公証トルクを算出しているのかわからないのでなんとも言えませんが、実験機材の都合として3 [kg]までしか計測できないので200 [mm]という長いアームのせいでうまくトルクが伝達していないのかもしれません。
しかし、実際にはロボットに組み込むので損失は絶対に発生します。
そいう意味ではそのへんも考慮しながら結果を眺めるといいかもしれません。

 消費電流はKRS-4034HVが出力トルクを考えると群を抜いて低いです。すごくエコみたいです。

また、本実験の動画にない注意としてサーボモータが全て新品というわけではありません。
RS301CR、KRS-6003HV、KRS-4033HV、KRS-4034HVだけが新品となっています。
なので、古いサーボほどへたっている可能があります。
それと、動画を見ればわかるのですが、サーボ出力が安定せず採用した値が妥当かどうかはわからないので、動画からご自分で考えていただけると助かります。

 ロボメカの後輩がすでにPWMサーボで同様の実験を行なっていますので、そちらの動画も楽しみにしたいです。
それでは今回はここまでです。

最後に、今回の実験に協力してくれた皆様ありがとうございました。

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の導入編は終わりです。

Friday, June 15, 2012

友人の就職を祝う

お久しぶりです。

友人の誕生日を祝うで祝った友達がめでたく就職しましたので、プレゼントを作りました。

その友人はイタリア料理屋で真面目にバイトしてたので、イタリア料理が上手です。
というわけで、プレゼントついでに料理を作ってもらえるように、料理道具をプレゼントしました。

料理道具としてまな板を選定し、”まぁまな板にレーザー彫刻でもしてプレゼントすることにするか”と仲間と話し合い決めました。
そして、レーザー彫刻するなら、これのオープニングに出てくるアレ風にするしかありません。
何を隠そうネットで話題になる前からMOCO'Sキッチンの大ファンだった私は、これがやりたくして仕方ありませんでした。

作り方としては、
1.友人の顔写真を入手する
2.余計な背景を消す
3.8bitくらいのグレースケールに変換
4.変換後顔の影などが気になれば、変換を取りやめ、影などを消したり、潰したりする
5.気に入ったグレースケールができたら、適当に似ているフォントを選び文字を入れる
6.適当な木のまな板を買ってきて、レーザー彫刻を行う
7.彫刻後サンドペーパーなどで表面を仕上げる

という具合です。
実際には西友で買ってきたまな板の出来が酷かったので、切ったり削ったりしてます。
また、友人の名前がたまたま元ネタ(MOCO'S)に近かったので良かったですが、遠い場合はなんとかもじって寄せてください。

出来たまな板が以下のモノです。
MOKU'Oまな板
実用に耐えうるよう表面の強度もろもろを考えて、彫刻の深さは薄めにしました。
あと時間がなく同じフォントを探したり、作ったりすることができなかったので、そのへんは時間を作ってやればよかったと反省してます。

これがプレゼントしたときの友人です。
MOKU'O


プライバシーを尊重してメガネをぼかしてます。
しかしこの写真からでもうれしそうな笑顔が伝わります♪
その後友人にイタリア料理を作ってもらい、楽しい飲み会となりました。
この仲間達とは大学出たあとも付き合って行きたいです。

プレゼント制作班の人お疲れ様でした。
MOKU'Oくん就職おめでとう。

それでは、今回は終わりです。

Thursday, May 17, 2012

audio-technica ATH-EQ300Mのプラグ交換

 こんにちは、またまた1ヶ月あいてしまいました。
別に活動していないわけではないのですが、研究関連のモノづくりが多く、論文発表より先にブログに書けないという状態です。

 今日はまたまた雑談扱いの、audio-technica ATH-EQ300Mの修理兼プラグ交換です。
今回はイヤホンプラグの付近で断線したらしく、モノラルのスピーカーになってしまっているので修理しました。

audio-technica ATH-EQ300M

このスピーカーは主にXperia acroに繋いで音楽を聞くのに使っています。
ATH-EQ300Mのプラグはストレートになっていて、本体横にジャックがあるXperiaをポケットに入れて使用していたため、プラグ付近でストレスが掛かって断線したようです。
買った自分が悪いのですが、本体の横なんてジャマな場所にイヤホンジャックを配置したのか謎です。
ストレートではあまりにジャマなので、修理のついでにプラグをL字のものに交換します。

交換するプラグは手持ちが無かったので、100均で適当なスピーカーを購入してそこからもらいました。
100均のイヤホン
ご覧のように非常にチープでプラグも金メッキではありませんが、おそらく私の耳基準で問題はないと思います。

まずはプラグから少し離れた位置でケーブルをカットします。
イヤホンプラグの接続
こういうケーブルの中身は皮膜線が通っていると思ったのですが、エナメル線が中に入っているんですね。
ATH-EQ300Mは赤と銅、緑と銅の組み合わせで、100均のイヤホンは赤と銅色、青と銅の組みわせでした。
銅はおそらくGNDで、規格があるのか知りませんが赤と赤が繋がるのではないかと思いました。
一応念の為に、テスターでチェックすると銅はGNDで赤と赤、緑と青という予想通りのものでした。

早速、線をハンダ付けしてプラグを交換します。
色つきの線は熱収縮チューブではハンダ後に覆い、GNDはむき出しのままにし、全体をまた熱収縮チューブで覆いました。
本当はGNDも熱収縮チューブで覆ったほうがいいかとも思いましたが、100均のケーブルがヒートガンの熱にすら耐えられないくらいのヘタレだったので、めんどくさくなってしましました。
修理したのがこちらです。
プラグの交換
修理後実際に使用して確かめましたがちゃんと直っていました。
音の変化は私にはわからなかったのでよしとします。

 今回はATH-EQ300Mのプラグの交換について書きました。
次回はもう少し面白い内容を書きたいものです。それではまた。

Tuesday, April 10, 2012

KitMill RD300を使ってみる -運用準備編その1

 こんばんは。結局前回から1ヶ月開いてしまいました。
この1ヶ月中間発表など色々あり、なかなかまとまった時間が取れませんでした。
新入生も入ってきたので、これからはもっと頑張らないといけませんね。

 それでは運用準備編です。
前回で組み上げましたが、このままでは使いづらいので使いやすくしていきます。
今回改善する点は2つです。

1)シャンク系が固定されているので、様々な刃物を使いにくい。
2)加工テーブルが高価でドリリングなどを行いにくい。

それでは順に解決していきます。

1)シャンクはスピンドルシャフトのユニットで決まってしまうため、基本的に変更はできません。
シャンク径6 [mm]のユニットを使っていますが、ストレートドリルΦ6しかつかめず、エンドミルの種類も限られます。
そこで、下図に示すように、シャンクを変換するパーツを製作します。
KitMillシャンク変換器
赤いパーツが制作する、シャンク変換器です。
HAKUの頃から毎回製作しています。
今回制作したのは以下の5種類です。
KitMillシャンク変換器実物

 Φ4とΦ3はエンドミルによく使う径なので、負荷に負けないようステンレスで制作し位置決め用のフランジも立てています。

 ドリル用にはΦ1.6、Φ2、Φ2.5を用意しました。材料にアルミを用いて、フランジも省略しています。
穴の径は、私がロボット製作時によく使うドリル径となっています。
��Φ1.6は2 [mm]、Φ2.5は3 [mm]のタップ下穴用。また3 [mm]を超えた穴はエンドミルにて加工します。)

これらのシャンク変換器は卓上旋盤と、卓上汎用フライス盤を用いて加工しています。
真円になるように旋盤加工の際は、精度に気をつけています。

これで様々なドリルやエンドミルをつけることができます。
製作方法ですが、適当な金属棒をシャンク径まで削り込み、止めねじ用にΦ3.2の穴を開ければ完成です。
フランジはあってもなくても若干装着しにくいだけで、実用上は大して変わらないと思います。

2)次は加工テーブルです。
板の切り抜き加工をするときには、Z軸方向に板厚+α [mm]加工を行い切り抜きます。
これはテーブルの傾きや、加工時の負荷による材料の逃げなどを考慮しているからです。
さらにドリリングの際には、少し深めに開けないと錐状の形状であるため、穴が開ききりません。
つまり加工テーブルには常に傷がつくということになります。
現状では、板はテーブルに両面テープで接着しているため、どんどん接着面積が減ったり、凸凹して扱いにくくなる問題があります。
そのたびに高価な加工テーブルを交換したり、傷が消えるまで削っていては面倒なうえ経済的ではありません。
そこで私は、アクリルサンデーの低発泡塩ビを加工テーブルに両面テープで貼り付け、それを加工面としています。
下の図の黒い部分が低発泡塩ビです。発泡塩ビは500円もしないと思います。
KitMill加工テーブル1
白い加工テーブルが見えていますが、現状で入手できるアルミの横幅が200 [mm]ですので、気にしません。
気になったり問題になる方は、大きめの発表塩ビを用意すると良いと思います。
発泡塩ビをしっかりと貼り付けたあとは、出来る限り太いエンドミルでテーブルを0.5 [mm]くらい削り落とします。
こうすることで、刃物と加工テーブルが水平になります。
この加工後はスピンドルのユニットや、加工テーブルなどは外さないようにしてください。
外したらもう一度キャリブレーションのやり直しです。
削ると以下の図のようになります。
KitMill加工テーブル2
なかなか綺麗に加工が出来ました。
加工パラメータは以下のとおりです。

・切り込み:0.5 [mm]
・送り   :800 [mm/min]

このとき注意ですが、原点から加工を始めて切り残しがあった場合は、原点センサの調整が必要です。
例えば、Y軸の手前に切り残しがあった場合は、原点が奥側にいき過ぎているので調整して手間に戻す必要があります。
フォトインタラプタに差し込んでいるバーの位置を調整すれば簡単です。
調整後は原点復帰させて、エンドミルの中心がちょうど原点の上に来るように調整すれば良いと思います。

以上の2点が準備できれば、快適かつ継続的に加工ができると思います。
次回はモータの冷却器を作成したいと思います。お楽しみに。

更新:2012/04/14 日本語がひどすぎたので、文章を修正。

Saturday, March 10, 2012

KitMill RD300を使ってみる -組み立て編その3

んばんは。もう春だというのにやたら寒い気がします。受験生の人はカゼをひかないよう気をつけて下さい。

 今回は、KitMillの基板について書きます。
この基板はTRA100と、TRA150の二種類あるようです。
違いは以下のようになっています。
・TRA100
電源:100 [W]
ステッピングモーター出力:1.5 [A]以下

・TRA150
電源:150 [W]
ステッピングモーター出力:3.0 [A]以下




 では制御基板の構成を見ていきましょう。

・通信ポート
右下に見えるUSB端子はPCとの通信用です。
以前はパラレルポートだったので、これは非常にありがたいです。
これで、レガシーポートがついてるマザボを探す必要がなくなりました。

・ステッピングモーター接続端子&原点センサー接続端子
下辺のあたりに並んでいるのが、ステッピングモーター周りの端子です。
今回は3軸の制御しかできないようです。
この辺は初期のHAKUからグレードダウンしていますが、多くの人が3軸しか必要としないので問題無いでしょう。

一つ気になるのが、電源OFF状態で手動でテーブルを動かすと、ステッピングモーターから発電される電力によって、電源LEDが光るのが気になります。
ダイオードが入っていないのでしょうか。これは大丈夫なのでしょうか。
ドライバーが死んでしまわないか心配です。

・スピンドルモーター接続端子
ステッピングモーターと減点センサの接続端子の間に挟まれているのが、スピンドルモーターの接続端子です。
スピンドルモーターとの配線は利便性を考えて、平型端子でコネクタ化しました。

 
配線は基板から来ている線と、モーターに付いている線の径がやたらと違うので、間に太い線を挟んで平型コネクタを付け、足した線と基板側の細い線を熱収縮チューブを何回か巻いてかさましして半田付けしています。
コネクタ化は無理にしなくていいかもしれませんが、DCモーターはヘタる可能性大なので、交換するときに手早く対処できます。

・モータードライバ
中央付近にあるピカピカの金属の下に、モータードライバがあります。
金属はモータードライバのヒートシンクで、ケースとネジで接続されます。
これでケース全体を使って放熱することができるので、熱対策はHAKUの基板よりもグレードアップしています。
モータードライバ自体は何を使っているのかはわかりませんでした。
ヒートシンクを外せばわかるのでしょうが・・・おそらくサンケンのドライバーだと思います。
どなたか調査したら教えて下さい。

・パラメータ設定SW
モータードライバの上にあるのが、パラメータ設定SWです。
マイクロステップのモードや、電流制限を切り替えることができます。
以前はPCを使って通信して設定していたので、かなりお手軽になったと思います。

・電源
制御基板の下に電源回路が入っています。
今まではACアダプターだったので、かなりスッキリしました。
 
 
回路は詳しくないのでわかりませんが、綺麗な基板だと思います。
どこぞのPC電源のように、コンデンサが斜めに生えていることもありません。
文句があるとしたら、ネジ止めされた制御基板の下にコネクタがあるので、配線するのにいちいち制御基板を完全に外さないといじれないのは不満です。
まぁこのあたりは余程のことがないかぎりいじらないので、いいかなと思いますが。
それとマニュアルなのですが、電源ユニットと制御基板の配線がなぜかPDFじゃなく、Webページにしかないというのが非常に不満です。
わざわざPDF印刷したのに、Webページにしかそこの部分の記述がないのは不便です。
必要なものは一箇所にまとめないと見にくいと思います。

 最後は不満で終わってしまいましたが、制御基板はUSB接続になり使いやすくなっています。
また熱対策もしっかりと取られており、進化を感じました。
あとは実際に動かして見るのが楽しみです。

 今後は、
・モーターの冷却器制作
・切子除去用の吸引器の制作
を予定しています。っていうかパーツは全部買ったのでやります。
それでは今回はこの辺りで。

Tuesday, March 6, 2012

KitMill RD300を使ってみる -組み立て編その2

 こんばんは。
ちょっと前の記事から間が開いてしまいました。

今回は気になったパーツや作りを見ていきます。
それから、ちょっと組み立て時に手こずった部分を書きます。

・ベーステーブル
Y軸と加工テーブルになります。これは非常に重いです。
一部二人で支え、ひっくり返しながら作業をする場面があります。
一人でやる場合は、配線用の接着式ダイマントを接着し、Y軸のリミットセンサの配線を先に済ませると、ひっくり返す工程がなくなるはずです。

 鋳物を部分的に削り出した非常に頑丈で重い部品です。
HAKU、BLACKⅡでは鉄の板金だったので、強度、精度共に信頼性が向上したのではないでしょうか。
これて、加工時の振動なども減少するものと思われます。
各軸のベースも同じことが言えます。
テーブル、サイドフレームなども鉄の削り出しです。
KitMillフレーム

・スピンドルユニット
プーリーが多段式になっているため、今までのように複数個買う必要はありません。
このユニットの取付には、位置決めピンを用いますが、これを正確につけるのは難しいです。
ひたすらにフレームとスピンドルユニットが平行になるように調整しました。
KitMillスピンドルユニット

・リードナット
リードナット本体はアルミ製のようです。
記憶違いがあったら申し訳ないが、HAKUは真鍮でBLACKⅡは樹脂製だったと思います。
ネジ穴には、リコイルインサートが挿入されているので、安心して締められます(締め付け過ぎには注意)。
リードスクリューとの接触部はアルミになります。
KitMillリードナット

リードナットはバックラッシを調整する必要があります。
この調整をどこまで頑張るかで、加工精度に大きく関わるので頑張って調整します。
ここの調整が甘いと、削った真円が楕円になったりします。
説明書にも詳しく書いてありましたが、どのように調整したか書きます。

 片方のリードナットを固定したあと、緩めたもう片方のリードナットを指定された方向に抑え付けながら締めます。
ここで締め終わったら、ハンドルを片側に回します、そして反対に回したときにハンドルの回転とテーブルの移動が追従するかを確認します(うまくいいってない場合は、ハンドルを反対に回してもテーブルが動きません。空転が起きます。)。
ダイアルゲージがある場合はそれを使えばいいのですが、あいにく持ち合わせが無かったので、指でテーブルを押しながら確認しました。
目での確認はやめた方がいいと思います。指のほうが敏感です。
これで指で回してわからない程度の回転のズレとなるまで調整しました。
ちなみにリードナットを抑えつけるときに、素手だけでは力が入らずうまく行かなかったので、太い鉄の棒でてこのように抑えつけて調整しました。
これはあまりおすすめできませんが、素手よりは確実にリードナットをリードスクリューの山に当てることができます。
素手でうまくいかない場合は自己責任で試してみてください。
KitMillリードナット調整

また、少し斜め気味にすることでもうまくいくことがありました(不均等に負荷がかかって、早くリードナットを消耗させる可能性有り)。
ここの調整は使いこむうちに何度もやると思うので、慣れるようにいろいろやってみるといいかもしれません。
ただしリードナットは傷つきやすいので、注意を払って常識の範囲内の力で調整してください。

・カップリング
スリットタイプのカップリングです。HAKUとBLACKⅡではセレーションタイプのカップリングでした。
ミスアライメントへの配慮だと思いますが、バックラッシ0でねじり剛性が高いスリットタイプのほうが好みです。
実際、BLACKⅡはスリットタイプへ換装していたので、改造する手間が減りました。
KitMillカップリング
カップリングはひとつだけネジが切ってあるのがZ軸です。間違えないようにしましょう。
また、換装する人はカップリングにネジを追加工しないと取り付けできません。

・リニアガイド
Y軸はAR-15FN B2-V1N-470Lです。
各型番の意味はURL:http://www.nabesei.co.jp/works/kaigai02d.htmlを見てください。
cpcのリニアガイドを鍋清株式会社が代理販売しているようです。

X軸はMR15MN SS2 V1 N-370L
Z軸はMR15MN SS2 V1 N-180Lです。
各型番の意味はURL:http://www.nabesei.co.jp/works/kaigai02a.htmlを見てください。

 Y軸だけ種類が違う理由は定格荷重とかのせいでしょうか?
MRよりARのほうが何倍か丈夫なようです(曖昧ですみません。詳しくはスペック表を見てくださ。)。
全軸がY軸に乗ることになるので、当然耐久性が必要ということだと思います。

ちなみに同じページでボールスクリューが売ってます。
発売が予定されてるKitMill用のボールスクリューはこのあたりのやつでしょうか。
URL:http://www.nabesei.co.jp/works/kaigai04a.html

 それでは今回はこのあたりで。間違いなどありましたらコメントお願いします。
次回はコントローラあたりを見たいと思います。

Saturday, February 25, 2012

KitMill RD300を使ってみる -組み立て編その1

 こんばんは。
KitMillの組み立てを行ったので、組み立て編を書きます。
ちなみに組み立て時間は、片付けなども入れて7時間です(休憩時間を抜く)。
長くなったので数回に分けました。
今回は主に、組み立てに使用する工具や、準備しておくと便利なものの紹介です。

それではさっそく組み立て編です。
まずは使用した工具の説明になります。
KitMill工具類

・ピンセット
 セットピースを挿入するときに使用します。あったほうが便利でしょう。

・ナットドライバー
 グリースニップルをリニアガイドにつけるときに使用します。
おすすめはしませんが、プライヤー系工具で代用できます。

・ボールレンチ
 メインで使用されるキャップボルトやセットスクリューで使用します。ただのレンチでもいいですが、ボールのほうが便利でしょう。

・マイナスドライバー
 太いものはアルミハンドルのつまみを付けるときに使います。アルミハンドルを持っていない人は必要ありません。
細いものは、スピンドルモーターのケーブルを基板に取り付けるときに使います。

・プラスドライバー
 プラスドライバーはバインドスクリューなどで使います。

・はさみ
 袋の開封や、タイラップの切断に使います。

・半田ごて&はんだ
 写真にはありませんが、半田ごてとはんだがスピンドルモーターの取り付けに必要になります。

以上のような工具があれば組み立てが可能です。
工具は正しく良いものを用意しましょう。
特にドライバーやレンチなどは何かで代用したり、無理やり回すとねじを破損して、面倒なことになるかもしれないので注意しましょう。

 それと、これは私の用意したものですが、以下のようなものがあると便利です。
・トレー
 100均の植木鉢用の受け皿を使いました。ここに必要なネジやセットピースなどを入れます。
間違いや、紛失を防止します。
KitMillトレー

・平型端子
 100均で買ってきた、雄雌セットの平型端子です。スピンドルモーターはコネクタ化されていないので、これを使用してコネクタ化します。コネクタ化することで、将来の保守などを行いやすくします。
別に平型端子でなくても、ラジコン用の端子などお好みのものを使用してください(定格に注意)。
KitMill平端子

・ウエス(いらないTシャツや布の切れ端)
 多くの金属部品はさび止めのためにグリスが塗られています。
またリードスクリューなどにグリスを塗ります。
そのため手が油だらけになるので、ウエスを用意しておきましょう。

・テプラ(3色のテープ)
 KitMillでは、ステッピングモーターや原点センサにはそれぞれ同じケーブルを用いて接続します。
つまり基板に取り付けるときに、どのケーブルがどの軸のモーターやセンサなのかの判断がつきません。
そこで、どの軸から来たケーブルなのか判断するためのテープを、ケーブルにまくことをお勧めします。
KitMillケーブル

・プラケース
 このキットでは少し余計にネジやセットピースが入っているので、それらを最後に保存するケースが必要です。
どこかに混ぜてしまわず、KitMillの予備部品として分けて取っておきましょう。
KitMill保守部品

 以上で事前に準備しておく工具などの紹介を終わります。
なるべく短く書いたつもりですが、やはり長くなってしまいましたね。
今回はここまでです。次回は組み立て時の注意点や各部品を見ていきます。

Tuesday, February 21, 2012

KitMill RD300を使ってみる -組み立て準備編

 こんばんは。
KitMill RD300を研究室で買ってもらったので、レビューがてら実際に何か削るところまでやってみようと思います。
 また、別途オプションとして原点センサーとアルミハンドルとスピンドルユニットφ6を購入しています。
HAKUの経験から原点センサーとアルミハンドルは絶対に買うべきだと思います。

 スピンドルユニットφ6はいつもの、シャンク径変換器を作るので購入しました。
しかし、ユニットごとの販売なのでお値段がHAKUの時よりも高いのが気になります。
Makeのときにお話を聞きましたが、スピンドル周りは精度が向上しているらしいので、価格UPは仕方ありませんね。
しかし、ここまでの値段なら最初からφ3で固定するのではなく、購入時に選択できるようにしてほしいですね。

アルミ製加工テーブルも気になりましたが、これは自分の使いやすいものを後程自作しようかと思います。

 今回はパーツ確認と、コントローラーの周りをちらっと眺めた感想です。

まずは、パーツを出してすべての部品がそろっているか確認します。
本体の説明書は61Pあるのですが、24Pは部品の確認です。
箱の中に入ったままではどこに何があるのかわからず、確認できないので一度すべて並べてみるしかありません。
テーブルに広げるとこんな感じになります。こんなアングルじゃないと全部写真に入りきりませんでした。
KitMillパーツ全景
正直、研究室じゃなくて自宅の自室6畳だったら、どうやって確認しようか迷ってしまいます。
マニュアルにどの箱のどこに何があるか書いてあれば、ピンポイントで部品を確認できるので広げる必要もないのですが。
ここらへんは改善してほしいですね。

数時間パーツ単位で眺めながらニヤニヤしたり、研究室の先生や同僚に自慢してちっとも作業が進みませんでしたw
この瞬間が最高に楽しい時間だったりします。

確実にHAKUやBLACKⅡのフィードバックがかかっていて、すごくいい感じです。
筐体については次回として、まずはコントローラーについてざっと思ったことを書きます。
コントローラーのパーツだけ広げるとこうなります。
KitMill基板

余談ですが、パーツに104のセラコンがあるのは笑いましたww
まぁいつもモーターにノイズ除去として自分でつけていたので、最初からついているのはとても親切です。

コントロールユニットはこのように非常におしゃれな見た目となっています。
中には電源と制御基板が入っています。ここは最初から組み立て済みとなっています。
まだ中を開けていないので表面的な評価しかできませんが、一応見ていきます。
KitMillコントローラー全面
右上のほうにパイロットランプなどが装備されています。
HAKUやBLACKⅡは通常見えない位置にLEDがあり、どうやって確認するんだよとツッコみを入れつつ、自分でLEDを増設していたので、その作業はいらなさそうです。

裏面は、ステッピングモーターなどのポートになっています。
HAKUでは、コネクタ類はケースを開けないといじれなかったので、メンテナンス性が向上しています。
KitMillコントローラー裏

 確認作業は、スピーディーにやれば1時間もあればできると思います。
説明書はPDFでDLしますが、これは印刷してしまいましょう。
パーツ確認や、組み立て時にPDFではいろいろと面倒だと思います。
 そして、次の作業は組み立て説明書の熟読になります。
先にすべての項目に目を通しておくことで、作業の見通しが立てやすくなります。
帰りの電車で読み込んだので、明日は組み立てに入りたいと思います。

HAKUよりも明らかに進化しているRD300で早く削ってみたいです。
それでは今日はこの辺で。

Saturday, February 11, 2012

Androidの開発をやってみる -環境・エラー集

 こんばんは。
今回はAndroidの開発環境と、出会ったEclipse謎のエラーについてです。
開発環境は、
OS:Windows 7 Ultimate 64bit
Java:1.7
Eclipse:Indigo (3.7.1) IDE for Java Developers

で開発してます。
Eclipseは使いやすいのですが、ちょいちょいVisualStudioと比べると使いづらいところがあります。
もっさりした操作感と、謎のエラーが頻発して、何もできなくなることがあるのが困りものです。
以下に私が出会ったエラーと、その対処法が書いたサイトを載せておきます。
参考にさせていただいたサイトの方々に、この場をお借りしてお礼を申し上げます。

・@Overrideがいつまでも間違いがある状態になる(赤線が引がれたままでコンパイルが通らない)
エラーコード:Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
原因:Java Compiler Compliance Levelが間違っている。
対処:ProjectのProperties->Java Compiler->JDK Compliance->Compiler compliance Level:1.6
という風に変更する。
CompilerComplianceLevel
参考:
http://stackoverflow.com/questions/7637144/android-requires-compiler-compliance-level-5-0-or-6-0-found-1-7-instead-plea

・エミュレーターに一切入力ができなくなる。
エラーコード:emulator error: ##KBD: Full queue, lose event
原因:不明(バグや64bitに見られる問題との説あり)
対処:エミュレーターを削除して、新しいエミュレーターを作成する(コマンドプロンプトから再起動やリフレッシュをしても効果なし)
参考:http://groups.google.com/group/android-ndk/browse_thread/thread/9eb0842fdc2ee227?pli=1

・コードに間違いはどこにもないのにコンパイルが通らない
エラーコード:res\layout\mainW.xml: Invalid file name: must contain only [a-z0-9_.]
原因:xmlファイルの名前は小文字英字、数字、_しか使えない。クラスファイルには大文字も使えるので間違いやすい。
対処:xmlファイルの名前から不正な文字を消す。

自分は出会ってないがこのようなエラーもあるらしい
原因:デバッグ用証明書(debug.keystore)の有効期限切れ
対処:debug.keystoreを削除後、Project->Clean。
参考:http://team-pag.interprism.co.jp/member/okazawa/blog/?p=36

・drawableにファイルを入れているはずなのに、名前が見つからない
原因:プロジェクトが更新されていない。
対処:プロジェクトファイルを右クリックしてRefresh。

・なぜかわからないが実行時に変なエラーがでる
原因:ゴミデータのようなものが残っている(らしい・・)
対処:Project->Cleanで対象のプロジェクトのゴミを取り除く。

・どんなエラーだか忘れてしまった
エラーコード:An internal error occurred during: “Launching {project name}”.
java.lang.NullPointerException
参考:http://myerrorsandmysolutions.wordpress.com/2011/11/17/eclipse-an-internal-error-occurred-during-launching-java-lang-nullpointerexception/

・Eclipse立ち上げ後にいきなり怒られて、すべてのプロジェクトにエラーが出ている。
エラーメッセージ:This Android SDK requires Android Developer Toolkit version 14.0.0 or above.Current version is 11.0.0.v201105251008-128486.Please update ADT to the latest version.
原因:古いADTを更新していないせい。
対処:Help->Checking for updatesでADTを更新する。
参考:http://inujirushi123.blog.fc2.com/blog-entry-35.html

今のところ私が出会ったエラーはこのあたりでしょうか。
開発の締め切りが来ているときに限って、このあたりのエラーが発生して時間を無駄に食いつぶすことがよくありました。
そろそろエラーにも慣れてきたでしょうか。
ちゃんとできる人からみたら謎でもなんでもないでしょうか、初心者なので大目に見てください。
それでは今回はこのあたりで。

Monday, January 23, 2012

Androidの開発をやってみる -端末編

 こんばんは。
今晩は、横浜は雪が降ってます。すごく寒いです。
会社説明会から直帰して正解でした。

 今日はAndroidの開発についてです。
新しいPCに環境設定をしのたのと、開発用の端末を購入しました。
今回は開発用端末について書きます。

私は普段使いとしてXperia Acroを持っていますが、それで開発はしたくありませんでした。
というのも間違えて文鎮にするのは嫌だったからです。
あとは、将来的にはロボットに搭載する予定なので、安くて比較的どうなってもいい端末が必要でした。
そこでIS05を選定しました。
これは秋葉原やネットで1万円いかないくらいで売っています。
また、端末の性能もよくサイズも小さく、今回のテーマにもってこいでした。
そして、メジャーアップデートでAndroidが2.3まで公式で上がるのも魅力でした。(2.3だとセンサ系が非常に使いやすい。)
というわけでさっそくアキバで買ってきました!
IS05
フィルムは【ノングレアフィルム】 au IS05専用 指紋が目立たないフィルムを使用してます。

さっそく買ってきて、いろいろ遊んだあと、いざアップデートをすると最新版ですと言われてアップデートできませんでした。
調べるとケータイアップデートをして、最新状態にしないとメジャーアップデートできないことが判明しました。
それじゃ、とケータイアップデートを施すと、auICカードがないといわれます。
嫌な予感がしながらいろいろ調べると、IS05はパソコンやWifi経由ではアップデートできないようです・・・
泣きそうになりました。私はドコモユーザーなんです。
��SIMロックを外してauICカードを友人から借りる場合は、SIMロックを外しても一度auICカードを挿すとそのカードでロックされることに注意してください。またアップデートは通信料がかかりませんが、挿している間にどのアプリがどんな通信をするかは不明なので、スマホで使用しているICカードを使わないと料金がすごいことになるかも知れないので注意してください。)
せっかく買ってきた、かわいいIS05をその場でたたき割ってやろうかと思いました。
ちゃんと調べなくてドコモユーザーの私が悪いですが、それでも納得はいかないわけです。

しばらくダークサイドに堕ちたあとに、しょうがないからNexus S買おう!ということでポチりました。
Nexus Sならファームのアップデートなどに悩まなくて済みます。
最初からそうすればよかったよ。
代償は支払いましたが、いい歳してケチるなということがわかりました。
そして国内モデルのスマホはもう買わないでしょう。
開発者になりたいならグローバルモデルを買いましょう。(そこをハックしてこそ真の技術者かもしれませんが・・)

最後に今回買ったスマホのアクセサリを紹介します。
プロテクトジャケット for Google Nexus S スケルトンホワイト
Super Protector (クリスタルクリア) Google Nexus S
を買いました。
しかし注意として、ほとんどのNexus S用のアクセサリはGT-I9020のものとなります。
よく国内で見かけるNexus SはGT-I9023なのでサイズが異なります。
とくにジャケットは少し小さいらしくうまく入らないようです。
しかし今回買ったジャケットは柔らかめなので、GT-I9023でもぴったりとはいいませんが、実用レベルで入ります。
フィルムもうまく貼れないという報告を読みましたが、注意深くはればそのようなことはありません。
ただし、ノングレアフィルムではないので、ほこりが気になってかなりの時間がかかりました。
貼ってはほこりチェックを行い、ほこりがある付近をテープで持ち上げてテープでほこりを取り、ダスターで吹いてまた貼る、という作業を延々とやりました。
NexusS
ジャケットとフィルムを装着した状態。ほこりが見えるがそれはフィルムの上に載っているだけ。

次回は開発環境について書きます。そでは。

Sunday, January 22, 2012

5年くらい頑張ってほしいメインPCをつくる

こんばんは。
今回はメインで使用するPCを組みました。

構成はありきたりです。
というかありきたりになるようにしました。
というのも以前にPCが故障した際に、ネットで情報が得られるかどうかが非常に重要だと感じたからです。
以下が構成になります。

・ケース
Silencio 550 RC-550-KKN1-JP [ブラック]

・CPU
Core i7 2700K BOX
Corei72700K

・メモリ
KHX1600C9D3K4/16GX [DDR3 PC3-12800 4GB 4枚組]
KHX1600C9D3K4/16GX
一個一個にヒートシンク?がついていてかっこいい。

・マザーボード
P8Z68-V PRO/GEN3
P8Z68-V PRO/GEN3
すべて青のアルマイトで、見えなくなってしまうのが惜しい。

・ビデオカード
N560GTX-Ti Hawk [PCIExp 1GB]

N560GTX-Ti Hawk
カバーがかっこいい。Mini-HDMIの端子で接続するが、HDMIを接続できる変換器が付属。

・SSD
Crucial m4 CT128M4SSD2

電源は前のものを使いまわしています。
モニタは少し前に買った、BRAVIA KDL-32CX400 [32インチ]を使用しています。

前回はMini-ITXのケースだったので、今回は配線も組み立ても非常に簡単でした。
またケースも配線を裏に通せるように工夫されていて、エアフローもばっちりです。

ケース内配線裏
ケース内配線表

ちなみにCPUファンは前回余ってしまったファンを流用しました。
静音ケースと合わせて騒音は気になりません。
SSD用のマウンターも付属しており、値段の割に非常にお買い得なのではないでしょうか。

できたPCはストレスを感じさせないサクサク動作です。
このPCを無駄スペックと言われないよう、ちゃんと開発に使いたいと思います。

Tuesday, January 17, 2012

audio-technica ATH-EQ300Mの修理

今日は雑談です。
すごいくだらない話ですが、耳掛けヘッドフォンをちょっと修理したのでとりあえず書きます。

audio-technicaのATH-EQ300Mを9月くらいに購入しました。
EQ300Mは今はあまり流行っていない耳掛けのヘッドフォンです。
値段も安く購入時点で800円でした。(今はAmazonで750円で売っているようです。)

Amazonのレビューにもありましたが、今回紹介する破損部以外にも、耳掛けの透明な樹脂が根元から折れるという問題もあります。
私が今回修理したのは、イヤーパッドのスポンジが外れたのを直したのですが、耳掛けが折れると修理は困難です。
購入して1日で耳掛けが折れてしまったので、購入店(Nojima)で交換してもらいました。
それ以降は折れていないので個体差があるのかもしれませんが、基部に強く負荷がかかる設計なので遅かれ早かれ壊れると思います。
買う人は、耳掛けが壊れたら諦めるくらいで考えておいたほうがいいと思います。

今回はイヤーパッドのスポンジが、写真のようにめくれてしまう破損の修理を行いました。(写真ではすでにイヤーパッドを本体から取り外しています)
EQ300Mの破損部

最初はスポンジの端をマイナスドライバーで押し込んで治そうとしたのですが、うまくいきませんでした。
そこでイヤーパッドと本体を爪を挿し込みながら外しました。
中身はこのようになっています。
EQ300Mの開放

大体予測がついていたのでやりませんでしたが、マイナスドライバーなどでこじ開けると、思ったよりも深く挿入してスピーカーのワイヤーを傷つける恐れがあるのでやめたほうが無難だと思います。
爪は円周上に3つ有るので、適当に縁にそってグッグッと回しながら開けると簡単に開くと思います。

問題のスポンジは爪付近に接着剤で付けてあります。
接着剤の塗布がいい加減なので剥がれてしまったようです。
また接着面もたいして大きくない上に、材料が材料なのでほとんど強度はないでしょう。
そこでスポンジが傷つくのを覚悟で、爪にスポンジをかぶせて、スポンジがかぶったまま蓋を閉じました。
これでスポンジがちぎれるまではイヤーパッドにくっついていてくれるでしょう(爪と穴ではさんでいるので本来の強度より確実に落ちます)
最後に音を流して確認したところ無事に治ったようです。
ただし私は音にうるさくないので、聞く人が聞いたら影響が出ているかもしれません(うるさい人はこんな安物買わないでしょうが・・・)

今回は小ネタでしたが、こんな小ネタもはさむとブログ書きやすいなとわかりました。
気張らずもう少しライトなネタも放り込んで行きたいと思います。

Sunday, January 15, 2012

ストレスは食欲で散らせばいいじゃない

 明けましておめでとうございます。
今年一発目なので少し豊富でも。

・Androidの開発を行う

・STM32マイコンを使えるようになる

・PIC使えるようになりたい

・研究頑張る

このあたりでしょうか。
年末まで学会や輪講などでぜんぜん趣味に費やせなかったので、もう少し趣味に力を入れたいですね。
卒業するまでに趣味で何か開発していける力を付けたいわけです。
趣味=ほぼ研究という状態なので、趣味を頑張っても研究が進むわけで一挙両得です。

さて写真が一個もないと寂しいということで今日は食い物でも載せます。

・まずはお気に入りのラーメン屋「がっつん」。
がっつん

写真はらーめん大盛りです。ここは見た目通りの二郎系です。
トッピングはにんにくしかありません。またスープの味がよくぶれるのも特徴ですww
調布にあって結構行列ができますが、店主の手際が悪いのも起因してます。
味は二郎インスパイアのなかでは個人的には好きです。
ここで大盛りを食べると死にそうになりますが、1ヶ月に一回着たくなるから不思議です。

・次に何かと話題の月島もんじゃのお店「
月島もんじゃ

写真はどう見てもアレですが美味しかったです。
色々なもんじゃをみんなでワイワイ言いながら食べました。
焼き方なども丁寧に教えてくれてお店の感じも非常に良かったです。
場所は芝浦大学豊洲キャンパスから歩いて20分かからないくらいです。
芝浦によったついでに食べに行きました。
本当はランキングごまかした店に行きたかったのですが、どの店かわからず断念。

・最後は秋原葉で気になってたラーメン屋「麺処 マゼル」。
MAZERU

写真はまぜそば塩大盛り、野菜にんにくです。
秋葉原の岩本町に近いゴーゴーカレー付近にあるお店です。
まぜそばは初挑戦だったのですがうまかったです。
特にチャーシューが肉厚で肉増しにすればよかったと思うくらいです。
トッピングは他にもチーズというのがあり気になりました。
醤油と塩味があり他の人は塩が結構多かったような気がします。
それとカウンターしかなく10人入れないお店なので行くときは時間と人数に注意したほうがいいです。
カラメにしとかないと、野菜増しにした場合野菜の水分で最後の方は味がぼけるかもしれません。
テーブルにタレっぽいのがあるので、それでなんとかなるかもしれませんが醤油ぽかったです。
次回はカラメにします。

それでは今回はこれくらいで。
次回はこのとき買った奴の話でもします。
それでは。