迷走の果て・Tiny Objects

迷走する日々の覚え書きです。自分で分かってることは省略してますので、念のため。

Arduino Pro Microを試す。(3)HIDとして使う(2)

前の記事では会社のバーコードスキャナーにスイッチを付けてというか乗せてTabコードを出すことを考えましたが、Shift-Tabも出せたほうが便利だと思います。Tabで次のフィールドに移動、Shift-Tabで前のフィールドに移動します。さらに後で何かの機能を追加するかもしれないので、結局スイッチを三個つけることにしました。
バーコードスキャナーの上に何らかの方法でスイッチを乗せ、本体側とケーブルでつなぎます。単純に考えると配線が四本必要になりますが、これを二本でやりたいわけです、シールド線を使うことになりますが。
Arduinoのアナログ入力を使い、抵抗による分圧によって電圧を変えます、スイッチごとに違う電圧が出ればいいわけです。
本体とは1.5メートルほどあります、念のため断線や短絡があればそれも検出できればいいでしょう、ただ道具が無い会社では修理は無理ですけど。(勤め先はスーパーマーケットですので)

一応回路図です。点線から右側がスイッチ部です。
アナログ入力 A0 を使いました。
VCC=5Vとして、断線ならA0の電圧は5Vになりますが、
スイッチが何も押されていない時 4V
SW1 オンの時 3V
SW2 オンの時 2V
SW3 オンの時 1V
となるように抵抗値を計算しました。当然短絡時は0Vです。
二線式スイッチ回路図

実験の様子、R1は手持ちにあった金属皮膜の1%を使いましたが、他は5%のカーボンです。
スイッチはもっと増やせますが、そうすると1%が必要になるでしょう、今回はこれで十分です。
二線式スイッチ


スイッチの状態はAD変換値をADCresultとして
SW=(ADCresult+102)/205
で計算できます、102≒1023/10、205≒1023/5です。
SW=
5 断線
4 スイッチオールオフ
3 SW1 オン
2 SW2 オン
1 SW3 オン
0 短絡
です。
スケッチはこちら
とりあえずのスケッチですので断線・短絡時には何もしていません、LEDを点滅させるかブザーを鳴らすなどすればいいと思ってます。
スケッチ内にdelay()を多用してますが、delay時間が適当かどうかも十分検討はしていません。
SW1 にTab、SW2にShift-Tabを割り当て、表計算ソフトでアクティブセルが移動するのが確認できました。

なお、抵抗分割によるスイッチ入力にはしなぷすさん抵抗分圧器を使った、多くのスイッチのセンシングという記事がありました。
私のやり方ではスイッチを同時押しすると値は変なことになりますが、しなぷすさんの方法だとスイッチに優先度があるので優れています。
スポンサーサイト

Arduino Pro Microを試す。(2)HIDとして使う

今回買ったArduino Pro Micro や Arduino Leonardo などATMega32U4を乗せたボードはHIDとして使えます、キーボードやマウスのフリをさせることが出来ます。
私があれこれ書くより下記のリンクを読んでもらったほうがいいでしょう。

参照リンク
Arduino Leonardo(Pro Micro)のHID(キーボード)機能を使う
Mouse and Keyboard libraries

