単純なif文を回路に置き換えてみる

1.4K Views

August 23, 25

スライド概要

2025-08-23(土) JMLT vol.13 in Sapporo で発表した資料
https://jmlt.connpass.com/event/363972/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

単純な if 文を回路に 置き換えてみる マイコンにプログラム書きすぎるな高校校歌 25/08/23 #JMLT #mugmilk946 / Shota Nishihara @tomio2480

2.

$ whoami ❖ Shota Nishihara @tomio2480 ❖ 光弾け輝く無職 ✓ ✓ 高校教諭(電)→セキュリティ人材育成→ →開発組織支援+専門学校講師(AI:Python基礎)→開発組織支援(技術広報的な) 情報処理学会 会誌編集委員ではある https://www.ipsj.or.jp/magazine/magazine.html ❖ 北海道旭川市 で生きのこりをかけている ✓ 旭川 18 年→北見 4 年→富良野 5 年→(東京)小平 2 年半→今:旭川 4 年目 ❖ ゆるい勉強会(旭川),FuraIT(富良野),Co-KoNPIle(小平) に大体いる 2

3.

本題 3

4.

かんたんな電子工作での条件分岐 ❖ 大きく分けて2つの方法がある ✓ マイコンに書き込むプログラムを含めて実現 ✓ 回路側だけで実現 ❖ 今回はあるデバイスの ON/OFF を切り替えるだけのものを作る ✓ ON/OFF は電圧の HIGH or LOW で切り替わるとする ✓ 使うマイコン(ボード)は Arduino(UNO R3) ■ TinkerCAD のシミュレータを使用 ✓ いずれの部品も今回やることなら細かい違いは影響ナシ 4

5.

マイコンに書き込むプログラムを含めて実現 5

6.

マイコンに書き込むプログラムを含めて実現 ❖ TinkerCAD で回路とスケッチを見られます (QR コードはこれ) ✓ ログイン不要 ✓ [TMP] クリック → 温度操作 ❖ 回路図は fritzing で作りました 6

7.

つくるのに必要なものとポイント ❖ ハードウェア ✓ マイコンと配線 例えばゲーム的なおもちゃを作る なら メモリを節約することでステージ数 を増やせる みたいなお得もある ❖ ソフトウェア ✓ プログラム( Arduino ではスケッチと呼ぶ)が必要 ✓ if 文,analogRead 関数 ■ プログラムメモリの圧迫,一動作に必要な時間が伸びる ✓ 分岐箇所を調整するために AD 変換値を整数で扱う ■ データメモリの圧迫 7

8.

アナログ電圧値に基づく真理値だけ回路にする 8

9.

再掲 マイコンに書き込むプログラムを含めて実現 ❖ TinkerCAD で回路とスケッチを見られます (QR コードはこれ) ✓ ログイン不要 ✓ [TMP] クリック → 温度操作 ❖ 回路図は fritzing で作りました 9

10.

回路にコンパレータを導入する ❖ コンパレータ ✓ + 端子の電圧 > - 端子の電圧 → HIGH-V(H) 出力 ✓ + 端子の電圧 < - 端子の電圧 → LOW-V(L) 出力 ■ アナログ値である電圧を取り扱うため等しい値が出続ける とは考えにくいが,値の等しいときは H か L のどちらか になると表記されている場合が多い ❖ 今回は + 端子に基準電圧,- 端子に入力電圧 ✓ 負論理になるが改良を見越してこうする ✓ 逆に接続しても論理が反転するだけで動く 10

11.

