(農業)情報工学・課題 (2019/12/26))

 Arduino入門(1)

今回の講義では、コンピュータを用いて現実世界の機器を制御する手法を学ぶ。具体的にはArduinoを用いる。
Arduinoの取り組みでは、2−3人がチームとなって、相談しながら課題に取り組む。
課題としてはArduinoを用いて何かの「作品」を作成し、その作品の概要を全員の前で「プレゼンテーション」してもらう予定である。(2020年1月16日の予定)
What is Arduino
Arduino(アルドゥイーノ)とは、ハードウェアの「Arduinoボード」、およびソフトウェアの「Arduino IDE」(統合開発環境:Integrated Development Environment)から構成されるシステムである。
もともとは安価で簡便なデジタル制御装置を作り販売するプロジェクトとして、2005年にイタリアで5人の人物によって立ち上がった「Arduinoプロジェクト」が元になっている。それが、きわめて安価でオープンなものとして出来たおかげもあり、数年のうちに全世界に広く普及した。現在は「Arduino IDE」の管理を行い開発コミュニティの窓口となる非営利団体Arduino Foundation、およびArduino関連品の販売の一元管理を行う営利団体Arduino Holdingが関わっている。
Arduino - ウィキペディア:https://ja.wikipedia.org/wiki/Arduino
アルデュイーノ公式サイト:https://www.arduino.cc/
Arduino UNO R3
Arduinoは回路が公開されているオープンソースハードウェアであるため、誰でも部品を調達して自分自身の手でArduinoを組み立てることもできるし、組み立て済みの基板を購入することもできる。今回はHWAYEH社製の互換機を利用する。この種の互換機は、アマゾンやアリババなどで入手することが可能である。
アマゾン
アリババ

Arduino Variation

1.基本モデル「Arduino Uno」

今回の実習で用いるArduino Unoは、Arduino入門用の基本モデルである。デジタル入出力(14CH)、アナログ入力(6CH)を装備しており、多数の電子部品を制御することが可能である。
サイズ:74.9×53.3mm、CPU:ATmega328P(16MHz)、RAM:2KB、FlashMemory(32KB)

2.入出力端子拡張版「Arduino Mega」

Arduino Megaは入出力の拡張版モデルである。デジタル入出力(54CH)、アナログ入力(16CH)と拡張されている。またメモリも大容量である。
サイズ:101.52×53.3mm、CPU:ATmega2560(16MHz)、RAM:8KB、FlashMemory(256KB)

3.入出力端子拡張版「Arduino Due」

Arduino DueはArduino Megaに加えて、アナログ出力端子(2CH)を備え、またCPUの動作周波数が2倍の32MHzになっている。
サイズ:101.52×53.3mm、CPU:AT91SAM3X8E(32MHz)、RAM:8KB、FlashMemory(512KB)

5.小型モデル「Arduino Nano」

機能的にはArduino Unoとほぼ同等であるが、サイズが小さいため、各種の機器などに直接組み込む事を想定した基板となっている。ほぼ同様の「Arduino Micro」もある。
サイズ:48.2×17.8mm、CPU:ATmega328Au(32MHz)、RAM:2KB、FlashMemory(32KB)

6.無線通信機能搭載「Arduino Yún」

Arduino Unoに無線LAN機能を搭載したArduino Yúnがある。デジタル入出力(20CH)、アナログ入力(8CH)と、若干入出力機能は拡張している。
サイズ:74.9×53.3mm、CPU:ATmega328P(16MHz)、RAM:2.5KB、FlashMemory(32KB)
Arduino Kit
今回Arduinoの授業を行うためのキットは、次の部品を整えている。
  1. Arduino Uno R3(互換機)
  2. USBケーブル
  3. ブレッドボード
  4. LCDディスプレイ(16x2)
  5. LED5色
  6. ブザー
  7. CdSセンサ(光センサー)
  8. 小型スイッチ
  9. 温湿度センサと接続ケーブル
  10. 水濡れセンサと接続ケーブル
  11. 9V乾電池(3.5㎜コネクタ)
  12. 配線用ケーブル(オスーオス、オスーメス)
  13. 抵抗
