酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

ネット情報・記事まとめ

2026年12月31日 09時27分07秒 | マイコン(ESP32・Arduino等)

このブログ上に散在している過去のまとめ記事

サーボ [ 2022年07月09日 ]  こちら
ATtiny85 [ 2024年05月16日 ] こちら
OLED [ 2024年05月14日 ]  こちら
ソーラー [ 2022年07月02日 ] こちら
IRリモコンの値 [ 2024年04月13日 ] Tinyライブラリ値こちら
アドレッサブルLED(WS2812B)[ 2024年07月08日 ] こちら
IRセンサー基盤 [ 2022/11/20 最終 ] こちら
どんどん埋もれていくので・・・


アドレッサブルLED(WS2812B)NeoPxcel 関係のまとめ

2024年12月24日 11時39分12秒 | マイコン(ESP32・Arduino等)
WS2812B、アドレッサブルLED,シリアルLED、LEDストリップ、NeoPxcel
など多彩な呼び方があるデバイスに関する おまとめ


[ 2024/7  ] アドレッサブルLEDテープ [WS2812B] 届いた
 他サイトへのリンク多数有
 WS2812FXライブラリ関係




NeoPxcel on micro:bit 習作

2024年08月27日 23時23分41秒 | マイコン(ESP32・Arduino等)


0 端っこで跳ね返るワーム こちら

1 全てのLEDのを一斉に点滅 こちら
https://makecode.microbit.org/_e2LK8CgtbWmw

1-2 一斉に点滅(カラーArray使用) こちら
https://makecode.microbit.org/_E2misDa2LAW9

2 Stripの任意部分に特定色の輝度変化する任意長の部分を作る こちら

3 流れる弾の境界でのバウンド・左右分割流れ こちら

4 左右から発射した弾が中央で交差後そのまま走り抜ける こちら
  放射状にLEDを配置し収縮(拡散)するときっと引き込まれる。
   1次元ではなく2次元(面)でやるべきか。そうなると三角関数・・・
  1次元を無理やり円錐形に貼り付け2次元化したらどうなんだろうか。
   多数制御はmicro:bitではちょっと制御が難しそう。やはりarduinoだよな。

5 マイクから拾った音(V2)でピークレベルメータもどき こちら

6 中央に向けてレインボーパターンが流れ込む(range2個を使う基礎パーツの応用) こちら
 多分だが、Rangeを多数設けても同じように動くだろう。
 ただしレインボーパターンのセットブロックは値が昇順でないとBUGって全赤になります。

7 ホタル

==============
先日、MS社のアプデでEdgeの設定が消されてMakeCodeで作ってきたプログラム(へのリンク)が全部消された。
なので、以前は使用を最低限にとどめていたが、現在は片っ端からShareしてクラウド上へ保存させている。
Win11への切り捨て移行とかムカつくことが多いし。


micro:bit NeoPxcel を自身で動かす前にHSL色空間を勉強

2024年08月27日 17時53分47秒 | マイコン(ESP32・Arduino等)


・NeoPxcelの色をmicro:bitから扱うにはライブラリを使用する。
・色指定はRGBではなくHSL色空間を使うのが直感的で合理的
・( [0..359],100,32)(色相,彩度,輝度)辺りが見た目に適切かな。

 

・和色大辞典 こちら 重ね方は こちら
・配色大図鑑 パステルはこちら

カラーピッカーは こちら 
(画面上部のリンクからいろんなサービスに飛べます)
この方、いろんなサービスを無料で提供されています こちら

micro:bit実験プログラムは こちら 

==============
以下はこれに至った経過記事です。

昨晩の「Shiftで流れるレインボーカラー」
今回は「Range」を使ったブロックを動かすのをやってみます。
======参考サイト======
Youtubeでオサレなエフェクトを探してみた。

https://www.youtube.com/watch?v=R6SNH-d03lc
https://www.youtube.com/watch?v=vH2QmrpCJuw
https://www.youtube.com/watch?v=PHchQdvZqhk 
https://www.youtube.com/watch?v=EEgnUY8vTmU
https://www.youtube.com/watch?v=xKSfsO9PCuU
https://www.youtube.com/watch?v=3R7z-UroxjU

