arduinoでプログラミングに触れてみよう 続編

243
Arduinoプログラミングに触れてみよう 続編 2016/01/10 Hiromu Yakura

Upload: hiromu-yakura

Post on 16-Apr-2017

2.367 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Arduinoでプログラミングに触れてみよう 続編

Arduinoでプログラミングに触れてみよう

続編

2016/01/10 Hiromu Yakura

Page 2: Arduinoでプログラミングに触れてみよう 続編

自己紹介

• 矢倉 大夢 (やくら ひろむ)

• 筑波大学 情報学群 情報科学類 1年

• 情報処理推進機構 未踏クリエイター

Page 3: Arduinoでプログラミングに触れてみよう 続編

目的

• プログラミングとはどういう作業かを知ってもらう

• プログラミングで必要な論理的思考を感じてもらう

• プログラミングの指示したとおりに動くという楽しさに触れてもらう

Page 4: Arduinoでプログラミングに触れてみよう 続編

Arduino

• マイクロコントローラ

• コンピュータの機能がひとつの基盤に

• 3000円くらいで買える

Page 5: Arduinoでプログラミングに触れてみよう 続編

セットアップ• Internet Explorer   を起動する

• アドレスバーに arduino.cc と打ち込む

• 左上の「Download」をクリック

Page 6: Arduinoでプログラミングに触れてみよう 続編

セットアップ• 中央右の「Windows ZIP File for non admin install」

Page 7: Arduinoでプログラミングに触れてみよう 続編

セットアップ• 右下の「JUST DOWNLOAD」

Page 8: Arduinoでプログラミングに触れてみよう 続編

• ダウンロードしたファイルをダブルクリックで開き「ファイルをすべて解凍」をクリック

• ダイアログが出てきたら「展開」をクリック

• 解凍が終われば「arduino-1.6.7」フォルダを開く

セットアップ

Page 9: Arduinoでプログラミングに触れてみよう 続編

• 付属のUSBケーブルでArduinoを接続する

• 「drivers」フォルダの「dpinst-x86.exe」を起動

• 「次へ」をクリックして、インストールを開始

セットアップ

Page 10: Arduinoでプログラミングに触れてみよう 続編

セットアップ• 以下の様なダイアログが2-3回表示されるが すべて「インストールする」を選択する

Page 11: Arduinoでプログラミングに触れてみよう 続編

セットアップ• 以下の画面になれば、インストール完了なので「完了」を押して終了する

Page 12: Arduinoでプログラミングに触れてみよう 続編

セットアップ

• 「arduino-1.6.7」の「arduino.exe」を起動

Page 13: Arduinoでプログラミングに触れてみよう 続編

• 「ツール」の「マイコンボード」を「Arduino/Genuino Uno」に 設定する

セットアップ

Page 14: Arduinoでプログラミングに触れてみよう 続編

• 「ツール」の「シリアルポート」のうち 有効になっているものを 選択する

セットアップ

Page 15: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 16: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 17: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 18: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 19: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 20: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 21: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 22: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 23: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 24: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 25: Arduinoでプログラミングに触れてみよう 続編

Breadboard

• はんだ付けせずに回路設計をするボード

• 裏側で配線されている

Page 26: Arduinoでプログラミングに触れてみよう 続編

LEDを光らせてみよう

Page 27: Arduinoでプログラミングに触れてみよう 続編

回路設計

262221

• LEDは足の長い方が21番にくるように

• 抵抗はどれでもOK

Page 28: Arduinoでプログラミングに触れてみよう 続編

回路設計

• 13番ピンから赤

• + (電源供給) の役割

• GNDピンから青

• - の役割

Page 29: Arduinoでプログラミングに触れてみよう 続編

LEDを光らせてみよう

• Arduino IDE

• Arduinoでプログラミングする用のソフトウェア

Page 30: Arduinoでプログラミングに触れてみよう 続編

LEDを光らせてみよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

Page 31: Arduinoでプログラミングに触れてみよう 続編

LEDを光らせてみよう

ここをクリック

Page 32: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

回路を理解しよう

Page 33: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

回路を理解しよう

Page 34: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

回路を理解しよう

Page 35: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

回路を理解しよう

Page 36: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

回路を理解しよう

Page 37: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

回路を理解しよう

Page 38: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

回路を理解しよう

Page 39: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

回路を理解しよう

Page 40: Arduinoでプログラミングに触れてみよう 続編

回路を理解しよう

• +から回路をたどる

• LEDを通る

• 抵抗を通る

• ーにたどりつく

Page 41: Arduinoでプログラミングに触れてみよう 続編

• このような回路図

• 13番からLED

