2016年8月31日水曜日

8月授業内容

1.8月授業内容
2.今月の課題
3.今後の授業スケジュール
4.ひと言


1. 8月授業内容


1.0 <スタートアップ>


 割愛します。


1.1 <プライマリーコース『モッテクテク』>


 割愛します。









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


 でんぐり返りロボットです。モーターで回す長い腕が地面を突くからでんぐり返るんです。
単純ですし見ていて当たり前、何が面白いんだ!?と言うとそれで終わります。

しかし、座って静止させた状態からこのロボットの動きを予測するのは難しく、先生も最初は分かりませんでした。


 事実、腕を後ろ向きに回すと前転し、前向きに回すと後転するという、予想外な動きを見せます。
実際は、前転はできますが、(人に似せて)前方向にしか曲がらない脚(ももの部分)のせいで後転はできません

後転時は、重力などで脚がまっすぐなままになり腕の回転半径をはみ出るのででんぐり返るまでは至(いた)らず、ちょうど脚をピンと伸ばした腕立て伏せか、バタフライのような状態に陥(おちい)ります(*1*2)。

 長い腕の先を地面に突かせて重い本体を起こすには、回転軸に強大な力(トルク)が必要です(*3)。
おなじみの1/9減速ギア機構がモーターからの回転を遅くしてトルクを9倍に上げていますが、腕が長い分、何かの拍子に本体や持ち手に引っ掛かると(イタタタ…)、てこの原理で強大な逆向きの力が回転軸を止めようとし、ギヤに負担が掛かってガリガリ音とともに噛合せが外れ、修理することもしばしば。


 また、でんぐり返り時の衝撃が激しいので、頭が割れたり、電池が外れたりしないよう、次のような強化緩衝策(かんしょうさく)を立てておくことも、頑丈に作る秘訣(ひけつ)でした。
1) 頭部をロッドとペグでつなぎ留める(フランケンシュタイン?)
2) 頭部に輪ゴムを巻く(ミイラ?)
3) 電池ボックスに輪ゴムを巻く
4) 顔面や後頭部に、タイヤやグロメット(ゴムリング)を取り付ける

 それにしても、今回のロボットは元気いっぱいというか、バッタンバッタンと動きが激しく、音も騒がしいロボットでした。顔面が外れちゃうね!


*1 腕を回しながら、額(ひたい)を床に打ち付けつつ、「申し訳ございません、申し訳ございません」のポーズにも見えましたね。

*2 前転でも後転でも、でんぐり返る条件は[腕の長さ脚の長さ]です。だから、腕を長くするか、脚をもげば(怖い…)後転もするようになりましたね。

*3 長い傘の先っぽで地面に絵を描く時は、短い小枝を使う時よりも、持ち手にかなりの回転力が必要でしょ?


1.3 <ミドルコース『サカアガリン』>



 逆上がりする鉄棒ロボットです。
先月に続き、今月も当時小学2年生のアイデアコンテスト出品作がベースです。(恐るべし2年生…)

 さて、このロボットが逆上がりに成功するまでに、設計上の工夫製作の手順がいろいろありました。
人間の逆上がりとは少し違います。製作を通して、皆さんはいくつ気付けたでしょうか?

1) 周期的に腕と脚(ももの部分)を曲げたり伸ばしたりする機構
 同期した腕と脚の動きは、ずれることなく繰り返されます。
1周期毎に、噛み合わせた脇腹のギアM(腕用)とギアL(脚用)が半回転しては戻るためです。
この周期を決めているのが、腰のロッド3アナ(=ギアM3枚)の回転で、これをクランクにして、脇腹のギアLを往復回転させています。

2) 強靭な腕力と脚力
 てこの原理により、つま先に重たい電池ボックスを付けて脚を曲げるには、強大な力が必要です。
そんな脚も含めて、かかる重力に打ち勝ち、体全体を曲げる腕力は、もっと強力でなければなりません。
その力を生み出しているのが、腰のロッド3アナ(=ギアM3枚)の回転力(トルク)です。