単純な閾値を持つコンパレータ回路 ❖ R_1 と R_2 の分圧で基準電圧 V_ref(+ 端子の電圧)を作る ✓ V_ref = R_2 * Vcc/(R_1+R_2) = 4.7k * 5/(15k+4.7k) ≒ 1.192 V ✓ 基準電圧は別の方法で 作っても動作する(はず ❖ R_1 や R_2 を可変にすれば 閾値電圧を回路だけで調整可能 → マイコンへの書き込み不要! 11

12.

スケッチをシンプルに変更する ❖ if 文と digitalWrite はそのままに analogRead を digitalRead へ 12

13.

回路とスケッチを新しくして動かしてみる ❖ 同じく TinkerCAD で見られます (QR コードはこれ) ✓ 今回の L チカ程度なら もはやコンパレータ出力を 直接 LED につなげれば OK = Arduino 不要 13

14.

応用編 14

15.

閾値近辺で信号がバタつくと出力もバタつく 15

16.

閾値近辺で信号がバタつくと出力もバタつく ❖ 信号に乗るノイズの幅により,電圧値が閾値をまたいでしまうと 出力が安定せず不安定な動作を引き起こす ❖ 考えられる対策だと...... ✓ コンデンサを挟むなどしてノイズ軽減 ■ 今回はテーマ的に見送り ✓ L→H の閾値と H→L の閾値を 2 つ持つ ■ コンパレータ回路にひと工夫で OK プログラムをいい感じにしてなんとかする 図の引用元 : コンパレータに特別なヒステリシス を追加 | Analog Devices 16

17.

再掲 単純な閾値を持つコンパレータ回路 ❖ R_1 と R_2 の分圧で基準電圧 V_ref(+ 端子の電圧)を作る ✓ V_ref = R_2 * Vcc/(R_1+R_2) = 4.7k * 5/(15k+4.7k) ≒ 1.192 V ✓ 基準電圧は別の方法で 作っても動作する(はず ❖ R_1 や R_2 を可変にすれば 閾値電圧を回路だけで調整可能 → マイコンへの書き込み不要! 17

18.

抵抗を一本足すだけで閾値を 2 つ持てる ❖ +端子 > - 端子 → センサ低 ✓ コンパレータ出力=HIGH(5 V) ✓ R_1 と R_3 が並列とみなせる ❖ +端子 < - 端子 → センサ高 ✓ コンパレータ出力=LOW(0 V) ✓ R_2 と R_3 が並列とみなせる 出力に応じ分圧を作る抵抗値が変動 → 閾値も変動 = 閾値が 2 つ現れる! 18

19.

抵抗を一本足して閾値を 2 つにしたもの ❖ 同じく TinkerCAD で見られます (QR コードはこれ) ✓ スケッチは変更点ナシ ✓ 茶黒黄金の抵抗を追加した ■ それ以外は変化ナシ ❖ H→L ✓ 約 1.15 V 以下 ❖ L→H ✓ 約 1.32 V 以上 1.19 V 近辺では無反応 19

20.

過去の影響を受ける=ヒステリシス特性を持つ ❖ ヒステリシス特性 ✓ 今の値だけでなく,直前の値も加味して次の状態が決まる ✓ 材料の磁化の話でよく出てくる概念 ■ [N/S で磁化] と磁化されていない材料を磁界に曝すと? 図の引用元 : コンパレータに特別なヒステリシスを追加 | Analog Devices 20

21.

もしプログラムだけで対応するなら......? ❖ 同じく TinkerCAD で見られます (QR コードはこれ) ✓ 入力電圧と逆に閾値が動いてバタつきの影響を回避できた ✓ もっとうまく書ける気がする 橙色 : 閾値 青色 : センサーからの入力電圧 21

22.

まとめ 22

23.

君たちは回路とプログラムどちらで作るのか ❖ プログラムでも回路でも実装できることがある ✓ どちらかだけでしか実現できないのならそちらを選ぼう ❖ どちらのほうが自分の作りたいものに有利か考えてみよう ✓ 回路なら部品の値段,数,実装難易度,修理のしやすさ...... ✓ プログラムなら動作速度,メモリ容量,調整回数,可読性...... 可能性は無限大だ! なんでもつくろう! 23

24.

単純な if 文を回路に 置き換えてみる マイコンにプログラム書きすぎるな高校校歌 25/08/23 #JMLT #mugmilk946 / Shota Nishihara @tomio2480