2025年6月8日日曜日

2色 8×8 マトリクスLEDを使う(その5)

 出すのが遅れたが制御部は次のような簡単な回路である。J101が外部インターフェイス用のRS-232Cコネクタ、J102とJ104はドライバー部との接続コネクタである。配置の自由度を増すため2個設けている。2つのジャンパーはソフト的にチェックして立ち上げモードを変更できるようにするためのものであり、またこの端子をデバッグ用信号の出力にも使っている。その2で見せた割り込み中を表すトレース波形はここから取り出した。

このユニットを作って驚いたのは、PICが極めて低消費電力なのは言うに及ばず、J101にRS-232cのケーブル経由でPCが接続されていれば電源を切っても動き続ける事である。回路的には何処からも電源が供給されていなくても、UARTのRX 端子(U-RX)に加わるHの信号電圧だけで機能している事になる。つまり入力ポートからの漏れ電流だけで動いていることになる。さらに5桁のマトリクスLEDを接続した状態でもこの動作は継続される。このとき暗闇で見るとLEDが薄く点灯して動作している。これには感動した。

(続く) 

 

2025年6月6日金曜日

2色 8×8 マトリクスLEDを使う(その4)

 5桁のLEDマトリクスを裏側から見るとこうなる。制御部は一番左の二階部分。全体を見るとコネクタが多くの経費を食っているようだ。

 

 使っているCコンパイラのバグに悩まされて手間取ったが(Cコンパイラのバージョンが古いままだったため原因不明の異常動作に悩まされたが最新のバージョンに上げたら安定した)、その後表示内容をスクロールさせる機能を追加することが出来た(以下はデータ量を減らすため動作が分かる程度のショート動画にしている)。


 

スクロールの基本的な構造は、表・裏2つの画面バッファを持ち(それらを瞬時に切り替えることも可能)、2つのバッファを(縦または横に)ループ状に繋げて連続的にシフトする事でスクロールさせている。左・上スクロールを組み合わせて斜め上スクロールも出来て、見てると浮遊感があるが見続けていると酔った感じになって気分が悪くなった。

機能は一通り出そろったので、これrらをユーザインターフェイスにどう纏めるかが課題となった。あと、LEDの明るさを抵抗で決めているがソフト的に変更できるようにしたい。そのためには現在BLINKの機能に使っているイネーブル端子をパルス幅変調する必要がある。このときパルスの周期を表示と同期させないとエイリアシングが発生して周期的に明滅するので一工夫する必要がある。とりあえずTimer1とCLCを使えば何とかなるだろう。

現在、前作の超音波測距センサーと組み合わせて反射物までの距離を表示させている。

(続く)


 

 

 

2025年5月31日土曜日

2色 8×8 マトリクスLEDを使う(その3)

 フリーのAsciiフォントを入手した事で文字列を表示できるようになった。8x8のフォントだが当初想定したより見易い。

誤っていた基板の配線も修正したバージョンを作成し、完成した基板5桁分を繋げてみた。3色の表示が可能だ。



ハード的には出来上がったが、まだ固定した形式でしか文字列を表示できないので、後はソフトにどういう機能を入れるか、だ。

(続く) 


 

 

 

2025年5月18日日曜日

2色 8×8 マトリクスLEDを使う(その2)

 ソフトを組むうえで改めて構成を考えてみた。色々数値を試算してみて、CPUクロック(Fosc)を4MHz(インストラクションサイクル(Fosc/4)は1MHz)、SPIクロックを500KHzとした(その後、場合によっては処理が間に合わない事が分かったのでCPUクロックを4倍の16MHzにした。以下のトレースはCPUクロックが4MHzの時点の写真である)。

LEDは8行(row)で構成されるが、各行を同じ明るさで表示するため、タイマーを使って行毎の表示時間を一定にする。タイマーの割込み間隔を2msにすると1秒間の表示回数は約62回(=1/(0.002*8))となる。行データは1桁に3バイトなのでLEDを5桁並べると15バイト、つまり120ビットである。これを500Kbpsで転送すると240μsかかり2msより充分短いのでソフトのオーバーヘッドを考慮しても問題ないだろう。次トレースは上が行ラッチのストローブ(2ms周期)、下がSPIクロックである。

これを拡大すると15個のSPIクロックの塊が見え1行15バイトのデータを(240μsではなく)800μsかかって転送していることが分かる。この処理を割り込み処理ルーチンの中で実行しているのでその間割込み禁止となっており、残り1200μsの中でアプリケーションを動かす事になる。
これをさらに拡大すると次の様に2μs周期(500KHz)のSPIクロックが見える。

ホストとの通信レートは9600bpsとするので最短でも1ms/バイト程度であり十分表示の合間に処理できるだろう。

ソフトもテストパターンを出せる所まで作った。


行表示タイマーの割込み間隔を色々設定できるようにしているが、2msより大きくするとチラつきが目立つようになる。さらに200ms程度に大きくするとスキャンの動作が見えてデバッグに役立った(配線の誤りを発見できた)。

その後CPUクロックを16MHzに上げた。その状態を表す次のトレースで上が2ms毎のラッチ信号、下がHで割込み処理中を表しており、割込み(表示)に500μsかかり、その他の処理に1.5msの余裕が出来たことがわかる。



 マトリクスに表示させる文字パターンはAscii文字を対象にし、著作権フリーのフォントデータを使い、そのほか任意のパターンを設定できるようにする予定である。

その前に誤っていたPCBのパターンを修正する必要がある(コネクタを裏面に取り付けた事でピン番号の偶奇が逆になっていた。今はソフト的にビットを入れ替える事で修正している)。

 (続く)

 

2025年5月10日土曜日

チャラン・ポ・ランタンは面白いぞ

 チャラン・ポ・ランタンの動画がYouTubeのお勧めに出た。全く知らないユニットだったが大道芸の動画らしく面白そうだったんで見てみた。女性二人組でボーカルとアコーディオンという組み合わせだ。きっと売れない芸人か本職の大道芸人がやっているんだろうと思って見たが、なかなか面白い。

何本か動画を見て、どんな人物がやっているのか興味が湧き検索してみた。二人は姉妹でアコーディオンを弾いている姉の小春はアコーディオンを531個売った実績があるとか・・・楽器店員かな?妹のももがボーカルで5歳年下らしい。

さらに調べると過去にTVドラマ「逃げ恥」の曲を担当した事があるらしい。へー、そうなんだ。 ももは2024年の紅白に椎名林檎と出場したとか・・・バックコーラスかな?動画を検索してみると、何と一曲丸ごと椎名林檎とデュエットしてる・・・知らなかった、実力派じゃないか。小春の弾くアコーディオンは右手側がピアノみたいな鍵盤式ではなくボタン式で珍しい。しかも目視できないボタンを物凄いスピードで弾き、しかも出てきたメロディに力みがなく美しい;神業だ。しかも活動を始めた頃からこのレベルに達していたようだ。

という事でここ数日 チャラン・ポ・ランタンの動画に嵌っている。もう15年以上活動していて今でも大道芸もやって投げ銭の量も半端ない。亀田誠治ともコラボした。ミスチルのをサポートしたり、海外のコンサートに出たりドイツでツアーをやった事もある。531個のアコーディオンは個人で会社を立ち上げて企画し、ネットで1日で販売したとか。Wikipedia を見ると色んな活動をしており多芸・多才なユニットだ。

もう古希も過ぎたが、まだまだ知らない事がいっぱいあるな~と思い知らされた一週間であった。

2025年5月5日月曜日

