Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 243 Ad
Advertisement

More Related Content

Slideshows for you (20)

Advertisement

Similar to Arduinoでプログラミングに触れてみよう 続編 (20)

Advertisement

Recently uploaded (20)

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. 加速度センサーを載せてみよう • 上級者向け: 高いところで自動で止まるには? • 上級者向け: 山が複数あるところで
       一番高いところを見つけるには? • ヒント: プログラミングでいうところの
     最適化問題を物理的に再現してみました • キーワード: 山登り法、焼きなまし法

×