JY-MCU BT BOARD の動作確認 – 安定性


JY-MCU BT BOARD の動作確認 – Arduino にて、基本的な確認はできたので、
細かいところも確認します。

20150313_bt_arduino_stability

安定性
Android 端末から連続してデータを送信します。
Arduino に、BT BOARD から受信したデータをエコーバックするスケッチを書きます。
Android 端末で正しく受信したかを確認します。

電気的な接続
BT BOARD は 3.3V信号で、Arduino は 5V信号です。
直結でも動作しますが、レベル変換を行います。
5V -> 3.3V 方向は、過電圧が気になるので、抵抗分割を入れました。
3.3V -> 5V 方向は、スレッシュホールドが気になりますが、レベル変換を行わず、直結しました。

ボーレート
BT BOARD は、デフォルトは 9600 bps です。
ATコマンドでボーレートの変更ができます。
例:115200 bps を設定する

AT+BAUD8

Arduino のハードシリアルの最高速度である 115200 bps を試してみましたが、安定して動作しました。

ソフトシリアル
Arduino のソフトシリアルやAltSoftSerialを使用して、BT BOARD と接続して、安定して動作するか確認しました。
ソフトシリアルは、文字化けが多く、実用に耐えません。
AltSoftSerialは、9600bps では安定して動作しましたが、115200bps では文字化けが発生しました。

9600 115200
ハードシリアル
ソフトシリアル × ×
AltSoftSerial ×

参考
3.3V系-5V系デジタル回路の簡易レベルシフト回路
BluetoothChat の問題と対策
Arduino ソフトシリアルの検証
Arduino AtlSoftSerial の検証


JY-MCU BT BOARD の動作確認 – Arduino


JY-MCU BT BOARD
BT BOARD は、Bluetooth SPP をシリアル通信 (調歩同期) に変換するモジュールです。
端子は、VCC(3.6~6V)、GND、TXD(送信)、RXD(受信) の4本です。
詳細は Bluetoothシリアル変換モジュール(スレーブ) を参照ください。

全体構成
Arduino + BT BOARD と Android 端末で動作確認をします。
JY-MCU BT BOARD の動作確認 – MAC での USB Serial アダプタを、Arduino に置き換えています。
Arduino のハードシリアル端子 (TX, RX) を USB 経由で MAC に接続します。
Arduino のIO端子 (D8, D9) を BT BOARD に接続し、ソフトシリアルを使用します。
BT BOARD は 3.3V信号で、Arduino は 5V信号ですが、短時間の確認なので、直結しています。
なお、ソフトシリアルは負荷が高いと 取りこぼし が発生します。
今回は、簡易的な疎通確認なので、使用しています。
20150304_bt_arduino

動作確認
(1) Arduino側
ハードシリアルとソフトシリアルを使用して、TX – D8, RX – D9 のように通信します。
スケッチは Bluetoothシリアル変換モジュール(スレーブ) を参照ください。

(2) Android 端末
(3) 相互通信
JY-MCU BT BOARD の動作確認 – MAC と同じです。


Arduino AtlSoftSerial の検証


Arduino には、ソフトウェアでシリアル通信のエミュレートをするソフトシリアルという機能があります。
標準ライブラリ の他に、AtlSoftSerial というライブラリがあります。
標準ライブラリと違いは
(1) 16 ビットタイマーを使用している。
(2) 送信と受信の同時動作が可能。
(3) ピンアサインが受信 8ピン, 送信 9ピンに固定されている。

標準ライブラリと同様の検証 を行いました。
Arduino をもう1台用意して、送信専用にします。
数字を 0,1,2,… と順番に送ります。
被試験側の Arduino の AltSoftSerial で受信して、シリアルモニタに表示します。
20150308_altsoftserila_schematics_verification 20150308_altsoftserila_device_verification_2

AltSoftSerial のスケッチ

#include <AltSoftSerial.h>
AltSoftSerial altSerial;
void setup() {
    Serial.begin( 9600 );
    altSerial.begin(9600);
}
void loop() {
    if ( altSerial.available() ) {
        int c = altSerial.read();
        Serial.write( c );
        altSerial.write( c );
    }	
}

結果は、特に取りこぼしなく、1000 以上まで受信できました。

0
1
...
999
1000
....

結論
ハードシリアルと同等に使えそうです。


Arduino ソフトシリアルの検証


Arduino には、ソフトウェアでシリアル通信のエミュレートをする ソフトシリアル という機能があります。

実機確認
(1) 相互通信
ソフトシリアルのIOピンに USB シリアルアダプタをつける。
ハードシリアルは、Arudino IDE のシリアルモニタに表示する。
USBシリアルアダプタは、MAC の screen コマンドで表示する。
相互に通信できることを確認した。

ソフトシリアルのスケッチ

#include <SoftwareSerial.h>
SoftwareSerial softSerial( 2, 3 );
void setup() {
    Serial.begin( 9600 );
    softSerial.begin( 9600 );
}
void loop() {
    if ( Serial.available() ) {
        softSerial.write( Serial.read() );
    }
    if ( softSerial.available() ) {
        Serial.write( softSerial.read() );
    }	
}

20150307_softserila_schematics_mutual20150307_softserila_device_mutual

(2) 直結
ソフトシリアルのTXピンとRXピンを直結したときは、動きませんでした。
送信と受信が同時には動作しないと思われます。
20150307_softserila_schematics_direct 20150307_softserila_device_direct

性能検証
そこで、受信の性能を検証してみました。
Arduino をもう1台用意して、送信専用にします。
数字を 0,1,2,… と順番に送ります。
被試験側の Arduino のソフトシリアルで受信して、シリアルモニタに表示します。

数字発生のスケッチ

int cnt = 0;
void setup() {
    Serial.begin( 9600 );
}
void loop() {
    Serial.println( cnt );
    cnt ++;	
}

20150307_softserila_schematics_verification 20150307_softserila_device_verification

結果は、下記のように、正しく受信できない文字がありました。

41
42
43
4 
45
4
47
4
49

さらに、受信と同時に送信を行うと、文字化けしてしまいます。

0
É5*šjRDjRTˆÈ©Hè©HSHSHS()SP¦¦!¡¦¦!LMCBLCBLM
…17

結論
ソフトシリアルは、取りこぼしや文字化けがある。
それが許容されるときに使うべきです。


Eagle と Sevenmini を使って電子基板を作る その2


20150129_test_main

概要
Eagle は電子基板を作成する CAD ソフトです。
Sevenmini は、MITS社の基板加工専用のミリングマシンです。
前回の題材は 3x3LEDマトリックス・シールド でした。
今回は Arduino 互換ボードです。

Eagleデータは GitHub で公開しています。

Eagle 側の作業
(1) 回路図 (sch) とボード図 (brd) を作成するところは、ほぼ同じです。
ボード図では、配線を太くしたり、PADを大きくしたりします。
20150129_eagle_sch 20150129_eagle_brd

(2) ガーバーデータを出力します。
このとき、Mirror にして、ハンダ面が表になるようにします。
MACのときは、改行コードを LF から CRLF に変換します。
20150129_gerber

FLASH 側の作業
1. CONVERTER アプリ
(1) 単位をインチに切り替えます。
(2) ドリル情報 (drl) を読み込みます。
(3) 変換条件を設定します。
フォト変換条件の単位系を 0.0001 インチにします。
穴変換条の単位系を 0.0001 インチにします。
20150129_flash_photo 20150129_flash_drill

(4) ガーバーデータを読み込みます。
ハンダ面データ (sol) を「フォト表」として読み込みます。
「特殊なアパーチャ形式です」という警告が出ますが、気にせず進みます。
ドリルデータ (drd) を「穴」として読み込みます。
外形データ (out) を「外形表」として読み込みます。
20150129_flash_wranig

