2026年3月30日月曜日

2026年3月報

1.3月授業まとめ
2.3月の課題
3.2月の解答
4.4月の授業予告
5.今後の授業スケジュール
6.お知らせ


1. 3月授業まとめ


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


 割愛します。


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


 割愛します。

1.2 <プライマリーコース『のびーるハンド』>


 割愛します。

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


 第5回アイデアコンテスト全国大会(2015年)ミドルコース最優秀賞作品(当時小3)がベースの、ボウリングロボットです。

 最優秀賞作品とは言え、書くべきことは特にないです。(このロボットだけは…)

モーター軸が直接、腕(うで)に見立てたLロッドを回すだけですので、ギアトレーンも動力リンクも、何もなし。

 デザイン性は秀逸(しゅういつ)ですので、雰囲気(ふんいき)は満点です。
これはもう、ボウリング大会で盛(も)り上がるしかありません。
緊張感(きんちょうかん)を出すべく、先生の司会により全員一斉に投球します。
下記のレギュレーションにて点数を競いました。

1) ピンはピニオンギアうす + シャフト3ポチ
2) ピン数は5本(前2本+後ろ3本のレイアウト)
3) ピン位置はスコアボード前4ポチ分の範囲(はんい)内
4) ボールはマイタギア2個をくっつけた大きさまで(テキストp.14)
5) 2投球×5フレーム、ストライク時は1投球のみ(または2投球にして最高10点)

 25点(または50点)満点(*1)近くで優勝する人、1~2点で終わる人など、さまざま。
何ゲームやっても、あまり変わりません。偶然(ぐうぜん)や運だけではないようです。

下記が勝つポイントだったようです。

・投球ロボットが左右に向きを変えられるか(2日目テキスト)
・電池がパワフルか(新しいか、4本よりも5本か)
・ピン同士が離(はな)れているか(くっつけて置くと、後ろのピンが前のピンを支え、倒れにくくなる)
・腕をぐるっと回した後にボールに当てるか(腕の加速を待たず、スイッチONですぐに当てる位置だと、ボールが遅(おそ)くてピンまで届かない)

 テキスト通りでは満足しない生徒さん向けに、ロボットの腕を高速回転させる改造を提案しました。
大きいギアM(モーター側)で小さいピニオンギア(腕側)を回すことにより、腕の回転数が3倍になります。
これによりボールの勢いが増(ま)し、ピンを倒しやすくなります。

3倍では満足いかず、さらに大きいギアL(モーター側)で小さいピニオンギア(腕側)を回し、腕の回転数を5倍にまで増速(ぞうそく)させる猛者(もさ)も現れました。
あまりのボールの速さに、ボウリングと言うよりレールガンのようでした。

 通常、ボーリングの投球は下投げですが、上投げするロボットも過去(かこ)に登場しました。まるで投石器のようです…
ボールをリリースする角度によって着地点が変わるので微妙(びみょう)な調整が必要ですが、当たりさえすれば効果は絶大! 高得点を連発していました。

 皆さん、楽しみにしていただけあって、ゲーム中はいつにも増(ま)して、歓喜(かんき)の雄叫(おたけ)びや、ミスを嘆(なげ)く声が飛び交(か)いました。

君たちは、まだまだ、遊び足りないんだね。


*1 本物のボウリングでは、1~9フレームまで2投球、10フレーム目を3投球にして、全ストライク(9フレーム目までストライク9回 + 10フレーム目ストライク3回)で 30点×10フレーム=300点満点です。
 このルールに倣(なら)うと、ロボリン君(p.24~)では、5フレームとも2投球、全ストライク(4フレーム目までストライク4回 + 5フレーム目ストライク2回)で 15点×4フレーム + 5フレーム目10点=70点満点とすることもできます。
 ストライクを出したフレームでは、次の2投分まで加算した(計3投分の)点数が入り、最高で、本物では10点×3=30点、ロボリン君では5点×3=15点となります。


1.4 <ミドルコース『ステアリングカー』>


 機械の王道たる、自動車です。ロボット教室の生徒さんなら、絶対に造って欲しい一台です。

 しかし、これまで幾度(いくど)となくロボット本体にタイヤ4輪を付けて転がしてきたのに、なぜ今さら“車”なんでしょうか?

そのポイントは曲がる仕掛け(ステアリング)、つまり、ハンドル(英語ではステアリングホイール)を回すと左右の前輪が同期して向き(舵角=だかく)を変えるメカニズムです。

このメカニズムは3点から構成されています。

(1) ラック&ピニオン方式
 円形のピニオンギアを直線状のラックギアと噛み合わせ、ハンドル操作による回転運動を左右方向の直線運動に変換し、前輪の舵角(だかく)を変えます。

 このラックギア(洗濯板みたいなやつ;通じるかな…)は、今までロボット顔面の付け髭(ひげ)くらいにしか利用する機会のなかった人にとっては、初めて日の目を見ました!
これが本来の使い方ですよ!

 この仕組みは、プラモデルで自動車を組み立てたことのある人なら知っていたでしょうが(*1)、実車と同じ(*2)です。

(2) 平行リンク
 左右のタイヤの舵角が揃(そろ)う仕組みは、平行リンクと呼ばれる機構です。
左右に動くラックギアが平行リンクの外形を長方形にしたり、それを潰(つぶ)して平行四辺形にしたりしますが、いずれにせよ、4辺は平行のままですね。

(3) ユニバーサル・ジョイント(自在継ぎ手)
 ピニオンギアを回転させるシャフト(水平方向)と、ハンドルを回転させるシャフト(後方斜め上方向)は、同一直線上になく、途中で折れ曲がって接続しています。
ハンドルを上下左右に揺らしても問題なく操舵(そうだ)できます(*3)。

 チェーンや多数のギアを介さず、駆動力を数本のシャフト(棒)で遠方の異なる方向に伝達できる点で、これは大発明なのです。
なぜそのようなことができるのか、言葉で説明するよりじっくり観察しましょう(*4)。

 さて、学ぶべき点の多いリアルなモデルカーでしたが、授業最後の競技は“運転技能”。
マリオカートで鍛えてるって言ったって、車庫入れしたこと、ないでしょ?

教習所さながら、狭い角を曲がり、障害物を避け、脱輪にも注意しながら、狭いスペースに縦列(じゅうれつ)駐車や、後ろ向きに駐車するまでの時間を競いました。

操縦性を高め、速く走らせるポイントは以下の通り。

・あまり屈(かが)まずに済むよう、ステアリングシャフトをびよ~んと延長
・電池ボックス/スライドスイッチを延長ケーブルでつないでリモコン化(2日目テキスト)
・アクセルペダル代わりにタッチセンサー(黒)を直列につなぎ、前進⇔後退の切り替え時のみスライドスイッチを操作
・全長(前後輪の軸間距離)を短く、小回りに(*5)
・直進時のスピードアップに、減速比の緩和(*6)

 やはり、バックでの運転には慣れていないようで、ハンドルの“切り返し”を忘れて同じ場所を行ったり来たり、入れやすいフロント部から突っ込んで、どつぼにはまる例も…。
