Kyutech Arduino Scope 着せ替え仕様

前回制作したArduino 簡易オシロスコープの着せ替え仕様がやっと判明しました。

オリジナルのソフトな仕様もすごくいいのですが当サイトの様に画面に収まらない、dc/acの表示が気に入らないなど絵心のある人ならば自分仕様のオシロスコープが作成可能です。

行方不明のボタンはキャプチャーボタンと思っていたのですが大きな間違いでそのとおりスコープ部のバックグランドカラーを変更をするボタンでした。

kit_scope.pdeの変更

起動 30行目 int board = 0;
画面サイズ 74行目 size(1200, 640);
設定データ表示 3343 〜 3399行目
scopeカラーボタン 3578行目

参考 当サイトの設定例 edit2-kit_scope.pde
起動時のboard指定以外各設定値は共通です。
board = 3の着せ替えにboard = 0またはboard = 2で起動してもdc/ac関連の設定は空欄になるだけです。
scopeアイコンはスコープバックグランドカラー変更です。

board = 0 or board = 2

board = 3

スクリーンキャプチャ


スクリーンキャプチャはスコープのrunningをstoppedにすると右上のcupture(go)ボタンが有効になります。
win,macではsketch folderが有効になるような記載がありますがPiでは指定不可のようです。
実行したディレクトリ~/sketchbook/kit_scope/以下に連番で作成されます。
filenameの指定は可能です。

これでオリジナルの基本仕様は画面内に収まったと思うのでスコープ本来の操作に専念できそうです。

Kyutech Arduino Scope シールドを作成する

前回のArduino簡易オシロスコープですがなかなか使い心地がいいのでシールドにしてみました。

使いやすくするためベース基板の上に配置してピンソケットを設けて実験用AVRデバイスはこの上に載るようになります。

回路図(pdf) kit-scope.pdf


Arduino簡易オシロスコープは前回作成したシールド上に載ることになりますがこちらは完全に独立した回路です。
USBからの5Vを使って動作します。したがって延長するピンヘッダなどに誤ってハンダ付けをしてしまうとPiを壊すことになってしまいます。


シリアル変換のCH340Gはもう1枚作り直しました。
ショートのピンヘッダを用いています。


メインのシリアル変換のICはこの上に載ります。
ピンヘッダ、ソケットは延長するため付いているのでシールドから外してこのシールド単体でも簡易オシロスコープとして動作します。


シリアル変換も延長しているため配線ミスを犯しやすくなります。
手持ちのユニバーサル基板をベース基板に使用したためスペースが足りずこんな構成になっていますがベース基板に独立した回路として一緒に組むのがいいと思います。
Piと同サイズならば充分可能と思います。いろいろ試してみて最良の構成で作り直してみようと思っています。

ac/dc coupling ui

さて前回Ki Cad versionで疑問だった項目ですが再度Arduino 簡易オシロスコープのページを見直して見ました。
Release Notesの欄にありますね。
v0.70 Oct 07, 2015 new features: ac/dc coupling ui, screen capture

という訳でkit_scope.pdeも見直して見ました。
ありますねそれも冒頭附近に。起動時ここで選択するんですね。
知っている人には当たり前かもしれませんが気が付きませんでした。読んでいないのがバレバレですね(^▽^;)


でましたね。
少々無理矢理感が無くもないUIですが使用できるだけでもありがたいと思います。


Ki Cad versionは最初から適当UIなので枠だけを増やしておきました。
今回はboard = 2: selectable dc/ac coupling だけにしておきます。(文字はアプリケーションから出力されます)
board = 3 は大分入れ替えないといけないので少し使ってからにしたいと思います。

変更箇所 edit-kit_scope
captureについては画面の枠外にactionがあるはずです。5分位探してみましたが見つけることができませんでした。


board = 0 :default


board = 2 :selectable dc/ac coupling
coupling ac にすると2.5Vシフトします。(calib=5V)
CH2のposition設定が違っています。
測定対象によって使いやすいboard選択で起動します。
ディレクトリ名を変更または退避することでそれぞれexportできます。


processingからは/dev/ttyUSB0,/dev/ttyUSB1どちらでも見つけ出してくれます。
arudinoボードを/dev/ttyUSB0に固定したい場合は一旦SWをOFF arudinoボードからONにすれば順に/dev/ttyUSB0から割り当てられます。


スペック上過度な期待はできませんが一般工作や学習には充分実用に耐える仕様だと思います。

いつでも使いたい時に即使える、電子工作にとっては非常に有効なツールですね。

Kyutech Arduino Scope with Ki Cad version

前回のraspberry pi arduinoシールドに九州工業大学情報工学部のArduino 簡易オシロスコープを導入してみました。

Arduino 簡易オシロスコープのホームページからアーカイブをダウンロードして展開するとArduinoとProcessing用の2つのスケッチがあります。

arduinoシールドにはArduino用をraspberry piには別途ProcessingをインストールしてProcessing用のスケッチを読み込ませます。

Arduino用スケッチの書込


mcuはATmega328pが必要です。
ボードタイプはUNOでブートローダーを書き込んでスケッチも書き込みます。

Processingのインストール

ProcessingのダウンロードページからLinux ARMv6hfをダウンロード展開します。
現在のバージョンはprocessing-3.3.7-linux-armv6hf.tgz
インストールする場所はArduino IDEと同じ~/Applicationsにします。
ここで展開するとprocessing-3.3.7のディレクトリができるのでインストール。

$ cd ~/Applications/processing-3.3.7
$ ./install.sh


この辺の手順はArduino IDEと全く一緒ですね。
ディスクトップにはProcessing IDEのアイコンが出現します。

起動して先程の簡易オシロスコープ用のスケッチを読み込ませ実行ボタンをクリックします。


最初にkit_scopeのロゴがでます。それからオシロスコープの画面に変わります。

起動すると 画面がディスプレーからはみ出していますね。
当サイトのディスプレーは1024×768のジャンクなディスプレーです。
画像ファイルを見ると1200×640のサイズになっています。どうもこのサイズは決め打ちのようなので当サイトの環境ではちと使いにくいのでなんか対策を考えてみます。


画像ファイルの代わりに空ファイルを用意して起動すると真っ黒な画面にオシロの画面とデータ関連の文字が表示します。

この文字部分を画面に収まるように寄せて画像ファイルを着せ替えればなんとか行けそうです。

kit_scope.pdeの編集

