注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

4.1.15 アラームベル

はじめに

このプロジェクトでは、手動のアラームデバイスを作成します。サーモリスターや光敏感センサーをトグルスイッチと置き換えて、温度アラームや光アラームを作成することができます。

必要な部品

このプロジェクトで必要なコンポーネントは以下の通りです。

../_images/list_Alarm_Bell.png

全てのキットを購入することは確かに便利です。リンクはこちらです:

名前

このキットのアイテム

リンク

Raphael Kit

337

Raphael Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

GPIO拡張ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

ブザー

BUY

スライドスイッチ

BUY

トランジスタ

BUY

コンデンサ

BUY

回路図

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

GPIO27

Pin 13

2

27

GPIO22

Pin 15

3

22

../_images/Schematic_three_one10.png

実験の手順

ステップ1: 回路を組み立てる。

../_images/image266.png

ステップ2: ディレクトリを変更する。

cd ~/raphael-kit/python/

ステップ3: 実行する。

sudo python3 4.1.15_AlarmBell.py

プログラムが開始された後、トグルスイッチは右に切り替えられ、ブザーはアラーム音を出します。同時に、赤と緑のLEDは特定の周波数で点滅します。

コード

注釈

以下のコードを 変更/リセット/コピー/実行/停止 することができます。しかし、その前に、 raphael-kit/python のようなソースコードのパスに移動する必要があります。

#!/usr/bin/env python3

import RPi.GPIO as GPIO
import time
import threading

BeepPin=22
ALedPin=17
BLedPin=27
switchPin=18

Buzz=0
flag =0
note=150
pitch=20

def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(BeepPin, GPIO.OUT)
    GPIO.setup(ALedPin,GPIO.OUT,initial=GPIO.LOW)
    GPIO.setup(BLedPin,GPIO.OUT,initial=GPIO.LOW)
    GPIO.setup(switchPin,GPIO.IN)
    global Buzz
    Buzz=GPIO.PWM(BeepPin,note)

def ledWork():
    while flag:
        GPIO.output(ALedPin,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(ALedPin,GPIO.LOW)
        GPIO.output(BLedPin,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(BLedPin,GPIO.LOW)

def buzzerWork():
    global pitch
    global note
    while flag:
        if note >= 800 or note <=130:
            pitch = -pitch
        note = note + pitch
        Buzz.ChangeFrequency(note)
        time.sleep(0.01)

def on():
    global flag
    flag = 1
    Buzz.start(50)
    tBuzz = threading.Thread(target=buzzerWork)
    tBuzz.start()
    tLed = threading.Thread(target=ledWork)
    tLed.start()

def off():
    global flag
    flag = 0
    Buzz.stop()
    GPIO.output(ALedPin,GPIO.LOW)
    GPIO.output(BLedPin,GPIO.LOW)

def main():
    lastState=0
    while True:
        currentState =GPIO.input(switchPin)
        if currentState == 1 and lastState == 0:
            on()
        elif currentState == 0 and lastState == 1:
            off()
        lastState=currentState

def destroy():
    off()
    GPIO.cleanup()

if __name__ == '__main__':
    setup()
    try:
        main()
    except KeyboardInterrupt:
        destroy()

コード説明

import threading

ここで、 Threading モジュールをインポートします。通常のプログラムは上から下へとコードを順次実行しますが、このモジュールを利用することで、同時に複数の作業を行うことができます。 Threading モジュールのおかげで、LEDとブザーは別々に動作することができます。

def ledWork():
    while flag:
        GPIO.output(ALedPin,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(ALedPin,GPIO.LOW)
        GPIO.output(BLedPin,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(BLedPin,GPIO.LOW)

ledWork() 関数は、これら2つのLEDの動作状態を設定するためのものです。 緑のLEDを0.5秒間点灯させてから消灯し、同様に赤のLEDを0.5秒間点灯させてから消灯します。

def buzzerWork():
    global pitch
    global note
    while flag:
        if note >= 800 or note <=130:
            pitch = -pitch
        note = note + pitch
        Buzz.ChangeFrequency(note)
        time.sleep(0.01)

buzzWork() 関数はブザーの動作状態を設定するためのものです。 ここでは、周波数を130と800の間に設定し、20の間隔で増減させます。

def on():
    global flag
    flag = 1
    Buzz.start(50)
    tBuzz = threading.Thread(target=buzzerWork)
    tBuzz.start()
    tLed = threading.Thread(target=ledWork)
    tLed.start()

on() 関数で:

  1. “flag=1”としてマークを定義し、制御スレッドの終了を示します。

  2. Buzzを開始し、デューティサイクルを50%に設定します。

  3. LED とブザーが同時に動作できるように、 2 別々のスレッドを作成します。

threading.Thread() 関数はスレッドを作成するために使用され、そのプロトタイプは以下の通りです:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

構築メソッドの中で、主要なパラメータは target です。 我々は、呼び出し可能なオブジェクト(ここでは関数 ledWorkBuzzWork)を target に割り当てる必要があります。

次に、 start() が呼び出されてスレッドオブジェクトを開始します。例えば、 tBuzz.start() は新しくインストールされた tBuzz スレッドを開始するために使用されます。

def off():
    global flag
    flag = 0
    Buzz.stop()
    GPIO.output(ALedPin,GPIO.LOW)
    GPIO.output(BLedPin,GPIO.LOW)

Off() 関数は “flag=0” を定義して、スレッド ledWorkBuzzWork を終了し、ブザーとLEDをオフにします。

def main():
    lastState=0
    while True:
        currentState =GPIO.input(switchPin)
        if currentState == 1 and lastState == 0:
            on()
        elif currentState == 0 and lastState == 1:
            off()
        lastState=currentState

Main() はプログラムの全体的なプロセスを含んでいます: まずスライドスイッチの値を読み取ります。トグルスイッチが右に切り替えられた場合(読み取りが1の場合)、 on() 関数が呼び出され、ブザーが鳴り、赤と緑のLEDが点滅します。それ以外の場合、ブザーとLEDは動作しません。

現象の画像

../_images/image267.jpeg