اتصال بازر به رزبری پای (بازر هشدار فعال و غیرفعال)

در این مقاله میخواهیم نحوه اتصال و کنترل بازر با برد رزبری پای را آموزش دهیم. ما یک پروژه نمونه میسازیم که در آن رطوبت و دما را از سنسور DHT22 دریافت میکنیم. زمانی که دما از محدوده تعیین شده بالاتر برود، یک بازر فعال میشود تا به ما هشدار بدهد.
تفاوت بازر فعال و غیرفعال
یک بازر فعال از یک نوسان ساز داخلی برای تولید یک آهنگ استفاده می کند. این بدان معناست که برای ایجاد صدای پایدار فقط به ولتاژ DC نیاز دارد. از طرف دیگر، بازر های غیرفعال نوسانگر داخلی ندارند. برای تولید یک صدای پایدار به یک سیگنال AC ضربانی نیاز دارند.
زمانی که پروژه شما نیاز به کنترل دقیق صدا داشته باشد، بازر های غیرفعال بهترین گزینه هستند. بازر های فعال برای تولید صدای ساده برای هشدارها و آلارمها بهترین گزینه هستند. بنابراین اگر هدف شما ایجاد موسیقی است از بازر غیرفعال استفاده کنید و اگر هدف شما ایجاد هشدار یا بوق است از بازر فعال استفاده کنید.
ما دو پروژه نمونه برای تست عملکرد بازر با رزبری پای ایجاد میکنیم.
هشدار بازر در دمای بیش از حد
برای مثال اول، زمانی که مقدار خوانده شده توسط سنسور DHT22 از دمای مشخصی بالاتر می رود، از یک بازر فعال به عنوان هشدار صوتی استفاده می کنیم.
اینها قطعاتی هستند که به آنها نیاز خواهیم داشت:
- رزبری پای
- برد بورد
- سیم های جامپر
- سنسور رطوبت و دما DHT22
- بازر فعال
مدار را طبق نمودار سیم کشی زیر بسازید:
کد رزبری پای برای بازر اکتیو
برای این پروژه فقط به دو کتابخانه پایتون نیاز داریم. ما از کتابخانه Adafruit DHT برای اتصال حسگر DHT22 خود به Raspberry Pi و از کتابخانه RPi.GPIO برای فعال کردن buzzer استفاده خواهیم کرد.
برای نصب کتابخانه Adafruit DHT، این دستور را در ترمینال وارد کنید:
sudo pip3 install Adafruit_DHT
کد زیر را در ویرایشگر کد خود کپی کنید.
import Adafruit_DHT as AdaDHT import RPi.GPIO as GPIO DHTSensor = AdaDHT.DHT22 DHTPin = 3 BuzzerPin = 4 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(BuzzerPin, GPIO.OUT, initial=GPIO.LOW) while True: humidity, temperature = AdaDHT.read_retry(DHTSensor, DHTPin) if humidity is not None and temperature is not None: print("Temperature={0:0.1f}*C Humidity={1:0.1f}%".format(temperature,humidity)) if(temperature>32): GPIO.output(DHTPin, GPIO.HIGH) else: GPIO.output(DHTPin, GPIO.LOW) else: print("Failed to retrieve data from sensor")
در خط 4 کد ما نوع سنسور مورد استفاده را وارد میکنیم که در این پروژه DHT22 است. اگر از سنسور DHT11 استفاده میکنید به راحتی عدد انتهایی را تغییر دهید. در خط بعدی پایه ای که به پایه DATA سنسور متصل است را تنظیم میکنیم. و در خط بعدی نیز پایه ای از رزبری پای که به بازر متصل است را تعیین میکنیم.
حلقه اصلی مقدار دما و رطوبت را از سنسور میخواند و در صورت معتبر بودن، آنها را روی ترمینال چاپ میکند. اگر مقدار دما از 32 درجه سانتیگراد بیشتر شود، Raspberry Pi یک سیگنال HIGH برای فعال کردن بازر ارسال می کند.
پخش آهنگ با بازر غیرفعال و رزبری پای
برای مثال بعدی، ما از یک buzzer غیرفعال برای پخش یک آهنگ استفاده می کنیم. اینها قطعاتی هستند که ما نیاز داریم:
- رزبری پای
- برد بورد
- سیم های جامپر
- بازر غیرفعال
تمام قطعات را جمع آوری کنید و مدار را همانطور که در این شماتیک سیم کشی نشان داده شده است بسازید:
کد زیر را در ویرایشگر کد خود کپی کنید.
import RPi.GPIO as GPIO import time BuzzerPin = 4 GPIO.setmode(GPIO.BCM) GPIO.setup(BuzzerPin, GPIO.OUT) GPIO.setwarnings(False) global Buzz Buzz = GPIO.PWM(BuzzerPin, 440) Buzz.start(50) B0=31 C1=33 CS1=35 D1=37 DS1=39 E1=41 F1=44 FS1=46 G1=49 GS1=52 A1=55 AS1=58 B1=62 C2=65 CS2=69 D2=73 DS2=78 E2=82 F2=87 FS2=93 G2=98 GS2=104 A2=110 AS2=117 B2=123 C3=131 CS3=139 D3=147 DS3=156 E3=165 F3=175 FS3=185 G3=196 GS3=208 A3=220 AS3=233 B3=247 C4=262 CS4=277 D4=294 DS4=311 E4=330 F4=349 FS4=370 G4=392 GS4=415 A4=440 AS4=466 B4=494 C5=523 CS5=554 D5=587 DS5=622 E5=659 F5=698 FS5=740 G5=784 GS5=831 A5=880 AS5=932 B5=988 C6=1047 CS6=1109 D6=1175 DS6=1245 E6=1319 F6=1397 FS6=1480 G6=1568 GS6=1661 A6=1760 AS6=1865 B6=1976 C7=2093 CS7=2217 D7=2349 DS7=2489 E7=2637 F7=2794 FS7=2960 G7=3136 GS7=3322 A7=3520 AS7=3729 B7=3951 C8=4186 CS8=4435 D8=4699 DS8=4978 song = [ G4, E4, F4, G4, G4, G4, A4, B4, C5, C5, C5, E4, F4, G4, G4, G4, A4, G4, F4, F4, E4, G4, C4, E4, D4, F4, B3, C4 ] beat = [ 8, 8, 8, 4, 4, 4, 8, 8, 4, 4, 4, 8, 8, 4, 4, 4, 8, 8, 4, 2, 4, 4, 4, 4, 4, 2, 4, 1 ] while True: for i in range(1, len(song)): Buzz.ChangeFrequency(song[i]) time.sleep(beat[i]*0.13)
ما از دو کتابخانه پایتون برای این پروژه استفاده خواهیم کرد. ما از کتابخانه RPi.GPIO برای راهاندازی بازر و از کتابخانه time برای ایجاد کردن نتهای ملودی استفاده میکنیم.
برای راه اندازی اولیه، پین buzzer را تعیین میکنیم و سیستم شماره گذاری پایه ها را در حالت BCM تعریف می کنیم. ما آبجکت PWM را به عنوان buzz مقداردهی اولیه می کنیم، سپس DutyCycle را روی 50 درصد قرار می دهیم.
در مرحله بعد، تمام نتهای ممکن را که میتوانیم برای ساختن یک آهنگ استفاده کنیم، بر اساس فرکانس آنها تعریف میکنیم. آهنگی که من برای این مثال استفاده کردم “Santa Claus is Coming to Town” است.
برای ایجاد تن صدا، نت های آهنگ را به همراه بیت مشخص میکنیم. این بیت ها فاصله بین نت ها هستند. در حلقه اصلی، هر نت با استفاده از PWM به buzzer غیر فعال ارسال می شود. سپس، Raspberry Pi با توجه به مقدار بیت مربوطه استراحت می کند. می توانید سرعت را با یک ضریب ثابت تنظیم کنید.
امیدوارم این آموزش به شما در نحوه راه اندازی بازر های اکتیو و پسیو با رزبری پای کمک کرده باشد.
سلام.
خوب هستید؟
چرا در کتابخوانه gpiozero متد beep برای buzzer کار نمی کنه؟؟ دلیلش چیه؟
اصلا ارور نمیده و یه صدای خیلی کم میده بعد قطع میشه!