2017年12月30日土曜日

2017年12月報

1.12月授業内容
2.今月の課題
3.今後の授業スケジュール
4.お知らせ
5.ご挨拶


1. 12月授業内容


1.0 <スタートアップ(全コース)>


 割愛します。(アドバンスプログラミング生は2017年9月報を参照)


1.1 <プライマリーコース『アルペンくん』>



 割愛します。







1.2 <ベーシックコース『がたごとレスキュー隊』>


 救助ロボットです。


1日目では、何の変哲(へんてつ)もなさそうな4輪車に留(とど)まりましたが、車体底面の地上高(自動車用語でロードクリアランス)が低いため、少しの段差で引っ掛かってしまい、がたごと道はとても無理のようですね。
それでも、ちょっとした工夫があるのです。それはスピードが“(おそ)”ことです。

 ギアボックスをよく観察してみましょう(*1)。
モーター軸(じく)のピニオンギア(歯数8)が、まずベベルギア(歯数24)を回し、続いてベベルギアと同軸(つまり等速)のピニオンギア(歯数8)が、両隣(りょうどなり)のギアM(歯数24)を回しています。
タイヤはこのギアMと同じスピード(等速)で回転します(*2)。

歯数8のギア歯数24のギアを回す構成が2段ありますので、1段目で1/3に減速、2段目でさらに1/3に減速することになり、モーターの回転を1/3×1/3=1/9に減速してタイヤを回しています。
つまり、モーターが9回転してタイヤがやっと1回転する遅さです。

 遅いだけなら、何のメリットがあるのでしょう?
実は回転する力(トルク)が9倍になるという恩恵(おんけい)があるのです。
試しに、タイヤを外したシャフトを手でギュッと摘(つ)まんでみてください。
大人でも止められない程に強力ですよ。レスキュー隊として頼もしい力強さが準備できました。


 2日目では、ロードクリアランスの問題を解決します。
もっと大径のタイヤを装着できればよいのですが、タイヤLで最大ですので、代案が必要です。
そうです、タイヤSをクロールする手のように装着するのは、瞬間的に地上高を上げる効果も狙(ねら)っているためです。
バタバタと騒々(そうぞう)しいですが、これで多少の凹凸(おうとつ)は乗り越えられるようになりました。


あとは、4脚(きゃく)の取り付け方向ですね。
4脚とも揃(そろ)えるのか、左右は揃えて前後でずらすのか、全てを90°ずつずらすのか。
後者ほど、いずれかの脚(あし)が地面を掻(か)いている期間が長く、推進効率に優れそうですが。


 最後の競技は、がたごとレース!
瓦礫(がれき)に見立てた材木等を敷(し)き、成功率20%の難関コースを乗り越えて救助に向かえるかどうかを競います。


瓦礫を前に立ち往生(おうじょう)し、脚がもげるなど、「救助隊が必要な救助隊」が多い中、4脚の向きを全てずらしたロボットの成功が目立ちました(*3)。

4脚とも揃えたロボットでは、どの脚も着地していない間に、せっかく乗り上げた瓦礫を底面で滑(すべ)り下りてしまいました。

左右または前後の2脚ずつ揃えたロボットでは、瓦礫に乗り上げて傾いた胴体をさらに傾かせ、転覆(てんぷく)するか、でんぐり返っていました。



 ただ、路面の起伏(きふく)や摩擦状況により最適な構成が変わり得ますので、脚を揃えるのが常に不利と思わないようにしてください。
激しい凹凸を乗り越えるだけなら、4脚一斉(いっせい)に胴体を持ち上げた方が有利のはずです。
その後、胴体着地している間に滑り落ちないよう工夫すれば最強かもしれません。


*1 もしくは、テキストp.7~8の写真を見てください。

*2 前タイヤは、一方のギアMと同軸に付けられて等速で回り、後ろタイヤも、もう一方のギアMから始まって、ギアM同士で等速に伝わります。

*3 胴体と干渉(かんしょう)しないようクリアランスを確保しつつタイヤLに換装(かんそう)するなど、独自の工夫を凝(こ)らして走破(そうは)した人もいました。


1.3 <ミドルコース『プログラミングカー』>


 “プログラミング”と“カー”にそそられます。
