Arduinoの覚書

自分の備忘録です。Arduino以外もあります。

ATOM Lite 6.じわっとPWM点滅(ledcWrite)

(下書き)

外付けLED 6個をPWM調光にて点滅させる。

回路

前記事と同様に6回路分接続する。

(ATOM LiteのG22)---(アノード [LED-C] カソード)---(330Ω)---(GND)

(ATOM LiteのG19)---(アノード [LED-D] カソード)---(330Ω)---(GND)

(ATOM LiteのG23)---(アノード [LED-E] カソード)---(330Ω)---(GND)

(ATOM LiteのG33)---(アノード [LED-F] カソード)---(330Ω)---(GND)

(ATOM LiteのG21)---(アノード [LED-G] カソード)---(330Ω)---(GND)

(ATOM LiteのG25)---(アノード [LEDH] カソード)---(330Ω)---(GND)

 

必要なもの

前記事と同じ。

  • ATOM Lite (スイッチサイエンス)
  • ブレッドボードx1 (秋月電子)
    (2+5+5+2)x25=350穴以上 200円程度

f:id:Arduino:20201202175602j:plain

  • ブレッドボード用ジャンパー線 オス-オス (秋月電子)
    10cm程度数本 長さいろいろ60本で220円

f:id:Arduino:20201202180246j:plain

  • ピンヘッダ 2.54mmビッチx1列 5pinx1, 4pinx1 (秋月電子)
    長pinをハサミで切る。1円/pin程度

f:id:Arduino:20201202180300j:plain

  • LEDx1 (秋月電子) 120円
    OSX10201-GYR1 (OptoSupply) 10個のLEDが一体化
    2.54mmビッチ 20pin
    角の切欠側が1番pinでLED-Aのアノード、20番pinがそのカソード
    LED-A~LED-Eの5個は黄緑色
    LED-F~LED-Hの3個は黄色
    LED-I~LED-Jの2個は赤色
    VF = 2.1Vtyp, 2.5Vmax (IF = 20mA時)
    IF = 25mAmax
    Iv = 35mcd (IF = 20mA時)
    写真は次の記事参照
  • 抵抗 330Ωx1 (Amazon)
    橙-橙-茶-金は、3-3-1-5 → 33x10^1±5% = 330Ω±5%

f:id:Arduino:20201202180320j:plain

動作

外付けのLED 6個がそれぞれ別々にじわっと点滅する。

PWMの等間隔変化では、暗い時の変化が大きく、明るい時はほとんど変わっていないので、極端に言うと、ほぼ明るく、一瞬消灯する感じです。

フェヒナーの法則

Wikipediaより、刺激量の強度Rが変化する時、これに対応する感覚量Eは
 E = C x log R ・・・(1)
の関係となる。ここでCは定数である。つまり心理的な感覚量は、刺激の強度ではなく、その対数に比例して知覚される。たとえば、100の刺激が倍に増加して200になるときの感覚量と、200の刺激が倍に増加して400になるときの感覚量の変化は等しい。

 

感覚的な光の強さEは、最大値をEmax、r=0~1とすれば
 E = Emax x r
また、実際の刺激量である明るさRは、最大値をRmax、DT=0~1とすれば
 R = Rmax x DT
となるので、(1)式は、
 Emax x r = C x log(Rmax x DT) ・・・(2)
DT = 1の時、r = 1なので
 Emax = C x log Rmax
 ∴ C = Emax / log Rmax ・・・(3)

また、DT = 0~1をDT2 = 0~bitMaxに変換すると
 DT : DT2 = 1 : bitMax
 ∴DT = DT2 / bitMax ・・・(4)
(3)式と(4)式を(2)式に入れて
 Emax x r = Emax / log Rmax x log(Rmax x DT2 / bitMax)
 ∴log(Rmax x DT2 / bitMax) = r x log Rmax ・・・(5)

ここでlogの公式
 log(A / B) = log A - log B
 log(A x B) = log A + log B
より(5)式は、
 log Rmax + log DT2 - log bitMax = r x log Rmax
 log DT2 = r x log Rmax - log Rmax + log bitMax
      = (r - 1)x log Rmax + log bitMax
