回路網の旅

電気・電子に偏った社会人がおくる日々の記録。

物理ショートカット

2017年06月04日 12時39分45秒 | その他
ひょんなことから、パソコンを扱いなれていないシニア世代の方に大量のマイコン書き込みを代行してもらうことになりました。
慣れていない人にパソコンを教える大変さを良く知っている身としては、
なんとか物理ボタンでできるようにしたかったので、その方法を模索し、なんとか実現しました。
そのメモを残しておきます。いっちょまえに言うなら、GUIの向上です。
(ニーズは少ないと思いますが、そういう場面ってきっとある)

困ったことに、ソフトは英語だし、1台につきプログラムを数回読み書き(フラッシュROMにデータを流しこむため)する必要があって自分でやるのも面倒だし。

手順:
(1)PCにマイコンを接続
(2)PC操作してプログラム書き込み
(あらかじめ決まったマウス、キーボートの入力操作のみ)
(3)マイコンの接続を外す

環境:
Windows7


【PC操作の自動化】
まず、マウスとキーボート操作ですが、HimacroEXというフリーソフトに頼ることにしました。
これが非常に勝手がよく、ほとんどこのソフトのおかげといっても過言ではないです。
操作を記録することもできるし、プログラムを書いたり、記録内容を編集することもできます。
すばらしい。

・HimaroEXで操作
⇒マウスとキー入力をエミュレート。うまくいったので、ファイルに保存(.hmc形式)

※操作の内容はこのメモの趣旨ではないので省きます。
 メッセージボックスで「OK」と表示するものをサンプルで作りました。

ここでは触れていませんが、HimacroEXでできない操作は、
サブルーチン的に、バッチファイルをつくって、
HimacroEXからバッチファイルを呼び出して対処しました。


【自動操作呼び出し】
次にこれを物理キーから呼び出す方法ですが、Windows標準の機能で
ショートカットキーを割り当てて呼び出すことにしました。

・実行ファイルのショートカットを作る
・ショートカットのプロパティを開く
・ショートカット欄を選択して、好きなキーを押す。適用。

これ、ぜんぜん知らなかったんですが、便利ですね~

ショートカットを押したら、自動操作ができるようになりました。
実は、ここまでで実用十分になってしまったので、以降はお遊びです笑


【物理キーの実装】
ショートカットを割り当てられるキーボートを買うというのも方法だったのですが、
ちょうどDigisparkというArduino互換のマイコンボードが手元にあったので
これを使ってみることに。

Digisparkの何がいいかというと、キーボードと同様にUSB HID(Human Interface Device)として
認識されるところです。また、マイコンボードなので、好きなスイッチを接続できます。
これに、スイッチを押したらショートカット(ctrl+Alt+A)を押したと
出力させるようにプログラムすると、先ほどの自動操作を好きな物理キーで立ち上げることができます。




個別に実験して満足して、物理キーまでは実装してないんですが、
ちょっと凝ったスイッチとか作ってみたくなりますね。
押した瞬間にエフェクト音も鳴らせるし、PCでできることなんでもできる笑

この辺の境界領域をうまくつなげなかったのが、いつももどかしかったんですが、
安く簡単にできるようになってうれしいです。オープンソースが可能性を拡げてくれる。


使ったツール:
HimacroEX (フリーウェア) 
Digispark(マイコンボード)今回使ったもの

作者さん、ありがとう!

温湿度センサとArduino UNO

2017年02月26日 21時38分38秒 | 工作
ずっと前からマンションって空気乾燥するなーと思ってた時に、
買っておいた湿度と温度が測定できるセンサを試してみました。

グラフは、赤線が湿度、青線が温度になってます。縦軸は共通で、横軸は測定数(10秒おき)です。
今は乾燥になれて気にならないんですけどねー

