WS2812B、アドレッサブルLED,シリアルLED、LEDストリップ、NeoPxcel
など多彩な呼び方があるデバイスに関する おまとめ
[ 2024/8 ] micro:bit NeoPxcel 再勉強するも、テキトー業者のデタラメブロックに愕然
[ 2024/7 ] アドレッサブルLEDテープ [WS2812B] 届いた
他サイトへのリンク多数有
他サイトへのリンク多数有
WS2812FXライブラリ関係
[ 2024/7 ] LEDストリップ&フォロ改造の検討
[ 2024/2 ] Tiny:bitのテールランプをウインカーに(Neopixcel)
[ 2023/10 ] DHT11温度をOLEDとシリアルLEDへ表示
[ 2023/10 ] Aliex シリアルLED(WS2812B)のテスト
[ 2023/10 ] WokuiのArduinoエミュレータ上でNeoPixcelを動かす(ライブラリ導入)
[ 2022/8 ] micro:bit バギー復活
[ 2014/8 ] Arduino Lチカがやっぱり1里塚だなあ プロペラクロックのお勉強
最古の記事
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への切り捨て移行とかムカつくことが多いし。
・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ライブラリの基本となってる。
Sat(彩度):saturation
Lum(輝度):Luminosity
がmicro:bitライブラリの基本となってる。
色をデジタル(数値)で表すには
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の時と違って)なんか変だなと感じたのはこれか。納得
リールで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
明るさ16の場合は、5V*0.07A=0.35A
micro:bitV2の電流Max最大値は0.3A
少々オーバーしています。
なので「明るさ8」で運用するが吉のようです。
少々オーバーしています。
なので「明るさ8」で運用するが吉のようです。
実験の「流れる」の場合、それで十分です。
秋プラ・ゲームに向けて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()
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次元配列への変換
と続くんだが、ここは日本語化を投げ出してあるし、
「白色をどうにかするとか」「明るさで調整する」とか
意味わからんブロックが多くて。
「スイッチエデュケーション 」のサンプルも見てみたが、アタオカな部分は見事にスルーされていた。
ゴミ箱プロジェクトにて、センサー基盤繋いで使ってみて解ったこと
結論:アナログ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 やりゃあがったな
夕方いつものお散歩コースでダイソーに寄る。
くす玉を割る台を物色していたのだが、micro:bit版ゴミ箱の蓋を開閉システムを作ることを思い出して、家事コーナーへ。
100円の茶色小型のゴミ箱と300円の実用ゴミ箱の2種類がノミネート
ちょっと悩んだ。
小さい方は実用性がゼロ。しかも工作が難しそうだ。
大きい方は失敗しても車載ゴミ箱にでも転用すればいいか・・・と考え購入
やっぱ大きいと工作がたやすい。
速攻で台を作って取り付けてみた。
まだ試作段階なので穴を開けたくない。強力HDDのネオジム4枚で表裏からガチガチに引っ付けているだけ。
全体的にはマイコン工作っぽくても、センスは良いと思う。
初期案では写真のようなアームをつければ良いと思ってたが、全然ダメw
動かん。アホの考え休むに似たりとはこのこと。
動かん。アホの考え休むに似たりとはこのこと。
結局現場合わせで解ったことは、軸から約15mm離れた位置にサーボ軸を置くが吉ということ。
この位置でサーボホーンが回れば蓋を90度に立てる位置まで開かせることができる。
蓋が軽いのでなんとか上手くいきそうな予感がしていたが、今回はバッチシだった。
クロームOSも試しては見るが
https://gigazine.net/news/20240216-windows-10-devices-to-chromeos-flex/
継続性に良くないとの噂もあるな。
先輩宅訪問が1日延びたので重力場ドライブの基礎部分を作ってみた。
地球の重力場を使用し、ポテンショナルエネルギーを空間から吸い上げるための発射装置
右側に円形の射出装置。ここに200gの質量を持った射出物体を置く。
発射台の下には直径5cm程度の特殊鋼コイル
コイルは2枚の段ボールL字型台座に挟まれ
SG90サーボのホーンに結ばれた紐で、固定ピンを引っ張る
サーボによってピンが抜ければ、コイルに蓄積されたエネルギーが開放され
射出装置に乗ったペットボトルが右に転げ落ち、地球重力場に落ち込むという寸法
素晴らしい!
今回は一発で実験成功
これとダイソー製「おめでとう」や「クラッカー」と組み合わせれば完成だ。
プログラムは こちら