“カー”だけに製作も理解も難しくはありませんが、生みの親で、アイデアコンテストで最優秀賞に選ばれた当時小学6年生に脱帽です。


 他のロボットでも、本体の製作時に動作をプログラミングする要素はありますが、本体(ハードウェアプログラム(ソフトウェア)媒体(ばいたい)を明確に分離した点で、唯一無二(ゆいいつむに)のロボットです。

 プログラムとは何でしょう。一連の動作や演目などの手順(表)ですね。
本体の設計を変更することなく、プログラムだけで動作を決定できる利点があります。
ゲームソフトやアプリのアップデート等が最たる活用例ですね。
コンピュータ類に限らず、テレビ、エアコン、冷蔵庫、洗濯機、炊飯器まで、現代の殆(ほとん)どの電気製品がプログラムに則り動作しています。

 本ロボットのプログラム媒体は、赤いロッドを繋(つな)ぎ合わせた一本の棒で、その幅(1~3本分)により、右折・直進・左折を指令します。
また、ロッドを円形に組めば無限ループを実現でき、永遠とジグザグ走行や8の字走行を繰り返すこともできます。

走行用モーター動力をプログラムロッドの送り用ローラーにも分配しているところがナイスです。

自動織機や自動演奏オルガンから始まって、黎明期(れいめいき)のコンピュータも、パンチカードと言って、無数のパンチ穴を開けた何十メートルもの紙を送ってプログラムやデータをセーブ・ロードしていましたが(*1)、その様を彷彿(ほうふつ)とさせます。


 2日目最後の競技に、三角コーンやテープで指示されたジグザグコースを無事に完走するプログラムを設計してもらいました。

このとき、試行錯誤を重ねながら仕上げるのも現実的な成功方法なのですが、計算によって一発成功を狙う科学的方法も追求して欲しいと思い、授業中に余力のある人に挑戦状を掲(かか)げました。


【お題】
 ロッド1穴分(約1cm)送る毎にロボットが何cm進むか?(小数第1位まで)
ただし、ロッドを送るタイヤS直径を38mm、本体を推進させるタイヤL直径を51mmとする。

【解答】
 タイヤSとLの1回転あたりの移動距離(変位)の比は、円周長の比であり、これは直径の比に等しく、38:51である。
ここで、ギア構成により、タイヤLの回転数はタイヤSの3倍である。
よって、タイヤLによる変位は、タイヤSに比して 3×51/38≒4.026倍となるので、
本ロボットは、ロッド1穴分(約1cm)あたり約4.0cm進む

 実際は、各所のスリップの影響により誤差が出ますが、例えば、55cmのロッドでは220cmのコース取りをプログラミングできるという“アタリ”が付けられるようになり、最初から成功に近づける可能性が高まるのです。

算数/数学が得意な人は、円周率3.14やπ(パイ)を持ち出して面倒な計算をしても同じ答が出ることを確認し、比を用いた考え方を深めてください。


*1 テキストp.22参照


1.4 <アドバンスプログラミングコース『アルクンダーZ(1)』>



 《下記を参照下さい》
  http://robocobo.sakura.ne.jp/blog/robot/adv1-1712.pdf







1.5 <プロ3年目コース『不思議アイテムIII-2(3)』>


 フルカラーLCD(液晶ディスプレイ)を使い尽くす最終月です。

 初めに、オブジェクト指向というプログラミングスタイルが紹介されましたが、
従来的な手続き型スタイルによる変数関数といったものは、本来それらによる操作の対象もしくは主体(言わばモノ=オブジェクト)があるはずで、
どこからでもアクセスできるように無所属的に散在させてバグの温床となるのではなく、オブジェクトに連関させて存在(*1)させようというアイデアです。

オブジェクト指向プログラムでは、変数プロパティ関数メソッドとも呼びます。

例えば、「住民票の発行」という手続き(メソッド)は、市役所職員という概念(クラスから実体(インスタンス)化された職員Aという人物(オブジェクト)が担うのであり、
同じくインスタンス化された別の職員Bも、別の「住民票の発行」を担う能力(メソッド)情報(プロパティ)を持ち合わせますが、
自転車の販売と修理」が専門の工員Cにはその能力もなければ、市役所の情報も操作できないという権能志向で、安全性と記述性を高めます

これは、一定以上の(バグが出まくる)規模のプログラムを作成する段にならないと理解が難しい概念ですので、先ずはプログラムをどんどん書いてみることです。

 さて、コーディングスタイルはともかく、描画アプリケーションの数々に触れましょう。


 1日目は、中学数学から習った関数グラフのCG描画です。
1次関数 y=ax+b による直線2次関数 y=ax2 による放物線など、机上では面倒なだけ(?)のグラフも、1ドットずつ座標計算しながら打点するプログラムが鮮やかに直線や曲線を紡(つむ)ぐのを見ると、実感が湧くというものです。


高校数学の三角関数 sin(x), cos(x) を組み合わせると、シンプルな式から予想外に美しい幾何学模様が生まれ、色々試したくなります。
方眼紙に手計算では、とても描けるものではありません。コンピュータが無い時代の数学者なら泣いて感激するところでしょう。

 ステップアップして、立体図形をぐりぐり回転させる3次元ポリゴンCGアニメともなると、
毎フレーム全頂点について、3次元空間座標を三角関数により回転し、2次元平面(画面)へ投影する中で、陰線・陰面処理、角度によって面の明暗や模様を変化させるシェーディングテクスチャマッピング等、膨大かつ高速な計算処理が要求されます(*2)。

全部自分で計算するArduino用マイコン(*3)には荷が重そうでしたね。
過去の非力なコンピュータもリアルタイム描画が苦手でした。
現在のPCやスマホがいとも簡単にやってのけるのは、爆発的に高速化したCPUやメモリの恩恵もありますが、これまた爆発的に進化したポリゴン座標計算・描画専用のGPU(Graphics Processing Unit)が搭載されているお陰です。


 2日目は、クリスマス・イブに相応しい(?)、素敵なエクスペリエンスに満ち溢れました。

 1つは、フラクタルという幾何学図形の造形手法で、「図形の全体と部分が自己相似になっている」と表現されます。
地形(海岸線など)や生物器官の分岐構造(血管)等、自然界の複雑な造形パターンにも、比較的単純なフラクタル構造(の近似)が当て嵌(は)まるとする研究もあり、CGによる創生シミュレーションが面白い分野です。










教養としても、コッホ曲線ギャスケットの三角形木の枝シダの葉など、「これぞフラクタル!」というプログラムの典型例を体験しました。

複雑な図形の割に、プログラム行数(数式)や変数が少なく、ちょっと弄(いじ)っては変化を楽しむというのも、コンピュータを得た現代人の特権です。

 もう1つは、ゲームプログラムです!
真っ当なコンピュータゲームを作るのに必要なデバイススキルは、もう全て手中です。


ハードウェアとして、LCD、コントローラ用ボタン(タクトスイッチ)の結線を、
ソフトウェアとして、ゲームのルールを定める論理(条件分岐・ループなど)の記法と、点打ち(ドット絵)や線引き・面の塗り潰し関数ライブラリの使い方を知っています。


シンプルなゲームプログラムからパラメータを弄り始めて、自分好みに改造するというのも、やる気と楽しさが尽きない、冬休みにぴったりな挑戦でしょう。
家族を欺(あざむ)いて自分だけが有利にプレーできるよう、こっそり隠しコマンドを仕込んでみるのも面白いですよ!(*4)


*1 オブジェクトには生成~消滅までの寿命があり、専属の変数(プロパティ)や関数(メソッド)も生死を共にする他、誕生会(コンストラクタ)や葬式(デストラクタ)に相当する儀式(自動的に呼び出されるメソッド)も定義でき、大規模プログラムには便利です。

*2 しかし、基本は高校の三角関数までで実現できます。
 自力で3D座標計算・描画ライブラリを作成してみようという高校生の生徒さん、数学の応用に適ったナイスな挑戦です!

*3 英Atmel社製AVRマイコンシリーズ ATmega328P で、28ピンDIP・8ビットCPUコア・20MHz・32kBフラッシュメモリ搭載品です。

*4 隠しコマンドの受付けには、一定以上の入力シーケンス(上上下下左右左右…など)を記憶しながら検査する必要があるため、面白いだけでなく、ちょっとしたプログラミングテクニックの修練にもなり、良いネタです。


2. 今月の課題


 <スタートアップ(全コース)>
  特にありません

 <プライマリーコース>
  - オリジナル図面プリント

 <ベーシックコース>
  - オリジナル課題プリント(3面図+設問)
  - 上記授業内容を精読する(概ね3年生以上/低学年は補助の下で)

 <ミドルコース>
  - オリジナル課題プリント(3面図+設問)
  - 上記授業内容を精読する

 <アドバンスプログラミングコース>
  - 上記授業内容を精読する

 <プロ3年目コース>
  - 上記授業内容を精読する(該当テキストページを見ながら)


3. 今後の授業スケジュール


◆小倉北1/21は『商工貿易会館(シティプラザ)』で開催します。
◆なかま1/27はハーモニーホール利用不可の為、代替施設(未定)で開催します。

 日付の()は臨時、!は原則外、?は予定の意です。

――――――――――【佐藤教室長】――――――――――

[東福間]第1・3土原則
 (2017年12月~)
   - 10:30~ アドプロ(/ミドル臨時)
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル(/アドプロ臨時)

 (2018年4月~予定)
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒ 1/6, 20,  2/3, 17,  3/3, 17


[東福間プロ]第2・4日原則
   - 15:30~ プロ3年目

 ⇒ 1/14, 28,  2/11, 25,  3/11, 25


[中間]第2・4土原則<なかまハーモニーホール>
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒1/13 第1回 3F会議室2
  1/27※第2回 代替施設(未定)
  2/10, 24,  3/10, 24

 ※1/27はハーモニーホール利用不可の為、代替施設(未定)で開催します。


[小倉北]第1・3日原則<ムーブ>
   - 10:00~ ベーシック/プライマリ
   - 13:00~ ミドル
   - 15:00~ アドプロ/ベーシック第2部

 ⇒1/ 7 第1回 ムーブ   5F小セミ
  1/21※第2回 シティプラザ6F
  2/4, 18,  3/4, 18

 ※1/21は『商工貿易会館(シティプラザ)』で開催します。


――――――――――【菅本教室長】――――――――――

[とばた]第2・4土原則<ウェルとばた8F>
   - 13:00~ 全コース(プロを除く)

 ⇒ 1/13, 27,  2/10, 24,  3/10, 24


――――――――――【中野教室長】――――――――――

[八幡東]第1・3土原則<レインボープラザ4F>
   - 13:30~ ベーシック
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒ 1/6, 20,  2/3, 17,  3/3, 17


[小倉南]第2・4日原則<総合農事センター2F>
   - 10:30~ ベーシック/プライマリ
   - 13:00~ ミドル  /アドプロ

 ⇒ 1/14, 28,  2/11, 25,  3/11, 25


4. お知らせ

 11月課題 高得点者  []内は教室と学年

  ◆プライマリ【9名平均 図面3.6】
   5点…柴田[小倉北2], 林田[小倉南 年長]

  ◆ベーシック【19名平均 図面2.8+設問2.0=4.8】
   10点…荒木[小倉北3]
   9点…なし
   8点…宮尾[八幡東4], 森崎[八幡東2]

  ◆ミドル【23名平均 図面3.4+設問2.6=6.1】
   10点…山本[中間5], 橋本[小倉南3]
   9点…辻[小倉南6], 原[小倉南4]
   8点…吉良[小倉南6], 杉本[小倉南5]

  ◆アドバンスプログラミング【5名平均 図面6.4+設問4.4=10.8】
  最高14点…江平[小倉北7]


5. ご挨拶

 本年も何かとご贔屓を賜りありがとうございました。
 佐藤も中野も、ロボット教室で皆様とのお付き合いの中から数々の気づきを頂戴し、やりたいこと・やるべきことに溢れています。
 何事もそうですが、今年よりも来年を良くするように、そして生徒さんが何か人生のヒントを得られる教室となることを願って鋭意努力して参りますので、どうぞ宜しくお願い申し上げます。
 よいお年をお迎え下さい。


東福間・中間・小倉北教室 佐藤 / 八幡東・小倉南教室 中野

2017年11月30日木曜日

2017年11月報

1.11月授業内容
2.今月の課題
3.今後の授業スケジュール
4.お知らせ


1. 11月授業内容


1.0 <スタートアップ>


 割愛します。


1.1 <プライマリーコース『ロボコング』>



 割愛します。









1.2 <ベーシックコース『ロボクリーン』>



 おそうじロボットです。
90°ずつ向きをずらした9本の赤い“ブラシ”を高速回転させる様がにくいですね!
吸引こそしませんが、あのロボット掃除機『ルンバ』を彷彿(ほうふつ)とさせます。

 掃除機として、大事な工夫点があります。
ブラシは高速回転させたいが、本体の走行スピードは…?
疾走(しっそう)されては困るので、タイヤはゆっくり回さなくてはなりませんね。
この相反(あいはん)する要求をどうやって1つのモーターで実現するかです。

部品配置は、モータータイヤブラシ の順に並んでいます。
回転速度は、速い遅い速い です。
つまり、モーターを一旦(いったん)減速(げんそく)してタイヤを回した後、増速(ぞうそく)してブラシに伝える構成が必要であり、それが筐体(きょうたい)の側面に並んだ大小6枚のギアの役割なのです。


3連のピニオンギア(歯数8)がタイヤと同軸のギアL(歯数40)を回すので、1/5に減速されます。
その後、ギアM(歯数24)を経由してブラシと同軸のピニオンギア(歯数8)を回します。
途中のギアMは気にせず(*1)、ギアLピニオンギア と考えて、5倍の増速になります。
つまり、1/5×5=1 で、モーターと同じ回転数(等速)に戻してブラシを回しているのですね。

《ギアの回る速さについて勉強したい人は、下記を読んでください》
 http://robocobo.sakura.ne.jp/blog/robot/bas-1711.pdf


 2日目最後の競技は、ガチンコおそうじ対決!
狙(ねら)いを定めたロボットの前に、小さくカットしたスポンジのゴミを散りばめ、「よーいドン!」でゴミの争奪戦(!?)です。
「そこまで!」の合図までに内部に取り込めたゴミの数を競います。


皆さん、対戦になると燃えますね~。
まして、改造の良し悪しがゴミの数に表れますから、時間いっぱい改造に勤(いそ)しむ人もいましたが、かえって本番で成績が振(ふ)るわず、悔しい思いをしていました。

 このロボットで苦心するのは、赤いブラシが(当然に)固いプラスチック部品であり、柔軟性(じゅうなんせい)がないので、筐体との隙間(すきま)にゴミが挟(はさ)まってブラシが止まりやすいことです。
高速回転(増速)させる分、回転力(トルク)が弱いので、たやすく停止します。


この問題を解決しようと、過去にすばらしいチャレンジも見られました。
ブラシの毛(クロスジョイント)が固いのは仕方がないので、シャフトに“半固定”し、毛一本一本の回転力を弱めるアイデアです(*2)。

1) クロスジョイントをシャフト(十字形断面)の周りに固定するのではなく、自由にぶら下がるよう、十字穴ではなく丸穴に通す
2) クロスジョイント同士が密着するよう、ブッシュやグロメットで隙間を埋める

