RAPIROをpythonで動かしてみました

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_uart.jpg

Lenovo Yoga Tablet 8を買いました

Lenovo Yoga Teblet 8を購入しました。購入動機は3G版でもそこそこ安く、おまけに3月末まで4000円キャッシュバックキャンペーンをやっているのです。レビュー評価も良いようで、Nexus7 2012並みのスピードとのことで使えそうです。

到着したYoga Tablet 8です。純正のスリーブケースも買いました。

yoga8_1.jpg

純正スリーブケースはいい感じです。マグネットで自然に吸い付きます。

yoga8_5.jpg

でも純正ケースに付属の液晶保護シートの端が梱包が悪く折れ曲がっていました。本体に貼付けてもこんな感じ。ここは減点ですね。

yoga8_4.jpg

裏返して、手持ちのmicroSDカードと、手持ちのIIJmio SIMカードを取り付けましたが、外側からはカードを装着しているのかしていないのかも分かりません。何かに当たった拍子でカードが抜け落ちるということは無さそうです。

yoga8_6.jpg

いつものようにセットアップをしたところ、特に何もしなくてもIIJmio SIMが認識されてアンテナが立っていました。この点は面倒なAPNなどの設定をしなくても良いので楽です。

yoga8_7.jpg

Yoga Tablet 8の特徴でもあるバッテリーシリンダーですが、これを使った傾斜は非常に見やすく、立てることもできますので非常に便利でした。

スピードも各種レビューのように以前使っていたNexus7 2012ぐらいでしたので、ストレスもなく操作することができます。

問題は液晶保護シートが今ひとつということですが、これはまたの機会に交換したいと思います。

RAPIROにカメラを取り付けました

RAPIROにRaspberry Piのカメラモジュールを取り付けました。

頭の中に取り付けますが、力がかかる部分ではないので、とりあえず2本のネジだけで固定しています。

rapiro_camera.jpg

カメラレンズの穴と、カメラモジュール基板のネジ穴が一致するためにはフレキシブルケーブルを上にして取り付けます。このケーブルの片端はRaspberry PiのHDMIとLANコネクタの間にあるコネクタにとりつけます。Raspberry Piへの接続方法や設定方法、カメラ関連ソフトウェアのインストールなどはRaspberry PiのCameraページが参考になります。

早速、Raspberry Piにログインして、カメラで画像を撮ってみました。

コマンドは以下のようになります。

pi@raspberrypi ~ $ raspistill -w 640 -h 480 -o capture.jpeg

撮影したcapture.jpegをMacに転送して表示したところ・・・

capture.jpeg

あれれ、逆さまになってしまいました。カメラモジュールの取り付け方を間違えたのかなと一瞬思いましたが、ネジ穴の位置から考えるとあの取り付け方しかできません。

何らかの方法で上下を反転させれば良いはずなので、いろいろ調べたところ、それを行うためのパラメタを見つけました。

-rot Set image rotation (0-359)

このパラメタを180と指定すれば上下反転されるはずなので、以下のコマンドを入力しました。

pi@raspberrypi ~ $ raspistill -w 640 -h 480 -rot 180 -o capture1.jpeg

撮影したcapture1.jpegをMacに転送して表示したところ・・・

capture1.jpeg

今度は正常に表示できました。

別コマンドになりますが、もちろんビデオ撮影もできています。

単なるストリーミングという使い方もできますが、いずれは画像認識を試してみたいですね。(残念ながらこのあたりのノウハウはありませんので、これから勉強ですが・・・。)

あと、いろいろRAPIROをいじっていたらふと気がつきました。

rapiro_led.jpg

このUSBコネクタの横にある、縦のスリットは何なのかと思っていたのですが、実はここからRaspberry Piの基板にあるLEDが良く見えるのです。このためにスリットを用意しているのではないかなと。良く考えられていると感心しました。

RAPIROにmbedを載せてみました

RAPIROが完成してRaspberry Piを載せてみました。

まずは、Raspberry Piの環境設定です。ボード単体で動かしてPythonのシリアルモジュールのインストールや無線LANドングルの設定など一通り済ませました。

rapiro_raspberry_pi.jpg

設定が終わったところで、RAPIROに取り付けます。さすが専用設計のためRaspberry Piがピッタリ載ります。

rapiro_raspberry_pi2.jpg

あとは、Raspberry PiにログインしてPythonで書いたサンプルプログラムを実行するとコマンドに応じた動きをすることができました。カメラモジュールも購入していますが、それはまた後ほど。

少し動かしてみましたが、想像以上にバッテリーが無くなります。デバックにはACアダプタが必須と思われます。電源電圧がだんだん落ちてきてRAPIROが変な動きになってしまいました。