タイムには数倍の開きがありましたが、崖から落ちずに駐車できただけ命拾いしました!


*1 若者の車離れが叫ばれる昨今、自動車のプラモデル製作経験は少ないようですね…。

*2 どの自動車カタログにも逐一「ステアリング形式: ラック&ピニオン式」のように書かれています。もう、「その他に一体何があるんだ!?」っていうくらいに。
 学んだ仕組みに実感が沸きますので、是非、Webカタログを見てみましょう。
できればお使いの車を検索して。スペック中の諸元表にあります。
 <参考> https://www.suzuki.co.jp/car/alto/detail/pdf/detail.pdf

*3 実車でも“チルト・ステアリング”といって、運転者の背丈に合わせてハンドルの上下位置を調整できるようになっているものがあります。
 また、サスペンションにより上下に揺れる車輪へエンジン動力を伝えるドライブシャフトにも使われています。

*4 さらに興味が湧いたら、インターネットで調べてみましょう。問題点もあります。
 <参考> https://ja.wikipedia.org/wiki/%E8%87%AA%E5%9C%A8%E7%B6%99%E6%89%8B

*5 自動車用語で、「ホイールベースが短いので、最小回転半径が小さい」と言います。
 生徒さん自身による、この真っ当なアイデアの体現と効果に驚かされました。

*6 テキストでは1/5(ピニオンギア⇒ギアL)ですが、1/3(ピニオンギア⇒ギアM)等に変えて速くできます。


1.5 <アドバンスコース『ピッキングロボ②』>


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


1.6 <プロ1年目コース『不思議アイテムI-2③』>


 冬タームの最終月を「ウルトラソニックロボット」で仕上げます。

 自律型ロボットといえば、障害物や段差を感知して、衝突や落下を回避しながら進むものを先ず想起するのではないでしょうか。
お掃除ロボット『ル○バ』などもそうですね。

感知に最も良く使われるのが、この超音波センサーです(*1)。
イルカやコウモリ等の生物から魚群探知機まで、反射音(方向・時間・強弱・周波数)の状態や変化を探ることで、視覚の代わりに(時にはそれ以上に)なるのです。

反響定位(エコーロケーション)と呼ばれますが、本ロボットや一般の障害物センサーでは、そこまでの解析能力はありません。
特定方向の(一定以上の大きさの障害物から)反射音が返ってくる時間(=距離)だけを計測しています(*2)。

 1日目では、2つのセンサーを別々にモニターすることでの可能性を垣間(かいま)見ました。
センサー1つでも、手をかざせば近寄り、近づけすぎると後ずさるなどプログラムできますが、両目のように左右に並べれば、左右の(状況の違いが分かる)感覚を生み出せます。

左右での感知距離(dist1, dist2)の差に応じて旋回させれば、かざした手の方向にフラフラと追跡するまでになります[step3]。
しかし、2つの距離情報を扱うのは、プログラムの条件文(判定式や分岐)が複雑になります。

センサー情報を2値(デジタル判定)化するだけでも2×2=4通りに場合分けされることのみならず、スマートな動きを実現するには、センサー2個の変化・判断の順序やタイミングなど、気にすることが増えるからです。

 2日目では、センサー1つを様々な位置に取り付け、プログラムを適応させることで、
・ 障害物を避けるロボット[avoider]
・ 机から落ちないロボット[nofall]
・ 机の端を沿うロボット [tablerunner]
・ 壁ぎわを沿うロボット [walltracer]
を実現できることが紹介されています。

あの『ル○バ』に勝るとも劣らず、生き物らしく見えるでしょう。

 センサーで拾うたった1つの値と、それを条件に動作を分ける論理(プログラム)とで、これだけの(これ以上の)ことができます。
どれも、プログラミングのレベルに大差ありません。

勿論、これらを2つのセンサーで制御すれば、プログラムが高度になる分、よりスマートな動作で報いてくれます。


ちょっと難しく見える“おまじない”や数値処理上の工夫(*3)がありますが、核心の論理“if(条件) {動作1;} else {動作2;}”は、非常に単純明快で必然的なものです。

もっと場合分け(条件分岐)したければ、“if(条件1) {動作1;} else if(条件2) {動作2;} else if(条件3) {動作3;} else {動作4;}”等ですね。

こうして自分のロボットに命を吹き込んでみれば、君はもうフランケンシュタイン(怪物の創生者)であり、鉄腕アトムのお茶の水博士です。


*1 GHz級クロックの電子回路など、技術の発達した現在では、光(電磁波)を用いたレーザー距離計やGPSセンサーも安価に手に入るようになりましたが、生物の感覚器官ではとても追いつけません。視覚が光を利用するのとは別の話ですよ。

*2 音の伝わる速さとして、空気中で340m/秒、水中で1500m/秒を覚えておきましょう。
 すなわち、地上と水中で計算式が変わりますが、時間から距離が求まります。

*3 dist/=10; または dist=dist/10; で dist値 1~99[cm] を 0~9(整数) に粗くし、大雑把に扱えるようにしています。
 例えば、if(dist==1) と書くだけで 10~19[cm] の範囲を指定することができるようになります。


1.7 <プロ2年目コース『倒立振子ロボット③』>


 今タームの最終月にして、倒立振子ロボットは終(つい)に日の目を見るのか?

 1日目は、この倒立振子ロボットを製作しました。
前後方向にだけ倒れる、左右2輪のリヤカー(大八車)タイプです。

 ここで、振り子の特性について、整理します。
振り子と言えば、今は飾りにしか使われなくなった振り子時計を想起しますね。
振り子は、支点から質点(≒おもりの重心)までの棒の長さによって揺れる周期が決まり、意外に、おもりの重さとは無関係です。
この、一定のリズムで振れる性質を“等時性”と呼び、昔の時計の進み具合に利用していました(*1)。

これを逆さに立てた場合(倒立)も同様に、棒が長いほど、倒れるのに時間が掛かるようになります。
ペンは一瞬で倒れますが、箒(ほうき)は1~2秒、テレビで見る倒木や煙突の倒壊には数秒以上を要しますね。
だから、手のひらに箒を立てることはできても、鉛筆が無理なのは、立て直す時間が足りないからです(人間には…)。

このロボットの高さ20cm程度でも、人間には難しい仕業でしょうから、立てたら凄いですね。
クララが立った(*2)時に匹敵する感動が味わえそうです。

 2日目です。

 不安定な足(タイヤ)で立てる原理は、箒と同じです。傾いた方向(前後)に動けば良いのです。
そのためには、今の状態[現在値]を知り、あるべき状態[目標値]との誤差を計算し、その誤差に適切な比例係数[ゲイン]を掛けて、制御量[出力値]を発揮することを高速に繰り返すのです。

 ゲイン × 誤差(現在値[入力] - 目標値) = 制御量[出力]

