2026年03月19日

ラズピコでLCDに文字を表示させたい

今回は、ラズピコを使って液晶ディスプレイ (LCD) に任意の文字列を表示
させてみただけの記事です。


HD44780Dsply_001.jpg

使用したLCDは、80~90年代にヤマハLM楽器に多用されていた16×2行の
バックライトなしLCDです。以前 REX50 のLCDをバックライト付きに改造
した時に外したやつ。ずっと用途もなく手元に転がっていたので、ちょっと
遊びますか。

※赤字は今回使うピンです。

HD44780.jpg

裏面には2つのチップが載っていますね。

HD44780A00
Dot Matrix Liquid Crystal Display Controller/Driver
HD44100H
LCD Driver with 40-channel Outputs

HD44780はこの時代の標準的なドライバとしてLCDに多用されていました。
今でも互換品が秋月電子などで購入できます

HD44780Chrctr.png

HD44780 のROMコードは A00 なので日本市場向けのチップで、英数記号
以外にカタカナやギリシャ文字、千 万 円などの記号も収録されています。

キャラクタ表は上位4ビット/下位4ビットのマトリクスになっていますので、
該当する文字の2進を16進に変換して組み合わせるだけです。
例えば S という文字なら上位 0101 (05H)・下位 0011 (03H)なので、組み
合わせて 53H 、プログラム内で 0x53 と指定します。

HD44780Dsply_02.jpg

ラズピコとの結線はこのようにしました。今回は上位4ビットのみ使うので、
下位4ビット(D0~D3 / 7~10ピン)は未接続です。
14ピンが1列のDX7用と違い、端子が2列になっておりこのままではブレボに
挿せないので、配線を引き出してピンヘッダをハンダ付け。
コントラスト用抵抗はVDD側4.7kΩ、VSS側680Ωで5Vを分圧し、0.63Vを
LCDの3ピンに。

HD44780Dsply_03.jpg

接続完了。いつものように microPython でプログラムを書き、Thonnyで
ラズピコに転送して実行させます。


HD44780Dsply_04.jpg

当ブログのタイトル Synthesized Malfunction を2行に分けて、それぞれ
左詰めと右詰めにして表示。問題なく表示されました。

HD44780Dsply_05.jpg

カタカナも表示できました。

HD44780Dsply_06.jpg

1行にまとめ、2行目には右詰めで顔文字も表示。

Yukkuri.txt

プログラムはこんな感じです(別タブ表示)。変数の定義やLCDの初期化等を
行ってから、# Main Process 部分で表示したい文字列を転送しています。

ぶっちゃけ文字のコードとキャラクタの対応を調べるのが億劫だったので、
適当なコードを指定してそこから希望のキャラが出るまで足したり引いたり
して指定しました(笑)。


結構簡単に出来るので、例えばラズピコのボード上にある温度センサからの
温度を拾って表示するとか、Wi-Fi付きのラズピコならRTCモジュールと組み
合わせ、NTPサーバから時刻を拾って来る事で、正確なデジタル時計などが
作れるかも知れませんね。

秋月で売られている20×4行のLCDでも、多分同じように制御できるかと。


簡単なプログラムで動かせるので、結構楽しい。



posted by ゆう at 2026年03月19日| Comment(0) | ラズピコ | このブログの読者になる | 更新情報をチェックする

2026年03月05日

Android オシロスコープ Scoppy を試す

今回は、ラズピコとAndroid用アプリ Scoppy を使ったオシロスコープを
試してみるだけの記事です。なかなか良いと評判らしいので。

-必要な物-
・Android 6.0 以上のスマヒョ
・Raspberry Pi Pico
・ラズピコをPCに繋ぐUSBケーブル
・抵抗 1kΩ×2、100kΩ×1
・DMM用プローブ 赤・黒 各1本


まずソフトウェア関係の作業をひと通り済ませますか。

1:Android スマヒョに Scoppy をインストール。

2:ここ からラズピコ用フラッシュメモリをリセットする .uf2 ファイルを
 ダウンロード(ページを開き Reset flash memory の所の UF2 file と
 書かれた部分のリンクをクリックすると落ちて来ます)。

