Vol.882 10.Nov.2023

ベータデッキの修理 M5StickC(13)〜自作ブロック

B ベータデッキの修理

by fjk

 今やあまり見かけなくなったベータデッキですが、我が家にはまだ何台かあります。
 それらのうち、父親が残したSL-HF91Dを久しぶりに使ったところ、何とかベータテープの再生できたので、クリーニングテープを入れてヘッドクリニングを行った。そして、クリーニングテープを取り出そうとすると、テープが取り出せなくなってしまった。電源以外の他のボタンも応答しなくなった。
 そこで、以前SONYのWV-H4の修理をお願いした「ア・ファン」さんに連絡し、「修理お申し込み」をしたところ、指定の修理担当に送るようメールで指示があり、宅急便で送った。
 ア・ファンさんは、元SONY技術OBで構成されたサービス会社で、SONYのAV機器、AIBOなどのビンテージ製品の修理を専門に行っておられる会社で、全国に数カ所の工房があります。
 数日後、ア・ファンの担当者から、「キャプスタンモーター・コンデンサ・スイッチの不良と故障箇所の説明と修理見積もり」がメールで送られ、中古の販売価格と同じくらいでしたが、修理をお願いした。
 そして、10日後には修理済みのデッキが送られてきたので、早速テープを入れて見ると、再生、早送り、巻き戻し、取り出しなど、正常に動作することを確認できた。
 ベータカメラで撮影したテープや、父親や子供がテレビ録画したベータテープが沢山あるので、劣化して見れなくなる前にと、SL-HF91DにDXR160 (abc662)を繋いで、DVDにダビングを行っています。
 まだ、故障した古いデッキがあるので、修理に出そうか思案中です。今なら、修理が出来る技術者がおいでなので、お願いしてみようかな・・・。でも、とりあえずテープの再生が出来るので・・


SL-HF91D (下)とDXR160(上)

大量のベータテープ(一部)

【ぼやき】
 以前、ビデオの取り込みはGV-USB2/HQ(IOdata)をWindows10で利用していたが、しばらくぶりに使おうとしたところ、「ドライバーが見つからない」とLightCaptureが起動しなくなった(adminで実行しても・・)。メーカーのサポートから新しいドライバーをインストールすると「インストールしました」と表示されるが、デバイスマネージャーで見ると、ドライバーが見つからず、ドライバーがチャンとインストールされていないようだ。GV-USB2/HQのOS対応を確認すると、Windwos10では20H2までは保証しているが、パソコンのWindows10バージョンを確認してみると22H2となっていた。自動バージョンアップにしていたのでバージョンが上がっていた。
 最近のビデオ取り込み機器はHDMI入力となっており、古いビデオデッキのRCA出力には対応していない。まだ、原因ははっきりしないが、もう少し調べて見る必要がありそう。


M はじめての M5StickC_Plus (13) 〜自作ブロック

by fjk

 pythonスクリプトを使ってコードを記述することが多くなってきたが、UIFLOWでは自作のブロック(カスタムブロック)を作ることが出来る。
 カスタムブロックを作成するには、UIFlow Block Makerを使用する。ページにアクセスすると以下の画面が表示される。


UIFlow Block Maker画面
・グループ名: UIFlowに読み込んだ時に属するグループ名
・ブロック色: カスタムブロックの色
・ブロックの追加: add-blockでブロックが追加されAddedに表示される
・ブロック名: ブロックの定義上の名前
・ブロックの種類: ValueとExcuteがあり、Valueは結果を返す値を持つブロック
・パラメータ: nameとtypeがあり、typeはパラメータの種類で以下の4種類がある
   Label    ブロックに表示する任意の文字列
   Variable  他ブロックの値を入力するパラメータ(右が欠けたブロック)
   Number  数値を入力できるパラメータ
   String   任意の文字列を入力できるパラメータ
・BlockCode: MicroPythonコードを記述。パラメータは ${param} と記述

 画面左側に、データ等を入力すると、それに対応して右側の画面にpythonコードが表示される。
 右下の「Download」をクリックすると、作成したm5bファイルが、ダウンロードフォルダーに保存される。

【参考にしたページ】
m5stack
quiita
くさいとてつや
yamaccu