これには、
●詰まらない限り、全ての毛がシャフトと一緒に回転する
●詰まった毛だけ止まり、ブラシ全体の回転を止めない
という設計思想がしっかり体現されています。

肝心(かんじん)のゴミ取り性能はともかく、何か問題に直面した時、限られた部材(キット)の中でも「何か解決方法があるという好例です。


 他には、毛として、回転シャフトに輪ゴム結束バンドをくくり付けてはどうでしょう。
内部の汚れが問題になるほどゴミが取れてしまうかもしれませんよ。


*1 ギアMを気にして計算しても、40/24×24/8=40/8=5 と同じです。間にギアMを挟んでいる理由は、回転方向と位置を調整するためです。

*2 スリップトルク(滑り摩擦力を利用した回転力伝達)や、トルクリミッター(回転力制限装置)呼ばれる機械要素です。


1.3 <ミドルコース『アメンロボ』>


 アメンボのような動きで進みますが、推進原理は異なります。
ミドルコース随一(ずいいち)と言っていいくらい、突き詰めれば高度な学習テーマに満ちた、難しいロボットです。

 4脚キャスター付き椅子のように、X字に交差させたロッドの先端4箇所に、自在に向きを変えるタイヤSを取り付け、ロッドの交差点に本体を載せています。

 1日目では、モーターで回転するクランク機構(*1)により、ロッドのX字を閉じたり開いたりする動きを実現しました。
