100000_getのアイコン画像
100000_get 2024年09月20日作成 (2024年10月30日更新)
製作品 製作品 閲覧数 51
100000_get 2024年09月20日作成 (2024年10月30日更新) 製作品 製作品 閲覧数 51

ラズパイ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/

この作品の面白いところ

誰でも簡単に作れること。音階の周波数を変えると色んな音に変えれるところ。

ログインしてコメントを投稿する