使ったのは↓のセンサです。
売り切れになってますが、いろんな所で買えます。
(パチもんもあるらしいのでご注意を


・温度湿度センサ DHT22(AM2302)
https://www.amazon.co.jp/gp/product/B00KNPQIWG/ref=oh_aui_search_detailpage?ie=UTF8&psc=1


1-wireで出力するようになっているので、マイコンがないと厳しいですが
その辺は先人がいろいろ試されているのでそれをまんま拝借しました(笑

Arduino UNOに接続して、DHT22(白いの)のライブラリとスケッチ例をダウンロードしたらOK
あとは、arduino IDEのメニューからシリアルプロッタを選択すれば、
ログがグラフで表示されます。
湿度と温度なので応答はゆっくりですが、エアコンをつけたときと窓を開けたときははっきり読み取れました。
こういうセンサ類は、単体で動作確認したあと、何に使うかが肝だと思います。
特に予定はないですけどね!エアコンの稼動状況(電流)と並べたら面白いかも

このシリアルプロッタという機能はArduinoIDE 1.6.6から実装されたそうですが、とてもありがたいですね。シリアルモニタでも確認はできるんですけど、グラフでみれるほうが直感的で応用が拡げられそうです。





ModbusRTU工作5

2016年12月31日 12時22分04秒 | 工作
modbusRTUをやるにあたって、CRCの計算というやつがありまして

こいつをプログラムで動かす分にはいいんですが

デバッグ中にこのデータなら幾らなんだ?という場面がちょいちょいあります。


Modbusに必要なCRCは16ビットですが、PCのメモリなんかは32ビットだったりするのでアプリやソフトも少なめですが、無いことはないです。


方法1:Cで動かす
Modbus.orgの仕様書「MODBUS over Serial Line Specification & Implementation guide V1.0」の42ページにサンプルプログラムと数列表
を使う。(マイコン側はこれにしました。)


方法2:フリーソフトの力を借りる

Simply modbusというサイトに計算するエクセルファイルが公開されてます。
http://www.simplymodbus.ca/index.html

CRC Calculator - Checksum Generator(iPhone アプリ)も有料ですが、便利です。
https://itunes.apple.com/jp/app/crc-calculator-checksum-generator/id984488943?mt=8


あと、調べるとオンライン計算サイトもあってありがたいですね。


方法3:手計算
一回はやっておくべしと思いながら、数週間・・・・笑

ModbusRTU工作4

2016年12月31日 12時04分41秒 | 工作
舞台をルネサスマイコンに移してから、久しぶりなマイコンプログラミングになりました。

回路図とにらめっこすることが大半となった社会人生活にはいい頭の体操です。

さて、シリアル通信の方法ですが検証はTeraTermを使いました。今回初めて知ったのですが、TeraTermにはバイナリモードがありこれに切り替えるとModbusRTU通信をみることができます。


色々試していると、どうも最後の送信文字がうまく届いてない様子があります。Win7とTeraTermの組み合わせで発生するみたいで・・・・
詳細は検証中です。(ちがったらごめんなさい)


OS環境:Windows 7 Professional 32bit
ソフト:TeraTerm 4.8.7

メモ
・Debug modeをONしてバイナリ表示させる。(管理者モードで実行)
・エンコードはShift_JIS
・ボーレートなど設定後に保存しておくと便利(※1)
・ModbusRTUマスターのコマンドはマクロで送信(※2)




※1
ボーレート:19200bps
データ:8bit
パリティ:none
ストップ:1bit
フロー制御:none
送信遅延:0ms/字、0ms/行
漢字コード:Shift_JIS
ローカルエコー:あり


※2
; macro for Tera Term
; modbusRTU function01
; Read coil 4

send $01$01$00$00$00$04$3D$C9
mpause 15
end

ModbusRTU工作3

2016年12月31日 11時53分16秒 | 工作
さて、準備が整ったところでオリジナルの製作に入ります。

使うマイコンはArduinoUNO相当がよかろうということで、
ルネサス製RL78/G13にしました。最近のルネサスマイコンを使ってみたかったんです。

エミュレータを買う余裕はないので、Stickという開発キットにしました。デバッグできて、回路図もしっかりしてて良い感じですが、
スタンドアロンで動かすときと接続して書き込むときに、ショートプラグを4つ抜き差ししないといけないのをよく忘れます。小さくて面倒だし、セレクタICでもつないでやろうかしら。



・ルネサスエレクトロニクス RL78/G13 Stick スターターキット 【RL78/G13-STICK】 \4,000-くらい
https://www.amazon.co.jp/%E3%83%AB%E3%83%8D%E3%82%B5%E3%82%B9%E3%82%A8%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AD%E3%83%8B%E3%82%AF%E3%82%B9-Stick-%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%AD%E3%83%83%E3%83%88-%E3%80%90RL78-G13-STICK%E3%80%91/dp/B016W852AG/ref=sr_1_6?ie=UTF8&qid=1483152594&sr=8-6&keywords=RL78+G13



ここからが大変だった。ルネサスの統合開発環境はHEWのときにちょっといじったくらいだったので
CS+ for CC と CS+ for CA に翻弄されることに・・・・(笑
細かく書いても有益な情報はないので、備忘録てきにメモっときます。


・開発環境(無償)はCS+ for CAがよさそう
・StickのサンプルコードをCS+ for CAで試す
・LED点滅確認→OK
・シリアル通信のサンプルコードがCS+ for CCであることに気づく
・CS+ for CAとCCの違いがよく分からない
・コンパイラが2つあるという事実に気づく
・面倒なのでCS+ for CCでサンプルコードを動かす
・CS+ for CAとビット表現が異なり混乱
・コード自動生成機能を後からいじっておかしくなる
・少しづつ事実が見えてくる
・CS+ for CCで開発を進める


こんな感じです。現状はサンプルコードにつぎはぎなので、どこかで整理できたらコードを公開できるかもしれませんが、めどは立っていません(笑

新しいことを新しいデバイスでやるもんじゃないですね・・・笑