マイコンによる入出力実験１

# はじめに
ここでは、 **Arduino** と呼ばれるマイコンを使って、電子工作やマイコンプログラミングの基礎を学びます。

※本ページは実験のテキストです。

[マイコンによる入出力実験２](https://qiita.com/hsgucci/items/5e3772c6e93bbfee74f7)　へのリンクはこちらです。

# 概要

　マイクロコンピュータ(マイコン)は、パーソナルコンピュータ(パソコン、PC)と比較して物理的なサイズが小さいので、「マイクロ」という名前が付いています。パソコンと同様に、マイコンにもCPUやメモリ、記憶領域があって、機能的にはパソコンとほぼ同様ですが、例えばWindowsやMac OSのようなオペレーティングシステム(OS)は入っていません。電源投入直後から終了までのすべての動作を１つのプログラムで行う必要があります。これを「ベアメタル・プログラミング」と言います。

　マイコンは、自動車や家電製品で主に使われており、センサの値を取る、モータを動かすなどの様々な役割を担っています。いわば、プログラム空間と現実空間、バーチャル世界とリアル世界との橋渡しを行っていることになります。

　ロボットシステムにおいても、カメラ画像処理やAI学習などの計算量の多い高度な処理はパソコンで行い、モータ制御や姿勢制御などのセンサーフィードバック処理はマイコンで行うことが多いです。人間で例えるならば、大脳(パソコン)で行動決定や状況判断を行い，小脳・脊髄(マイコン)で運動制御や反射動作を行うという，分業/分散制御です．

　本実験では、Arduinoマイコンを題材として、スイッチやセンサの値の取得（入力）、LED点灯やラジコンサーボモータの駆動（出力）をおこないます。Windows PCでプログラムを作成し、コンパイルした実行ファイルをマイコンに書き込む、という一連の作業を体験してもらいます。

# 実験装置

今回利用するのは、Arduinoスターターキットです。

- The Arduino Starter Kit　　　https://www.switch-science.com/catalog/2628/

本キットには、Arduino本体、ブレッドボード、多くの電子部品が付属していて、様々な実験ができるようになっています。

ノートパソコン、Arduinoマイコンボード、ブレッドボード、各種電子部品を実験装置として使用します(図１)。
Arduino用プログラミング環境『Arduino IDE』を使って、プログラムを開発していきます。
![Arduino実験装置１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/d9795388-b3d0-d9b5-5456-ff14b1d332c8.png)
図１　Arduino 実験装置

# 解説

## Arduinoとは

使われているのはAVRというマイコンチップです。
昔は、マイコンのプログラミングには有償で高額なプログラム開発ソフトとプログラム書き込み装置が必要でした。
これはAVRに限ったことではありません。

しかし、2005年にイタリアで始まったArduinoプロジェクトによって、
図２のような

- USBケーブルで接続するだけで使える安価なArduinoマイコンボード
- 簡単にプログラムが書き換えられるようにする仕組みのArduinoブートローダ
- 無償で使えるArduino開発環境
- C++言語を拡張した、専用のArduino言語

が開発されて、非常に安価にマイコン開発ができるようになり、爆発的に人気が広がりました。

![Arduinoのシステム構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/e0a57d17-6917-5c52-2d48-0a003d02994c.png)
図２　Arduinoのシステム構成

また、世界中のArduino開発者が自分のプログラムをArduinoライブラリとしてインターネットで公開しているので、初めて使うセンサやモータ駆動ICの動作プログラムを自力で書く手間が大幅に省けるようになったのも人気の１つです。

## Arduinoマイコンボード
人気のあるArduinoでは、純正ボードと互換性のある様々なボードが販売されています。
図３にいくつかの種類を紹介しますが、これだけではありません。Arduino互換ボードは無数にあります。
![arduinoのなかま.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/ae8e1429-3973-62ed-a0e0-db94411e4784.png)
図３　Arduinoマイコンボードの仲間

以下のURLでは、Arduino UNOに代表される「公式ボード」や、他社による「互換ボード」を見ることができます。

※昔に比べて，スイッチサイエンスのWebページは目的のものを探しにくくなりました．．．

- [Arduino社ボード](https://www.switch-science.com/collections/arduino/cat-%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89_arduino+cat-%E7%B4%94%E6%AD%A3%E5%93%81-%E4%BA%92%E6%8F%9B%E6%A9%9F-%E6%9C%AC%E4%BD%93-_%E7%B4%94%E6%AD%A3%E5%93%81)
- [他社互換ボード](https://www.switch-science.com/collections/arduino/cat-%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89_arduino+cat-%E7%B4%94%E6%AD%A3%E5%93%81-%E4%BA%92%E6%8F%9B%E6%A9%9F-%E6%9C%AC%E4%BD%93-_%E4%BA%92%E6%8F%9B%E6%A9%9F)

### 形状や用途による分類
図3のArduinoボードを **<font color=red>基板の形状や使用目的で分類</font>** してみると、以下の様になります。
![形による分類.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/1c6ea3f3-8d21-0083-cf5a-f3d05d203daa.png)

大別すると、以下の２通りに別れます。

- 通称「Arduino標準形状」と呼ばれる、特殊な基板の形を踏襲する製品
- ゲームコントローラやドローンなど、目的に特化した製品

Arduino標準形状のボードは、主にArduinoの入門で使われる事が多いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/de8da13d-703d-4b82-4715-e8dc2e8ac1fd.png)


この様にちょっと特別な形の基板です．変な出っ張りがあったり，ネジ穴の位置がズレていたり．．．
この形に合わせた　[シールド](https://www.switch-science.com/collections/%E5%85%A8%E5%95%86%E5%93%81/cat-%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89_arduino+cat-%E6%8B%A1%E5%BC%B5%E5%9F%BA%E6%9D%BF-%E3%81%9D%E3%81%AE%E4%BB%96%E5%9F%BA%E6%9D%BF_arduino%E7%94%A8%E3%82%B7%E3%83%BC%E3%83%AB%E3%83%89)　と呼ばれる増設ボードが多数販売されているため、この形状を踏襲する製品も多く存在します。
様々なシールドが試せるので **「とりあえず1つは標準形状を所持しておく」** というパターンが多いです．

しかし、Arduinoに慣れてくると、
「シールドを重ねると大きくなるので、小さなロボットや薄い服に搭載しにくい」
「Arduinoとセンサを一緒に１枚の基板に載せてほしい」
などの様々な欲求が出てきます。そういう人達は、

- [ロボットやドローンなどの制御](https://www.google.com/search?q=Arduino+%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88&tbm=shop)
- [光る服などの電子アート](https://www.switch-science.com/search?type=article%2Cpage%2Cproduct&q=LilyPad*)
- [ブレッドボードやユニバーサル基板で回路自作する](https://www.switch-science.com/collections/arduino/cat-%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89_arduino+cat-%E7%B4%94%E6%AD%A3%E5%93%81-%E4%BA%92%E6%8F%9B%E6%A9%9F-%E6%9C%AC%E4%BD%93-_%E7%B4%94%E6%AD%A3%E5%93%81+cat-%E9%96%8B%E7%99%BA%E3%83%9C%E3%83%BC%E3%83%89_%E3%83%9E%E3%82%A4%E3%82%B3%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%89)

など、それぞれの専門分野にあったArduinoボードを使います。

本実験では、入門としてArduino標準形状の「Arduino UNO」を使用しますが、
卒業研究などで利用する際には、 **<font color=blue>Arduino UNO以外にも選択肢がある</font>** ことを覚えておいてください。
センサの取得やモータの駆動など、目的に合致したボードを選びましょう。


## Arduinoブートローダー

簡単な通信で自作プログラムを書き込んだり、書き込まれた自作プログラムを自動的に起動したりする「小さな補助プログラム」を予めマイコンに書き込んでおくことによって、以降は簡単にプログラムを書き込めるようにするアイディアが生まれました。
この「小さな補助プログラム」がブートストラップローダ、ブートローダです。
パソコンではBIOSと呼ばれたりもしています。

最近のパソコンや家電製品、スマートフォンは、自分自身のファームウェアを自動的にアップデートする機能を持っているものがあります。
今まで動いていたファームウェアと、ダウンロードしてきたファームウェアとを切り替える際に、ブートローダが活躍します。

## Arduino IDE

Arduinoのプログラム開発を行うための統合開発環境( Integrated Development Environment 略してIDE)です。
WindowsだとVisualStudioのようなものです。

![arduinoide.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/0d6e771f-c3fc-6c06-ec86-367530b7ea51.png)
この様に、見た目はシンプルなソフトウェアですが、**プログラムを記述する**だけでなく、プログラムの書き込み、新しいボードやライブラリの追加、簡易的な通信プログラムなどの様々な機能を持っています。

近年では、純正Arduino(AVRマイコン)に限らず、Cortex-M系マイコン、ESP8266/32、Windowsアプリなど、様々な媒体のプログラムもArduino IDEで作れるようになっています。
RenesasやSONYといった国産のマイコンも、Arduino IDEで開発できる製品が存在しています。

# 実験手順

以下の手順に従って、実験を行ってください。

1. [Arduinoで開発を始める準備](https://qiita.com/hsgucci/items/d88c559b2c64e6570e90)
2. [Lチカをしてみよう（Blink）](https://qiita.com/hsgucci/items/b6fdd726395c327444d1)
3. [Lチカ(デジタル出力)の解説](https://qiita.com/hsgucci/items/8ae1fc4bb542893d130b)
4. [シリアル通信をしてみよう（Serial）](https://qiita.com/hsgucci/items/eee5894e3651d0a8cb75)
5. [シリアル通信でデジタル出力](https://qiita.com/hsgucci/items/26d399ac0cd68779bec5)
5. [ブレッドボードの説明](https://qiita.com/hsgucci/items/aaa538f82e613a891d02)
6. [デジタル入力の解説](https://qiita.com/hsgucci/items/4baf40a9855cee8e769a)
8. [アナログ入力の解説](https://qiita.com/hsgucci/items/6dc63b79f528d50870ac)
9. [アナログ出力の解説](https://qiita.com/hsgucci/items/3e7ed7485f852aaf7298)
10. [ラジコンサーボを動かそう１](https://qiita.com/hsgucci/items/1ae0dbeb0438db8a23fa)
11. [ラジコンサーボを動かそう２](https://qiita.com/hsgucci/items/a036f875dff260bd0fca)

# おわりに

以上で __マイコンによる入出力実験１__  の作業は終了です．

この後は，担当の先生の指示に従って，課題に取り組んでください．

次回， __[マイコンによる入出力実験２](https://qiita.com/hsgucci/items/5e3772c6e93bbfee74f7)__  では，ラジコンサーボで動くロボットアームを動かします．