左右に動かすのではなく、上下に動かすほうが楽しそうだ。
重力に逆らって動くと躍動感・生命感があるように感じるのかも。

======自習======
とはいえ、先達に追いつくには・・
 Hue(色相):hue
 Sat(彩度):saturation
 Lum(輝度):Luminosity
がmicro:bitライブラリの基本となってる。
色指定、RGBしかわからんので、まずは「HSL色空間」をお勉強
以下の記事の参考はこちら からです。

色をデジタル(数値)で表すには
RGB、CMYK、HSV(HSB)、HSL(HLS) などが使われる。
(CMYKは印刷系で光の3原色ではない)
RGBを直感的に扱いやすくしたのがHSV(HSB)、HSL(HLS)

・HSV(HSB)カラーモデルは
 Hue(色相)、Saturation(彩度)、Value/Brightness(明度)の頭文字
 明度を上げるためには彩度を下げないといけない、という問題点がある。
・HSL
 HSVをより簡易的に計算できるようにしたモデル
 上記問題点を解決した。
 輝度50%が一番鮮やかな色で、輝度0%は黒、輝度100%が白
 50%を境に1つの値で明暗を制御できる

画像はリトルヒーローさんから借用(感謝)

なるほど、昨日HSLパラメータ設定が(RGBの時と違って)なんか変だなと感じたのはこれか。納得


micro:bit NeoPxcel 結線状況と電流

2024年08月27日 17時44分36秒 | マイコン(ESP32・Arduino等)
リールで1m(LEDの144個)購入したLEDテープ
同梱されていた説明書には電圧オーバーの警告紙しか入ってないので接続は慎重に。
赤色が多分+で白がー
3本ソケットが信号線と +/- なんだろうな~
中央の緑色が多分信号なんだろう。
テスターで当たってみた。
内部で赤系は結線、白と水色のGND(と思ってる)も結線されていた。
ということで、ミドリが信号線なんだろうね。
赤・茶色は3.3V、水色はGND、ミドリはmicro:bitの2番ピンへ繋ぎました。


あれこれやってる写真
今回は電源ラインは使わずmicro:bitからの給電だけで動かしている。
最高輝度にすると眩しいし給電オーバーになる。

非点灯で0.02A
明るさ4で電流:0.02A
  明るさ8:0.04~0.05A 16:0.07A)
 明るさ16の場合は、5V*0.07A=0.35A

micro:bitV2の電流Max最大値は0.3A
少々オーバーしています。
なので「明るさ8」で運用するが吉のようです。
実験の「流れる」の場合、それで十分です。




micro:bit NeoPxcel 再勉強するも・・

2024年08月26日 11時25分22秒 | マイコン(ESP32・Arduino等)
秋プラ・ゲームに向けてNeoPxcelを真面目に再勉強した。
一応144個のテープは流れ光りました。
プログラムは

が・・・

■ライブラリ設定



まずは、ライブラリのincludeから。
拡張機能でNeoPxcelを取り込む。

◯最大同時LED点灯数
 多分micro:bitV1の場合だが、最大8個同時点灯を超えるなとあった。
 明るさを落とせば増やせるだろうし、V2なら最大電力も大きくなってる。
 まあ、できるだけ専用電源を用意したほうが良いでしょうね。

◯ 基礎1 レインボーカラー&Shift/Rotate
■レインボーカラーで点灯


今回はPin2へ信号線を接続した。
電源は本来5Vらしいが3.3Vでも眩しすぎる。
1 接続端子を2、LEDカズを8、色指定にRGBを使う宣言
2 眩しいので明るさを32に
3 8個のLEDに対し「色相」を自動で割り当てさせる。
  ここで注意!「点灯する」とあるが完全に誤まり
  正しくは「設定する」!!!


 英語からしてオカシイだろ

 色相はRGB値ではなく0..360で指定する形式で、人間の感性に合っているそうだ。
4 指定したカラーのデータをStripへ転送する
  ここで初めて点灯する。 

「3」でStrip制御用の配列のカラー情報をセットし
「4」でデータ転送し、実際に発光させる
という流れ。

エミュレータのストリップ上にカーソルを合わせると拡大表示されました。
写真撮影するもなかなか思ったような色味で撮影できません。
============================
  基礎 簡単便利機能
