دانشجوی مهندسی برق و علاقه مند به رباتیک و اینترنت اشیاء
بهانهای برای ورود به دنیای امبدد سیستمها (V)
سلام
در قسمت چهارم با کلاس های LED , Button از کتابخانه gpiozero آشنا شدیم و همچنین با کمک این کتابخانه برای رزبری پای دکمه Shutdown درست کردیم.
در این قسمت با کلاس های بیشتر از همین کتابخونه آشنا میشیم.
PWMLED
کلاس LED رو یادتونه؟ کلاس PWMLED همون کلاس LED هست که شما میتونید روشنایی هر LED رو هم تنظیم کنید. طریقه کار کردش ایجاد یک پالس PWM هست که با تغییر پهنای پالس میتونید سطح ولتاژ میانگین رو کم و زیاد کنید.
اول کلاس pwmled رو فراخوانی میکنیم
from gpiozero import PWMLED
و بعد روی پایه ای که میخواهیم یک شی تعریف میکنیم
led = PWMLED(17)
و با استفاده از پراپرتی value میتونیم روشنایی led رو کم و زیاد کنیم. value یک عدد بین 0 تا 1 را میگیرد که 0 به معنای خاموش و 1 به معنای حداکثر روشنایی است.
from gpiozero import PWMLED
from time import sleep
led = PWMLED(17)
while True:
led.value = 0 #off
sleep(1)
led.value = 0.5 # half brightness
sleep(1)
led.value = 1 # full brightness
sleep(1)
LightSensor
اول یکم درمورد light sensor حرف بزنیم. سنسور روشنایی یا به اصطلاح برقیا LDR، یک المان دو پایه مثل LED هست با این تفاوت که دقیقا برعکس led هست. در واقع LDR زمانی که نور بهش نرسه مقاومت بی نهایت داره و زمانی که در معرض نور قرار بگیره مقاومت تقریبا صفر داره. (یعنی مقاومت با افزایش میزان روشنایی کاهش پیدا میکنه، پس میتونیم مقاومت رو برای معیاری از روشنایی مدل کنیم)
به دو طریق میشه از LDR استفاده کرد. 1) دیجیتال 2)آنالوگ
در قسمت دیجیتال دو حالت خاموش و روشن داریم. (LDR مثل کلید عمل میکنه)
مدار
در مدار فوق یک پایه LDR به VCC (پتانسیل بالا) وصل شده و پایه دوم به GPIO18 وصل شده. همچنین یک خازن (نسبتا ظرفیت کم در حد نانوفاراد) برای نویز گیری بین پایه زمین و پایه دوم LDR قرار گرفته. (اگر از خازن پلاریته دار استفاده می کنید به پلاریته دقت کنید. البته با 5 ولت خازن نمیترکه ولی خب!)
بریم سراغ کد ^_^
from gpiozero import LightSensor
sensor = LightSensor(18)
while True:
sensor.wait_for_light()
print("It's light! :)")
sensor.wait_for_dark()
print("It's dark :(")
اول که کلاس LightSensor رو از کتابخونه فراخونی کردیم. و تعریف کردیم که آبجکت sensor یک لایت سنسور هست که روی پایه GPIO18 وصله.
تو حلقه از تو تابع wait_for_light و wait_for_dark استفاده کردیم که به ترتیب برای روشنایی و تاریکی صبر می کنند. با در این حین برای ما توی ترمینال چاپ میکنند که الان تاریکه یا روشن!
میتونید با LDR یک LED رو کنترل کنید
from gpiozero import LightSensor, LED
sensor = LightSensor(18)
led = LED(16)
sensor.when_dark = led.on
sensor.when_light = led.off
دیگه فکر کنم با کد های بالا آشنا هستید و سعی میکنم کمتر توضیحشون بدم. کد بالا زمانی که نوری به LDR نمیرسه LED رو روشن میکنه و برعکس.
و قسمت آنالوگ، توی این قسمت در اصل میزان ولتاژ LDR توسط رزبری پای خونده میشه (ولتاژ هم که طبق قانون اهم رابطه مستقیم داره با مقاومت) و متناسب با مقداری که خونده شده میتونید از اون عدد استفاده کنید. مثلا با کتابخونه LEDPWM که توی همین آموزش دیدیم میزان روشنایی یک LED رو کنترل کنید.
مدار همون مدار قبله ولی کد به صورت زیر هست:
from gpiozero import LightSensor, PWMLED
sensor = LightSensor(18)
led = PWMLED(16)
led.source = sensor
توی خط اخر مشاهده می کنید که سورس آبجکت led همون ابجکت sensor که در واقع LDR هست. قرار داده شده و میزان روشنایی LED با توجه به میزان نوری که به LDR (مقاومت) میشه تغییر میکنه.
امیدوارم که آموزش ها تونسته باشه کمی بیشتر شمارو با این برد دوست داشتنی آشنا کنه و در قسمت های بعدی بیشتر با مباحث الکترونیکی آشنا خواهیم شد.
منتظر قسمت ششم باشید.
ممنون که وقت گذاشتید و با ما همراه بودید.
مطلبی دیگر از این انتشارات
وب سرور پیشرفته با ESP8266
مطلبی دیگر از این انتشارات
بهانه ای برای ورود به دنیای امبدد سیستم ها (II)
مطلبی دیگر از این انتشارات
دانلود و پخش جلسات BBB با سرعت 2.5x