検索
学習キットや必要パーツの開発・拡充のリクエスト募集
会員ログイン
ID :    login
PASS :   
新規会員登録はこちら
 
パスワードを忘れた方はこちら
お問い合わせ
メール
最近チェックした商品
 
 

 

 4.Raspberry Pi B+でフィジカルコンピューティング(デジタル/PWM)



これから、デジタルのPWMを使います。PWMで圧電スピーカを動かして、ブザー音、ドレミファ等の音を出すことができます。
また、PWMでRCサーボモータを動かして、回る角度をコントロールすることもできます。
今回は、行いませんがPWMとHブリッジ回路を組み合わせてDCモータの回転スピード、回転方向等をコントロールすることも出来ます。
 

 

 4.1 PWMでブザーを鳴らそう


PWMを使って圧電スピーカでをブザー音を出します。
PWMは周波数を変えることが出来ますので、ドレミ等の音を出すことも出来ます。

(1) ブザーの回路を作ろう

〜販

下の配線図、回路図をみて、回路を組立て下さい。

 


(2) ブザーを鳴らそう

‥展擦鯑れます。

RaspberryPiB+にACアダプタを繋ぎ、電源を入れます。

▲蹈哀ぅ鵑靴泙后

Raspbianが立ち上がったら、ログインして下さい。

「nano」エディター立ち上げます。

「nano rpi_bp_pwm_bz1_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

サンプルプログラム1
 
 #! /usr/bin/env python

 import RPi.GPIO as GPIO
 import time

 GPIO.setmode(GPIO.BCM) # use GPIO Number

 BZ1 = 13 # BZ1 --> GPIO13
 GPIO.setup(BZ1, GPIO.OUT) # set GPIO13 output

 buzzer = GPIO.PWM(BZ1, 1000) # set BZ1 1000 Hz

 buzzer.start(50) # start BZ1 duty 50%
 print(" buzzer 1000 Hz ,duty 50 %")
 time.sleep(5)

 buzzer.ChangeFrequency(500) # change frequency 500 Hz
 print(" change 500 Hz ")
 time.sleep(5)

 buzzer.ChangeDutyCycle(10) # change duty cycle 10 %
 print(" duty 10 % ")
 time.sleep(5)

 buzzer.stop() # stop buzzer
 GPIO.cleanup()



て力を終わります。

「ctrl+X」を実行します。
次に、「y/n」は「enter」を入れます。

テ力したプログラムを実行します。

「sudo python rpi_bp_pwm_bz1_1.py」を実行します。

*ブザーが最初は1KHzでなります。約3秒後に500Hzに変わります。
最後にデューティが10%になり音色が変わります。
その後に、「bz1b done」のメッセージが出ます。





(2) 部品を作ろう

ブザーの初期化、開始、停止、周波数変更、デューティ変更を部品(関数)にします。

 nano」エディター立ち上げます。

「nano rpi_bp_pwm_bz1a_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

▲廛蹈哀薀爐鯑れます

サンプルプログラム2
 
 #! /usr/bin/env python

 import RPi.GPIO as GPIO
 import time

 def tone_init(bz):
 GPIO.setup(bz, GPIO.OUT) # set GPIO bz output
 buzzer = GPIO.PWM(bz, 1000) # set bz 1000 Hz
 return buzzer

 if __name__ == ("__main__") :

 #start
 GPIO.setmode(GPIO.BCM) # use GPIO Number

 BZ1 = 13 # BZ1 --> GPIO13
 tone1=tone_init(BZ1)

 tone1.start(50)
 print(" buzzer 1000 Hz ,duty 50 %")
 time.sleep(5)

 tone1.ChangeFrequency(500) # change frequency 500 Hz
 print(" change 500 Hz ")
 time.sleep(5)

 tone1.ChangeDutyCycle(10) # change duty cycle 10 %
 print(" duty 10 % ")
 time.sleep(5)

 tone1.stop() # stop tone
 GPIO.cleanup()
 

入力を終わります。

「ctrl+X」を実行します。

次に、「y/n」は「enter」を入れます。

て力したプログラムを実行します。

「sudo python rpi_bp_pwm_bz1a_1.py」を実行します。

*ブザーが最初は1KHzでなります。
約3秒後に500Hzに変わります。
最後にデューティが10%になり音色が変わります。
その後に、「bz1a done」のメッセージが出ます。





(3) モジュールを使おう

(2)で作った部品(関数)の入ったファイルをモジュールとして使います。

 nano」エディター立ち上げます。

「nano rpi_bp_pwm_bz1b_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

▲廛蹈哀薀爐鯑れます

