組み込みソフトウェアとは¶
組み込みエンジニア養成講座を始めるにあたって、いったいどんなものが組み込み機器なのか簡単な例をあげてみます 細かい内容までは今日の講座では理解できなくても問題ありません。まずは雰囲気をつかんでください
コンピュータが発明されてからまだ100年は経っていませんが、一般家庭にコンピュータが5個もない家庭はほぼないと思います。 20個以上のコンピュータがある家庭も少なくないと思います。
コンピュータと言われると、WindowsのPCやマックを思い浮かべるかもしれませんが、それ以外のコンピュータは広い意味で組み込み開発されたものです。 電気を使って押しボタンスイッチが2個以上ついているものはほぼ間違いなくマイコンと言われる小型コンピュータ(マイコンが使われています) 広い意味での組み込みソフトウェアには、カーナビ、スマホ、等も含まれます。 もっと単純なマイコンは歴史的には炊飯器辺りから始まっています。マイコンの性能向上、価格低下に合わせて、使われる家電製品がどんどん増えて現在にいたっています。 また、スマホ、携帯ゲーム機、小型情報機器類の普及によりハードウェアコストが下がりソフトウェアも発展してきて、GoogleHome,AmazonAlexa等もどんどん発展していってます
- 電子レンジ
- 炊飯ジャー
- 冷蔵庫
- オーブントースター
- 湯沸かしポット
- テレビ
- ステレオ。。。今はない家も多そうではありますが
赤外線リモコン付きLED電灯¶
現在で単純な組み込みシステムとしては、LED照明があげられます。 どのような仕組みになっているのか見てみましょう 難しい用語も出てきますが、一度にすべて覚える必要はありません徐々に少しずつ覚えていければOKです
まずは動作についてまとめ¶
- ON/OFFボタンを押すと電灯がつく
- ON/OFFボタンを押すと電灯が消える
いたってシンプルですね
赤外線リモコン付きLED電灯のモデル¶
学習用に家庭用の100Vの本当の赤外線リモコン付きLED電灯(本物、これ以降では本物と呼ぶこともあります)を使うのは危険なので学習用ボードで再現すると 学習用ボードには"Arduino UNO R4 WIFI"これ以降では単純に”UNO R4 WIFI"とか”UNO R4"とか”R4”と呼ぶこともあります
Note
WIFIの機能がない"Arduino UNO R4"というボードもありますがWIFI/Bluetoothの機能がないだけで基本的な部分は同じです
- 必要な部品
- Arduino UNO R4 WiFi
- 赤外線受信モジュール
- 赤外線リモコン
- LED(任意の色)
- 330Ω抵抗
- ジャンパーワイヤー
- ブレッドボード
軽くデータシートを眺めてみましょう
Tips
データシートというのは超重要です、今後も何度も出てきます
どんなものなのかぐらいは把握しておいて下さい
graph TD;
A[Arduino UNO R4 WIFI] -->|デジタルピン 2| B[赤外線受信モジュール];
A -->|デジタルピン 12| C[LED];
C -->|330Ω抵抗| GND;
Note
LEDには方向(+/-)があります
構造を説明する際には信号の線だけ記載しています、実際に配線する際にはGNDや電源の線も必要です
詳細な接続は以下のようになります、結線だけを示しているので矢印に若干違和感がありますが気にしないでください 今後必要に応じて信号線だけのものと詳細なものを使い分けます
graph TD;
subgraph Arduino UNO R4 WiFi
A5["5V"] -->|Vcc| B[赤外線受信モジュール];
A4["GND"] -->|GND| B;
A13["デジタルピン 13"] -->|LEDのアノード| C[LED];
C -->|330Ω抵抗| D(GND);
A3["デジタルピン 3"] -->|INPUT| B;
end

