書籍概要

ゼロからよくわかる! Arduinoで電子工作入門ガイド

著者
発売日
更新日

概要

定番マイコンボード「Arduino」を使った電子工作の入門書です。電子工作やプログラミングの経験がまったくない人にもわかりやすく丁寧に解説します!
本書は実際に手を動かして作例を作ることを重視しています。ですので,楽しく工作に取り組むうちに,Arduinoでできることや,よく使う電子部品の利用方法を理解することができます。
さらに,書籍の後半ではイルミネーション,扇風機などバリエーション豊かな作例に挑戦します。Twitterと連携した温度計や,多機能なバギーなど,わかりやすいだけでなく作りがいのある作例も取り上げます。
「経験はないけど自分で何かを作ってみたい!」という人にも,「Lチカはしたものの......」という人にもオススメの1冊です!

こんな方におすすめ

  • Arduinoを使ってみたい人
  • 電子工作に挑戦したい人

サンプル

samplesamplesample

目次

基本編
第1章 電子工作とArduinoの基礎知識

  • 電子工作について知ろう
  • Arduinoについて知ろう
  • Arduinoを入手しよう
  • Arduinoの構造を知ろう
  • Arduinoを制御するプログラムを知ろう
  • Arduino IDEを準備しよう

第2章 スケッチの基本を知ろう

  • Arduinoを動かそう
  • スケッチの書き方を知ろう
  • LEDランプを点滅させるスケッチを書こう
  • LEDランプをArduinoにつなごう
  • LEDランプが光らない際の注意点

第3章 電子回路を作ってみよう―デジタル入出力を覚えよう

  • 電子回路について知ろう
  • 代表的な電子部品について知ろう
  • 電子回路の配線を考えよう
  • LEDランプのオン/オフを切り替えよう
  • スイッチを利用しよう
  • スイッチの状態を読み込もう
  • 状態の変化を読み込もう

第4章 高度な制御をしてみよう―アナログ入出力とシリアル通信を覚えよう

  • 電気を段階的に制御しよう
  • アナログ出力を利用しよう
  • LEDランプをゆっくり点灯させよう
  • 明るさに応じてLEDランプを点灯させよう
  • センサーを利用しよう
  • 明るさの情報を読み取ろう
  • 読み取った情報をパソコンに表示しよう

実践編
第5章 人が近づくと光るイルミネーションを作ろう

  • ライブラリを利用してイルミネーションを作ろう
  • ライブラリで電子回路の制御をしよう
  • フルカラーLEDを光らせよう
  • センサーとフルカラーLEDを組み合わせよう
  • 人の動きに反応させよう
  • 【Step Up】防犯ブザーを作ろう

第6章 リモコンで動かせる扇風機を作ろう

  • モーターを利用して扇風機を作ろう
  • モーターについて知ろう
  • モーターを動かそう
  • センサーを組み合わせよう
  • 赤外線を受信しよう
  • 【Step Up】温度に応じて自動でモーターを動かそう

第7章 インターネットと連携しよう

  • 押すと定型文をツイートするスイッチを作ろう
  • ESPr Developerを利用しよう
  • IFTTTを利用しよう
  • スイッチとTwitterが連携するスケッチを書こう
  • 【Step Up】気温を定期的に自動でツイートしよう

第8章 ロボット風バギーを作ろう

  • おしゃべりなバギーを作ろう
  • はんだ付けに挑戦しよう
  • LCDモジュールで表情を表現しよう
  • バギーを組み立てよう
  • 音声と動きを付けてみよう
  • 表情と動きを組み合わせよう
  • 【Step Up】音でバギーを発進させよう

Appendix Arduino Nanoを使ってみよう

  • Arduino Nanoを使ってみよう
  • Arduino Nanoにスケッチを書き込もう
  • GPIOを操作しよう
  • 7セグメントLEDを利用しよう
  • 数字を表示しよう

サポート

ダウンロード

(2022年6月20日最終更新)

本書で利用するプログラムのサンプルファイルをダウンロードできます。

データは,圧縮ファイル形式でダウンロードできます。圧縮ファイルをダウンロードしていただき,適宜解凍してご利用ください。

なお,2022年6月20日以前にダウンロードされたものには,内容に誤りがあります。お手数ですが,再度ダウンロードし直してください。

ダウンロード
サンプルファイル(2022年6月20日更新)

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。
図をクリックすると大きく表示できます。

(2022年6月20日最終更新)

P.121 「光をゆっくり変化させよう」1行目

1色だけでなく、色が変わっていく
色が変わっていく

※「1色だけでなく、」が不要です。

P.121 リスト5


void loop(){
  for(int i=0; i < 255; i++) {
    pixels.setPixelColor(0, pixels.Color(i, i, i));
  }
  pixels.show();
  delay(10);
  }
}