前月で学んだフィードバック制御ですね。常に北を向くように旋回するオムニホイールロボットがそうでした。
北を0°として、方角(角度)のズレ(±)に比例した強さでモーターを正逆回転させれば、強弱の効いた滑らかなフィードバック制御が実現しました。

これを、P(Proportional:比例)制御と呼びます。これが基本です。

しかし、わずかな方角のズレでも素早く戻すようモーターを強力に駆動すると、ブルブルと振動してしまい、いつまでも目標値に収束(しゅうそく)しなくなりました。
1年目で嫌と言うほど経験してきたように、摩擦力が大きなタイヤの回転は、弱いパワーでは停止し易いですので、比例ゲイン Kp を抑えるだけで収束しましたが、振り子の運動は摩擦力が低いのが特徴です。

加えて、垂直付近では、重力による回転トルク(倒す力)がゼロになり、速度(勢い)を抑える外力が消えるため、慣性の法則により、勢い余って反対側に倒れ易くなります。
つまり、P制御だけでは、いつまでもグラグラすることになります(*3)。

 そこで、D(Differential:微分)制御を加えます。

これで、速度を抑える作用が働きます(*4)。
現在の(角)速度を割り出し、目標(角)速度ゼロとの誤差に微分ゲイン Kd を掛けて、制御量に加えます。
D制御は、現在値の変化に機敏に応答する特性があるため、意地悪に手で突ついたり、段差等で不意な外力が加わったりして倒れそうな場合でも、素早く立て直す作用に貢献します。

 3つ目に、I(Integral:積分)制御も加えます。

テキストで「静止に近い状態で作用する微調整」とはぐらかしていますが、高校数学の積分の概念が難しい故です。
簡単に言えば、微妙なズレを続いている時間分積算し、これに積分ゲイン Ki を掛けて、それを正すように作用させます。
短時間的に算出するP制御やD制御による制御量が、目標値近傍においてゼロになり、長時間的なズレの補正に作用し辛いからです。

これら3つの要素によるフィードバック方式を『PID制御』と呼びます。

 最後に、「姿勢ゼロ点設定の調整」なんかも持ち出されて、混乱に拍車を掛けます。

これは、ロボットの重心の違いや、姿勢センサーの固定具合によってP制御やI制御の入力となる倒立角度の検出値に生じる誤差など、個体差を補正するものです。
これがなければ、倒れないには倒れないが、下手な一輪車がバランスを保とうとして、ひたすら前に進むような状態になったりします。

 いやー、絶妙な倒立振子ならではの制御ですね。
これでも、まだ、電源電圧によって各種ゲインを調整しなければ、プルプル震えながら立つのがやっとです。
「倒立ロボが、倒立ロボが、立ったー!」と叫びたければ好適な様子ですが。

 ところで、モーター端子に大小のコンデンサが半田付けされているのは、モーター駆動の電磁ノイズが姿勢検出値を乱さないようにするためで、初期のモーターには付いておらず、うまく立てずに暴走しがちでした。

「それで、結局、どのプログラムを走らせれば倒立するの?」
というのが多勢の興味でしたが、曲芸はそう簡単には実現できないのですね。
エンジニアリングの一端を垣間見た気がします。


*1 ロボット教室ミドルコース『チクタクロック』で学習しました。
 電池で動くインテリア時計の振り子は、ただのフェイクです。

*2 昭和アニメ「アルプスの少女ハイジ」中の名ゼリフです。近頃はめっきり通じなくなりました…

*3 バネによる懸架も天然のP制御で、自動車のサスペンションがコイルバネだけだと、段差を乗り越えた後いつまでもボヨンボヨン揺れ続けてしまいます。

*4 高校数学/物理ですが、位置(角度)を時間で微分したものが速度(角速度)になります。
 自動車のサスペンション(天然の地上高制御)機構で言えば、ダンパーに相当し、速い振動を抑えます。
 ダンパーはドアにも取り付けられ、急に開閉すると抵抗を感じますね。


1.8 <プロ3年目コース『二足歩行ロボット③』>


 二足歩行の制御シーケンスをプログラムに落とし込み、ボタン一発で自動歩行させる最終月です。

腰と両足首のサーボモーター3個を個別に制御する手動操縦プログラム[BiRobotTest4_libまで]では、





1) 体を右傾させる     (左足を浮かせる)
2) 着地した右足首を左に捻る(左半身を進める)
3) 体を左傾させる     (右足を浮かせる)
4) 着地した左足首を右に捻る(右半身を進める)
という一連の動作(シーケンス)を繰り返せば前進、逆順で後退できました。

この順をそのままプログラムに記述すれば自動で歩行しますが、もう少し整理して、
a) 腰も足首も捻らず(原点位置で)直立した静止状態を挿入し、
b) 2)と4)の両足首を捻る方向の組合せで、前進・後退・左旋回・右旋回の4動作を切り替える
ことを実現したのが、ボタン一発型の自動歩行プログラム[BiRobotTest5_lib]です。

 この機能レベルになると、ある時点ではどうなっており(状態)、何ができて(動作)、次にどうなるか(遷移)をしっかり設計し、プログラム中でも管理する必要がでてきます。

それには、逐次処理的な制御フローを図示するのに向いたフローチャートよりも、
各状態・動作・遷移に注目した制御フローを図示する状態遷移図が向いています。

状態遷移図は、「有限個の状態と遷移と動作の組合せからなる機械モデル」の設計図です。
この機械モデルを有限オートマトン(finite automaton)または有限ステートマシン(finite state machine)と呼びます。
機械モデルの実装はロボットでも、ソフトウェアでも、ピタゴラスイッチでもあり得ます。

 何やら小難しい響きに聞こえますが、プログラムが組めない人でも、テレビのリモコン操作を不思議に思ってなければ、裏で流れる制御ソフトの仕業として感覚的に理解していることです。

例えば、「入力切替」で画面モード(状態)を切り替え(動作・遷移)ますね。
さらに、同じ数字ボタンを押しても、地デジではチャンネルが替わり、ビデオ入力では無効になり、ブラウザではカーソルキーとして働くなど、現在の状態によって、可能な動作と遷移先の状態が変わります。

 複雑な制御シーケンスや分岐・繰返し構造を場当たり的に記述していくと、バグによる思わぬ動作不良を招き易くなります。
これを、とり得る状態の数(無限にはない)に分解して、各状態における動作と遷移先の状態を規定していけば、比較的簡単に信頼性の高いシステムが設計できるというアイデアです。

状態遷移図(または表)や、より拡張された表記法である統一モデリング言語(UML)等を利用して、様々な製品が設計されています。

 さて、プログラム中で状態を管理するには、現在および遷移先の状態値(番号・記号)を記憶しておくための変数を用意します。
このような変数名には、"flag", "mode", "state", "step"等の文字列を入れると良いでしょう。
あとは、状態値に応じて、if文やswitch/case文による分岐ブロック{ }内に、動作(関数呼び出し)や状態値の書き換え(遷移)と、それに必要な条件(無条件なら不要)を記述するだけでも形になります。