• LEDから抵抗

• 抵抗からGND

回路を理解しよう

Page 42: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

Page 43: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

2つのグループに分けられる

Page 44: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

Page 45: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

最初の1回だけ実行される

Page 46: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

最初の1回だけ実行される

繰り返し実行される

Page 47: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

← 13番ピンを  OUTPUTに使用する

Page 48: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

← 13番ピンを  OUTPUTに使用する

+として電流を出せるように

Page 49: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

← 13番ピンを  HIGHに設定する

Page 50: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

← 13番ピンを  HIGHに設定する

+から電流を出す

Page 51: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);  }

← LOWにすると  LEDは光らない

Page 52: Arduinoでプログラミングに触れてみよう 続編

LEDを点滅させてみようvoid  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);  }

Page 53: Arduinoでプログラミングに触れてみよう 続編

LEDを点滅させてみよう

ここをクリック

Page 54: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);  }

Page 55: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);  }

← 13番ピンを  HIGHに設定する

+から電流を出す

Page 56: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);  }

← 1000ms (1秒間) そのままにする

Page 57: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);  }

← 13番ピンを  LOWに設定する

=+からの電流を止める

Page 58: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);  }

← 1000ms (1秒間) そのままにする

Page 59: Arduinoでプログラミングに触れてみよう 続編

LEDを点滅させてみよう

• チャレンジ: プログラムを改造してみよう

• 0.1秒点灯 / 0.1秒消灯

• 1秒点灯 / 0.5秒消灯

• (0.5秒点灯 / 1秒消灯) x 2 → 1秒点灯 / 0.5秒消灯

Page 60: Arduinoでプログラミングに触れてみよう 続編

LEDを点滅させてみよう• チャレンジ: 0.1秒点灯 / 0.1秒消灯

void  loop()  {      digitalWrite(13,  HIGH);      delay(100);      digitalWrite(13,  LOW);      delay(100);  }

Page 61: Arduinoでプログラミングに触れてみよう 続編

LEDを点滅させてみよう• チャレンジ: 1秒点灯 / 0.5秒消灯

void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(500);  }

Page 62: Arduinoでプログラミングに触れてみよう 続編

LEDを点滅させてみよう

• 上級者向け: 回路とプログラムを改造してみよう

• 2つのLEDを点灯させてみよう

• setupとpinModeを同様に使えばよい

• 2つのLEDを点滅させてみよう

Page 63: Arduinoでプログラミングに触れてみよう 続編

LEDを点滅させてみよう• 上級者向け: 回路とプログラムを改造してみよう

• 2つのLEDを異なる周期で点滅させてみよう

• 1つ目は1秒ごと、2つ目は0.5秒ごとに点滅

• 1つ目は1秒ごと、2つ目は0.3秒ごとに点滅

• 変数と条件分岐(後述)を使えば良い

Page 64: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• CdSセンサー

• 赤茶色の部分がCdS(硫化カドミウム)

• 明るいと抵抗値が低く暗いと抵抗値が高くなる

Page 65: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

Page 66: Arduinoでプログラミングに触れてみよう 続編

回路設計

2923 28

• CdSセンサーはどっち向きに刺してもOK

• 抵抗はどれでもOK

Page 67: Arduinoでプログラミングに触れてみよう 続編

回路設計• 5Vピンから赤

• + (電源供給) の役割

• GNDピンから青

• - の役割

• A0ピンから緑

• センサーの値を読み取る役割

Page 68: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみようint  val;  

void  setup()  {      Serial.begin(9600);  }  

void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);  }

Page 69: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

ここをクリック

Page 70: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう• 「ツール」の「シリアルモニタ」を選択

• 右下が「9600 bps」になっていることを確認

Page 71: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• 手をかざして値の変化を見てみる

Page 72: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 73: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 74: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 75: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 76: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 77: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 78: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 79: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 80: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 81: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• CdSセンサーを通る

• ーにたどりつく

回路を理解しよう

Page 82: Arduinoでプログラミングに触れてみよう 続編

• +から回路をたどる

• 抵抗を通る

• 枝分かれ

• A0にたどりつく

• ーにたどりつく

回路を理解しよう

Page 83: Arduinoでプログラミングに触れてみよう 続編

回路を理解しよう

• このような回路図

• 5Vから抵抗

• 枝分かれしてA0

• センサーからGND

Page 84: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• CdSセンサー

• 赤茶色の部分がCdS(硫化カドミウム)

• 明るいと抵抗値が低く暗いと抵抗値が高くなる

Page 85: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• CdSセンサー

• 赤茶色の部分がCdS(硫化カドミウム)

• 明るいと抵抗値が低く暗いと抵抗値が高くなる

Page 86: Arduinoでプログラミングに触れてみよう 続編

回路を理解しよう

• 明るいとき

• センサーの抵抗値が高くなる

• A0の電圧が高くなる

Page 87: Arduinoでプログラミングに触れてみよう 続編

回路を理解しよう

• 暗いとき

• センサーの抵抗値が低くなる

• A0の電圧が低くなる

Page 88: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      Serial.begin(9600);  }  

void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);  }

プログラムを理解しよう← valという変数を宣言

Page 89: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

Page 90: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

int  val;  val  =  100;  delay(val);  val  =  200;  delay(val);

← 変数宣言   valという領域を  作る

Page 91: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

int  val;  val  =  100;  delay(val);  val  =  200;  delay(val);

val

← 変数宣言   valという領域を  作る

Page 92: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

int  val;  val  =  100;  delay(val);  val  =  200;  delay(val);

← 代入   valを100と  設定する 

← 変数宣言

val

Page 93: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

int  val;  val  =  100;  delay(val);  val  =  200;  delay(val);

← 代入   valを100と  設定する 

← 変数宣言

val

100

Page 94: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

int  val;  val  =  100;  delay(val);  val  =  200;  delay(val);

← 変数宣言

val

100← 代入  ← 100ミリ秒待つ

Page 95: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

int  val;  val  =  100;  delay(val);  val  =  200;  delay(val);

← 変数宣言

val

100← 代入 

← 代入   valを200と  設定する 

← 100ミリ秒待つ

Page 96: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

int  val;  val  =  100;  delay(val);  val  =  200;  delay(val);

← 変数宣言

val

200← 代入 

← 代入   valを200と  設定する 

← 100ミリ秒待つ

Page 97: Arduinoでプログラミングに触れてみよう 続編

← 代入 

プログラミングの基本概念• 変数 = 情報を記録しておくための領域

int  val;  val  =  100;  delay(val);  val  =  200;  delay(val);

← 変数宣言

val

200← 代入 

← 200ミリ秒待つ

← 100ミリ秒待つ

Page 98: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      Serial.begin(9600);  }  

void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);  }

プログラムを理解しよう← valという変数を宣言

Page 99: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      Serial.begin(9600);  }  

void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);  }

プログラムを理解しよう

← シリアル通信の  速度を設定

Page 100: Arduinoでプログラミングに触れてみよう 続編

• シリアル通信 = ArduinoとPC間での通信ができる       シリアルモニタで送受信ができる

プログラミングの基本概念

Page 101: Arduinoでプログラミングに触れてみよう 続編

• シリアル通信 = ArduinoとPC間での通信ができる       シリアルモニタで送受信ができる

プログラミングの基本概念

Serial.begin(9600); - 通信の速度を設定する

Page 102: Arduinoでプログラミングに触れてみよう 続編

• シリアル通信 = ArduinoとPC間での通信ができる       シリアルモニタで送受信ができる

プログラミングの基本概念

← PC側の設定と  一致していないと  正しく通信できない

Serial.begin(9600); - 通信の速度を設定する

Page 103: Arduinoでプログラミングに触れてみよう 続編

• シリアル通信 = ArduinoとPC間での通信ができる       シリアルモニタで送受信ができる

プログラミングの基本概念

Serial.begin(9600); - 通信の速度を設定する

Serial.println(データ);     - データを1行分PCへ送信する

Serial.print(データ);     - データをPCへ送信する(改行されない)

Page 104: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      Serial.begin(9600);  }  

void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);  }

プログラムを理解しよう

← A0ポートの電圧を  数値として読み取る   0~5Vが0~1023に対応

Page 105: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      Serial.begin(9600);  }  

void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);  }

プログラムを理解しよう

← valに記憶された  A0の値を  シリアル通信で送信

Page 106: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      Serial.begin(9600);  }  

void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);  }

プログラムを理解しよう

← 100ms (0.1秒間) 待つ

Page 107: Arduinoでプログラミングに触れてみよう 続編

回路を理解しよう

• 明るいとき

• センサーの抵抗値が低くなる

• A0の電圧が低くなる

Page 108: Arduinoでプログラミングに触れてみよう 続編

回路を理解しよう

• 暗いとき

• センサーの抵抗値が高くなる

• A0の電圧が高くなる

Page 109: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう• 手をかざして値の変化を見てみる

• 明るい時に低く、暗い時に高くなっているはず

Page 110: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• チャレンジ: プログラムを改造してみよう

• 0.5秒ごとに読み取った値を送る

• 送る値を明るい時は低く、暗い時は高いまま0~511にする

