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点…なし


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

2017年9月28日木曜日

2017年9月報

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


1. 9月授業内容


1.0 <スタートアップ>


 割愛します。



1.1 <プライマリーコース『メカビートル』>


 割愛します。




1.2 <ベーシックコース『う王さ王』>


 “右往左往(うおうさおう)”をもじっていますので、この四字熟語を知っていれば、動作は想像に難(かた)くなかったでしょう。

赤色に目立つ巨大なバンパー(フレーム)を前後に装着した四輪車が、どうも前後(横から見れば左右)の壁にぶつかる度(たび)にスイッチバックして、行ったり来たりを繰り返すようだ、
とまでは予想できましたが、1日目のテキストでは、「スライドスイッチを手動で切り替えて実現するのは大変だね」で終わり、核心部分はお預けです。


 2日目でようやく、衝突で押し込まれるバンパーがスライドスイッチを反転させる機構を組み付けました。

しかし、中には下記のポイント【レベル1・2・3】が未解決のため、最後までうまく動作しなかった例も散見されました。
スライドスイッチの固いものであったかもしれません。
レベル毎に順を追って、解決していきましょう。

【レベル1】最低限…
 1) テキストを良く見て、正確に作ること(絶妙に設計されており、自己流では困難)
 2) スライドスイッチのツマミを挟む部品をしっかり組み付けましたか?(ぐらつくようではダメ)(*1)

【レベル2】スライドスイッチが固い人は…
 3) スイッチを数十回左右に切り替えて、少し柔らかくする(モーターを外して!)


【レベル3】壁から受ける衝撃を強めるために…
 4) 摩擦を減らす(タイヤがスムーズに回るように)
 5) スピードアップ(電池4→5本)
 6) 重くする(荷物をのせる・ぐらつかないように)(*1)


【レベル4】それでもダメなら、もっとスピードアップ!
 7) モーター軸のピニオンギアをギアMに交換する(*2)
 8) 左右に走らせる幅を広めにとる(加速に時間がかかるので)

【レベル5】それでダメでも、まだある!
 9) 固いスイッチを弱い衝突力でも動かせるようにするには…?(てこの原理)(*3)

どうです?「ダメだー」と思っても、これだけ、いや、まだ他にもありそうです(*4)。

【レベル2・3・4・5】どれか1つでもOKかもしれません。
特に【レベル4】は簡単にできますし、これで動作しないことは無いでしょう。


 授業中、最後まで諦(あきら)めずに何とか動かそうと奮闘(ふんとう)した生徒さんほど、目からウロコなのではないでしょうか。
解決方法が身に染(し)みると思いますので、ロボットを壊す前に、ぜひトライしてください。


 本来、【レベル3】を自ら考案するのがミドルコース進級レベル、【レベル4】がミドルコース内レベル、【レベル5】がアドバンス進級レベルです。
自分の改造力にしてください。


*1 “ぐらつかない”ことは、大事なポイントです。衝突エネルギーが“ぐらぐら”で失われるからです。
 自動車のエンジンルームがつぶれやすく、車内への衝撃を和らげるのとは逆の考え方です。

*2 ピニオンギア(歯数8)をギアM(歯数24)に替えるので、3倍の増速になります。
 実際は摩擦のせいでそこまで速くなりませんが、かなりスピードアップします。

*3 大幅に作り変える必要があるでしょう。

*4 例えば、走行中に輪ゴムを巻いて、スイッチ切替用エネルギーとして補助的に使うなど。


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



 ミドルコース中、1・2番を争う傑作(けっさく)に位置付けたい、摩訶不思議なロボットが巡ってきました!

 動力はいつも通り、電池ボックスに繋いだモーター1個です。
手元で制御できることはせいぜい、スライドスイッチを反転させることくらいです。
なのに、スイッチを入れると、
1) 垂れ下がったハンド(アームの先端)が物を掴(つか)む
2) アームを水平まで持ち上げる
3) アーム全体が回転して反対側へ運ぶ
の順に動作します。


所望の位置で止め、今度はスイッチを反転させると、先程の逆順ではなく
4) 先ずはアームを降ろし
5) ハンドを開いて荷物を離し
6) アーム全体を元の側に回転して戻す
という一連のクレーン操作を熟練したかのようにこなすのです。

スイッチを入れている間、モーターはずっと一方向に回り続けているだけです。不思議ですね。

 これは言わば、バイクがアクセルをあおり過ぎてウイリーしてしまうのに似た原理です。
バイクのエンジンが生み出した力は、バイク全体を加速させることと、
前輪を浮き上がらせることの2方向に使い道が残されているのです(*1)。
力の逃げ道といった方が感覚的には分かり易いでしょう。

通常は、ウイリーよりも小さい力で済む加速だけに使われますが、
物体(バイク)は素早く加速させようとするほど大きな力を要する慣性の法則(*2)により、あまりに強大な力(エンジン全力)にとっては、ウイリーさせる(前輪を浮き上がらせる)方が“”なのですね(*3)。

 ロボットアームでは、慣性の法則は殆ど効いていませんので、負荷(アームに掛かる重力や、ジョイント部の摩擦)の軽い順に可動範囲を使い果たし、力が次々と逃げ道を探すのです(*4)。


実際、3段階目のアーム回転動作が軽すぎて、2段階目の持ち上げ動作をスキップしたり、並行動作したりするなど、不安定になる場合がありましたが、
・ 土台(ギアボックス)と回転アームの間に輪ゴム(またはホイール抜きタイヤ)を挟む
・ アーム自体を装飾して重くする
ことで摩擦を稼ぐと、スムーズに動作しました(*5)。


 完成したロボットで、荷物搬送に挑戦しました。
ロボットの片側エリアから、用意した荷物(タイヤSホイール等)を掴んでは、アームを180°回した先に降ろします。


単純に思えたスイッチの反転操作に手間取る(必ずしも逆順に動作しないので、細かなやり直しが難しい)一面もありましたね。


*1 接地状況により、ホイールスピン(タイヤを路面上で空転させる)を3つ目に数えることもできます。

*2 高校物理で学ぶ、〔力=質量×加速度(F = m・a)〕です。



*3 “楽”に動く方が選ばれるもう1つの原理は、作用・反作用の法則です。
 物が動き始めるには、別の物を押して返ってくる反力をもらわねばなりません。
タイヤのグリップ力が強大で滑らない場合、固い地面はバイクのエンジンパワーに負けることなく、タイヤが蹴るのと同じ力でいくらでも押し返してくれます。
ランニングマシンの上なら、床の方が後方へずれる動きも可能ですが、逃げない相手(動かない地面)に対しては、自分の方が逃げる(加速かウイリー)しかありません。
 ハンドやアームが限界位置まで来ると、それが動かない地面のように振舞って、次の動作へ逃げます。

*4 アームの「上げ・下げ」に必要な力は重力が大きく関係しますが、ハンドの「掴む・離す」はほぼ同じ力で済みます。
 だから、「掴む→上げる」の順だし、「下げる→離す」の順になるのです。
アームの旋回には、これらより大きな抵抗(摩擦力)が働けば、動きの順序に一貫性が生まれます。

*5 〔摩擦力=摩擦係数×荷重〕なので、輪ゴムを挟むことと、重くすることの両方が効果的です。氷上では重たい力士でもツルツル滑ってしまいますよね。


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


 全国統一でアドバンスプログラミング(アドプロ)コースが始まりました。
今月は、スタートアップ講座として、初めてのタブレットマイコンの扱いに慣れます。

 旧来のアドバンスコースを受講してきた生徒さんには、全国大会に向けた挑戦を始め、形を変えながら散々と(?)取り組んできたライントレーサーですが、今回は少し違います。

従来の「白黒判定に応じて2つの出力ポート(モーター用)の何れかを駆動する機能を持った光センサー(入出力制御デバイス)」を使うのではなく、
白黒判定に応じた信号を出力する光センサー(入力デバイス)」と、
入力信号の扱いや判定条件を定めたプログラムに則り、どの出力先をどのように駆動するかを決定するマイコン(制御デバイス)」とに分かれ、
2個のモーター(出力デバイス)を回転させます。


 回りくどくなったように聞こえますが、マイコン・プログラムが介在することで、格段に制御(変更)の自由度が向上します

光センサーを4つの入力ポートA・B・C・Dの何れに繋いでも、モーターを3つの出力ポート1・2・3の何れに繋いでも良く、
先ずは繋いで、それに合わせたプログラムを記述するだけです。


光センサーの判定を逆にしたり(*1)、モーターの回転方向を逆にしたり(*2)することも簡単です。


 加えて、左右で 0:100100:0 の切替えのみであった従来に対し、モーターのスピードを10%刻みで指定できるのも大きな進化です。
30:100 のようにカーブ内側のタイヤを完全には止めないようにしてスピード(スムーズさ)を上げたり、
-20:50 のように旋回半径を小さくし、スピードを犠牲にして小刻みに震えるような進み方ながらも、直角などの急カーブも脱線せずに曲がれるようにしたりと、
理論と実証の幅が広がります(*3)。

10月からの本流テーマが楽しみです。


*1 白黒判定と左右タイヤの駆動をどう対応させるかによって、黒ラインの左右どちらの端をたどるかが決まります。

*2 左右のモーターを反対向きに取り付ける構成では、前進するための回転方向が逆になります。
 従来は“逆転スイッチ”を挟んで調整しましたが、プログラム上では符号(±)を変えるだけです。

*3 この段落では、説明の簡略化のため、前進方向のモーター指示値を左右とも正(+)の符号で表記しています。


