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

サポートページ

この記事を読むのに必要な時間:およそ 0.5 分

ダウンロード

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

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

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

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

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

補足情報

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」を選択する。

お詫びと訂正(正誤表)

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

(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);
  }
}