rapiro_raspberry_pi3.jpg

やむなくエネループを充電している間に、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)
---------------------------

実際に接続した写真です。接続は4本しかありません。
rapiro_mbed1.jpg

mbedのオンラインコンパイラでさくっとプログラムを書きました。

RAPIROの電源を入れると無事動き始めました。

rapiro_medb2.jpg

動いている様子をYouTubeにアップしておきました。

今回は単純なコマンドをRAPIROに送ることを試しましたが、Bluetoothでリモコン制御にしたり、様々なセンサーを使った制御などmbedが得意とする分野では手軽に使えるのではないかと思います。

RAPIROを組み立てました

Kickstarterで購入していたRAPIROが到着しました。2月からはスイッチサイエンスさんで一般販売されるようです。

到着した箱はこんな感じです。シンプルです。

rapiro1.jpg

封印シールがRAPIROになっています。

rapiro2.jpg

箱を空けると部品がでてきました。部品は破損しないようにプラスチックの枠にはめられています。

rapiro3.jpg

rapiro4.jpg

細かい部品はビニール袋に入っています。

rapiro5.jpg

Arduino互換のサーボモーターの制御基板はこんな感じです。

rapiro6.jpg

こちらは顔のLED基板でしょうか。

rapiro7.jpg

一通りの部品を確認したところで、組み立て開始です。

まずはサーボモーターに目印のシールをはります。これをやっておかないとどのケーブルがどのサーボモーターなのか分からなくなってしまいます。サーボモーターは大6個、小6個の合計12個です。

rapiro8.jpg

1個1個貼っていきます。

rapiro9.jpg

すべてのモーターにシール張りが完了しました。

rapiro10.jpg

次に電池ボックスを組み立てます。

rapiro12.jpg

エネループ単3が5本ですので、6Vの電源になります。

次に電池ボックスとサーボモーターを制御基板に取り付けます。こんな数のモーターを同時に制御するのは初めてです。

rapiro15.jpg

ここで電源を入れてサーボモーターを初期値にします。

サーボモーターが一斉に動きます。その様子を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が点滅することを確認しました。
toragi_lpc810_0.jpg

次にEEPROMの書き込み、読み出しです。こちらも問題ありません。
toragi_lpc810_1.jpg

次に温度センサーと大気圧センサーですが、こちらは手持ちの秋月のモジュールを使いました。
でも、実験用基板のピン配置はマルツのモジュール用なので、そのまま取り付けることはできません。
そのためセンサーモジュール取り付け用のICソケットからワイヤーを引き出してブレッドボード上のセンサーモジュールに接続しました。
toragi_lpc810_2.jpg

問題なく動きますが、あまりかっこ良くありません。
マルツのセンサーモジュールを持っていないのであれば、ICソケットは取り付けずに実験用基板に引き出されているI2Cの端子を使うのが良さそうです。
もっともこのぐらいの規模であればブレッドボードで済んでしまうので、あまりこの基板のメリットは見当たりません。
しいて言えばI2C LCDがそのままハンダ付けできる点ぐらいでしょう。
でも初心者のかたには役に立つツールになるのではと思います。
来月号はLPC-Link2のようなものが付録になるようですが、LPC-Link2も持っていますので・・・。

Super AKI-80でLチカをしてみました

突然ですが、Super AKI-80を使ってLチカをしてみました。
昔実際に作っていたZ-80系の古い本「つくりながら学ぶマイコン設計トレーニング」(CQ出版社)を入手したこともあり、本物のZ-80を動かしたくなってしまいました。
まずはSuper AKI-80に取り付けるEPROMを探さねばなりません。
AKI-80に取り付けられる容量は27256まで、アクセススピードは100ns以下という制約があります。
手持ちのEPROMは27256はありますが、アクセススピードは250ns程度。これではつかえません。
秋葉原でも探しましたが見当たらないので、ヤフオクで27C256 90nsというものを見つけて4個購入しました。これで当面はしのげそうです。
次にLチカのプログラム作成です。Super AKI-80に実装されている8255のポートにLEDを取り付けることにします。
プログラムを作るためにアセンブラが必要になりますので(これぐらいの規模でしたらハンドアセンブルという手もありますが・・・)手頃なものはないか探したところVectorでXASMというものを見つけ試してみました。
このXASMはZ-80以外の8ビットCPUにも対応しているものです。ただし、Windows 64bit環境では動かないようなので、32bit環境で動かしました。
アセンブル出力としてインテルHEXファイルを生成してくれますので、そのまま手持ちのROMライター(Pecker-11)に転送できます。
LED点滅プログラムをXASMでアセンブルした結果はこんな感じです。(久々!)
SPとかも設定しておらず相当手抜きですが、動作確認用なので。


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SUPER AKI-80 TEST PROGRAM
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG 0
0000: C3 3B 00 JP START