(R4とセンサーだけしかありませんが、LEDも別途配線してください)
TODO 回路図の画像を更新したい¶
実際の赤外線リモコン付きLED電灯との違いは
| 項目 | 本物 | モデル | 説明 |
|---|---|---|---|
| 電源 | AC100V | USBからのDC5V | AC100VからDCを作成する回路が本物にはある |
| LEDの数 | たくさん | 1個 | LEDがたくさんあると明るいです |
| CPUの数 | 1個 | 1個(2個) | 実は赤外線受信モジュールもマイコンです |
| CPUの値段 | 100円 | ARDUINO R4 WIFI 4800円 |
モデル用のプログラム¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | |
ループ処理¶
- リモコンからの信号を受信した時だけ処理が実行されます
- リモコンからのコード「1」を受信したらLED用のポートをHIGH(ON)にします
- リモコンからのコード「2」を受信したらLED用のポートをHIGH(OFF)にします
実際の製品の仕様¶
ここから仕様とリモコンの画像を取得してきました

ざっくりと機能を洗い出してみると
- Ch1/CH2の切り替え
- 調光機能
- 壁スイッチコントロール
があります 詳しく説明すると
Ch1/CH2の切り替え¶
隣り合った部屋で同じ照明を取り付ける場合を考えてみましょう Aの部屋で電気をつけていて、Bの部屋移動します、Bの部屋にあったリモコンで電気をつけようとしたときに隣のAの部屋の電気が消えてしまうと 操作がややこしくなります。 リモコン、LED電灯の機器の設定をAの部屋はCH1、Bの部屋はCH2としておくことで、使い分けができます
調光機能¶
仮に10個のLEDで電灯を作っているとしましょう。 10%の明るさにしたいときには1番目のLEDだけを点灯させる、50%の明るさにしたいときには1から5番目のLEDだけ点灯させる これでも明るさの調整はできます
一見簡単そうに思われますが、デメリットもあります
- 明るさのむらができたり
- LEDの寿命に差が出る
- 回路が複雑になる
では実際にはどのようになっているのでしょうか?
人間には知覚できないほど高速にON/OFFを繰り返してONの時間の長さで明るさを調整しています
実際に試してみましょう
調光機能付き回路図¶
graph TD;
subgraph Arduino UNO R4 WiFi
A5["5V"] -->|Vcc| B[赤外線受信モジュール];
A4["GND"] -->|GND| B;
A4 -->|GND| C;
A9["PWM対応ピン 9"] -->|LEDのアノード| C[LED];
C -->|330Ω抵抗| D(GND);
A3["デジタルピン 3"] -->|OUT| B;
end
調光機能付きプログラム¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | |
Tip
オシロでLEDの両端を見てみましょう
赤外線受信モジュールの信号とLEDのアノードの信号をオシロで見てみましょう(赤外線モジュール立下りモニター)
壁スイッチコントロール¶
リモコンが見当たらないのに電灯をつけたり消したりしたい場合に便利なのが壁スイッチコントロールです。 壁にあるスイッチを操作することで、器具への電源供給をON/OFFすることができます
家庭用の電源はAC100Vです。マイコンはDC5Vとか3Vとかで動作しています。 そのためにACからDCを作っています。そのDCをコンデンサにチャージしておくことで、少しの間マイコンを動作させることができます。
動作しているマイコンが生成されたDCの電圧を監視することで壁スイッチがOFFになったり、ONになったことを検出しています。
一定期間の間にOFF/ONしたことが検出されると、LED電灯を、全灯、半灯、常夜灯を切り替えることができます
スリープタイマー¶
一定時間が経過するとLED電灯をOFFにする機能です、CPU内部にある時計機能を使って実装しています
赤外線リモコン付きLED電灯のシステム全体として考える¶
ここまで主にソフトウェアを中心にLED電灯の解説をしてきました システム全体として製品を作るところまでの範囲を考えてみます
-
ハードウェア
- マイコン選定
- LED選定
- 電源選定
- 回路図作成
- プリント基板レイアウト設計
- 放熱設計
-
ソフトウェア
- 基本仕様設計
- 詳細仕様設計
- コーディング
- テスト
ハードウェア部分は主にハードウェア担当の技術者が担当します またソフトウェアのボリュームもさほど大きくないのと派生開発が主な作業になるので専任のソフトウェア担当の技術者がおらず ハードウェア担当の技術者が兼任する場合もあります
これがハードディスクレコーダーやカーナビ等になってくると ハードウェアの規模もかなり大規模になり、ソフトウェアも圧倒的に大きくなります そうなってくると、それぞれにチームを結成して対応するようになります
参考