3) 1/27減速機構
 前記で必要なトルクを生むために、1/3減速(ピニオンギアギアM)を3段連ね、モーターの回転数を1/3×1/3×1/3=1/27に落とし、トルクを27倍に増強しています。
最終段でピニオンギアギアM3組並べているのは、伝達トルクを分散させて、ギアの歯を保護するためでしょう。

4) つま先の電池ボックス
 皆さん、足に鉄アレーをくくり付けて逆上がりしますか?
足先が重たそうで、やろうとも思いませんよね。
こんなところに電池ボックスを付けたのは、他に置き場所が無かったからでしょうか?
 そうではありませんね。ちゃんと意図があるはずです。
確かに、脚を持ち上げる時は、かなりのパワーを要するようになりますが、一旦、つま先が頭上の鉄棒より後ろ側に越えると、今度は重力が回転の味方をしてくれるのです。
このとき、脚は十分に曲げた状態ですから、それなりに重たい頭(モーター)と胴体は未だ鉄棒を越えていませんが、先に越えたつま先の電池ボックスが体全体を後ろ側へ引いてくれるのです(*4)。


5) ラチェット付き鉄棒
 いくら強力な腕力があっても、鉄棒をゆるく握っていては体を回転させることができず、懸垂運動がせいぜいです。
手先が滑らないよう鉄棒をしっかり握り、鉄棒(シャフト)自体も回転しないようにしっかり固定することで腕を曲げる力が体を逆上がりさせます
 但し、このままでは、逆さになった後は体を元にゆっくり下ろすことになり、気味が悪いばかりか(*5)、重力の加勢を無駄にして逆上がりを中断してしまいます。
そこで、逆上がりする方向へはシャフトが自由に回転するようにラチェット機構を鉄棒に付けたのです。
このお陰で、勢いよく体を振り下ろして、次回の逆上がりを開始するのに必要な位置まで進めることができるようにもなりました。
土台に設置した補助板も、逆上がりを成功させるのに必要な開始位置を維持する目的です。
本体の調整次第では、不要になるでしょう。

 どうでしょうか。練り込まれた設計思想を感じますね。
オリジナルの2年生作品がどの程度の完成度だったのか、少し気になります…。


*4 胴体とつま先が同程度に重たいとしても、てこの原理により、回転軸(鉄棒)から遠い方の重量物の位置(にかかる重力)がより効きます。

*5 超人的な腕力の体操選手やポールダンサーにも、違和感というか、一種の気味悪さを覚えますが、そんな感じです。


1.4 <ロボプロコース『不思議アイテム(2)』>


 光と音の世界に入って、2ヶ月目です。


 1日目は、“”の続きです。
前回は、楽譜データをRTTTL形式で1曲分丸ごと与えることで自動演奏させましたが、今回は手動演奏です。つまり、電子ピアノですね。

ゲームパッドの16個のボタン(=鍵盤)に任意の音階を割り振り、好きな楽曲を演奏できます。
プログラム上の書き換えだけで済むので、自分が演奏し易いオリジナル鍵盤に仕立てることなど、朝飯前です。


 さて、正しい音程で奏でるには、プログラム上で“ド・レ・ミ…”に相当する記号“NOTE_C4, NOTE_D4, NOTE_E4, …”を使って指示すれば良いので簡単ですが、そもそもマイコンが“ドレミ”で分かるのかという問題があります。

実は分からない(*6)ので、プログラムの転送前(コンパイル時)に、ドレミを音の周波数に置き換えているのです。
例えば、オクターブ4の“ラ”は周波数440Hzなので、記号"NOTE_A4"を数値440に変換しています。
オクターブ5の“ラ”(NOTE_A5)は2倍の880Hz、逆にオクターブ3の“ラ”(NOTE_A3)なら半分の220Hzです。