ORG 8H
0008: C3 3B 00 JP START

ORG 10H
0010: C3 3B 00 JP START

ORG 18H
0018: C3 3B 00 JP START

ORG 20H
0020: C3 3B 00 JP START

ORG 28H
0028: C3 3B 00 JP START

ORG 30H
0030: C3 3B 00 JP START

ORG 38H
0038: C3 3B 00 JP START
;;
;; TEST MAIN
;;
003B: 3E 80 START: LD A,80H
003D: D3 33 OUT (33H),A ;PPI CHIP0 A-PORT CMD
003F: 3E 00 LD A,0
0041: D3 30 LOOP: OUT (30H),A ;PPI CHIP0 A-PORT DATA
0043: 06 FF LD B,0FFH
0045: 0E FF LOOP1: LD C,0FFH
0047: 00 LOOP2: NOP
0048: 00 NOP
0049: 00 NOP
004A: 00 NOP
004B: 00 NOP
004C: 0D DEC C
004D: 20 F8 JR NZ,LOOP2

004F: 05 DEC B
0050: 20 F3 JR NZ,LOOP1

0052: 3C INC A
0053: 18 EC JR LOOP

END

XASMで生成したインテルHEXファイルをPecker-11にシリアル転送しました。
その後、27C256をPecker-11に取り付けます。

Pecker11_27c256.jpg

今回入手したEPROMは新品のようでしたが、念のためイレースチェックを行い消去済であることを確認し、書き込みました。

Pecker11_write.jpg

書き込んだEPROMをAKI-80に取り付けます。

aki_80_eprom.jpg

AKI-80の8255のポートAにLEDを接続し電源を投入したところ、LEDが点滅を初めました。

aki_80_led.jpg

久々に本物のZ-80に触れることができました。Lチカだけでも大変ですね。
この次はモニタぽいものを作ってみようと思います。

消費税があがるらしいので、秋月電子で売っているロジアナZEROPLUSを買ってきました。

早速この前作成した空中配線LEDマトリクス表示回路に接続してみました。

zeroplus_1.jpg

初めてロジアナを使いましたが、PCで動くので操作性は良いですね。適当にいじっていたら計測できます。

LEDマトリクスの動作タイミングも良く分かりますね。

zeroplus_2.jpg

どうせならプロトコルも見たいなと先日購入した8PDIP ARM LPC810気圧センサーLPS331APを接続し、LPCXpressoでI2C通信のプログラムを適当に書いてその様子を見てみました。

ロジアナでI2Cの設定をして見てみるとI2Cのプロトコルが表示されました。

zeroplus_3.jpg

この写真はLPS331APとの最初の通信を解析したところです。

0x5CのデバイスLPS331APに対して、WHO_AM_I(0x0F)のコマンドを送ると応答として0xBBが返ってきているのが分かります。

別の表示方法もできます。

zeroplus_4.jpg

いやあ実に素晴らしいです。もっと早く買っておけば良かったです。

作りながら学ぶMC68000本を購入しました

古本屋でこんな本を見つけたので思わず購入しました。

トランジスタ技術スペシャル No.2 作りながら学ぶMC68000

mc68k_book.jpg

この本はトラ技で連載されていた記事をまとめたものですが、実際にこのマイコンを作ってCP/M 68Kまで動かしました。

でも、実家で保管していたら捨てられちゃったみたいで相当ショックを受けました。

ラッピングで凄い配線をしていたのを思いだします。

68000のハンドアセンブルはかなりめんどくさかったです。

デジカメも無かった時代なのでどこかに写真は残っているかなぁ。

Pocket WiFiルータ GP-02を買いました

イオシス路地裏店でPocket WiFiルータ GP-02がお安い値段で売っていたので衝動買いしてしまいました。

gp_02.jpg

これまで光ポータブルのWiFiルーターで使っていたDTI 490円SIMをいれましたが問題なく通信できています。

電池の持ちのは想定内だったのでこれは良い買い物をしました。光ポータブルのレンタルは年内で解約できます。

USBで接続するだけでWifiルーターに入っているWin/Macのドライバをインストールできるのも便利です。

ファームウェアは最新版では無かったので最新版に更新しておきました。

月別 アーカイブ

ウェブページ

Powered by Movable Type 6.0.2

最近のコメント

アイテム

  • rapiro_uart.jpg
  • yoga8_6.jpg
  • yoga8_7.jpg
  • yoga8_4.jpg
  • yoga8_5.jpg
  • yoga8_1.jpg
  • rapiro_led.jpg
  • capture1.jpeg
  • capture.jpeg
  • rapiro_camera.jpg