3:ここ からScoppyのラズピコ用ファームウェア .uf2 ファイルを入手。
 Firmware for Raspberry Pi Pico and Pico W
 Pico: scoppy-pico-v18.uf2 ←普通のラズピコ用
 Pico W: scoppy-picow-v18.uf2 ←Wi-fi付きラズピコ用

 Firmware for Raspberry Pi Pico 2 and Pico 2 W
 Pico 2: scoppy-pico2-v19.uf2 ←普通のラズピコ2
 Pico 2 W: scoppy-pico2w-v19.uf2 ←Wi-fi付きラズピコ2

 となっているので、普通のラズピコなら一番上をダウンロード。

4:ラズピコの BOOTSEL ボタンを押しながらPCに接続すると、自動的に
 エクスプローラが開きます。

5:そこへ 2:でDLしたリセット用uf2ファイルをD&D。フラッシュメモリの
 リセットが行われ、10秒程で再度エクスプローラが開きます。

6:そこへ3:でDLしたファームウェア uf2 ファイルをD&D。

7:ラズピコのLEDが点滅するようになったら完了。


ソフトウェアの準備はこれで完了です。次にラズピコに配線します。必要な
ものは抵抗3本(1kΩ×2、100kΩ×1)だけ。

Scoppy_00.png

31ピン GP26 に100kΩ
36ピン 3V3(OUT) に1kΩ
38ピン GND に1kΩ

と接続し、2本の1kΩの反対の足どうしを接続します。100kΩの足が測定用
プローブの+、1kΩの足が測定用プローブのマイナスになります。

あとはスマヒョ側で Scoppy のアプリを立ち上げ、USB端子にラズピコを接続。

Scoppy_01.jpg

自分は接続用にUSB Type-A→Type-C変換アダプタを使いました。

接続すると「アクセスを許可しますか?」と聞かれるので、許可すれば完了。

Scoppy_05.png

このような画面になるはず。ラズピコの測定用プローブを測りたい対象へと
接続してやれば、波形が表示されます。ここでは10kHzの矩形波を計測して
います。


Scoppy_02.jpg

動作させていますが、問題ないようです。

いつものハンディオシロと違って、時間幅や電圧幅などが画面をピンチする
だけで変更できるのは楽でいいですね~。
自分の泥スマヒョは性能が低い方ですが、それでも特にカクついたりする事も
なく動いています。

信号源でデューティ比を可変すると、すぐに反映されますね。

Scoppy_03.jpg

周波数もほぼ合っています(ハンディオシロは上手く周波数を拾えていない
みたいですが…)。


Scoppy_04.jpg

デューティ比もハンディオシロと合ってますね。


お~こりゃハンディオシロより見やすいし操作もしやすくて便利だわい、と
思ったのですが…。残念ながら性能はあまり宜しくないようです。

まず配線を見て勘の良い方はお分かりかと思いますが、マイナス側プローブ
が3.3VとGNDを分圧した1.65Vになっています。これは恐らくAC計測にも
対応する為だと思われます。
そして31ピン GP26 は最大3.3Vまでしか入力出来ません。つまりVP-P 3.3V
までしか計測出来ないという事です。

最初のアプリの画像でも…。

Scoppy_05b.png

この時は信号源に+5Vの矩形波を使っているのに、赤枠部分の最大電圧は
1.62Vと表示されています。±1.65V以上の電圧は計測出来ていません。

ラズピコのADCは分解能が12-bitの4,096段階、3.3÷4,096=0.00080566...
約806μV単位での計測になります。

サンプリング周波数も500ksps(Kilo Sample Per Second)なので最大でも
250kHz程度までしか測定出来ません。実際には150kHzくらいでも波形が
正常に表示されなくなります。


という訳で、う~ん…これを使うのはせいぜいラインレベルの音声信号とか
それくらいですかね。オーディオ用等。100kΩを分圧して丁度1/10にする
事で、最大33V(±16.5V)位まで使えるようになるかも知れませんが。
自分が普段使っているハンディオシロなら5MHz以上計測出来るので、電子
工作等に使うのはちょっと厳しいな。


★おまけ

昨日の自作 IH も少しいじってみました。入り口のインダクタを交換したら
若干パワーダウンした気がするので、幾つかインダクタを製作してこれらを
取っかえ引っかえして、どれが一番パワーが出るかを調査。
但し高周波の出力は測れないので、単純に最も消費電流の大きいもの=最も
出力の大きいもの、としました。

やっぱり太い銅線を手巻きするのは苦行…。

NewIH_11.jpg

すると左端にある紅白巻き線のインダクタが5.9A、それ以外は5.5~5.8A
だったので、紅白のインダクタを入り口コイルに決定。


とは言え、どれもそう大きくは変わらないですね。市販のZVS回路のような
Φ3mmくらいの極太巻き線+巨大フェライトコアなら明確な差が出そうです
が、今回はΦ1~1.2mmで試していますので。

大きなインダクタが手に入ったら、また試してみたい所。



posted by ゆう at 2026年03月05日| Comment(0) | ラズピコ | このブログの読者になる | 更新情報をチェックする

2026年02月04日

ラズピコで PC-98 起動音「ピポッ」を再現

2月になりましたな。つい先日正月だったのに…(また言ってる)。DTMerの
皆さまにおかれましては、冬の全裸DTMが捗っておられる事とお慶び申し
上げます。


先日から作っている回路が今ひとつ上手く動かないので、今回はラズピコで
ちょっとしたものを作ってみました。ナイト2000 スキャナの回路を作って
満足し放置気味だったのでね…。
以前ロジックICで PC-98ピポ回路 なるものを作りましたが、それを今度は
Raspberry Pi Pico、ラズピコで作ろうかと。

ロジックICだとかなり複雑になりましたが、ラズピコのPWMを使えば至極
簡単な構成で作れます。が…自分はmicroPythonが未だ良く分からないので、
プログラムはGrokさんに丸投げ。

●可変抵抗の値を読んで鳴動速度を可変出来る
●ラズピコの電源を入れて1.5秒後に「ピポッ」を1回鳴らす
●「ピ」は2kHz、「ポ」は1kHz、デューティ比50%
●最初に「ピポッ」を鳴らした後は待機状態になり、トリガで再度鳴動
●鳴動している間はトリガを受け付けない

以上の条件でプログラムを組んでもらいました。可変抵抗で鳴動間隔を変更
しつつトリガを受けたら2kHz/1kHzを鳴らす 程度のプログラムはこれまで
やって来た事の応用で出来るものの、鳴動している間の再トリガ禁止は良く
分からなかったので。


RasPico98Pipo01NoVol.png

ラズピコの回路図はこんな感じにしました。

最初は出力(1ピン GP0)を直接圧電ブザーに繋いでいたのですが、やっぱり
微妙に音量が小さく楽しめないので、トランジスタで簡単に増幅する事に。
ただの矩形波は増幅が楽で良いっす。トランジスタはNPNなら何でもおk。
但し増幅すると圧電ブザーは鳴らなくなるので、スピーカ向け。音量調整が
必要な時は、1kΩとトランジスタの B の間に可変抵抗を入れてやれば良い
でしょう。

RasPico98Pipo01Vol.png

こんな感じに。

RasPico98Pipo02.jpg

音量調整なしVer.完成~。それっぽくする為に、PC-98の電源ランプと同じ
平型の緑LEDを付けておきました。

2ピン(GP1)-GND間には一応10kΩを入れていますが、プログラム上で内部
プルダウン抵抗を有効にしているので、多分入れなくても問題ありません。
また、トリガを受けるとすぐ鳴動ルーチンに入り、その間は再トリガを受け
付けないので、チャタリング対策も不要かと。


あとは、ラズピコをPCのUSBに接続して以下のテキストファイルの内容を
Thonny にコピペ、main.py というファイル名でラズピコに保存すればおk。

RasPico98Pipo.txt
※Seesaaブログでは行頭のスペースが正常に表示されないので、試したい
方はお手数ですが別タブに表示された内容をコピペするか、DLして下さい。


ラズピコをUSBに接続して通電されると、自動的にプログラムが実行される
ようになっているので、通電から1.5秒後 (PC-98のBIOS起動と内蔵HDDの
スピンアップ時間をシミュレート)「ピポッ」と鳴ります。

一部の実機は「ピポッ」の1秒くらい後に小さく「プツッ」とも鳴りまして、
そこまで再現するかどうか悩んだんですが、今回は無しにしました。


ボタンを押すごとに何度でも「ピポッ」を楽しむ事が出来ます。PC内部の
+5V取れる箇所に40ピン(VBUS)と38ピン(GND)を接続しておけば、どんな
PCでも電源ONした時に「ピポッ」と鳴らす事が出来ますね。
リセット信号が取れるのなら、2ピン(GP1)に入れてやる事で再起動時にも
鳴らす事は出来ると思います(最大+3.3Vである点に留意。またこの場合は
トリガを受けると即時に鳴ります)。


動画でもどうぞ(34秒)。



白い箱はスピーカの音を大きくする為のエンクロージャ。

うん、やっぱり正確に2kHz/1kHzが生成されているので、ロジックIC使用の
回路のように音痴になったりしませんね。

可変抵抗を最小にすると、CPUアクセラレータ搭載時のような「ピヨッ」と
ごく短い間隔で鳴り、最大だと「ピーポーッ」とクロックを落とした時の
ように長めに鳴ります。この辺はお好みでどうぞ。

通電してから最初の「ピポッ」までの時間は、60行目の
sleep(1.5)
の値で変更できます。プログラムを改変して32ピン(GP27)を使って別の可変
抵抗を接続し、この値を可変出来るようにすれば鳴るまでの間隔も変えられ
ますが、そこまでの必要はないかな。

可変抵抗で可変出来るよりも更にもっと短く(長く)したい場合は、26行目の
return 0.02 + (0.4 - 0.05) * ratio # 線形補間
の値を変更します。
0.02 が可変抵抗 最小時、0.4 が最大時の待ち時間です。

PICマイコンでも出来るのでしょうが、やっぱり書き込みに専用のライタが
不要というのは大きいですね。USBで繋ぐだけで済みますから。
ラズピコより更に小さいマイコンもたくさん出回っているので、PCへ内蔵
させるならそういう小型マイコンを選ぶのも良いでしょう。ラズピコも十分
小型ではありますが。


良く出来たので、ラズピコもう1個買ってDELLのPCに載せようかしら。



posted by ゆう at 2026年02月04日| Comment(0) | ラズピコ | このブログの読者になる | 更新情報をチェックする

2025年11月12日

ラズピコでナイトライダー ナイト2000のスキャナ作り #3

これまでRaspberry Pi Picoでナイト2000のスキャナを再現して来ました
が、どうもプログラムが無駄に長い気がしてあちこちの文献を漁っては、
もっと簡潔にまとめられないか試行錯誤しておりました。

しかし実際には上手く動作させられず思い通りの動きにならなかったので、
ここはいっそGrokさんに頼ってみようかとプログラムをぶん投げてみた所、
いともあっさり簡潔かつ完璧に作り直してくれたので、これをラズピコへ
転送して完成とします。

RPKittScanner_06.png

回路はこれまでと同じです。31 ADC0/33 GND/35 ADC_VREFに10kΩの
可変抵抗を付け、往復速度が可変出来るようになっていますが、最大の時に
視認出来ない速度で往復してしまうので、その辺はプログラムを変更すると
良いかと( (Potvalue / 16384) * 0.1 の辺り)。

※seesaaブログは行頭のスペースが削除されてしまうため、「 」で
入れているので、もしかしたらインデントがおかしいかも知れません。適宜
修正してください。テキストファイルはこちら

from machine import ADC, Pin, PWM
from time import sleep

# LEDの配列を作成
leds = [PWM(Pin(i)) for i in range(8)]
for led in leds:
  led.freq(1000) # LED周波数 1kHz

Speedpot = ADC(Pin(26))
value1 = 65535 # フル点灯
value2 = 20000
value3 = 8000
value4 = 3000
value5 = 1000 # 最低残光レベル(通過後オフ)
value0 = 0
LightUp = 0.05
LightDn = 0.05

# FullyLightup: すべてのLEDを同時に点灯・消灯(滑らかに拡張)
def set_all_leds(value):
  for led in leds:
    led.duty_u16(value)

# アップ: 0からvalue1まで10ステップで滑らかに増加
num_up_steps = 10
for step in range(num_up_steps + 1):
  v = int(value1 * step / num_up_steps)
  set_all_leds(v)
  sleep(LightUp)
sleep(0.1) # 最大輝度で待機

# ダウン: value1から0まで8ステップで滑らかに減少
num_down_steps = 8
for step in range(num_down_steps + 1):
  v = int(value1 * (num_down_steps - step) / num_down_steps)
  set_all_leds(v)
  sleep(LightDn)
sleep(0.2) # 消灯後待機

# レベル移行マップ(v5後オフで完全消灯)
level_map = {
  value1: value2,
  value2: value3,
  value3: value4,
  value4: value5,
  value5: value0 # 尾通過後オフ
}