1オクターブの間には、半音(*7)で数えて12音ありますので、
難しい計算になりますが、音程が半音上がると、周波数は約1.059倍になり、
1オクターブ上がって(半音12個分、1.059を12回掛けて)2倍の周波数になる関係です。

“シ”と“ド”の間には黒鍵がないので半音、周波数が約1.059倍になる関係です。
“ド”と“レ”の間には黒鍵があるので全音、周波数は約1.059×1.059=1.122倍の関係です。
人間にはこんな計算やってられませんね。やはり記号を使いましょう。

 ゲームのキャラクタのように、上下左右ボタンでLEDマトリクス上の十字や任意の表示パターンを動かす毎に異なるを出したり、パッドを振動させたりするプログラムにも触れました。

描画の始点(左上)となる座標(x, y)の値に基づき、パターンが画面の端に当たったかを判定するために、OR表現を用いたif文“if( x<0 || x>5 ) {○○}”を学びました。
これは、「もし、x<0 または x>5 なら、○○を実行せよ」という意味です。

パターンが画面からはみ出ないよう始点の座標(x, y)の値を有効範囲に制限するために、constraint命令を使用しました。

 2日目は、“”を計算で操ります。
既に、直線を描画する方法をいくつか知っています。

<方法1> 1点ずつ座標を指定して、8ドットを順に点灯させる
<方法2> 1コマの絵のように、8×8ドットのパターンとして描画する
<方法3> 上記を洗練し、座標変数(x, y)とfor文を使って実現する


 <方法1><方法2>は、直線を引くだけにしては面倒ですし、変更も大変な作業です。
<方法3>ができるのなら、それは文句なしのスマートな方法ですが、x座標のみを変えながら水平線か、y座標のみを変えながら垂直線を描くのが精一杯ではなかったでしょうか。


斜めに線を引くには、1ドット毎に難しい座標計算が必要そうです。
これを楽にするために、一次関数(中学2年数学)の考え方を導入しました。

x座標とy座標との間にある定まった関係を式で表したもので、例えば、画面の対角線を引く場合は、y=x という関係式を与えます。
yとxの値は常に等しい」という意味ですが、「yはxと同一に変化する」とも読み取れます。
ここで、“for (x=0; x<8; x++) { y=x; }”のようにx値を変化させると、(x, y)(0, 0)→(1, 1)→・・・→(7, 7) と変化しますので、これらのドットを順次点灯すれば良いのです。

y=2x なら、yはxの2倍大げさに変化しますので、斜め線は急峻にそり立ち、
y=0.5x なら、yはxの半分しか変化しませんので、斜め線は緩やかになります。
一次関数のグラフ表現では、斜め線の向きを表す 20.5 を“傾き”と呼びます。
y=-x なら -1 のように、マイナスの傾きも考えられます。
プラスの傾きを上り坂と見なせば、マイナスの傾きは下り坂になります。

 また、y=x+4y=3x-2 のように、最後に定数を足し引きすると、元の y=xy=3x の直線を上下(y座標方向)に数値の分だけ平行移動させた位置に描くことになります。
一次関数のグラフ表現では、直線の上下移動を表すこの定数を“切片(せっぺん)”と呼び、これは x=0 のときのyの初期値のようなものです。

 このように、数学では一次関数の式を y=ax+b(傾きa、切片b)の形で表しますので、プログラムにおいても直線描画に限らず、for文でx値を変化させながらy値を計算する手法(*8)がよく取られます。

<方法3> 一次関数とfor文を使って描画する

と書き直しましょう。

 なお、直線描画に限っては、もっと便利なline命令が用意されていました。

<方法4> 直線の始点座標(x1, y1)と終点座標(x2, y2)をline命令に与える

これを使えば、内部で<方法3>を代行してくれます。

 このように、特にCG(コンピュータグラフィクス)の分野では、誰かが用意してくれた便利な部品プログラム群(*8)を利用するのが当然のことです。
