第11回:Small Basicを使ってみよう
こんにちは。「50歳からのプログラミング講座」を担当する JLabo(ジェイラボ) です。 今回は「タートルグラフィックス」をご紹介します。
タートルプログラムをご紹介する理由
石器時代の後半には重い物を運ぶツールとして丸太などのコロがありました。 軸がある車輪はその7000年後に発明されたとのことです。7000年ものあいだ重い物を運ぶニーズはあったのに車輪を考え付かなかったということはある意味不思議ですが、このことから「車輪の再発明」という格言が生まれたのかもしれません。
一方、コンピュータが出現してたったの75年です。(ENIC 1946年)
いろいろな物、事柄などの発展スピードはどんどん速くなっています。
20年後はどんな社会になっているのでしょうか?
昔、エクセル95でイースター・エッグが仕込まれていたのを体験しました。操作は忘れてしまいましたが かなり大勢の開発者名が画面に表示され、エクセルの開発規模の大きさを実感しました。 この方達が1行ずつプロクラムを打ち込み、全体を統括する管理者がいて、その開発体制のシステムはどうなっているのだろう。と興味を持ったものでした。
WindowsのOSやOfficeをはじめとして、IT、AI、マイナンバー、不具合があった 銀行ATMなど、一言で表現されているいろいろなシステムは実体のない何かの塊ではなく、すべて誰かがアルゴリズムを考え、1行ずつプログラムを打ち込んで成立しています。 これらに携わって成果を上げるプログラマーの能力や気概などはもちろん重要ですが、携わっていない大多数の「使う側の能力」としてプログラムの概念を持つことは重要だと思います。
あなたの孫が活躍する20年後の社会環境はどうなっているのでしょうか? AIによって職業マップが激変すると言われていますが、いろいろな判断、決断をするときにAIの本質を直感的に判断するための作法として「プログラム」とはどんなことなのかを知っておくことはとても重要だと思います。
プログラムの勉強 = プログラマーになるための準備 ではなく、コロを使ってつらい運搬作業をしているときに車輪を思いつけるような基本的な思考の元を作るものだ思うのです。飛躍して言うと、道徳や感性を磨く音楽の教育と目的は同じではないかと考えます。 この目的から考えるとプログラミングを体験する言語はなんでも良いと思います。 幼児用として開発されたのプログラミング言語は数多くあります。Small Basic に組み込まれている「タートルグラフィックス」はそのうちの1つで、他の言語に比べて特別「ここがすごい」ということはありませんが、せっかく皆さんと Small Basic に親しんだので、この言語で遊んでみたいと思います。お孫さんに教える様な感じで勉強してみましよう。
誰かに教えるということは自分が理解する最短、最善、最強の方法です。 前置きが長くなりましたが、このコラムの読者の皆様はおそらく「お孫さんがいらっしゃる年代」と フォーカスを絞っています。それで「ジイジ・バアバが作ったゲーム」をご紹介したのですが、今回と次回は実際にSmall Basic の「タートルグラフィクス」を使って、お孫さんと一緒になって
①プログラムを書く
②動作を確認し不具合があれば修正→①
③思い通りであれば別な動作のプログラムを考える→①
の体験学習をして頂きたいと思います。
こんな事ができる祖父母をもつ孫は滅多にいません。20年後のお孫さんが豊かに過ごせる良い贈り物になるといいな、と願ってコラムを進めます。
前回まではなるべくプログラムの作法にとらわれることなく進めるために、変数などを漢字に置き換えました。今回はコマンドも少ないため、Small Basic の入力支援ツールを使って直にコマンドを打ち込んでいきます。
それでは早速 Small Basic を起動してください。
Turtle.Show() と入力する例で説明します。
パラメーターがなくても「カッコ」は必要です。
画面に半角で t と打ち込みます。
次に u を打ち込みます。
tuに近いキーワードが表示されます。
この画面では Turtle が選択候補として表示されていますのでEnter キーで確定します。Tabキーでも同じ動作をしますが、ここではEnterキーで説明します。次に Turtle の右にピリオドを入力します。
続けて S を入力します。
ここで Enter キーを押します。
もう一度Enterキーで改行します。
説明すると長くていやになりますが、アクションだけおさらいすると
tu
Enter
.s
Enter
Enter
で1行のプログラムが入力完了です。
もう少し長めに入力をしないと選択出来ないコマンドもありますが、メニューを見ながらプログラムを作れるのでタイプミスもなく、英語が不得意な私にとっては大変便利です。
これで実行(F5) をクリックするか、F5キーを押して実行させると画面中央にタートル(以下 亀と呼びます。)亀が表示されます。プログラムを走らせるときに画面が真っ白だと座標がつかみにくいので、標準の画面を作りました。以下のコードでインポートしてください。
前回まででご紹介したプログラムの流用ですが、念のためコマンドの説明をします。 以下は画像データなので文字のコピーはできません。
タートルグラフィックスのコマンドは以下が用意されています。
-
- Show 亀を表示します Turtle.Show()
-
- Hide 亀を非表示にします Turtle.Hide()
-
- Pendown ペンを下して、亀が動作した通りに描くことができるようにします Turtle.PenDown()
-
- Penup ペンを上げて、亀が動作した通りに描くのを停止します Turtle.PenUp()
-
- Move(引数) 亀を指定された方向へ移動します。
ペンが有効になっているときは、その動きに従って線が描かれます。 Turtle.Move(引数)
- Move(引数) 亀を指定された方向へ移動します。
-
- Turtle.MoveTo(引数,引数) 亀を、指定した場所へ回転、移動します。
ペンが有効になっているときは、その動きに従って線が描かれます。 Turtle.MoveTo(引数,引数)
- Turtle.MoveTo(引数,引数) 亀を、指定した場所へ回転、移動します。
-
- Turtle.Turn(引数) 指定された角度で亀を回転します。
角度は度で指定し、値は正か負角度が正の値の場合は、亀は右へ回転します。
負の場合は左へ回転します。 Turtle.Turn(引数)
- Turtle.Turn(引数) 指定された角度で亀を回転します。
-
- Turnright 亀を 90 度右へ回転させます Turtle.TurnRight()
-
- TurnLeft 亀を 90 度左へ回転させます Turtle.TurnLeft()
-
- Speed 亀の動作の速度を指定します。
1 から 10 の値を指定できます。10 が最大です。 Turtle.Speed =9
- Speed 亀の動作の速度を指定します。
-
- Angle 亀の現在の角度を設定または取得します。
設定すると、亀はすぐに新しい角度へ回転します。 Turtle.Angle=60
- Angle 亀の現在の角度を設定または取得します。
-
- Turtle.X 亀の X 座標を設定または取得します。
設定すると、亀はすぐに新しい場所へ移動します。 Turtle.X=50
- Turtle.X 亀の X 座標を設定または取得します。
-
- Turtle.Y 亀の Y 座標を設定または取得します。
設定すると、亀はすぐに新しい場所へ移動します。 Turtle.Y=200
- Turtle.Y 亀の Y 座標を設定または取得します。
では タートルグラフィックスのプログラムを作ってみましょう。最初にメモ用紙にターゲットの座標を記入してください。次に亀を動かす経路を決めます。これがプログラムの目的、仕様になります。以下のプログラムを入力またはコピーして貼り付けます。
ここからタートルグラフィックスのプログラムを記述してください。
Turtle.Show()
GraphicsWindow.PenColor=黒色
Turtle.x=50
Turtle.y=450
Turtle.Speed =9 '亀のスピードを設定します。最大は10
Turtle.MoveTo(650,50) '右上に移動します。
Turtle.MoveTo(50,450) '元の場所へ戻ります。
GraphicsWindow.PenColor=黒色
Turtle.x=50
Turtle.y=450
Turtle.Speed =9
Turtle.MoveTo(650,50) '右上に移動 Turtle.MoveTo(650,450) '右下に移動 Turtle.MoveTo(50,50) '左上に移動 Turtle.MoveTo(50,450) '左下に移動
いかがでしょうか? コマンドのスペルが1つ違っていたり、縦横の座標が入れ替わったりでうまくいかないことがあると思いますが、これがきわめて重要です。試行錯誤をお楽しみください。次回はもう少し複雑な動作を試して見ましょう。
さてここからは「わが家の工夫」、お気に入り部品の一部をご紹介します。
日曜木工(毎日日曜ですが)の時は木ねじが不可欠です。なるべく接着などしないで組み立てます。不要になった場合、材料の再使用とか廃棄に便利です。必要になる度にホームセンターで購入します。10本くらいのパックだと割高なので、なるべく中くらいの箱にします。その結果こんなになってしまいました。
在庫分は別に保管していますが、インデックス代わりに1個だけ板に貼り付けてます。
余談ですが、JIS用語辞典では「ねじ」となっているので「木ネジ在庫リスト」は
間違いです。
余ったねじは箱に戻すのが面倒なので空き箱に入れてます。ここから適当に選んで使うので便利です。上にある棒はマグネットがついています。直接指でかき混ぜるとたいてい怪我をします。
普通のねじはパーツケースに入れて保管しています。
1.2mmのねじもあるのですがほとんど使いません。
ねじを切るときのツールです。タップと下穴用ドリルをセットで保管しています。
電子工作ということで、トランジスタと抵抗、コンデンサで本を見ながらいろいろな物を作っていましたが、そのうちIC化され、ずいぶん簡単になりました。レコーダーの置き場所の問題でリモコンがききにくいので、リモコンエクスパンダー(中継)を作ろうと思いICを探しました。
秋葉原に行くと入手出来るのですが、アリエクスプレスで探したところ ICではなく完成品が売っていて、これがICより安いんです。送料無料なので購入したところ大変具合良く動いています。
こんなことがあったので何かを作る場合は部品からではなくユニットを探して組み合わせて作るのが普通になってきました。今はトランジスタを使うことは滅多にありません。以下、何かの必要があって購入したユニットの一部をご紹介します。
入力5Vを 2-24Vに変換するDC-DCコンバーターです。
USB充電器から1.5Vや3Vを作るときに便利です。
最近見つけた 2-24Vの入力を 2-24Vに変換するDC-DCコンバータです。好きな電圧に出来るので余っている電源を有効活用出来ます。
人感センサーです。センサーの駆動は0.3A程度なので電球などはON-OFF出来ません。 リレーユニットと組み合わせて使います。
明暗センサーです。明るさに応じてリレーがON-OFFします。
このユニットを使った例です。
最近のトイレはオプションで音楽プレーヤがついています。
「音」だけの安いのはありますが、それなりの物はびっくりするほど高いのです。
そこで使わなくなったMP3プレーヤに電源をつないで常時ならしっぱなしにします。 小さなアンプ付スピーカーを取けて、トイレの電気がついたら音楽が鳴るようにしました。壁のスイッチに配線する必要もないし、便器の後ろに隠れますので見えません。今のところ快適に動いています。窓があって昼間明るいトイレには使えません。
雨センサーです。雨が降ったら洗濯物を取り込む警告用に購入しましたが、妻から一言「いらない」でお払い箱です。実験もしていません。
433MHzのリモコンユニットです。ON-OFFだけですが別の部屋からでも届きます。
こちらは廉価版の赤外線リモコンです。
電圧、電流計のユニットです。
遅延タイマーです。遅延時間をのばすためコンデンサーを追加しています。
毎回雑多な内容で恐縮ですが、次回をお楽しみにして頂ければ幸いです。