🗐 電装工芸日記 - 舞台照明機器の製作とか -

能登半島地震で被災された方々にお見舞い申し上げます。

or 管理画面へ

全年全月9日の投稿(時系列順)[36件](2ページ目)

2022年3月 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 SPIでレガシーDMXを出力する回路の基本要素は揃いました。PICをプログラムして実験する段階です。
 本業が忙しくなってしまったので棚上げですが、PICの基本設計は進めましょう。
 PICは12F1822を使います。PIC12とありますが、PIC16系の8ピン版と思っていい製品です。

 ピンアサインは次の通りです。
 拡張ミッドレンジPICにはモジュールのアサインピンをある程度切り替えられる機能があります。
 TRISとはI/Oピンの入出力方向を設定する要素です。

  VDD
  VSS(GND)
  RA0 TX_Pilot_LED TRIS-OUTPUT(汎用I/Oとして使い、送信が行われるとLEDを点灯させます)
  RA1 SPI.SCK TRIS-INPUT
  RA2 SPI.SDI TRIS-INPUT
  RA3 DMX.RESET TRIS-INPUT
  RA4 USART.TX TRIS-OUTPUT(ただし、BreakTimeを作るためにINPUTにすることがあります)
  RA5 CSC1 TRIS-INPUT(クロックの設定は優先順位が高いので、TRISはどちらでも機能します)

 これには隠れたコツがあります。
 SPIを使うならSPI.SDOがあります。使わないI/Oですがどこかにアサインしなければなりませんので、USART.TXと同じRA4にアサインします。被って出力がおかしくなりそうですが、SPIよりも優先順位が高いUSART.TXが出力されますから大丈夫。逆だったら困りましたけどね。

 クロック発信子にはクリスタルオシレータ(8MHz)SG-8002DC(3.3V)を使います。普段はPIC1個に対し水晶発振子を1個使うのですが、今回は同じクロックレートで動く複数のPICを1枚の基板に載せますので、部品点数を減らす意味も含めてこれを使います。PICのI/Oピンも減るし。

#電子工作
Icon of admin
 PICでDMX512を出力する際、面倒なのがBreakTimeです。
 一般的なUARTでDMX512の様に長いBreakTimeが使われることは無いためか、PICにはそのような機能がありません。何らかのチカラ技で作らないといけません。

 私が最終的にたどり着いた方法は、

1)USARTが出力されるI/Oピンをプルダウンしてアイドル・ローにしておく。

2)BreakTimeは0x00の空送信で作る。ただし、0x00送信でもStopBit(H)が発生するので、以下(3)の方法で消す。

3)BreakTimeの空送信が始まってからStopBitが始まるまでの間(Lが続く間)にTRIS(I/Oピンの入出力方向を決めるフラグ)を入力に切り替える。入力にするとI/Oピンがハイインピーダンス(Z)になり、プルダウンされているためRS485ドライバに届く信号はLを維持する。

4)BreakTimeの時間に相当する空送信する。

5)BreakTimeの終わりというか次のフレームの送信開始前に0x00を送信してTRISを出力に切り替える。0x00送信のStopBitがMarkAfterBreakとなる。ただ、MarkAfterBreakは少し長い方が安定するので、0xCO(b11000000)などのMSB詰めの数値を使ってMarkAfterBreakを長くしてもいい。

 といった内容です。
 これならタイマー処理をせずにBreakTimeを作れます。

 BreakTimeを表すデータをBreakTimeZero、BreakTimeZeroの始まりのバイトをBreakTimeNose、最後をBreakTimeTailと勝手に呼んでますが、RaspberryPiからのSPIデータをBreakTimeTailから始まるモノにしておけばPIC側の処理は凄く簡単です。

0)RaspberryPiからRESET信号(実際にはCSを用いる)をPICに送り、PICはこれを見て送信カウンタをクリアしてUSART.TXピンのTRISを入力に切り替えておく。アイドル・ロー。

1)SPIの最初のバイト(BreakTimeTail)を受信したら、USARTに渡して送信し、3bit分待ってからUSART.TXピンのTRISを出力に切り替える。以下、受信値を1バイト送信するごとに送信カウンタをインクリメントする。

2)512スロットを送信した後のバイトはBreakTimeNoseになる。ただ、PICのUSARTは1ワード分のキャッシュを持っているので、BreakTimeZeroの2バイト目をUSARTに渡した後(BreakTimeNoseが送信開始された後)、3bit分待ってからTRISを入力に切り替えてBrakTimeとする。送信制御は送信カウンタを用いる。

3)以下、SPIのデータが終了(RaspberryPiからのCSで確認)したら、送信カウンタをクリアしてSPIを受信待機にする。=>(1)に戻る。

4)BreakTimeZeroを送信する前にSPIが終わってしまったらエラー。TRISを入力に切り替えてBrakTimeにしておくなど、エラー処理を行う。

