Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@nanbuwks

導電布タッチセンサーモジュール nüno ver.2 を無線で使ってみる

「導電布タッチセンサーモジュール nüno ver.2 を有線で使ってみる」
https://qiita.com/nanbuwks/items/5b174546da5df383f155

の続きです。

「TWELITE 簡単アプリで I2C の動作確認」
https://qiita.com/nanbuwks/items/8b789009cf561d36027e
で確認した内容を元に、無線でタッチセンサーの情報を取得してみます。

使うもの

nüno ver.2

IMG_20201126_185240709.jpg

これは基板+電池+ケース+導電性布を接続するホックです。
内部にはCR2032ボタン電池が内蔵されています。
今回の方法は電池消費が激しいたため実験用途に外部から3.3Vを供給するのがいいかも知れません。

TWELITE DIP

IMG_20201126_190946791.jpg

nüno からの電波信号を受信するものとして、市販の TWELITE モジュールが使えます。
「超簡単!標準アプリ(App_Twelite)」が初期設定されている TWE-Lite-DIP のシリーズだとプログラムの変更なしに受信できます。

写真は PCB アンテナの TWE-Lite-DIP-PCB です。

今回は、このようにUSBシリアルモジュールをつなげてPCで受けてみました。

IMG_20201126_185614896.jpg

PC , 通信ソフト

今回は Ubuntu Linux 20.04 で picocom を使っています。通信条件さえ合わすことができれば OS や通信ソフトは何でも構いません。

接続

送信側の nüno モジュールは電池を装着するだけで動作し始めます。
受信側の TWELITE DIPは親機に設定するために、GPIO10番をGNDに落とします。(写真、黄色のジャンパー)
IMG_20201126_185714699.jpg

これを含め、以下のように配線します。

シルク表記 信号名 接続先 用途
VCC VCC USBシリアル3.3Vに接続 電源供給用
GND GND USBシリアルGNDに接続 電源供給用
RX RX USBシリアルTXに接続 PCからの送信用
TX TX USBシリアルRXに接続 PCへの受信用
10 M1 GNDに接続 親機モード設定用
1 AI4 VCCに接続 ノイズによる余計な信号発生を抑制
A2 AI3 VCCに接続 ノイズによる余計な信号発生を抑制
0 AI2 VCCに接続 ノイズによる余計な信号発生を抑制
A1 AI1 VCCに接続 ノイズによる余計な信号発生を抑制

PC 上での通信ソフト


$ picocom -b 115200 -r -l  --omap crcrlf /dev/ttyUSB0

として親機と通信します。

通信条件は以下の通り

  • ボーレート 115200
  • フロー制御 なし
  • 改行コード crlf

linux の改行コードは cr なので cr をキー入力すると crlf に変換するようにしています。

ポートが開くと以下のように電文が流れてきます。


:788115015D810B96CF000A33000CBE228406220F160B6836
:7881150160810B96CF000A7F000CBF228406220F160B68E6
:7881150160810B96CF000AB1000CBD238406220F160B24F9
:788115015A810B96CF000AE1000CBE228406220F160B648F
:7881150166810B96CF000B19000CAC238406210F150AB111
:788115015D810B96CF000B61000C57228406200E140A10CC
:7881150172810B96CF000B9B000C282384061F0D1409DDE1
:7881150172810B96CF000BD5000C052384061E0D13097B2E
:7881150172810B96CF000C15000BEE2284061E0D1309760B
:7881150172810B96CF000C61000BDA2284061E0D130961E8
:7881150172810B96CF000C9F000BCF2284061E0D13091006
・・・

これは、子機である nüno モジュールから定期で送られる信号を受信して、このように表示されています。
子機にも標準では「超簡単!標準アプリ(App_Twelite)」が書き込まれているため、この電文は状態通知

「相手端末からの状態通知:ステータス 0x81 - MONO-WIRELESS.COM」
https://mono-wireless.com/jp/products/TWE-APPS/App_Twelite/step3-81.html

の内容となります。

動作確認


:78880104250501X

と打ち込んで子機の I2C アドレス 0x25 に対し、レジスタ 0x05 を読み込みしてみます

: 78 88 01 04 25 05 01 X
セパレーター 子機に接続したI2Cデバイス 簡単アプリI2Cコマンド 任意の数値 I2Cデバイスへ書込 I2Cアドレス I2Cレジスタ 書き込みデータ長 チェックサム

:78890104010103F5

と出れば、レジスタ 0x05 の中身 0x03 の読み出しができています。

なお、このコマンドを連打してみましたが、1秒ごとしか返事は返ってこないみたいです。

子機の設定

アドレス0x05に 0x02を書いて、タッチモードにします。


:7888010125050102X
: 78 88 01 01 25 05 01 02 X
セパレーター 子機に接続したI2Cデバイス 簡単アプリI2Cコマンド 任意の数値 I2Cデバイスへ書込 I2Cアドレス I2Cレジスタ 書き込みデータ長 データ列 チェックサム

:788901010100FC

と帰ってきたらOKです。

タッチ値の読み出し

MTCH6102には、RX0~RX14の15本のピンがあります。レジスタアドレス0x80-0x8E を読み込んで、ピンごとのRAW値を読み込むことができます。
nüno ではこのうち 8 本を使っていますが、旧モジュールでは RX0~RX7、nüno 2 モジュールでは RX2~RX9 の割当になっています。

RX0 の読み出し

以下はレジスタアドレス0x80を読み込んで、RX0 を読んだ例です。


:78880104258001X
: 78 88 01 04 25 80 01 X
セパレーター 子機に接続したI2Cデバイス 簡単アプリI2Cコマンド 任意の数値 I2Cデバイスから書込&読出 I2Cアドレス I2Cレジスタ 読み込みデータ長 チェックサム省略

結果

タッチしていない状態


:78890104010100F8

タッチした状態


:7889010401011BDD

取得できました

多チャンネルの値を連続で読み出し

上記のやりかたをチャンネルごとにアドレスを変えて、読み込みすることでRX0~RX9の値を読み出しできますが、約1秒ごとしか子機からの信号が親機に伝わらないので10チャンネルの転送には約10秒かかります。

もっと効率的なやり方として、以下のようにデータ長を指定すると連続したレジスタアドレス分のデータが取得できます。


:7888010425800AX

布電極の端から2つ目のところを手で持ったうえで帰ってきたデータは以下のとおりです。RX8、すなわちレジスタアドレス 0x88 に該当するところが反応しています。


:78890104010A0000000000000282FE006D
1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What is going on with this article?