サンプルプログラム3
 
 #! /usr/bin/env python

 import RPi.GPIO as GPIO
 import time

 from rpi_bp_pwm_bz1a_1 import *

 if __name__ == ("__main__") :

 #start
 GPIO.setmode(GPIO.BCM) # use GPIO Number

 BZ1 = 13 # BZ1 --> GPIO13
 tone1=tone_init(BZ1)

 tone1.start(50)
 print(" buzzer 1000 Hz ,duty 50 %")
 time.sleep(5)

 tone1.ChangeFrequency(500) # change frequency 500 Hz
 print(" change 500 Hz ")
 time.sleep(5)

 tone1.ChangeDutyCycle(10) # change duty cycle 10 %
 print(" duty 10 % ")
 time.sleep(5)

 tone1.stop() # stop tone
 GPIO.cleanup()
 


F力を終わります。

「ctrl+X」を実行します。
次に、「y/n」は「enter」を入れます。

て力したプログラムを実行します。

「sudo python rpi_bp_pwm_bz1b_1.py」を実行します。
*ブザーが最初は1KHzでなります。
約3秒後に500Hzに変わります。
最後にデューティが10%になり音色が変わります。
その後に、「bz1b done」のメッセージが出ます。




(4) ドレミをならそう

ドレミファの周波数をリストを使って作ります。
*Pythonの新しい命令を使います。
*リスト
*書き方
変数名=[要素0、要素1、…、]
使用例:
doremi = [220.0, 246.9, 277.2, 293.7, 329.6 ,370.0, 415.3, 440.0]
*変数名に使える文字は「アルファベット」、「数字」、「_」の3種類の半角文字になります。
また、最初の文字はは「アルファベット」、のみです。

 nano」エディター立ち上げます。

「nano rpi_bp_pwm_bz1c_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

▲廛蹈哀薀爐鯑れます

サンプルプログラム4
 
 #! /usr/bin/env python

 import RPi.GPIO as GPIO
 import time

 from rpi_bp_pwm_bz1a_1 import *

 if __name__ == ("__main__") :

 #start

 doremi = [220.0, 246.9, 277.2, 293.7, 329.6, 370.0, 415.3, 440.0]

 GPIO.setmode(GPIO.BCM) # use GPIO Number

 BZ1 = 13 # BZ1 --> GPIO13
 tone1=tone_init(BZ1)

 tone1.start(50)

 for freq in doremi:
 print(freq)
 tone1.ChangeFrequency(freq)
 time.sleep(1)

 tone1.stop() # stop tone
 GPIO.cleanup()
 


入力を終わります。

「ctrl+X」を実行します。
次に、「y/n」は「enter」を入れます。

て力したプログラムを実行します。
「sudo python rpi_bp_pwm_bz1c_1.py」を実行します。




(5) 記号でドレミをならそう

辞書型を使って、"Do","Re","Mi"で演奏が出来るようにします。

*Pythonの新しい命令を使います。
*辞書型
*書き方
変数名={キー0:要素0、キー1:要素1、…}
使用例:
doremi = {"Do":220.0, "Re":246.9, "Mi":277.2, "Fa":293.7, "Sol":329.6 ,"La":370.0, "Si":415.3, "D0_":440.0}
*変数名に使える文字は「アルファベット」、「数字」、「_」の3種類の半角文字になります。
また、最初の文字はは「アルファベット」、のみです。


 nano」エディター立ち上げます。

「nano rpi_bp_pwm_bz1d_1.py」コマンドを実行して下さい。

画面が「nano」エディターの画面に変わります。

▲廛蹈哀薀爐鯑れます

サンプルプログラム5
 
 #! /usr/bin/env python

 import RPi.GPIO as GPIO
 import time

 from rpi_bp_pwm_bz1a_1 import *

 if __name__ == ("__main__") :

 #start

 doremi = {"Do":220.0, "Re":246.9, "Mi":277.2, "Fa":293.7,"Sol":329.6,\
 "La":370.0, "Si":415.3, "Do_":440.0 }

 cyocyo = ["Sol", "Mi", "Mi","Fa","Re","Re"]
 GPIO.setmode(GPIO.BCM) # use GPIO Number

 BZ1 = 13 # BZ1 --> GPIO13
 tone1=tone_init(BZ1)

 tone1.start(50)

 for scale in cyocyo:
 print(scale)
 freq = doremi[scale]
 tone1.ChangeFrequency(freq)
 time.sleep(1)

 tone1.stop() # stop tone
 


F力を終わります。

「ctrl+X」を実行します。
次に、「y/n」は「enter」を入れます。

て力したプログラムを実行します。

「sudo python rpi_bp_pwm_bz1d_1.py」を実行します。





ヅ展擦鬚ります。

「sudo shutdown -h now」を入力して下さい。

*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。