独学でプログラミングを始めても、全員が発明しそうな必然の工夫です。

今回の二足歩行プログラムには、超音波センサー等の入力(条件)による自律的な状態遷移はありませんが(*1)、
前述の通り、無線コントローラーのボタン操作(条件)により足首の捻る方向(動作)を変え、4つの歩行モードを切り替えています。


 その他、下記のような制御の工夫点がありました。

●繰返し周期の多重化
 1つのメインループ loop() 内で、高頻度なサーボモーターの位置更新と、
中頻度なコントローラー操作や超音波センサーからの読出しとディスプレイ更新、
低頻度な音の更新を両立させるテクニックです。


void loop() {
  if (CounterA == 0) {
    xxx.read_gamepad();
// コントローラ読出[100ms毎]
    yyy.ping();       
// 超音波センサ計測[100ms毎]
    updateDisplay();   
// ディスプレイ更新[100ms毎]

    if (CounterB == 0) {
      updateTone();   
// 音の更新[300ms毎]
    }
  }

  updateServo();       
// サーボモータ更新[20ms毎]

  CounterA++;         
// 0→1→2→3→4[20ms毎]
  if (CounterA == 5) {
    CounterA = 0;     
// 0リセット[100ms毎]

    CounterB++;       
// 0→1→2 [100ms毎]
    if (CounterB == 3) {
      CounterB = 0;   
// 0リセット[300ms毎]
    }
  }

  delay(20);   
// 毎秒50回ループ[20ms毎]
}


●サーボ移動量の緩和
 上記でコントローラー操作を100ms毎にしか読み出さないのに、サーボモーター位置を20ms毎に更新するのは動きを滑らかにするためですが、
そのために足首は1/5ずつ、腰は(反動で倒れやすいので)1°ずつに毎回の更新量を制限するテクニックです。


diffLF = (targetLF - currentLF)/5; 
// 左足首の移動量/5
diffRF = (targetRF - currentRF)/5; 
// 右足首の移動量/5

currentLF += diffLF;           
// 左足首サーボモータ角度
currentRF += diffRF;           
// 右足首サーボモータ角度

servoLF.write(currentLF);     
// 左足首サーボモータ更新
servoRF.write(currentRF);     
// 右足首サーボモータ更新

if (currentBD < targetBD) {
  currentBD++;                 
// 腰サーボモータ+1°
else if (currentBD > targetBD) {
  currentBD--;                 
// 腰サーボモータ-1°
}
servoBD.write(currentBD);     
// 腰サーボモータ更新



 この二足歩行ロボットは、3個と少ないサーボモーターで多様な歩行動作ができるだけでなく、上体を左右に振り、片足を浮かせて両足首を曲げられるので、シーケンス制御のセンス次第では、ダンスのような動きも見せられるでしょう。
胸のディスプレイや演奏力も武器にして、ロビに勝るエンターテイメントロボに仕上げてみてはどうでしょうか。


*1 目玉に見せかけた超音波センサーが付いていますが、計測した距離に応じてメーター表示や鼓動音を変えているだけであり、歩行制御には関与していません。


2. 3月の課題


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

 <プレプライマリーコース> (プライマリーではありません)
  - オリジナル図形プリント
  https://robocobo.sakura.ne.jp/blog/HW/RobotPP2603-Q.pdf

 <プライマリーコース> (難しければプレプライマリー↑でもOK)
  - オリジナル図形プリント
  https://robocobo.sakura.ne.jp/blog/HW/RobotP2603-Q.pdf

 <ベーシックコース>
  - 授業まとめを精読する(概ね3年生以上/低学年は補助の下で)
  - オリジナル課題プリント(3面図のみ/設問なし)
  https://robocobo.sakura.ne.jp/blog/HW/RobotB2603-Q.pdf (裏面不要)

 <ミドルコース>
  - 授業まとめを精読する
  - オリジナル課題プリント(3面図+設問)
  https://robocobo.sakura.ne.jp/blog/HW/RobotM2603-Q.pdf

 <アドバンスコース>
  - 授業まとめを精読する
  - オリジナル課題プリント(見取図+設問)
  https://robocobo.sakura.ne.jp/blog/HW/RobotA2602-Q.pdf (2月配信済み)

 <プロ1年目コース>
  - 授業まとめを精読する(該当テキストページを見ながら)
  - 単一距離センサーロボット[avoider/nofall/tablerunner/walltracer]のいずれかを改良し、
  ダブル距離セ ンサーロボットとして、より洗練された動きを設計・実装する

  例えば、
  ・壁と壁の間を往復するプロ版“う王さ王”[avoider改]
  ・左/後退/右から安全な方向を選ぶ    [nofall改]
  ・左/直進/右を選びつつ崖っぷちを沿う  [tablerunner改]
  ・左/直進/右を選びつつ壁伝いに迷路を進む[walltracer改]

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

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


3. 2月の解答


 <プレプライマリーコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotPP2602-A.pdf
 <プライマリーコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotP2602-A.pdf
 <ベーシックコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotB2602-A.pdf
 <ミドルコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotM2602-A.pdf
 <アドバンスコース>
  翌テーマ1ヶ月目(来月)に配信します


4. 4月の授業予告

 https://robocobo.sakura.ne.jp/blog/hap/robo-2604.pdf

 <プレプライマリーコース>『キックボーダー』
 <プライマリーコース>『がたごとレスキューたい』
 <ベーシックコース>『ロボート』
 <ミドルコース>  『キャプテン パイロット号』
 <アドバンスコース>『コピーロボット①』
 <プロ1年目コース>『オムニホイールロボット①』
 <プロ2年目コース>『不思議アイテムII①』
 <プロ3年目コース>『不思議アイテムIII-1①』


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


◆全教室5月は一週ずつ遅れます。

――――――――――<佐藤教室長>――――――――――

[東福間]第1・3土原則<学習ルームでこぼこ>
   - 13:30~ ベーシック/ミドル
   - 15:30~ アドバンス

 ⇒ 4/4, 18,  5/9※, 23※,  6/6, 20

  ※5月は一週ずつ遅れます

[東福間プロ]第2・4日原則<学習ルームでこぼこ>
   - 10:00~ プロ1年目・2年目
   - 13:00~ プロ3年目

 ⇒ 4/12, 26,  5/17※, 31※,  6/14, 28

  ※5月は一週ずつ遅れます

[サンリブ古賀]第2・4土原則<文化サークル>
   - 10:30~ プライマリ/ベーシック/ミドル/アドバンス

 ⇒ 4/11, 25,  5/16※, 30※,  6/13, 27

  ※5月は一週ずつ遅れます

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

   - 15:00~ プロ1年目

 ⇒4/ 5 第1回 5F企画ルーム1
  4/19 第2回 5F企画ルーム1
  5/10※, 24※,  6/7, 21

  ※5月は一週ずつ遅れます

――――――――――<中野教室長>――――――――――

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

 ⇒ 4/4, 18,  5/9※, 23※,  6/6, 20

  ※5月は一週ずつ遅れます

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

 ⇒ 4/12, 26,  5/17※, 31※,  6/14, 28

  ※5月は一週ずつ遅れます


【振替教室ご利用条件(ロボプロを除く)】――――――――
 振替先の1週間前までにメール下さい(許可制)
 振替手数料550円/回をご負担下さい(お引落し)
 (東福間⇔小倉北のみ無料)
 所定コース内容・時間のみお受けします


6. お知らせ


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

 ◆プレプライマリ【4名平均 図形3.8】
   5点…田中[小倉北 年中]

 ◆プライマリ
   5点…なし

 ◆ベーシック【10名平均 図面3.0+設問2.6=5.6】
   8点…高村[東福間3], 福田[八幡東4]
   7点…西尾[小倉南3]

 ◆ミドル【9名平均 図面3.3+設問1.6=4.9】
   6点…亀平[八幡東4], 山根[八幡東4], 荒川[小倉北5], 関本[小倉北5]


東福間・小倉北・サンリブ古賀教室 佐藤 / 八幡東・小倉南教室 中野

2026年2月26日木曜日

2026年2月報

1.2月授業まとめ
2.2月の課題
3.1月の解答
4.3月の授業予告
5.今後の授業スケジュール
6.お知らせ


1. 2月授業まとめ


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


 割愛します。


1.1 <プレプライマリーコース『サイコロン』>


 割愛します。

1.2 <プライマリーコース『ロボドーザー』>


 割愛します。


1.3 <ベーシックコース『クルクルクリエイター』>


 第4回アイデアコンテスト全国大会(2014年)ベーシックコース最優秀賞作品「御家紋(ごかもん)くん」(当時小2)がベースの、自動お絵かきマシンです。

このアイデアは凄(すご)いですね。そして難(むずか)しいですね。
作るのも、動かすのも、アドバンスコース、いや、それ以上かもしれません(*1)。
詳(くわ)しい原理は難しすぎるので、「いっそベーシックコースで、深く考えずに、いろいろ試(ため)して遊びましょう」といった感じです。

 単純なギアの回転運動(*2)から、コースター紙にずいぶんと複雑な模様(もよう)を描(か)けるもんだな、と思いましたか?
そうです、それは大事な発見です(*3)。

しかも、下記を変えることで、また模様が変わります。
A) 回転するギアLとギアM3枚のペグ穴のうち、どこに2個のペグSを挿(さ)すか
B) ペンホルダーのロッド15アナとロッド9アナのどこに2個のペグSを挿(さ)すか

A)では、主に模様が変わります。B)では、主に大きさが変わります。

回転台を回らなくする改造(テキストp.27)で、ペン先の軌跡(きせき)が見えてきますが、これだけでは面白くないですね。
ペン先を回すのとは違うタイミングで台紙を回転させることで、複雑な模様が表れているのです。


 模様が複雑すぎて美しくないと思う場合は、ペン先の動きをもっと単純化しましょう。
ペン先の動きが複雑なのは、ギアLとギアMの回転数が異(こと)なり、2個のペグSが異なるタイミングで回るからです。
ギアMへ回転を伝える中間のギアLを外して、ギアMを回転しないよう固定すると、よりシンプルな幾何学(きかがく)模様になります(*4)。

ペン先が一度描いた軌跡に戻(もど)ったら(*5)、ペンの色と、A) や B) を変えて、また描きます(*6)。
この方が綺麗(きれい)ですね。オリジナルのコースターを描いて、家族や友達にプレゼントしましょう。細い油性ペンがいいよ(*7)。


*1 どんな模様になるかを予想するのは、高校生でも、大学生でも、大人でも(先生でも)超難しいです。

*2 本当に大事なのは、ギア上に留(と)めたペグの周回運動をリンク棒(ロッド)で取り出していることです。

*3 単純な動作でも、たくさん組み合わせると、複雑な処理や現象が実現します。
 神経細胞が集まって脳を形作るように、電卓やコンピュータも、「~の反対!(NOT)」と「両方ともON?(AND)」のたった2種類の信号処理部品を組み合わせて作ることができます。
 だから、この世の地形や現象、人間の行動さえも、単純な法則の組合せで成り立っているとする研究があり、今も続いています。

*4 このとき、ペン先の動きは単なる楕円(だえん)形になります。

*5 回転数の比は、元々、回転台:ギアL:ギアM = 1/5:1/3:5/9 = 9:15:25 なので、コースター紙が9回転して元の軌跡に戻ります。
 ギアMを留(と)めて単純化すると、回転台:ギアL = 1/5:1/3 = 3:5 なので、コースター紙が3回転して元に戻る間にギアL(ペン先)が5回転するので、5枚の花びら模様が表れます。

*6 一度ペンを外して、ギアL上のペグ穴を4ヶ所90°ずつ変えて(回転台の54°空回しに相当)また描くだけでも、模様が重なっていい感じになります。

*7 細い線の方が、模様が緻密(ちみつ)な感じになります。
 また、水性ペンだと、コップの水分で滲(にじ)んでしまい、コースターとして使えません。


1.4 <ミドルコース『クルクルメリーゴーランド』>


 遊園地アトラクションの代表格、メリーゴーランド、いいですね。
英語的に正しくは「メリー・ゴー・ラウンド」、日本語では「回転木馬」とも言います。
ヨーロッパでは、蒸気機関の時代から親しまれてきました。
華(はな)やかに回る光景に大人も癒(いや)される、何ともノスタルジックな遊具です。

 機械の内部は見たことがなくても、経験からステージの回転と馬の上下運動がリンクしていることは分かるでしょう。
およそ唯一(ゆいいつ)の回転動力源を利用した、アナログな機械だと予測がつきます。

ロボットを製作する上で、「実物に沿(そ)った構造か?」は大事ではなく、
「モーター動力を種々の回転運動や上下運動に分配するにはどういう方法があるか?」
を考えるきっかけにできれば良いと思います。

 先ず、地面に寝かせたタイヤLの中心にモーター軸シャフトを挿(さ)して、中央の回転塔を直立させます。
スイッチを入れると、タイヤLを固定脚にして、回転塔(モーター本体)がゆっくり回りますので、これをステージ中央の穴に挿すことで、ステージも一体化して回ります(*1)。

すると、そのステージの回転を支える円周上配置のタイヤS4輪が回り、各タイヤSの回転がステージ上の小物を動かします(*2)。

タイヤの回転が動力源に再利用されているわけで、シャフトやギヤの連結だけが動力伝達手段ではないことを語っています。

 また、ステージ上の小物は、タイヤSの回転から、次のようなバリエーション豊かな運動を実現しています。

・椅子  … マイタギア(傘歯車)で軸方向を水平→垂直変換して回転
・馬1, 鳥 … ロッド3アナによるカム作用(*3)で上下
・馬2   … その両方による間欠回転

 これらの運動は全て、タイヤSの回転を通して、間接的にモーターの負荷(ふか)となりますが、回転塔内にコンパクトに収めた3段の3:1減速ギヤボックス(1/3×1/3×1/3=1/27)が十分な回転トルクを出しますので、力不足の問題はありません。

小物やステージがスムーズに動かない(カクカク動く)場合は、下記の摩擦力に注意します。

・ステージが回らない ⇒ 中央のタイヤLがしっかり接地し(摩擦:大)、ステージ下のタイヤSが軽く回る(摩擦:小)よう調整

・小物が動かない ⇒ 直下のタイヤSを手で回してみて、小物の支柱がスムーズに上下/回転する(摩擦:小)よう調整

 優美さを演出するにも、突き詰めれば考察ポイントの多いことが分かるテーマでした。
ちょっと、メリーゴーランドに乗りたくなったでしょ?(先生も…)


*1 だから、ステージ中央の穴に挿してタイヤLが浮くようならダメですね。

*2 実物では、回転ステージ下の狭い空間ではなく、天井のクランクから馬の支柱を吊り下げていることが多いようです。

*3 回転部品(ロッド3アナ)の外形をなぞるジョイント部(シャフトと先端のマイタギア)が生む、周期的な往復運動を利用したリンク作用


1.5 <アドバンスコース『ピッキングロボ①』>


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

1.6 <プロ1年目コース『不思議アイテムI-2②』>


 センサー類を駆使する、冬タームの2ヶ月目です。

 1日目のテーマは、「ベースロボットの組み立て」です。
何のことはない、左右両輪(2モーター)を独立駆動して、前進・後退・左右旋回を自在にこなす土台のロボットを製作します(*1)。

戦車型ラジコンプログラム[Tank]を転送して操縦したり、時間制御プログラムで決まったコース(円・四角・8の字など)を自動的に走らせることはできますが、まだセンサー類が無いので、外界からの入力情報を基に“考える”ことはできません。

 2日目のテーマが、「カラーセンサーロボット」です。

 その1つ目は、「ライントレーサー」です。
カラーセンサーを下向きに取り付け、地面の明暗(白黒)情報だけを処理し、黒いライン(の縁)をたどるロボット[Tracer]に仕立てます。
「白なら右へ、黒なら左へ」旋回するように片輪を交互に駆動する制御方式は、アドバンスコースSUのそれと同じですね。

マイコンが認識する明度(明るさの数値)は、環境光や反射率はもちろん、センサーの個体差、電源電圧(*2)にも左右されるため、各々のロボットで閾(しきい)値 colorIsBlack(1000) を変更する必要がありました(*3)。

 2つ目は、「カラートレーサー」です。
カラーセンサーをヘッドライトのように前向きに取り付け、前方景色の色相(色味)情報だけ(*4)を処理し、特定の色に向かうロボット[ColorTracer]に仕立てます。

サンプルプログラム中、色相 h を使って“if(h>180 && h<270) {前進せよ;} else {停止せよ;}”となっています。
これは、数学的には 180°<h<270°のことで、色相環(テキスト第2回p.16, 第4回p.15)で確かめると“青”ですね。
“緑”なら“if(h>60 && h<150) …”くらいでしょうか。

“赤”は難しいです。2つの変域 0°≦h<30°, 300°<h<360°がありますので、“もし(hが0以上 かつ hが30未満)または(hが300超 かつ hが360未満)ならば”のように論理的に記述しなければなりません。
“if( (h>0 && h<30) || (h>300 && h<360) ) …”となります(*5)。

走り方(タイミング、スピード、軌跡など)に変化をもたせて、好きな色を見ると近づいて行く愛らしいロボット(闘牛?)に仕上げてみましょう。
“鳴く”と面白そうですね。

 最終月は、「ウルトラソニックロボット」で今タームを仕上げます。


*1 これだけで普通の自動車(1エンジン)を遥かに凌駕する自由度を獲得できるのですから、将来は電気自動車に替わっていくわけです。

*2 パソコンからのUSB給電の場合と、電池駆動とで数値が変わるという…盲点があります。

*3 よりスマートに、調整用プログラム[ColorSensor2]実行中、Arduino“シリアルモニタ”を起動し、USBケーブル経由で白地と黒ライン上の数値をモニタリングし、その中間値を閾値として設定することもできます。

*4 1ドットカメラなので、人間なら瞼(まぶた)を瞑(つむ)ったまま外光の色を感じるようなものです。

*5 論理積(AND)演算子 && は、論理和(OR)演算子 || より優先順位が高い(先に演算される)ので、“if(h>0&&h<30||h>300&&h<360)…”と続けて書いてもOKですし、h=0~359の値しか取らないので、実は“if(h<30 || h>300)…”だけでもOKです。


1.7 <プロ2年目コース『倒立振子ロボット②』>


 倒立振子? 2ヶ月目ですが、まだまだ、もったいぶりますよ。
自転車のムラタセイサク君(2005年)や、一輪車のムラタセイコちゃん(2008年)が誇らしげにCMに登場してからまだ二十年、ホットな技術なのです。順を追いましょう。

 1ヶ月目で、チップに集積された3種の姿勢センサーのうち、加速度センサー、角速度センサーの機能を学びました。
ここまでの出力手段は、LEDマトリクスや7セグへの“表示”だけでしたが、「感じて、考えて、動く」のがロボットです。運動能力を与えましょう。

少ないハードでも、高い自由度で動き回れるロボットの形態と言えば、3輪のオムニホイールロボットですね。
2日目にこれを組み立て、マイコンボード、I/Fシールドに姿勢検出シールドを搭載します。

動くと、やはり面白いことになります。
角速度センサー(Z軸)を使って、どういう向きに置き直してもクルッと回って元の向きに戻りたがる奴[AngCtrlOmni](*1)を目にすると、どうしても生命感を感じてしまいます。

 ここで、「向きを検知して表示するのもモーターを回すのも同じくらい簡単にできるけど、やっぱり動いた方が面白いよね!」と実感することだけが目的ではありません。
出力先がディスプレイなら、処理結果を送るだけで、ちゃんと表示されたかどうかなど調べる必要はありませんが、
物体の運動には様々な外乱要因が加わりますので、「あるべき状態(目標値)」と「今の状態(現在値)」にズレが生じることを前提にしなければ、高精度な制御はできません。

このズレを最小化するよう頑張り続ける方式を“フィードバック制御”と呼びます。
片や、決められた手順や時間・回数分だけ逐次実行して、結果を省みない無責任な処理方式を“シーケンス制御”と呼びます。
タッチセンサーやボタンの押下状態(1ビット=2値)を調べて条件分岐するくらいでは、とてもフィードバック制御と言えません。

身の回りの製品では、
・シーケンス制御 … 目覚まし時計、炊飯器、洗濯機、リモコン(高機能品を除く)
・フィードバック制御 … エアコン、給湯器、CD/DVDプレーヤ、車の自動ブレーキ(*2)

など、やはり賢そうな機械ほどフィードバック制御が多用されています。

 ここで、わずかな位置のズレでも素早く戻すようモーターを強力に駆動すると、振り子のように振動してしまい、いつまでも目標値に収束(しゅうそく)しなくなります(*3)。

つまり、「理想と現実のズレを解消しようとがむしゃらに努力すれば必ず報われるほど、甘くはない」という真理を突き付けられる訳です。
悲しいですね。もう一段、スマートさが必要なんです。

制御工学(理論)において、目標値とのズレを「誤差」、出力値の大きさを決めるために誤差に掛ける係数を「フィードバックゲイン」(または単にゲイン、利得)と呼びます。
ゲインを増やすほど素早くなりますが、必要以上に大きくして、ギクシャクした動きや振動にならないよう注意します。

 元の向きに戻るプログラム[AngCtrlOmni]中、現在の角(速)度 ang、目標値 Ref、誤差 Err、ゲイン Kp が見つかります(*4)。

大事なのは、「確定的な結果の保証よりも、現在の状態を客観的に知り、目標に近づこうと働き続ける」点です。心に響きましたか?

 次月こそ、いよいよ倒立振子ロボットの製作です。


*1 角速度センサーを使った積分プログラムで、どれだけ回転したかを求めていますが、累積誤差がつきもので次第にずれが拡大していくことと、最初に初期状態(地球の自転や個体差の影響)を計測せねばならない欠点もあります。

*2 車を持ち出したら、エンジン燃焼、カーエアコン、定速走行、スリップ防止など、枚挙に暇(いとま)がありませんが。

*3 手のひらに箒(ほうき)を逆さに立てる時など、皆さんも無意識に同じことをやっていますよ。ずっと全速力で手を動かすマヌケはいませんよね。

*4 ゲインKpはトライアル用[AngCtrlOmni_Challenge]で追加されています。
 Kp = 1 のままでは[AngCtrlOmni]と同等です。


1.8 <プロ3年目コース『二足歩行ロボット②』>


 2ヶ月目で、両目+舞踏仮面(超音波センサー+カバー)と両腕を取り付けて、外観が完成しました。あとは“ハート”です。

Pepperくんモドキに、胸にディスプレイ(8×8マトリクスLED)があります。
左胸だから(ニクい設計!?)、ドキドキハートのアニメーションを表示させようという魂胆です。
1年目から幾度も使ってきた <Sprite.h>, <Matrix.h> 両ライブラリを読み込んで(*1)、
大中小3パターンのハートマークを順次書き換えるプログラムで簡単に実現しました(*2)。

ハートマークの変化に合わせて、スピーカーから高中低3音を鳴らし分ければ、それはもう心臓の鼓動。愛想が生まれます。
見た目と相まって、私達の目に擬人化されて映るのに十分過ぎる表現力です。

役に立たない?
いえいえ、人間と共生し、楽しませる人型ロボットには大切な要素です(*3)。

 このロボットの両目は超音波センサーですから、外界を少し“見る”能力があります。
目の前にかざした手(反射体)までの距離をプログラム [BiRobot4/USSTest0] で計測し、PC画面でシリアルモニタリングしてみました。

すると、200cm以上遠くまで計測できるスペックなのに、手を退(の)けても50cm前後で数値が揺らいでいます。
(50cm先に見えない“何か”が存在する?!)

 原因は、8×8マトリクスLED表示に伴う電気ノイズにありました。
この表示デバイスは64個のLEDを1ドットずつ書き換えられる(ように見える)のに、
1) 裏面には8+8=16本のピンしか生えてなく、
2) 現在の表示パターンを保持しておくメモリや駆動回路も無い受動デバイスですから、
ダイナミック点灯方式で外部から“動的に”駆動してやらなければなりません。

つまり、8+8本のピンは、X座標とY座標の指定ピンとして機能し、
X座標用のどれか1ピンに電源(+)、
Y座標用のどれか1ピンにGND(-)を繋いだ時、
その交点のLEDドットだけが点灯するという、単にそれだけの表示器なのです。

ある瞬間には、ある座標のLEDがせいぜい1個だけ点灯(画像データによってはそれも消灯)している状態を、全64個のLEDについて高速に切り替えてやる必要があります。
即ち、全てのLEDドットはこの周期で点滅しているのですが、30~40Hz以上の点滅は連続点灯しているように見えるという残像効果を狙った使い方で設計されています。

 このダイナミック点灯方式は、駆動回路(またはプログラム)として面倒なことには違いありません。
当然、64個のLEDに個別のスイッチを配線して“静的に”画像を保持できる(分かり易い)スタティック点灯方式もありますが、
これでは高々8×8ドット画像のために少なくとも65本(1本は共通GND等)のピンが必要になり、マイコンのピンが幾らあっても足りなくなります。
それを16本に削減することで、普通のマイコンで(安く)済むという大事な恩恵が得られるのです。

 但し、超音波センサーやスピーカー等、他にも接続したいデバイスが多数ある28~40ピンのマイコンにとって、このLEDに16本も消費されるのは依然として勿体無く、拡張性も乏しくなります。

そこで、マイコンボードとマトリクスLEDの間に挟まっている「マトリクスLEDシールド」というボードが一役買います。
このシールドボードには、パターンメモリや駆動回路が組み込まれたドライバーチップが搭載され、LEDのダイナミック点灯を代行してくれます。

マイコンは、オブジェクト初期化宣言 Matrix my_mat = Matrix(11, 13, 1); のように、僅か3ピンを使って、シリアル通信方式でこのドライバーに更新データを送り付けるだけで済むのです(*4)。

 このように、ダイナミック点灯は多数のLEDから成る表示デバイスに欠かせない方式ですが(*5)、
電気回路には、電流が急変すると、それが電気ノイズとして他の配線に回り込んだり、電磁ノイズとして空間に飛び出したりする宿命(アンテナの原理)があります。

激しくLEDのON/OFFを切り替えるダイナミック点灯方式では、このようなスイッチングノイズが他のデバイスの信号レベルを乱し、誤動作させる場合があります。

これが原因で、超音波センサーからのEcho(反響検知)信号が50cmの障害物と同じタイミングで乱れて誤判定されていたのですね。

 この問題は、
1) NewPing::ping_cm() 関数で超音波計測する“前”に、
2) Matrix::clear() 関数でLEDを“全消し”しておくことでスイッチング電流を控え、
3) “計測後”に Matrix::write() 関数でドキドキハートや距離バーメーターを表示することで、
同時使用が可能になって解決しました。


それでも、LED表示が一瞬消えるようには見えませんでしたね。
即ち、ソフトウェア的にもダイナミック点灯(人間の残像効果)を利用したことになります。

 他にも、シリアルモニタ通信 vs. マトリクスLED(1番ピン)や、超音波センサー vs. スピーカー(タイマー2)等、
複数のデバイス同士で、使用するマイコンのピンやタイマー機能の競合に纏(まつ)わる問題が発生し、それを解決していく疑似体験をしました。

 このように、ロボットや電子機器(頭脳としてマイコン)に様々なデバイスを統合する際には、限られたリソース(処理速度や機能数)を問題が起こらないように分け合い、有効活用する“知恵”が求められます。
それは、面倒なことですが、実利性のある製品を作るために必須の営みです。

 最終月で、いよいよ二足歩行ロボットの頭脳をプログラミングして参りましょう。


*1 #include <xxx.h> は、本来(ベースのC/C++言語環境で)は、
「ライブラリ格納フォルダから"xxx.h"という名のヘッダファイル(ライブラリ本体ではなく、定数やクラス・関数プロトタイプ宣言等の定義情報の寄せ集め)を探して読み込み、一緒にコンパイル(翻訳)せよ」
という指示であり、ライブラリ本体プログラム"xxx.cpp"との結合(リンク)は別物なのですが、使い易く実装されたArduino環境がこれらの作業を代行してくれます。

*2 if/else構文の代わりに、多分岐構造に適した switch/case構文を使いました。

*3 そもそも人型ロボットにするところから、擬人化で人の感情を揺さぶる要請があります。
 高橋智隆先生が創る“役に立たない”ロボットもここを重視しています。

*4 実際は、11番ピンがクロック信号、1番ピンがチップセレクト(デバイス選択)信号のようですので、13番ピンだけを使って画像データやアドレス(座標)情報を送っています。
 SPI(Serial Peripheral Interface)通信と呼ばれる方式です。

*5 光るデジタル時計などもそうです。安いものでは、表示が少しチラついているように見えたことがありませんか?
 ダイナミック点灯方式で点滅しているからです。


2. 2月の課題


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

 <プレプライマリーコース> (プライマリーではありません)
  - オリジナル図形プリント
  https://robocobo.sakura.ne.jp/blog/HW/RobotPP2602-Q.pdf

 <プライマリーコース> (難しければプレプライマリー↑でもOK)
  - オリジナル図形プリント
  https://robocobo.sakura.ne.jp/blog/HW/RobotP2602-Q.pdf

 <ベーシックコース>
  - 授業まとめを精読する(概ね3年生以上/低学年は補助の下で)
  - オリジナル課題プリント(3面図+設問)
  https://robocobo.sakura.ne.jp/blog/HW/RobotB2602-Q.pdf

 <ミドルコース>
  - 授業まとめを精読する
  - オリジナル課題プリント(3面図+設問)
  https://robocobo.sakura.ne.jp/blog/HW/RobotM2602-Q.pdf

 <アドバンスコース>
  - 授業まとめを精読する
  - オリジナル課題プリント(見取図+設問)
  https://robocobo.sakura.ne.jp/blog/HW/RobotA2602-Q.pdf (来月まで分)

 <プロ1年目コース>
  - 授業まとめを精読する(該当テキストページを見ながら)
  - カラートレーサープログラム[ColorTracer]を改変し、
  赤(好き!)へ突進、青(怖い!)からはゆっくり後ずさり、
  それ以外では停止するロボットに仕立てる

  《ハイレベル挑戦》さらに、緑(臭い!)で旋回する動作を足せるかな?

  【注意】色は色相 h で表し、赤:h<15 or h>315、青:195<h<255、緑:75<h<135 等で与えます。
   照明ライトのレンズ反射光で誤動作し易いので、//ColorSensor.led(3); のようにコメントして消灯します。
   動作を足すほど不意に動き回って危険ですので、特に後退時はスピードを抑え、忙(せわ)しすぎる場合は反応する色相範囲を狭め(停止範囲を広げ)ます。

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

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


3. 1月の解答


 <プレプライマリーコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotPP2601-A.pdf
 <プライマリーコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotP2601-A.pdf
 <ベーシックコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotB2601-A.pdf
 <ミドルコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotM2601-A.pdf
 <アドバンスコース>
  https://robocobo.sakura.ne.jp/blog/HW/RobotA2512-A.pdf


4. 3月の授業予告

 https://robocobo.sakura.ne.jp/blog/hap/robo-2603.pdf

 <プレプライマリーコース>『ロボコング』
 <プライマリーコース>『のびーるハンド』
 <ベーシックコース>『ロボリン君』
 <ミドルコース>  『ステアリングカー』
 <アドバンスコース>『ピッキングロボ②』
 <プロ1年目コース>『不思議アイテムI-2③』
 <プロ2年目コース>『倒立振子ロボット③』
 <プロ3年目コース>『二足歩行ロボット③』


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


◆全教室5月は一週ずつ遅れます。

――――――――――<佐藤教室長>――――――――――

[東福間]第1・3土原則<学習ルームでこぼこ>
   - 13:30~ ベーシック/ミドル
   - 15:30~ アドバンス

 ⇒ 3/7, 21,  4/4, 18,  5/9※, 23※

  ※5月は一週ずつ遅れます

[東福間プロ]第2・4日原則<学習ルームでこぼこ>
   - 10:00~ プロ1年目・2年目
   - 13:00~ プロ3年目

 ⇒ 3/8, 22,  4/12, 26,  5/17※, 31※

  ※5月は一週ずつ遅れます

[サンリブ古賀]第2・4土原則<文化サークル>
   - 10:30~ プライマリ/ベーシック/ミドル/アドバンス

 ⇒ 3/14, 28,  4/11, 25,  5/16※, 30※

  ※5月は一週ずつ遅れます

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

   - 15:00~ プロ1年目

 ⇒3/ 1 第1回 4F工芸室
  3/15 第2回 4F和室
  4/5, 19,  5/10※, 24※

  ※5月は一週ずつ遅れます

――――――――――<中野教室長>――――――――――

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

 ⇒ 3/7, 21,  4/4, 18,  5/9※, 23※

  ※5月は一週ずつ遅れます

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

 ⇒ 3/8, 22,  4/12, 26,  5/17※, 31※

  ※5月は一週ずつ遅れます


【振替教室ご利用条件(ロボプロを除く)】――――――――
 振替先の1週間前までにメール下さい(許可制)
 振替手数料550円/回をご負担下さい(お引落し)
 (東福間⇔小倉北のみ無料)
 所定コース内容・時間のみお受けします


6. お知らせ


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

 ◆プレプライマリ【6名平均 図形4.2】
   5点…椿[小倉北1], 松本[小倉北1], 高崎[小倉南1]

 ◆プライマリ
   5点…なし

 ◆ベーシック【10名平均 図面3.4+設問2.0=5.4】
   8点…福田[八幡東4]
   7点…なし

 ◆ミドル【10名平均 図面3.4+設問1.8=5.2】
   7点…亀平[八幡東4], 山根[八幡東4], 荒川[小倉北5]
   6点…なし

 ◆アドバンス【3名平均 図面4.7+設問3.0=7.7】
  12点…土屋[小倉北5]


東福間・小倉北・サンリブ古賀教室 佐藤 / 八幡東・小倉南教室 中野