2025年1月17日金曜日

デスクトップPCをraspi経由で電源On

 PCの電源Onは、USB、内部タイマー、キーボード等々いろいろあるけれど、スリープ状態にするため、夜間勝手にアップデートなどでOnなるのも気になるので、完全にraspiで操作できるようにしてみた。

 PCの電源は、導通でOnなので、例によってトランジスタ2sc1815を使った。raspiのGPIOは出力が3.3Vで、前回ブルーレイな場合と同じ回路(raspiのGPIOからトランジスタ経由でPCスイッチへ)にしてみたらうまくいった。最初、マザボピンの分岐コネクタに手持ちのピンでつないだが、接触不良起こしやすいようだったので、はんだ付けにする。PCの余分な穴にDC電源用のソケットをグルーガンで固定して、raspiとの接続ケーブルを取り外しできるようにした。(raspi側にも同様にソケットをつける。)

2025年1月14日火曜日

極限の計算のコツ

ルベーグ積分理論と計算手法P152 あたりで、ちょっとした極限の計算が分からない。最近は、どうにも解決できそうにないときChatGPTに聞くことにしている。

 1<α<3   lim x→0   (sinyx-yx/(1+x^2))/αx^α が、さらっと0になることが書いてあるが、理由がわからなかった。

 こういうときは、いろいろ展開を使うといいらしい。

   sin yx = sin0 +yx*cos0 -(yx)^2*sin0/2! -(yx)^3*cos0/3!.....

        =yx-(yx)^3/6   ①

       1/(1+x^2)=1+(-x^2)+(-x^2)^2+(-x^2)^3+.....

        なので  yx/(1+x^2)=yx(1-x^2+x^4...)=yx-yx^3+yx^5.....  ②

   与式=(①-②)/αx^α=(y-y^3/6)x^3... /αx^α だが

     α<3より  3-α>0 で x→0なら  確かに x^(3-α) → 0がいえるようだ。(最初、ChatGPTも途中の計算間違っていたので、再度、確認したら正しい説明をしてくれた。やはり、ChatGPTにとっても少し難しくなるとミスもしやすくなるんだろうか?)

 学生時代にこういった勉強も多少はやったはずだけど、ほとんど記憶に残っていない、やはり使わないと忘れてしまうようです。


2025年1月13日月曜日

raspiで秋月のSSR操作

 raspiにSSRを組み合わせてタイムスイッチつくってみた。

秋月電子のSSRキット(ゼロクロス、25A)を使った。100Vなので絶縁には細心の注意が必要。たまたま、先日、分解廃棄したDVDレコーダの中からヒートシンクを取り出していたので、早速活用。

フォトカプラを使っているようで、入力で15mmA消費とあったので、raspiのGPIOでも許容範囲であり、そのままつなげている。

ChatGPTに助けてもらい、以下のようなスクリプトを使ってうまく動作させることができた。(rapiでは、OSの中にすでに以下のようなスクリプトが使える環境があるらしい)

*****ssr_control.sh**********
#!/bin/bash
GPIO_PIN=3  # GPIO3
if [ ! -d /sys/class/gpio/gpio$GPIO_PIN ]; then
    echo "$GPIO_PIN" > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio$GPIO_PIN/direction
fi
if [ "$1" == "on" ]; then
    echo "1" > /sys/class/gpio/gpio$GPIO_PIN/value
elif [ "$1" == "off" ]; then
    echo "0" > /sys/class/gpio/gpio$GPIO_PIN/value
else
    echo "Usage: $0 {on|off}"
    exit 1
fi

cronを設定すれば、タイムスイッチとして使える
30 5 * * * cd /home/pi && ./ssr_control.sh on
30 6 * * * cd /home/pi && ./ssr_control.sh off

2025年1月11日土曜日

PIC16F628AでUART for Dfplayer(備忘録)

古い型のPICはDfplayerとのUART通信の資料が少なく苦労した。
arduino系と違ってPICはよりハードに近いため、通信のタイミングなどより細かい調整が必要だとわかった。外部発振子が必要だという情報もあったが、内部発振でも可能なような気もしたので、少し頑張ってみた。

