ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Posts Tagged ‘Arduino

小学校のカーニバルで「マイコンボードで Lチカ体験コーナー」をする – ブース型の体験コーナーで得たこと

leave a comment »

小学校のカーニバル。子供たちが様々な店を企画してみんなを楽しませる、つまり小学校版の文化祭のようなイベントだ。そこで PTA として「マイコンボードで Lチカ体験」というコーナーを出した。部屋は理科室。実験台に Arduino や Netduino のマイコンボードや部品を並べ、子供たちに体験をしてもらうブース型のコーナーだ。

昨年「青少年のための科学の祭典」で同様の出店をした経験から、このようなスタイルで小学生に体験させるにはどのような工夫が必要なのかということが少しわかった気がする。会議用の長机程度のスペースを使い、椅子をならべて数人を集めてマイコンボードの体験を 10分程度でする、終われば次のグループがどんどんやってきて入れ替わるというスタイルだ。

1.その場でプログラミングは無理

できればその場でプログラミングをし、あるいはコードを書くことはしなくても、できたコードを見せてビルドし配置する、ということを体験させたい。しかしブース型の入れ替え制スタイルで、小学生に対しては無理だ。相手が中学生で、パソコンもマイコンボードの数だけあり、同時に少人数、時間もせめて 20分あればできるかもしれない。したがってその場でプログラミングすることはあきらめ、あらかじめマイコンボードにプログラムを入れておくしかない。したがってイベントの目標は「プログラミングを理解する」のではなく「プログラムによってマイコンボードが動作することを理解する」ことにする。それをどういう形で体験し理解させるかを工夫する。

2.いろいろ用意せず体験は 1種類だけにする

計画の段階では「あれもしたいこれもしたい」と思うので、タイプの異なる実習を何種類も用意しようと思う。興味や関心に応じて選んでやってもらおう、と。しかし完全に個別対応ならうまくいくかもしれないが、5~6名の子供に同時に説明し体験させるには、異なる種類のものを同時に説明するのは無理がある。子供たちをきちんとコントロールできないと事故がおこる可能性もある。体験は 1種類だけにし、応用で見せたいものはすぐできるように用意しておき、見せるだけにする。

3.人数は同時に 10人くらいはできる

きちんと準備ができていれば、小学生なら 10人くらいは同時に対応できることがわかった。同じことをやるなら小学生は友達どうしで見比べながら作業ができる。そのためには机は広いほうがいい。昨年の「青少年のための科学の祭典」では会議用の長机を使ったが、今回は小学校の実験室だったので実験台を使わせてもらった。実験台は奥行きが広いのでマイコンボードや部品を並べても作業に余裕があった。できれば奥行きのある机に輪のようになって座ってするのがいい。

4.直観的に操作できるように準備する

いちいち説明書きを見ながら作業をするのは無理だ。そこで口頭で簡単に説明するだけでいいように、体験は直観的にそうさできるように準備する。回路を作るなら一列に並んだピンに順番にコードを挿していく、3接点のセンサーを使うなら、すだれ型の 3本セットのケーブルを使い、末端には 3ピンのコネクタを取り付けておく、電源のプラスは赤、マイナスは青とブレッドボードの色にあわせておく、などだ。こうしておくと「順番につなぐんだよ」「同じ色をつないでね」「同じ形のところにつないでね」と言うだけでいい。

5.ブレッドボードは難しい

ブレッドボードを小学生に理解させるには、このようなブース型の体験コーナーでは無理だ。まずブレッドボードの内部配線を理解しなければ、どのように回路がつながったのかわからない。実際に小学生にブレッドボードを使わせてみると、LED が光る回路を作ることができても、なぜ光ったかが実感できないでいるようだ。ほとんどの子は光ったことは喜んでも、なんとなく納得しがたい顔をして帰っていく。もし LED を直接光らせる体験をさせたいなら、ブレッドボードは使わずリード線とワニ口クリップを使ったほうがよさそうだ。

6.教材は多めに用意する

きちんと教材を用意しておけば 10人程度は同時に対応できる。スペースに余裕があればもう少し同時に多くに人数でできるかもしれない。そこで教材は想定する数より多めに用意しておくのがいい。また次々にグループがやってきたとき、前のグループでやったものの片付けができていないと待たすことになる。そこで片づけなくても 2回くらいは連続でできるように、同時想定人数の2倍の教材を用意できればさらにいい。

7.電源の管理を工夫する

