2023年の投稿[318件](6ページ目)
2023年9月 この範囲を時系列順で読む この範囲をファイルに出力する
アタマが空いた時のパズルとして客席テーブルの改修を妄想しています。
課題は軽量化です。基本機能や耐荷重は実用レベルですが、1BOX車に積み込んだりカマチから客席後方まで手運びするには重い。
現在の総重量は21kgです。長テーブルとしては格別重いワケでもありませんが、希望は12kg以下です。
軽量化の方法は、
1) 材を薄く
2) 材の肉を抜く
3) 軽い材に変更
とかでしょうか。
一番単位重量があるのは天板です。平台に似た構造ですが、ここから見直しです。14kgありますが、半分を目指しましょう。
#ガチ工作
課題は軽量化です。基本機能や耐荷重は実用レベルですが、1BOX車に積み込んだりカマチから客席後方まで手運びするには重い。
現在の総重量は21kgです。長テーブルとしては格別重いワケでもありませんが、希望は12kg以下です。
軽量化の方法は、
1) 材を薄く
2) 材の肉を抜く
3) 軽い材に変更
とかでしょうか。
一番単位重量があるのは天板です。平台に似た構造ですが、ここから見直しです。14kgありますが、半分を目指しましょう。
#ガチ工作
自宅の本棚を整理していたら「空飛ぶ円盤製作法」なる書籍を発掘。

中学生だか高校生だか、厨二病真っ盛りの頃に買った思い出があるので懐かしー。
内容は難しい数式の羅列。たぶん、理系大学レベルの数学だと思われますので全く理解できません。
一つだけ面白いなぁ~って思ったのは、電場を高速回転させることで重力に反する(相当する)力場を作れるって話。
オカルト方面のネタになりますが、コマは回転中にほんの少しだけ軽くなるとの説もあり、物体は高速で回転すると軽くなるとかなんとか。
前出の書籍によりますと「電場を3GHzの三相交流で回転させる」とあります。物質を3GHzの周期で回転させるなど不可能だと思いますが、物質を回転させずに電場の状態を回転させるなら3GHzも不可能ではないでしょう。今どきのパソコンも3GHzで動くCPUはザラですからね。
回転中のコマが持つ電場が構成する物質に対して一定の位置関係ならコマの電場も回転していると見立てることが出来ます。高速回転が静止状態と違った物理現象を起こすならば、この本で言うところの電場を高速で回すことに興味が湧きます。
厨二病当時の自分が今の知識を持っていたらこんな妄想をしただろうなぁ~って話www
ただ、3GHzの三相交流を作ることには今の自分が興味深々です。これを作れたらインバーター回路の神になれそうです。
#雑談

中学生だか高校生だか、厨二病真っ盛りの頃に買った思い出があるので懐かしー。
内容は難しい数式の羅列。たぶん、理系大学レベルの数学だと思われますので全く理解できません。
一つだけ面白いなぁ~って思ったのは、電場を高速回転させることで重力に反する(相当する)力場を作れるって話。
オカルト方面のネタになりますが、コマは回転中にほんの少しだけ軽くなるとの説もあり、物体は高速で回転すると軽くなるとかなんとか。
前出の書籍によりますと「電場を3GHzの三相交流で回転させる」とあります。物質を3GHzの周期で回転させるなど不可能だと思いますが、物質を回転させずに電場の状態を回転させるなら3GHzも不可能ではないでしょう。今どきのパソコンも3GHzで動くCPUはザラですからね。
回転中のコマが持つ電場が構成する物質に対して一定の位置関係ならコマの電場も回転していると見立てることが出来ます。高速回転が静止状態と違った物理現象を起こすならば、この本で言うところの電場を高速で回すことに興味が湧きます。
厨二病当時の自分が今の知識を持っていたらこんな妄想をしただろうなぁ~って話www
ただ、3GHzの三相交流を作ることには今の自分が興味深々です。これを作れたらインバーター回路の神になれそうです。
#雑談
防滴のLEDスポットを使っていますが、本体に直接彫り込んである雌ネジがバカになっています。
雌ネジを再生しなければなりませんが、肉が無くなっていますのでタップを当てただけではダメです。となると、何かで肉盛りして雌ネジを再生します。
こんな時、インサートが便利です。

管の表と内側にそれぞれネジが切ってあります。今回は止ネジがM6ですので、表がM8(ただし細ピッチ0.75)の物を使います。
M8の下穴(ネジピッチが0.75ですのでΦ7mmくらい)を空けてタップを切り接着剤を塗布してネジ込みます。接着剤は密閉状態でも硬化する2液式のエポキシを使います。もちろん仕上がり性能は脱脂に大きく左右されます。
面倒ですが、溶接等で肉盛りするワケにはいきませんので、こんなことをするしかありません。
#器具の修理
雌ネジを再生しなければなりませんが、肉が無くなっていますのでタップを当てただけではダメです。となると、何かで肉盛りして雌ネジを再生します。
こんな時、インサートが便利です。