確認したこと:各ポートの入力、出力の設定(TRISA,TRISB)、 内蔵発振4MHzが使えること(#define _XTAL_FREQ 4000000と PCON   = 0b00001000)、UART関連設定(TXSTA,RCSTA) Config系(FOSC = INTOSCCLKで内蔵発振を指定) SPBRG=25(4MHzと9600Bps、非同期、ハイスピードなどの条件から計算できることが、データシートに書かれている)
ここまでは、自力でなんとかできたが、問題は、UARTの送信関数

最初は
void dfply(char cmd, char parameter) {
    while (TXIF == 0);
    TXREG = 0x7E;
  ...........
としたが、これだと、データが完全に送信しないうちに次を送ろうとしてだめらしい。ChatGPTから、以下の方法を教えてもらい、試したらうまくいった。
void dfply(char cmd, char parameter) {
     while (!TXIF); 
    TXREG = 0x7E;  
    while (!TRMT);
  ....    
   
 以下のようなコードでフォルダ、ファイル番号をスイッチ長押しでカウントして取得し、Mp3を指定して再生することはうまくできた。確認のため、フォルダやファイル番号をモールス信号をLEDで表示するようにした。 

2025年1月8日水曜日

ルベーグ積分 理論と計算手法 P150

 P150で「  t ∈ R|Z で、Γ(t)Γ(1-t)sinπtが周期1である」の理由が省略されていたので、気になり、考えてみた。
Γ(n+t)=(n-1+t)Γ(n-1+t)=.....=(n-1+t).....tΓ(t)    ①
{1-(n+t)}Γ(1-(n+t)) = Γ(1- {(n-1)+t})
[1-{(n-1)+t}]Γ(1-{(n-1)+t}) =  Γ(1- {(n-2)+t})
......
{1-(1+t)}Γ(1-(1+t)) = Γ(1-t)     
これより、 Γ(1-t)={1-(n+t)}.....{1-(1+t)}Γ(1-(n+t)) ②
①、②より
Γ(n+t)Γ(1-(n+t))=(n-1+t).....tΓ(t)×Γ(1-t)/{(1-(n+t)).....(1-(1+t))}
=(-1)^n  Γ(t)Γ(1-t)
ここで  sinπ(n+t)=(-1)^n sin πtなので
Γ(n+t)Γ(1-(n+t))sinπ(n+t)=(-1)^n  Γ(t)Γ(1-t)  (-1)^n sinπt
=(-1)^2n  Γ(t)Γ(1-t) sin πt = Γ(t)Γ(1-t) sin πt  n∈Zなら これより、周期1を示しているだろうと、考えた。
*筆者も、このあたりの内容について「ガンマ関数にまつわる古典解析の醍醐味を楽しむとよいだろう」と述べている。ガンマ関数は、うまくできていると思う。

2025年1月7日火曜日

室内室外温度計修理

 長く使っていた温度計が突然壊れた。最初表示されないので、電池接触かと思い、確認したら液漏れしかけた電池があったので、交換。それでもだめなので、接点復活材を使う。今度は表示されたが、操作ボタンが反応しない。操作ボタンの接触不良を疑い、裏ブタを外して、接点復活材を使う。これで、ようやく使えるようになった。電池で使うようなものは、ほとんど酸化被膜が原因の接触不良が多いので、部品交換せずに修理できるようだ。

 便利なものがあれば、それなりに故障もあるので、メンテナンスで手間はかかる。買い替えよりは、修理のほうが、環境にもやさしいかもしれない。



2025年1月6日月曜日

IRF510リニアアンプ回路をLTSpiceで解析(備忘録)

 これまで、回路はQucsを使ってきたが、少し部品数が多くなると計算に時間がかかるので、LTspiceにしてみたら、使いやすくしかも速度もだいぶ早くなった。

<使い方>
・トランスはコイルをL1 L2を2つ並べ、インダクタンスを設定したら、テキストでK1 L1 L2 1のようにL1 L2の関連にK1等のラベルをつけて、関連づける。
・回路内で変数を使いたいときも .param r=3Kなどのように設定ができる。{}で囲んだ中に式を入れる。