1.5 <プロ2年目コース『アームロボット(3)』>


 最終月は、サーボモーター式アームロボットを使った仕事(?)編です。

 アームロボットが高精度に動いたとして(*1)、決まった文字を書く自動書記や、決まった位置の荷物を運ぶ自動搬送など、
決め打ち”プログラムで人を楽しませることはできますが、センサー入力による制御がなければ、時計の針と大差ありません。


 台座(ベース)部に超音波センサーを取り付け、荷物までの距離を測れるようにしました。


Ultrasonic xxx(US1);
  // US1接続センサーへのアクセス用インスタンス(オブジェクト変数)xxx生成

long  us = xxx.timing();

float cm = xxx.convert(us, Ultrasonic::CM);
float mm = xxx.convert(us, Ultrasonic::MM);


と書けば、超音波センサーからの時間(マイクロ秒)を us に読み取り、音速から距離を計算し、cmmm に変換してくれます(*2)。

これで、アームロボット自身が荷物までの距離を計測し、掴みに向かうプログラム [ArmRobot5/SensorArmRobot3_4] ができます(*3)。
掴む位置(計測値による動作)が掴んで欲しい位置よりも15mm遠方であれば、setPosition(mm - 15, …) のように補正するだけです。

 あるいは、超音波センサーをハンド部に取り付けて、手を近づければ逃げ、遠ざければ追ってくる不気味なハンド [ArmRobot5/SensorArmRobot2Ans] にして遊ぶこともできます(*4)。


 他に、超音波センサーを使わず、“決め打ち”や手動コントローラーで遊ぶサンプルプログラムが用意されています。

・[ArmRobot6/Block] … 位置と高さを決め打ちした、ブロック積み
 ⇒ 3個くらい積み上げられますか?

・[ArmRobot6/semiAutoArmCustom] … コントローラーによる手動操縦
 ⇒ [ArmRobot3/semiAutoArm] と同等ですが、速度調整(リミット)され、可動範囲を広げています

・[ArmRobot6/UFOcatche] … UFOキャッチャー
 ⇒ どのような動作か、説明がありませんが、プログラムを解析できますか?

自由に改変してプログラミング力を上げておきましょう。

 2年目修了おめでとうございます。
3年目ではプログラミングのレベルも上がり、LCD(液晶ディスプレイ)自律型サッカーロボットによるゲームを成立させるアルゴリズムに触れていきます。


*1 前回書いたように、プラスチック製の長いアームを付け根のモーターで振り回すので、精度はイマイチですが…

*2 音速を340m/sとすれば、cm(片道距離) = 340 * 100 * us(往復時間) / 1000 / 1000 / 2 で求まります。

*3 旋回角度 0°限定方向です。持ち上げて旋回(搬送)する先は適当に決めます。

*4 もっと生き物っぽさを出したければ、あまりに手を近づけ過ぎるとハンドを閉じては開くという動作を加えて、噛みつき攻撃を表現するのもいいのではないでしょうか。


2. 今月の課題


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

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

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

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

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

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


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


◆小倉北10/1 AMはムーブ5F大セミ(PM~小セミ)です。
◆中 間10/14は『北九州ハイツ』(八幡西区的場町1-1)で開催します。

◆中 間ミドル時間を11月~変更(15:15→15:30)させて頂きます。
◆東福間ミドル時間を12月~変更(10:30→15:30)に極力ご協力下さい。
◆東福間プロ3年目は10月~変更(12:45→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~ アドプロ

 ⇒ 10/7, 21,  11/4, 18,  12/2, 16


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

 ⇒ 10/8※, 22,  11/12, 26,  12/10, 24

 ※10/8 12:45~ 2年目 第6回 <9/24振替>


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

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

 ⇒10/14※第1回 北九州ハイツ2F和室「鶴の間」
  10/28 第2回 3F会議室2
  11/11, 25,  12/9, 23

 ※10/14は『北九州ハイツ』(八幡西区的場町1-1)で開催します。


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

 ⇒10/ 1 第1回 5F小セミ(AMのみ大セミ)
  10/15 第2回 5F小セミ
  11/5, 19,  12/3, 17


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

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

 ⇒ 10/14, 28,  11/11, 25,  12/9, 23


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

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

 ⇒ 10/7, 21,  11/11!, 18,  12/2, 16


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

 ⇒ 10/8, 22,  11/12, 26,  12/10, 24


4. お知らせ

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

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

  ◆ベーシック【25名平均 図面2.0+設問3.0=5.0】
   10点…なし
   9点…荒木[小倉北3]
   8点…川村[中間4], 谷川[八幡東4], 宮尾[八幡東4], 大橋[小倉北4], 今橋[小倉南4]

  ◆ミドル【10名平均 図面2.6+設問3.1=5.7】
   10点…なし
   9点…なし
   8点…吉良[小倉南6], 辻[小倉南6], 橋本[小倉南3]
   7点…なし
   6点…なし

  ◆アドバンス【2名平均 図面6.5+設問5.5=12.0】
   16点…松尾[八幡東7]


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