Page 111: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• チャレンジ: 0.5秒ごとに読み取った値を送る

void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(500);  }

Page 112: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• チャレンジ: 送る値を0~511にする

void  loop()  {      val  =  analogRead(0);      Serial.println(val  /  2);      delay(100);  }

analogReadで読み取る値は0~1023なので 2で割ると切り捨てられて0~511になる

Page 113: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• 上級者向け: 回路を改造してみよう

• プログラムはそのままでLEDを追加して暗い時ほど明るく光るようにする

• ヒント: 暗い時ほどLEDに    高い電圧がかかればよい

Page 114: Arduinoでプログラミングに触れてみよう 続編

センサーとLEDを組み合わせてみよう

Page 115: Arduinoでプログラミングに触れてみよう 続編

回路設計

• 右半分はさっきと同じ

• LEDは21番に足の長い方を

• 抵抗はどれでもOK2115 20

Page 116: Arduinoでプログラミングに触れてみよう 続編

回路設計

• A0ピンから緑

• センサーの値を読み取る役割

• 13番ピンから黄

• LEDに電気を流す役割

Page 117: Arduinoでプログラミングに触れてみよう 続編

センサーとLEDを組み合わせてみようint  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(100);  }

Page 118: Arduinoでプログラミングに触れてみよう 続編

センサーとLEDを組み合わせてみよう

ここをクリック

Page 119: Arduinoでプログラミングに触れてみよう 続編

• LEDの回路と センサーの回路をそのまま組み合わせた

• GNDは共通して-の列を使う

回路を理解しよう

Page 120: Arduinoでプログラミングに触れてみよう 続編

• LEDの回路と センサーの回路をそのまま組み合わせた

• GNDは共通して-の列を使う

回路を理解しよう

Page 121: Arduinoでプログラミングに触れてみよう 続編

← A0ポートの電圧を  数値として読み取る

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(100);  }

プログラムを理解しよう

Page 122: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(100);  }

プログラムを理解しよう

← 条件分岐

Page 123: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (条件)  {  

   処理1;  

}  else  {      処理2;  }

Page 124: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (

   

}  else  {

   }

条件にあてはまるとき  ・処理1は実行される ・処理2は無視される

if  (条件)  {  

   処理1;  

}

Page 125: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (

   

}  else  {

   }

条件にあてはまらないとき  ・処理1は無視される ・処理2は実行される

   else  {      処理2;  }

Page 126: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (条件)  {  

   処理;  }

条件にあてはまるときだけ 処理が実行される

Page 127: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (条件1)  {  

   処理1;  

}  else  if  (条件2)  {      処理2;  

}  else  {      処理3;  }

Page 128: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (

   

}  else  if  (

   

}  else  {

   }

if  (条件1)  {  

   処理1;  

} 条件1にあてはまるとき  ・処理1は実行される ・処理2は無視される  ・処理3は無視される

Page 129: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (

   

}  else  if  (

   

}  else  {

   }

   else  if  (条件2)  {      処理2;  

}  else  {      処理3;  }

条件1にあてはまらないとき

Page 130: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (

   

}  else  if  (

   

}  else  {

   }

   else  if  (条件2)  {      処理2;  

}

条件1にあてはまらず 条件2にあてはまるとき  ・処理1は無視される ・処理2は実行される  ・処理3は無視される

Page 131: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (

   

}  else  if  (

   

}  else  {

   }

   else  {      処理3;  }

条件1にあてはまらず 条件2もあてはまらないとき  ・処理1は無視される ・処理2は無視される  ・処理3は実行される

Page 132: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 条件分岐 = 状況に応じて実行内容を変える

if  (条件1)  {  

   処理1;  

}  else  if  (条件2)  {      処理2;  }

条件1にあてはまるとき 処理1が実行される

条件1にあてはまらず 条件2にあてはまるとき処理2は実行される

Page 133: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(100);  }

プログラムを理解しよう

← valが800より大きいか

Page 134: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(100);  }

プログラムを理解しよう

← valが800より大きいか

センサーの値が800より大きいか

Page 135: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(100);  }

プログラムを理解しよう

← valが800より大きいか

センサーの値が800より大きいか

≒ある程度以上明るいか

Page 136: Arduinoでプログラミングに触れてみよう 続編

int

void    }  

void    val  =                  }              }    }

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }                    delay(100);  }

プログラムを理解しよう

← 明るい時は  13番ピンをHIGHに

Page 137: Arduinoでプログラミングに触れてみよう 続編

int

void    }  

void    val  =                  }              }    }

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }                    delay(100);  }

プログラムを理解しよう

← 明るい時は  13番ピンをHIGHに

