بهانه‌ای برای ورود به دنیای امبدد سیستم‌ها (V)

سلام

در قسمت چهارم با کلاس های LED , Button از کتابخانه gpiozero آشنا شدیم و همچنین با کمک این کتابخانه برای رزبری پای دکمه Shutdown درست کردیم.

در این قسمت با کلاس های بیشتر از همین کتابخونه آشنا میشیم.

رزبری پای مدل 4B
رزبری پای مدل 4B



PWMLED

کلاس LED رو یادتونه؟ کلاس PWMLED همون کلاس LED هست که شما میتونید روشنایی هر LED رو هم تنظیم کنید. طریقه کار کردش ایجاد یک پالس PWM هست که با تغییر پهنای پالس میتونید سطح ولتاژ میانگین رو کم و زیاد کنید.

اتصال LED به رزبری پای
اتصال LED به رزبری پای

اول کلاس 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
یک نمونه LDR


به دو طریق میشه از LDR استفاده کرد. 1) دیجیتال 2)آنالوگ


در قسمت دیجیتال دو حالت خاموش و روشن داریم. (LDR مثل کلید عمل میکنه)

مدار

مدار LDR
مدار LDR


در مدار فوق یک پایه LDR به VCC (پتانسیل بالا) وصل شده و پایه دوم به GPIO18 وصل شده. همچنین یک خازن (نسبتا ظرفیت کم در حد نانوفاراد) برای نویز گیری بین پایه زمین و پایه دوم LDR قرار گرفته. (اگر از خازن پلاریته دار استفاده می کنید به پلاریته دقت کنید. البته با 5 ولت خازن نمیترکه ولی خب!)

بریم سراغ کد ^_^

from gpiozero import LightSensor
sensor = LightSensor(18)

while True:
     sensor.wait_for_light()
     print(&quotIt's light! :)&quot)
     sensor.wait_for_dark()
     print(&quotIt's dark :(&quot)

اول که کلاس 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 (مقاومت) میشه تغییر میکنه.



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

ممنون که وقت گذاشتید و با ما همراه بودید.