管の表と内側にそれぞれネジが切ってあります。今回は止ネジがM6ですので、表がM8(ただし細ピッチ0.75)の物を使います。
M8の下穴(ネジピッチが0.75ですのでΦ7mmくらい)を空けてタップを切り接着剤を塗布してネジ込みます。接着剤は密閉状態でも硬化する2液式のエポキシを使います。もちろん仕上がり性能は脱脂に大きく左右されます。
面倒ですが、溶接等で肉盛りするワケにはいきませんので、こんなことをするしかありません。
#器具の修理
FT232RL の送信終了を把握する方法が見つかりません・・・。FT232RL 内のキャッシュが空か(送信がアイドル状態か)という意味です。
どうやら、FT232RL は Break 送信の指示を受けると問答無用に Break 状態に切り替えてしまうようなのです。DMX512 では送信フレームの折り返しを示しますのでキャッシュデータの一つとして扱って欲しいものですが、FT232RL では強制リセットに等しい扱いなのだろうと思われます。
出来ないなら出来ないで発想を変えてみましょう。
#器具の製作
どうやら、FT232RL は Break 送信の指示を受けると問答無用に Break 状態に切り替えてしまうようなのです。DMX512 では送信フレームの折り返しを示しますのでキャッシュデータの一つとして扱って欲しいものですが、FT232RL では強制リセットに等しい扱いなのだろうと思われます。
出来ないなら出来ないで発想を変えてみましょう。
#器具の製作
FT232RL の Windows ドライバである FTD2XX.DLL について解説している本家の資料を読めるようになってきました。
「D2XX Programmer's Guide」
C言語の勉強をした成果だと思われます。
私が求めているのは FT232RL がすべてのデータを送信しきってアイドル状態にあるかどうかです。
先の getstatus( ) は、パソコン側のドライバにデータが残っているかを得るものらしく違うようです。
私が使わせて頂いている ftd2xx.py は ftd2xx.dll のラッパーですので ftd2xx.dll の解説を読んで ftd2xx.py の本文を読めば何がどうなっているかおおよそ検討はついてきました。
けれど、FT232RL のセッティングや受信状況を読み取る方法はあっても送信状況を読み取る方法が見つかりません。
Open DMX USB の 仕様書を見つけるしかないのかなぁ。
本家の ENTTEC を探しても見当たらないないんですよね・・・。
#Python #器具の製作
「D2XX Programmer's Guide」
C言語の勉強をした成果だと思われます。
私が求めているのは FT232RL がすべてのデータを送信しきってアイドル状態にあるかどうかです。
先の getstatus( ) は、パソコン側のドライバにデータが残っているかを得るものらしく違うようです。
私が使わせて頂いている ftd2xx.py は ftd2xx.dll のラッパーですので ftd2xx.dll の解説を読んで ftd2xx.py の本文を読めば何がどうなっているかおおよそ検討はついてきました。
けれど、FT232RL のセッティングや受信状況を読み取る方法はあっても送信状況を読み取る方法が見つかりません。
Open DMX USB の 仕様書を見つけるしかないのかなぁ。
本家の ENTTEC を探しても見当たらないないんですよね・・・。
#Python #器具の製作
先のテストプログラムでは送信終了を経過時間で見ています。大丈夫なハズですが、本来ならデータを送りきってバッファが空になったのを確認して送信終了としたい。
データシートを読み直したところ、getstatus( ) で バッファの Queue の残りデータ数と実行中のイベントが読めるらしい。ただ、残りデータ数の意味がパソコン側なのか FT232RL側なのかがわからない。パソコン側なら欲しい情報ではない。イベントの意味も不明。この辺りは試すしかなさそう。
追記
getstatus( ) では求める物を得られない様子。戻り値は ( 0, 0, 0 ) だけである。
テストプログラムでは送信を開始してから 23msec 弱の待ち時間で送信が完了しているとしています。理屈では十分なハズですが、送信が終わってアイドル状態なことを確認する方法を見つけたいところです。
#Python
データシートを読み直したところ、getstatus( ) で バッファの Queue の残りデータ数と実行中のイベントが読めるらしい。ただ、残りデータ数の意味がパソコン側なのか FT232RL側なのかがわからない。パソコン側なら欲しい情報ではない。イベントの意味も不明。この辺りは試すしかなさそう。
追記
getstatus( ) では求める物を得られない様子。戻り値は ( 0, 0, 0 ) だけである。
テストプログラムでは送信を開始してから 23msec 弱の待ち時間で送信が完了しているとしています。理屈では十分なハズですが、送信が終わってアイドル状態なことを確認する方法を見つけたいところです。
#Python
共有メモリを使う場合、読み書きが衝突しないように配慮しなければなりません。
今回は情報が一方向ですから比較的簡単ですが、よく考えないとトラブルのもとです。
一番簡単なのは、DMX512 の値の配列の共有メモリと読み書きフラグの共有メモリを使う方法です。読み書きフラグは送り側がセットし受け側がクリアします。送り側はフラグがクリアならば共有メモリに書き込んでフラグをセットし、受け側はフラグがセットしてあれば共有メモリから読み込んでフラグをクリアします。
双方の待ちを考慮しないとといけませんが、送り側が受け側のフェーズ時間の数倍でチェックをすれば遅延は1フレームです。何よりも Queue に比べ処理時間が短く情報の渋滞も起き難いことを優先しましょう。
#Python #器具の製作
今回は情報が一方向ですから比較的簡単ですが、よく考えないとトラブルのもとです。
一番簡単なのは、DMX512 の値の配列の共有メモリと読み書きフラグの共有メモリを使う方法です。読み書きフラグは送り側がセットし受け側がクリアします。送り側はフラグがクリアならば共有メモリに書き込んでフラグをセットし、受け側はフラグがセットしてあれば共有メモリから読み込んでフラグをクリアします。
双方の待ちを考慮しないとといけませんが、送り側が受け側のフェーズ時間の数倍でチェックをすれば遅延は1フレームです。何よりも Queue に比べ処理時間が短く情報の渋滞も起き難いことを優先しましょう。
#Python #器具の製作
Python での Open DMX USB の制御は8時間経過でも正常に動いている様子。
不定期に一瞬の不整合が起きているとしても確認の方法がありません。とりあえずこんなもんでいいのかな?
この後は Class 化と Thread 化をします。Thread 間通信は Queue ではなく 共有メモリを使いましょう。共有メモリは Tuple を FIFO で使うような便利なことは出来ませんが、今回は数値の配列を一方向で渡すだけですので、速度が期待できる共有メモリがいいでしょう。
下記は Thread ではなく Prosess の例題ですが、共有メモリのさわりが分かりやすい。
「Pythonでプロセス間の値の共有」
#Python #器具の製作
不定期に一瞬の不整合が起きているとしても確認の方法がありません。とりあえずこんなもんでいいのかな?
この後は Class 化と Thread 化をします。Thread 間通信は Queue ではなく 共有メモリを使いましょう。共有メモリは Tuple を FIFO で使うような便利なことは出来ませんが、今回は数値の配列を一方向で渡すだけですので、速度が期待できる共有メモリがいいでしょう。
下記は Thread ではなく Prosess の例題ですが、共有メモリのさわりが分かりやすい。
「Pythonでプロセス間の値の共有」
#Python #器具の製作
Python で Open DMX USB を動かすことに成功しました。
setbreakon と setbreakoff の挙動は予想の通りでした。
以下がテストソースです。
slot1 と slot512 を 0 から255 までカウントして終了します。
### Open DMX USB test ###
import ftd2xx as ftd
import time
if __name__ == '__main__' :
baudrate = 250000
word_length = 8
stop_bit = 2
parity = 0
purge_tx = 2
try :
d = ftd.open( 0 ) # Open first FTDI device
d.setBaudRate( baudrate )
d.setDataCharacteristics( word_length, stop_bit, parity )
d.purge( purge_tx )
channelVals = bytearray( [ 0 ] * 513 )
channelVals[ 0 ] = 0 # start code
for i in range( 256 ) :
try :
channelVals[ 1 ] = i
channelVals[ 512 ] = i
channelbytes = bytes( channelVals )
# Send Slot
cstart = time.perf_counter_ns( )
d.write( channelbytes )
while time.perf_counter_ns( ) - cstart < 22800000 :
pass
# Break Time
d.setBreakOn( )
cstart = time.perf_counter_ns( )
while time.perf_counter_ns( ) - cstart < 192000 :
pass
# Mark After Break
d.setBreakOff( )
cstart = time.perf_counter_ns( )
while time.perf_counter_ns( ) - cstart < 12000 :
pass
# Press Ctl+C to Exit
except KeyboardInterrupt :
break
d.close( )
except :
print( 'No Device' )
time.sleep() は求める精度に足りないので time.perf_counter_ns() を用いています。
0 から 255 のカウントが5.9秒強で終わるので 43fps くらい。ほぼ規格最大値です。
本当にコレでいいのかわからんけど、モヤモヤしてたのがスッキリした。
#Python #器具の製作
setbreakon と setbreakoff の挙動は予想の通りでした。
以下がテストソースです。
slot1 と slot512 を 0 から255 までカウントして終了します。
### Open DMX USB test ###
import ftd2xx as ftd
import time
if __name__ == '__main__' :
baudrate = 250000
word_length = 8
stop_bit = 2
parity = 0
purge_tx = 2
try :
d = ftd.open( 0 ) # Open first FTDI device
d.setBaudRate( baudrate )
d.setDataCharacteristics( word_length, stop_bit, parity )
d.purge( purge_tx )
channelVals = bytearray( [ 0 ] * 513 )
channelVals[ 0 ] = 0 # start code
for i in range( 256 ) :
try :
channelVals[ 1 ] = i
channelVals[ 512 ] = i
channelbytes = bytes( channelVals )
# Send Slot
cstart = time.perf_counter_ns( )
d.write( channelbytes )
while time.perf_counter_ns( ) - cstart < 22800000 :
pass
# Break Time
d.setBreakOn( )
cstart = time.perf_counter_ns( )
while time.perf_counter_ns( ) - cstart < 192000 :
pass
# Mark After Break
d.setBreakOff( )
cstart = time.perf_counter_ns( )
while time.perf_counter_ns( ) - cstart < 12000 :
pass
# Press Ctl+C to Exit
except KeyboardInterrupt :
break
d.close( )
except :
print( 'No Device' )
time.sleep() は求める精度に足りないので time.perf_counter_ns() を用いています。
0 から 255 のカウントが5.9秒強で終わるので 43fps くらい。ほぼ規格最大値です。
本当にコレでいいのかわからんけど、モヤモヤしてたのがスッキリした。
#Python #器具の製作
Open DMX USB の BreakTime について考えていたところ PIC の BreakTime についてもアイデアが出ました。
拡張ミッドレンジPIC16系の EUSART には Break 機能があります。ただし、11bit分の L を出力して StopBit(H) を出すまでが一連の動作なので2回繰り返しても DMX512 の BreakTime にはなりません。今は I/O ピンをプルダウンしておき、入出力設定(TRIS)を Input(Hi-Z) にしてから捨て送信をすることで BreakTime を作っています。
本題です。DMX512 の BreakTime は 最小 88usec ですから 250kbps なら 22bit 分の連続した L を出力すれば成立します。PIC16系の EUSART の Break が DMX512 の BreakTime に使えないのはこれが理由ですが、BaudRate を変更した Break を出力したらよくね?ってのが今回のアイデアです。手段を問わず、L 送信が 88usec 以上ならいいのです。私の理解が間違っていなけば、アイドル時なら BaudRate をバイト送信毎に変更しても EUSART は正しく動くハズです。単純計算なら BaudRate を半分にすれば規格値が出ます。現状でも BaudRate の調整だけで 1/50 くらいには出来ますから十分な BreakTime を作れると思われます。もちろん、BaudRate を 1/3 以下にして Break ではなく 0x00 を通常出力しても同じことです。こちらの方が汎用性が高いかも。受信も併用する構成ではNGですけどね。
この方法が成立すればプルダウン抵抗は不要です。たった一つの抵抗ですが、部品を減らすことは絶対の正義ですので検討する価値はありそうです。
#PIC #器具の製作
拡張ミッドレンジPIC16系の EUSART には Break 機能があります。ただし、11bit分の L を出力して StopBit(H) を出すまでが一連の動作なので2回繰り返しても DMX512 の BreakTime にはなりません。今は I/O ピンをプルダウンしておき、入出力設定(TRIS)を Input(Hi-Z) にしてから捨て送信をすることで BreakTime を作っています。
本題です。DMX512 の BreakTime は 最小 88usec ですから 250kbps なら 22bit 分の連続した L を出力すれば成立します。PIC16系の EUSART の Break が DMX512 の BreakTime に使えないのはこれが理由ですが、BaudRate を変更した Break を出力したらよくね?ってのが今回のアイデアです。手段を問わず、L 送信が 88usec 以上ならいいのです。私の理解が間違っていなけば、アイドル時なら BaudRate をバイト送信毎に変更しても EUSART は正しく動くハズです。単純計算なら BaudRate を半分にすれば規格値が出ます。現状でも BaudRate の調整だけで 1/50 くらいには出来ますから十分な BreakTime を作れると思われます。もちろん、BaudRate を 1/3 以下にして Break ではなく 0x00 を通常出力しても同じことです。こちらの方が汎用性が高いかも。受信も併用する構成ではNGですけどね。
この方法が成立すればプルダウン抵抗は不要です。たった一つの抵抗ですが、部品を減らすことは絶対の正義ですので検討する価値はありそうです。
#PIC #器具の製作