情報テクノロジー 第?回

今年はMicrobitを使って、共生社会やsociety5.0をテーマとしながら
「身体的な障害を持つ人でも、コミュニケーションが取れるデバイスを作ろう」 を行っていました。
※なんと今年は被験者・協力者もいます

ある班の、自作キーボードを使用したアイディアが大分形になってきたので、少し紹介したいと思います。
※自作キーボードとは、キーボードの形や、ボタンの個数、大きさ、ボタンの種類(EnterやA,B..)などを自由に作れるデバイスです

※なお、この版のアイディアはMicrobitでは限界を迎えたため、急遽別のマイコン(Pro micro)を使用することにしました。


【条件】
左半身しか動かない、喋る事が出来ない人に、コミュニケーションを可能とするデバイスを作る

【使用したもの】
自作キーボード:[shiro] https://yushakobo.jp/shop/shiro/
ソースコード(Ver0.1):https://github.com/asami-hoge/shiro_toggle/blob/master/keymap.c

まだ生徒達の葛藤は続いておりますが、一足先に出来栄えを載せておきたいと思います。
現時点での状況ですが、このあとどれくらいブラッシュアップできるのかが楽しみです。


※今回の取り組みを進める中で、自作キーボード界隈、特にこのキットを販売してくださった遊舎工房さん
また、私の知識不足を支えてくれ、ご指導いただきました Discord鯖 “Self-Made Keyboards in Japan” の
@s-showさん、@shelaさん、@hsgwさん、@takashiskiさん、@hyoshihara04さんに深く感謝申し上げます。

これから被験者の方と打ち合わせながら、より良いものへとPDCAを回しながら、生徒たちと取り組みたいと思います。
取り急ぎ、ご報告まで。

小学校でのプログラミング指導(先生宛)

移動中に、ちょっと自分用で覚え書き。
今度、小学校の先生にプログラミング教育をする理由とか
その方法とか、そんな話をしなくてはなりません。
ので、ざっと書き起こし。
自分用だから口調も何も出来てないです。記録用ってだけです!
内容さえあっていればいいんです。出来とか気にしないでね。


今後間違いなく、全ての人間は機械の恩恵を受けることになる。
(少なくとも日本人はって思ってもいいですよ。)
ほら、IoTって聞きません?

例えば私の家は、自動カーテン開け閉めのMooninって機械使ってます。
ちなみに買うと、7000円位した気がします。
これ、自分で作ればきっと,
部品の品質にもよりますが1000円~3000円位で作れます。
多分うちの生徒なら1時間でつくれるんじゃないかな?
似たようなもの、すでに授業で沢山作ってます。

所でこのもーにん、仕組みってわかります?
開け閉め で使うモーター制御と
時間を判断する為の、 時間制御ですかね?

でもこれ、きっと時計は入ってないですよ。

きっとこれタイマーです。携帯と接続して、携帯から時間持ってきて、
それから何時間後に閉めて、開けてを繰り返す仕組み。

そっちの方が、安上がりで、省エネで、バッテリー長持ちだから。
用途的には正確さよりも、利便性を取るのが正解だろうと思います。

例えば、SUICA
あれってどんな仕組みですかね?
中にコンピュータが入ってる?

チップがありますね。
チップが値段覚えてる?

違います、チップは自分の名前だけ覚えていて、
それをインターネットでSUICAのサーバーにアクセスして
今自分の名前で、いくらお金を持ってるのか確認している。

そうすれば、難しい仕組みは見えない所(これをクラウドやサーバーという)
で全部できる。自分はただ、名前を言えばいいだけ。単純。

じゃあ、これの電源供給ってどうなってるんだろう?

このシステムを利用して何か便利な物がつくれないかな?
自分はこんなことがしたい、どこまでを自分でやって、どこまでを機械にやらせようかな?
機械にやらせた方が良い事と、人間がやったほうが良い事の違いって何だろう?