製作はこれでほぼ完成なのですが、タイヤSはその向きがX字の開閉に合わせて阿波踊りの手先のように自在変化するだけで、一向に進む気配がありません。
どうしたものでしょう。2日目までの課題にしてみました。

 よく観察すると、タイヤは向きを変えているだけでなく、少し転がっては逆方向に戻る動きも見られますので、学習経験を生かして、
ラチェット機構により回転を一方向に制限してやればいい」
というアイデアも出ましたが、前進させるまでには至らないようです(*2)。


 2日目のテキストを配り、前輪同士と後輪同士をくくるように2本の輪ゴムをキャスターの根元に掛けました。
するとどうでしょう。輪ゴムがキャスターを内側に引っ張ることで、タイヤの向きが前後方向に“ほぼ”そろいました

スイッチを入れてみると、1日目が嘘のようにスイスイ進みます。
X字の開閉に合わせて、床面との摩擦により、前後輪とも、ハの字平行逆ハの字の形を繰り返します。

X字を開く力は、左右両輪を前方に向かって開かせ(逆ハの字)、
特に後輪(*3)が平泳ぎで水を(スケーティングで雪や氷を)掻くように、推進力に変換されています。

X字を閉じる力は、左右両輪を前方に向かって閉じさせ(ハの字)、
特に前輪(*3)で地面を抱き込んで後方へ追い遣(や)るように、推進力に変換されています。


輪ゴムの弾性力により、
(1) タイヤを前後方向に緩やかにそろえる
(2) 地面との摩擦力でタイヤの向きが変化するのを少しだけ許す
ことが功を奏しているのです。


 実際は、ここに書く程に簡単ではなく、X字リンクの歪(ゆが)みやタイヤの摩擦からくる開閉の重たさ、輪ゴムの強さ(*4)に起因して、推進させるまでに苦労し、競技する余裕もない難題でした。

 ラチェットは使いませんが、タイヤが後ろに転がる瞬間があるようなら、それを阻止することで推進効率が上がるかもしれません(*5)。

《キャスターがハの字形に開閉し、推進力を生むメカニズムを勉強したい人は、下記を読んでください》
 http://robocobo.sakura.ne.jp/blog/robot/mid-1711.pdf


*1 回転軸の回りで円形運動する別の回転軸をジョイント(関節)とするリンク機構で、回転運動⇔往復運動を変換する。手回しハンドル、自転車のペダル、ピストン式エンジンが主な利用例。

*2 過去に考案した生徒さんがいましたが、そもそもタイヤの向きがバラバラなので失敗しました。

*3 X字の開閉によってキャスターが前方へ運ばれる方。

*4 輪ゴムが弱ければタイヤの向きが定まらず、強ければモーターの力負けで停止します。

*5 下手をすると前進の摩擦も増えて効率が下がるかもしれません。


1.4 <アドバンスプログラミングコース『ドレミボット(2)』>



 《下記を参照下さい》
  http://robocobo.sakura.ne.jp/blog/robot/adv1-1711.pdf





1.5 <プロ3年目コース『不思議アイテムIII-2(2)』>


 高解像度(一昔前の…)フルカラーLCD(液晶ディスプレイ)が手に入ったところで、ゲームのキャラクターでも表示したくなるのが人情です。


絵の表示には、ドット単位の画像データを作成し、プログラム内に格納し(*1)、そのデータをスキャンしながら1ドットずつ描画するルーチンを記述しなければなりません。

話を簡略化し、3×3ドット、デジタルRGB(8色)カラー画像データを格納するコードでおさらいします。


//色番号 黒=0,青=1,赤=2,紫=3,緑=4,水=5,黄=6,白=7

char B[] = {0, 255,  0, 255,  0, 255,  0, 255};

char R[] = {0,  0, 255, 255,  0,  0, 255, 255};

char G[] = {0,  0,  0,  0, 255, 255, 255, 255};

//255は最大輝度;16進数で書くと0xFF

char pic1[9] = {
  // 1次元配列の画素データ
  1, 6, 2,  1, 6, 2,  1, 6, 2
};

char pic2[3][3] = {
  // 2次元配列の画素データ
  {1, 6, 2},
  {1, 6, 2},
  {1, 6, 2},
};

char pic3[3][3][3] = {
  // 3次元配列の画素データ
  { {255, 0, 0}, {0, 255, 255}, {0, 255, 0} },
  { {255, 0, 0}, {0, 255, 255}, {0, 255, 0} },
  { {255, 0, 0}, {0, 255, 255}, {0, 255, 0} },
};

int x, y, color1, color2;

for (y = 0; y < 3; y++) {
  for (x = 0; x < 3; x++) {


    // 1次元配列データを描画
    color1 = pic1[y*3 + x];
  // pic1[0]…pic1[8]

    TFT.stroke(
B[color1], G[color1], R[color1]);
  //色設定
    TFT.point(15 + x, 15 + y);
  // (15,15)を左上始点にドット打ち

    // 2次元配列データを描画
    color2 = pic2[y][x];
  // pic2[0][0]…pic2[2][2]

    TFT.stroke(
B[color2], G[color2], R[color2]);
  //色設定
    TFT.point(25 + x, 25 + y);
  // (25,25)を左上始点にドット打ち

    // 3次元配列データを描画

    TFT.stroke(
pic3[y][x][0], pic3[y][x][2], pic3[y][x][1]);
  //色設定
    TFT.point(35 + x, 35 + y);
  // (35,35)を左上始点にドット打ち
  }
}



上記のプログラムでは、配列 pic1, pic2, pic3 の何れの画素データからも、同じルーマニア国旗を描きます。


画像データが大きくなるほど、1次元配列 pic1 よりも、2次元配列 pic2 を使った記法の方が書くにも読むにも分かり易くなるのが分かるでしょう(*2)。


3次元配列 pic3 の記法はどうでしょうか。
これなら色番号0~7毎のの輝度配列 B[], R[], G[] を定義する必要もなく、各原色を256階調(*3)で直接記述できますので、オールマイティには違いありません。

しかしながら、クレヨンの8色セットがいいのか、512色セットがいいのか、1677万7216色セットがいいのかは、描く絵と技量によります。


 6色だの、15色だの、表現力と処理能力の乏しさに悩んだ30年前と異なり、コンピュータが人間の感性を超えて高性能化を遂げた現代では、何でもマシンの最大能力を生かすのが最善策ではありません。

一先ず私たち素人がゲーム画面を構成するのに、8色や16色パレットを定義して扱い易くし、画像データ量も抑える上記のやり方は、優れた一例でしょう。


*1 パソコンゲームや動画再生ソフト等の大規模プログラムでは、描画プログラムとデータ部を分けて保存しますが、小規模な画像データは、プログラム内にコーディングすることもあります。

*2 pic1 へのデータ入力も、改行で工夫して pic2 への入力と遜色なく見やすく書けますが、2次元画素データは pic2[y][x] のように2次元的にアクセスできた方が圧倒的にスマートです。

*3 輝度を8ビット(1バイト)で表わすので 2の8乗=256通り、RGB3色の組合せで 256の3乗=2の24乗=1677万7216色(フルカラー)を表現できます。


2. 今月の課題


 <スタートアップ(全コース)>
  特にありません(アドバンスプログラミング生は2017年9月報を参照)

 <プライマリーコース>
  - オリジナル図面プリント

 <ベーシックコース>
  - オリジナル課題プリント(3面図+設問)
  - 上記授業内容を精読する(概ね3年生以上/低学年は補助の下で)

 <ミドルコース>
  - オリジナル課題プリント(3面図+設問)
  - 上記授業内容を精読する

 <アドバンスプログラミングコース>
  - オリジナル課題プリント(見取図+設問)
  - 上記授業内容を精読する

 <プロ3年目コース>
  - 上記授業内容を精読する(該当テキストページを見ながら)


3. 今後の授業スケジュール


◆東福間ミドル時間を12月~変更(10:30→15:30)に極力ご協力下さい。

 日付の()は臨時、!は原則外、?は予定の意です。

――――――――――【佐藤教室長】――――――――――

[東福間]第1・3土原則
 (2017年12月~)
   - 10:30~ アドプロ(/ミドル臨時)
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル(/アドプロ臨時)

 (2018年4月~予定)
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒ 12/2, 16,  1/6, 20,  2/3, 17


[東福間プロ]第2・4日原則
   - 15:30~ プロ3年目

 ⇒ 12/10, 24,  1/14, 28,  2/11, 25


[中間]第2・4土原則<なかまハーモニーホール>
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒12/ 9 第1回 3F会議室2
  12/23 第2回 3F会議室2
  1/13, 27※,  2/10, 24

 ※1/27はハーモニーホール利用不可の為、代替施設(未定)で開催します。


[小倉北]第1・3日原則<ムーブ>
   - 10:00~ ベーシック/プライマリ
   - 13:00~ ミドル
   - 15:00~ アドプロ/ベーシック第2部

 ⇒12/ 3 第1回 5F小セミ
  12/17 第2回 5F小セミ
  1/7, 21※,  2/4, 18

 ※1/21は『商工貿易会館(シティプラザ)』で開催します。


――――――――――【菅本教室長】――――――――――

[とばた]第2・4土原則<ウェルとばた8F>
   - 13:00~ 全コース(プロを除く)

 ⇒ 12/9, 23,  1/13, 27,  2/10, 24


――――――――――【中野教室長】――――――――――