Arduino IDE
Arduinoのプログラムを開発するためには、開発環境の「Arduino IDE」を準備する必要がある。ここでIDEとは、Integrated Development Environment(統合開発環境)の略である。Arduino IDEはWindows、macOS、LinuxなどのOS向けに無償で配布されている。
WebブラウザでArduino IDEの配布サイトにアクセスする。「Download the Arduino IDE」にある「Winodws Installer」をクリックする。寄付について尋ねられるが「JUST DOWNLOAD」をクリックすれば無償でダウンロードできる。
現在のパソコンラボのPCでは、ダウンロードと解凍に非常に時間が必要(約20分程度)であるが、気長に待っていること。ダウンロードしたファイルを実行すると、インストーラが起動する。あとはインストーラの手順に従って進むことで導入が完了する。
インストールが完了したら、スタートメニューの「Arduino」を選択することで起動できる。パソコンとArduinoは、USBケーブルで接続する。その際にはUSBドライバが必要である。今回のAiduino Unoは、CH341というデバイスドライバが必要であるが、このインストールには【管理者権限】が必要である。今回のパソコンラボのPCには、予めインストールしてある。(なお、情報基盤センター所有のMacなどには現時点ではインストールが出来ない。)
なお、この接続時にはトラブルの発生が予想されるため、正常に動作しないときには教員のサポートを求めること。
IDE Screen
IDEの基本画面は、このようになっている。
Arduinoではプログラムのことをスケッチと呼ぶ。実際にArduinoを利用するためには、このスケッチの文法チェックをしてから、Arduinoに送り込む必要がある。その際の手順は次の通りである。
  1. 画面左上のチェックマークで、作成したスケッチの検証を行う
  2. その右側の転送ボタンで、Arduinoにスケッチを送付する
LED Blink
さっそくArduinoの最初の課題「LED点滅」に取り組む。
LED点滅は、通常「Lチカ」として知られていて、ArduinoやRasbery Piなどの動作確認のためのプログラムとして広く用いられている。このスケッチは、ArduinoIDEのサンプルとして用意されているので、次の手順で呼び出す。

ファイル→スケッチ例→01.Basic→Blink

IDEの画面をスクロールすると、次の様なプログラム部分が示されている。
  1. // the setup function runs once when you press reset or power the board
  2. void setup() {
  3. // initialize digital pin LED_BUILTIN as an output.
  4. pinMode(LED_BUILTIN, OUTPUT);
  5. }
  6. // the loop function runs over and over again forever
  7. void loop() {
  8. digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
  9. delay(1000); // wait for a second
  10. digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
  11. delay(1000); // wait for a second
  12. }
  • 4行目で本体内蔵のLEDのポートID(LED_BUILTIN)を、出力ポートとして設定する。
    (実際には13番ポートに割り当てられている。)
  • 8行目でLEDポートにHIGH信号を送り、LEDを点灯させる。
  • 9行目で1000ms待つ。(1秒間点灯)
  • 10行目でLEDポートにLOW信号を送り、LEDを消灯させる。
  • 11行目で1000ms待つ。(1秒間消灯)
このスケッチと同様の物は、動作チェックのために、最初からArduinoUNOに転送されている。そのため、接続した状態で、すでに2つあるLEDの1つは1秒おきに点滅を繰り返している。
では、実際にスケッチの動作を確認するために、9行目と11行目の点灯、消灯時間を変更してみる。200msなどに変更すると、動作の確認が出来る。
変更したら、1.スケッチの検証を行い、2.Arduinoへの送付。を行う。
自分の設定したタイミングで、LEDが点滅を行えば、見事に【Lチカ】の成功である。
Breadboard
Arduino活用の次の段階は、外部回路の作成である。そのためには、【ブレッドボード(Breadboard)】を用いる。ブレッドボードとは、もともとはパン生地をこねるまな板であったが、日本では電子回路の試作を行うための部品を指している。
このブレッドボードはSolderless(半田つけ不要)であり、ジャンパーピンを差し込むだけで、回路が試作できるように、内部で結線がされている。左右に長く伸びている「+」「−」の部分は、縦方向にすべて結線されている。電源供給や共通アースに用いられる。中央付近のabcde(又はfghij)と表示されている部分は、横方向に結線されている。(abcdeとfghijは、絶縁されている。)
 今度は、12番ポートにLチカ信号を出力するための、回路を作成した。
