ららぽてすらブログ

ららぽてすら

夏休みの自由研究課題 小学校・中学校・高校別の難易度で作ってみた🏝️

こんにちは〜ららぽてすらです♪

夏休みの自由研究課題が終わらないそんなあなたに朗報です!参考例作ってみました。

考察だけは自分で作ってね!

 

小学校: 「色の変わるランプ」

題材: LEDランプを使って、温度や明るさに応じて色が変わるランプを作る。

必要な材料:

  • Raspberry Pi
  • LEDランプ
  • 温度センサーや光センサー

ソースコード:

 

import RPi.GPIO as GPIO

import time

 

GPIO.setmode(GPIO.BCM)

RED_PIN = 18

BLUE_PIN = 23

 

GPIO.setup(RED_PIN, GPIO.OUT)

GPIO.setup(BLUE_PIN, GPIO.OUT)

 

try:

    while True:

        # ここにセンサーからのデータを読み取るコードを書く

        # : 温度が高い時は赤く、暗い時は青くする

        if 温度が高い:

            GPIO.output(RED_PIN, True)

            GPIO.output(BLUE_PIN, False)

        elif 明るさが低い:

            GPIO.output(RED_PIN, False)

            GPIO.output(BLUE_PIN, True)

        time.sleep(1)

 

except KeyboardInterrupt:

    GPIO.cleanup()

考察:

  • どの温度や明るさで色が変わるか?
  • 他のセンサーを追加してどんな機能を追加できるか?

 

中学校: 「シンプルな天気予報アプリ」

題材: OpenWeatherMapAPIを使用して、指定した都市の天気を表示するアプリ。

ソースコード:

 

import requests

 

API_KEY = 'YOUR_API_KEY'

BASE_URL = 'http://api.openweathermap.org/data/2.5/weather?'

 

city_name = input("都市名を入力してください: ")

 

url = BASE_URL + "q=" + city_name + "&appid=" + API_KEY

 

response = requests.get(url)

data = response.json()

 

if data["cod"] != 404:

    main = data["main"]

    temperature = main["temp"]

    weather = data["weather"][0]["description"]

    

    print(f"{city_name}の天気: {weather}")

    print(f"気温: {temperature - 273.15}°C")

else:

    print("都市名が見つかりませんでした。")

 

考察:

  • APIから取得したデータをどのように活用できるか?
  • GUIを追加して、より使いやすくできるか?

 

高校: 「顔認識を用いたドアのオートロックシステム」

題材: OpenCVを使用して、カメラで顔を認識し、登録された顔が検出されたらドアを自動で開けるシステム。

ソースコード:

(このコードは簡易的なものです。実際にドアを制御するには追加のコードやハードウェアが必要です。)

 

import cv2

 

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

 

cap = cv2.VideoCapture(0)

 

while True:

    ret, img = cap.read()

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    

    for (x,y,w,h) in faces:

        cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2)

        # ここでドアを開ける命令を書く

 

    cv2.imshow('img', img)

    k = cv2.waitKey(30) & 0xff

    if k == 27:

        break

 

cap.release()

cv2.destroyAllWindows()

必要な材料:

接続:

サーボモータの各ピンをRaspberry Piに接続します。

  • サーボの黒または茶色のワイヤー(GND)をPiGNDに接続。
  • サーボの赤色のワイヤー(電源)をPi5Vピンに接続。
  • サーボの黄色または白色のワイヤー(信号)をPiGPIO18に接続。

ソースコード:

まず、GPIOservoモータの制御のためのライブラリを追加します。

import cv2

import RPi.GPIO as GPIO

 

GPIO.setmode(GPIO.BCM)

SERVO_PIN = 18

GPIO.setup(SERVO_PIN, GPIO.OUT)

 

pwm = GPIO.PWM(SERVO_PIN, 50)  # 50Hzの周波数でPWMを開始

pwm.start(0)  # サーボを初期位置に設定

 

def unlock_door():

    pwm.ChangeDutyCycle(7.5)  # サーボを90度に回転させる

    time.sleep(1)

    pwm.ChangeDutyCycle(0)  # パルス停止

 

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

cap = cv2.VideoCapture(0)

 

while True:

    ret, img = cap.read()

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    

    for (x,y,w,h) in faces:

        cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2)

        unlock_door()  # 顔を認識したらドアを解錠

 

    cv2.imshow('img', img)

    k = cv2.waitKey(30) & 0xff

    if k == 27:

        break

 

cap.release()

cv2.destroyAllWindows()

pwm.stop()

GPIO.cleanup()

考察:

  • 顔認識の精度はどれくらいか?
  • セキュリティ上の問題はないか?
  • 他の認識方法(: 指紋認識)と組み合わせることはできるか?

その買うを、もっとハッピーに。|ハピタス