(5) 読み込んだガーバーデータが 0.1 インチ刻みのグリッドに合っていれば、OK です。
20150129_flash_converter

2. EASY CAD アプリ
(1) 輪郭線抽出を行います。
繰り返し回数を「2」にします。
20150129_flash_easycad

Sevenmini 側の作業
1. 配線の加工
(1) 基板を両面テープで固定します。
(2) 原点を移動します。
(3) ミリング用のエンドミルを取り付けます。
(4) CAM-Circuit2 アプリから加工を指示します。

2. 穴の加工
(5) 指示に従い、ドリル用のエンドミルを取り付けます。
CAM-Circuit2 アプリから加工を指示します。
ドリルの太さに応じて、何度かエンドミルを交換するように指示が出ますが、今回は 0.8mm ドリルで全て済ませました。

3. 外形の加工
(6) 次に、フォーミングの指示が出ますが、今回は外形は切らずにここで終了します。
20150129_sevenmini

穴の拡張
ピンヘッダなど 0.8mm では小さいところに、
ミニドリルで1.0mmの穴に広げます。

基板の研磨
銅箔面を研磨剤で磨いて、ハンダが乗りやすいように、表面を滑らかにします。
20150129_pcb_polish

ハンダ付け
(1) 表面の配線を行います。
(2) 部品をつけて、裏面をハンダ付けします。
20150129_pcb_rear 20150129_pcb_front

動作確認
1. Arduino ボード
(1) ブートローダーが書き込んである CPU を差します。
(2) USBシリアルアダプタを差します。
(3) Arduino IDE から Blink スケッチを書き込みます。
(4) 書き込み完了が出れば、ボードは正しく動作しています。
(5) 続いて、LED が点滅すれば、OKです。

2. シールド
(1) 前回作った LEDシールド を差します。
(2) USBシリアルアダプタを差します。
(3) スケッチを書き込みます。
(4) 全ての LED が点滅すれば、OKです。
20150129_test_board 20150129_test_shield

課題
ミリングマシンには特にないです。
基板の実装に関して、いくつかありました。
(1) 3端子レギュレータ
19mm と高さがあったので、横にしました。
今回は基板の外側になりましたが、内側にあるほうがいいです。
(2) 電源入力端子
ピンヘッダを使ったところ、シールド基板にあたります。
ピンを横に曲げて対応しました。
DCジャックを使ったほうがいいです。
(3) リセットボタン
この位置だと、ICソケットからCPUを抜きにくいです。
(4) 電池
使用したことのある乾電池だと、電圧が低かったです。
1.5V×4本でなく、5本か、9V電池がよさそう。


Arduino のブートローダーを書き込む その2


20150118avr_isp_shield

その1 では、Arduino を2台使って、ブートローダーを書き込きました。
今回は、SparkFun 社の AVR ISP Shield を使ってみます。
このシールドの利点は、ZIF (Zero Insertion Force) ソケット を使っているので、CPU の交換が楽です。
基本的な手順は、その1と同じです。

(1) Arduino に AVR ISP Shield を載せます。
(2) ZIFソケットに CPU を差します。
(3) スケッチ「ArduinoISP」 を書き込みます。
(4) ツール > マイコンボード を、ターゲット側の Arduino に合わせます。
(4) ツール > 書き込み装置 を Arduino as ISP にします。
(5) ツール > ブートローダーを書き込む を実行します。

参考
SparkFun AVR ISP Shield
Freeduinoキットを組み立てる
Arduino Uno用ブートローダライタシールドの製作


Arduino のブートローダーを書き込む その1


Arduino の CPU は Atmel 社の AVR シリーズです。
一般的には、AVR にプログラムを書き込むには AVRマイコンライター を使います。
Arduino のブートローダーに関しては、Arduino 自身をライターにすることが出来ます。
プログラムを書き込むターゲット側も Arduino を使うことが出来ます。
つまり、Arduino を2台使って、ブートローダーを書き込むことが出来ます。
この方法は、Arduino の公式サイトに Using an Arduino as an AVR ISP として掲載されていますが、情報が古いようで少し違いがありました。

(1) ライター側の Arduino に Example にあるスケッチ「ArduinoISP」 を書き込みます。
公式サイトでは、Arduino 1.0 では delay の値を 20 に変更するとありますが、1.05 では変更されています。
20150117isp_ide_skech

(2) ターゲット側の Arduino の ICソケットから CPU を抜きます。
何も書かれていない素の CPU を差し込みます。
注意:ICソケットは結構固いです。
IC引抜治具 やマイナスドライバーを使って、ゆっくり抜いてください。

(3) ライター側の Arduino と、ターゲット側の Arduino を接続します。
ターゲット側のRESETとGNDの間に10μFのコンデンサを追加します。
10 – RESET
11 – 11 (MOSI)
12 – 12 (MISO)
13 – 13 (SCK)
5V – 5V
GND – GND
20150117arduinoisp

(4) ツール > マイコンボード を、ターゲット側の Arduino に合わせます。
通常は、ライター側なので、早合点しないように。
20150117isp_ide_board

(5) ツール > 書き込み装置 を Arduino as ISP にします。
20150117isp_ide_writer

(6) ツール > ブートローダーを書き込む を実行します。
無事、書き込みが完了というメッセージが出れば、OK です。
20150117isp_ide_burn

参考
Using an Arduino as an AVR ISP


Eagle と Modela を使って電子基板を作る その4


2014128_pcb_test

概要
Eagle は電子基板を作成する CAD ソフトです。
Modela は、Roland 社の切削加工機です。
今回は ファブラボ・メルボルンの手法 を部分的に適用してみました。
題材は、7セグ LED の Arduino シールドです。

EagleデータとArduinoスケッチは GitHub で公開しています。

Eagle 側の作業
(1) 回路図 (sch) とボード図 (brd) を作成するところは、ほぼ同じです。
配線を太くしたり、PADを大きくしたりします。
20141227_eagle_sch 20141227_eagle_brd

(2) fablab-mill-n-drill.ulp を使って、ミリング (配線パターンの外形線) とホール (穴) のデータを作成します。
なお、ホールのデータは、小さいので、目視しにくいです。
20141227_eagle_milling

(3) ミリングとホールをひとつにして、dxf 形式でファイルを出力する。
このとき、左右反転 (Mirror) します。

Dr.Engrave 側の作業

1. 配線のと穴の加工
(1) データの作成
配線と穴の dxf ファイルを import します。
残念ながら、大きさの情報は無視されてしまいますが。
bitmap から外形線を抽出するのに比べて、dxf では鮮明な外形線が保持されます。
グリッドを表示して、外形に合わせて、リサイズします。
2014128_engrave

(2) Modelra に 1/64 のエンドミルをつけます。
(3) 加工を指示します。

2. 外形の加工
(1) 配線と穴のデータから、配線と穴を削除して、外形のみにします。
(2) Modelra を 1/32 のエンドミルに変えます。
(3) 加工を指示します。
2014128_milling

穴あけ
(1) 基板を Modela からはずします。
(2) 机に基板を固定します。
(3) ミニドリルに 0.8mm のドリル歯をつけて、穴をあけます。
ピンヘッダには、少し小さいので、穴を大きくなるようにグルグリします。
2014128_dirill

基板の研磨
(1) 基板の縁を平ヤスリで削ります。
(2) 基板の銅箔面を荒い紙ヤスリで磨いて、表面のギザギザをとります。
(3) 銅箔面を研磨剤で磨いて、ハンダが乗りやすいように、表面を滑らかにします。
2014128_polish_2

ハンダ付け
(1) 部品をつけて、裏面をハンダ
付けします。
2014128_pcb_rear 2014128_pcb_front

動作確認
(1) Arduino に今回作った基板を載せます。
(2) Arduino にスケッチを書き込みます。
(3) 全てのセグメントが点灯すれば、OKです。

Arduino スケッチ
000 から 999 まで 0.1秒刻みでカウントアップする 10秒タイマーです。
スケッチには、各セグメントを1つづつ順番に点灯するモードも含まれています。


Eagle と Modela を使って電子基板を作る その3


概要
Eagle は電子基板を作成する CAD ソフトです。
Modela は、Roland 社の切削加工機です。
今回は、ファブラボ・メルボルンの手法を試してみました。
結果としては、うまくいきませんでしたが、少し前進したところもありました。

ファブラボ・メルボルンの手法
前回まで手法 は、Eagle を使って配線パターンを画像情報として作成して、Modela のソフトでベクタ情報に変換する方法です。
ファブラボ・メルボルンの手法は、Eagle を使って、直接 Modela の CAMデータを作成するやりかたです。
Dr.Engrave や fabmodule などは使用しません。
オリジナルの英文 の他に、日本語訳 もあるので、詳しくはそちらをご覧ください。

基本的な流れ
(1) Eagleで、回路図(sch)とボード図(brd)を作成します。
配線を太くしたり、PADを大きくしたりします。
(2) fablab-mill-n-drill.ulp を使って、ボード図(brd)からミリング(配線パターンの外形線)とホール(穴)のデータを作成する。
(3) fablab-mill-n-drill.cam を使って、Modela の制御コードを作成する。
Modela を新たな工作機器として認識させるために、eagle.def の修正が必要です。
(4) Modela に制御コードをUSBシリアル通信で渡す。

実際に出来たこと
(1) Eagleで、回路図(sch)とボード図(brd)を作成します。
今回の題材は、7セグLED SND2537 です。
20141227_eagle_sch 20141227_eagle_brd

(2) の fablab-mill-n-drill.ulp は、オリジナルのままでは、1/30 くらいの小さいデータが作成されます。これは、Eagleのバージョンの違いによるもので、下記に対処方法がありました。
EAGLE ulp generates wrong scale
20141227_eagle_milling

(3) (4) の操作を行いましたが、Modela は全く反応しなかったです。
生成した制御コードに誤りがあるのだと推測しています。
詳しい調査は、そのうちに。

ひとまず GitHub に下記を公開しておきます。
– fablab-mill-n-drill.ulp (修正したもの)
– fablab-mill-n-drill.cam (オリジナル)
– eagle.def

前進したこと
(1) fablab-mill-n-drill.ulp により、配線パターンの外形線のベクタ情報が得られるようになった。
(2) 配線パターンを bitmap 形式の他に、dxf 形式で出力できるようになった。
fabmodule は、dxf 形式を受け付けることはできませんが。
Dr.Engrave は、受け付けることはできます。
次は、Dr.Engrave を使った基板作成を試してみます。

Arduino スケッチ
000 から 999 まで 0.1秒刻みでカウントアップする 10秒タイマーです。
スケッチには、各セグメントを1つづつ順番に点灯するモードも含まれています。

参考
Making Printed Circuit Boards with the Fab Lab
FabLabでプリント基板を作る方法
EAGLE ulp generates wrong scale


PocketDuino AlcoholMeter


20141201_pocketduino_board_alcohol

PocketDuino と アルコールセンサボード を Android から制御します。
PocketDuino Tutorial を参考にしました。

ソースは Github で公開しています。

機能
アルコールセンサに息を吹きかけます。
測定値をメーターに表示します。
メーターは、自動車のスピード計のような UI にしました。
20141201_pocketduino_screenshot_alcohol

補足
スピード計のような UI は、Canvas#drawArc (円弧) を3つ使っています。
Canvas#clipPath を使うと、もっとシンプルに出来るかも。