注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!
4.1.15 アラームベル¶
はじめに¶
このプロジェクトでは、手動のアラームデバイスを作成します。サーモリスターや光敏感センサーをトグルスイッチと置き換えて、温度アラームや光アラームを作成することができます。
必要な部品¶
このプロジェクトで必要なコンポーネントは以下の通りです。
全てのキットを購入することは確かに便利です。リンクはこちらです:
名前 |
このキットのアイテム |
リンク |
---|---|---|
Raphael Kit |
337 |
以下のリンクから個別に購入することもできます。
コンポーネント紹介 |
購入リンク |
---|---|
回路図¶
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 |
実験の手順¶
ステップ1: 回路を組み立てる。
ステップ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()
関数で:
“flag=1”としてマークを定義し、制御スレッドの終了を示します。
Buzzを開始し、デューティサイクルを50%に設定します。
LED とブザーが同時に動作できるように、 2 別々のスレッドを作成します。
threading.Thread()
関数はスレッドを作成するために使用され、そのプロトタイプは以下の通りです:
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
構築メソッドの中で、主要なパラメータは target
です。
我々は、呼び出し可能なオブジェクト(ここでは関数 ledWork
と BuzzWork
)を 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” を定義して、スレッド ledWork と BuzzWork を終了し、ブザーと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は動作しません。