(<農業>情報工学・課題:2020/12/10)

Simulation01

コンピュータを用いて現実世界の機器を制御する手法を学ぶ。
ただ、本年はオンライン実習となって、実際の機器を用いた演習ができないため、コンピュータシミュレーションとして演習を行う。
最初に、準備としてブロック形言語の演習(ゲーム?)を行ってブロック形言語について理解を深めてもらう。

Block Languages

ScratchとBlockly

まず、ブロック型プログラミング言語のScratch(スクラッチ)を説明する。Scratchは、2006年にMIT Media Laboによって開発された。もともとこの種の教育用プログラミング言語は、LOGO, Turtle Graphics,そして1980年代に開発されたSqueakの流れを組んでいる。
一方、Google社は、教育用ブロック言語、Blockly(ブロックリー)を開発しているが、このBlocklyもScratchに組み込まれ、発展的に融合することになっている。(2020年12月現在実現していないようである。) このブロックリーゲームは、少しずつ難しい課題にチャレンジしながら、ブロックリーを学べるようになっている。少し時間を確保して、チームで演習(ゲーム?)を行ってみる。特に、迷路は最後の課題まで挑戦してみること。
なお、音楽は少し癖があるので、解答画像のサンプルを掲載しておく。 この種のブロック型のプログラミング環境を見たときには、単に「子ども向け」の環境だと思ってしまうかも知れない。しかし、実際には、プログラミングに関わるタイプミス、括弧の対応、ループの範囲などに関して非常に分かり易くチェックできるようになっている。そのためプログラミングの本来の目的である「アルゴリズム」の実装に傾注できるという大きな利点がある。

ブロックリーに1人で挑戦タイム(約15分)


ブロックリーにブレイクアウトルームで挑戦タイム(約10分)


どこまで出来たかのアンケート

What is Arduino
続いて、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社製の互換機を利用する。この種の互換機は、アマゾンやアリババエクスプレスなどで入手することが可能である。
アマゾン(国内からの発送が多い)
アリババエクスプレス(安価であるが、到着まで1〜2ヶ月必要)

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)
tinkercad
それでは、このArduinoをコンピュータシミュレーション上で実施するための手順を説明する。
今回利用するシミュレーション環境はtinkercadである。この環境は、CAD(コンピュータ上の設計ソフト)で歴史と伝統のある、autodesk社が提供している。
この環境を利用するために、無料のIDを作成する必要がある。その手順は、次の通りである。
  1. Tinkercadに参加
  2. パーソナルアカウントを作成
  3. 電子メールでサインアップ
    SNSで参加しても良い
  4. 国名,誕生日
  5. メールアドレスとパスワードの設定
  6. アカウントの作成が完了
    ユニークアカウントは、Welcome画面に表示される(例:NakamuraXDLN4)
  7. Let's GO!で開始
  8. ダッシュボード(ルービックキューブみたいな3x3のロゴ)をクリックして
    Circuitを選ぶ
これで、Autodeskの共通IDの作成ができた。
次は、電子回路の作成である。

ダッシュボード(ルービックキューブみたいな3x3のロゴ)をクリックしてCircuitを選び、<新しい回路の作成>をクリックする。

Arduinoとブレッドボードを左側の作業領域にドラッグする。

ここで、一度、Arduinoを動作させてみる。
  1. コードをクリックすると、プログラムが表示される
    プログラムの内容は、内蔵LEDを「高」にして、1秒間保持し、
    次に、内蔵LEDを「低」にして、1秒間保持する。内容である
  2. シミュレーションを開始すると
  3. 内蔵LEDが赤く点滅する
今度は、ブレッドボード上にLEDと抵抗を配線して外部でLチカをやってみる。
このLチカが、電子工作の最初の1歩である。(プログラミング言語の「Hallo World!」に該当する)
なおブレッドボードの説明は、この資料の昨年部分(後半にある)の記述を参考にすること。
基本的には、
  • +とーは、全て結線されてつながっている事。
  • abcdeとfghijが、結線されてつながっている事。
  • 中央の、eとfの間は、つながっていない
という点を知っていれば、利用可能であると思われる。

  1. ブレッドボードに、抵抗を持ってくる。
  2. 回転させて水平にする。

図のように回路を組む。
  1. 抵抗をブレッドボードの4bから8bに配線する。
  2. ArduinoのGNDを、ブレッドボードの4aに接続し、線の色を黒にする。
  3. LEDをブレッドボードの8cから9cに配線する。
  4. Arduinoの12番ポートを、ブレッドボードの9aに配線し、線の色を赤にする。

次はスケッチ(プログラム)である。
  1. コードをクリックする
    今入っているプログラムを左側のメニューにドラッグして消去する
  2. プログラムを書く
  3. シミュレーションを押す
  4. Lチカ成功!!!
  5. うまくいったら、高と底の時間を変更してみる。
どうですか。Lチカ成功しましたか。今日の授業はここまでです。

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

  1. Googleブロックリーを実施する。
  2. ブロックリーの結果を解答する
  3. tinkercadのアカウントを作成する。
  4. Arduinoの接続、スケッチの修正、転送、実行が出来るようになること。
  5. Lチカを成功させる。


-----【参考】これ以下は、実際のArduinoを利用した場合の昨年の授業内容である。---

今回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に大きな電流が流れすぎないように抵抗を接続している。
抵抗値はカラーコードで、記述されている。
黒から始まり概ね虹色と同じ順に並んでいます。これを語呂合わせで、 黒い礼服(黒=0) 茶を一杯(茶=1) 赤い人参(赤=2) 第三の男(橙=3) キシ(黃=4) 嬰児(緑=5) 青二才のろくでなし(青=6) 紫七分(紫=7) ハイヤー(灰=8) ホワイトクリスマス(白=9) となります。 リボンケーブルの配線もこの色順になっているので覚えておくと便利です。
01 23 45 67 89
誤差5%誤差10%
抵抗のカラーコードには4本線のタイプと5本線のタイプがあり、最初の2−3桁は数字で、次の桁(3/4)は10の乗数、最後の桁(4/5)は誤差になっている。
この回路で用いた抵抗は、5本線のタイプで、右から茶黒黒茶茶(10011)なので、100x10^1,誤差1%となっている。
なお、12番ポートにLチカ信号を送るためのスケッチは次の様になる。
  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が点滅したら、成功である。

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

  1. Arduinoの接続、スケッチの修正、転送、実行が出来るようになること。
  2. Lチカを成功させる。


(外部リンク:Arduino電子工作の基本 (外部リンク:123D_Circuitsの使い方