# メインループ: 状態を逐次更新して滑らかな往復を実現
led_values = [value0] * 8 # 現在のLED明るさ
head_pos = 0 # ヘッド位置(LED1=0, LED8=7)
direction = 1 # 移動方向(右=1, 左=-1)

while True:
  Potvalue = Speedpot.read_u16()
  Interval = (Potvalue / 16384) * 0.1

# すべてのLEDをdim(移行)
new_values = [level_map.get(v, value0) for v in led_values]

# 新しいヘッドをフル点灯
new_values[head_pos] = value1

# LEDに適用
for i in range(8):
  leds[i].duty_u16(new_values[i])

  sleep(Interval)

# 状態更新
  led_values = new_values

# ヘッド移動(端で方向反転)
next_pos = head_pos + direction
  if next_pos < 0 or next_pos > 7:
    direction = -direction
    next_pos = head_pos + direction
  head_pos = next_pos



作り直してもらうにあたって、以下の点を修正しました。

・電源ON時の全点灯/全消灯をもっと滑らかに
・往復時の尾(残光)を4つ→5つに

かなり実物の点灯に近くなったと思います。いや~プログラムが難し過ぎて
簡潔にまとめるのを若干諦めかけていたんですが、Grokさん凄いな!

何の注釈もないただの命令の羅列で「LEDを往復点灯させるプログラム」と
だけ書いて渡したのに、可変抵抗で速度が変わるとか全点灯するとか細かな
部分まで解析して、あっという間にまとめ上げてくれるんだから。

まぁ、自分の知識は全く増えないんですけどね…😏

さすがに1回では無理で、提案されたプログラムをThonnyに貼り付けては
試し、おかしな所を指摘するという形で何度か作り直してもらっていますが、
それでもここまでの形になるまで30分もかからなかったんじゃないかな。


という訳で、ラズパイでナイト2000のスキャナ作りはこれで完成って事に
しようと思います。多分Grok使わなかったら、何年も完成しなかったかも。



完成形は動画でどうぞ(26秒 音声なし)。今回は速度可変はせず、ほど良い
速度で往復させています。かなりそれっぽくなったのではないでしょーか。
良い感じです。

電球バージョンとの違いは残光でしょうか。電球の場合はゆっくり往復の時
残光は短くなり、速く往復では残光が長くなります。しかしこのPWM制御の
場合は必ず残光が5個になるので、ゆっくり動かしていると若干不自然では
あります。

ラズピコ本体で¥1,000ほど、LEDとトランジスタ、抵抗を各8個揃えても
¥1,000もしないでしょうから、¥2,000弱で作れます。LEDをアンバー色に
交換してK.A.R.R.仕様にするのも楽しいですね。

違反になるので付けませんが、これ付けて走ってみたいなぁ~…。ちなみに
公道を走行する車両の場合、すぐに点灯出来る状態になっているとアウト
です。
走行中だけスイッチを切っていればおkという話ではなく、光源となるもの
(LEDや電球)を抜いた状態にしてあり、そもそも配線が繋がっていないとか、
そこまでしないと車検にも通りません。

マイケル・ナイト気分で走ってみたい…。



posted by ゆう at 2025年11月12日| Comment(0) | ラズピコ | このブログの読者になる | 更新情報をチェックする

2025年11月08日

ラズピコでナイトライダー ナイト2000のスキャナ作り #2

先日から作り始めたラズピコでのナイト2000スキャナ作り、もうちょっと
段階的に進めて行く予定でしたが、何となくそれっぽいものが出来上がって
しまったので、ひとまずの完成という事にしておきます。

RPKittScanner_01.jpg

回路は前回作ったものと変わりません。まぁマイコンを使った電子工作は、
プログラムがメインですからね…。

前回は8個のLEDを往復させる所まで作りました。脳内では可変抵抗を使い
往復速度の可変、電源を入れた時の全点灯、各LEDに残光を付ける、という
形で段取りを考えていたのですが、個別にやっていると訳が分からなくなり
そうな気がしたので、一気にバーっと作ってしまった訳です。

結果、プログラムは下記のようになりました(長いです)。#から始まる行は
コメントアウトです。一応分かる範囲で注釈を入れて置きました(赤字)。

from machine import ADC,Pin,PWM
from time import sleep