[八幡東]第1・3土原則<レインボープラザ4F>
   - 13:30~ ベーシック
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒ 12/2, 16,  1/6, 20,  2/3, 17


[小倉南]第2・4日原則<総合農事センター2F>
   - 10:30~ ベーシック/プライマリ
   - 13:00~ ミドル  /アドプロ

 ⇒ 12/10, 24,  1/14, 28,  2/11, 25


4. お知らせ

1) オリジナル電子工作 はんだ付け講座 満員御礼


 11/23(木)ムーブ4F工芸室にて、部屋・講師ともに定員を大幅を増やし、AMの部9組、PMの部14組の方に参加頂きました。

 はんだ付けを初めてやると確実に失敗するものですが、300℃を超える金属に皆さんドキドキしながら練習を重ね、LED常夜灯の製作本番には全員が成功しました。


 『やってはみたいけど、機会がない』 そんな声が多く寄せられました。

 入門編としてまた開催しますが、はんだ付けに慣れた向きには、もっと規模の大きな電子工作を企画しますね。
 (実は欲張りすぎて間に合わなかったのです…)

 電子回路に興味が芽生えると、数学が面白くなり、自ずとマイコン・プログラミングに繋がっていきます。
 足りないと言われているプログラマーは量産されます。AIかもしれません。
 希少なのは、機械・電気・プログラムに通じたエンジニアです。
 総合力・創造性のセンスは最後まで人間の領域です。

 学齢期は、パソコンのキーボードよりも手先を総動員した物作りで伸び代の大きな頭脳に育って欲しいとの思いから、講座を増やして参ります。


2) 10月課題 高得点者  []内は教室と学年

  ◆プライマリ【9名平均 図面4.4】
   5点…河原[中間1], 渡邉[中間1], 長友[八幡東 年長], 柴田[小倉北2], 光井[小倉北1], 林田[小倉南 年長]

  ◆ベーシック【21名平均 図面3.1+設問2.3=5.4】
   10点…なし
   9点…荒木[小倉北3], 大和[小倉北3]
   8点…川村[中間4], 渡邉[中間3], 森崎[八幡東2]

  ◆ミドル【15名平均 図面3.2+設問2.6=5.8】
   10点…吉良[小倉南6]
   9点…山本[中間5]
   8点…橋本[小倉南3]


東福間・中間・小倉北教室 佐藤 / 八幡東・小倉南教室 中野

2017年10月31日火曜日

2017年10月報

1.10月授業内容
2.今月の課題
3.今後の授業スケジュール
4.お知らせ


1. 10月授業内容


1.0 <スタートアップ>



 割愛します。




  [三輪車ロボをモーター駆動化した独自改造の好例]


1.1 <プライマリーコース『SLロボロコ』>



 割愛します。





1.2 <ベーシックコース『ケンドーロボ』>



 文字通り、剣道のように竹刀(しない)を振るロボットです。
剣道には、ここぞという時に、前進と「面!」の2つの俊敏(しゅんびん)な動きが必要です。

 1日目では、モーターで左右両輪を駆動し、前進・後退できるようにしましたが、竹刀は手動で前後に振り動かせるだけです。
竹刀を自動的に振るには動力源動作タイミングを与えなくてはなりません。
2日目に解決します。


 動力源として、モーターを前進に利用してしまっているため、輪ゴム(の弾性力)を利用します。
前面に引っ掛けた輪ゴムが、竹刀を後方へ振り構えるにつれ引っ張られます。

動作タイミングとしては、背後に振り構えた竹刀を振り下ろさないよう固定するロックが、相手にぶつかった衝撃を検知して外れるようロック部品と一体化してスライドするバンパーを前部に取り付けました。
衝突して押し込まれるバンパーを利用する点が、先月の『う王さ王』と似ていますね。


 このロックがうまく外れるための工夫が設計されています。それは“スピード”です。
スピードがあればこそ、ぶつかった衝撃が大きくなり、ちゃんと検知できるのです。

だから、今回のロボットはちょろちょろと速く走り、捕(つか)まえるのが大変ではありませんでしたか?
設計上の違いは、モーター軸に取り付けるのがいつものピニオンギアではなく、もっと大きなギアMでしたね。
こうして(ギアMがギアMを回して)モーターの回転数を落とさずにタイヤに伝え、速く走らせていたのです(*1)。


 最後の競技は「一本!」勝負。早く竹刀を振り下ろし、相手に当てた方が勝ちです。
バンパーを長くして早めに相手を検知し、それ以上に竹刀を長くしてリーチを伸ばすことも一つの指針ですが(*2)、あまり欲張ると重くなって、動作にキレがなくなりましたね。

案外、ノーマル仕様の小柄なボディの方が、体格のいい先輩たちを打ち負かしていました。


 なお、ケンドーロボ同士を対面させて、いざ取り組もうと発進させても、まっすぐ進まずに相手を打てないと悩むことがありました。

左右のタイヤは同一シャフトで直結しており、必ず等しく回転するので(*3)、一旦走り出した後はほぼ直進するのですが、最初の急加速する瞬間は、大きな力(タイヤのグリップ力)が地面にかかり、摩擦や重心バランスの関係で、どちらかのタイヤが多めにスリップしてしまうことが原因です。

底にパーツを付けて、地面との摩擦スリップバランスを取ることで直進したり、バランスを崩すことで曲がったりするようにも調整できましたね。


*1 同じ大きさのギア同士は、回転速度が同じに保たれます。このことを「減速しない」と言います。先月の『う王さ王』の改造例としても紹介しました。

*2 自分と相手のバンパーが当たるようだと、相手からも早く検知されるので、相手と高さを変えない限り、あまり有利とは言えません。

*3 モーター直結のギアが右タイヤを先に回していることが曲がる原因と分析する人もいましたが、そうではなく、左右のグリップ力のバランスを崩している面が影響していると考えられます。


1.3 <ミドルコース『ロボバッター』>



 ピッチャーとバッターの2部構成です。
モーターは1つだけなので、その動力はバッターに譲って、ピッチングは輪ゴムを使います。
逆に設計することもできますが、この方がコントロールし易いのでしょう(*1)。

 ピッチャーロボ(ピッチングマシン)の構造は、中世の戦争で利用された投石器そのものです。
いろんな物を投げ飛ばして、飛距離を観察してみました。
そこそこ重い物(ギアの塊)で体積が同程度なら、軽い方が遠くまで飛びました。
限られた輪ゴムのパワー(弾性エネルギー)で加速させ易いためです。

同程度に軽い物(ボール状に丸めたA5用紙)なら、堅く丸めて体積を小さくした方が飛びました。
空気抵抗を受け難くなるためですね。


 さて、投げられた物をバッティングするのは至難の業です。
バットを振るタイミングの問題もありますが、そもそもピッチングが安定せず、同じ物を投げても飛距離がばらばら。
玉が加速中にバケット(ピッチャーの手)の中で動いてしまい、飛ばす方向やスピードが変わるからと考えられます(*2)。

まして、バッティングマシンのスイッチを手動でオンにする1日目のロボットでは、全くと言っていいほど玉に当たりません。


 2日目にこれを自動化します。
電池ボックスから出たケーブルは、先ずはピッチャーに備え付けたタッチセンサー(黒)を経由させ、延長ケーブルを通して遠くのバッターに接続します。
こうして、ピッチャーが玉を投げ終わった瞬間にバッター内のモーターが回り始め、バットを自動的に振るようになります。

 さらに、いつまでもバットをぶん回し続けているのも格好悪いので、振り終わった位置にタッチセンサー(グレー)を備え付け、モーターを止めます。
これでバットを一回転分振るだけの、省エネ野球部になりました。

 電池ボックス ⇒ タッチセンサー(黒) ⇒ タッチセンサー(グレー) ⇒ モーター

のような直列接続により、両方のセンサーがオンになる間だけ通電する仕組みができ上がります。



 さて、肝心のバッティング精度ですが、ピッチングが安定しない中、タイミングだけは再現性を出せるので、二者間の距離や投球角度(*3)を調整すれば、5回中1回くらいは当てられるようになりました。
ピッチングを安定化させた人なら、90%以上の確度で当たっていました。

こうして我々人間は、機械化の恩恵に与(あずか)るわけですね。


*1 その大きな理由は、ぐにゃぐにゃに曲がっていても構わない延長ケーブルを使って、瞬時に電気エネルギーを遠くへ輸送できるからです。
 自動車も、電気化するほどコントロール性に優れます。

*2 つまり、バケットの中でぐらつかない大きさの玉にすることが、ピッチングを安定化するためのコツです。

*3 同じ初速度でも、投げ上げる角度によって飛距離が変わります。一般に45°が最も飛ぶと言われますが、実際は玉によって異なる空気抵抗を受けるため、40°前後になるようです。
 初速度と角度は、アームが止まった(ピッチャーの手を離れた)瞬間で決まります。


1.4 <アドバンスプログラミングコース『ドレミボット』>



 《下記を参照下さい》
  http://robocobo.sakura.ne.jp/blog/robot/adv1-1710.pdf





1.5 <プロ3年目コース『不思議アイテムIII-2(1)』>


 ついに、仕上げの3年目コースに入りました。

 いきなり1日目から、垂涎の的たるフルカラーLCD(液晶ディスプレイ)に触れます。

ドット数は160×128と、一昔前のガラケー画面並みですが、それでも、1・2年目でそれなりに遊べた8×8ドット赤色(1ビット単色)LEDマトリクスが320個も入るドット数で、さらに24ビットフルカラーですから、320×24=7680倍の情報量です(*1)。
本格的なゲームも作れる解像度ですから(*2)、CPUとメモリを相当に喰いそうですが、一段とレベルの高いCGプログラミングに応えてくれそうです。


 といっても、直線や四角形・円などを描画するのは、8×8マトリクス同様の関数が用意されていますから、考え方は同じです。
同じような使い方でもCGがキレイになり、さらにカラー指定関数や引数が増えて楽しくなっただけです。損はありませんね。

 2日目では、テキスト文字表示関数 TFT::text("文字列",x,y) を使って、画面上に任意のメッセージを書いてみました。色も大きさも簡単に変えられます。
やはり、アルファベット1文字か数字2桁がやっとの8×8マトリクスとは表現力が格段に違いますね。もう戻れません(*3)。





 決まったプログラム描画ばかりじゃつまらないので、「各種センサーからの入力情報を処理して表示に反映させよう!」という段取りも、もはや定番です。

タッチセンサータクトスイッチ等のデジタル入力なら digitalRead()可変抵抗ボリューム等のアナログ入力なら analogRead() で読み取れます。

超音波距離センサーなら、便利な関数ライブラリを利用しましょう(*4)。
テレビを録画したければ、お気に入りのレコーダーの説明書を読んで使い方が分かれば良いだけで、レコーダーの構造を解析する必要はないのと同じです。

 もう、ゲームが作りたくてウズウズし始めましたか? それを理解度のパラメータにしてください。


*1 背景色 TFT::background(B値,G値,R値) や線の色 TFT::stroke(B値,G値,R値) などの指定関数には、RGB各値を0~255(8ビット256通り)で指定して、24ビット1677万通りの色分けができますが、LCDの実際の能力は16ビット65,536色までのようです。

*2 Nintendoゲームボーイ 160×144ドット×2ビット(モノクロ4階調)~6ビット(56色) よりも豊かでしょう。
 ゲームボーイアドバンスで 240×160ドット×15ビット(32768色)、
 DSは上下画面とも256×192ドット×18ビット(26万色)、
 3DS/2DSは上(下)画面 400(320)×240ドット×24ビット(1677万色) と進化しています。

*3 人間とは、そういう生き物です。幸福は、ステップを踏んで徐々に味わうのがコツなのに、いきなり最先端のスマホや3Dゲームで遊ぶ幼子(おさなご)は不憫(ふびん)です。
 こうして、テクノロジーが進化し続けない限り、幸せが続かない人間生活が続くのですね…。

*4 従来、1・2年目では RPlib::ussRead() を使ってきましたが、今回は NewPing::ping_cm() を使っています。
 委細(いさい)の仕事をAさんに頼むかBさんに頼むかの違いで、使い易い方を選べば良いのです。


2. 今月の課題


 <スタートアップ>
  特にありません

 <プライマリーコース>
  - オリジナル図面プリント

 <ベーシックコース>
  - オリジナル課題プリント(3面図+設問)
  - 上記授業内容を精読する(概ね3年生以上/低学年は補助の下で)

 <ミドルコース>
  - オリジナル課題プリント(3面図+設問)
  - 上記授業内容を精読する

 <アドバンスプログラミングコース>
  - 上記授業内容を精読する

 <プロ3年目コース>
  - 上記授業内容を精読する(該当テキストページを見ながら)


3. 今後の授業スケジュール


◆八幡東11/4 → 11/11へシフトしています。
◆小倉北11/5はムーブ5F企画ルーム1・2です。
◆中 間11/11はハーモニーホール3F会議室4(和室)です。

◆中 間ミドル時間を11月~変更(15:15→15:30)させて頂きます。
◆東福間ミドル時間を12月~変更(10:30→15:30)に極力ご協力下さい。

 日付の()は臨時、!は原則外、?は予定の意です。

――――――――――【佐藤教室長】――――――――――

[東福間]第1・3土原則
 (~2017年11月)
   - 10:30~ ミドル/アドプロ
   - 13:30~ ベーシック/プライマリ
  (- 15:30~ ミドル/アドプロ第2部)

 (2017年12月~)
   - 10:30~ アドプロ(/ミドル臨時)
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル(/アドプロ臨時)

 (2018年4月~予定)
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒ 11/4, 18,  12/2, 16,  1/6, 20


[東福間プロ]第2・4日原則
   - 15:30~ プロ3年目

 ⇒ 11/12, 26,  12/10, 24,  1/14, 28


[中間]第2・4土原則<なかまハーモニーホール>
 (2017年11月~)
   - 13:30~ ベーシック/プライマリ
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒11/11 第1回 3F会議室4(和室)
  11/25 第2回 3F会議室2
  12/9, 23,  1/13, 27


[小倉北]第1・3日原則<ムーブ>
   - 10:00~ ベーシック/プライマリ
   - 13:00~ ミドル
   - 15:00~ アドプロ/ベーシック第2部

 ⇒11/ 5 第1回 5F企画1・2
  11/19 第2回 5F小セミ
  12/3, 17,  1/7, 21※

 ※1/21は『商工貿易会館(シティプラザ)』で開催します。


――――――――――【菅本教室長】――――――――――

[とばた]第2・4土原則<ウェルとばた8F>
   - 13:00~ 全コース(プロを除く)

 ⇒ 11/11, 25,  12/9, 23,  1/13, 27


――――――――――【中野教室長】――――――――――

[八幡東]第1・3土原則<レインボープラザ4F>
   - 13:30~ ベーシック
   - 15:30~ ミドル
   - 17:30~ アドプロ

 ⇒ 11/11!※, 18,  12/2, 16,  1/6, 20

 ※11/4は施設使用不可により一週シフトします。


[小倉南]第2・4日原則<総合農事センター2F>
   - 10:30~ ベーシック/プライマリ
   - 13:00~ ミドル  /アドプロ

 ⇒ 11/12, 26,  12/10, 24,  1/14, 28


4. お知らせ

1) オリジナル電子工作 はんだ付け講座

 宿題ポイント交換用の景品として、電池チェッカー等の電子工作キットを支給して参りますが、興味津々な一方で、半田付け作業の不慣れがネックのようです。
 今回の講座は、本格的な電子工作には欠かせない半田付けの練習から、使えて楽しい電子機器の製作までを短時間で履修し、持ち帰り頂きます。
 必要物は全てキットに含まれますので、準備物はありません。
 電子工学の道に目覚める運命(!?)の生徒さんに強くお薦めします。

【対象】
 ロボット/プロ教室に通う生徒さん・兄弟姉妹 小3~高校生

【定員】
 6組×2=12名(ご家族同伴可)

【日時】下記いずれかの部(2時間)
 ・AMの部 11/23(木) 10:00~12:00
 ・PMの部 11/23(木) 14:00~16:00

【会場】
 北九州市立男女共同参画センター(ムーブ)4F 工芸室

【工作名】
 『明るさセンサー式LED常夜灯』

【内容】
 付属の半田ごてセットを使って、電子部品やICのはんだ付け作業を練習した後、実用的なLED常夜灯を製作して持ち帰ります。
  http://robocobo.sakura.ne.jp/blog/lab/lab0-1710.pdf

【参加料】
 5,500円(受講料3,500円+キット代2,000円)

【講師】
 中野 司・佐藤 誉夫

【申込方法】
 11月授業でチラシを配布し、11/5~メールにて募集、11/16決定(抽選)します。
 ご反響メール歓迎します!

【申込条件】
 - 講座指定の半田ごてセットを使用頂きます。お子様の占有物にしてあげて下さい。
  進行上、お手持ち品の持込みはご遠慮下さい。

 - 半田ごては熱器具です。扱いを誤ると火傷・火災の恐れがあります。
  持ち帰り頂きますので、ご家庭での取り扱いルールをお決め下さい。

 - 原則として、12月お引落し額(1月分)に加算して徴収させて頂きます。
  キャンセル・欠席により空席が発生した場合は返金できません。(キットと製作テキストのみお渡しします)


2) 9月課題 高得点者  []内は教室と学年

  ◆プライマリ【6名平均 図面4.8】
   5点…筋田[東福間2], 河原[中間1], 渡邉[中間1], 長友[八幡東 年長], 林田[小倉南 年長]

  ◆ベーシック【28名平均 図面2.3+設問2.7=5.0】
   10点…なし
   9点…なし
   8点…宮尾[八幡東4], 森崎[八幡東2], 糸山[小倉北3]
   7点…川村[中間4], 荒木[小倉北3]

  ◆ミドル【15名平均 図面3.1+設問2.6=5.7】
   10点…吉良[小倉南6]
   9点…田中[東福間5], 橋本[小倉南3], 原[小倉南4]
   8点…なし


東福間・中間・小倉北教室 佐藤 / 八幡東・小倉南教室 中野