در این مقاله نحوه اتصال و کد نویسی برای ساخت چراغ راهنمایی با Raspberry Pi را به صورت مرحله به مرحله آموزش خواهیم داد. همراه ما باشید. در انتها پاسخگو نظرات و سوالات شما هستیم.
اگر هنوز مقاله آموزش کنترل LED توسط Raspberry Pi را مشاهده نکردید پیشنهاد می کنیم حتما ابتدا این مقاله را مطالعه کنید.
برای ساخت یک چراغ راهنمایی به یک بردبورد (breadboard) ، سه عدد LED، یک کلید، یک بازر (buzzer)، کابلهای جامپر و مقاومت الکتریکی نیاز دارید.
کابلکشی در بردبورد
برای شروع ساخت چراغ راهنمایی با Raspberry Pi لازم است تمامی قطعات را بر روی بردبورد قرار دهید و آنها را به پینهای GPIO بورد Raspberry Pi وصل کنید.
- پیش از هر چیز لازم است شیوه وصل کردن هر یک از قطعات را بدانید.
- کلید فشاری (Push button) را باید به یک پین زمین و یک پین GPIO وصل کنید.
- LED را به همراه یک مقاومت الکتریکی برای محدود کردن جریان الکتریکی، به یک پین زمین و یک پین GPIO وصل کنید.
هر یک از این قطعات باید به یک پین GPIO مخصوص به خود وصل شوند، اما میتوانند به یک پین زمین مشترک وصل شوند. برای انجام این کار از یک بردبورد استفاده خواهیم کرد.
- قطعات مورد نیاز را بر روی بردبورد قرار دهید و مطابق تصویر زیر آنها را به پینهای GPIO بورد Raspberry Pi وصل کنید.
توجه کنید که ردیف پینهایی که در طول بردبورد قرار دارند به پین زمینِ Raspberry Pi وصل شده اند، لذا تمامی قطعاتی که در آن ردیف قرار دارند ( که نقش یک ریل زمین (Ground rail) را دارند) به پین زمین وصل میشوند.
- با استفاده از جدول زیر قطعات را به پین GPIO مربوطه متصل کنید:

شروع کد نویسی در پایتون
- با کلیک کردن بر روی گزینه New یک فایل جدید ایجاد کنید.
- با کلیک کردن بر روی گزینه Save، فایل جدید را ذخیره کنید؛ فایل را با نام trafficlights.py ذخیره کنید.
- کد زیر را وارد کنید.
from gpiozero import Button button = Button(21) while True: print(button.is_pressed)
در کتابخانه GPIO Zero برای تک تک قطعات مورد استفاده یک شی (object) بسازید. رابط هر یک از قطعات و نمونهای که از روی پین GPIO، پینی که قطعه به آن وصل میشود را باید از ماژول gpiozero ایمپورت کنید.
- کد را ذخیره و اجرا کنید.
- پس از اجرای کد، به طور پیوسته False نشان داده میشود، اما پس از زدن کلید، True نشان داده میشود و زمانی که دستتان را از روی کلید بردارید مجدداً False نمایش داده میشود.
button.is_pressed یکی از ویژگیهای شی button است، این ویژگی وضعیت کلید (آیا کلید زده شده یا نه) را در یک موقعیت مشخص نشان میدهد.
- اکنون به پنجره کد برگردید و حلقه while را ویرایش کنید تا کد زیر را نشان دهد:
while True: if button.is_pressed: print("Hello") else: print("Goodbye")
- کد را مجدداً اجرا کنید. پس از اجرای کد زمانی که کلید را بزنید “Hello” و زمانی که دستتان را از روی کلید بردارید “Goodbye” نشان داده میشود.
- حلقه را بار دیگر ویرایش کنید:
while True: button.wait_for_press() print("Pressed") button.wait_for_release() print("Released")
- این بار اگر کد را اجرا کنید تا زمانیکه کلید را نزنید هیچ اتفاقی نمیافتد و پس از اینکه کلید را زدید، “Pressed” نشان داده میشود و زمانیکه دستتان را از روی کلید بردارید “Released” نشان داده میشود. هر بار که کلید را میزنید این اتفاق میافتد اما به جای اینکه به طور مداوم یکی از این پیامها نشان داده شود، با هر باز زدن و رها کردن کلید پیامها نشان داده میشوند.
افزودن یک LED
حالا یک LED به کد اضافه میکنیم و در نتیجهی استفاده از GPIO Zero کلید متوجه روشن شدن LED میشود.
- برای افزودن LED ، خط …from gpiozero import را در قسمت بالای کدتان اضافه کنید:
from gpiozero import Button, LED
- برای ساختن نمونهای از شی LED ، یک خط پایین button = Button(21) اضافه کنید:
led = LED(25)
- اکنون برای اینکه LED با هر بار زدن کلید روشن شود، حلقه while را ویرایش کنید:
while True: button.wait_for_press() led.on() button.wait_for_release() led.off()
- پس از اجرای کد، هر بار که کلید را میزنید LED روشن میشود. برای روشن ماندن LED کلید را پایین نگه دارید.
- حالا برای تغییر این روند، جای on و off را با هم عوض کنید:
while True: led.on() button.wait_for_press() led.off() button.wait_for_release()
- کد را اجرا کنید و خواهید دید که LED تا زمانی که کلید را نزدید، روشن میماند.
- حالا جای ()led.on و ()led.blink را با هم عوض کنید:
while True: led.blink() button.wait_for_press() led.off() button.wait_for_release()
- این بار اگر کد را اجرا کنید، LED تا زمانی که کلید را نزدهاید، خاموش و روشن میشود (زمانی که کلید را بزنید LED به طور کامل خاموش میشود). وقتی دستتان را از روی کلید بردارید، LED مجدداً شروع به چشمک زدن میکند (خاموش و روشن میشود).
- میتوانید پارامترهایی به blink اضافه کنید تا LED سریعتر یا کندتر خاموش و روشن شود:
- led.blink(2, 2) دو ثانیه خاموش، دو ثانیه روشن
- led.blink(0.5, 0.5) نیم ثانیه خاموش، نیم ثانیه روشن
- led.blink(0.1, 0.2) یک دهم ثانیه روشن، دو دهم ثانیه خاموش
دو پارامتر اول off_time ، on_time ، blink هستند: مقدار پیشفرض هر دوی آنها 1 ثانیه است.
ساخت چراغ راهنمایی با Raspberry Pi
سه LED به رنگ چراغهای راهنمایی داریم: قرمز، زرد و سبز. در کتابخانه GPIO Zero یک رابط از پیش تعریفشده (built-in) برای چراغهای راهنمایی وجود دارد.
- برای جایگزین کردن LED با from gpiozero import… ، trafficlights را ویرایش کنید:
from gpiozero import Button, TrafficLights
- کد زیر را جایگزین خط led = LED(25) کنید:
lights = TrafficLights(25, 8, 7)
رابط TrafficLights به سه پین GPIO وصل میشود، هر پین برای یک چراغ: چراغ قرمز، زرد و سبز (به این ترتیب).
- اکنون برای کنترل کردن شی TrafficLights ، حلقه while را ویرایش کنید:
while True: button.wait_for_press() lights.on() button.wait_for_release() lights.off()
رابط TrafficLights از جهات بسیاری شبیه یک LED است: شما میتوانید از on ، off و blink استفاده کنید، تمامی این فرمانها به صورت همزمان سه چراغ را کنترل میکنند.
- نمونه blink را امتحان کنید:
while True: lights.blink() button.wait_for_press() lights.off() button.wait_for_release()
افزودن بازر (Buzzer)
در این مرحله برای ایجاد صدا به یک بازر نیاز دارید.
- Buzzer را به خط …from gpiozero import اضافه کنید:
from gpiozero import Button, TrafficLights, Buzzer
- به منظور اضافه کردن یک شی Buzzer ، یه خط به پایین button و lights اضافه کنید:
buzzer = Buzzer(15)
- Buzzer کارکردی مشابه LED دارد، لذا ()buzzer.on و ()buzzer.off را به حلقهتان اضافه کنید:
while True: lights.on() buzzer.off() button.wait_for_press() lights.off() buzzer.on() button.wait_for_release()
- Buzzer یک متد ()beep دارد که عملکردی شبیه به blink شی LED دارد:
while True: lights.blink() buzzer.beep() button.wait_for_press() lights.off() buzzer.off() button.wait_for_release()
توالی چراغهای راهنمایی
علاوه بر کنترل همزمان چراغها، میتوانید هر LED را به صورت جداگانه هم کنترل کنید. با استفاده از LED های چراغ راهنمایی، یک کلید و یک بازر میتوانید توالی چراغ راهنمایی مخصوص به خود را بسازید.
- در بالای فایلتان، زیر …from gpiozero import یک خط برای ایمپورت sleep اضافه کنید:
from time import sleep
- کدتان را ویرایش کنید تا توالی LED ها به صورت خودکار روشن شوند:
while True: lights.green.on() sleep(1) lights.amber.on() sleep(1) lights.red.on() sleep(1) lights.off(
- با افزون wait_for_press ،هر زمان که کلید را بزنید، توالی LED ها روشن میشود:
while True: button.wait_for_press() lights.green.on() sleep(1) lights.amber.on() sleep(1) lights.red.on() sleep(1) lights.off()
- اکنون توالی کامل چراغهای راهنمایی را ایجاد کنید:
- سبز روشن
- زرد روشن
- قرمز روشن
- قرمز و زرد روشن
- سبز روشن
حتماً هر چراغ را در زمان مناسب روشن و خاموش کنید و برای زمانبندی صحیح توالی از تابع sleep استفاده کنید.
- برای عبور عابران پیاده هم یک کلید اضافه نمایید. این کلید باید چراغ قرمز را روشن کند (اما نه بلافاصله) و به عابرین زمان دهید تا پیش از سبز شدن چراغ از خیابان عبور کنند.
- اکنون یک بازر اضافه کنید تا پشت سر هم صدا دهد و نشان دهد میشود از خیابان رد شد؛ استفاده از بازر به افرادی که دچار اختلالات بینایی هستند کمک میکند.