そうせずに、何でも最初から自分で書くのは大変過ぎてやってられません。


 最後に、コンピュータ内部で文字を管理し、表示するための文字コードについて軽く学習しましたが、今回は、テキストに説明している以上のことを割愛します。

 本当に、ロボ・プロは内容が盛り沢山ですね。テキストを見ながら、なるべく曖昧な点を残さぬよう、しっかり復習と課題に取り組んでください。


*6 音楽専用のICチップなら解釈してくれるものもあります。

*7 ピアノの鍵盤で、黒鍵を含めた隣同士の鍵の音程のこと。五線譜や音符に付く#や♭は、半音上げ下げする記号。

*8 yの計算結果が小数になる場合でも、変数yをint(整数)型で宣言していれば自動的に整数に切り捨てられますので、整数のみが許されるCG座標を表すのに便利です。
 <例> 6.25 ⇒ 6、0.81 ⇒ 0

*9 一般に、ライブラリ(library)と呼びます。有用な書物を集めた図書館ですね。


2. 今月の課題

 次回授業日までに完了してください。
 ◎は必須、○は推奨、△は任意です。○△は能力に応じます。

 <スタートアップ/プライマリーコース>
  特にありません

 <ベーシックコース>
  ○ 4面図スケッチ(専用方眼紙)
  ○ 見取図スケッチ(テキスト最終ページ/難しければ写真の模写から)
  ○ 上記授業内容を分かるまで音読する
   (概ね3年生以上/低学年は補助 or クイズ出題形式で)

 <ミドルコース>
  △(難解につきスケッチ免除)
  ◎ 上記授業内容を分かるまで音読する

 <プロフェッサーコース>
  ◎ 上記授業内容を分かるまで音読する(該当するテキストページを見ながら)
  ◎ 下記の何れかで、任意の曲目を演奏し、2日目に披露する(1日目)
   ・[RTTTL_Kaeru]をベースに、RTTTL楽譜データを書き換え、自動演奏
   ・[TonePS2]をベースに、必要に応じて音程割り当てを変更し、手動演奏
  ◎ [MatrixLineTurn]をベースに、for文とline命令を使って十字線を回転させる


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


[東福間]第1・3土
   - 10:30~ ロボ・ミドル
   - 13:30~ ロボ・ベーシック/プライマリ

 9月は9/3, 9/17です。10~12月も原則通りの予定です。


[東福間プロ]第2・4日
   -  9:45~ ロボ・プロ1年目

 9月は9/11, 25です。10~12月は原則通りの予定です。
 9/25欠席者は、9/11 13:00-15:00 を連続受講下さい。


[中間]第2・4土
   - 13:30~ ロボ・ベーシック/プライマリ

 ・9/10 第1回 3F会議室2
 ・9/24 第2回 3F会議室2

 10~12月も原則通りの予定です。


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

 ・9/ 4 第1回 5F小セミ
 ・9/18 第2回 5F小セミ

 10~12月も原則通りの予定ですが、11月はムーブイベントの為、
 代替施設『商工貿易会館(シティプラザ)』での開催となります。


4. ひと言

 お盆を如何お過ごしでしたか? 我が家では、帰省(大分県)の道中に阿蘇方面を旅行するのが毎年の恒例になっておりますが、今年はかの震災があり、道路寸断の懸念から南阿蘇まで足を伸ばすのは憚(はばか)られました。
 しかし、微力ながら、熊本の観光復興に貢献したいとも思います。かくして、阿蘇山の北方(小国町~産山村)で寝泊りすることになるのですが、訪れるキャンプ場から牧場、町外れの商店主まで、「客足がなかなか回復しない」と口々にこぼしていました。
 年間で最もピークとなるはずの盆休み期間とて、どこも賑わっているとまでは言えませんでした。私が心理的に敬遠してしまった南阿蘇周辺は、もっと苦境に立たされていることが想像に難くありません。
 例年通り立派に、高速道路の無駄な渋滞に嵌(はま)りながら、複雑な心境で大好きな熊本を離れました。


東福間・中間・小倉北教室 佐藤