آموزش رزبری پای

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

در این مقاله میخواهیم نحوه اتصال و کنترل بازر با برد رزبری پای را آموزش دهیم. ما یک پروژه نمونه میسازیم که در آن رطوبت و دما را از سنسور 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 با توجه به مقدار بیت مربوطه استراحت می کند. می توانید سرعت را با یک ضریب ثابت تنظیم کنید.

امیدوارم این آموزش به شما در نحوه راه اندازی بازر های اکتیو و پسیو با رزبری پای کمک کرده باشد.

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

1 دیدگاه

  1. سلام.
    خوب هستید؟
    چرا در کتابخوانه gpiozero متد beep برای buzzer کار نمی کنه؟؟ دلیلش چیه؟
    اصلا ارور نمیده و یه صدای خیلی کم میده بعد قطع میشه!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *