ふくふくHukuhuku Inc.
EP.06Kids Python対象: 全学年 14分公開: 2026-05-10

夏休みの自由研究で先生をびっくりさせよう

これまで学んだことを組み合わせて、振り子・桜の開花予測・電池の実験など、自由研究にできるテーマを6つ提案。

#小学生#自由研究#応用
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

EP1〜EP5までで覚えたことを、夏休みの自由研究にしてみよう。先生もまだ見たことがないようなプログラムが、自分で作れるよ。今回は6つのテーマを提案します。

テーマ1:振り子の周期を測ろう(理科)

振り子の周期(1往復の時間)は、ひもの長さだけで決まる、と学校で習う。本当かな?プログラムでシミュレートして、長さを変えながら周期を測ってみよう。

振り子のシミュレーション
Python
import mathimport matplotlib.pyplot as plt
# 振り子のシミュレーションdef simulate_pendulum(length, dt=0.01, total_time=10):    g = 9.8                        # 重力加速度    angle = math.radians(20)       # 最初の角度(20度)    angular_velocity = 0           # 最初の速さ    times = []    angles = []    t = 0    while t < total_time:        # 物理計算(振り子の運動方程式)        angular_acceleration = -g / length * math.sin(angle)        angular_velocity += angular_acceleration * dt        angle += angular_velocity * dt        times.append(t)        angles.append(math.degrees(angle))        t += dt    return times, angles
# 長さを変えて比較for length in [0.25, 1.0, 2.25]:  # 25cm, 1m, 2.25m    t, a = simulate_pendulum(length)    plt.plot(t, a, label=f"{length}m")
plt.xlabel("時間 (秒)")plt.ylabel("角度 (度)")plt.legend()plt.title("振り子の長さで周期が変わる")plt.show()
発見してほしいこと

1m の振り子の周期は約2秒。25cm(1/4倍)にすると約1秒(半分)。長さが4倍になると周期は2倍に。これが「振り子の周期は√(長さ)に比例」という法則です。

テーマ2:桜の開花日を予測しよう(理科+データ)

桜は「春になって暖かくなり、合計の気温が一定値(東京なら 600°C)を超えると咲く」という性質がある。気象庁のデータで実際に予測してみよう。

桜の開花予測(簡略版)
Python
import requests
# 過去の気温データを使って、累積温度から開花日を予測# (実際は2月1日からの平均気温を足していき、600°Cを超えた日が開花日)
# サンプルデータdaily_temps = [5, 6, 7, 5, 8, 10, 12, 11, 9, 13, 15, 14, 16, 18, 17, 16, 19]
cumulative = 0for day, temp in enumerate(daily_temps, start=1):    cumulative += temp    print(f"2/{day}日目: 平均気温 {temp}°C, 累積 {cumulative}°C")    if cumulative >= 100:  # 簡略化        print(f"→ 開花予測! ({day}日目)")        break

テーマ3:自分の声を見える化(理科)

「あ」「い」「う」と声を出すと、波の形が違うよ。マイクで録音した声を、Pythonで描いてみよう。

Colab でマイク録音→波形
Python
# Colab でマイク録音できる準備!pip install -q sounddeviceimport sounddevice as sdimport numpy as npimport matplotlib.pyplot as plt
print("3秒、声を出してね!")duration = 3recording = sd.rec(int(duration * 44100), samplerate=44100, channels=1)sd.wait()print("録音終了!")
plt.figure(figsize=(10, 3))plt.plot(recording)plt.title("きみの声")plt.show()
Colab のマイクについて

はクラウド上で動くので、自分のマイクを使うには少し準備が必要。実際は js を使った録音 widget が必要になります。代わりに「フリー音源 .wav」をダウンロードして波形を描く方法でもOK。

テーマ4:星の動きを再現(理科)

北極星を中心に星が回る
Python
import matplotlib.pyplot as pltimport numpy as np
# 北極星の周りを回る星たちangles = np.linspace(0, 2 * np.pi, 12)  # 12時間分fig, ax = plt.subplots(figsize=(6, 6))for r in [1, 2, 3]:        # 距離が違う星    x = r * np.cos(angles)    y = r * np.sin(angles)    ax.plot(x, y, marker="*", markersize=15)ax.plot(0, 0, marker="*", markersize=20, color="gold", label="北極星")ax.set_aspect("equal")ax.legend()plt.title("星が北極星の周りを回る")plt.show()

テーマ5:好きな町ランキング(社会)

総務省のe-Stat APIで、都道府県の人口・面積・産業データを取って、自分なりの「住みたい町ランキング」を作ろう。

テーマ6:自分だけのクイズアプリ(応用)

Colab で動くクイズアプリ
Python
quizzes = [    {"q": "日本一高い山は?", "a": "富士山"},    {"q": "1+1は?", "a": "2"},    {"q": "光の3原色のうち、青と赤と何色?", "a": "緑"},]
correct = 0for i, quiz in enumerate(quizzes, 1):    answer = input(f"問題{i}: {quiz['q']} ")    if answer == quiz["a"]:        print("⭕ 正解!")        correct += 1    else:        print(f"❌ ざんねん。答えは {quiz['a']} でした")
print(f"\n{correct}/{len(quizzes)} 正解!")

発表のしかた

  1. 1Colab の 「共有」 ボタンで、リンクをクラスのみんなに送る
  2. 2スクリーンショットを撮って、紙の自由研究と一緒に提出
  3. 3実物(振り子・桜の写真) とプログラムを並べて、「両方やった」と伝えると先生に響く
  4. 4「Pythonで動かしてみたら〇〇が分かった」 という体験をまとめると、研究としての完成度が高い

次回予告

次回(EP.07)からは、もっと面白いことに挑戦するよ。第7回は「自分だけのチャットbot」を作ります。話しかけたら答えてくれる、簡単なロボットbotを5分で。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp