Python会〜タートルグラフィックスで幾何学模様を作ったよ。

はじめに

前回の内容はこちら:Python〜ev3とVSCodeで音楽作り

Pythonのタートルグラフィックスで幾何学模様を作ってみました。タートルグラフィックスは画面上に表示される亀を移動させることで、亀の動いた跡が線として描かれます。1967年にLOGO言語とともに登場し、プログラムの結果をすぐに目で見て確認できるため、理解しやすく、プログラミング教育でもよく使われています。
今回は、このタートルグラフィックスにフィボナッチ数列を使うことで、幾何学模様を簡単に作る方法を紹介します。

今回、参加した子達が作った幾何学模様

目次

1.タートルグラフィックスを使った基本的な図形の書き方
2.フィボナッチ数列について
3.フィボナッチ数列を使った幾何学模様の書き方

1.タートルグラフィックスを使った基本的な図形の書き方

エディターはVsCodeを使用しています。まずは、タートルグラフィックスで基本的な図形の書き方として、円を描いてみましょう。コメントアウトで説明しています。

from turtle import * #タートルグラフィックスを使えるようにする
color('red') #ペンの色
pensize(2) #ペンの太さ
speed(0) #描くスピード 0が一番速い

#円の描き方
begin_fill() #塗りつぶしスタート
circle(50) #半径50の円を描く
end_fill() #塗りつぶし終わり
done() #処理が終わっても表示させる

circle()内の数字を変えることで円の大きさが変わります。また、塗りつぶしをしない場合は、begin_fill()とend_fill()をコメントアウトするか削除してください。
三角形の場合は、亀が100前に進み、進行方向から120度左に向きを変えるという動作を3回繰り返すことで描くことが出来ます。

#三角形の描き方
color('pink')
begin_fill()
for i in range(3): #3回繰り返す
    forward(100) #前に100進む
    left(120) #左に120度曲がる 
end_fill()
done()

三角形と同じ要領で、他の多角形も描いてみましょう。四角形なら、下のコードのXを4に置き換えます。

#多角形の描き方
color('pink')
begin_fill()
for i in range(X): #xに描きたい辺の数を入力
    forward(100) #前に100進む
    right(360/X) 
end_fill()
done()

Xに9を入れた場合は、9角形が出来ます。

多角形が作れたら、
right(360/X)の行を、right(360/X*n)にして、nに整数を入れてみると、どんな図形になるか色々実行してみよう。例えば、X=5,n=2にすると、下のような星の形になります。

2.フィボナッチ数列について

フィボナッチ数列は、1,1,2,3,5,8,13,21,34,55,89,144,233,……といったように、最初の二つの1をのぞいて、三つ目以降は、前の二つの数を足した数で出来た数列です。このフィボナッチ数列は不思議と自然界に深く関係しています。例えば、ひまわりのタネの並び方や、オウムガイやDNAの螺旋構造、木の枝の別れ方などにもフィボナッチ数列やフィボナッチ数が出現します。また、私たちが美しいと感じる黄金比にも関係しているという神秘的な数列です。

まず、フィボナッチ数列のリストを作ってみます。フィボナッチ数は前の二つの数字の和になるという特徴を利用します。ここでは、6回繰り返しているので、1,1,2,3,5,8,13,21,34,55,89,144,233,377の数列が完成します。

a=1
b=1
fibonacci=[1,1] #fibonacciという名前のリストに1と1が入っている
for i in range(6):#6回繰り返す
a +b = a #aの値にbの値を足してaの値を更新
b +a = b #bの値にaの値を足してbの値を更新
fibonacci.append(a) #aの値をfibonacciリストに追加
fibonacci.append(b) #bの値をfibonacciリストに追加

3.フィボナッチ数列を使った幾何学模様の書き方

先ほど作ったfibonacciリストを使って幾何学模様を描いてみましょう。fibonacci数列のリストを作った後に、fibo_circleという関数を作り、パラメーターを設定します。

from turtle import*
a=1
b=1
fibonacci=[1,1]

for i in range(6):
  a = a+b
  b = b+a
  fibonacci.append(a)
  fibonacci.append(b)

def fibo_circle(iro,muki,okisa,kakudo,hane,hen):#fibo_circleという名前の関数を作る。
  for i in range(hane):#羽の数だけ繰り返す
    for j in fibonacci:#fibonacciに入っている数で繰り返す
      pencolor(iro)#ペンの色
      pensize(2)#ペンの太さ
      circle(j/okisa,kakudo*muki,hen)
    speed(0)
    penup()#ペンを上にあげる
    home()#ペンの位置をホームに戻す
    pendown()#ペンを下に下げる
    rt(360/hane*(i+1))
fibo_circle('skyblue',1,4,270,8,12) #パラメータに好きな値を入力する。この場合は、色=skyblue, muki=反時計回り,okisa=4,kakudo=270度,hane = 8,hen = 12となっている

fibo_circle(iro,muki,okisa,kakudo,hane,hen)のパラメーターの解説

iro ペンの色
muki -1 = 時計回りに動く、 1 =反時計回りに動く
okisa 小さくすると描かれる図形が大きくなります
kakudo 描く円弧の大きさ

↑kakudo による図形の違い

hane 何回、同じパターンを繰り返すか

↑hane の数による図形の違い

hen 多角形の形。henのパラメーターを入れない場合は、円形になる。その場合は、def fibo_circle(iro,muki,okisa,kakudo,hane,hen):の行から、henを削除する。

↑hen の数による図形の違い

あとは、fibo_circle()の中の各パラメータに好きな値を設定するだけで、様々な模様が描けます。

pythonする会

Python〜ev3とVSCodeで音楽作り

小学6年生と中学生を対象にlegoのマインドストームev3とPythonを使って遊ぶ会<Pythonする会>を開催しました。

第一回目は、<音楽>がテーマ!

みんなで、それぞれ、メロディを作って、それを繋げ合わせて、一つの大きな曲を作ろう、というもの。小学校でも音楽の時間にやる節づくりのアレンジです。

みんな揃ったところで、名前と学年、参加した理由を一言ずつ自己紹介。

自己紹介からスタート

Pythonが全く初めての子から、Pythonに興味があって触ってみたいと思っていたという子も。


<Python会について>
Pythonする会は、実社会の様々なサービスで使われているPythonを、子供たちと色々なアプローチで使ってみよう、と企画しています。

こんな事がプログラミングで出来るんだ!を、実際に体験する事で、じゃぁ、こんな事も実現できるのでは?というアイデアや、こんな事をやりたい!といった気持ちの芽みたいなものが、うまれてくれるといいなぁ、と。

みんなの関心も様々。得意な事をお互いに教え合ったり、興味あることに出会ったら、もっと深掘りしていく、そんな場になればいいなと思っています。

まずは3回の予定で実験的に行い、より良い形を探していこうと思っています。

<プログラミグ言語Pythonについて>

曲作りに入る前に、プログラミング言語とは、そもそも何?Pythonとは?という話から始めました。簡単にいうと、プログラミング言語は、人間もコンピューターも理解できる言葉のこと。

私たちは、普段、人に何かを伝えたり、また、表現したりといったコミュニケーションを<言葉>を使ってしますよね。その言葉は、日本語であったり、英語であってり、中国語であったり、住んでいる国や相手によって、様々な言語があり、お互いに意思疎通が成り立つ言語を使って、コミュニケーションをおこなっています。

一方、機械であるコンピューターは、情報をスイッチのON/OFFの二通りでのみ受け取ります。そのため、コンピューターが理解するには、伝えたい情報を2進法で表す必要があります。

コンピューターが2進法しか理解できないから、といって、私たちは、2進法でコンピューターとコミュニケーションは出来ません。いや、やろうと思ったら、出来ないことはないけど、、

Helloというのを2進法で伝える?

01001000 01100101 01101100 01101100 01101111

いやいや、考えるだけで、きっと気が遠くなっちゃうよね。

なので、人もコンピューターもお互いに理解できるプログラミング言語を使ってコミュニケーションしようということ。

人が使う言語もたくさんの種類があるのと同じで、プログラミング言語も様々な種類や特徴があって、Pythonはその一つ。

Pythonの特徴は、比較的、読みやすく、わかりやすい文法。

豊富なライブラリーがあり、機械学習やAIの開発がしやすい。

YoutubeやInstagramに使われているように、Webアプリケーションの開発も可能。

プログラミング言語とPythonの特徴をかなりざっくりと理解してもらったところで、テーマの音楽づくりに入っていきます。

<音楽のルールを知ろう>

今回は、最終的には、みんなのメロディを繋げて、一つの曲にしたいので、ある程度のルールを決めて、音楽づくりを行います。

決めたルールは次の三つだけ。

①レとソを使わない<ヨナ抜き短音階>で曲を作る。

この音階は、サクラサクラやなど、日本の童謡などでよく使われる音階です。曲に使う音階を統一すると、繋げた時に全体のまとまり感が出る。

②次の音を置くとき、その場に留まるか、隣の音に移動する。

ドの隣の音は、シかミになる。飛び飛びの音は使わない。

③4分の4拍子は変えない。

4分音符を8分音符二つに置き換えたり、16分音符四つに置き換えたりしてもいいけど、4分の4拍子は必ず維持!

音は、普段、親しんでいるドレミファソラシドでなく、英米式を使ってCDEFGABと表します。

<実際にプログラムを作ろう〜曲作り〜>

プログラミングの簡単な説明をして、まずは、サクラサクラの4小節分を雛形として使い、そこから、音符を置き換えていきます。

では、サンプルプログラム!

サクラサクラのはじめの4小節分です。エディターは、マイクロソフトの無料エディターVisual Studio Code (VSCode)を使用しています。

#!/usr/bin/env pybricks-micropython 
#micropythonでev3を使うための記載。
#vscodeでは自動的に記載される。
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Button, Color
from pybricks.tools import wait, StopWatch, DataLog
from pybricks.robotics import DriveBase
from pybricks.media.ev3dev import SoundFile, ImageFile

# This program requires LEGO EV3 MicroPython v2.0 or higher.
# Click "Open user guide" on the EV3 extension tab for more information.

# Create your objects here. 
# この下にオブジェクトをかく。
ev3 = EV3Brick()

#タッチセンサー1を使えるようにする。
t1_sensor = TouchSensor(Port.S1) 
#タッチセンサー2を使えるようにする。
t2_sensor = TouchSensor(Port.S2)

# Write your program here. 
# 実際のプログラムはこの下にかく。
ev3.speaker.beep()


#サクラサクラのメロディー(4小節)
tempo = 100 #テンポを100にする。
ev3.speaker.play_notes(['A4/4','A4/4','B4/2'],tempo) 
#ラ・ラ・シー 書き方は'音・オクターブ/音の長さ'
ev3.speaker.play_notes(['A4/4','A4/4','B4/2'],tempo) 
#ラ・ラ・シー
ev3.speaker.play_notes(['A4/4','B4/4','C5/4','B4/4'],tempo)
#ラ・シ・ド・シ
ev3.speaker.play_notes(['A4/4','B4/8','B4/8','F4/2'],tempo)
#ラ・シ・ラ・ファー

まず、先ほどの音楽ルール①②を意識して、C(ド)→E(ミ)など、音だけを変えてみよう。
自分で、音を五線譜に書き込んでから、コードに写していってもいいし、やり方は自由です。
出来たらダウンロードして確認してみて、自分で、心地いい音の流れを見つけよう。

そこまで、出来たら、あとは、音符の長さを変えて、リズムを変えたり、自由に作曲。

<プログラムを作ろう〜音楽再生をタッチセンサーで制御〜>
次に、ロボットのタッチセンサーを押すと、曲が始まる、というプログラムにしました。こうする事で、自分の好きなタイミングで曲を演奏する事ができます。コードは下のwhile文を、先ほど作った音楽メロディのコードの上に付け加えるだけです。

while not t1_sensor.pressed(): #タッチセンサー1を押すまで無限ループ。
    pass


一人ずつ順番に作った曲を再生してみました。あらかじめダウンロードしておいて、自分の番になったらタッチセンサーを押すと再生されます。

今回は、ヨナ抜き短音階で作ったので、なんとなく和を感じる音楽になっていないでしょうか?

和を感じるには、ev3の電子音っぽいところが気になりますが。。

<音階を変えて曲をアレンジしよう>

では、音階を変えてみるとどうなるか?と実験してみました。

独特な響きを持つ琉球音楽は、主に<ニロ抜き長音階>を使って作られている事が多いです。THE BOOMの島唄などもそうですね。ニロ抜き長音階は、レとラを抜かしたド・ミ・ファ・ソ・シ・ドになります。先ほどの<ヨナ抜き短音階>のラをソに変えると<ニロ抜き長音階>になるので、琉球音楽っぽい雰囲気になります。

先ほど作ったコードのAをGに変えてみよう!

琉球アレンジ 音楽あわせ


どことなく琉球音楽っぽいメロディが。ただ、これもやっぱり、ev3の電子音が気になりますが。。

<まとめ>

今回は、ごく簡単なプログラムで、色々遊びました。音楽への関心度は様々だったと思いますが、楽器をやっている子も、特に音楽の知識がない子も、みんな集中して曲作りに取り組んでいました。
EV3が導入されている中学校も多いと思うので、音楽の時間にプログラミングを絡めたこんな授業があっても楽しそうです。

次回は、フィボナッチ数列を使って、綺麗な幾何学模様を作っていく予定です。

おしまい

体験会のお知らせ

現在、ロボット・プログラミングは通常授業で体験して頂けます。
小学1・2年生のお子様 → 水曜日 15:45〜17:15
小学3・4年生のお子様 → 水曜日 16:30〜18:00

高学年のお子様はご相談ください。

ロボット作りから、パソコンでプログラムを作り、ロボットを動かすところまで一通り学んで頂きます。

体験参加費:無料

お申し込み・お問い合わせはホームページのお問い合わせからお願いいたします。

こちらからのメールがご確認出来ない場合は、迷惑フォルダに振り分けられている可能性がありますので、ご注意ください。

お問い合わせフォームはこちら↓

tp://robo.lecente.jp/contact

ロボ団泉大津教室 2020年度開講クラスのご案内

2020年秋に開講するクラスのご案内です。

《9月からの新規開講コースのご案内》
BASICクラス
<対象>
小学3年生以上
<日時>
水曜日 16時半〜18時(月3回)
<月謝>
10,050円(税抜き)
<システム使用料>
1,500円(税抜き)

《10月からの新規開講コースのご案内》

STARTERクラス
<対象>
小学1年生以上
<日時>
水曜日 15時45分〜17時15分(月3回)
<月謝>
10,050円(税抜き)
<システム使用料>
1,500円(税抜き)

どちらのクラスも少人数の募集です。他にも、途中から入会可能なクラスがございますので、
お気軽にお問い合わせください。

ロボ団泉大津教室つうしん 9月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、9月号が出来ました。
クラスの様子や授業の内容をのせています。

泉大津教室つうしん 9月号

現在、泉大津教室では、10月より新規開講のベーシッククラスの体験を受付中!

クラスのスケジュール表をアップしました。

2019年10月~3月までのレッスンスケジュールです。
↓詳細はこちらのスケジュール表でご確認ください。
スケジュール表2019後半

水曜日 16:30~18:00 starter 小学1〜3年(途中入会可能)
金曜日 16:30~18:00 Basic
土曜日 9:30〜12:30 Advance
土曜日 14:00〜17:00 pro
土曜日 14:00〜17:00 Basic 10月より新規開講(体験・入会受付中)

講師サポートスタッフ募集中です。

ロボ団泉大津教室では、現在、講師サポートスタッフを募集中です。
授業前後の準備のお手伝いや、授業に入って頂き、子ども達のロボット作りを手伝ったり、子ども達の疑問に寄り添って、一緒に楽しく学べる授業作りをサポートして頂きます。授業で必要なプログラミングの知識は授業に入りながら徐々に学んで頂きますので、始めるにあたって必要ありません。

求める人材

・プログラミングの経験、資格、知識は問いません!
・子どもが好きな方!
・子どもの教育に興味がある方!
・主婦、大学生、専門学生、Wワーク歓迎!年齢不問

時給
1,000円〜
交通費全額支給(上限あり)/お子様の授業料割引制度あり

勤務時間帯(レッスン時間帯)
水 16:00~18:30
金 16:00~18:30
土 9:00〜13:00/13:00〜18:00

以上の中で毎月、予定に合わせて調整可能です。
月数回、週1程度でもOKです。まずはお気軽にお問い合わせください。

プログラミングを通じて子ども達の探究心や好奇心を刺激し、子ども達がこれからの時代に必要な力を身につける事をサポートしながら、子ども達の成長を一緒に喜び、楽しみ、自分自身の学びにも繋がるお仕事です。

ロボ団泉大津教室つうしん 6月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、6月号、アップしました。

クラスの様子や授業の内容をのせています。

泉大津教室つうしん 2019.6月号

 

ロボ団泉大津教室つうしん 5月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、5月号、アップしました。

クラスの様子や授業の内容をのせています。

泉大津教室つうしん 2019.5月号

 

 

ロボ団泉大津教室つうしん 3月号アップしました。

教室の生徒さんに配布している泉大津教室のつうしん、3月号が出来ました。

クラスの様子や授業の内容をのせています。

泉大津教室つうしん 2019.3月号