led1 = PWM(Pin(0)) #0~7ピンをPWM出力に設定
led2 = PWM(Pin(1))
led3 = PWM(Pin(2))
led4 = PWM(Pin(3))
led5 = PWM(Pin(4))
led6 = PWM(Pin(5))
led7 = PWM(Pin(6))
led8 = PWM(Pin(7))
led1.freq(1000) #各LEDのPWM周波数を1kHzに設定
led2.freq(1000)
led3.freq(1000)
led4.freq(1000)
led5.freq(1000)
led6.freq(1000)
led7.freq(1000)
led8.freq(1000)

Speedpot = ADC(Pin(26)) #26ピンADC0を変数Speedpotに設定


value1 = 65535 #最大輝度(デューティ比100%)
value2 = 20000 #残光高輝度(デューティ比30%)
value3 = 8000 #残光中輝度(デューティ比12%)
value4 = 3000 #残光低輝度(デューティ比4.5%)
value0 = 0 #消灯(デューティ比0%)
LightUp = 0.05 #全点灯 明るくなる間隔
LightDn = 0.2 #全点灯 暗くなる間隔

#Interval = 0.07
#Potvalue = Speedpot.read_u16()
#Interval = (Potvalue / 16384) *0.1
#print(Interval)

#FullyLightup
led1.duty_u16(value4) #電源ON時の全点灯
led2.duty_u16(value4)
led3.duty_u16(value4)
led4.duty_u16(value4)
led5.duty_u16(value4)
led6.duty_u16(value4)
led7.duty_u16(value4)
led8.duty_u16(value4)
sleep(LightUp)
led1.duty_u16(value3)
led2.duty_u16(value3)
led3.duty_u16(value3)
led4.duty_u16(value3)
led5.duty_u16(value3)
led6.duty_u16(value3)
led7.duty_u16(value3)
led8.duty_u16(value3)
sleep(LightUp)
led1.duty_u16(value2)
led2.duty_u16(value2)
led3.duty_u16(value2)
led4.duty_u16(value2)
led5.duty_u16(value2)
led6.duty_u16(value2)
led7.duty_u16(value2)
led8.duty_u16(value2)
sleep(LightUp)
led1.duty_u16(value1)
led2.duty_u16(value1)
led3.duty_u16(value1)
led4.duty_u16(value1)
led5.duty_u16(value1)
led6.duty_u16(value1)
led7.duty_u16(value1)
led8.duty_u16(value1)
sleep(0.3)

led1.duty_u16(value2) #全点灯を消灯する
led2.duty_u16(value2)
led3.duty_u16(value2)
led4.duty_u16(value2)
led5.duty_u16(value2)
led6.duty_u16(value2)
led7.duty_u16(value2)
led8.duty_u16(value2)
sleep(LightDn)
led1.duty_u16(value3)
led2.duty_u16(value3)
led3.duty_u16(value3)
led4.duty_u16(value3)
led5.duty_u16(value3)
led6.duty_u16(value3)
led7.duty_u16(value3)
led8.duty_u16(value3)
sleep(LightDn)
led1.duty_u16(value4)
led2.duty_u16(value4)
led3.duty_u16(value4)
led4.duty_u16(value4)
led5.duty_u16(value4)
led6.duty_u16(value4)
led7.duty_u16(value4)
led8.duty_u16(value4)
sleep(LightDn)
led1.duty_u16(value0)
led2.duty_u16(value0)
led3.duty_u16(value0)
led4.duty_u16(value0)
led5.duty_u16(value0)
led6.duty_u16(value0)
led7.duty_u16(value0)
led8.duty_u16(value0)

sleep(0.2)

while True:

Potvalue = Speedpot.read_u16() #可変抵抗の値を読み取ってPotvalueに入れる
Interval = (Potvalue / 16384) *0.1 # Potvalueの値を16,384で割って×0.1したものをIntervalに入れる

#Outbound #往路点灯
#LED1
led1.duty_u16(value1)
led5.duty_u16(value0)
led4.duty_u16(value4)
led3.duty_u16(value3)
led2.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led1.duty_u16(value0)

#LED2
led2.duty_u16(value1)
led1.duty_u16(value2)
led4.duty_u16(value0)
led3.duty_u16(value4)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led2.duty_u16(value0)

#LED3
led3.duty_u16(value1)
led1.duty_u16(value3)
led2.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led3.duty_u16(value0)