5)TRISの切り替えの前に3bit分待つのは、次の送信バイトの受け入れがStopBit中に可能になるからです。

 こんな感じかな。

#電子工作
Icon of admin
 Art-Netを受信した後、送信元別だった受信値をミックス(HTP)する方法。

 numpy.maxを用いれば簡単

 受信値を3次元のnumpy.arrayで保存します。
 3次元のnumpy.arrayはエクセルでイメージするとわかりやすいかなと。

 1スロットの受信値は0-255の数値で、これが横方向(行)に512個並んだ状態をユニバースとします。
 これをルート別に縦方向(列)で並べます。ここまでは縦横の1枚のシートです。
 この1枚を送信元別のシートとし、レイヤーとして重ねます。もちろん、スロットアドレスとルートは同様にします。

 あとはレイヤーを串刺しで最大値を得ればHTPでミックスしたルートとスロットの2次元のnumpu.arrayを得られます。

 numpyをnpの名前でimportし、3次元のnumpy.arrayをan_cache_senders_route、最大値の2次元のnumpy.arrayをan_cache_htpとすると次の様になります。

an_cache_htp = np.max( an_cache_senders_route, axis=0 )

 こんな感じの1行で計算出来ます。axis=0は最大値を得る次元方向の指示です。3次元なら、axis=2は横で、axis=1は縦で、axis=0は奥行という指示です。


 以下、ちょいとオレメモ

 受信値、付随するデータ

an_bytes          受信したArt-Netパケットのデータ(type=bytes、別途デコード必要)
an_sender_ipaddress    受信したArt-Netパケットの送信元IPアドレス(type=string、4つのドット切り10進数 IPv4の一般的な表記)
an_received_datetime    受信された時点でdatetime.datetime.now()により取得した日時(type=datetime.datetime)

 処理の処理を指示するデータ

an_universes2route     対象ユニバースの1次元配列           ( Net, Subnet, Universe )[ ルート ]

 受信値を処理、管理するデータ

an_ipaddress_senders    送信元のIPアドレスの1次元配列         IPアドレス [ 送信元 ]
an_datetime_senders    送信元ごとの最終受信日時の1次元配列      最終受信日時 [ 送信元 ]
an_datetime_senders_route 送信元ごとにルートの最終受信日時の2次元配列  最終受信日時 [ 送信元, ルート ]
an_cache_senders_route   送信元とルートごとに受信値を保存する3次元配列 受信値 [ 送信元, ルート, スロットアドレス ]
an_cache_htp        次の処理へ渡す処理済み受信値の2次元配列    受信値 [ ルート, スロットアドレス ]
 ※ [ ]内はインデックスの要素([3次元目,2次元目,1次元目])
 ※ 同名のindexは同じ値になるように設定

#an_ipaddress_senders から an_sender_ipaddress と同じIPアドレスを持つ[ 送信元 ]のindex配列を得る
list( zip( *np.where( an_ipaddress_senders == an_sender_ipaddress ) ) )
 ※ 受信した際に重複しない様に送信元情報を保存してインデックスを発行し、送信元別に日時と受信値を保存するために使う。
 ※ ただし、対象のユニバースを送って来ない送信元は無いものとする。早い段階でフィルタしないと後が面倒。

#an_datetime_senders から現在日時より1秒以上前の日時を持つ[ 送信元 ]のindexの配列を得る
list( zip( *np.where( an_datetime_senders < ( datetime.datetime.now() - datetime.timedelta( seconds=1 ) ) ) ) )
 ※ 送信元の存在を確認するために使う。1秒間受信が無い送信元は無いものとする。

#an_datetime_senders_route から現在日時より1秒以上前の日時を持つ[ 送信元, ルート ]のindexの配列を得る
list( zip( *np.where( an_datetime_senders_route < ( datetime.datetime.now() - datetime.timedelta( seconds=1 ) ) ) ) )
 ※ ユニバースの存在を確認するために使う。1秒間受信が無いユニバース(=送信元,ルート)はゼロデータにする。

#Python #[Art-Net]

2022年4月 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 体中が痛い。病気ではありません。
 昨日はテレビの中継現場でした。夜桜がネタだったので当然ライトアップするのですが、落差10mはあろう谷底に桜がありました。その谷を降りたり登ったりを繰り返したワケです。当然脚を酷使しますから疲労困憊。今日もライトアップのバラシでしたので輪をかけて疲労困憊。オッサンにやらせる日程ではない。

 今日も工作はオフですが、作業の合間にArt-Netの処理をまとめましたので、明日は少し進めようと思います。

 今のところArt-Netの処理は堅調です。
 このまま書き進めれば使い物になりそうです。

#[Art-Net]

