タグ「RAPIRO」が付けられているもの


SBC8080ルーズキットに8255を接続してみた

無事SBC8080ルーズキットが動作したところで、8255を接続したくなってしまいました。

昔PC-8001をつかっていたのですが、拡張バスからケーブルを引き出して8255を接続していろいろ制御していました。同じことがまたできるかなと。

というわけで早速設計開始です。といっても8080に8255は簡単に接続できます。ざっと書いた回路図は以下の通りです。いつもの切り貼り+手書き回路図ですのできれいではありません。

8255_schematic.jpg

すでに、IOポートの00H~3FHはSUBボードの8251で使われているので、ここと重ならないように40Hから割り当てることにしました。

8255はポートA,B,Cを持っています。それぞれが8bitですので、ポート出力は10Pのコネクタとし、8ビットポートの出力と+5VとGNDもコネクタに接続しました。

基板は秋月電子のB基板と同じサイズとのことなので、仮組みをしてみました。

sbc8080_8255_pre.jpg

サイズもぴったりでいい感じですね。これで実装イメージがわきました。

SBC8080ルーズキットを組み立ててみた

電脳伝説さんのサイトで公開されているSBC8080という8080CPUを使ったマイコンボードのパーツがようやく揃ったので組み立ててみました。なお、このサイトで技術資料とデータパックが公開されていますので、専用基板が無くても組み立てることができます。でも、専用基板を使うのがおすすめです。(カッコいいし)

今回、集めた主要部品を並べてみました。

sbc8080_parts.jpg

今回は256Kbit RAMは秋月電子のSOPチップをピッチ変換ボードに載せて使っています。

8080CPUはオレンジピコさん、8228、8224は若松通商さん、8251は手持ちです。その他は秋月電子さん、千石電商さんなどで集めました。やはり8080系のチップは取り扱いがなかなか無いですね。

さて製作開始です。

sbc8080_start.jpg

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

  •  
  •  
  • Category:

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

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

  •  
  •  
  • Category:

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を載せてみました

  •  
  •  
  • Category:

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が得意とする分野では手軽に使えるのではないかと思います。