void loop(){
  for(int i=0; i < 255; i++) {
    for (int j=0; j < 16; j++) {
      pixels.setPixelColor(j, pixels.Color(i, i, i));
    }
    pixels.show();
    delay(10);
  }
}

P.129 リスト7


#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(10, 6, NEO_GRB + NEO_KHZ800);
 
void setup() { 
   pinMode(13, INPUT);
   pixels.begin();
}

int color(int index) {
  switch (index) {
    case 0:
      return pixels.Color(255, 0, 0);
    case 1:
      return pixels.Color(0, 255, 0);
    case 2:
      return pixels.Color(0, 0, 255);
    case 3:
      return pixels.Color(255, 255, 255);
    case 4:
      return pixels.Color(255, 255, 0);
    case 5:
      return pixels.Color(255, 0, 255); 
    case 6:
      return pixels.Color(0, 255, 255); 
  }
}

void loop() {
  if (digitalRead(13)) {
    for(int i = 0; i < 10; i++){
      for (int j = 0; j < 10; j++) {
        pixels.setPixelColor(j, color((j + i) % 7));
      }
      pixels.show();
      delay(200);
    }
  }  
}

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(10, 6, NEO_GRB + NEO_KHZ800);

void setup() { 
   pinMode(13, INPUT);
   pixels.begin();
  Serial.begin(9600);
}

uint32_t color(int index) {
  switch (index) {
    case 0:
      return pixels.Color(255, 0, 0);
    case 1:
      return pixels.Color(0, 255, 0);
    case 2:
      return pixels.Color(0, 0, 255);
    case 3:
      return pixels.Color(255, 255, 255);
    case 4:
      return pixels.Color(255, 255, 0);
    case 5:
      return pixels.Color(255, 0, 255); 
    case 6:
      return pixels.Color(0, 255, 255); 
  }
}

void loop() {
  if (digitalRead(13)) {
    for(int i = 0; i < 10; i++){
      for (int j = 0; j < 10; j++) {
        pixels.setPixelColor(j, color((j + i) % 7));
        if(j==0)
          Serial.println((j + i) % 7);
      }
      pixels.show();
      delay(200);
    }
  }  
}

(以下2021年3月16日更新)

P.105 9~10行目

逆に暗ければLEDランプを暗くするので
逆に暗ければLEDランプを明るくするので

(以下2020年3月31日更新)

P.83 リスト8



#define LED 7
#define SWITCH 13

boolean LEDOn = false;
boolean switchOn = false;

void setup() {
	pinMode(LED, OUTPUT);
	pinMode(SWITCH, INPUT);
}

void loop() {
	if (digitalRead(SWITCH) && !switchOn) {
		if (LEDOn) {
			LEDOn = false;
			digitalWrite(LED, LOW);
		} else {
			LEDOn = true;
			digitalWrite(LED, HIGH);
		}
	}
	switchOn = digitalRead(SWITCH);
}




#define LED 7
#define SWITCH 13

boolean LEDOn = false;
boolean switchOn = false;

void setup() {
	pinMode(LED, OUTPUT);
	pinMode(SWITCH, INPUT);
}

void loop() {
	if (digitalRead(SWITCH) && !switchOn) {
		if (LEDOn) {
			LEDOn = false;
			digitalWrite(LED, LOW);
		} else {
			LEDOn = true;
			digitalWrite(LED, HIGH);
		}
	}
	switchOn = digitalRead(SWITCH); 
	delay(100); 
}


P.105 8行目

返す値は小さくなります
返す値は大きくなります

(以下2020年1月22日更新)

P. 161 2段落目1行目

図27の左側の数字
図29の左側の数字

(以下2019年7月16日更新)

P.66-67

回路図内の「スイッチ」の記号が「トランジスタ」の記号になっていました。
正しいスイッチの記号は,下記の図を参照ください。

誤

正

(以下2019年3月8日更新)

8章で用いられている写真について

図1などのバギーの写真には「STP08」ではないスピーカーが用いられていますが,こちらは誤りになります。本書の内容は「STP08」の利用を前提に書かれておりますので,「STP08」をご利用ください。

P.208 MEMO

ミニブレッドボード http://akizukidenshi.com/catalog/g/gP-05155/
ミニブレッドボード http://akizukidenshi.com/catalog/g/gP-13257/

P.216 表2

誤

正

P.218 1行目

1つ目が左方向に
1つ目が左端から右方向に

P.224~225,235 表3,5,6および図35~37,44について

図のブレッドボードの形状が誤っていました。ここで使用しているブレッドボードには両端の+・-のラインがなく、代わりにプロトタイピングボードの5VとGNDのソケットにジャンパーワイヤー等を差し込みます。詳しくは、下記の図と表を参考にしてください。

P.224 表3

誤

正

P.224 図35

