編集履歴一覧に戻る
100000_getのアイコン画像

100000_get が 2024年09月20日15時49分39秒 に編集

コメント無し

本文の変更

**概要** 目的: キッチンや作業スペースで使えるデジタルタイマー。 機能: タイマー設定、カウントダウン表示、アラーム通知。 **アイデアの詳細**

-

ラズパイ4を使ってLCDにタイマーを表示して、タイマーが0になるとブザーで音が鳴るようにしました!

+

ラズパイ4を使ってLCDにタイマーを表示して、タイマーが0になるとブザーで音(チューリップ)が鳴るようにしました!

**ポンチ絵** ![キャプションを入力できます](https://camo.elchika.com/d5d5bbd097636f1d027bfa7c4cbc817f78568a2f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33623336623031302d616530352d346434352d616431632d3132366233616537656636332f37633632623463622d316162622d343431342d396563652d373137613361316162653235/) **必要なもの** 必要なハードウェア 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://deviceplus.jp/raspberrypi/raspberrypi_entry_019/