LEDには極性があり、短い足をカソード側(ー)、長い足をアノード側(+)に接続する。また今回は、LEDに大きな電流が流れすぎないように抵抗を接続している。
抵抗値はカラーコードで、記述されている。
01 23 45 67 89
誤差5%誤差10%
抵抗のカラーコードには4本線のタイプと5本線のタイプがあり、最初の2−3桁は数字で、次の桁(3/4)は10の乗数、最後の桁(4/5)は誤差になっている。
この回路で用いた抵抗は、5本線のタイプで、右から茶黒黒茶茶(10011)なので、100x10^1,誤差1%となっている。
以下の部分はエラーがあるのでストライクアウトしました。(修正:2020/1/8)
なお、12番ポートにLチカ信号を送るためのスケッチは次の様になる。(LED_BUITINを12番ポートに変更している。)
  1. // initialize digital pin LED_BUILTIN as an output.
  2. LED_BUILTIN=12;
  3. pinMode(LED_BUILTIN, OUTPUT);
このように修正して、スケッチを<検証し>、<Arguingに転送>して、12番ポートのLEDが点滅したら、成功である。
正しい12番ポート対応方法です。(修正済み:2020/1/8)
2019年末のプログラムでは、LED_BUITINを12番ポートに変更するサンプルであったが、LED_BUILTINを12番に変更する事は出来ないので、出力ポートをすべて12と書き換えるスケッチとする。
  1. // the setup function runs once when you press reset or power the board
  2. void setup() {
  3. // initialize digital pin LED_BUILTIN as an output.
  4. // 出力ポートを12番に設定する。
  5. pinMode(12, OUTPUT);
  6. }
  7. // the loop function runs over and over again forever
  8. void loop() {
  9. digitalWrite(12, HIGH); // turn the LED on (HIGH is the voltage level)
  10. delay(1000); // wait for a second
  11. digitalWrite(12, LOW); // turn the LED off by making the voltage LOW
  12. delay(1000); // wait for a second
  13. }
このように修正して、スケッチを<検証し>、<Arguingに転送>して、12番ポートのLEDが点滅したら、成功である。

Team Program
今回の授業では、受講者を16チームに分けた。自分がどのチームに所属するかは、割り当て表を作成した。1チームが2〜4人になるようにランダムに割り当てた。 チーム名は、0〜Fである。自分の学生証番号からチーム名を見付ける一覧表を元に自分のチームを確認して欲しい。また、逆にチーム毎の一覧表を見れば、自分と同じチームの人の学生証番号がわかるようにしている。自分と同じ班を見付けて、互いに自己紹介してチーム結成をして欲しい。。
教室の最も窓側にチーム0−6,中央にチーム7−B、廊下側にチームC−Fという仮の配置を考えているが、人数によって、座る場所を工夫して欲しい。いずれにせよ、1チームに1台は、ArduinoIDEが動作するPCを確保しなければならない。
もしかしたら、座席が不足するかもしれないが、そのあたりは話し合いなどによって、民主的に解決してほしい
Today's Assignments

本日の課題は、次の通りである。

  1. Lチカを成功させる。
  2. Arduinoの接続、スケッチの修正、転送、実行が出来るようになること。
  3. 自分のクラス(チーム)を確認すること。
  4. チーム毎に集まって、以下のことを相談すること。
    1. チーム名(何か考案すること)を決めること。
    2. チームとしての役割分担や取り組む方針を決めること。
    3. チーム構成員一覧表を完成させること。(先生に提出)

プレゼンテーションのテーマ

Smart Agriclture
スマート農業


(外部リンク:Arduino電子工作の基本