LEDに電流を送る=

Page 138: Arduinoでプログラミングに触れてみよう 続編

int

void    }  

void    val  =                  }              }    }

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);                      else  {          digitalWrite(13,  LOW);      }      delay(100);  }

プログラムを理解しよう

← 暗い時は  13番ピンをLOWに

Page 139: Arduinoでプログラミングに触れてみよう 続編

int

void    }  

void    val  =                  }              }    }

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);                      else  {          digitalWrite(13,  LOW);      }      delay(100);  }

プログラムを理解しよう

← 暗い時は  13番ピンをLOWに

LEDへの電流を止める

Page 140: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }  

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(100);  }

プログラムを理解しよう

← 100ms (0.1秒) 間待つ

Page 141: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• チャレンジ: プログラムを改造してみよう

• 明るい時に点灯し、暗い時に消灯させる

Page 142: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }

センサーを読み取ってみよう• チャレンジ: 明るい時に点灯・暗い時に消灯させる

void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  LOW);      }  else  {          digitalWrite(13,  HIGH);      }      delay(100);  }

HIGHとLOWを逆にすれば良い

Page 143: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• 上級者向け: 回路とプログラムを改造してみよう

• 2つのLEDを使って明るい時は1つのLEDを点灯暗い時はもう1つのLEDを点灯させる

Page 144: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• 上級者向け: 回路とプログラムを改造してみよう

• 3秒以上暗いと点灯

• ヒント: millis()で起動からの時間がわかる

• ヒント: 暗くなった瞬間の時間を記憶する変数

Page 145: Arduinoでプログラミングに触れてみよう 続編

加速度を読み取ってみよう

VddEnableGND

Out XOut YOut Z

• 3軸加速度センサー

• タテ・ヨコ・奥行きにかかる重力の大きさがわかる

• どれくらいの割合でかかっているかで傾きがわかる

• スマートフォンにも搭載

Page 146: Arduinoでプログラミングに触れてみよう 続編

加速度を読み取ってみよう

VddEnableGND

Out XOut YOut Z

• Vdd: 電源供給 (+)

• Enable: 通電しているときのみ    動作する

• GND: GNDにつなぐ (ー)

Page 147: Arduinoでプログラミングに触れてみよう 続編

加速度を読み取ってみよう

VddEnableGND

Out XOut YOut Z

• Out X: X軸の加速度

• Out Y: Y軸の加速度

• Out Z: Z軸の加速度

X軸

Y軸

Page 148: Arduinoでプログラミングに触れてみよう 続編

加速度を読み取ってみよう

Page 149: Arduinoでプログラミングに触れてみよう 続編

回路設計

• 上半分

• センサーの1, 2に+を接続

• センサーの3にーを接続

3027

Page 150: Arduinoでプログラミングに触れてみよう 続編

回路設計

• 下半分

• センサーの6が緑

• センサーの7が黄

• センサーの8が黒3027

Page 151: Arduinoでプログラミングに触れてみよう 続編

回路設計• A0ピンから黒

• Z軸のデータ

• A1ピンから黄

• Y軸のデータ

• A2ピンから緑

• X軸のデータ

Page 152: Arduinoでプログラミングに触れてみよう 続編

int  x,  y,  z;  

void  setup()  {      Serial.begin(9600);  }

加速度を読み取ってみようvoid  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);      delay(500);  }

Page 153: Arduinoでプログラミングに触れてみよう 続編

加速度を読み取ってみよう

ここをクリック

Page 154: Arduinoでプログラミングに触れてみよう 続編

加速度を読み取ってみよう• 「ツール」の「シリアルモニタ」を選択

• 右下が「9600 bps」になっていることを確認

Page 155: Arduinoでプログラミングに触れてみよう 続編

加速度を読み取ってみよう• ボードを傾けて変化を見てみる

• どの向きに傾けるとX軸, Y軸, Z軸がどう変化するか

Page 156: Arduinoでプログラミングに触れてみよう 続編

回路を理解しよう

• 加速度センサーと対応するピンを素直につないでいる

Page 157: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

int  x,  y,  z;  

void  setup()  {      Serial.begin(9600);  }

← x, y, zという3つの変数を宣言

Page 158: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

int  x,  y,  z;  

void  setup()  {      Serial.begin(9600);  }

← シリアル通信の速度を設定

Page 159: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);      delay(500);  }

← A2のX軸の値を読み取る

Page 160: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);      delay(500);  }

← A1のY軸の値を読み取る

Page 161: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);      delay(500);  }

← A0のZ軸の値を読み取る

Page 162: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);      delay(500);  }

← 読み取った値を  シリアル通信で送る