実験の様子、といってもスイッチ一つ付けただけです(汗
スイッチを押すとキーボードのTabキーを押したのと同じ動作をします。
Tabキーだけのキーボードというわけです、スイッチを増やせばほかにもいろいろ出来ますが。


スケッチです。
// Keyboard Tab
// 2017/06/04 edy

#include "Keyboard.h"

void setup() {
pinMode(2, INPUT_PULLUP);
Keyboard.begin();
}

void loop() {
while (digitalRead(2) == HIGH) {
delay(100);
}

Keyboard.press(KEY_TAB);
delay(100);
Keyboard.releaseAll();// Keyboard.release(KEY_TAB);

while (digitalRead(2) == LOW) {
delay(100);
}
}


こんな実験をするには理由があります。
某スーパーで発注業務をしています、昨年ウィンドウズタブレットが新たに導入されました。それまではほぼA4サイズのWindowsCEマシンを使ってました。
それまでとは作業内容が変わってしまいました。
通常の発注業務はいいんですが、時々ある商品入れ替え時に面倒な思いをすることがあります。
タブレットにハンディスキャナを繋ぎ、登録商品のJANコードをスキャンしてタブレットに入力します。次のスキャンをする前にタブレット画面でキャレット(Iビーム)を次の入力フィールドに移動する必要があります。画面のフィールドを指で押せばいいんですが、これが反応がいまいち悪く、おまけにキャレットが見にくい(老眼なので^^;;)ため移動失敗に気づかないことがあり、かなりイライラさせられます。
左手にタブレット、右手にハンディスキャナ、JANコードをスキャンした右手でタブレットの画面を押すという操作も結構面倒です、視点移動がありますから。
Tabキーを押せばフィールドの移動が出来るのはわかってるんですが、タブレットのスクリーンキーボードのTabキーを押すのでは意味がありません。
ハンディスキャナにスイッチがあって、それを押せばTabキーを押したのと同じになればいいわけです。
これがこの実験の理由です。

とはいえ、タブレットもハンディスキャナも会社の物ですからやらせてもらえるかどうか。

Arduino Pro Microを試す。(1)

AliExpressからArduino Pro Micro互換機を購入しました。
USB microBコネクタがちょっと斜め。
pro_micro_photo.jpg


SparkFunによるArduino互換機で、そのまた互換機を購入したわけです。

ATmega32U4を搭載しておりUSBにつながるので、USB-シリアル変換チップは必要ありません。またHIDとしても使えるそうです。

関連リンク
SparkFun Pro Micro
Hookup Guide
Installing on Windows

Arduino互換ボード「Pro Micro」の情報まとめ
(Arduino) Pro Micro

使うにはデバイスドライバとボードデータを追加する必要があります。
Installing on Windowsに詳しく書かれています。

デバイスドライバのインストールにはデバイスマネージャーを開く必要があります、今まではコントロールパネルから開いてたのですが、Windowsキーと Rキーを押すと「ファイル名を指定して実行」が開くので devmgmt.msc と打ち込んでOKをクリック、簡単です。初めて知った方法ですので覚書として記録しておきます。


Arduinoでロータリーエンコーダを試す(2)

EX-OR無しで動きました。
quadrature_encoder_schematic3.jpg

ArduinoというかATmegaの内部プルアップ抵抗を使ったのでロータリーエンコーダ以外必要ありません。
quadrature_encoder_photo2.jpg

テスト用のスケッチです、intcountはチャタリングの影響を見るために入れてる変数ですので通常は不要です。

Arduinoでロータリーエンコーダを試す(1)

ロータリーエンコーダは以前PSoCで試したことがあります。Arduinoでやってみようと思ったら以前参考にしたサイトがリンク切れ。
検索して見つけました。

How to use a quadrature encoder

このサイトの記事を基にして、とりあえずこのような回路で実験。ロータリーエンコーダは秋月のと同等品です。
EX-ORを使わずに済ませたいのですが、まずは動かしてみてからです。
quadrature_encoder_schematic2.jpg


ロータリーエンコーダは停止位置から次の停止位置まで回すとスイッチの状態が4回変化します。(注クリック感ありの場合)
quadrature_encoder_output.jpg

実験の様子。
上の行左の数値はスイッチの状態が変化した回数、右はそれを4で割ったもの、すなわ回した回数です。
下の行の数字は割り込み回数。スイッチの状態が変化するたびに割り込みが発生するので、チャタリングが無ければ上の数字と一致するはずですが、実際にはチャタリングがあります。でもソフトでうまい具合に除去できます。ソフトで追いつけないような場合は別でしょうけど。
quadrature_encoder_photo.jpg

スイッチサイエンスI2C接続小型LCDを試す。

ロボットプログラミング教室を手伝うことになったのですが、そこではArduino互換機(Studuino)を使います。
電池動作を考慮してでしょうか、クロック8MHz、VCC=3.3Vとなってます。

実は以前にスイッチサイエンスさんからI2C接続小型LCD搭載ボードを買ったのですが、これが3.3V版なのです。うっかりしてました。
当時は(今も^^;;)VCC=5Vで使ってたので使う機会の無いまま放置してたのですが、ちょうどいいので試してみました。
スイッチサイエンスさんのブログをそのまま試しました。
ArduinoのA2をVCC、A3をGNDとして使うという、私にはちょっと思いつけない方法で接続してます。

こんな風になります。
ここではラジオペンチさんの「外付け部品無しでArduinoの電源電圧を測定する」を使わせていただきました。
ただArduinoの基準電圧(1.1V)は結構ばらつきがあるようで、実測3.34Vなのですが3.29Vと表示されたのでスケッチ内で補正しました。
スタディーノ

このままだとA0からA3が塞がってしまい使いにくいので、ユニバーサル基板の切れ端を使って下の写真のように移動しました。
D13をVCC代わりに使ってます。
スタディーノVCC2

スイッチサイエンスLCD接続回路

Arduino:スケッチ書き込み時のタイミングチャート

あちゃんでいいのv1
スケッチ書き込み時のシリアルアダプタの各入出力をロジックアナライザで調べてみました。
使ったスケッチはおなじみのBlink (いわゆるLチカ)です。
Channel 0はシリアルアダプタのTX出力、1はRX入力、2はDTR出力です。
Channel 0でトリガをかけてます。
Arduino書き込み
まずDTRがLになります、CRによる微分回路でArduinoをリセットします。

0.5秒後に0x30、0x20が送られ、Arduinoは0x14、0x10 を返します。
Arduino書き込み2

さらに0.5秒後に同じく0x30、0x20が送られ、Arduinoは0x14、0x10 を返します。
0.5秒後に書き込みが始まります。その後どういうやり取りがあるのかまでは調べてません、調べても多分私にはわかりません。
ちなみにビットレートは57600bpsでした。

あちゃんでいいのver.1

ウチではびんぼうでいいのをつかってます。
実はあちゃんでいいのも買っていたのですが、うまく動かせず放置してました。買ったのは今販売されてるVer2ではなく初期型、リセットスイッチがありません。
USB-シリアルアダプタをつないでのDTRリセットも出来ませんでした。
理由は単純でDTRリセット用のコンデンサをつけてませんでした^^;;
1番ピンのすぐ近くにランドがあるのを見つけたので0.1μのチップコンデンサをつけたらちゃんと動作するようになりました。
今aitendoさんで売ってるのはリセットスイッチもリセット用コンデンサも付いてます。
DTR_reset.jpg

2つ持ってます、シリアルアダプタとの接続用のピンヘッダはL型に換えてあります。
ケーブルはホットボンドで固定。
あちゃんでいいの

アマゾンで買ったUSB-シリアルアダプタ
USB_シリアル変換基板


あちゃんでいいのv1

ArduinoにRTC-8564をつなぐ(7)Duemilanove vs. Fio

ウチのArduinoはaitendoさんのびんぼうでいいのをつかってます。
1号機のチップはスイッチサイエンスさんのArduino Duemilanove用交換チップ
2号機は同じくスイッチサイエンスさんのArduinoブートローダ書き込み済みATMega328P-PU(内蔵CR発振8MHz版)を使ってます。
1号機のクロックは16MHz、2号機は8MHzです。

先の記事でデジットのLCDを動かしてますが、表示は割り込み処理中に行ってます。
クロックの違いで割り込み処理にどれだけ差が出るのかロジックアナライザで調べてみました。

スケッチをちょっと変更、割り込み処理の最初でD13ピンをHIGH にします、最後でLOW にします。D13を見れば割り込み処理にかかる時間がわかります。
ついでにSCL、SDA、シリアル出力(D2ピン)、デジットLCDのWR 入力(書き込みクロック)も見ました。
digitLCDと接続回路

上がクロック8MHz、下が16MHzです。
Channel0がD13ピン、以下SCL、SDA、シリアル出力(D2ピン)、WRです。
クロック8MHzだと割り込み処理に17.8mS かかってますが、16MHzだと9.77mS です。
ちょっと意外だったのはシリアル出力が終わる前に割り込み処理が終わってることです。
FIFOバッファでも持ってるのか、それともシリアル出力は割り込み処理してるのか、多分割り込み処理してるんでしょう(未確認)

Fio_Duemilanove.jpg

ArduinoにRTC-8564をつなぐ(6)デジット6行16桁7セグメントLCDで日時の表示

先に実験していたデジットの6行16桁7セグメントLCDをつなぎ、日時表示してみました。
digitLCDと繋ぐ3

回路図です。D2ピンを割り込みに使ったので、LCDとの接続を変えました。
digitLCDと接続回路

スケッチですが・・・。
別々に書いたスケッチを無理やり合体させたので、すんなりと動くわけありませんでした。
どうにか表示できるまでにはなった(つもり)ですが、問題が起きるたびに泥縄式に書き換えたのでスパゲッティコードです。
全体を書き換えたほうがいいのかもしれませんが、サーミスタ温度計やらあれこれ乗せてみたいので、当面このままです。

公開はちょっと考え中・・・。

続きを読む »

 | HOME |  古い日記に行く »

文字サイズの変更

プロフィール

edy

最新記事一覧(サムネイル画像付き)

店の電飾(2)回路の変更とスケッチ Jun 25, 2017
店の電飾 Jun 18, 2017
Arduino Pro Microを試す。(3)HIDとして使う(2) Jun 15, 2017
Arduino Pro Microを試す。(2)HIDとして使う Jun 04, 2017
Arduino Pro Microを試す。(1) Jun 03, 2017
脈拍センサー MAX30102を試す(2)MAX30100と比較 May 29, 2017
脈拍センサーMAX30102を試す(1) May 25, 2017
脈拍センサーMAX30100を試す(5) May 20, 2017
MT3608モジュールを使ったDSO Shell用電源 May 16, 2017
脈拍センサー MAX30100を試す(4)MAX30100_Registers.h を調べる。 May 13, 2017

全記事表示リンク

全ての記事を表示する

ブログリンク

リンク

このブログをリンクに追加する

月別アーカイブ

06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  12  11  10  09  07  05  04  03  04  03  01  12  11  10  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01 

カテゴリ

プログラミング (0)
freescale (1)
AVR (3)
テルミン (16)
緊急警報放送 (3)
78K (1)
PSoC (295)
地上デジタル放送 (2)
電子工作 (403)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (31)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

アクセス

RSSリンクの表示

フリーエリア

FC2Ad

まとめ

Template by たけやん