logを常用対数で計算すると
 DT2 = 10 ^ ((r - 1)x log Rmax + log bitMax) ・・・(8)
感覚的な光の強さを等間隔で変化させる(r=0~1)には、実際のPWMのデューティ(DT2=0~bitMax)を上式で変化させればよい。ただし、Rmax値は実験にて決めました。

 

f:id:Arduino:20201202221559j:plain

スケッチ




<― 前へ

目次へ

次へ ―>




以上

Arduino IDEの代わりにVS Code

Arduino IDEの代わりにVS Code

VS Codeのインストール
1.VS Codeはすでにインストール済みとします。(Ver1.53.0でした 2021/2/3)

VS Codeの拡張プラグインをインストール
2.ファイル > ユーザー設定 > 拡張機能 > Arduinoで検索 > Arduino for Visual Studio Code (Microsoft)(v0.3.5でした) > インストール > 画面中央上のXをクリック(消える) > 左側縦メニューの拡張機能をクリック(消える)

● スケッチ例を開く
3.表示 > コマンドパレット > Arduino:Examples > Examples from Custom Libraries > M5Stack > Basics > HelloWorld > 別ウィンドが開く > HelloWorld.ino をクリック

● ボードの設定
4.表示 > コマンドパレット >Arduino:Board Config
または、右下青地の<Select Board Type>をクリック

 Select Board = M5Stack-Core-ESP32(M5Stack) を選択
 Flash Mode = QIO (そのまま 他にDIO,QOUT,DOUT)
 Flash Frequency = 80MHz (そのまま 他に40MHz)
 Partition Scheme = Default
 Upload Speed = 115200 (921600,115200,256000・・・)
 Core Debug Level = ?(None,Error,Warn,Info,Debug,Verbose)
完了は上のタブのxをクリック

● シリアルポートの設定
5.表示 > コマンドパレット > Arduino:Select Serial Port > COM□ を選択
または、右下青地のCOMをクリック

Arduinoパスの設定
6.ファイル > ユーザー設定 > 設定 > 拡張機能 > Arduino configuration > Arduino:Pathにて以下を入力
 C:\Program Files (x86)\Arduino

● コード補完の設定
7.ファイル > ユーザー設定 > 設定 > C_Cpp:Intelli Sense Engine で検索 > Default→Tag Parserに変更

(参考)
 IntelliSenseプロバイダーを制御
 Tag Parser:コンテキストを意識しないfuzzyの結果を提供
 Default:コンテキストを意識する結果
 Disabled:C/C++言語サービス機能オフ

● △を消す
8.左下の青地に△1がついている。クリックすると
「"C:\\Users\\(ここは名前)\\Documents\\Arduino\\hardware\\tools\\**" が見つかりません。」と表示される。実際に、エクスプローラーで見るとhardwareのフォルダが無いので、その行の先頭に//を付け注釈行とした。

● 出力の日本語が文字化け
9.C:\Users\(ここは名前)\.vscode\extensions\vsciot-vscode.vscode-arduino-0.3.5\out\src\common\util.js
のファイルの
function spawn(・・・から7行下の
if (os.platform() === "win32") { から
if (outputChannel) { の前の行までの11行を/* */で囲み注釈行として上書き保存し、VS Codeを再起動する。

● 書込み&実行
10.表示 > コマンドパレット > Arduino:Uploadを選択
または、Ctrl + Alt + u
または、右上の4つのアイコンの一番左をクリック

(参考)右上のアイコンは左から
 1.Upload : 書込み&実行
 2.Verify : 検証のみ
 3.エディタを右に分割
 4.その他の操作

● 待つ
11.出力欄に[Done]が出るまで待つ。左下で輪が回転しているが、途中経過の表示が無いので、いつ終わるかわからない。

● シリアルモニタを開く
12.表示 > コマンドパレット > Arduino:Open Serial Monitor
または、右下青地のコンセントマークをクリック

閉じるはxをクリック

----------------------------------------------
ショートカット
・全コマンド表示
 Ctrl + shift + p : 表示 > コマンドパレット
 または、F1
 
・書込み&実行
 Ctrl + Alt + u : 表示 > コマンドパレット > Arduino:Upload