こんにちは〜ららぽてすらです♪
夏休みの自由研究課題が終わらないそんなあなたに朗報です!参考例作ってみました。
考察だけは自分で作ってね!
小学校: 「色の変わるランプ」
題材: 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()
考察:
- どの温度や明るさで色が変わるか?
- 他のセンサーを追加してどんな機能を追加できるか?
中学校: 「シンプルな天気予報アプリ」
題材: OpenWeatherMapのAPIを使用して、指定した都市の天気を表示するアプリ。
import requests
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("都市名が見つかりませんでした。")
考察:
高校: 「顔認識を用いたドアのオートロックシステム」
題材: 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
- サーボモータ
- Pi Camera
接続:
サーボモータの各ピンをRaspberry Piに接続します。
- サーボの黒または茶色のワイヤー(GND)をPiのGNDに接続。
- サーボの赤色のワイヤー(電源)をPiの5Vピンに接続。
- サーボの黄色または白色のワイヤー(信号)をPiのGPIO18に接続。
まず、GPIOとservoモータの制御のためのライブラリを追加します。
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()
考察:
- 顔認識の精度はどれくらいか?
- セキュリティ上の問題はないか?
- 他の認識方法(例: 指紋認識)と組み合わせることはできるか?