1. 「16進数に変換する」カスタムブロックを作成してみる


hexブロック作成画面

  左側に入力するだけでほぼできあがるが、見栄えを考えて赤枠の所を ”hex(” に修正した。
  ブロックの表示は変更されずそのままだが、出来上がったブロックの表示は変更されている(次図参照)。

2.出来上がったカスタムブロックを使ってみる

@CustomからOpen *.m5b fileを選び、myblock.m5bファイルを読み込む
ACustomにmyblockが追加されているので、選ぶと、作成した[hex()]ブロックが使える

hexブロック利用画面

 ※カスタムブロックを使ったm5fファイルをopenする前に、カスタムブロックを読み込んでおくこと。

3.IOデータ送信ブロックを作る
 カスタムブロックの作り方が判ったので、IOデータ用リモコンのカスタムブロックを作ってみる。
 下図はUIFLOWのBlockMaker画面で、以下の4つのブロックを作成した。

initRMT      # 初期化、RMTオブジェクト作成など
parameter: cahnnel、portNo
send_ir      # 赤外線送信基本関数
parameter: Customer、wordData
send_NEC    # NECコード送信(カスタマーコードは16ビット)
parameter: Customer、byteData
send_IODATA   # IOdataコード送信
parameter: wordCode

initRMTブロックのBlockCodeにグローバル変数および全ての関数をdef文で記述すると共にRMTオブジェクトを作成し、3つのsendブロックは定義した関数を実行するだけとした。


sendNECブロック作成画面

initRMTに記述するBlockCode(sendNEC-blk.py(zip))
# " sendNEC.py "
import esp32
import time
from machine import Pin

rmt=esp32.RMT(${channel}, pin=Pin(${portNo}), clock_div=80, carrier_freq=38000)

IODATA = 0xE880       # IOdata customer code
T = 560               # uSecond
LEADER_HIGH = 8960    # 16T
LEADER_LOW  = 4480    #  8T

def bit2time(frame: list, w_code: word) -> list:
    b_mask = 0x0001
    for i in range(16):
        if (w_code & b_mask):
            frame.extend([T, 3 * T])   # bit=1 -> 3T
        else:
            frame.extend([T, T])       # bit=0 -> T
        b_mask <<= 1
    return frame

def gen_frame(customer: word, data: word) -> list:
    p_width = [LEADER_HIGH, LEADER_LOW]
    bit2time(p_width, customer)
    bit2time(p_width, data)
    p_width.extend([T])            # stop
    return p_width

def send_ir(rmt, customer: word, data: word) -> None:
    frame = gen_frame(customer, data)
    rmt.write_pulses(frame, start = 1)
    while not (rmt.wait_done()):
        time.sleep_us(T)

def add_invert(code: byte) -> word:
    return (code + ((0xff^code)<<8))

def send_NEC(rmt, customer: word, code: byte) -> None:
    send_ir(rmt, customer, add_invert(code))

def send_IOdata(code: word) -> None:
    send_NEC(rmt, IODATA, (code>>8))
    wait_ms(43)
    send_NEC(rmt, IODATA, (0xff & code))

4.作成したカスタムブロックを使ってIOデータリモコンを作る
 下図は、abc881のIOデータリモコンを[コードを実行]ブロックを使わずに実現したもので、以下の2つのm5bファイルを事前に読み込んでおく必要がある(使用するブロックファイルが無いと、m5fファイルを読み込んでも表示されない)。なお、abc881のようにpythonファイルのダウンロードは必要ない。

  sendNEC.m5b ・・・IOdata(NEC)赤外線送信ブロック
  myBlock.m5b ・・・hex()関数ブロック

[コードを実行]を使わないで構成したIOデータリモコンBlockly(IOremote-blk.m5f

 一応、[コードを実行]ブロックを使わないでIOデータリモコンを実現できたが、pythonコードで記述すれば、もっと簡潔に記述できるところがまだ多くある。よく使うブロックとして、myBlockにカスタムブロックをもっと追加しておくのが良いかも。


※ 本レポートの参考・利用は、あくまでも自己責任でお願いします。


ベータデッキの修理 M5StickC(13)〜自作ブロック