Page 163: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

   Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);

x = 50, y = 100, z = 150のとき

送信されたデータ「」

Page 164: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

   Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);

x = 50, y = 100, z = 150のとき

← 「X: 」を送信

送信されたデータ「X: 」

Page 165: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

   Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);

x = 50, y = 100, z = 150のとき

← 「50 」を送信

送信されたデータ「X: 50」

Page 166: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

   Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);

x = 50, y = 100, z = 150のとき

← 「, Y: 」を送信

送信されたデータ「X: 50, Y: 」

Page 167: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

   Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);

x = 50, y = 100, z = 150のとき

← 「100」を送信

送信されたデータ「X: 50, Y: 100」

Page 168: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

   Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);

x = 50, y = 100, z = 150のとき

← 「, Z: 」を送信

送信されたデータ「X: 50, Y: 100, Z: 」

Page 169: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

   Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);

x = 50, y = 100, z = 150のとき

← 「150」を送信して  改行する

送信されたデータ「X: 50, Y: 100, Z: 150」

Page 170: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);      delay(500);  }

← 読み取った値を  シリアル通信で送る

Page 171: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z);      delay(500);  }

← 500ms (0.5秒間) 待つ

Page 172: Arduinoでプログラミングに触れてみよう 続編

加速度とLEDを組み合わせてみよう

底面上面

• ブレッドボードをイラスト右側が底面になるように立てるとLEDが点灯するようにしたい

Page 173: Arduinoでプログラミングに触れてみよう 続編

加速度とLEDを組み合わせてみよう

Page 174: Arduinoでプログラミングに触れてみよう 続編

回路設計

• さっきの回路にLEDを足す

• 黄色の線がLEDの足の長い方と繋がる

• GNDはセンサーと共有

25

19

Page 175: Arduinoでプログラミングに触れてみよう 続編

回路設計

• さっきの回路にLEDを足す

• 黄色の線が13番ピンに

Page 176: Arduinoでプログラミングに触れてみよう 続編

int  x,  y,  z;  

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

加速度とLEDを組み合わせてみよう

void  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      if  (x  >  700)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(500);  }

Page 177: Arduinoでプログラミングに触れてみよう 続編

加速度とLEDを組み合わせてみよう

ここをクリック

Page 178: Arduinoでプログラミングに触れてみよう 続編

回路を理解しよう

• さっきの回路にLEDを足しただけ

Page 179: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

int  x,  y,  z;  

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

← 13番ピンをOUTPUTに使用

Page 180: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

← x軸の値が700を   超えたら  13番ピンのLEDを点灯

void  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      if  (x  >  700)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(500);  }

Page 181: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

← x軸の値が700より   低ければ  13番ピンのLEDを消灯

void  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      if  (x  >  700)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(500);  }

Page 182: Arduinoでプログラミングに触れてみよう 続編

加速度とLEDを組み合わせてみよう

上面

底面

• ブレッドボードをイラスト上部が底面になるように立ててもLEDが点灯するようにしたい

Page 183: Arduinoでプログラミングに触れてみよう 続編

加速度とLEDを組み合わせてみよう

void    x  =      y  =      z  =                  }              }    }

   if  (x  >  700  ||  y  >  700)  { ← この1行だけ  変更する

Page 184: Arduinoでプログラミングに触れてみよう 続編

加速度とLEDを組み合わせてみよう

ここをクリック

Page 185: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

← 条件が  変更されている

void    x  =      y  =      z  =                  }              }    }

   if  (x  >  700  ||  y  >  700)  {

Page 186: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念

x  >  700  ||  y  >  700  

   =  x  >  700  または  y  >  700  

x  >  700  &&  y  >  700  

   =  x  >  700  かつ  y  >  700  

• 二項演算子 = 「もしくは」「かつ」を表す

Page 187: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念

x  >  700  ||  y  >  700  ||  z  >  700  

   =  x  >  700  または  y  >  700  または z  >  700

x  >  700  &&  y  >  700  &&  z  >  700  

   =  x  >  700  かつ  y  >  700  かつ z  >  700  

• 二項演算子 = 「もしくは」「かつ」を表す

Page 188: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念• 二項演算子 = 「もしくは」「かつ」を表す

x  >  700  ||  y  >  700  &&  z  >  700  

   =  x  >  700  または「y  >  700  かつ  z  >  700」

(x  >  700  ||  y  >  700)  &&  z  >  700  

   =「x  >  700  または y  >  700」かつ z  >  700

Page 189: Arduinoでプログラミングに触れてみよう 続編

プログラミングの基本概念

x  >  700  ||  y  >  700  &&  z  >  700  

   =  x  >  700  または「y  >  700  かつ  z  >  700」

(x  >  700  ||  y  >  700)  &&  z  >  700  

   =「x  >  700  または y  >  700」かつ z  >  700

「もしくは」より「かつ」が優先される

• 二項演算子 = 「もしくは」「かつ」を表す

Page 190: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しよう

← x > 700 または   y > 700 のとき   LEDが点灯する

void    x  =      y  =      z  =                  }              }    }

   if  (x  >  700  ||  y  >  700)  {

Page 191: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• チャレンジ: 回路とプログラムを改造してみよう

• 上下をひっくり返したときにLEDが点灯するようにする

• ヒント: シリアル通信でひっくり返した時の    数値を確認するとよい

Page 192: Arduinoでプログラミングに触れてみよう 続編

int  val;  

void  setup()  {      pinMode(13,  OUTPUT);  }

センサーを読み取ってみよう• チャレンジ: 上下ひっくり返すと点灯

zについての 条件を指定する

void  loop()  {      x  =  analogRead(2);      y  =  analogRead(1);      z  =  analogRead(0);      if  (z  <  100)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(500);  }

Page 193: Arduinoでプログラミングに触れてみよう 続編

センサーを読み取ってみよう

• 上級者向け: 回路とプログラムを改造してみよう

• LEDを3つ使って、それぞれの方向に傾けた時にそれぞれ別のLEDが点灯するように

• ある方向に1回転した時にLEDが点灯するように

Page 194: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• まずワイヤー線2本の先っぽを切り取り軽くハサミを当てて皮膜を1cmほど外す

Page 195: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• ダブルギアボックスからモーターを1つ取り出しそれぞれの端子に線を刺して軽くねじる

Page 196: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• 電池ボックスをつなげて接続を確認する

Page 197: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• TA7291P - モータードライバ

• モーターの制御に使う1 10

Page 198: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう• TA7291P - モータードライバ

• 1 - GND

• 4 - 回転速度制御

• 今回は使わないので8につなぐ

• 8 - モーター用電源入力

• 電池ボックスにつなぐ

1 84

Page 199: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• TA7291P - モータードライバ

• 5, 6 - 回転方向制御

• Arduinoのピンにつなぐ

• 7 - 制御用電源入力

• Arduinoの5Vにつなぐ5 6 7

Page 200: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• TA7291P - モータードライバ

• 2, 10 - モーター制御

• モーター端子につなぐ2 10

Page 201: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

Page 202: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• ブレッドボードにモーターと電池ケースをつなげる

Page 203: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• 上の+とーの列に電池ボックスの+とーを刺す

Page 204: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• モータードライバを外すとこうなる

• 21から30の部分にモータードライバ

21 30

モーターへ

13番ピン

GND

12番ピン5V

Page 205: Arduinoでプログラミングに触れてみよう 続編

void  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(1000);  }

void  setup()  {      pinMode(12,  OUTPUT);      pinMode(13,  OUTPUT);  }

モーターを使ってみよう

Page 206: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

ここをクリック

Page 207: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• 1秒ごとに止まり、回転の向きが逆になるはず

• 部品が熱くなったり、焦げた匂いがしたりすればすぐに電池ボックスと5Vのピンを抜く

Page 208: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(1000);  }

モータードライバの 回転方向制御ピンにつながっている Arduinoの12,13番ピンの HIGH, LOWを制御する

Page 209: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(1000);  }

ブレーキ

Page 210: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(1000);  }

ブレーキ

逆転

Page 211: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(1000);  }

ブレーキ

逆転

ストップ

Page 212: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(1000);  }

ブレーキ

逆転

ストップ

正転

Page 213: Arduinoでプログラミングに触れてみよう 続編

プログラムを理解しようvoid  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(12,  HIGH);      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(1000);  }

ブレーキ= 電気的な抵抗で止める

逆転

ストップ = 摩擦のみで止める

正転

Page 214: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

• チャレンジ: プログラムを改造してみよう

• 2秒正転→2秒逆転

Page 215: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみよう

void  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(2000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(2000);  }

正転

逆転

• チャレンジ: 2秒正転→2秒逆転

Page 216: Arduinoでプログラミングに触れてみよう 続編

モーターを使ってみようvoid                                                }

切り替える際に ブレーキを挟んだほうが モーターの摩耗が 少なくなる

   digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(100);

   digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(100);

Page 217: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• もう1つのモーターについても線をつける

Page 218: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• これも電池ボックスをつなげて接続を確認する

Page 219: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• 説明書に従ってダブルギアボックスを組み立てる

• ギア比は114.7:1(Cタイプ)となるようにする

• 細かい部品が多いので無くさないようにすること

Page 220: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• 6角ネジの位置は短いシャフトで合わせるとよい

Page 221: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• これも電池ボックスをつなげて接続を確認する

Page 222: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

Page 223: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• 線対称的にモーターとモータードライバーを配置

• 電源・GNDは共有

Page 224: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• モータードライバーを外すとこうなる

• 21から30の部分にモータードライバ

モーターへ

13番ピン

GND

12番ピン5V

11番ピン10番ピン

モーターへ

Page 225: Arduinoでプログラミングに触れてみよう 続編

void  setup()  {      pinMode(10,  OUTPUT);      pinMode(11,  OUTPUT);      pinMode(12,  OUTPUT);      pinMode(13,  OUTPUT);  }

2つのモーターを使ってみようvoid  loop()  {      digitalWrite(10,  HIGH);      digitalWrite(11,  LOW);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(1000);      digitalWrite(10,  LOW);      digitalWrite(11,  LOW);      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(1000);  }

Page 226: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

ここをクリック

Page 227: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• チャレンジ: プログラムを改造してみよう

• 2秒正転→2秒逆転

Page 228: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

   digitalWrite(10,  LOW);      digitalWrite(11,  HIGH);      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(2000);      digitalWrite(10,  LOW);      digitalWrite(11,  LOW);      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(100);  }

void  loop()  {      digitalWrite(10,  HIGH);      digitalWrite(11,  LOW);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(2000);      digitalWrite(10,  LOW);      digitalWrite(11,  LOW);      digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(100);  

Page 229: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• 上級者向け: プログラムを改造してみよう

• 2つのモーターが異なる周期で動くようにする

• 1つのモーターは2秒正転→1秒逆転

• もう1つのモーターは1秒正転→1秒逆転

Page 230: Arduinoでプログラミングに触れてみよう 続編

独立して動くようにしてみよう

Page 231: Arduinoでプログラミングに触れてみよう 続編

独立して動くようにしてみよう

• 9V電池の赤をVinに黒をGNDにつなぐ

• USBを外しても動くようになる

Page 232: Arduinoでプログラミングに触れてみよう 続編

車輪をつけてみよう

Page 233: Arduinoでプログラミングに触れてみよう 続編

車輪をつけてみよう

Page 234: Arduinoでプログラミングに触れてみよう 続編

車輪をつけてみよう

• 必要な部品は、以下のとおり

• スポーツタイヤセット

• ユニバーサルプレート: 2チームで1箱

• ボールキャスター: 2チームで1セット

Page 235: Arduinoでプログラミングに触れてみよう 続編

車輪をつけてみよう• まず、裏側にダブルギアボックスをつける

• 説明書と違い、以下のように支えをつけるとよい

Page 236: Arduinoでプログラミングに触れてみよう 続編

車輪をつけてみよう

• 次に、ボールキャスターをつける

• 37mmになるように組み立てる

• 電池ボックスも両面テープで裏側につけておく

Page 237: Arduinoでプログラミングに触れてみよう 続編

車輪をつけてみよう

• Arduino、ブレッドボード、9V電池は表面に

• 先ほどと全く同じように配線する

• 左右で回転の向きが違う場合はモーターの接続先を逆にすればよい

Page 238: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

• チャレンジ: プログラムを改造してみよう

• 2秒右折→2秒左折

• ヒント: 左右のタイヤを逆向きに回転させると    曲がることができる

Page 239: Arduinoでプログラミングに触れてみよう 続編

2つのモーターを使ってみよう

                                       }

void                                        

   digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);

   digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);

Page 240: Arduinoでプログラミングに触れてみよう 続編

加速度センサーを載せてみよう

Page 241: Arduinoでプログラミングに触れてみよう 続編

加速度センサーを載せてみよう

• 加速度センサーのVccは3.3Vに接続する

• 3.3Vでも動作する

• GNDも忘れずにA0ピンA1ピンA2ピン

3.3V

Page 242: Arduinoでプログラミングに触れてみよう 続編

加速度センサーを載せてみよう

• アクティビティ: 自動で高いところへと向かう車を        作ってみよう

• 加速度に応じて進行方向を変える

• ヒント: 条件分岐と車の制御を組み合わせる

Page 243: Arduinoでプログラミングに触れてみよう 続編

加速度センサーを載せてみよう

• 上級者向け: 高いところで自動で止まるには?

• 上級者向け: 山が複数あるところで      一番高いところを見つけるには?

• ヒント: プログラミングでいうところの    最適化問題を物理的に再現してみました

• キーワード: 山登り法、焼きなまし法