74行目に全体の画面サイズの指定があります。
size(1200, 640); ー> size(1000, 640);
3343〜3399行目あたりがデータ関連の指定のようです。
new UIvparts( 1, 794, 69, 0, 0x00, “signal”
794 ー> 665
1066 ー> 865
最後のほうに4項目ずつあるのですがここは何をしているのかわかりませんでした。
一応同じ割合位で減らしておきました。
980 ー> 780
1100 ー> 900

着せ替えの作成

着せ替えの画像にはできるだけ簡単に済ませるようにKi Cadで作成しました。

1000×640サイズに用紙を設定 225 – 353
配線をして(?)文字を入れて出図からsvgに変換します。
変換したsvgはさらにpngに変換します。

位置合わせしながら編集するのでできるだけ簡単に変換するためimagemagickで作業

# apt install imagemagick

$ convert kit_scope.sch.svg kit_scope1.png


位置が合ったらgimpで更に編集
いらない線を消して背景を黒にそして新たに線を引きます。

できた画像はデフォルトの画像と差し替えます。
processingのデフォルトの設定では~/sketchbook以下にデータが保存されます。
またはダウンロードしたkit-scope/kit_scope_20160320/Processing/kit_scope/dataにあります。


画像を差し替えて起動してみました。
基本の動作及び操作は特に問題なく動いているようです。
但しオリジナルの右下にあるキャプチャ機能と思いますがどっかに飛んでいっちゃたようです。

processingでエクスポート


processingのファイル-エクスポート機能で実行形式のファイルを作成することができます。
~/sketchbook/kit_scope以下には4つのディレクトリが作成されそれぞれ実行可能なkit_scopeができます。4ファイルとも起動可能でした。
kit_scopeを実行すると直接オシロスコープが起動して素早い実行が可能になります。

今回のKi Cad versionはオリジナルの画像とは雲泥の差がありますがまた違った意味で創作意欲が湧くかもしれません。
現状は3.3Vで動作していること、またこの状態で動かしてもあまり意味が無いので専用の簡易オシロスコープシールドを作成したいと思っています。

Raspberry Pi AVR-Arduinoシールドを作成する

Raspberry PiのGPIOピンに装着するAVR-Arduinoシールドです。
linuxgpioライタでAVR開発環境を構築、USBシリアル変換を追加すればArduino環境として動作します。

当サイトでは以前よりUSBaspと秋月の基板で同じような環境で使っていたので今回linuxgpioに移行してみました。
当サイトには特に専用のシールドも無いことからArudinoの形式にとらわれる必要も無くmcuを利用できればいいので自由に構成することができます。

参考サイト
ラズパイで AVR プログラミング
Raspberry Pi だけで構成する汎用AVR開発環境

シールドの作成

ベースとなる回路図

ベースのmcuはATmega328系
USBシリアル変換にはCH340G(3.3V接続)
GPIOの6本のPinに接続

Piの3.3Vは約50mA位しか取ることができません。mcuの読み書きだけならば問題ないのですが少し重い負荷を懸けたり3.3VラインのスイッチをON-OFFするとPi自体が落ちてしまいます。そのためGPIOの5Vから専用のレギュレーターを追加3.3Vを確保しています。


モジュール

Raspberry Pi 3のGPIO端子には下駄を履かしているのでこの下駄に合わせて作成、載せます。


ベースモジュール
ICソケットとサイドのピンソケットは繋がっています。
Xtalはソケットで差し替え可能
リセットスイッチはベースモジュールに
3.3V ON-OFFスイッチは小型のスライドスイッチを設けています。


チップ抵抗、コンデンサを使用


ベースモジュールにICソケットが載っていますが基本そちらは使わないでICモジュールを作成
8pin ATtiny13a
20pin Attiny2313
28pin ATmega328系


28pinタイプは全て直結していますがそれ以外はICソケットとピンソケットを直結してベースと繋がるピンヘッダは電源と信号線のみ各ICに合わせてジャンパー線で接続しています。
LEDとタクトSWを設けていますがジャンパーピンで必要に応じて接続します。
28pinタイプの19SCKはチップLEDを用いて目立たない程度に点灯しています。


8pinタイプはスペースができるのでICSP端子を設けました。
当サイトでは6pin2列タイプを採用しています。
電源以外の4本の信号線はアダプタを差し込むことで基板上のICと接続、外してICSP端子として利用できます。


CH340G USB-シリアル変換モジュール
以前作成したうちの1個を剥がして取り付け直ししました。今回はピッチ変換基板に載せています。
セラロックではうまく動かないのでXtalが必要です。
端子はマイクロUSBタイプにしました。5Vはノンコネクションで


これでハードウェアの準備が完了しました。

AVR開発環境

Arudino IDEをインストールするとAVR関連のコマンドも利用できるのですがパスを通したりいろいろ面倒になるのでシステムから使用できるようパッケージからもインストールします。

# apt install gcc-avr avr-libc avrdude

さて肝心のlinuxgpioですが現在のPiでインストールされるavrdude 6.3-2+rpi1ではデフォルトで利用できるようです。
linuxgpioをシステムに登録します。
/etc/avrdude.confの編集 末尾に追加。GPIOのピンはある程度任意に設定できるようです。
当サイトでは上記2サイトの接続で試しましたがどちらも正常に認識します。

programmer
  id    = "linuxgpio";
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
  type  = "linuxgpio";
  reset = 17;
  sck   = 2;
  mosi  = 4;
  miso  = 3;
;

参考サイトにあるようにGPIOをデバイスとして利用するにはroot権限が必要になるのでSUIDをセットします。

chmod +s /usr/bin/avrdude

avrdudeは再起動しないとGPIOを認識しないのでここでreboot

再起動したら確認してみます。-p デバイス名は実在する適当な値を入れても自動で認識してくれます。(書込は正式な名称を入れましょう)
$ avrdude -c linuxgpio -p t13 -v
う〜んいいですね。全く外付けのライタを意識しなくて済みます。

Arduino開発環境

Arduinoのインストールや使い方はほかのサイトに沢山あるので当サイトとしてはインストールする際に感じた要点だけ記載します。
Arduino IDEは1.8.5をインストールしました。
インストールディレクトリは~/Applications このディレクトリは同じような外部パッケージをインストールする際にも使えます。

追加のボードはラズパイで AVR プログラミングで紹介されている2つを
ATmega 系:https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
ATtiny 系:http://drazzy.com/package_drazzy.com_index.json
kosakalabさんからはATtiny10/13をいただきました。

Arduino IDEを起動してボードマネージャーを開くと更新可能なボードがあります。

ここで更新したりボードを追加した際にはホームディレクトリの.arduino15に保存されます。
このディレクトリ以下にあるファイルは起動時最後に読み込まれ優先的に使用されます。
基本の設定はこのディレクトリあるファイルを編集することになります。

Arduino IDEで使用するprogrammersの設定 先頭に追加
~/.arduino15/packages/arduino/hardware/avr/1.6.21/programmers.txt

linuxgpio.name=Linux GPIO
linuxgpio.protocol=linuxgpio
linuxgpio.program.tool=avrdude

Arduino IDEに同梱されるavrdudeはlinuxgpioに対応しません。
パッケージからインストール、設定したavrdudeにリンクを貼ります。

$ cd ~/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino9/bin
$ mv avrdude avrdude.def
$ ln -s /usr/bin/avrdude

Arduino IDEのavrdude.confは本体や追加したボードのディレクトリ~/.arduino15以下に散らばっています。ユーザーが使用するprogrammerを固定化するため~/.avrdudercを作成します。
~/.avrduderc

programmer
  id    = "linuxgpio";
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
  type  = "linuxgpio";
  reset = 17;
  sck   = 2;
  mosi  = 4;
  miso  = 3;
;

Arduino IDEの起動実行

328Pを装着してボード、プログラマー、シリアルポートを選択
ブートローダー、スケッチも問題なく書き込めます。
168p,ATtiny13a,ATtiny2313でもOKです。

コマンドラインの書込もArduino IDEからの書込も繋ぎ変えは必要無しに実行できます。

稀にシリアルポート(ttyUSB0)を見失うことがありますが3.3VスイッチをOFF-ONすることですぐに復活します。


素のAVRを扱う上ではPi(linuxgpio)+AVR-Arduinoは最高の環境かもしれません。

あと不足しているのはここからの開発能力だけですね
(-。-;)

Raspberry Pi bluetoothシリアル通信

raspberry piでbluetooth PANを構築したかったのですが現在のBlueZは大分仕様が変更になっているようでうまく動かすことができませんでした。

今回はRaspberry Pi同士でbluetoothシリアル通信の確認ができたので簡単に纏めておきたいと思います。

環境

Raspberry Pi 3 stretch デスクトップ クライアント
Raspberry Pi zero stretch lite ホスト名 piz0
Raspberry Pi zero(w) stretch lite ホスト名 lite
Raspberry Pi 2 stretch lite ホスト名 dip

BTアダプタ

無印 BT2.0アダプタ
CSR 4.0アダプタ
zero(w)は内蔵BTアダプタ

ペアリング

ペアリングについては詳しく紹介されているサイトがあると思うので簡単に!

デスクトップのpi3からbluetoothアイコンをクリックMake Discoverableを実行
Add Deviceダイアログをだします。
zero(w)にログインしてroot権限でbluetoothctlを実行します。
stretch-liteでもBT接続に必要なパッケージはデフォルトでインストールされています。
zero(w)から以下を実行していきます。
power on
discoverable on
agent on
default-agent

1分位待っているとzero(w)のホスト名liteが表示されます。
liteを選択してPairをクリック、pinコードダイアログが出るのでOK
zero(w)はpinコードを確認してyesを入力してペア完了、exitで終了します。
このときpi3側でもターミナルを起動しておいて同様にbluetoothctlだけを実行しておくと通信の様子がよくわかります。

root@lite:~ # bluetoothctl
[NEW] Controller B8:27:EB:6A:xx:xx lite [default]
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller B8:27:EB:6A:xx:xx Discoverable: yes
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[CHG] Device B8:27:EB:24:xx:xx UUIDs: 00001101-0000-1000-8000-00805f9b34fb
------- snip -------
[CHG] Device B8:27:EB:24:xx:xx UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device B8:27:EB:24:xx:xx ServicesResolved: yes
[CHG] Device B8:27:EB:24:xx:xx Paired: yes
[CHG] Device B8:27:EB:24:xx:xx ServicesResolved: no
[CHG] Device B8:27:EB:24:xx:xx Connected: no
[CHG] Controller B8:27:EB:6A:xx:xx Discoverable: no
[bluetooth]# exit
Agent unregistered
[DEL] Controller B8:27:EB:6A:xx:xx lite [default]

同様にzero(w)で2個のUSB-BTアダプタのペアリングをします。

無印 BT2.0アダプタ
同様にペアリングは可能ですがPINコードを双方とも指定して打ち込む必要があります。
よく使われるのは0000とか1234という数字ですね。手早くしないとタイムアウトになってやり直しになってしまいます。

CSR 4.0アダプタ
このアダプタは特にPINコードも出ることもなくペアリングが完了します。
但しzero(w)では抜き差しした時点で固まってしまいます。
zero,pi2.pi3では問題ありません。


zero(w)で3個のBTアダプタがペアリングできました。
pi3のBTマネージャーにはペアリングしたデバイスが表示されていますがここからConnectしても接続できません。
これはbluetoothのプロファイルを利用する何かしらのアプリケーションが待ち受けているときに接続できるものと思います。

シリアル通信

シリアル通信はこちらのページが良く纏まっていますね。 Raspberry Pi と Bluetooth 経由でシリアル通信する

Raspberry Pi 3 stretch(デスクトップ)接続元の設定
今回は3台に接続するということで3台分のrfcommを用意します。
/etc/rc.local

if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
# rfcomm
rfcomm bind 0 00:1A:7D:DA:xx:xx # zero(piz0)
rfcomm bind 1 B8:27:EB:6A:xx:xx # zero(w)(lite)
rfcomm bind 2 00:15:83:0C:xx:xx # pi2(dip)
exit 0

また表示が乱れるのでModemManagerを停止します。

# systemctl stop ModemManager
# systemctl disable ModemManager

シリアル通信のソフトはいろいろありますがscreenとpicocomをインストールしてみました。

# apt install screen picocom

ここで再起動(reboot)
/devには3個のrfcommができているはずです。

$ ls -la /dev/rfcomm*
crw-rw---- 1 root dialout 216, 0  4月 18 16:36 /dev/rfcomm0
crw-rw---- 1 root dialout 216, 1  4月 18 16:37 /dev/rfcomm1
crw-rw---- 1 root dialout 216, 2  4月 18 16:36 /dev/rfcomm2

シリアル通信接続先の設定

zero(w)で3個のBTアダプタを登録しましたがこのペアリング情報はアダプタ固有の情報になるため内臓のBTアダプタ以外はほかのマシンで流用が可能になります。
設定ファイルは/var/lib/bluetooth/以下に保存されています。

# ls -l /var/lib/bluetooth
drwx------ 4 root root 4096  4月 17 18:38 00:15:83:0C:xx:xx
drwx------ 4 root root 4096  4月 17 22:21 00:1A:7D:DA:xx:xx
drwx------ 4 root root 4096  4月 17 22:43 B8:27:EB:6A:xx:xx

各アダプタのID以下にはpi3のペアリング情報が入っています。

直接カードをマウントしてコピーを取る場合の例は

# mount /dev/sda2 /mnt
# cp -rp /var/lib/bluetooth/00:15:83:0C:xx:xx /mnt/var/lib/bluetooth
# cp -rp /var/lib/bluetooth/00:1A:7D:DA:xx:xx /mnt/var/lib/bluetooth

もう1台も同じくコピーします。
これで3台ともペアリングが完了しました。再ペアリングしない限りUSB-BTアダプタはペアリングなしに自由に使い廻しが可能になります。

sdptool設定
[Service]の3行目に-Cを追加、4行目を新規に追加
/lib/systemd/system/bluetooth.service

[Service]
Type=dbus
BusName=org.bluez
ExecStart=/usr/lib/bluetooth/bluetoothd -C
ExecStartPost=/usr/bin/sdptool add SP

待受起動は/etc/rc.localから
シリアルは1接続のみなのでrfcomm0、速度は115200、ホスト名、ユーザーpiのオートログイン
/etc/rc.local

if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
rfcomm watch 0 1 agetty rfcomm0 115200 lite -a pi > /dev/null 2>&1
exit 0

ここで再起動(reboot)
zero(w)にログインしてsdptoolを実行、Serial Portが見えてたらOK

# sdptool browse local
Service Name: Serial Port
----
  "RFCOMM" (0x0003)
    Channel: 1

ほかの2台もホスト名を変えて同じ設定をします。

bluetoothシリアル通信をしてみる

pi3ディスクトップから3つのターミナルを起動して実行してみましょう。

$ picocom -b 115200 /dev/rfcomm0
$ screen /dev/rfcomm1 115200
$ picocom -b 115200 /dev/rfcomm2


コマンドを実行すると数秒で接続を開始します。1回目で失敗するときもありますが再度実行すると繋がってくれます。
ジョブコントロールが無効なのはシリアルターミナルの仕様と思います。raspi-configなどバックグランドで動かす必要があるコマンドは実行できません。
rfcomm0〜rfcomm2は/etc/rc.localで設定したデバイスIDが使われます。したがってzero(w)の内蔵BTデバイス以外は差し込んだUSB-BTアダプタによってはホストが入れ替わることがあります。
USB-BTアダプタは必要になったとき差し込んでもシリアル通信は可能です。
pi3のBTマネージャーはホスト名を読み取って自動的に変更してくれます。

さてこのbluetoothによるシリアル通信はどんなときに使えば有効かなと考えると通常のLan環境ではあまり出番がないですね。
ですが今回いろいろとネットワークの設定を含めて変更をするとこのシリアル通信の便利さがわかります。繋がらないネットワークを設定しても取り敢えずシリアル通信でなんとかなります。
但し再起動時正常にOSが起動、BTアダプタを認識、/etc/rc.localまで起動しないとシリアル通信も不可になってしまいます。

別の使い途としてraspbianインストール時の補助にも使えそうです。

ddしたディスクにペアリング情報をコピーbluetooth.service,rc.localを編集しておけばシリアル通信は可能になります。
ネットワークを一切設定していないディスクを作成、起動してみました。
無事シリアル通信は繋がってくれました。dhcpでipを取得できなかったときなどはこれで調査、修復も可能と思います。

またシリアル通信では無いのですがraspbianディスクトップインストール時の際にはbluetoothキーボード、マウスのペアリング情報があれば予め/var/lib/bluetoothをコピーしておけば初期設定からペアリングなしに使用ができます。

Top