2017年5月30日火曜日

2017年5月報

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


1. 5月授業内容


1.0 <スタートアップ>


 割愛します。



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


 割愛します。




1.2 <ベーシックコース『パカラー』>


 馬型ロボットです。
中には、首を長くしてキリンや、角を付けてトナカイになったものや、首なし“妖怪”もありましたが。


 横から見て、前脚(まえあし)と後ろ脚(うしろあし)がハの字に開いたり閉じたりを繰(く)り返します。
左右ではタイミングを反対(位相を180°ずらし)にしています。
単純に見えるリンク機構から、モーター1本で動物らしく4足歩行することに驚(おどろ)かされます。


 特に、前足(タイヤ)は、横から見て円形を描(えが)くように動くことで、左右どちらか一方が接地し、他方は浮き上がることが可能になり、真の歩行動作と推進力を生み出しています。

後ろの2足(ホイール)は常(つね)に接地したまま前後運動(見せかけの歩行)をするので、摩擦(まさつ)が邪魔(じゃま)にならないようゴムを外していますが、
前の1足と合わせた3点支持(しじ)により、本体を安定させる役割も担(にな)っています。

 あとは、首を飾り付けすぎたり、重たい電池ボックスを前方に片寄らせたりして前のめりにならないよう、重心(重さの中心位置)に気を配ります。
もしくは、リヤカー(サンタのソリ?)を引くことでも安定しましたね。




 授業の最後に、対戦ペアのパカラーのお尻を紐(ひも)でつないで、運動会シーズンらしく綱(つな)引きをしましたが、下記のようなロボットは弱かったようです。

1) 電池が弱い(*1)

2) ベベルギアが滑(すべ)ってガリガリ言うだけで、進まない(*2)

3) 綱でお尻の高い所を引っぱられて前足が浮き、地面をうまく蹴(け)られない(*3)

4) 左右の脚を動かすタイミングが真反対(まはんたい)になっておらず、推進力が弱かったり、バランスが悪く倒れやすかったりした(*4)

5) グリップ力を高めようと重くしすぎたり、引きずる後ろ足にまでタイヤゴムをはめたりして、自身で動けなくなり、判定負けした(*5)


*1 引っぱれないどころか、動けなければ判定負けですので、勝ち目がありません。

*2 モーター側のピニオンギアとベベルギアがしっかり噛(か)み合うよう、ワッシャーを3枚入れています。
 ベベルギアが削(けず)れてしまったら、ワッシャーを4枚にしたり、ブッシュやグロメットを入れたり、自分で改良します。




*3 後ろ足を支点にして、パカラーを後ろに回転させようとする力が働くためです。
 綱をなるべく低い所に結び、さらに、頭のパーツを重くして、重心を前方に移動させます。
 運動会の綱引きで、上体を引きたい方向(後ろ)へ傾けるのも、つっぱった前足を支点にして体が前へ回転しないよう、重心を後ろにもっていくためです。

*4 胴体(どうたい)側面(そくめん)のロッド3アナの向きを180°ずらします。
 90°ずれの人が多かったです。そうすると、「パカ、パカ、パカ…」という等しいリズムにならず、「パカパカッ、パカパカッ…」となってしまいます。

*5 実は、ギアで減速すると止まらず、最強の改造になりますが、ミドルコースレベルです。


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




 忠犬ロボットと銘打(めいう)っています。
今月はベーシックコース共に、4足歩行動物になりました。

 回転するロッド3アナ(クランク用)と連接用ロッドをペグ(回転軸)でつないだリンク機構(てこクランク機構)により、
モーター1本で4足がタイミング(位相)をずらして前後(実際は細い三日月形)運動をします。






また、このリンクの組み方次第で、ロッド末端部(足先に相当)に輪ゴム留めした鉛筆の軌跡(きせき)が細長い三日月楕円(だえん)に変わることも実験しました。
機械工学的な理論としては難しいので、テキストでも解説はありませんが、
てこクランク機構というのは、組み方を少し変えるだけで軌跡が大きく変わるので、いろいろ試して歩き方の変化を楽しんでみましょう(*1)。






 授業最後の競技は、ベーシックコース『パカラー』同様、綱引き!
下記のようなロボットが強かったようです。

1) 電池がパワフル
 言うまでもありませんね。前提条件です。

2) ピニオンギアとベベルギアをしっかり噛み合わせている
 ギアが滑って「ガルルルッ…」と吠えるだけの負け犬が多かったです。
 テキスト通りに作ってダメなら、自分で調整するように(*2)。

3) 4脚をバランス良くずらして動かす
 脚は付ければいいってものではありません。胴体側面のロッド3アナの向きとシャフトペグの位置をテキスト通りに合わせます。
 前脚も後ろ脚も、左右でタイミングを反対(位相を180°ずらし)にするのが基本です。
 前後では、90°ずらしています(*3)。


4) 脚が短い!
 ダックスフント型の改造例がテキストに載っています。スピードレースには不利ですが、綱引きにはとても有利です(*4)。
 同じモーターパワーで足先の動きを遅くするということは、ギアで減速するのと同じく、力を大きくします。
 その分、電池が弱くても止まりにくくなります。

5) グリップ力を増やす!
 1) ~ 4)を対策した上で、ロボットを重くしたり、足裏にタイヤゴムを履かせたりして、地面との摩擦力を大きくするのは吉です(*5)。



 番外編では、美脚ロボもいました。
すらっと伸びた脚が印象的な、なんとも優美な立ち姿です。
品評会なら優勝しそうです。


*1 テキスト最後に掲載された高橋智隆先生のメッセージからも、試行錯誤してバランスを調整した形跡が見て取れますよ。

*2 ベベルギアが滑って削れると、より滑りやすくなりますので、スペーサー(隙間を埋めて固定するもの)として、ブッシュの他にワッシャーを追加したり、グロメットやマイタギアに替えたりして強化します。

*3 そうすると、左前0°、右後ろ90°、右前180°、左後ろ270°のように、90°回転する毎に4足が次々と均等間隔で地面を蹴るようになります。
 均等でないと、「足を着けて地面を蹴る」→「足を浮かせて前へ戻す」という一連の動作が下手になって推進効率が悪くなったり、モーターの負荷が過大になって止まりやすくなったりします。

*4 本物のダックスフントには期待しないように…。

*5 これだけをやっても、止まりやすくなってしまいます。


1.4 <アドバンスコース『Robo Fight』>


 1ヶ月目の授業です。
8月の全国ロボットコンテストを意識させるタイトルと内容になっています。
このため、製作の難易度を抑えて、“戦う”ためのルール設計や改造に時間を存分に使えるよう意図されています。


 1日目は、2個のモーターが左右両輪を独立駆動する車両を、戦車型リモコンで手動操縦し、土俵上で相撲対決させます。
操縦テクニックや電池パワーの他に、重さ(≒摩擦力)も大事な勝因のようでした。



 2日目は、これを光センサーを利用した自動操縦ロボットに改造します。
土俵の円は、5cm幅の黒い線で描かれています。
土俵内(白地)では直進(両輪を回転)し、黒い枠線を感知すると旋回(片輪のみ回転)する設計が好ましいでしょう。

逆の設計だと、土俵内でぐるぐる回り続けるだけのロボットになりました。
(それでも、相手を弾き飛ばせば勝ちなのですが)

 光センサーが反応しない/反応しにくい失敗例があります。

1) 黒い線の印刷が薄くて光センサーの反応が鈍かったため、黒テープやマジックで描き足しました(*1)。

2) 光センサーの位置が車軸からあまり遠く離れた前部にあると、黒判定による旋回時に光センサーが振り回される軌跡の円弧が大きくなり(*2)、黒線を跨(また)ぎやすくなりました。

3) 光センサーの応答時間に余裕をもたせるため、走行スピードを落とそうと電池を3本まで減らしたところ、電圧が低くなり過ぎて、光センサーが全く機能しなくなりました。

4) 前記の他に反応しない場合がありましたが、モーター用の逆転スイッチ(リモコンスイッチを含む)を経由させた光センサーに、+/-が逆の入力電圧が掛かっていました。
 モーターや豆電球と異なり、センサーやダイオード(LED)類には極性があります。
 原則として、これらの極性素子は電源スイッチ(イエロー)のジャックに挿し、逆転スイッチ類はその後につなぐのが好ましいですが、止むを得ない場合は、なるべくセンサー類を傷めないよう極性に注意して操作しましょう。


 2ヶ月目に、攻撃型ロボットの要素を加え、“教室ロボコン”のルールを設計して、リーグ対戦もしくはトーナメント決戦を開催します。


*1 先生の失敗です。黒テープも光沢のあるビニールタイプだと、赤外線の反射により黒判定されにくいようです。

*2 停止側タイヤ(≒車軸) ⇔ 光センサー間の距離を半径とした円弧になるため。


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


 外付けの電子回路をプログラミングで操る春タームの2ヶ月目です。


 前月は、タクトスイッチというデジタル(ON/OFF)入力装置をマイコンに繋いで、プログラム中 digitalRead() 関数で読み取りましたが、
我々はアナログ量に満ちた自然界に住んでいます。

光の強さ、色の濃さ、音の大きさ、痛みや匂いなど、およそ0/1だけで語られては困る事象と相互干渉しながら暮らしています。
それだけに、コンピュータやロボットに対しても、アナログ的な入力や出力を期待できないと満足がいきません(*1)。

とは言え、せっかく微量の電力だけで高速処理してくれる小さなマイコンチップに、人間の都合で味覚や温度、力加減まで、何でも分かる感覚を付け足していくのは酷で、蛇足にも思えます。
それでも、列挙した感覚をもつマシンはめいめい現存しています。専用マイコンなのでしょうか?

そうではありませんね。汎用(はんよう)の演算処理装置(CPU)に、必要なセンサーを繋いでデータを送受信する方法が一般的な解です。

 流すデータ(数値)を構成する物理量として、“電圧値”が最も多用されます。
中身が電圧型論理回路であるマイコンにとって、扱い易く、省エネにできるからです。

マイコンには、電圧のデジタル値(0/1)だけでなく、アナログ値(0~1)も入出力できるピンやモード設定が用意されています(*2)。
だから、光でも音でも熱でも力でも、その量に応じて電圧値に変えられるセンサーなら、直ぐに繋げます
繋いだら、analogRead() 関数で読み取るだけです。


 1日目に、ボリュームセンサー(可変抵抗器)を繋ぎました。
と言っても、その名の通り、ツマミを回して抵抗値を変えられる部品ですから、電圧値を読み取るマイコンの入力ピンにそのまま繋いでも、何もセンシングできません。
耳の穴に抵抗器を入れて音を聞こうとするようなものです。


抵抗値は、電流を流すことで、簡単に電圧値に変換できます(*3)。
電圧・電流・抵抗の間に、オームの法則と呼ぶ次の関係があります(*4)。
水圧・水流・蛇口の絞りの関係になぞらえると理解し易いです。


・電流(I) = 電圧(V) ÷ 抵抗(R)
・電圧(V) = 抵抗(R) × 電流(I) ←電流を流して抵抗を電圧に変換する式
・抵抗(R) = 電圧(V) ÷ 電流(I)



 ボリュームから可変電圧を作り出す原理は、抵抗分圧といって、詳細は割愛しますが、以下に簡単に説明します。

1) 10kΩタイプの3端子ボリュームの場合、両端子間にGND(0V)と5Vを繋ぐことで、I=5V÷10kΩ=0.5mAの電流がずっと流れます。

2) ツマミは、GND側から5V側まで伸びる10kΩ抵抗の任意の位置に接点をスライドさせ、接点は真ん中の端子に繋がっています。

