1000円ではじめるArduino互換機入門

# 1000円ではじめるArduino互換機入門

<img alt="あけましておめでとうございます。" src="https://camo.githubusercontent.com/b7c9922559bdfadc61f04fa9dc9797851ddc415a/68747470733a2f2f7062732e7477696d672e636f6d2f6d656469612f4331415f744f7856494145393177562e6a70673a6c61726765" width="640px">

## はじめに
Arduino互換機を使って、安く手軽に電子工作をはじめてみましょう。

## 用意するもの
- Arduino互換機 500円～
- 液晶表示装置(LCD)＋キーパッドシールド 400円～
- 必要に応じて：USBケーブル 100円～

すべて購入してもたった1000円。やすい！

### Arduino
Arduino は、もともと教育用に作られた単純なマイコンボードです。

手軽に扱えるマイコンボードとして人気があり、純正品の Arduino Uno でも3000円～購入できます。
マイコンボードとしては、十分安いのですが、今回は使いません。

最近（2015年～）では、Amazon.co.jp で Arduino 互換機がとても安価に購入できます。
たとえば、[こちら](https://www.amazon.co.jp/dp/B013QV28CW)は、なんと 435円（2017年1月4日現在）で入手できます。

- [https://www.amazon.co.jp/dp/B013QV28CW](https://www.amazon.co.jp/dp/B013QV28CW)
- [http://www.ebay.com/itm/131792345369](http://www.ebay.com/itm/131792345369)

この Arduino互換機に保障などは一切ないため、購入は自己責任でよろしくおねがいします。

### LCD＋キーパッドシールド
Arduino もコンピューターの3大要素、入力・出力・演算がきちんとあります。

- 入力/出力：シリアル通信, GPIO etc.
- 演算：8-bit AVR RISC-based microcontroller, 1KB EEPROM, 2KB SRAM

... 残念ながら単体でできることは、LEDの点滅がせいぜいです。

Arduino はシールドと呼ばれる外部機器を接続することで、自由に機能を追加できます。

LCD＋キーパッドシールドを使うと、

- 16文字x2行の文字表示
- `analogRead(A0)` を利用した5個のボタン入力

ができるようになり、見た目を派手にできます。

[こちら](https://www.amazon.co.jp/dp/B00OPO2W6M)の LCD＋キーパッドシールドは、351円（2017年1月4日現在）で入手できます。

- [https://www.amazon.co.jp/dp/B00OPO2W6M](https://www.amazon.co.jp/dp/B00OPO2W6M)
- [http://www.ebay.com/itm/131792345369](http://www.ebay.com/itm/131792345369)

購入は自己責任でおねがいします。

## 開発環境の準備
### Arduino IDE のインストール
[公式サイト](https://www.arduino.cc/)から、自分の環境にあった [Arduino IDE](https://www.arduino.cc/en/main/software) をダウンロードし、 [Getting Started](https://www.arduino.cc/en/Guide/HomePage) のページなどを参考にして、Arduino IDE をインストールします。

### ドライバーのインストール
純正の Arduino の場合、PCへのドライバーの不要なのですが、安価な互換機の場合、USB-シリアルコンバーターのチップが変更されていることもあり、その場合、PCへのドライバーのインストールが必要です。

[上述の Arduino 互換機](https://www.amazon.co.jp/dp/B013QV28CW)の場合、Amazon.co.jp の商品の説明によると、

> CH340G Driver

と記載があり、CH340Gのチップが使われているようなので、このドライバーをインストールします。

[Aitendo の商品のページ](http://www.aitendo.com/product/11576)などからPC用ドライバーをダウンロードして、インストールします。

macOSの場合は、次の記事が参考になるかと思います。

[MacOSX+CH340G搭載Arduino互換ボードの動作メモ - Qiita](http://qiita.com/hnw/items/f5272421292eb5420546)

## スケッチ例の書き込み
Arduino IDEを起動し、メニューから[ファイル]→[スケッチ例]→[01.Basics]→[Blink]を選択して、サンプルコードを開きます。

続いて、[ツール]→[シリアルポート]から、マイコンボードが接続されているシリアルポートを選択します。
書き込みボタン（右矢印ボタン）を押すと、30秒以内にプログラムがマイコンボードに書き込まれ、正常に書き込まれれば、自動的にスケッチが実行されます。

このスケッチ「Blink」は通称「Lチカ（LEDチカチカ）」と呼ばれるもので、実行されるとマイコンボードのLEDが1秒間隔で繰り返し点滅するはずです。

## LCD＋キーパッドシールドを使ってみる
Arduino 互換機のボードにLCD＋キーパッドシールドを差し込んで、次のスケッチを書きこみます。

```cpp
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

enum { RIGHT, UP, DOWN, LEFT, SELECT, NONE };

void setup() {
  lcd.begin(16, 2);
  lcd.print("Push the buttons");
}
 
void loop() {
  lcd.setCursor(0,1);
  switch (readKey()) {
    case RIGHT: {
      lcd.print("RIGHT ");
      break;
    }
    case LEFT: {
      lcd.print("LEFT   ");
      break;
    }
    case UP: {
      lcd.print("UP    ");
      break;
    }
    case DOWN: {
      lcd.print("DOWN  ");
      break;
    }
    case SELECT: {
      lcd.print("SELECT");
      break;
    }
    case NONE: {
      lcd.print("NONE  ");
      break;
    }
  }
}

int readKey() {
  int adc_key_in = analogRead(A0);
  if (adc_key_in < 50)   return RIGHT;
  if (adc_key_in < 250)  return UP;
  if (adc_key_in < 450)  return DOWN;
  if (adc_key_in < 650)  return LEFT;
  if (adc_key_in < 850)  return SELECT;
  return NONE;
}
```

このスケッチは、[公式サイト](https://www.dfrobot.com/wiki/index.php/Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009))にあるものを参考にしています。

購入直後の状態では、コントラストが調整されていない為、LCDに何も表示されないと思います。
LCDの左上の半固定抵抗をマイナスドライバーで十数回まわし、見やすく表示されるように調節しましょう。

正常に書き込めることが確認できたので、他のスケッチ例を書き込んでみたり、自分で自由にスケッチを改造してみたいと思います。

## 年賀マイコン
お正月のあいさつをLCDに表示させて見ました。

UP/DOWNボタンを押すと、2017年から1年ずつ加算/減算できるので、西暦9999年まで新年のあいさつに活用できます。

スケッチは次のとおりです。

```cpp
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
  byte de[8] = {
    0x68>>3,
    0x00>>3,
    0xf8>>3,
    0x20>>3,
    0x20>>3,
    0x20>>3,
    0x40>>3,
  };

  byte go[8] = {
    0x28>>3,
    0xf8>>3,
    0x08>>3,
    0x08>>3,
    0x08>>3,
    0x08>>3,
    0xf8>>3,
  };

  byte za[8] = {
    0x58>>3,
    0xf0>>3,
    0x50>>3,
    0x50>>3,
    0x10>>3,
    0x20>>3,
    0x40>>3,
  };

  lcd.createChar(1, de);
  lcd.createChar(2, go);
  lcd.createChar(3, za);
  lcd.begin(16, 2);
  lcd.print("HappyNewYear");
  lcd.setCursor(0, 1);
  lcd.print("\xb1\xb9\xcf\xbc\xc3\xb5\xd2\x01\xc4\xb3\x02\x03\xb2\xcf\xbd!");
}

void loop() {
  char year[4];
  sprintf(year, "%4d", yearReadKey());
  lcd.setCursor(12, 0);
  lcd.print(year);
  delay(200);
}

int yearReadKey() {
  static int i = 2017;
  int adc_key_in = analogRead(A0);
  
  if (adc_key_in < 50)   return i;
  if (adc_key_in < 250)  return ++i;
  if (adc_key_in < 450)  return --i;

  return i;
}
```

ほぼ全てのキャラクタLCD製品には、日立 HD44780 互換ICが搭載されており、日本語カナに対応する文字コードを `LiquidCrystal::print()` に与えるだけで表示できます。

表示文字数の都合上、濁音カナ文字3つ「デ(U+30c7)」「ゴ(U+30b4)」「ザ(U+30b6)」は [k6x8フォント](http://www.geocities.jp/littlimi/k6x8.htm) から抽出し、CGRAMに `0x01` ～ `0x03` に格納しました。

![HD44780](https://camo.githubusercontent.com/49499c48f2c6e3ace9356bda00b048039e0c30ad/687474703a2f2f692e696d6775722e636f6d2f384a346f3135352e706e67)

引用元：[HD44780U のデータシート - SparkFun Electronics](https://www.sparkfun.com/datasheets/LCD/HD44780.pdf)

自由にコーディングして実際に思い通り動くとそれだけで楽しいですね。

読んでいただきありがとうございました。本年もよろしくお願いします。