ラズパイ4で究極のデジタルタイマー(チューリップ)
概要
目的: キッチンや作業スペースで使えるデジタルタイマー。
機能: タイマー設定、カウントダウン表示、アラーム通知。
アイデアの詳細
ラズパイ4を使ってLCDにタイマーを表示して、タイマーが0になるとブザーで音(チューリップ)が鳴るようにしました!
ポンチ絵
必要なもの
必要なハードウェア
Raspberry Pi 4:
本体(電源供給も必要)
LCDディスプレイ:
ST7032互換のLCDモジュール(接続方法に応じて配線が必要)
ブザー:
パッシブまたはアクティブブザー(PWM制御のために必要)
LED:
赤、黄、緑のLED(それぞれに抵抗を接続)
抵抗:
LED用の抵抗(一般的には220Ωまたは330Ω)
ジャンパーワイヤ:
各コンポーネントをRaspberry Piに接続するためのワイヤ
ブレッドボード(オプション):
組み立てを行いやすくするためのボード
SDカード:
Raspberry Pi OSをインストールするためのカード(推奨サイズは16GB以上)
電源アダプタ:
Raspberry Pi 4用の公式電源アダプタ
必要なソフトウェア
Raspberry Pi OS:
最新のRaspberry Pi OSをSDカードにインストールする。
Python:
デフォルトでインストールされていますが、最新バージョンを確認しておく。
必要なライブラリ:
RPi.GPIO(GPIO制御用)
lcd_st7032(LCD制御用)
これらのライブラリをインストールするために、ターミナルで以下のコマンドを実行します:
sudo apt update
sudo apt install python3-rpi.gpio
pip install lcd_st7032 # 必要に応じて
LCDの配線:
SDA、SCL、VCC、GNDなどをRaspberry Piの対応するGPIOピンに接続します。具体的な接続は使用するLCDの仕様によります。
ブザーの配線:
ブザーを指定したGPIOピン(例: ピン23)に接続し、GNDにも接続します。
LEDの配線:
各LEDを指定したGPIOピン(例: ピン17, 27, 22)に接続し、それぞれに抵抗を介してGNDに接続します。
コードの実行
コードの準備:
上記のPythonコードをテキストエディタで作成し、ファイル名を例えば timer.py として保存します。
コードの実行:
ターミナルで以下のコマンドを実行して、コードを実行します。
python3 timer.py
その他の設定
GPIOの権限:
GPIOにアクセスするためには、スーパーユーザー権限が必要な場合があります。これには sudo コマンドを使用します。
テスト:
各コンポーネントが正常に動作するか確認するために、個別にテストすることをお勧めします。たとえば、LEDが正しく点灯するか、ブザーが音を鳴らすか確認します。
ソースコード
import RPi.GPIO as GPIO
import lcd_st7032
from datetime import datetime
import time
import sys
# LCDのバックライトの出力設定
bkled = 26
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(bkled, GPIO.OUT)
# 出力ピン番号をBCMで指定する (ブザーとLED)
pwmpin = 23 # ブザー
LED1 = 17 # 赤のLED
LED2 = 27 # 黄のLED
LED3 = 22 # 緑のLED
# 音階の周波数指定(チューリップ用)
C4 = 261
D4 = 293
E4 = 329
F4 = 349
G4 = 392
A4 = 440
# GPIO出力設定
GPIO.setup(pwmpin, GPIO.OUT)
GPIO.setup(LED1, GPIO.OUT)
GPIO.setup(LED2, GPIO.OUT)
GPIO.setup(LED3, GPIO.OUT)
pin23 = GPIO.PWM(pwmpin, 10)
# チューリップのフルメロディ
def tulip_full_melody():
melody = [
(C4, 0.4), (D4, 0.4), (E4, 0.4), (C4, 0.4), # 「さいた さいた」
(E4, 0.4), (F4, 0.4), (G4, 0.8), # 「チューリップの」
(E4, 0.4), (F4, 0.4), (G4, 0.4), (E4, 0.4), # 「花が」
(C4, 0.4), (D4, 0.4), (E4, 0.8), # 「ならんだ」
(G4, 0.4), (A4, 0.4), (G4, 0.4), (F4, 0.4), # 「ならんだ ならんだ」
(E4, 0.4), (F4, 0.4), (E4, 0.4), (D4, 0.4), # 「あか しろ きいろ」
(C4, 0.4), (D4, 0.4), (E4, 0.4), (F4, 0.4), # 「どのはな みても」
(E4, 0.8), (C4, 0.8), # 「きれいだな」
]
for note, duration in melody:
pin23.ChangeFrequency(note)
GPIO.output(LED1, True)
GPIO.output(LED2, True)
GPIO.output(LED3, True)
pin23.start(50)
time.sleep(duration)
pin23.stop()
GPIO.output(LED1, False)
GPIO.output(LED2, False)
GPIO.output(LED3, False)
time.sleep(0.1) # 音の切れ目
def LEDcheck():
GPIO.output(LED1, True)
GPIO.output(LED2, True)
GPIO.output(LED3, True)
time.sleep(1)
GPIO.output(LED1, False)
GPIO.output(LED2, False)
GPIO.output(LED3, False)
# タイマー終了時の動作
def end_of_timer():
print("Timer End! Playing tulip melody and flashing all LEDs.")
# チューリップメロディとLED点滅を実行
tulip_full_melody()
def start_timer(duration):
try:
lcd = lcd_st7032.ST7032()
for remaining in range(duration, -1, -1):
# LCDのバックライトをONにしてタイマーを表示
GPIO.output(bkled, True)
mins, secs = divmod(remaining, 60)
timer_format = '{:02d}:{:02d}'.format(mins, secs)
# 時間をLCDに表示
lcd.setCursor(0, 0)
lcd.write("Timer")
lcd.setCursor(1, 0)
lcd.write(timer_format)
time.sleep(1)
lcd.clear()
# タイマー終了時にチューリップメロディとLED点滅を動作させる
lcd.setCursor(0, 0)
lcd.write("Time's up!")
GPIO.output(bkled, False)
end_of_timer()
time.sleep(5) # 5秒間「Time's up!」を表示
lcd.clear()
except KeyboardInterrupt:
# プログラム中断時にLCDをクリアし、メッセージを表示
lcd.clear()
lcd.write("Stopped!")
GPIO.output(bkled, False)
if __name__ == "__main__":
# タイマー時間を秒単位で設定(例: 1分は60秒)
duration = 60 # 1分
start_timer(duration)
GPIO.cleanup()
動作結果
https://youtube.com/shorts/0bXWMEOAF3A?si=xdtWze0Vy0DHVvE3
参考文献
https://deviceplus.jp/raspberrypi/raspberrypi_entry_019/
この作品の面白いところ
誰でも簡単に作れること。音階の周波数を変えると色んな音に変えれるところ。
-
100000_get
さんが
2024/09/20
に
編集
をしました。
(メッセージ: 初版)
-
100000_get
さんが
2024/09/20
に
編集
をしました。
-
100000_get
さんが
2024/10/30
に
編集
をしました。
-
100000_get
さんが
2024/10/30
に
編集
をしました。
-
100000_get
さんが
2024/10/30
に
編集
をしました。
-
100000_get
さんが
2024/10/30
に
編集
をしました。
ログインしてコメントを投稿する