図に誤りがありました。正しくは以下の通りです。

P.224 図36

図に誤りがありました。正しくは以下の通りです。

P.225 表5

誤

正

P.225 図37

図に誤りがありました。正しくは以下の通りです。

P.235 表6

誤

正

P.235 図44

図に誤りがありました。正しくは以下の通りです。

P.249 2段落目 1行目

電圧をかけない状態
電圧をかけた状態

(以下2019年2月26日更新)

P.73 表4

誤

正

P.121 2行目

一からスケッチを書いてみます。
「sample」スケッチのvoid loop()以下を変えて、一からスケッチを書いてみます。

P.175 リスト1 29行目

コード内のクオーテーションマーク("")の一部が全角になっていました。正しくは半角です。


  Serial.println(espat.get("gihyo.jp”, “/”, 80));


  Serial.println(espat.get("gihyo.jp", "/", 80));

P.190 表3

Arduino<2>ピン
Arduino<2>ピン

P.192 リスト2

コード内のクオーテーションマーク("")の一部が全角になっていました。正しくは半角です。また,コード内に不要なテキストが混じっていたため削除し,一部インデントが抜けていた箇所を修正いたしました(インデントは抜けていてもスケッチの実行には影響ございません)。


#include <ArduinoESPAT.h> 

#define TEMPPIN A0

ESPAT espat(“SSID”, “PASS”);

void setup() {
  pinMode(7, INPUT);

  delay(1000);
  Serial.begin(9600);

  if (espat.begin()) { 
    Serial.println(“Initialize OK”);
  } else {
    Serial.println(“Initialize Failed”); 
  }

  if (espat.tryConnectAP()) { 
    Serial.println(“Connected”);
  } else {
    Serial.println(“Connect Failed”);
  }

  Serial.println(espat.clientIP()); 
}

void loop() {
  if (digitalRead(7) == LOW) {
   return; 
  }
  
espat.get(“maker.ifttt.com”, “/trigger/button_pressed/with/key/IFTTTKEY”, 80);

  delay(1000);
}


#include <ArduinoESPAT.h> 

ESPAT espat("SSID", "PASS");

void setup() {
  pinMode(7, INPUT);

  delay(1000);
  Serial.begin(9600);

  if (espat.begin()) { 
    Serial.println("Initialize OK");
  } else {
    Serial.println("Initialize Failed"); 
  }

  if (espat.tryConnectAP()) { 
    Serial.println("Connected");
  } else {
    Serial.println("Connect Failed");
  }

  Serial.println(espat.clientIP()); 
}

void loop() {
  if (digitalRead(7) == LOW) {
   return; 
  }
  
  espat.get("maker.ifttt.com", "/trigger/button_pressed/with/key/IFTTTKEY", 80);

  delay(1000);
}

P.195 表4

Arduino<2>ピン
Arduino<2>ピン

P.197 リスト3

コード内のクオーテーションマーク("")の一部が全角になっていました。正しくは半角です。また,一部の変数名に誤りがありました。


#include <ArduinoESPAT.h> 

#define TEMPPIN A0

ESPAT espat(“SSID”, “PASS”);

void getResp(char c){
  Serial.print(c);
}

void setup(){
  pinMode(TEMPPIN, INPUT);
  Serial.begin(115200);

  if(espat.begin()){
    Serial.println(“Initialize OK”);
  }else{
    Serial.println(“Initialize Failed”);
  }

  if(espat.tryConnectAP()){
    Serial.println(“Connected”);
  }else{
    Serial.println(“Connect Failed”);
  }

  Serial.println(espat.clientIP());
}

void loop() { 
  int data = analogRead(0);
  int v = map(data, 0, 1023, 0, 5000);
  int temp = map(v, 300, 1600, -30, 100);

  espat.get(“maker.ifttt.com”, “/trigger/button_pressed/with/key/IFTTTKEY? value1=” + String(temperature), 80);
  
  Serial.println("Send to IFTTT. " + String(temp));

  delay(3600000UL);
}


#include <ArduinoESPAT.h> 

#define TEMPPIN A0

ESPAT espat("SSID", "PASS");

void getResp(char c){
  Serial.print(c);
}

void setup(){
  pinMode(TEMPPIN, INPUT);
  Serial.begin(115200);

  if(espat.begin()){
    Serial.println("Initialize OK");
  }else{
    Serial.println("Initialize Failed");
  }

  if(espat.tryConnectAP()){
    Serial.println("Connected");
  }else{
    Serial.println("Connect Failed");
  }

  Serial.println(espat.clientIP());
}

void loop() { 
  int data = analogRead(0);
  int v = map(data, 0, 1023, 0, 5000);
  int temp = map(v, 300, 1600, -30, 100);

  espat.get("maker.ifttt.com", "/trigger/button_pressed/with/key/IFTTTKEY? value1=" + String(temp), 80);
  
  Serial.println("Send to IFTTT. " + String(temp));

  delay(3600000UL);
}

(以下2019年2月21日更新)

部品接続の解説に用いる図において,抵抗のカラーコードに誤りが複数ありました。誤りがあった図と,正しいカラーコードは以下の通りです。

P.54 MEMO,P.72 図16,P.73 図18,P.92 図9,P.190 図39,P.250 図17

330Ωの抵抗のカラーコードに誤りがありました。

赤赤茶金
橙橙茶金

P.70 2段落目 2行目

下記の内容は誤っており,不要な一文になります。

また、抵抗は2種類利用します。

P.246 図12

1kΩの抵抗のカラーコードに誤りがありました。

赤赤茶金
茶黒赤金

P.70 表2

誤

正

P.72 図17

図中の抵抗値に誤りがありました。

1kΩ
330Ω

P.149 2段落目 5行目

10秒間電気を流しています。
60秒間電気を流しています。

P.156 リスト3


#include 
IRrecv irrecv(11);

void setup () {
  Serial.begin(115200);
  irrecv.enableIRIn();
  pinMode(10, OUTPUT);
}

void loop () {
  decode_results results;
  if (irrecv.decode(&results)) {
    digitalWrite(10, HIGH); 
    delay(10000);
    digitalWrite(10, LOW); 
    irrecv.resume();
  } 
}



#include 
IRrecv irrecv(11);

void setup () {
  Serial.begin(115200);
  irrecv.enableIRIn();
  pinMode(13, OUTPUT);
}

void loop () {
  decode_results results;
  if (irrecv.decode(&results)) {
    digitalWrite(13, HIGH);
    delay(10000);
    digitalWrite(13, LOW);
    irrecv.resume();
  } 
}

P.156 3行目,6行目

<10>ピン
13>ピン

(以下2019年2月15日更新)

P136 5行目

短い時間(1秒間)
短い時間(0.5秒間)

(以下2019年2月7日更新)

P.99 リード文1行目

アナログ出力に次いでアナログ入力も行います。。
アナログ出力に次いでアナログ入力も行います

P.102 表5

誤

正

(以下2019年1月28日更新)

P.83 本文6行目

AND回路
AND演算子

P.102 表4

誤

正

P.143 MEMO「電子部品を購入する」

電子部品購入先の一覧から下記の情報が抜けていました。

  • 赤外線センサー[SPS-440-1]
    秋月電子通商:http://akizukidenshi.com/catalog/g/gI-00614/

P.204 表1

MOSFET[K2232]
MOSFET[2SK2232

P.219 MEMO「LCDモジュールに表示できる文字の一覧」

右図の出展
右図の出典

(以下2019年1月7日更新)

P.80 リスト7

void loop() {
	if (digitalRead(SWITCH)) {
		if (LEDOn) {
			LEDOn = false; 
			digitalWrite(LED, LOW);
		} else {
			LEDOn = true;
			digitalWrite(LED, HIGH);
		}
	}
}

#define LED 7
#define SWITCH 13

boolean LEDOn = false;

void setup(){
	pinMode(LED, OUTPUT);
	pinMode(SWITCH, INPUT);
}

void loop() {
	if (digitalRead(SWITCH)) {
		if (LEDOn) {
			LEDOn = false; 
			digitalWrite(LED, LOW);
		} else {
			LEDOn = true;
			digitalWrite(LED, HIGH);
		}
	}
}

(以下2018年12月4日更新)

P.236 リスト

  if (sound > 300) { 
      analogWrite(6, 255); 
      delay(2000); 
      analogWrite(6, 0);
    }
  }
}


  if (sound > 300) { 
    analogWrite(6, 255);
    delay(2000);
    analogWrite(6, 0);
  }
}


補足情報

Chapter 5で使用するフルカラーLEDについて

(2019年2月14日更新)

Chapter 5で使用するフルカラーLEDは、ソケットがジャンパーワイヤーのメスでないと入らない形状となっており、そのままではArduinoに接続することができませんでした。Arduinoに接続するには、オス-メスのジャンパーワイヤー(https://www.switch-science.com/catalog/2294/)を利用していただき,フルカラーLEDのソケットにメス側を,Arduinoにオス側を接続してください。

P.106-108 シリアル通信について

(2019年2月7日更新)

リスト6のスケッチを実行しても,シリアルモニタに正しく数字が表示されない場合がございます。
その場合は,シリアルモニタの通信速度を「115200bps」に変更してお試しください。
シリアルモニタの通信速度を設定する方法は下記の通りです。

  • (1) p108を参考にシリアルモニタを表示する。
  • (2) シリアルモニタ右下の「○○bps」をクリックする。
  • (3) 表示される通信速度の一覧から「115200bps」を選択する。

商品一覧