============================


まずは簡単に高度な機能が使えるブロックの実習

■設定したカラー配列をシフトする

「Stripに設定された色を1個分ずらす」は、遠くに向かってデータをShiftさせる。
Shiftされた後には”000000”が入るんだろう、消灯する。
実行すると、赤色を先頭とするブロックが200msごとに移動して消えていく。

■色の回転(ローテート)

「Stripに設定されている色を1個分ずらす(ひとまわり)」
上記例では8回まわすので、初期状態に戻ります。
「ひとまわり」が溢れた色を先頭に持ってくる、を意味してる。
アセンブラで言う「Rotete」命令、日本語なら「回転させる」

ここまでのプログラムは こちら

■棒グラフを表示する

根本が「青色」先っぽが「赤」で数字を表示する。
右HCが100/255を表示させたもので、約半分の4Ditは点灯しない。
特段の計算等なしでもそれなりの表示が可能

■HSV色空間で個別に色を指定する

 Hue(色相):hue
 Sat(彩度):saturation
 Lum(輝度):Luminosity
を個別指定できる、らしい。
[ 127,32,32 ]でライムグリーンになりました。
(この時点でHSLが全く解っていませんでした)

■特定配列部分に色を割り当てる



1 8個のLEDに対してレインボーカラーを表示させておき
2 Aが押されたら3番目から3個のLEDをライムグリーンする
というプログラムのつもり。

・変数Rangeが予め用意されている
・Rangeを増やしていくと他のエリアを指定した変数となる
 例えば第1象限、第3象限みたいな割当が可能
・このプログラムではRangeに「3番目から3個」を割り当てている。
が、実行結果を見ると4番目から3個が変わるんだが・・・・



内部的に[ 0..7 ] で配列を扱っているので、[ 3 ][ 4 ][ 5 ] = Red
なら意味が通るのだが・・・BUG???
だいたい転送前の配列へのデータ「セット」を「点灯」と表現するレベルだから・・・
(ちなみに今回購入した144個LEDは1オリジンで番号が振ってあるし・・)

Gitで公開されているライブラリがあるので、Forkして修正しようか。

BUGありプログラムは こちら

JavaScriptのソースはこんな感じだった。
input.onButtonPressed(Button.A, function () {
range = strip.range(3, 3)
range.showColor(neopixel.hsl(127, 32, 32))
range.show()
})
let range: neopixel.Strip = null
let strip: neopixel.Strip = null
strip = neopixel.create(DigitalPin.P2, 8, NeoPixelMode.RGB)
strip.setBrightness(32)
strip.showRainbow(1, 360)
strip.show()

============================
 拡張 各LEDの点灯など
============================


今度は「その他」の実習です。

■ 全LEDを同一色にセットする
上記プログラムは全LEDにを緑・白で交互点滅し
最後にセットした配列をクリア(Black)し、Black表示で終わる。
「Stripの設定を解除する」「Stripを設定した色で点灯する」の2行セットで初期化しますが、「明るさ」の設定は残ります。

■LED単位で色を設定する



■Range」の使用方法
 全体のLEDの中一部分にRange/Range2の2ブロックを設定し
 その部分ごとに逆方向のローテイトを行ってみた。

 
見事その部分に色をはめ込むことが出来、それぞれ逆方向にスクロールさせることができた。
ただし、※部分のブロックが本来要るはずなのだが、無くても反映されるという妙なBUGも発見された。(別に問題にはならないが)


これで 真ん中へレインボーパターンがなだれ込む。

■Rangeでレインボーパターンを使うとBUGが出た
 

これって逆順のレインボーカラーに成りそうだが全赤になってしまいます。
ちょっと残念(全LEDを対象にしても同じ症状です)

■2次元配列への変換


と続くんだが、ここは日本語化を投げ出してあるし、



「白色をどうにかするとか」「明るさで調整する」とか
意味わからんブロックが多くて。
スイッチエデュケーション 」のサンプルも見てみたが、アタオカな部分は見事にスルーされていた。






micro:bit上でのIRセンサはクセが悪いわ!(AnalogRead使うべし)

2024年08月17日 12時38分52秒 | マイコン(ESP32・Arduino等)
ゴミ箱プロジェクトにて、センサー基盤繋いで使ってみて解ったこと
結論:アナログReadで使わないと動作がおかしい
   値は500を境でいいです。(1021/18でした)

とりあえずIRセンサーで開閉できるプログラム こちら
micro:bitはサーボを使うとリリースできなくて常時0.02mAを使います。
micro:bit本体だけでは0.00mAでモバイルバッテリー側が勝手にシャットダウンするんだけどね。
IRセンサーは手の場合5cm程度までしか検知できないのがちょっとアレです。
次回の課題は落下音のキックをどうするか(検出)






================
経過
とにかく単純に繋いで検知実験から再スタートした。
この基盤は中央のPinにHI / LO信号が出るという簡単なもの
測定距離は可変抵抗で調整できるものの、このままでは数十センチまでしか検知できない。

とりあえずはデジタルでしょう。


だが、一回▢を表示したらそれ以降Xには決して変わらない。

これでも、一回0になったら表示が0から変わらなくなる。
はぁ???

Analogに変えてみた。

AnalogReadを使うと値は1021 / 18が切り替わって表示される。
これが当たり前の動作じゃろうが!

当然同じAnalogReadであるので期待通り動作する。

意味わからん。
=================
意味わからんのはこっちも
MSのWindowsアプデでEdgeのクッキーが消滅
全プロジェクトが消えた。講座最中でなくてよかったわ
今後はジャンジャン共有かけてやるw


クソMS やりゃあがったな

ゴミ箱ポイ・プロジェクト始動

2024年08月16日 01時27分56秒 | マイコン(ESP32・Arduino等)
夕方いつものお散歩コースでダイソーに寄る。
くす玉を割る台を物色していたのだが、micro:bit版ゴミ箱の蓋を開閉システムを作ることを思い出して、家事コーナーへ。
100円の茶色小型のゴミ箱と300円の実用ゴミ箱の2種類がノミネート
ちょっと悩んだ。
小さい方は実用性がゼロ。しかも工作が難しそうだ。
大きい方は失敗しても車載ゴミ箱にでも転用すればいいか・・・と考え購入

やっぱ大きいと工作がたやすい。



速攻で台を作って取り付けてみた。



まだ試作段階なので穴を開けたくない。強力HDDのネオジム4枚で表裏からガチガチに引っ付けているだけ。
全体的にはマイコン工作っぽくても、センスは良いと思う。


初期案では写真のようなアームをつければ良いと思ってたが、全然ダメw
動かん。アホの考え休むに似たりとはこのこと。



結局現場合わせで解ったことは、軸から約15mm離れた位置にサーボ軸を置くが吉ということ。


この位置でサーボホーンが回れば蓋を90度に立てる位置まで開かせることができる。
蓋が軽いのでなんとか上手くいきそうな予感がしていたが、今回はバッチシだった。


micro:bit開発環境としてクロームOSも試しては見るが・・・

2024年08月13日 15時05分25秒 | マイコン(ESP32・Arduino等)
クロームOSも試しては見るが
https://gigazine.net/news/20240216-windows-10-devices-to-chromeos-flex/

継続性に良くないとの噂もあるな。



SG90サーボで重力場ドライブ装置の基礎実験

2024年08月10日 14時59分55秒 | マイコン(ESP32・Arduino等)
先輩宅訪問が1日延びたので重力場ドライブの基礎部分を作ってみた。
地球の重力場を使用し、ポテンショナルエネルギーを空間から吸い上げるための発射装置



右側に円形の射出装置。ここに200gの質量を持った射出物体を置く。
発射台の下には直径5cm程度の特殊鋼コイル
コイルは2枚の段ボールL字型台座に挟まれ
SG90サーボのホーンに結ばれた紐で、固定ピンを引っ張る



サーボによってピンが抜ければ、コイルに蓄積されたエネルギーが開放され
射出装置に乗ったペットボトルが右に転げ落ち、地球重力場に落ち込むという寸法
素晴らしい!


今回は一発で実験成功
これとダイソー製「おめでとう」や「クラッカー」と組み合わせれば完成だ。

プログラムは こちら