2022年5月 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 中華電器に頼んでいた抵抗が入荷しましたので、Rが暗いムービングライトに取り付けてみました。
 ビンゴです。他の機体と同じ明るさを出すようになりました。部品代15円くらいですから御の字でしょう。
 この手の故障は原因を特定するのが難しく、可能性がありそうな部品を交換しながら試すしかありません。
 もし抵抗が原因でなかったら次に疑わしいのはドライバICとなり、ドライバICが正常だったらインダクタが疑わしいとなります。
 動くには動くけれどスペックが出ない不調は何ともイヤらしい。

 次は電源モジュールが疑わしい機体です。
 電源投入直後は正常に動くのですが、しばらくするとLEDが暗くなってきて、さらにしばらくすると突然明るさが戻ってLED周辺から煙が出てくるという難解な不調です。
 たぶんですが、通電しているウチに電源電圧が下がっていき、電圧が一定以下になるとドライバICが不正動作を始めるか、状態が変わって定格以上の電圧になるかだと思います。原因を特定するには電源モジュールから出力される電圧の変化を見ないといけません。
 と、難しいことをする前に、別な機体の電源モジュールを使って試すのが早いかな。

#照明器具
Icon of admin
 電源モジュールが疑わしいと思われたムービングライトですが、LEDドライブ基板をチェックしたところハンダクラックを発見。パッと見にはキレイなハンダ付けですが、電源の入力コネクタのピンが完全に浮いてました。これでは電源モジュール以前に正しく動くワケがありません。もちろん、これを直して全てが解決するとは限りませんけれど・・・
 ハンダ付けを直してランニングテストを試みたところ、ファンが動いていないことも発見。どうやら、電源ピンが浮いたことで発生したスナバで飛んだっぽい。近所には適合するファンが売っていないのでアマゾンでポチリ。明日入荷です。
 電源モジュールに不良がなければいいのですが、負荷側が正常に動かなくては確認が出来ません。
 ということで、本日のジャンク弄りは終了。

#照明器具

2022年6月 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 LED-BARの拡散レンズをクリスタルレジンで作ったらどうかと考えています。
 ネットで先達の書き込みを読む限り、手順を守れば難しく無さそうですし、必要な用品は小分け少量でも手に入る。手間は少なくないけど、型を作って段取りがまとまればそれ程大変でもない感じ。
 屈折率は1.5前後。ガラスと大きな違いはないから、好みのレンズを見つけて型取りすればいい。
 今は時間がありませんが、近々試したい手段です。

 そういや、間数マーカーもレジンで作ったらどうだろう。3Dプリンタで元型を作って鋳造型を起こせばいい。
 計算しないとわかりませんが、安く出来るかもしれません。

#ガチ工作

2022年7月 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 先日の現場で新作の間数マーカーを使ってみました。思った以上に良い感じです。
 発光面のホクロは気になりません。売り物にするにはどうかと思いますが、手に取って使う物ではありせんので。
 電池は1次電池のアルカリを使ってみました。エネループが推奨ですが、アルカリも使えないと現場的には問題があるのでリハ時にテストです。忙しくて細かくチェックしていませんが、12時間以上使えたみたいです。
 今後カラーバリエーションを作る予定です。

#ガチ工作 #舞台の小物

2022年9月 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 星球はコントローラーの電源モジュールを載せ替えて治ったのですがフューズやブレーカーが無い。
 以前の電源モジュールには交換可能なヒューズが載っていたのですが、載せ替えた物には無い。過電流保護が無いのは怖い。
 パネルに取り付けるヒューズフォルダはいくらでもあるので取り付けます。
 取り付けるにはケースにφ12mmの穴を空けねばなりませんが、アルミの薄板にこのくらいの丸穴を空けるならステップドリルが便利です。
20220909112432-admin.jpg
 ドリルとリーマーの中間といった刃物です。
 普通のスパイラルドリルやリーマーを使うよりも薄板にキレイな丸穴が空けられます。
 薄板に丸穴はホールソーを使うのが定石ですが、1本で複数の穴径に対応出来るのはコスパが良く管理も楽。
 精度は期待できませんが取付穴なら十分です。
 安い物はアルミより硬い素材に使うと刃がすぐにダメになりますが、鉄やステンレスを切るならそれ用を使うといいみたいです。自分で砥ぐのは難しい刃物ですから、高価であっても最初の1本からステンレス用を買った方がいいかもしれません。

#工具や資材 #照明器具

2022年12月 この範囲を新しい順で読む この範囲をファイルに出力する

Icon of admin
 コレ、すげー。

#雑談

■当面の課題

花粉症シーズンも一段落したようで重傷者にも笑顔が戻ってきました。私は原始人なので花粉が酷い日でも鼻の中が埃っぽいなぁくらいにしか感じませんけど。
気温の変化が激しいようですので、みなさま健康管理には注意してください。

編集

■全文検索:

複合検索窓に切り替える

■複合検索:

  • 投稿者名:
  • 投稿年月:
  • #タグ:
  • カテゴリ:
  • 出力順序:

■日付検索:

■カレンダー:

2022年3月
12345
6789101112
13141516171819
20212223242526
2728293031

■カテゴリ:

■最近の投稿:

最終更新日時:
2024年5月17日(金) 11時57分19秒