#LED4
led4.duty_u16(value1)
led1.duty_u16(value4)
led2.duty_u16(value3)
led3.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led4.duty_u16(value0)

#LED5
led5.duty_u16(value1)
led1.duty_u16(value0)
led2.duty_u16(value4)
led3.duty_u16(value3)
led4.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led5.duty_u16(value0)

#LED6
led6.duty_u16(value1)
led2.duty_u16(value0)
led3.duty_u16(value4)
led4.duty_u16(value3)
led5.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led6.duty_u16(value0)

#LED7
led7.duty_u16(value1)
led3.duty_u16(value0)
led4.duty_u16(value4)
led5.duty_u16(value3)
led6.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led7.duty_u16(value0)

#LED8
led8.duty_u16(value1)
led4.duty_u16(value0)
led5.duty_u16(value4)
led6.duty_u16(value3)
led7.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led8.duty_u16(value0)

#Return #復路点灯
#LED7
led7.duty_u16(value1)
led5.duty_u16(value0)
led6.duty_u16(value4)
led8.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led7.duty_u16(value0)

#LED6
led6.duty_u16(value1)
led7.duty_u16(value2)
led8.duty_u16(value3)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led6.duty_u16(value0)

#LED5
led5.duty_u16(value1)
led6.duty_u16(value2)
led7.duty_u16(value3)
led8.duty_u16(value4)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led5.duty_u16(value0)

#LED4
led4.duty_u16(value1)
led5.duty_u16(value2)
led6.duty_u16(value3)
led7.duty_u16(value4)
led8.duty_u16(value0)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led4.duty_u16(value0)

#LED3
led3.duty_u16(value1)
led7.duty_u16(value0)
led6.duty_u16(value4)
led5.duty_u16(value3)
led4.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led3.duty_u16(value0)

#LED2
led2.duty_u16(value1)
led6.duty_u16(value0)
led5.duty_u16(value4)
led4.duty_u16(value3)
led3.duty_u16(value2)
sleep(Interval)
Potvalue = Speedpot.read_u16()
Interval = (Potvalue / 16384) *0.1
led2.duty_u16(value0)


本来プログラムというのは個々の命令の機能や使い方をしっかりと把握した
上で、それらを使って組んで行くというのが常套手段なんでしょうが…。
さすがに BASIC しか学んだ事のない自分にとっては超難解なので、様々な
ブログやプログラム例を漁っては部分的に抜き出し、パラメータや用法等を
変えて上手く動くように継ぎ接ぎで作るしかありませんね。

microPython を使いこなしている人から見たら「何これ酷い🤣」と言われ
そうですが、今の自分はこれが限界です😇

while True: 以前が初期設定と電源ON時の挙動、以降が往復ループです。
LEDをひとつ点灯させるごとに毎回可変抵抗の値を読みに行っているのは、
速度変更をなるべくリアルタイムに反映するため。ループの先頭に1個だけ
だと1往復するまで速度が変わらないので、超絶ゆっくりにするとちっとも
速度が反映されずイライラします(笑)。

配列変数の使い方などまるで分からない事だらけなので、本来ならループ等
使って簡潔にまとめられそうな所を、全部バラで書いています。
この辺りはもっと勉強して、使い方を頭に叩き込まなければならないので、
それはおいおいやって行くとします。


このプログラムをラズピコに転送します。

RPKittScanner_02.png

転送時にファイル名を main.py とする事で、PCに接続してThonnyから制御
しなくても勝手にプログラムを読み込み実行してくれるので、電源さえ供給
してやればスタンドアロンで動きます。




動画にしてみました(31秒 音声なし)。

電源ON→全点灯→往復動作で速度可変、となっています。

ラズピコは一応CPUがデュアルコア 133MHzで動いているので、こんなにも
雑で力業なプログラムでも重くならず動いてくれますが、本当は残光の表現
を6段階にしたかった…(現状は4段階)。

でも、ただでさえゴチャゴチャしているのに、この上さらに残光を増やすと
手に負えなくなりそうな気がしたので、とりあえずの4段階。
自分としては、ICで作った回路のように電解コンで残光を表現した方が自然
というか、電球らしさが出ていて好みなのですが。


今後プログラム技術が身に付いたら、もっと単純化する予定~。



posted by ゆう at 2025年11月08日| Comment(0) | ラズピコ | このブログの読者になる | 更新情報をチェックする
最近の記事