スイッチサイエンスさんのオープンハウスに行ってきました。
そのときにリフロー体験をしてきました。クリームはんだを使うのは今回が初めてですが、うまくできるのでしょうか・・・。
作業場所はこんな感じ。チップ部品とホットプレートが並んでいます。
スイッチサイエンスさんのオープンハウスに行ってきました。
そのときにリフロー体験をしてきました。クリームはんだを使うのは今回が初めてですが、うまくできるのでしょうか・・・。
作業場所はこんな感じ。チップ部品とホットプレートが並んでいます。
RAPIROと遊ぶ時間がなかなか取れなかったのですが、少し遊んでみました。
先日RAPIROに取り付けたRaspberry Piにログインして、pythonでRAPIROを動かしてみました。
サンプルプログラムを参考にしてテストプログラムを作りました。単純にUARTにコマンドを投げるだけのシンプルなものです。
import sys
import serial
import os
import time
import datetime
com = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10)
sys.stdout.write('write #M0\n')
com.write("#M0")
time.sleep(5)
sys.stdout.write('write #M1\n')
com.write("#M1")
time.sleep(5)
sys.stdout.write('write #M2\n')
com.write("#M2")
time.sleep(5)
sys.stdout.write('write #M7\n')
com.write("#M7")
time.sleep(5)
sys.stdout.write('write #M0\n')
com.write("#M0")
これを実行してみました。
$ sudo python rapiro_test.py
write #M0
write #M1
write #M2
Traceback (most recent call last):
File "rapiro_test.py", line 19, in
com.write("#M2")
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 485, in write
raise SerialException('write failed: %s' % (v,))
serial.serialutil.SerialException: write failed: [Errno 5] Input/output error
$
なぜかエラーがでます。
調べたところUARTはOSのコンソールになっているということがわかりました。
psコマンドで確認すると
$ ps ax | fgrep AMA
2039 ? Ss+ 0:00 /sbin/getty -L ttyAMA0 115200 vt100
2055 pts/0 S+ 0:00 fgrep --color=auto AMA
確かにgettyがttyAMA0を使っています。
とりあえずコンソールから切り離します。まずはcmdline.txtの修正。
$ sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt
$ sudo vi /boot/cmdline.txt
これを
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
こうしました。
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
次にinittabの修正
$ sudo vi /etc/inittab
これを
#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
コメントアウトしました。
#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
rebootして確認
$ ps ax | fgrep AMA
2069 pts/0 S+ 0:00 fgrep --color=auto AMA
これで大丈夫。pythonで正常に動くようになりました。
RAPIROにRaspberry Piのカメラモジュールを取り付けました。
頭の中に取り付けますが、力がかかる部分ではないので、とりあえず2本のネジだけで固定しています。
カメラレンズの穴と、カメラモジュール基板のネジ穴が一致するためにはフレキシブルケーブルを上にして取り付けます。このケーブルの片端はRaspberry PiのHDMIとLANコネクタの間にあるコネクタにとりつけます。Raspberry Piへの接続方法や設定方法、カメラ関連ソフトウェアのインストールなどはRaspberry PiのCameraページが参考になります。
早速、Raspberry Piにログインして、カメラで画像を撮ってみました。
コマンドは以下のようになります。
pi@raspberrypi ~ $ raspistill -w 640 -h 480 -o capture.jpeg
撮影したcapture.jpegをMacに転送して表示したところ・・・
あれれ、逆さまになってしまいました。カメラモジュールの取り付け方を間違えたのかなと一瞬思いましたが、ネジ穴の位置から考えるとあの取り付け方しかできません。
何らかの方法で上下を反転させれば良いはずなので、いろいろ調べたところ、それを行うためのパラメタを見つけました。
-rot Set image rotation (0-359)
このパラメタを180と指定すれば上下反転されるはずなので、以下のコマンドを入力しました。
pi@raspberrypi ~ $ raspistill -w 640 -h 480 -rot 180 -o capture1.jpeg
撮影したcapture1.jpegをMacに転送して表示したところ・・・
今度は正常に表示できました。
別コマンドになりますが、もちろんビデオ撮影もできています。
単なるストリーミングという使い方もできますが、いずれは画像認識を試してみたいですね。(残念ながらこのあたりのノウハウはありませんので、これから勉強ですが・・・。)
あと、いろいろRAPIROをいじっていたらふと気がつきました。
このUSBコネクタの横にある、縦のスリットは何なのかと思っていたのですが、実はここからRaspberry Piの基板にあるLEDが良く見えるのです。このためにスリットを用意しているのではないかなと。良く考えられていると感心しました。
RAPIROが完成してRaspberry Piを載せてみました。
まずは、Raspberry Piの環境設定です。ボード単体で動かしてPythonのシリアルモジュールのインストールや無線LANドングルの設定など一通り済ませました。
設定が終わったところで、RAPIROに取り付けます。さすが専用設計のためRaspberry Piがピッタリ載ります。
あとは、Raspberry PiにログインしてPythonで書いたサンプルプログラムを実行するとコマンドに応じた動きをすることができました。カメラモジュールも購入していますが、それはまた後ほど。
少し動かしてみましたが、想像以上にバッテリーが無くなります。デバックにはACアダプタが必須と思われます。電源電圧がだんだん落ちてきてRAPIROが変な動きになってしまいました。
やむなくエネループを充電している間に、Raspberry Piの変わりにmbedをつないでみました。
実はRAPIROの電源をいれたあとに、Raspberry PiのLinux OSの起動に少し時間がかかるのが気になったのです。これがmbedだと電源ON即動くのではと考えたのです。
Raspberry PiとRAPIROのサーボモータを制御しているArduinoとの間の通信はシリアルですので、他のマイコンでも制御可能です。通信速度は57600bpsのようです。
mbedをブレッドボードに取り付けてワイヤーを引き出し、RAPIROのシリアルコネクターに接続しました。接続図は以下の通りです。
RAPIROシリアル --- mbed
---------------------------
1 5V ------- p2 VIN
2
3 GND ------ p1 GND
4 TXD ------ p28 tx
5 RXD ------ p27 rx
6 (BLACK)
---------------------------
mbedのオンラインコンパイラでさくっとプログラムを書きました。
RAPIROの電源を入れると無事動き始めました。
動いている様子をYouTubeにアップしておきました。
今回は単純なコマンドをRAPIROに送ることを試しましたが、Bluetoothでリモコン制御にしたり、様々なセンサーを使った制御などmbedが得意とする分野では手軽に使えるのではないかと思います。
Kickstarterで購入していたRAPIROが到着しました。2月からはスイッチサイエンスさんで一般販売されるようです。
到着した箱はこんな感じです。シンプルです。
封印シールがRAPIROになっています。
箱を空けると部品がでてきました。部品は破損しないようにプラスチックの枠にはめられています。
細かい部品はビニール袋に入っています。
Arduino互換のサーボモーターの制御基板はこんな感じです。
こちらは顔のLED基板でしょうか。
一通りの部品を確認したところで、組み立て開始です。
まずはサーボモーターに目印のシールをはります。これをやっておかないとどのケーブルがどのサーボモーターなのか分からなくなってしまいます。サーボモーターは大6個、小6個の合計12個です。
1個1個貼っていきます。
すべてのモーターにシール張りが完了しました。
次に電池ボックスを組み立てます。
エネループ単3が5本ですので、6Vの電源になります。
次に電池ボックスとサーボモーターを制御基板に取り付けます。こんな数のモーターを同時に制御するのは初めてです。
ここで電源を入れてサーボモーターを初期値にします。
サーボモーターが一斉に動きます。その様子をYouTubeにアップしておきました。
あとは組み立てマニュアルに従って組み立てていきます。この様子はVineでお楽しみください。
組み立て自体は難しいところはありません。組み立てマニュアルに詳細な写真が載っていますので、その通り行えば大丈夫です。ただしタッピングビスなので締め過ぎ無いように注意してください。
組み立てが完了したら動かします。
まずはArduino IDEを使って制御基板にスケッチを書き込みます。この基板はArduino Unoとして認識できます。私のMacBookAirではFTDIドライバをインストールして認識することができました。
サーボモーターの調整方法についても組み立てマニュアルにあるのでそちらを参考にしてください。
まだ完全には調整できていないのですが、とりあえず動かしてみました。Arduino IDEのシリアルモニタの画面からコマンドを入力します。私の場合は57600bpsで行いました。サンプルとして、#M0, #M1.....,#M8などのコマンドが準備されていてそれぞれプログラムされた動きをしてくれます。
まだこの状態ですと、RAPIROのサーボモーターをコマンド文字列で制御することしかできません。頭脳になるRaspberry Piを載せてプログラムすることでもっと複雑な動作やネットワークにつないだりということができるようになります。こちらは今後試していきます。
以前、mbedでも同様な仕組みでm3piというライントレーサーロボットを動かしたことがありますので、Raspberry Pi以外のマイコンを載せるのも面白いかなと思います。
2014年2月号のトランジスタ技術の付録はNXP LPC810マイコンと実験用プリント基板とCD-ROMです。
すでにLPC810は秋月で何個か購入して動かしたこともあるのですが、本誌にいろんな応用例が載っているようなので購入しました。
付録として実験用プリント基板がついてきましたので、手持ちの部品で可能な限り実装してみました。
LPC810マイコンの書き込みは、LPCXpresso LPC1768のLPC-Linkを使いました。(LPC-Linkにピンヘッダを取り付け済み)
取り急ぎLPCXpressoのサンプルプログラムのblinkをベースに、実験用基板でLEDが接続されているポートに書き換えてコンパイル後にLPC-Link経由でLPC810に書き込み、LEDが点滅することを確認しました。
次にEEPROMの書き込み、読み出しです。こちらも問題ありません。
次に温度センサーと大気圧センサーですが、こちらは手持ちの秋月のモジュールを使いました。
でも、実験用基板のピン配置はマルツのモジュール用なので、そのまま取り付けることはできません。
そのためセンサーモジュール取り付け用のICソケットからワイヤーを引き出してブレッドボード上のセンサーモジュールに接続しました。
問題なく動きますが、あまりかっこ良くありません。
マルツのセンサーモジュールを持っていないのであれば、ICソケットは取り付けずに実験用基板に引き出されているI2Cの端子を使うのが良さそうです。
もっともこのぐらいの規模であればブレッドボードで済んでしまうので、あまりこの基板のメリットは見当たりません。
しいて言えばI2C LCDがそのままハンダ付けできる点ぐらいでしょう。
でも初心者のかたには役に立つツールになるのではと思います。
来月号はLPC-Link2のようなものが付録になるようですが、LPC-Link2も持っていますので・・・。
突然ですが、Super AKI-80を使ってLチカをしてみました。
昔実際に作っていたZ-80系の古い本「つくりながら学ぶマイコン設計トレーニング」(CQ出版社)を入手したこともあり、本物のZ-80を動かしたくなってしまいました。
消費税があがるらしいので、秋月電子で売っているロジアナZEROPLUSを買ってきました。
早速この前作成した空中配線LEDマトリクス表示回路に接続してみました。
初めてロジアナを使いましたが、PCで動くので操作性は良いですね。適当にいじっていたら計測できます。
LEDマトリクスの動作タイミングも良く分かりますね。
どうせならプロトコルも見たいなと先日購入した8PDIP ARM LPC810と気圧センサーLPS331APを接続し、LPCXpressoでI2C通信のプログラムを適当に書いてその様子を見てみました。
ロジアナでI2Cの設定をして見てみるとI2Cのプロトコルが表示されました。
この写真はLPS331APとの最初の通信を解析したところです。
0x5CのデバイスLPS331APに対して、WHO_AM_I(0x0F)のコマンドを送ると応答として0xBBが返ってきているのが分かります。
別の表示方法もできます。
いやあ実に素晴らしいです。もっと早く買っておけば良かったです。