どのような実習にせよ、マイコンボードや電子回路の実験なら電源を必要とする。回路を組み立てて最後は電源を接続するのだが、AC アダプターを使うのか、乾電池を使うのか、モバイルバッテリーを使うのか。電源ケーブルの引き回しをどうするのか。今回は AC アダプター付きの 7ポート USB ハブを使ったが、USB ケーブルが短くしかも堅かったので使いにくかった。モバイルバッテリーは万一回路が短絡したときに危険かもしれない。電源供給ケーブルのとりまわし、短絡しないケーブル末端の処理、などに配慮する必要がある。小学生には乾電池を使うのがわかりやすく、短絡したときの問題を考えると、内部抵抗の大きなマンガン乾電池を使うことが良いと思われる。

こうした実習は、プランを立ててやってみることで経験が得られ改善の工夫をイメージできる。子供たちは思いもよらない姿を見せてくれる。優れた教員は常に子供たちの様子を観察し、細かな違いを見極める目を持っている。そこで気づいたことを次のプランに組み込んでいく。したがってこうした実践は教える側にとっても貴重な経験である。それにしても小学生に何かを教えるということはエネルギーがいる。やっているときは感じなかったが、2時間ほどの体験コーナーを終えて家に帰ってくると、気が緩んで疲労と睡魔に襲われて夕方まで昼寝をしてしまった。小学校の先生はたいへんだ、ということも実感した。

広告

アドミンティーチャーズの「ラボワーク LW01 – Netduino で Lチカプログラミング」

leave a comment »

「アドミンティーチャーズ」は教育の情報化や情報教育、校務の情報化に携わる教職員対象の勉強会で、このたびは「ラボワーク」と名付けて、マイコンボードや電子回路を自由に体験するというスタイルで企画された。

「ラボワーク LW01 – Netduino で Lチカプログラミング」の報告

P1110024_mid_640_480

Netduino は内部で .NET Micro Framework が動き、Visual Studio を使って C# のプログラミングができるマイコンボードだ。実際に Visual Studio で開発するためには、SDK などいくつかの追加モジュールをセットアップする必要がある。このラボワークでは、Arduino の典型的なループを使った「L チカ」プログラミングと同じアルゴリズムで C# のコードを書いて比較し、また Netduino で別スレッドで実行する 2 つの「L チカ」プログラミングのデモをした。

P1110012_mid_640_480

Netduino や Arduino は受け取った電圧変化をディジタル変換するアナログ入力の A/D ポートを標準で持っている。このアナログ入力ポートの動作を確かめるために、まずボリュームで電圧変化を与えて A/D 変換をし、次に距離センサーを使って距離の測定ができることを確かめた。

P1110004_mid_640_480

そのほかブレッドボードを使った回路実験や 7 セグメント LED、バー型 LED、マトリックス型 LED などの使い方、Arduino の亜種や類似のマイコンボード、組み込み実装用の Arduino Pro Mini などの紹介もした。

この「ラボワーク」は今後も毎月第一土曜日に兵庫県の神戸市、三ノ宮で行うことを考えている。次回の計画は月半ばにアドミンティーチャーズのサイトで案内することとする。

アドミンティーチャーズ
https://adminteachers.wordpress.com/

興味のある方はぜひご参加ください。

Arduino UNO と XBee で双方向無線通信のテストをする。Microsoft Visual Studio Express 2012 によるC#プログラミングでデータをWindowsフォームから送受信する。

leave a comment »

Arduino に XBee を載せ、PC 側から USB 接続した XBee でデータを送受信するテストをした。この無線化 Arduino に対して Windows Form からデータを送受信してみよう。

Arduino UNO と XBee で双方向無線通信のテストをする。
https://matsumotoyoshio.wordpress.com/2014/01/18/arduino-uno-%e3%81%a8-xbee-%e3%81%a7%e5%8f%8c%e6%96%b9%e5%90%91%e7%84%a1%e7%b7%9a%e9%80%9a%e4%bf%a1%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e3%82%92%e3%81%99%e3%82%8b%e3%80%82/

XBee で無線接続化された Arduino に対して Windows Form からデータを送受信するプログラムを C# で作るとどうなるだろうか。Arduino は XBee で無線化されているが、要はシリアル通信を行えばよい。Microsoft Visual Studio Express 2012 で C# の新しいプロジェクトを作り、Windows Form を開発しよう。

プロジェクトができたら、まずシリアル通信をするために System.IO.Ports 名前空間の記述をする。

————————————————————————————

using System.IO.Ports;

————————————————————————————

そしてシリアルポートのインスタンスを生成し、初期化をする。

————————————————————————————

SerialPort mySiPo = new SerialPort("COM4");

・・・・・・・・・・・・

mySiPo.BaudRate = 9600;
mySiPo.Open();

————————————————————————————

そしてデータを受け取ったときのイベントハンドラを作成する。