そんな判断が出来る、出来ないが今後の生産性や生活レベルに大きくかかわってくるのは間違いない。
それも、10年や20年後ではなく、3年後とかそんな話です。
実は今、皆さんの身の回りでも、知ってる人はやっていて、知らない人は何も知らないなんて事がごくごく普通に起きています。これを情報格差と呼んでいます。

少し話がそれました。
それで、この「仕組み」つまりは「構造」なんですが、
これを理解する力っていうのが今後重要になってくると思うんですね。

これを小学校からきちんと意識させようっていうのが、
プログラミング教育 の大きな部分だと思っています。

何故プログラミングなのか?
それはコンピュータは「構造」を理解した人が、しっかり「命令」しないと
何もできない機械だからです。
「コンピュータを動かす」には、「構造を理解しておく」事が必須となるんですね。
教えるのにとっても都合の良い教材なんですよ。

具体的にお伝えすると、
例えばここに時計がありますね。
これを入手したい時、人間相手ならば「あの時計とって」とお願いすれば入手できます。
けど、これを機械相手にお願いすると、しっかりと厳密に命令しないといけません。
1.~~にある時計を持ってきなさい

もしくは

1.~~に移動します
2.~~に腕を伸ばします
3.手を開きます
4.~~に触れます
5.つかみます
6.手を持ち上げます
7.~~に移動します
8.手を下げます
9.手を開きます

これくらい厳密にいかないといけません。
これがコンピュータであり、プログラミングです。
で、これらの動作っていうのは命令者、つまり人間がしっかり
「問題の構造を理解」しないといけないんですね。

これらを繰り返すことによって、問題の解決手段や、問題の構造理解をする力を身に着ける
これがプログラミング教育です。

※決してコーディングするのがプログラミング教育じゃないよって、書いてあるでしょ?

情報テクノロジー 作品紹介編 3~4

時間が空いてしまいました。
前回お伝えした通り、1学期の授業で出来たものを随時UPしていこうかと。
動画の提出(角度)に失敗していますが、まあ内容はわかるだろうという事で。


その3
「遮光センサーを利用して、暗い道などでは足元を照らす」 作品とのこと。
LEDの光量やセンサーの感度は特に気にしていません。
仕組みが出来ていればOKとしています。(構造理解・問題解決)


その4
「スイッチを押して人を呼ぶ」 作品とのこと。
「肢体不自由を始めとしたハンディキャップを抱えた人たちをターゲットに、IoTの側から目指す共生社会」(?)
私の中で確固たる説明が出来ていないのが問題ですが、なんにせよこのようなテーマで進めている内容なので、出来れば人感センサーとか、バリアフリーを目指して発展させてほしいと思わせる作品です。
どちらかというと、音にこだわっちゃったね・・・。いや問題ありませんけども!

情報テクノロジー 第11~14?回 1学期終わっちゃいました。(2)

引き続き、生徒たちの作品を紹介していきたいと思います。

続いては超音波センサー。
「目の見えない人が、何かに衝突する前に、音で知らせてくれる」ガジェットです。

今年のコンセプトは、
「肢体不自由など、特別支援を要する人をターゲットとしたガジェット開発」です。

距離や設置方法、その他いろいろと反省点は多いところですが、
PDCAのサイクル数によってはかなり良くなるんじゃないでしょうか?
期待しています。

情報テクノロジー 第11~14?回 1学期終わっちゃいました。

教育実習を始めとして、様々な諸事情により。
一切更新できずに一学期の内容を終えてしまいました・・・。
ナンテコッタイ。

せめて、生徒たちの作品を紹介していきたいと思います。(※あくまで紹介だけ)


1学期の成果物を提出せよ
「**センサー」を使って、「**を動かした」という成果物を提出せよ。


まずは「揺れたかどうかを視覚的に判断する」為のガジェットです。
まあ、言ったもん勝ちみたいなもんですが、昨今の情勢にマッチしたアイディアなんじゃないかなあと思っています。
よくよく見ると、画面に「揺れを検知しました」なんて出力してるあたりが細かいですね。

2学期からどのように発展するのか楽しみです。

情報テクノロジー第6回 センサーを使ってみよう。

社情や情科も進んではいるんですが更新が追いつかず。
Webベースで授業すると自分でも振り返ったり、まとめるのが楽で良いなあ(本音
コレはおそらく生徒も一緒だと思います。

G-suite、なかなかどうして良いのでは!?


さて、第6回です。
今まではArduinoの使い方、出力の仕方、PWMについて、を学びましたので、
次は入力です。主に超音波センサーの信号を受信してみよう、という物でした。
例によって、課題をそのまま記載します。
サンプルコードは
http://deviceplus.jp/hobby/entry016/ さんの物を参考に一部加工したものです。


超音波センサーを使ってみよう。
【sensor】
#define trigPin 2
#define ehoPin 3

double Duration = 0; //受信した間隔
double Distance = 0; //距離
void setup() {
Serial.begin( 9600 );
pinMode( echoPin, INPUT );
pinMode( trigPin, OUTPUT );
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite( trigPin, HIGH ); //超音波を出力
delayMicroseconds( 10 ); //
digitalWrite( trigPin, LOW );
Duration = pulseIn( echoPin, HIGH ); //センサからの入力
if (Duration > 0) {
Duration = Duration/2; //往復距離を半分にする
Distance = Duration*340*100/1000000; // 音速を340m/sに設定
Serial.print(“Distance:”);
Serial.print(Distance);
Serial.println(” cm”);
}
delay(500);
}

まずは実装!!

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
課題1
距離が測定できている時に、LEDを光らせてみましょう

課題2
距離が一定数(50㎝とか)以上近付いた場合、LEDを光らせてみましょう


ここまででした。
今回はプログラム班と回路班を入れ替え、相互に教え合いながら作業させました。
※普段4~6名の各グループ内で役割分担をしている
※プログラムと回路それぞれ2~3人ずつの配置

流石に最初は難航し、お互いがお互いに思うようにいかずモヤモヤしていたようですが、15分もしたら完全に熱中して真剣に取り組んでおりました。

しかし、流石に時間ロスが大きく、課題1までが限界だったようです。
休み時間も使いましたが、課題2まで終わった班は皆無でした。
※まあ、IF文をきちんと復習していない所為でもある。

彼らが2年時に既習しているのはJavaScript,
今使っているのはC++。

そりゃあスンナリいかないよね。

でもいいんです。
色々ぶつかって、間違えに間違え尽くして、学習していただきたい。

なお、今回一番多く見られたミスは、
「pulseIn」のIが大文字ではなく小文字だったり、Lの小文字だったりしたことです。
私としてはコピペでも良いと言っているのに・・・。
まあでも、コレで次は間違えないね!

最後に例のごとく、提出された動画を載せておきます。
「距離が測れていると分かるように撮影しなさい」
と言いましたが、時間も無い中でなかなか難しかったようです。

うーん、撮影も惜しい!

情報テクノロジー第5回 analogWriteで点滅させよ (PWM)

情報テクノロジー第5回目です。
今回でOUTPUTに関する一通りを終えて、次回からはセンサー類を使用して、INPUT系に馴染ませたいと思います。

例によって今回の課題(原文まま)


analogWrite(PWM)を使って、LEDの明るさを制御しよう。

PWMとは、パルス幅変調ともいう、0か1かのディジタル信号ではなく、0~255までの数値を刻んだ疑似アナログ信号のことである。0はLOW、255がHIGHに相当し、その間に信号の強さとして細かく段階分けする事が出来る。
aruduino uno では、PWMに対応したピンとして、3・5・6・9・10・11の6箇所が用意されている。

練習:下記のサンプルプログラムを読み解いて、回路を作成し、結果を映像で記録・提出せよ。
【LED_PMW】

#define LED_PIN 9
void setup(){
 pinMode(LED_PIN, OUTPUT);
}

void loop() {
 int i;
 for (i=0; i<256; i++){
  analogWrite(LED_PIN, i);
  delay(20);
 }
}

課題1:下記の条件を満たす動作を映像で記録・提出せよ。
練習問題は「LEDはゆっくり点灯し、すぐに消える」 という物であった。
課題1では、
「LEDはゆっくり点灯し、ゆっくり消灯する」を繰り返す挙動を実現せよ。

課題2(上級編):下記の条件を満たす動作を映像で記録・提出せよ。
課題1の挙動を、2つのLEDで実現せよ。

ただし、LED1とLED2は点灯、消灯を互いに逆の状態で行う物とする。
※LED1が点灯していく時間で、LED2は消灯する。


生徒たちは2年生でJavaScriptを使ったプログラミングに関して学んでいるが、
「i++」などの記載については一切の指導をしていない。
自分たちで意味を調べながら作成していた。
ただ、50分という時間では流石に短かったようで、(それでも課題1は出来ていた!)
上級編を時間内で完成させる事は出来ていなかった。

しかし、休み時間に突入しても全ての班(!)が粘り強く挑戦し、
1つの班では実装に成功していた。
※第6回の最初に紹介したいと思う。

例によって今回提出された動画を掲載しておきます。
※今回は個人情報保護のため、音声を削除しています。

プログラミング教育について6

今回は小学校段階におけるプログラミング教育の実施例についてです。

参考資料:小学校プログラミング教育に関する概要資料 (PDF:508KB)
http://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm

 

おそらく、人それぞれの持ち味が一番期待でるのがここだと思います。

基本的に書いてある通りですので、私ならこう表現するかなと思うものを列挙するにとどめます。ただし各教科とも全体像としては前回の プログラミング教育5に準ずるものだと思いますので、先にこちらを読まれるよりは プログラミング教育5読んでいただいた方が良いかと思います。

理科:モーターやセンサーのコントロールによって身の回りの「仕組み」を再現してみよう。(信号機、自動ドア、インターホン、他)

音楽:音の仕組みを理解しよう。 人には作れない音を作ってみよう。

図画工作: 図画 でも 工作 でも 動かしてみよう。 図画ならアニメーション、工作なら理科と同様に。

総合的な学習の時間:私たちの生活の場において、コンピュータは至る所で使われている。どのように使われているのか、どのような恩恵があるのかを知ろう!

まあ、実施例なのでちょっと説明し辛いですね。アイディアはあるんですが、そもそも「小学校で何を教えているか」をしっかり理解していないので言及できないんです。小学校の先生、誰か本当にお話ししませんか・・・。

なお、「国語」や「算数」においてはプログラミング教育とは相性が悪いんじゃないかと思っています。もちろん高等学校やそれ以上の段階では相性抜群なんですけれども、小学校って要は「読み・書き・そろばん」なんですよね・・・?(自信ない)

で、今はそこに、「キーボード」を足してくれって言ってるようなもんですよね?(プログラミング教育3参照

それは相性悪いんじゃないかなあって。欲張りすぎじゃないかなあって。
読み書きそろばん、キーボードをマスターしてから組み合わせれば、それでいいんじゃないかなって。

・プログラムで作図しました。 手書きよりも丁寧な作図です。
・キーボードで漢字を入力しました。 手書きよりも正確です。

・・・すっごい意味がない気がしてしまって。 どうなんでしょう?

プログラミング教育について5

日が空いてしまうと何考えてたのか忘れますよね。
これやりたいな~と思いはするのに、結局行動に移せずに終わったことが多すぎて。
何とかしていきたいなと思ってはいるんです・・・(結局行動に移せず以下略)

プログラミング教育を通じて目指す育成すべき資質・能力 についてです。
いよいよ教科の味が出てくるころかな?と思うところなんですが、義務教育ではそうもいかないのが難しい所。
ここら辺の感覚が高校と小中の違いなんでしょうか。 小中を一緒にするなと怒られそうですが。

いつもの資料です。

参考資料:小学校プログラミング教育に関する概要資料 (PDF:508KB)
https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm

これは「プログラミング教育」でなにを目指すのか。
漠然とした全体像と、各教科での役割分担(?)がまとめられています。

【知識・技能】
(小)身近な生活でコンピュータが活用されていることや、問題の解決には必要な手順があることに気付くこと。
【思考力・判断力・表現力等】
発達の段階に即して、「プログラミング的思考」を育成すること。
【学びに向かう力・人間性等】
発達の段階に即して、コンピュータの働きを、よりよい人生や社会づくりに生かそうとする態度を涵養すること。

すっごい簡単かつ乱暴にまとめると、私の言葉ではこうなります。

1.すでに私たちの生活の場において、コンピュータは至る所で使われている。どのように使われているのか、どのような恩恵があるのかを知ろう!
※また、人が(コンピュータのしている仕事)を行った場合と、コンピュータに任せた場合の違いを知ろう!(知識)

2.人に任せている仕事をコンピュータにお願いしてみよう。 どのようにお願いすれば、うまくいくだろうか?(技能)

3.1つの役割をこなすためにも、様々な願い(機能)が必要だという事が分かった。 例えば~~の役割をこなすためには、どんな機能を組み合わせていけば出来るだろうか?(思考・判断・表現)

4.コンピュータには様々な機能があり、その組み合わせで動いている事がわかった。様々な機能を組み合わせて、新しい役割を持たせてみよう!(学びに向かう力・人間性等)

5.「2」~「4」の間で考えた機能を、実際にコンピュータにお願い(実装)してみよう。

こんなかんじですかね。特に順番に意味はないのですが、プログラミング教育を組み立てるとしたらこのようにしますね。また、コーディングは学校の実態に合わせてでよいのだと思います。こっちはむしろ中学校もしくは高等学校に振っていいんじゃないかと。もちろんScratchをはじめとした様々な教育ツールや、教材キット(Studuino)などがこれから産まれてくるでしょうから、予算や環境に適応しつつやっていきたいところです。

※まあ、最大の敵はやっぱりカリキュラム(用意できる時間)にあると思います。
※情報科はいつもそこに泣くんです。なんとか情報なんて~の風潮を覆せるように情報発信を続けていきたいと思います。

さて、長くなってしまったので各教科は次回。

Next:小学校段階におけるプログラミング教育の実施例

プログラミング教育について4

さて、前回はすみませんでした。深夜テンション怖いですね(現在02:00)。

前回の補足ですが、アンプラグドな授業ってのが話題によく上ります。それはそれで全然ありです。むしろ大好きです。でもプラグも使ってください。謎の縛りプレイ(PC使用不可)とかいりません。限られた時間で可能な限り効果的・効率的に指導するのが理想だと思ってます。特に情報科ですから。我々・・・。

さて、いよいよプログラミング的思考ですね。次の資料を見てみましょう。

//なお、小学校段階における話で進めます。そのうち中学校と高校の範囲もやりたいんですが、またいずれ。

小学校段階におけるプログラミング教育の在り方について日本の役所って本当に・・・非効率的なのが分かってるのに「慣習」に負ける。そりゃあ、この合理的が至上主義となりつつある国際社会じゃ生き残れないよね。

 

・プログラミング教育とは

子供たちに、コンピュータに意図した処理を行うように指示することができるということを体験させながら、将来どのような職業に就くとしても、時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育成するもの。コーディングを覚えることが目的ではない

さて、問題のプログラミング教育です。ここら辺について私も理解を深め、他の先生方にお伝えしなければならないとは思っているんですが、なかなか能力が足りてない。(時間が無い部活動至上主義を本当に何とかしてくれ。)

要は人間がすべき事って何だ?が話の中心だと思うんですよね。仕事量の削減というか。自動化できる作業は自動化して、その時間を使ってより生産性の高い・もしくは娯楽性の高い、などの体験をして、有限な時間を効率的に使っていこうよ。という話だと思っています。

例えば、日本に住んでる誰かが、ブラジルの写真を欲していたとする。ブラジルってこんな国だよ!って説明したいから。

それ、それわざわざ地球半周して撮りに行くの・・・?行かないよね・・・?

「インターネットで落とせばいいじゃん!」 ← 違います

要は、物理的な移動時間がもったいない、費用対効果で採算が取れないので。代わりに「ブラジルにいる人」「写真を撮ってもらい」「通信ネットワークとコンピュータの活用」によって「瞬時(!)に届けてもらう」わけです。現代人であれば、すごく簡単な話だと思います。

ちなみに、「インターネットで落とす!」とお答えになった場合。そいつの構造(ブラジルから~瞬時に届けて~)をきちんと把握する能力が、「プログラミング教育」の醍醐味なんだと思って頂きたい。感覚的な理解を、構造的にきちんと把握させるための教育。それがプログラミング教育なのかなって。そりゃあコーディングなんてどうでもいいわ。C言語だろうとJAVAだろうとVBだろうと以下略。構造化できればそれでいい。//構造化とオブジェクト化の違いは高等学校もしくは大学の範囲とさせて頂きたい。小学校段階でそこまで突っ込むのは鬼すぎる

・プログラミング的思考とは

自分が意図する一連の活動を実現するために、どのような動きの組合
せが必要であり、一つ一つの動きに対応した記号を、どのように組み合
わせたらいいのか、記号の組合せをどのように改善していけば、より意
図した活動に近づくのか、といったことを論理的に考えていく

さて、様々な場所で様々な解釈をさせるプログラミング的思考ですが、おおよその内容を上で述べてしまいました。要は、「ブラジル写真を得る手段」を段階分けして考えるための力だと思っています。これ、「コンピュータに命令を出す」作業と相性がいいんですよね。

たとえ話。

今あなたは家の椅子に座って仕事をしています。
3メートル先にある資料は欲しい。そこで家族に言うんです。
「そこの資料取って」

高度な理解力をもつ人間は、その一言で見事欲しい資料をあなたの手元に持ってきてくれるでしょう。でも、コンピュータ相手だとそうはいかない。

仮に音声で命令できるロボットがいて、そいつに言ってみます。
「そこの資料取って」

ロボットは言います。
「そこ とはどこですか?」
「資料 とは本ですか?」
「どんな内容の本ですか?」
仮に資料が分かっても、取得した時点でこう言います。
「資料を取得しました」 //持ってきてはくれない

機械相手には厳密に、正確に命令しないといけない。
「3メートル先にある青い本を、私の手元においてほしい。」
「タイトルは「プログラミング教育について」だ」

AIやセンサーを搭載していなければこのようになる。
「座標x,y,zにある物体を掴んでくれ」
「そのまま座標をy軸方向に持ち上げて固定」
「次に3メートル移動」
「座標x,y,zに達したら固定を解除し起動地点に戻ってくれ」

 

とまあ、随分と面倒くさいですが、これが段階分けとか構造理解に役立つ力なんだと思っています。よく、プログラミング的思考はコンピュテーショナル・シンキングと混同されるというか同一視されると思うんですけど、私の中ではちょっと違う解釈なんですよね。

コンピュテーショナル・シンキングってのは、計算機用の思考、計算機の特性を理解していかに効率よく使うかって話。

プログラミング的思考ってのは、プログラマ的思考というか、物事の構造を理解して活用する力。

まあどっちも活用してるって面では同じなんですが、なんていえばいいんでしょう。私の感覚ではコンピュテーショナル・シンキングまで行くとそれは高等学校もしくは大学レベルの話になってくると思うんですよね。アルゴリズムや処理能力の領域が強いイメージです。それよりは、論理的に考える力に重きを置くのがプログラミング的思考なのかな、なんて。別に計算機じゃなくてもいいよってことですかね。

//プログラミング的思考って名前が良くないですよね。いや的を得ている名だとは思いますが。

 

さて、やはり長くなりました。(現在0248)

Next:プログラミング教育を通じて目指す育成すべき資質・能力
参考資料:小学校プログラミング教育に関する概要資料 (PDF:508KB)
http://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm