Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,537 views

Published on

2016/01/10 筑波大学GFESTにて実施

Published in: Technology
  • Be the first to comment

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

  1. 1. Arduinoで
 プログラミングに触れてみよう 続編 2016/01/10 Hiromu Yakura
  2. 2. 自己紹介 • 矢倉 大夢 (やくら ひろむ) • 筑波大学 情報学群 情報科学類 1年 • 情報処理推進機構 未踏クリエイター
  3. 3. 目的 • プログラミングとはどういう作業かを知ってもらう • プログラミングで必要な論理的思考を感じてもらう • プログラミングの指示したとおりに動くという
 楽しさに触れてもらう
  4. 4. Arduino • マイクロコントローラ • コンピュータの機能が
 ひとつの基盤に • 3000円くらいで買える
  5. 5. セットアップ • Internet Explorer   を起動する • アドレスバーに arduino.cc と打ち込む • 左上の「Download」をクリック
  6. 6. セットアップ • 中央右の「Windows ZIP File for non admin install」
  7. 7. セットアップ • 右下の「JUST DOWNLOAD」
  8. 8. • ダウンロードしたファイルをダブルクリックで開き
 「ファイルをすべて解凍」をクリック • ダイアログが出てきたら「展開」をクリック • 解凍が終われば「arduino-1.6.7」フォルダを開く セットアップ
  9. 9. • 付属のUSBケーブルでArduinoを接続する • 「drivers」フォルダの「dpinst-x86.exe」を起動 • 「次へ」をクリックして、インストールを開始 セットアップ
  10. 10. セットアップ • 以下の様なダイアログが2-3回表示されるが
 すべて「インストールする」を選択する
  11. 11. セットアップ • 以下の画面になれば、インストール完了なので
 「完了」を押して終了する
  12. 12. セットアップ • 「arduino-1.6.7」の「arduino.exe」を起動
  13. 13. • 「ツール」の
 「マイコンボード」を
 「Arduino/Genuino Uno」に
  設定する セットアップ
  14. 14. • 「ツール」の
 「シリアルポート」のうち
  有効になっているものを
  選択する セットアップ
  15. 15. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  16. 16. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  17. 17. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  18. 18. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  19. 19. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  20. 20. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  21. 21. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  22. 22. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  23. 23. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  24. 24. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  25. 25. Breadboard • はんだ付けせずに
 回路設計をするボード • 裏側で配線されている
  26. 26. LEDを光らせてみよう
  27. 27. 回路設計 262221 • LEDは足の長い方が
 21番にくるように • 抵抗はどれでもOK
  28. 28. 回路設計 • 13番ピンから赤 • + (電源供給) の役割 • GNDピンから青 • − の役割
  29. 29. LEDを光らせてみよう • Arduino IDE • Arduinoで
 プログラミングする用の
 ソフトウェア
  30. 30. LEDを光らせてみよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   }
  31. 31. LEDを光らせてみよう ここをクリック
  32. 32. • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく 回路を理解しよう
  33. 33. • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく 回路を理解しよう
  34. 34. • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく 回路を理解しよう
  35. 35. • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく 回路を理解しよう
  36. 36. • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく 回路を理解しよう
  37. 37. • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく 回路を理解しよう
  38. 38. • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく 回路を理解しよう
  39. 39. • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく 回路を理解しよう
  40. 40. 回路を理解しよう • +から回路をたどる • LEDを通る • 抵抗を通る • ーにたどりつく
  41. 41. • このような回路図 • 13番からLED • LEDから抵抗 • 抵抗からGND 回路を理解しよう
  42. 42. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   }
  43. 43. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   } 2つのグループに分けられる
  44. 44. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   }
  45. 45. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   } 最初の1回だけ
 実行される
  46. 46. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   } 最初の1回だけ
 実行される 繰り返し
 実行される
  47. 47. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   } ← 13番ピンを
   OUTPUTに使用する
  48. 48. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   } ← 13番ピンを
   OUTPUTに使用する = +として
 電流を出せるように
  49. 49. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   } ← 13番ピンを
   HIGHに設定する
  50. 50. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   } ← 13番ピンを
   HIGHに設定する = +から電流を出す
  51. 51. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);   } ← LOWにすると
   LEDは光らない
  52. 52. LEDを点滅させてみよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);   }
  53. 53. LEDを点滅させてみよう ここをクリック
  54. 54. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);   }
  55. 55. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);   } ← 13番ピンを
   HIGHに設定する +から電流を出す =
  56. 56. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);   } ← 1000ms (1秒間)
  そのままにする
  57. 57. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);   } ← 13番ピンを
   LOWに設定する =+からの電流を止める
  58. 58. プログラムを理解しよう void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(1000);   } ← 1000ms (1秒間)
  そのままにする
  59. 59. LEDを点滅させてみよう • チャレンジ: プログラムを改造してみよう • 0.1秒点灯 / 0.1秒消灯 • 1秒点灯 / 0.5秒消灯 • (0.5秒点灯 / 1秒消灯) x 2 → 1秒点灯 / 0.5秒消灯
  60. 60. LEDを点滅させてみよう • チャレンジ: 0.1秒点灯 / 0.1秒消灯 void  loop()  {      digitalWrite(13,  HIGH);      delay(100);      digitalWrite(13,  LOW);      delay(100);   }
  61. 61. LEDを点滅させてみよう • チャレンジ: 1秒点灯 / 0.5秒消灯 void  loop()  {      digitalWrite(13,  HIGH);      delay(1000);      digitalWrite(13,  LOW);      delay(500);   }
  62. 62. LEDを点滅させてみよう • 上級者向け: 回路とプログラムを改造してみよう • 2つのLEDを点灯させてみよう • setupとpinModeを同様に使えばよい • 2つのLEDを点滅させてみよう
  63. 63. LEDを点滅させてみよう • 上級者向け: 回路とプログラムを改造してみよう • 2つのLEDを異なる周期で点滅させてみよう • 1つ目は1秒ごと、2つ目は0.5秒ごとに点滅 • 1つ目は1秒ごと、2つ目は0.3秒ごとに点滅 • 変数と条件分岐(後述)を使えば良い
  64. 64. センサーを読み取ってみよう • CdSセンサー • 赤茶色の部分がCdS
 (硫化カドミウム) • 明るいと抵抗値が低く
 暗いと抵抗値が高くなる
  65. 65. センサーを読み取ってみよう
  66. 66. 回路設計 2923 28 • CdSセンサーは
 どっち向きに
 刺してもOK • 抵抗はどれでもOK
  67. 67. 回路設計 • 5Vピンから赤 • + (電源供給) の役割 • GNDピンから青 • − の役割 • A0ピンから緑 • センサーの値を
 読み取る役割
  68. 68. センサーを読み取ってみよう int  val;   void  setup()  {      Serial.begin(9600);   }   void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);   }
  69. 69. センサーを読み取ってみよう ここをクリック
  70. 70. センサーを読み取ってみよう • 「ツール」の「シリアルモニタ」を選択 • 右下が「9600 bps」になっていることを確認
  71. 71. センサーを読み取ってみよう • 手をかざして値の変化を見てみる
  72. 72. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  73. 73. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  74. 74. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  75. 75. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  76. 76. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  77. 77. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  78. 78. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  79. 79. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  80. 80. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  81. 81. • +から回路をたどる • 抵抗を通る • 枝分かれ • CdSセンサーを通る • ーにたどりつく 回路を理解しよう
  82. 82. • +から回路をたどる • 抵抗を通る • 枝分かれ • A0にたどりつく • ーにたどりつく 回路を理解しよう
  83. 83. 回路を理解しよう • このような回路図 • 5Vから抵抗 • 枝分かれしてA0 • センサーからGND
  84. 84. センサーを読み取ってみよう • CdSセンサー • 赤茶色の部分がCdS
 (硫化カドミウム) • 明るいと抵抗値が低く
 暗いと抵抗値が高くなる
  85. 85. センサーを読み取ってみよう • CdSセンサー • 赤茶色の部分がCdS
 (硫化カドミウム) • 明るいと抵抗値が低く
 暗いと抵抗値が高くなる
  86. 86. 回路を理解しよう • 明るいとき • センサーの抵抗値が
 高くなる • A0の電圧が
 高くなる
  87. 87. 回路を理解しよう • 暗いとき • センサーの抵抗値が
 低くなる • A0の電圧が
 低くなる
  88. 88. int  val;   void  setup()  {      Serial.begin(9600);   }   void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);   } プログラムを理解しよう ← valという変数を宣言
  89. 89. プログラミングの基本概念 • 変数 = 情報を記録しておくための領域
  90. 90. プログラミングの基本概念 • 変数 = 情報を記録しておくための領域 int  val;   val  =  100;   delay(val);   val  =  200;   delay(val); ← 変数宣言   valという領域を
   作る
  91. 91. プログラミングの基本概念 • 変数 = 情報を記録しておくための領域 int  val;   val  =  100;   delay(val);   val  =  200;   delay(val); val ← 変数宣言   valという領域を
   作る
  92. 92. プログラミングの基本概念 • 変数 = 情報を記録しておくための領域 int  val;   val  =  100;   delay(val);   val  =  200;   delay(val); ← 代入   valを100と
   設定する  ← 変数宣言 val
  93. 93. プログラミングの基本概念 • 変数 = 情報を記録しておくための領域 int  val;   val  =  100;   delay(val);   val  =  200;   delay(val); ← 代入   valを100と
   設定する  ← 変数宣言 val 100
  94. 94. プログラミングの基本概念 • 変数 = 情報を記録しておくための領域 int  val;   val  =  100;   delay(val);   val  =  200;   delay(val); ← 変数宣言 val 100← 代入  ← 100ミリ秒待つ
  95. 95. プログラミングの基本概念 • 変数 = 情報を記録しておくための領域 int  val;   val  =  100;   delay(val);   val  =  200;   delay(val); ← 変数宣言 val 100← 代入  ← 代入   valを200と
   設定する  ← 100ミリ秒待つ
  96. 96. プログラミングの基本概念 • 変数 = 情報を記録しておくための領域 int  val;   val  =  100;   delay(val);   val  =  200;   delay(val); ← 変数宣言 val 200← 代入  ← 代入   valを200と
   設定する  ← 100ミリ秒待つ
  97. 97. ← 代入  プログラミングの基本概念 • 変数 = 情報を記録しておくための領域 int  val;   val  =  100;   delay(val);   val  =  200;   delay(val); ← 変数宣言 val 200← 代入  ← 200ミリ秒待つ ← 100ミリ秒待つ
  98. 98. int  val;   void  setup()  {      Serial.begin(9600);   }   void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);   } プログラムを理解しよう ← valという変数を宣言
  99. 99. int  val;   void  setup()  {      Serial.begin(9600);   }   void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);   } プログラムを理解しよう ← シリアル通信の
   速度を設定
  100. 100. • シリアル通信 = ArduinoとPC間での通信ができる
        シリアルモニタで送受信ができる プログラミングの基本概念
  101. 101. • シリアル通信 = ArduinoとPC間での通信ができる
        シリアルモニタで送受信ができる プログラミングの基本概念 Serial.begin(9600); - 通信の速度を設定する
  102. 102. • シリアル通信 = ArduinoとPC間での通信ができる
        シリアルモニタで送受信ができる プログラミングの基本概念 ← PC側の設定と
   一致していないと
   正しく通信できない Serial.begin(9600); - 通信の速度を設定する
  103. 103. • シリアル通信 = ArduinoとPC間での通信ができる
        シリアルモニタで送受信ができる プログラミングの基本概念 Serial.begin(9600); - 通信の速度を設定する Serial.println(データ);
     - データを1行分PCへ送信する Serial.print(データ);
     - データをPCへ送信する(改行されない)
  104. 104. int  val;   void  setup()  {      Serial.begin(9600);   }   void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);   } プログラムを理解しよう ← A0ポートの電圧を
   数値として読み取る   0 5Vが0 1023に対応
  105. 105. int  val;   void  setup()  {      Serial.begin(9600);   }   void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);   } プログラムを理解しよう ← valに記憶された
   A0の値を
   シリアル通信で送信
  106. 106. int  val;   void  setup()  {      Serial.begin(9600);   }   void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(100);   } プログラムを理解しよう ← 100ms (0.1秒間) 待つ
  107. 107. 回路を理解しよう • 明るいとき • センサーの抵抗値が
 低くなる • A0の電圧が
 低くなる
  108. 108. 回路を理解しよう • 暗いとき • センサーの抵抗値が
 高くなる • A0の電圧が
 高くなる
  109. 109. センサーを読み取ってみよう • 手をかざして値の変化を見てみる • 明るい時に低く、暗い時に高くなっているはず
  110. 110. センサーを読み取ってみよう • チャレンジ: プログラムを改造してみよう • 0.5秒ごとに読み取った値を送る • 送る値を明るい時は低く、暗い時は高いまま 0 511にする
  111. 111. センサーを読み取ってみよう • チャレンジ: 0.5秒ごとに読み取った値を送る void  loop()  {      val  =  analogRead(0);      Serial.println(val);      delay(500);   }
  112. 112. センサーを読み取ってみよう • チャレンジ: 送る値を0 511にする void  loop()  {      val  =  analogRead(0);      Serial.println(val  /  2);      delay(100);   } analogReadで読み取る値は0 1023なので 2で割ると切り捨てられて0 511になる
  113. 113. センサーを読み取ってみよう • 上級者向け: 回路を改造してみよう • プログラムはそのままでLEDを追加して
 暗い時ほど明るく光るようにする • ヒント: 暗い時ほどLEDに
     高い電圧がかかればよい
  114. 114. センサーとLEDを組み合わせてみよう
  115. 115. 回路設計 • 右半分は
 さっきと同じ • LEDは21番に
 足の長い方を • 抵抗は
 どれでもOK2115 20
  116. 116. 回路設計 • A0ピンから緑 • センサーの値を
 読み取る役割 • 13番ピンから黄 • LEDに電気を流す役割
  117. 117. センサーと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);   }
  118. 118. センサーとLEDを組み合わせてみよう ここをクリック
  119. 119. • LEDの回路と
 センサーの回路を
 そのまま
 組み合わせた • GNDは共通して
 −の列を使う 回路を理解しよう
  120. 120. • LEDの回路と
 センサーの回路を
 そのまま
 組み合わせた • GNDは共通して
 −の列を使う 回路を理解しよう
  121. 121. ← 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);   } プログラムを理解しよう
  122. 122. int  val;   void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      val  =  analogRead(0);      if  (val  >  800)  {          digitalWrite(13,  HIGH);      }  else  {          digitalWrite(13,  LOW);      }      delay(100);   } プログラムを理解しよう ← 条件分岐
  123. 123. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (条件)  {      処理1;   }  else  {      処理2;   }
  124. 124. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (     }  else  {     } 条件にあてはまるとき  ・処理1は実行される
  ・処理2は無視される if  (条件)  {      処理1;   }
  125. 125. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (     }  else  {     } 条件にあてはまらないとき  ・処理1は無視される
  ・処理2は実行される    else  {      処理2;   }
  126. 126. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (条件)  {      処理;   } 条件にあてはまるときだけ 処理が実行される
  127. 127. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (条件1)  {      処理1;   }  else  if  (条件2)  {      処理2;   }  else  {      処理3;   }
  128. 128. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (     }  else  if  (     }  else  {     } if  (条件1)  {      処理1;   } 条件1にあてはまるとき  ・処理1は実行される
  ・処理2は無視される  ・処理3は無視される
  129. 129. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (     }  else  if  (     }  else  {     }    else  if  (条件2)  {      処理2;   }  else  {      処理3;   } 条件1にあてはまらないとき
  130. 130. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (     }  else  if  (     }  else  {     }    else  if  (条件2)  {      処理2;   } 条件1にあてはまらず 条件2にあてはまるとき  ・処理1は無視される
  ・処理2は実行される  ・処理3は無視される
  131. 131. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (     }  else  if  (     }  else  {     }    else  {      処理3;   } 条件1にあてはまらず 条件2もあてはまらないとき  ・処理1は無視される
  ・処理2は無視される  ・処理3は実行される
  132. 132. プログラミングの基本概念 • 条件分岐 = 状況に応じて実行内容を変える if  (条件1)  {      処理1;   }  else  if  (条件2)  {      処理2;   } 条件1にあてはまるとき 処理1が実行される 条件1にあてはまらず 条件2にあてはまるとき
 処理2は実行される
  133. 133. 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より大きいか
  134. 134. 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より大きいか
  135. 135. 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より大きいか ≒ ある程度以上明るいか
  136. 136. 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に
  137. 137. 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に電流を送る=
  138. 138. int void     }   void    val  =                  }              }     } int  val;   void  setup()  {      pinMode(13,  OUTPUT);   }   void  loop()  {      val  =  analogRead(0);                      else  {          digitalWrite(13,  LOW);      }      delay(100);   } プログラムを理解しよう ← 暗い時は
   13番ピンをLOWに
  139. 139. 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への電流を止める =
  140. 140. 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秒) 間待つ
  141. 141. センサーを読み取ってみよう • チャレンジ: プログラムを改造してみよう • 明るい時に点灯し、暗い時に消灯させる
  142. 142. 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を
 逆にすれば良い
  143. 143. センサーを読み取ってみよう • 上級者向け: 回路とプログラムを改造してみよう • 2つのLEDを使って
 明るい時は1つのLEDを点灯
 暗い時はもう1つのLEDを点灯させる
  144. 144. センサーを読み取ってみよう • 上級者向け: 回路とプログラムを改造してみよう • 3秒以上暗いと点灯 • ヒント: millis()で起動からの時間がわかる • ヒント: 暗くなった瞬間の時間を記憶する変数
  145. 145. 加速度を読み取ってみよう Vdd Enable GND OutX OutY OutZ • 3軸加速度センサー • タテ・ヨコ・奥行きにかかる
 重力の大きさがわかる • どれくらいの割合で
 かかっているかで
 傾きがわかる • スマートフォンにも搭載
  146. 146. 加速度を読み取ってみよう Vdd Enable GND OutX OutY OutZ • Vdd: 電源供給 (+) • Enable: 通電しているときのみ
     動作する • GND: GNDにつなぐ (ー)
  147. 147. 加速度を読み取ってみよう Vdd Enable GND OutX OutY OutZ • Out X: X軸の加速度 • Out Y: Y軸の加速度 • Out Z: Z軸の加速度 X軸 Y軸
  148. 148. 加速度を読み取ってみよう
  149. 149. 回路設計 • 上半分 • センサーの1, 2に+を接続 • センサーの3にーを接続 3027
  150. 150. 回路設計 • 下半分 • センサーの6が緑 • センサーの7が黄 • センサーの8が黒 3027
  151. 151. 回路設計 • A0ピンから黒 • Z軸のデータ • A1ピンから黄 • Y軸のデータ • A2ピンから緑 • X軸のデータ
  152. 152. 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);   }
  153. 153. 加速度を読み取ってみよう ここをクリック
  154. 154. 加速度を読み取ってみよう • 「ツール」の「シリアルモニタ」を選択 • 右下が「9600 bps」になっていることを確認
  155. 155. 加速度を読み取ってみよう • ボードを傾けて変化を見てみる • どの向きに傾けるとX軸, Y軸, Z軸がどう変化するか
  156. 156. 回路を理解しよう • 加速度センサーと
 対応するピンを
 素直につないでいる
  157. 157. プログラムを理解しよう int  x,  y,  z;   void  setup()  {      Serial.begin(9600);   } ← x, y, zという3つの変数を宣言
  158. 158. プログラムを理解しよう int  x,  y,  z;   void  setup()  {      Serial.begin(9600);   } ← シリアル通信の速度を設定
  159. 159. プログラムを理解しよう 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軸の値を読み取る
  160. 160. プログラムを理解しよう 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軸の値を読み取る
  161. 161. プログラムを理解しよう 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軸の値を読み取る
  162. 162. プログラムを理解しよう 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);   } ← 読み取った値を
   シリアル通信で送る
  163. 163. プログラムを理解しよう    Serial.print("X:  ");      Serial.print(x);      Serial.print(",  Y:  ");      Serial.print(y);      Serial.print(",  Z:  ");      Serial.println(z); x = 50, y = 100, z = 150のとき 送信されたデータ「」
  164. 164. プログラムを理解しよう    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: 」
  165. 165. プログラムを理解しよう    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」
  166. 166. プログラムを理解しよう    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: 」
  167. 167. プログラムを理解しよう    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」
  168. 168. プログラムを理解しよう    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: 」
  169. 169. プログラムを理解しよう    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」
  170. 170. プログラムを理解しよう 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);   } ← 読み取った値を
   シリアル通信で送る
  171. 171. プログラムを理解しよう 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秒間) 待つ
  172. 172. 加速度とLEDを組み合わせてみよう 底面上面 • ブレッドボードをイラスト右側が底面になるように
 立てるとLEDが点灯するようにしたい
  173. 173. 加速度とLEDを組み合わせてみよう
  174. 174. 回路設計 • さっきの回路にLEDを足す • 黄色の線がLEDの
 足の長い方と繋がる • GNDはセンサーと共有 25 19
  175. 175. 回路設計 • さっきの回路にLEDを足す • 黄色の線が13番ピンに
  176. 176. 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);   }
  177. 177. 加速度とLEDを組み合わせてみよう ここをクリック
  178. 178. 回路を理解しよう • さっきの回路に
 LEDを足しただけ
  179. 179. プログラムを理解しよう int  x,  y,  z;   void  setup()  {      Serial.begin(9600);      pinMode(13,  OUTPUT);   } ← 13番ピンをOUTPUTに使用
  180. 180. プログラムを理解しよう ← 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);   }
  181. 181. プログラムを理解しよう ← 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);   }
  182. 182. 加速度とLEDを組み合わせてみよう 上面 底面 • ブレッドボードをイラスト上部が底面になるように
 立ててもLEDが点灯するようにしたい
  183. 183. 加速度とLEDを組み合わせてみよう void    x  =      y  =      z  =                  }              }     }    if  (x  >  700  ||  y  >  700)  { ← この1行だけ
   変更する
  184. 184. 加速度とLEDを組み合わせてみよう ここをクリック
  185. 185. プログラムを理解しよう ← 条件が
   変更されている void    x  =      y  =      z  =                  }              }     }    if  (x  >  700  ||  y  >  700)  {
  186. 186. プログラミングの基本概念 x  >  700  ||  y  >  700      =  x  >  700  または  y  >  700   x  >  700  &&  y  >  700      =  x  >  700  かつ  y  >  700   • 二項演算子 = 「もしくは」「かつ」を表す
  187. 187. プログラミングの基本概念 x  >  700  ||  y  >  700  ||  z  >  700      =  x  >  700  または  y  >  700  または z  >  700 x  >  700  &&  y  >  700  &&  z  >  700      =  x  >  700  かつ  y  >  700  かつ z  >  700   • 二項演算子 = 「もしくは」「かつ」を表す
  188. 188. プログラミングの基本概念 • 二項演算子 = 「もしくは」「かつ」を表す x  >  700  ||  y  >  700  &&  z  >  700      =  x  >  700  または「y  >  700  かつ  z  >  700」 (x  >  700  ||  y  >  700)  &&  z  >  700      =「x  >  700  または y  >  700」かつ z  >  700
  189. 189. プログラミングの基本概念 x  >  700  ||  y  >  700  &&  z  >  700      =  x  >  700  または「y  >  700  かつ  z  >  700」 (x  >  700  ||  y  >  700)  &&  z  >  700      =「x  >  700  または y  >  700」かつ z  >  700 「もしくは」より「かつ」が優先される • 二項演算子 = 「もしくは」「かつ」を表す
  190. 190. プログラムを理解しよう ← x > 700 または   y > 700 のとき   LEDが点灯する void    x  =      y  =      z  =                  }              }     }    if  (x  >  700  ||  y  >  700)  {
  191. 191. センサーを読み取ってみよう • チャレンジ: 回路とプログラムを改造してみよう • 上下をひっくり返したときに
 LEDが点灯するようにする • ヒント: シリアル通信でひっくり返した時の
     数値を確認するとよい
  192. 192. 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);   }
  193. 193. センサーを読み取ってみよう • 上級者向け: 回路とプログラムを改造してみよう • LEDを3つ使って、それぞれの方向に傾けた時に
 それぞれ別のLEDが点灯するように • ある方向に1回転した時にLEDが点灯するように
  194. 194. モーターを使ってみよう • まずワイヤー線2本の先っぽを切り取り
 軽くハサミを当てて皮膜を1cmほど外す
  195. 195. モーターを使ってみよう • ダブルギアボックスからモーターを1つ取り出し
 それぞれの端子に線を刺して軽くねじる
  196. 196. モーターを使ってみよう • 電池ボックスを
 つなげて
 接続を確認する
  197. 197. モーターを使ってみよう • TA7291P - モータードライバ • モーターの制御に使う 1 10
  198. 198. モーターを使ってみよう • TA7291P - モータードライバ • 1 - GND • 4 - 回転速度制御 • 今回は使わないので
 8につなぐ • 8 - モーター用電源入力 • 電池ボックスにつなぐ 1 84
  199. 199. モーターを使ってみよう • TA7291P - モータードライバ • 5, 6 - 回転方向制御 • Arduinoのピンにつなぐ • 7 - 制御用電源入力 • Arduinoの5Vにつなぐ 5 6 7
  200. 200. モーターを使ってみよう • TA7291P - モータードライバ • 2, 10 - モーター制御 • モーター端子につなぐ 2 10
  201. 201. モーターを使ってみよう
  202. 202. モーターを使ってみよう • ブレッドボードに
 モーターと電池ケースを
 つなげる
  203. 203. モーターを使ってみよう • 上の+とーの列に
 電池ボックスの
 +とーを刺す
  204. 204. モーターを使ってみよう • モータードライバを
 外すとこうなる • 21から30の部分に
 モータードライバ 21 30 モーターへ 13番ピン GND 12番ピン 5V
  205. 205. 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);   } モーターを使ってみよう
  206. 206. モーターを使ってみよう ここをクリック
  207. 207. モーターを使ってみよう • 1秒ごとに止まり、回転の向きが逆になるはず • 部品が熱くなったり、焦げた匂いがしたりすれば
 すぐに電池ボックスと5Vのピンを抜く
  208. 208. プログラムを理解しよう 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を制御する
  209. 209. プログラムを理解しよう 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);   } ブレーキ
  210. 210. プログラムを理解しよう 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);   } ブレーキ 逆転
  211. 211. プログラムを理解しよう 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);   } ブレーキ 逆転 ストップ
  212. 212. プログラムを理解しよう 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);   } ブレーキ 逆転 ストップ 正転
  213. 213. プログラムを理解しよう 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);   } ブレーキ
 = 電気的な抵抗で止める 逆転 ストップ = 摩擦のみで止める 正転
  214. 214. モーターを使ってみよう • チャレンジ: プログラムを改造してみよう • 2秒正転→2秒逆転
  215. 215. モーターを使ってみよう void  loop()  {      digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);      delay(2000);      digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);      delay(2000);   } 正転 逆転 • チャレンジ: 2秒正転→2秒逆転
  216. 216. モーターを使ってみよう void                                                 } 切り替える際に ブレーキを挟んだほうが モーターの摩耗が 少なくなる    digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(100);    digitalWrite(12,  LOW);      digitalWrite(13,  LOW);      delay(100);
  217. 217. 2つのモーターを使ってみよう • もう1つのモーターについても線をつける
  218. 218. 2つのモーターを使ってみよう • これも
 電池ボックスを
 つなげて
 接続を確認する
  219. 219. 2つのモーターを使ってみよう • 説明書に従ってダブルギアボックスを組み立てる • ギア比は114.7:1(Cタイプ)となるようにする • 細かい部品が多いので無くさないようにすること
  220. 220. 2つのモーターを使ってみよう • 6角ネジの位置は短いシャフトで合わせるとよい
  221. 221. 2つのモーターを使ってみよう • これも
 電池ボックスを
 つなげて
 接続を確認する
  222. 222. 2つのモーターを使ってみよう
  223. 223. 2つのモーターを使ってみよう • 線対称的にモーターと
 モータードライバーを配置 • 電源・GNDは共有
  224. 224. 2つのモーターを使ってみよう • モータードライバーを
 外すとこうなる • 21から30の部分に
 モータードライバ モーターへ 13番ピン GND 12番ピン 5V 11番ピン 10番ピン モーターへ
  225. 225. 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);   }
  226. 226. 2つのモーターを使ってみよう ここをクリック
  227. 227. 2つのモーターを使ってみよう • チャレンジ: プログラムを改造してみよう • 2秒正転→2秒逆転
  228. 228. 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);  
  229. 229. 2つのモーターを使ってみよう • 上級者向け: プログラムを改造してみよう • 2つのモーターが異なる周期で動くようにする • 1つのモーターは2秒正転→1秒逆転 • もう1つのモーターは1秒正転→1秒逆転
  230. 230. 独立して動くようにしてみよう
  231. 231. 独立して動くようにしてみよう • 9V電池の赤をVinに
 黒をGNDにつなぐ • USBを外しても
 動くようになる
  232. 232. 車輪をつけてみよう
  233. 233. 車輪をつけてみよう
  234. 234. 車輪をつけてみよう • 必要な部品は、以下のとおり • スポーツタイヤセット • ユニバーサルプレート: 2チームで1箱 • ボールキャスター: 2チームで1セット
  235. 235. 車輪をつけてみよう • まず、裏側にダブルギアボックスをつける • 説明書と違い、以下のように支えをつけるとよい
  236. 236. 車輪をつけてみよう • 次に、ボールキャスターをつける • 37mmになるように組み立てる • 電池ボックスも両面テープで裏側につけておく
  237. 237. 車輪をつけてみよう • Arduino、ブレッドボード、9V電池は表面に • 先ほどと全く同じように配線する • 左右で回転の向きが違う場合は
 モーターの接続先を逆にすればよい
  238. 238. 2つのモーターを使ってみよう • チャレンジ: プログラムを改造してみよう • 2秒右折→2秒左折 • ヒント: 左右のタイヤを逆向きに回転させると
     曲がることができる
  239. 239. 2つのモーターを使ってみよう                                         } void                                            digitalWrite(12,  HIGH);      digitalWrite(13,  LOW);    digitalWrite(12,  LOW);      digitalWrite(13,  HIGH);
  240. 240. 加速度センサーを載せてみよう
  241. 241. 加速度センサーを載せてみよう • 加速度センサーのVccは
 3.3Vに接続する • 3.3Vでも動作する • GNDも忘れずに A0ピン A1ピン A2ピン 3.3V
  242. 242. 加速度センサーを載せてみよう • アクティビティ: 自動で高いところへと向かう車を
         作ってみよう • 加速度に応じて進行方向を変える • ヒント: 条件分岐と車の制御を組み合わせる
  243. 243. 加速度センサーを載せてみよう • 上級者向け: 高いところで自動で止まるには? • 上級者向け: 山が複数あるところで
       一番高いところを見つけるには? • ヒント: プログラミングでいうところの
     最適化問題を物理的に再現してみました • キーワード: 山登り法、焼きなまし法

×