やはりセンサー部分をアクリルで囲ってしまうと,感度が落ちて
しまうようです。
当初の予定通り,切り欠きの部分にセンサーがくるように,
設置しなおしました。
こうすることで,
以前と同じように,車庫入れの時に車の通過で,ライトが
点灯するようになりました。
mabo個人のサイトです。いろんなことを日記風に書いてます。場合によっては,間違った記載もあるということをご承知おきください。表題をクリックして,個別のページの最下部からコメントをお願いします。
雨の影響で,センサー部分や本体に影響がありましたので,
全体をカバーすることにしました。
計画の段階で,センサー部分を覆ってしまうと,感度に影響
あるかもしれないということで,運用してみて,センサー部分
だけ,カバーが掛からないようにもできるように,わざと切り
欠きを作ってあります。
本日夜,運用試験したところ,やはり,感度が落ちるよう
なので,切りかけ部分にセンサーがくるようにしてみたいと
思います。
ただ,そうすると,雨の影響があるかと思いますが,
カバーなしよりは,ましかなと考えました。
カバーの透明部分は,アクリル板で作りました。
接合部分が隙間なく合わせることができると,接着剤がスーッと
入って,あっと言う間に強度がでますが,接合部分が密着
しないと,なかなか強度がでません。
ぴったり接合するには,ミニテーブルソー等の道具使う必要
があるようですね。
PIXONのPX-910というワイヤレスシリーズのセンサーライト
を便利に使ってました。
しかし,一週間ほど前に突然,動作しなくなりました。
メーカーに修理を依頼しようと思い連絡しましたが,代替え品が
ないため修理不可能ということで,もしやと思い,◯オクをみると,
中古ですが,同じものが二つだされていました。
二つとも落札しようと思いましたが,一つしか落札できません
でした。
早速手元に届いた落札品をいままでのものと入れ替えてみまし
たが動作しませんでした。
もしやと思い,今まで使っていたもののセンサーを,落札品の
センサーと交換してみました。見事に動作しましたので,
落札品の基盤を今まで使っていたものと換装しました。
赤矢印が動作しない基盤で,黄色矢印が言うまでもなくセンサー
部分です。
センサー部分は,表面のカバーが劣化しひびが入って,そこから,
雨水が回路のトリマー部分にかかり,動作しなくなったように
思います。
写真は,カバーが欠けています分解したためで,分解する前は,
経年劣化でひびが入っただけでした。
右側のものが,動作するようになったものです。
今までものの基盤は,アンテナ部分から水漏れしたのか,
所々錆がでていましたので,落札品の基盤を使いたかったの
ですが動作しなかったので,今まで基盤の錆を気持ち落として
利用することにしました。
もし,動作しなかったら,センサー部分を◯月で購入して,
小さなリモコンスイッチがあるので,その基盤を使い,簡単
なプログラム作って,動作させようかなと思いましたが,
大丈夫だったので,ひとまず安心です。
ただ,新しいものには,直接雨水等がかからないように,
アクリル等で,カバーを作ろうかと思います。
過日,いろいろ試すのに◯mazonkから,PWM信号発生器を購入し,
便利に使ってました。
商品の説明にもシリアル通信ができると記述があり,基盤の裏
にも TXD RXD の記述があるので,外部からコントロール
できるのかなと思ってました。
手持ちのシリアル通信のアダプターに接続し,PCから,あれこれ
やってみました。
最初「テラターム」でやりましたが, FAIL の文字が帰ってくる
だけで,通信はできているようでしたが,うまくいかないようでした。
「シリアル通信ソフト」というソフト名のプログラムをベクターから
DLして,試してみると,あっけなく通信ができました。
(起動にあたっては,管理者権限で起動しないとだめでした。)
難しいプロトコルが必要かとおもいましたが,簡単なコマンドで,
制御できるようです。
写真は, ”read” のコマンドで,設定の状態を読んでいます。
F055 → 周波数
D090 → DUTY%
と,表示されている数値を読み取ることができました。
ちなみに,設定するには,
周波数 001→999 F*** (ex F090 →90Hz)
周波数 1.00→9.99 F*.**(ex F1.45 →1.45KHz)
周波数 10.00→99.9 F**.*(ex F10.45 →10.45KHz)
周波数 1.0.0→1.5.0 F*.*.*(ex F1.4.6 →146KHz)
DUTY 1→100 D***(ex D090 →90%)
read 設定データの読み取り
でした。まだ,やっていませんが,PICからもコントロールでき
そうなので,これを使った方が,手軽にPWMの信号のコントロール
できるかもですね。
ーーーグレイコード(3)ーーー
A相とB相の信号を使えば,回転方向を検出できることは,
理解できました。
これをプログラムで実現するには,いくつか方法がある
ようです。
自作のMPG関連では,B相の立ち上がりを検出し,それを
DFFのICにいれて,回転方向を検出してました。
今回は,別な方法でやってみようかなと思います。
基本的な考え方は,◯月の取説にあったように,前回と
今回の2回のサンプリングをして,その組み合わせの全部
から回転方向を決める方法です。
エンコーダーから,出力されるグレイコードをバイナリ変換
して,前回と今回の2回のサンプリングの差を取って,+1
の場合は時計方向,-1の場合は逆時計方向としてもいい
のですが,バイナリ変換するのにビット操作が必要なので,
私にはちょっと苦手かなと思います。
それで,組み合わせを全部拾い出し,それをインデックスに
して,回転方向を決めるのが私には分かり易いかなと思い
ました。
前回グレイコード(2)記事の表から,前回と今回の
サンプリングの可能性を考えて見ます。
可能性は,次のようになります。
時計回転
前回→今回
00 →00 動かない(0)
00 →01 時計回転(+1)
00 →11 一つ先に移動(エラー)
01 →01 動かない(0)
01 →11 時計回転(+1)
01 →10 一つ先に移動(エラー)
11 →11 動かない(0)
11 →10 時計回転(+1)
11 →00 一つ先に移動(エラー)
10 →10 動かない(0)
10 →00 時計回転(+1)
10 →01 一つ先に移動(エラー)
逆時計回転
前回→今回
00 →00 動かない(0)
00 →10 逆時計回転(-1)
00 →11 一つ先に移動(エラー)
10 →10 動かない(0)
10 →11 逆時計回転(-1)
10 →01 一つ先に移動(エラー)
11 →11 動かない(0)
11 →01 逆時計回転(-1)
11 →00 一つ先に移動(エラー)
01 →01 動かない(0)
01 →00 逆時計回転(-1)
01 →10 一つ先に移動(エラー)
全部で16通りありますので,前回を2ビットシフトして,
今回と合計すると,その数値がインデックスの数値として
使えることになります。エラーを100とすると,
m[(前回<<2)+今回]=数値
m[0000]=0
m[0001]=1
m[0011]=100
m[0101]=0
m[0111]=1
m[0110]=100
m[1111]=0
m[1110]=1
m[1100]=100
m[1010]=0
m[1000]=1
m[1001]=100
m[0010]=-1
m[1011]=-1
m[1101]=-1
m[0100]=-1
のようになり,[ ]内を16進数に直すと,
m[0]=0
m[1]=1
m[3]=100
m[5]=0
m[7]=1
m[6]=100
m[F]=0
m[E]=1
m[C]=100
m[A]=0
m[8]=1
m[9]=100
m[2]=-1
m[B]=-1
m[D]=-1
m[4]=-1
のようにすることができます。この配列を使えば,
回転方向の検出ができることになります。
ーーーグレイコード(2)ーーー
グレイコードをWikipediaでは,
グレイコード(英: Gray code、交番二進符号
(こうばんにしんふごう、英:Reflected Binary Codeなどとも)
とは、数値の符号化法のひとつで、前後に隣接する符号間
のハミング距離が必ず1であるという特性を持つ
よような事が書いてあります。なんの事やらと思いましたが,
どうやら,連続する2進数の符号の変化が,一つだけする
表記の仕方のようでした。
ですから,通常の表記とは,違ってるようです。下記がその
対比表です。
通常の2進数では,
3→4の変化で 0011→0100
のように3箇所変化してますが,
グレイコードでは,
3→4の変化で 0010→0110
のように,1カ所しか変化していません。
この性質が,エンコード等のデータの変化を取り出すのに
エラーが少なくなるとのような記載もありました。
エンコーダーの出力をみてみると,その出力は,まさに,
グレイコードでした。
エンコーダーの出力を Hightを 1 Lowを 0 として,
B相を1ビット目,A相を0ビット目とした,2進数の出力と
見てみると,見事にグレイコードの出力になってました。
なぜ,回転の出力をA相,B相の出力に分けてあるのか,
なんとなく理解できました。
ーーーグレイコード(1)---
縁あって,X9C,AD5220というデジタルポテンショメーター
を弄る機会に恵まれました。
存在は,たまに見かけて知っていましたが,スピンドルの
DCモーターのコントロールもなんとかできました。
そこで,同じような原理で,自作してみようかなと思いたち
ました。
構想として,ロータリーエンコーダーや,タクトスイッチ等で
アップ・ダウンができること。
7セグLEDかLCDでモニターできること等,できればいいなと
思ってます。
そこで,いろいろ調べ始めました。手始めに,
ロータリーエンコーターをあたりました。
以前,自作のMPGを作成した時に,ちょっと,調べたのですが
調べるといくつか分からないことがでてきました。
まず目にとまったのが◯月の,
http://akizukidenshi.com/catalog/g/gK-00083/
の取説の記事で,
現在の値をf(t1),一つ前の値をf(t0)とし,記号”<”を
左ビットシフト,”+”を ex-or をそれぞれ表すものとし
て,
D=f(t0<1)+f(t1)
という回転判別式を定義します。
(1)時計回りの場合
入力系列が 00,01,11,10・・・・・・であるので,
D0=(00<1)+01=01
D1=(01<1)+11=01
D2=(11<1)+10=00
D3=(10<1)+00=00
の記述があり,演算結果の2ビットめを見ると,回転方向
を判別できると記載がありました。
ここで,なぜ,シフトするのか,なぜ,ex-orをするのか,
釈然としませんでした。
いろいろHPをあさりましたが,どうやら,グレイコードに
関係がありそうだということが諸兄のHPで分かりました。
ロータリー・エンコーダの使い方
ロータリーエンコーダの使い方
等を見て,シフトやex-or グレイコードに関係する
ということがなんとなく分かりました。
グレイコードについて,調べて見ます。
PICをあれこれいじってます。
ところが,昨日,突然,PICへの書き込みができなくなりました。
思いつくこと全てやりましたが,だめでした。
それで,PICKITが故障かなと思い,安いの早速ポチりました。
夜,また試してみようと,あれこれやると,
原因が判明しました。PICと基盤接続の自作のコードの一本が
コネクターの部分で,断線してました。
あーあ,あーあ,
ジェジェジェジェッ
でした・・・・・。
制作のついてでに,手元にあるI2CインターフェースのLCD
をケースに入れて動作を確認しました。
PICのプログラムを組んでももかったのですが,デバック等
多少手こずりそうだったので,諸兄のHPにあったaruduino
をパクりで,動作を確認しました。
諸兄の作られたaruduinoのACM1602用のライブラリーも
そのまま使わせていただきました。あっけなく完動いたしまし
た。
諸兄の配線図では,ACM1602とaruduinoを直接つないで
いるようでしたが,念のため,間にレベル変換の基板をいれ
て,接続しました。これ必要ないのかもですね。
諸兄の配線図では,A4とA5を3.3Vにプルアップして,LCD
に直接つないでいるようでした。このへんの詳細がちょっと
分かりません。
とりあえず動きましたので,これから,ボチボチPICの方も,
プログラム見ていきたいと思います。
おもちゃの作成を初めて何日か過ぎました。
やっと,だいたい完成です。
おもちゃは,なんのことはない,ポケモンgoプラス
という,ポケモンをボタン一つで捕獲できる器具を,自動で,
動作できるようにしたものです。
このポケモンgoプラスの中身を,諸兄のHPを参考に,
スイッチと振動モーターの結線を引き出し,フォットセンサー
で読み取った光に応じて,フォットカプラーにて,引き出し
た線を短絡させるという動作を,自動で行うようにしたものです。
諸兄のHPのように短絡させただけで,自動化できるのですが,
ちょっと,面白みがないので,手に入った光センサーと組み合わ
せて作りました。
ちょっと,大きいのですが,プラスチックの箱にいれて,遊んで
みる予定です。