組込みエンジニアになろう

/*** 初心者が基礎から組込みスキルを習得して、マイコンを操れるようになるサイト ***/

【初心者向け(2)】組込みエンジニアへのロードマップ

   f:id:myra-sctech:20200318233917p:plain

組込みエンジニアに必要なスキルとは

組込みエンジニアに必須のスキルは以下の2つだと考えています。

組込みエンジニアはそれぞれに強みを持って活躍していると思います。

例えば通信*1に強いエンジニア、計測*2に強いエンジニア、自動制御*3に強いエンジニア、画像・映像処理*4に強いエンジニア、etc…

ただ、共通して必須のスキルがC言語です。

趣味で電子工作を楽しむ分には、他のプログラム言語でマイコンを制御する事は可能ですが、業務として過去に作られた製品の保守や、他人が書いたコードを参考にする場合など、必ずと言って良いほどC言語に出会うこととなります。

また、組込みエンジニアはマイコンにプログラムを書き込んで機器を思い通りに制御するため、マイコンの知識が必要なことは想像できるかと思います。

そもそもマイコンとはどんなものなのか、どんな機能があるのか、どうすれば制御できるのか、それらを理解してプログラムを作製すれば思った通りにマイコンは動いてくれます。

 以上のとおり、C言語などのプログラム言語とマイコンの知識を習得すれば組込みエンジニアとしては一応成立すると考えています。

一応というのは、組込みエンジニアとして活躍できるレベルにはあるけど、そのスキルだけだと後々困ることになると思うからです。

何故困ることになるのかを説明しましょう。

 

組込み開発の手順

いきなり実践的ですが、組込み開発の流れは図のような手順となります。

   f:id:myra-sctech:20200322233648p:plain

 設計はどんな物をどの様に作るのかを決定する段階です。

一般的にはユーザー(お客さんとか自分)が求めているものはどんな物なのかを洗い出し、それを実現するために必要な機能は何かを検討し、そしてその機能はどの様に実現するかを考えるといった手順となります。

どの様に実現するかを考えるところでC言語マイコンの知識が役に立ちます。

この設計段階で抜けがあると、後になって「あっ、あの機能も必要だった…」と手戻りが発生し、開発時間が無駄に伸びます。

コーディングは先ほどの設計に基づいて実際にプログラムコードを書く段階です。

ここでも当然C言語マイコンの知識が役に立ちますね。

いかに不具合を少なくして機能を実現するのかが腕の見せ所となります。

また、他人にも読みやすく理解しやすいコードを書くことで、後の製品保守*5や次の開発へ流用*6がしやすくなります。

正直、自分が書いたコードであっても何をやっているコードなのかすぐに忘れるので、理解しやすいコードを書くことは大事です。

そして最後に、テストはコーディングしたプログラムが正しく動くか、必要な機能が実現されて求めていた物が出来上がっているかを確認する段階です。

プログラムが正しく動くかを確認することをデバッグ*7とも呼びます。

テストにもC言語マイコンの知識が必要となりますが、その知識しか持ち合わせていないとここで壁にぶつかる事になります。

 

不具合の原因はソフトウェアだけではない

テストで不具合に出会ったとき、「プログラムが思ったように動かない…何故だ…??」となるわけですが、不具合の原因を見つけるためにプログラムコードだけを眺めていても解決できない事が多々あります。

何故なら、不具合の原因がソフトウェア*8ではなくハードウェア*9に起因している場合もあるからです。

例えば、マイコンで温度の測定を行う機能のデバッグ中、温度の測定値が高くなったり低くなったりを繰り返し、大きく振れているとします。

温度の測定値が大きく振れていては一体今何度なのかが分からず困ります。

この測定値が大きく振れる原因は何でしょうか。

ざっと次のようなことが考えられます。

  1. プログラムコードの処理にバグがあり、プログラムの計算結果が大きく振れている。
  2. そもそも測定している温度が本当に大きく振れている。
  3. 測定している温度にノイズが混入しており、ノイズを含んで測定した結果大きく振れた測定値となっている。

1~3番目までが複合している可能性もありますが、3番目についてはプログラムが正しく動いていても、測定値にノイズが乗っているために温度が正しく測れない状態です。

ソフトウェアでノイズを除去することも可能ですが、基本的にはハードウェアでノイズを除去することが望ましいです。(この理由についてはまた記事にしたいと考えています。)

では、ハードウェアでノイズを除去するにはどうすればいいのか…?

ここまで長々と説明してしまいましたが、つまりハードウェア(電子回路・部品)の知識も組込みエンジニアには必要だと言いたいのです。

不具合に出会ったとき、まずはその原因がソフトウェアにあるのか、それともハードウェアにあるのかを切り分ける必要があります。

原因を切り分けるためにもハードウェアのスキルを身につけておく方が望ましいです。

上記のようなハードウェアに起因した不具合の例は日常的に本当によくある話です。

したがって、このサイトではマイコン周辺の電子回路についても説明していきたいと考えています。

 

具体的なロードマップ

このサイトでは大きなステージを3つ設定します。

 Stage1.C言語

 Stage2.マイコン

 Stage3.周辺電子回路

  f:id:myra-sctech:20200324232416p:plain

 

そして、その大きなステージの中に小さなステージをいくつか用意します。

ステージ毎に記事にしますので、継続してステージをクリアすることで組込みエンジニアとしてのスキルを一つ一つ習得してもらえる仕組みを考えています。

今考えているC言語のステージ一覧(スキルリスト)は下のとおりです。もしかすると、必要に応じて増やすかもしれません。

マイコンや周辺電子回路についても同じように基礎からスキルを習得できるようにスキルリストを設定して記事を更新していきます。

    f:id:myra-sctech:20200511004404p:plain

今はスキルリストの内容が「何言ってるの?全然分からん!」で大丈夫です。これから1つ1つ丁寧に説明していきます。

1つのステージをクリアするたびに、あなたは組込みエンジニアのスキルを1つ手に入れるわけです。まるで少しずつ呪文を覚えて立派な魔法使いになるように。

自身のレベルアップを実感しながら取り組んでもらえると楽しく継続できるのではないでしょうか。

次回からStage1のC言語を習得していきます。

myra-sctech.hatenablog.com

/*** このサイトでは脚注を豊富に記載します  ***/

*1:通信:機器と機器との間で情報のやり取りをすること。USBとかBluetoothとか。

*2:計測:温度、加速度、電流、電圧、etc…を測ること。

*3:自動制御:人が設定した目標値に合うようにマイコンが勝手に制御してくれること。モータの回転角度・速度とか温度調節とか。

*4:画像・映像処理:ディスプレイに文字や画像を表示させること。

*5:製品保守:製品に新機能を追加したり、後になって発見された不具合の修正などを行うこと。

*6:次の開発へ流用:時間とお金をかけて開発した技術はそのまま次の開発に流用すると効率が良い。流用した技術の上にさらに時間とお金をかけて開発を行うことを繰り返すと技術が成長する。

*7:デバッグ:プログラムの不具合をバグという。見つかっているバグの調査や修正、バグがないことの確認をデバッグという。なぜプログラムの不具合をバグと呼ぶのか気になるが、昔アメリカで本当に虫(バグ)が原因でコンピュータがバグったという逸話が…

*8:ソフトウェア:プログラムなどの物理的に目に見えないもののこと。

*9:ハードウェア:電子回路や電子部品などの物理的に目に見えるもののこと。