————————————————————————————

mySiPo.DataReceived += mySiPo_DataReceived;

————————————————————————————

mySiPo_DataReceived イベントハンドラに、受け取ったデータをメッセージボックスで表示するコードを書く。

————————————————————————————

MessageBox.Show(mySiPo.ReadLine());

————————————————————————————

ここまででデータ受信の準備ができた。最後にデータを送信するためのボタンをフォーム上に3つつくり、それぞれのボタンにデータ「1」、「0」、「-1」を送信する役割をさせる。ボタンのラベルを書き換え、ボタンのクリックイベントハンドラにそれぞれ次の記述をする。

————————————————————————————

mySiPo.Write("1");

・・・・・・・・・・・・・・・・・

mySiPo.Write("0");

・・・・・・・・・・・・・・・・・

mySiPo.Write("-1");

————————————————————————————

ここまででコード全体はこのようになる。

————————————————————————————

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace Arduino_Serial_Control_001
{
    public partial class Form1 : Form
    {
        SerialPort mySiPo = new SerialPort("COM4");
        public Form1()
        {
            InitializeComponent();
            mySiPo.BaudRate = 9600;
            mySiPo.Open();
            mySiPo.DataReceived += mySiPo_DataReceived;
        }

        void mySiPo_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            MessageBox.Show(mySiPo.ReadLine());
        }

        private void button1_Click(object sender, EventArgs e)
        {
            mySiPo.Write("1");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            mySiPo.Write("0");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            mySiPo.Write("-1");
        }
    }
}

————————————————————————————

Form のデザインは次のとおりだ。

Arduino_XBee_双方向通信_004_mid_640

<Fig.1 : Microsoft Visual Studio Express 2012 のデザイン画面>

ビルドしフォームを開き、ボタンをクリックしてデータを送信する。データが送られると、無線により XBee を介して Arduino に送信され、受け取ったデータを判断してテキストが返ってくる。

Arduino_XBee_双方向通信_005

<Fig.2 : 完成した Windows Form>

Arduino_XBee_双方向通信_008

<Fig.3 : ボタンをクリックするとデータが送信され、Arduino が判断して結果のテキストを返す>

Written by Yoshio Matsumoto

2014年1月18日 at 3:58 PM

Arduino UNO と XBee で双方向無線通信のテストをする。

with one comment

Arduino に XBee を取り付けると、シリアル通信を無線化することができる。シリアル通信は双方向に送受信できるので、PC側から XBee によってデータを送り、Arduino で受け取ったデータを判断して結果を返す、という実験をする。

Arduino と XBee はあらかじめ設定しておく。通信の対になる XBee も設定しておき、通信できる状態にする。一方の XBee は XBee Wireless プロトシールドで Arduino に載せ、もう一方の XBee はXBee USB アダプターで PC に接続する。

Arduino_XBee_双方向通信_003_IMG_6553_mid_640_480

<Fig.1 : XBee を載せた Arduino と USB アダプターで PC に接続した XBee>

Arduino のスケッチは次のようなものだ。シリアルポートから受け取ったデータを数値に変え、値が正か負かゼロかを判断している。受け取った値が正なら「It is bigger than 0」、値が負なら「It is smaller than 0」、値がゼロなら「It is the same as 0」の文字列を送る。

————————————————————————————

int i = 1;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  while (Serial.available() > 0) {
    int i = Serial.parseInt();
    if (i > 0) {
      Serial.print("It is bigger than 0");
      Serial.print("\n");
      }
    if (i < 0) {
      Serial.print("It is smaller than 0");
      Serial.print("\n");
    }
    if (i == 0) {
      Serial.print("It is the same as 0");
      Serial.print("\n");
    }
  }
}

————————————————————————————

Arduino_XBee_双方向通信_002

<Fig.2 : 双方向通信をテストするArduinoのスケッチ>

スケッチを Arduino に書き込んだら PC から切り離して XBee Wireless プロトシールドで XBee を載せ、別電源を使って USB に給電して動かす。次に PC に XBee を載せた XBee USB アダプターを接続し、XBee でシリアル通信を行う。シリアル通信には X-CTU を使ってみる。

X-CTU を起動したら Terminal タブを開き、シリアル通信を行う。正の数や負の数、ゼロを送信し、正しい結果が返ってくることを確かめる。Arduino を PC から離し、どの程度の距離まで通信するか、障害物があれば通信が途絶えるか、などを確かめる。

Arduino_XBee_双方向通信_001

<Fig.3 : X-CTU を使った XBee 無線シリアル通信のテスト>

Written by Yoshio Matsumoto

2014年1月18日 at 2:30 PM