3) 接点がGND側から20%の位置にある場合、GND⇔接点間の2kΩに0.5mA流れていることにより、真ん中の端子には2kΩ×0.5mA=1V(5Vの20%)の電圧が表れます。

4) 真ん中の端子電圧をマイコンで読み取ることで、ツマミを回した量が判定できます。

5) 両端子間の抵抗値が何でも同じですが、流し続ける電流量(ノイズ耐性)で選びます。



 ボリュームセンサーに代わり、CdS光センサーは、明るさに反応する可変抵抗器です。
例えば、暗闇で10kΩ(暗抵抗)、日光で100Ω(明抵抗)程度まで変化します。

これを固定抵抗器と直列に接続し、両端に電圧を掛ける(電流を流す)ことで、中間の接続点に明るさに応じて抵抗分圧された電圧値が表れます
つまり、マイコンで明るさを検知し、メーター表示したり、照明を自動点灯したり、画面の明るさを制御したりできるようになります(*5)。

または、圧電スピーカを繋ぎ、analogRead() 値を tone() 関数に渡すという、たった2行だけで、かざした手の距離(影の暗さ)に応じて音の高低が変わるテルミンのような楽器になりました(*6)。

 2日目は、4桁の7セグメントLEDによる表示方法を学びました(*7)。

下記の表示関数が登場しました。
・setDigit() … 指定した桁に数字およびドット(小数点)を表示
・setLed()  … 指定した桁の指定した棒またはドットを点灯/消灯
・setDec()  … 指定した数(-999~9999)を一発で表示



特に、setLed() を使えば、数字だけでなく、8(7つの棒+ドット)×4桁=32個のLEDによる任意のパターンやアニメーションを表示できるということです。
そもそも、数字の形を指示せずに表示してくれる setDigit()setDec() も、中身では setLed() 相当のプログラムで光らせる棒を1本ずつ指定しているだけです。

意味のある7セグ数字を見ていると、いかにもマイコンらしい表明手段のように感じますが、こちらの幻想に過ぎません。
マイコンにとって、数字の形や意味など知ったことではないのです(*8)。

 さて、32個のLEDを使って、誰かが用意してくれた数字の表示関数を使わずに、自分で任意のパターンやアニメーションを表示するには、それなりのデータ量をプログラムに記さなければなりません。

棒を3本光らせるのに、

int a = 4;
int b = 6;
int c = 1;
setLed(0, 0, a, HIGH);
setLed(0, 0, b, HIGH);
setLed(0, 0, c, HIGH);

よりも、

int a1 = 4;
int a2 = 6;
int a3 = 1;
setLed(0, 0, a1, HIGH);
setLed(0, 0, a2, HIGH);
setLed(0, 0, a3, HIGH);

の方が、変数の命名に悩まずに済みそうですが、配列for文による繰り返しを使って、

int a[] = {4, 6, 1};
    // a[0]=4, a[1]=6, a[2]=1 と代入される

for (int i=0; i<3; i++) {
  setLed(0, 0, a[i], HIGH);
  // a[0], a[1], a[2] に順次アクセス
}

と書く方がスマートで、データが増えても破綻(はたん)し難そうです。
for文による配列変数への順次アクセスは、プログラミングの強力な武器です。
しっかりマスターしましょう。


*1 4Kハイビジョンとか、VRとか、ニセモノ体験の質を上げ続けたくなる人間が満足する日とは…脳がそちらをホンモノと見なして生きる時でしょうか…。

*2 先月も注釈したように、マイコンには真のアナログ信号は扱えないので、
 PWM制御(1年目1月)により擬似的にアナログ出力電圧(256階調など)を生成したり、
 真のアナログ入力電圧をデジタル値(1024階調など)に変換したりするコンバータ回路が搭載されています。

*3 というより、電流をどれだけ邪魔するかの指標が抵抗なので、電流を流してみることで抵抗値が分かります。

*4 速さ・時間・距離の関係と同様、1つの式から他の2つの式を導出できます。
 語呂合わせ「はじき」と同じく、“覚える”ものではなく、感覚で捉えるべきものですが、一先ず V=RI と発音して記憶します。

*5 暗い部屋で眩(まぶ)しくないよう、LED時計やテレビ画面の明るさを落とすために、CdSセンサーを用いたディマー(減光)回路が搭載されています。

*6 明るさ[手の影] → 抵抗値[CdSセンサー] → 電圧値[抵抗分圧入力をanalogRead()] → 周波数[tone()でスピーカにPWM出力] のように物理量を変換したのです。


*7 通称「7セグ」と呼ぶ、7本の棒で数字を表現するデジタル表示器のこと。
 今やローテクの象徴のような表示手段ですが、映画『バック・トゥ・ザ・フューチャー』世代のオジサンには、未だにタイムマシンのコックピットにずらりと並ぶ先進的でロマンに溢れたデバイスにしか見えません。

*8 幻滅しましたか? 今のコンピュータなんて、パソコンもスマホもそんな無意思の集大成です。君たちの世代がそれを変貌させていくのです。


2. 今月の課題

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

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

 <プライマリーコース>
  ○ オリジナル図面プリント《新規スタート》

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

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

 <アドバンスコース>
  ◎ 上記授業内容を精読する
  ◎ 2日目まで仕上げ、白地で直進、黒地で旋回するよう光センサーを繋ぐ

 <プロ2年目コース>
  ◎ 上記授業内容を精読する(該当テキストページを見ながら)
  ◎ CdS光センサーを使った図2-4(1日目p.18)の回路で、プログラム[LED5_Vol1_bar_answer]をベースに、
   様々な明るさの下で実験しながら、analogRead値 val による分岐条件を決め、
   暗闇~室内照明~日光下で0~5個のLEDが点灯する照度計(明るさメーター)に仕上げる
  ○ 7セグLEDを用いた形態(2日目)に、図2-4(1日目p.18)のCdS光センサー+10kΩの分圧回路を足し、
   7セグLED8ドット以上で表示する照度計にバージョンアップする
  ◎ ボリュームで7セグ表示を変える図2-0(2日目p.13)とプログラム[_7segVol]をベースに、
   ボリュームを外し、A5/GNDピンに電池(≦5V)の+/-を繋いだときの電圧[mV]を表示する電圧計に変える。

 【ヒント-照度計】
  A0入力は下図の位置です。CdS抵抗は凡そ10kΩ(暗闇)~100Ω(日光)で変化します。
  このとき、A0電位は、暗闇で 10k/(10k+10k) = 50%、日光で 100/(100+10k) = 1%
  に分圧されます。それを analogRead(A0) で1023段階に読むのです。

  <GND>---[CdS抵抗]---<A0>---[10kΩ抵抗]---<5V>

 【ヒント-照度計7セグ版】
  プログラム[_7segTest2]を参考に、7セグLEDを任意のパターンで表示するsetLed()関数を使います。

 【ヒント-電圧計】
  analogRead(A5) でA5入力電圧0~5Vを0~1023で表示するので、analogRead(A5) * 5000 / 1023 でmV表示に変換できます。
  但し、計算途中でint型整数(~32767)がオーバーフローする為、* 5 で近似するか、分かる人はlong型整数で計算します。
  電池は1~3本(4.5V)まで下図のように繋ぎます。5V以上を入力しないこと。

  <GND>---[- 電池 +][- 電池 +][- 電池 +]---<A5>


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


 8/13(日)を休む為、東福間プロ・小倉北・南教室の8月第1回は一週前倒しになります。

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

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

[東福間]第1・3土原則
   - 10:30~ ミドル/アドバンス
   - 13:30~ ベーシック/プライマリ
  (- 15:30~ ミドル/アドバンス振替)

 ・6/3, 17,  7/1?, 15?,  8/5?, 19?


[東福間プロ]第2・4日原則
   - 12:45~ プロ2年目

 ・6/11, 25,  7/9, 23,  8/6!, 27


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

 ・6/10 第1回 3F会議室2
 ・6/24 第2回 3F会議室2
 ・7/8, 22,  8/12, 26


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

 ・6/ 4 第1回 5F小セミ
 ・6/18 第2回 5F小セミ
 ・7/2?, 16?,  7/30!?, 8/20

 7月はムーブフェスタの為、6/2まで確定できません。代理施設での開催となる可能性があります。


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

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

 ・6/10, 24,  7/8(10:00), 22,  8/12, 26


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

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

 ・6/3, 17,  7/1, 15,  8/5, 19


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

 ・6/11, 25,  7/9, 23,  8/6!, 27


4. お知らせ

 1) ロボット教室全国大会 8/26(土) 東京大学 安田講堂
  アイデア・テクニカル(ライントレーサ)コンテストの時期が近づいてきました。6月第1回授業までに案内冊子を配ります。

  アイデア部門:7/21(金)九州本部必着にて、所定の応募用紙・プレゼン動画(3分以内)を提出
 テクニカル部門:7/21(金)九州本部必着にて、所定の応募用紙を提出、7/25(火)九州地区予選

  今年は初の試みとして、7/25(火)アクロス福岡でアイデア部門の九州地区大会も開催されます。
 (従来は書類選考のみ、テクニカル部門のみ予選レース開催)
  はっきり言って、ハードルはかなり低い!
  発表練習のみならず、他教室の面白アイデアを伺うチャンス!
  福岡県内の皆さんには、地の利があります。ご家族で参加しましょう!

  アイデア地区大会:7/19(水)大会本部必着にて、所定の申込用紙を提出

 《全国大会 観覧申込み - 7/5(水)正午~受付開始》
  http://kids.athuman.com/robo/event/convention/2017/

 2) アドバンスプログラミング(アドプロ)コース新設予告
  9月~アドバンスコースが革新され、ロボットをプログラミングするためのマイコン、タブレット端末がキットに追加されます。
  下記のスケジュールとなります。

  - 2016年10月進級された方
   2017年10月を以って従来カリキュラム修了となります。
   その後、アドプロ編入 or ロボプロ進級して頂けます。
   アドプロ編入には、追加キット(不足分)15,000円(税別)が必要です。

  - 2017年4月進級された方
   2017年8月まで従来カリキュラム、9月~アドプロコースとなります。
   追加キット(不足分)は無償提供されます。

  - 2017年6月以降に進級される方
   2017年8月まで従来カリキュラム、9月~アドプロコースとなります。
   アドプロ追加キットをご購入頂きます。

 《追記》
  6月進級~追加キット代が26,000円(税別)となります。
  スタートアップ講座(9月~必修)+24ヶ月となります。
  ロボティクスプロフェッサー(ロボプロ)コース下位の位置付けです。

 《プレスリリース》
  https://www.josys.jp/instrument/humanac201705

 3) 「こどもプログラミングコース」誕生
  6月~ヒューマンアカデミーに小学生向けプログラミングコースが誕生します。
  小3~5対象(目安)の非ロボット系につき、ブロックやロボットが好きな生徒さんは、現行ミドル→アドプロ→ロボプロ進級されることをお勧めします。
  弊教室としては「ロボットにあまり興味ない」お子様向けに来春開講を検討中です。

 《サイトページ》
  http://kids.athuman.com/robo/programming/

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

  ◆ベーシック【22名平均 図面2.3+設問2.8=5.1】
   10点…橋本[小倉北3]
    9点…なし
    8点…杉本[小倉北5], 樋口[小倉北3]
    7点…桑村[中間3], 谷川[八幡東4], 林[小倉南4]

  ◆ミドル【15名平均 図面2.9+設問2.9=5.8】
   10点…なし
    9点…数住[小倉北5], 吉良[小倉南6]
    8点…なし
    7点…岩熊[中間6], 杉本[中間6], 山本[中間5], 中島[小倉北5]

 《景品の製作ページ》
  http://robocobo.blogspot.com/


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