2色 8×8 マトリクスLEDを使う(その1)

 先日、秋月へ行ったら2色の8×8マトリクスLED15個入りのレールが300円で売っていたので思わず買ってしまった。家に帰って改めて調べるとLITE-ONのLTP-12188Mというモデルで大きさは32mm×32mm、1個140円で売っているものが20円で買えたので1/7の値段だ。

内部は次のような結線で8×8×2色、アノード・コモンになっており足は24本ある。

さぁて、これをどう料理しようかと調べ始めた。

こういう場合は8行(ROW)を順にスキャンさせ、16列(COL)にデータを与える。出来ればドライバーを32mm×32mmに収め、水平方向にドッキングさせると横長に広がるようにしたいがどんな回路にしたら良いか。列に接続する電流制限のシリーズ抵抗だけで16本必要であり、8行(ROW)16列(COL)構成の駆動をするだけで8ビットのシフトレジスタが3個必要で、安易に作ると部品が基板からはみ出す。

ネットで色々調べると、74TC595AFという8ビットシフトレジスタ+ラッチと、TB62708BFという16ビットシフトレジスタ+ラッチ+定電流ドライバを使うと上手く行きそうな事が分かり、早速ドライブ部の設計を始めた。

これでロジック的には動きそうなのでPCB基板を考えた。
 
ちなみに、この回路のインターフェイスにはSPIを使い、3バイトで1行のデータを表示する。これを8回繰り返す事で8x8ドットを表示することが出来る。表示のリフレッシュレートを30回/秒とするとデータレートは最低5760bps(=3*8*30*8)必要となる。これを5個直列接続する場合は5倍の29Kbps必要である。実際にはソフトのオーバーヘッドを考慮してクロックを100Kbps以上にすれば良いだろう。1点注意が必要なのはTB62708BFのラッチが負論理のエッジトリガーなのに対し74TC595AFのラッチは正論理のエッジトリガーと逆になっている点である。間にインバータを1個入れれば問題ないが余計な部品を追加せずシンプルに済ませたい。そこで両者を同じトリガー信号で駆動する事とし、短いトリガーパルスを使うことで両者をほぼ同時にラッチさせる事とした。このトリガーパルスは負極性でも正極性でも問題なさそうであるが、実際には負極性だと上手く行かず消灯すべきLEDが暗く点灯する現象が発生した。
 

実装密度を上げ基板の面積を抑えるために表面実装部品(SMD)を積極的に使うようにした。PCBの設計で問題だったのはICチップのフットプリントである。ICの型番は分かって外形もSOP-16などと記述されているが実際の大きさが曖昧である。昔のDIPならソケットで規格化されていて簡単だがSOPには様々な大きさのパッケージがあり、どれを選べばよいか。幸い秋月では定規にあてたチップの写真を掲載してくれているので非常に助かった。あと、TB62708BFは足のピッチがインチ(1.27mm)ではなく1mmと変則的なので自分でフットプリントを作らざるを得なかった。

結局、出来上がった基板は32mm×32mmには収めきれなかった。

ここまで来て、改めて電流値を計算してみた。LEDの向きからTB62708BFを定電流シンクとして使う。1列の中で同時に光るLEDのは1個なのでドライブ能力は十分ある。一方74TC595AFを電流ソースとして使うことになるが1行最大16個のLEDを同時に駆動する必要がある。TTLの場合は電流ソースとしてのドライブ能力はとても低かったが今回のC-MOSでは改善され25mAある。しかし行ドライバーとして16個のLEDを同時駆動するには数百mAの電流が必要であり、全く足りない。この基板は未発注のままお蔵入りとなった。

やはり別途電流ドライバーが必要である。ここにNPNトランジスタのエミッタフォロワーが使えないか等と調べていたらTD62783という8チャネル500mAのソースドライバーを売っていたのでこれを使う事にし、次の回路を作った。

この回路は上の大きさの基板に収まりそうもないし、これ以上面積を大きくすると例え完成したとしても見栄えが悪すぎる。

 そこで基板を2枚に分けて直交させ、前面からはLEDのみが見え、不足する面積は奥行で解決する事とした。2枚の基板間はコネクタ接続としている。さらにPIC(16F18326)による制御部を追加して3枚の基板に仕上げた。

基板にVカットを入れた1枚の基板として発注したかったが規定以下のサイズと形状のため不可であり、そこでエッジカットを入れて1枚の基板として誤魔化して発注してみたが3枚とカウントされ追加料を支払うはめに・・・まあ、安いから良いけど。

 基板が届いて組み立てた。

背面の2段重ねの基板のうち上がPICを使った制御部で、下がLEDのドライバー部だ。制御部を外すとドライバー部はこうなる。

ドライバー部は横に連結して広げる事ができるようになってている。制御部1つで複数のドライバー部を制御する。何個連結できるかは主に電源容量とPICのドライブ能力に依存するが少ない数ではないだろう。

TB62708BFのR-EXT端子に接続する抵抗Rの値でLEDに流す電流を設定することが出来る。

とりあえずテストのために10KΩを入れた。 試しに330Ωを入れてみたが物凄く明るく直視できない。これでも発光時間は1/8だから平均電流に直したらLED1個当たり7mA程度の筈である。色々な場所で使えるようにするためにはENABLE端子をPWM信号で駆動して明るさを可変にするのが良いのかもしれない。

(続く)

 

 

2025年4月30日水曜日

出入り検知器をPCB化する(その25) インテグレーション2


 アップグレードしたメインの基板はサーボコントローラより前に発注して昨年末に入手済みである。 前バージョンとの大きな違いは配線パターンの向きを表裏逆にした点である。ICのピン間(2.54mm)を通す配線を表側に配置した。昔、レジストを塗布していない基板ではこうしたものだがレジストがハンダのブリッジを防いでくれるのでうっかり逆にしていた。プロの仕事を見るとICのピン間には2本の配線を通せるようであるが、私は私はそこまで追い込むつもりは無い。

 

 さらに次のバージョンを発注し入手した。

最新バージョンの変更点はインターフェイスの都合上電源の5V系と3.3V系を分けた事である。 というのは電源を3.3V系で統一出来たら良かったんだけど超音波測距やサーボモータを使う上で(3.3V系では物足りなく)5Vを使いたく、一方ICによっては3.3Vでしか使えないものがあるからである。そのためI2Cレベルコンバータを追加した。

部品点数がだんだん増えてきて、組み立てに約半日を要した。特にSMDのハンダ付けにはいつも苦労する。 上手く繋がっていない場合もあるのでハンダ付け後は必ずテスターで導通具合をチェックする必要がある。あと、レベルコンバータのICには1番ピンを表す刻印が見付からず逆に付けて、取り外すときパターンを壊してしまった(仕方なく1号機は空中配線で凌いだ)。


こういう場合は、ICを文字が読める方向に置いて文字の下側の左端が1番ピンのようだ。

(続く)

 

2025年4月21日月曜日

葬送のフリーレン

 ふとしたきっかけで「葬送のフリーレン」というYouTube動画(ダイジェスト版)を見て、嵌った。漫画やアニメに嵌っていたのは半世紀も前の事で、最近は全く興味を失っていて、「鬼滅の刃」が話題になって少し興味が復活した位だ。

一方、近年ストリートピアノが流行っていて、ハラミちゃんなんかも登録者が千人程度の頃からYouTubeでよく見ていた。そこで弾かれる曲に多くのアニソンがあるようだ。歴史秘話ヒストリアの主題歌を歌ったKalafinaもアニメの主題歌を歌っていて、さらに若手アニソン歌手も活躍していて気に入った曲もあるがアニメ自体にはあまり興味は無かった。

なぜ「葬送」なんだと思いながら見ていると、魔法とかエルフとか出てきて、お決まりの魔法アニメだと思ったが、これが中々面白い。ロード・オブ・ザ・リングスを思い出させる点もあるが登場人物も多く時間も前後して展開の早いダイジェストでは頭がついていけない。しかし話が壮大な事は分かる。多くの登場人物の全てに夫々の個性や背景が割り当てられていてじっくり見ないと理解が出来ないようだ。

壮大と言えば若い頃には「百億の昼と千億の夜」に嵌ったた。漫画雑誌に連載され、その壮大な世界観に圧倒された。連載終了後には原作の文庫本も買って、今もクローゼットのどこかに眠っているはずだ。そう、手塚治虫の「火の鳥」みたいなもんだ。

  来年1月から新シリーズが放映されるらしいので、見る事にしよう。

 

 

2025年4月16日水曜日

出入り検知器をPCB化する(その24)・超音波測距4

 前回まで超音波測距センサーを3個使う3チャネルの測距モジュールを作り、使い勝手を良くするためにトレーニング機能を追加した。さらにトレーニングを起動するためにプッシュボタンを追加した。その成果を踏まえ今回新たに超音波測距センサーを5個まで使える5チャネルのモジュールを作った。というのは超音波センサーの半値幅が30度なので3個でカバーできる範囲は90度にしかならたいため、これをもっと広範囲まで拡張したかったからである。超音波測距センサーを5個使うことで150度までカバーできる。3チャネルモジュールのPICには14ピンの18326を使ったが5チャンネルでは信号線(足の数)が足りないため20ピンの18346を使った。

ソフトは3チャネル用の物を少し改造した。トレーニング時にセンサーの付いていないチャネルを検知してOFFにするようにした。

US Ranging346-2.036.48
Copyright(C) 2025 myname.
*** Start Training.
+++ Trained Max Range(raw) -  A:167 B:500 C:41 D:500 E:119
*** US Sensing parameters:
  Ch-A: ON : 010 - 162
  Ch-B: OFF
  Ch-C: ON : 010 - 036
  Ch-D: OFF
  Ch-E: ON : 010 - 114
  MODE = Range Data with Zero Suppress.
_00,--,34,--,00
_00,--,31,--,00
_00,--,30,--,00
_00,--,29,--,00
_00,--,30,--,00
_00,--,29,--,00
_00,--,29,--,00
_00,--,30,--,00
_00,--,30,--,00
_00,--,33,--,00
_00,--,00,--,00
 

ここで1文字目の'_'は表示モード、またOFFのチャネルの測定結果は'--'で、範囲外のデータは'00'で表示している。このモードでは対象物がある時だけ表示する(反射が無くなると反射ゼロを1回だけ表示)。

表示モードにはこのほか、生データ表示モード、

#00b2:0000:0063:0000:001f
#00b2:0000:0063:0000:0021
#00b2:0000:0063:0000:0022
#00b2:0000:0064:0000:001f

連続データ(1秒に2回程度)表示モード、

>00,--,00,--,00
>00,--,00,--,00
>00,--,31,--,00
>00,--,31,--,00
>00,--,28,--,00

最も近い反射物のデータを表示するモード、

=C13
=C15
=E16
=E13
=E12

等が可能で、目的別に使い分けできる。

このほか記号'!'を送ると(改行不要)直ぐにIDを返すようにしている。

$$$346.2036+-+-+

これはホストからの生存確認を簡単にするためであり、最初の3文字で'!'に対するレスポンス'$$$'を、その後バージョン、超音波センサーの稼働状態を表している。

 今後、対象物の大まかな移動ベクトルを算出する事も考えている。

(続く)

 

 

2025年2月27日木曜日

出入り検知器をPCB化する(その23)・超音波測距3

 インテグレーションを目指して実際に超音波測距センサーを使ってみると、特に室内では反射物が多く場所を少し変えるごとに状況が変わり閾値の設定がものすごく面倒で、容易に置き場所や周囲の状況を変更できない。そこで新たにトレーニング・モードを設けた。立ち上げ時に周囲を何回かスキャンし、各方向のセンサー毎にエコーの最近値からマージン(とりあえず5cm)を引いて閾値(最大探知距離)として自動的に設定する。

*** Start Training.
*** Trained Max Range R:178 F:98 L:50
  US Sensing parameters:
        Mode = Range Data with Zero Suppress.
        Ch-R: ON : 010 - 173
        Ch-F: ON : 010 - 093
        Ch-L: ON : 010 - 045

この効果は絶大で、何処でも簡単に設置でき、トレーニングが終われば人などが前を通過したときちゃんと反応する。 

_10,0,0
_10,20,0
_0,20,0
_0,20,0
_0,23,0
_0,0,21
_0,0,23
_0,0,0
 

エコーが無くなった事を表すため最後には 0,0,0 を出力させている。

さらに状況が変化した時はいつでも再度トレーニングを実行できるようボタンを追加した。

これでいつでも再トレーニングできるようになり、室内でも使い勝手が随分良くなった。

超音波センサーモジュール込みの消費電流を測ってみたが、電源電圧5Vで約7mA、3.3Vで5mAであった。

 (続く)

 

2025年2月25日火曜日

モニタースピーカ(MS101 II)の修理

 小型の外部スピーカが必要になったのでアンプ内蔵のスピーカをヤフオクやメルカリで検索するとヤマハのMS101シリーズの出品が多く、人気商品のようだ。新品の市場価格は\20K前後するようであるが、\2K以下で欲しい。そこで格安の物を探すとジャンク扱いの故障品が時々出品される。目標を定め値下げ交渉+初回限定クーポンを利用して MS101 II を\1Kで入手した。

受け取ってテストすると、電源ランプは点灯するが音は全く出ない。耳を近づけても何にも音がしない。何が死んでるんだ?電源?スピーカ?とYouTubeの修理動画を参考に分解し、スピーカーの抵抗を測ると導通は無く、ボイスコイルが切れているようだ。代わりに手持ちのスピーカを接続すると音はちゃんと出る。回路の方は動いているようだ。

YouTubeで見つけた修理動画もボイスコイルが切れていた。このタイプの持病なんだろうか。アンプの出力にスピーカーが負けているのだろう。音楽のモニターだと目一杯ボリュームを上げて鳴らし続ける事もありそうだしスピーカの負荷は高そうだ。

とりあえずスピーカーの交換が必要だ。 外形的には秋月で売ってる10cmのスピーカがぴったりだった。コーンの形もそっくりだ。だた、オリジナルのスピーカ(JA1061)のインピーダンスが4Ωなのに対し秋月のは8Ωだ。これが音にどういう影響を与えるかは分からない。(加わる電圧が同じなら電流が半分なると)単純に考えて音量が半分(-3dB)になるのか。音のヤマハ製だから4Ωに最適化した設計になっていると思うので8Ωだと特性が変わるかもしれない。秋月で600円のスピーカを入手し交換して修理は終わった。元の MS101 II の音を知らないのでどの程度音が変化したかは分からないが私の目的には全く影響はない。

改めてオークションを覗くと、電源が入る事は確認したが動作は未確認という商品説明の安目の出品が多い。きっとこのタイプの故障をしているのだろうと推測する。

調子に乗って捨て値で出品されていたヤマハのKS10というモニタースピーカ(キーボードスピーカト言うらしい)にも手を出した。

こちらは動作品ということで、音を出してみると確かに音は出るが、少しこもった感じの音で、あまり好きになれない。構造はMS101がバスレフ型なのに対しKS10は密閉型であり、KS10は低音が弱いはずだが逆に高音が伸びてないのが気になる。発売から40年ほど経過しているのでへたりが出ているのかもしれない。中を開けてみると電解コンデンサが10個ほど使われているので交換してみよう。

 


 

2025年2月21日金曜日

AsIO.sysを退治

 最近Win11の更新後に出始めた「ドライバーを読み込めません」という警告。

これをネットで検索し、対応を試みるも要領を得ない。どうもASUSのマザーボードに添付のユーティリティ(Al Suite 3)の一部のファイル(ドライバー)が問題になっているようだ。しかしこのユーティリティをアンインストールしても立ち上げ時の警告は無くならず駄目。しかし害も無さそうなので暫く放っておいた。最近、Win11の月例更新毎にセキュリティが厳しくなっていくような気がする。10年以上前のメールがある日掘り起こされて引っかかった事もある。

こういう警告が出るのはWindows立ち上げ時にAsIO.sysを読み込むような指示がリソースの何処か、あるいはその先に書かれているからである。本日思い立ってリソースエディタでAsIO.sysを検索した。その結果・・・。

つまり、Wn11から嫌われているのは、

C:\Windows\SysWOW64\Drivers\AsIO.sys

というファイルだ。最初はこのファイルが無いのでエラーになったかと思った。その場合はリソースからこの指示を削除する事になる。しかし実際にはこのファイルは存在し、それがブラックリストに載っているためエラーとなったようだ。そこでこのファイルを削除し、その結果警告は出なくなった(ついでに隣にあったAsUpIO.sysも削除した)。

本当は手動でリソースも削除すべきだと思うが下手に弄ってシステムにダメージを与えたくないので、それは別の機会に考えることとした。

ソフトをアンインストールすると対応するリソースも削除されると思っていたが、実際にはリソースは残っているようだ。或いはアンインストールの途中で何らかのエラーが起き、削除されなかったのかもしれない。

このPCのC:ドライブは何世代にも渡ってクローニング&Windowsをアップグレードしているのでリソースにはゴミがたくさん溜まっているはずだ。そのうちWindowsをクリーンインストールしてスッキリさせたい。リソースを綺麗にするサードパーティのツールもあるようだがリソースはシステムの要。これを勝手に弄られたらシステムに致命的な問題を生じさせかねないうえに、セキュリティを弱めたり裏口を開けるなど悪意に満ちたた操作も可能なので、信用してはいけない。

余談だが、以前はリソースエディタはDOS窓(コマンドプロンプト)を立ち上げてコマンドを打ち込むか自分でショートカットを作らないと起動できなかったが、いつの間にかアイコンがスタートメニューのWindowsツールの中に組み入れられれている。 ユーザに開放したのだろうか?

 

2025年2月12日水曜日

出入り検知器をPCB化する(その22) インテグレーション1

 インテグレーションの最初のステップとして、新しいサーボ・コントローラ基板を発注した。これはトルクの大きいサーボに電流を流せるよう部品を見直したのと、基板ごとに違っていた電源電圧を1つの電源から供給できるように統一する為である。おまけで、前に作った2チャンネルのコントローラを3チャネルに増やし、操作方法を少し変更している。

3チャネル化に当たってPIC内のペリフェラルの使い方を少し変更した。

これまでの2チャンネルでは周期20msのパルスを10msずらして発生させていたが、これを5msずらし3チャネル目を挟み込みたい。そのためには100Hzの方形波が必要だがTMR0が方形波を出力できないため、最終段で2分周して方形波を出力出来るNCO1に変更した。但しNCO1からCLCへは直接のルートが無く信号を渡せないため、間にDSMを挟んで渡してる。この方式では4チャネルまで対応できるが残念な事にPIC内には4チャネル迄拡張するためのTMR1&CCPリソースが無い。

基板を発注した時期がたまたま春節の休暇に被ったため予想以上に時間がかかって、通常だと1週間程度で届くはずが2週間ほどかかった。基板が届いて早速組み立てた。

基板上にはACアダプタ用電源コネクタ、分岐用2P電源コネクタ、サーボモータ用コネクタ×3、ホスト接続用コネクタ、電源SW、ロータリーSW、プッシュSW、レバーSW、赤色LED、緑色LED×3等を搭載している。3つの緑色LEDはそのチャネルのサーボが動作中に点灯する。

幾つかのバグ取りを経て5msずれたパルスを出力することが出来た。なおこのパルスを与えるとサーボの消費電流が増えるので、サーボが目標点に到達した約1秒後にパルスを止めるようにしている。

このコントローラはリモート制御で使う事が前提であるが、ローカルテストのため基板上のスイッチでも操作できる。基板上のChSelスイッチを押す毎にCh1、Ch2、Ch3、ChAll、ChOffと移行する。このとき選択されたチャネルのLEDが点灯しロータリースイッチで回転速度を、レバースイッチで動きを制御できる。サーボが動作中にはLEDは点滅する。ChOff、或いは無操作で数秒経過するとリモート状態に戻る。ローカルテストで設定した回転速度はリモート制御には反映されない。別の言い方をすれば、リモート制御の回転速度はローカルテスト後も維持される。

(続く)


 

 

 

 

2025年1月13日月曜日

出入り検知器をPCB化する(その21)・超音波測距2

 年末年始で手を付けていなかった超音波測距だが、ソフトを作って実際に動かしてみた。PICは14ピンのPIC16F18326を使った。


Timer1に入力するクロック(LFINTOSC=31KHz)をプリスケーラで2分周する事で、計測値1カウント当たり1.1cmの測距距離とした。これで1カウント当たりほぼ1cmと考える事ができる。音波の反射や回り込みによる相互干渉を避けるため Right, Front, Left の3つのセンサーを(同時でなく)100ms毎に順番に起動し測距する。これを連続で行うと3回/秒程度の頻度の測定になる。次図で上のトレースは右(R)のセンサーのトリガーであり、100msずつ遅れて起動する他のセンサーのトリガーは見えていない。下のトレースはTimer1のゲート信号で、順に3つのセンサー(R,F,L)のエコーに対応している。
各エコーのパルス幅が測距距離に対応しており、毛布で覆ってエコーが無いと思われる場合は次のような波形になった。

中央の幅広のパルスを生成しているセンサーがUS-015であり、それ以外はHC-SR04である。それぞれUS-015で75ms、HC-SR04で50ms程度あり最大探知距離相当時間の2倍以上は確保されている。

 測定結果はシリアルインターフェイスを通じてホストへ送信する。

測定したデータの処理には次の3つのモードを設けた。

  1. 生データ表示モード
  2. 測定結果表示モード
  3. 最接近表示モード

1.生データ表示モードはデバッグ用で、測定した3方向の生データを16進表示する。

#0049:0021:001e
#0049:0022:001f
#0049:0022:001f
#0049:0021:001e
#004a:0023:001e

2.測定結果表示モードでは測定した3方向のデータを10進表示するが、この時測定したい距離の閾値(最大距離、最小距離)を適用し、その範囲外のデータは0とする。これは近くにある固定された反射物を避けるとともに、とくに最大探知距離より大きな値(無エコー、誤データ)を排除する為である。

> R:144 F:63 L:32
> R:144 F:63 L:31
> R:73 F:33 L:31
> R:73 F:34 L:32
> R:73 F:32 L:31
> R:144 F:64 L:32
> R:144 F:63 L:31

3.最接近表示モードでは、3方向のうち最も距離の近い対象までの向きとデータ(≒距離)を表示する。3方向とも範囲内に対象物が検知されなかった場合は何も表示しない。

=L23
=L30
=F51
=F53
=F48
=F52
=R71
=R71

基板上の3つのLEDは夫々のセンサーが対象範囲(閾値)内にエコーを捉えていると点灯する。 

3つのセンサーのデータをAI(機械学習)で学習すれば前を通る人の動きを認識出来るかも知れないが、今回はそこまでやらない。

このセンサーユニットを、これまで作った回路と組み合わせることで纏まった動作をさせるよう今後インテグレーションしたい。


(続く)