آردوینو آموزش آردوینو پروژه های آردوینو کیت آردوینو

آموزش ساخت چراغ خطر راهنمایی رانندگی Traffic Light با برد آردوینو

Traffic-Light-Arduino-digispark
نوشته شده توسط پریسا پوربلورچیان

کاربران زیادی برای ساخت یک مدار چراغ راهنمایی رانندگی با بنده و دیجی اسپارک تماس می‌گیرند. عمده مشکل این کاربران پیاده سازی این مدار است. خب همانطور که می‌دانید به چندین روش می‌توان یک ایده را با آردوینو پیاده سازی کرد. بنابراین با در نظر گرفتن تمامی نگرانی‌های کاربران اقدام به طراحی مدار چراغ راهنمایی رانندگی Traffic Light کردم. در این پست به صورت جامع و کامل موارد را توضیح خواهم داد. در ادامه با وب سایت مرجع تخصصی آردوینو، دیجی اسپارک همراه باشید.

 

 

چراغ راهنمایی رانندگی Traffic Light

چراغ راهنمایی در کشورهای مختلف با نام‌های مختلف مانند سیگنال ترافیکی Traffic Signals ، لامپ ترافیکی Traffic ، چراغ استپ Stop Light و سیگنال های کنترل ترافیک Traffic Control Signals شناخته می‌شوند. از کاربردهای چراغ راهنمایی می‌توان برای کنترل ترافیک و عبور مرور وسایل نقلیه و عابرین پیاده و نظم بخشیدن به کنترل تردد در شهرها و جاده‌ها نام برد. هوشمند سازی شهرها، کنترل دقیق عبور و مرور شهری و کنترل تردد شهری بسیار اهمیت دارد. همچنین ایجاد نظم از المان‌های زندگی شهری و ایجاد آرامش برای شهروندان است.

 

تاریخچه چراغ راهنمایی Traffic Light

اولین چراغ راهنمایی توسط JP Knight در سال ۱۸۶۸ در لندن اختراع شد. در واقع اولین چراغ راهنمایی مقابل ساختمان پارلمان نصب شد. طبق گفته‌ها این چراغ راهنمایی دارای بازوی متحرک بود و هنگامی که هر دو بازو در طرفین قرار می‌گرفتند. به معنی Stop بود و همچنین از یک چراغ گازی که دارای دو رنگ سبز و قرمز بود استفاده می‌شد و سبب مشکلات بسیار زیادی بود. اینکار به صورت دستی انجام می‌گرفت و در نهایت منجر به منفجر شدن چراغ گازی شد که در آن یک مامور پلیس به شدت آسیب دید. ایده‌ی اولیه انتخاب رنگ چراغ راهنمایی از راه آهن برداشته شده بود که به جای رنگ سفید، رنگ زرد جایگزین آن شد و کمی تغییر در علائم مربوط به هر رنگ ایجاد شد. در اوایل دهه‌ی ۱۹۰۰، جهان به سرعت در حال توسعه بود و شهرهای بزرگ در حال پیشرفت و صنعتی شدن پیش می‌رفتند. در نتیجه شهرها روز به روز شلوغ‌تر و پرترددتر می‌شد. با اختراع خودروها، ترافیک در جاده‌ها و خیابان‌ها به شدت افزایش یافت و نیاز به یک سیستم هوشمند ترافیکی کاملا حس می‌شد. در نهایت در سال ۱۹۱۲ یک پلیس، چراغ راهنمایی الکترونیکی طراحی کرد. چراغ راهنمایی که توسط این پلیس طراحی شده بود تنها دارای ۲ رنگ قرمز و سبز بود و از رنگ زرد استفاده نشده بود. از ویژگی دیگر این چراغ بازری بود که به هنگام تغییر سیگنال آلارم جهت هشدار ارسال می‌کرد.

چراغ راهنمایی رانندگی کنترل ترافیک -دیجی اسپارک

توسعه چراغ راهنمایی Traffic Light

در سال ۱۹۲۰ پلیس دیگری به نام williams potts، اولین چراغ راهنمایی سه رنگ و ۴ طرفه را اختراع کرد. در این طراحی کنار رنگ قرمز و سبز از رنگ زرد استفاده شد. در آن سال چراغ ۴ طرفه در بسیاری از شهرهای بزرگ نصب شد. در آن سال‌ها مخترع دیگری چراغی طراحی کرد که دارای میکروفن بود و هنگامی که صدایی شبیه به وسایل نقلیه را دریافت می‌کرد، چراغ راهنمایی فعال می‌شد. طبیعتا میکروفن‌ها حساس به صداهای کوچک و بزرگ بودند و مشکلات بسیاری در عبور و مرور به وجود می‌آمد. سال‌های بعد با پیشرفت تکنولوژی و سیستم‌های کامپیوتری کنترل چراغ‌های راهنمایی و رانندگی و تغییر سیگنال و نظارت بر عملکرد چراغ راهنمایی از طریق مانیتورینگ انجام می‌شد. این موضوع سبب بهبود وضعیت ترافیک و کنترل دقیق عبور و مرور وسایل نقیله و حتی عابران پیاده را در برداشت. در حال حاضر با پیشرفت قابل چشمگیر تکنولوژی و بردهای کامپیوتری و حضور بردهای امبدد در این زمان، باید هر روز و هر ساعت منتظر خلق ایده‌ای جدید و جذاب در کنترل سیستم هوشمند شهری باشیم. شاید تصور اینکه قبل از نزدیک شدن به چراغ‌های راهنمایی سیگنال‌های نزدیک‌ترین چراغ را بر روی مانیتور اتومبیل و یا تلفن هوشمند خود دریافت کنیم، خیلی دور از ذهن نباشد.

 

معرفی پروژه چراغ خطر آردوینو

در این آموزش هدف طراحی یک چراغ راهنمایی Traffic Light و شبیه سازی آن از طریق برد آردوینو Arduino است. در واقع با استفاده از ۶ عدد ال ای دی LED و برد آردوینو Arduino یک چراغ راهنما Traffic Light طراحی می‌کنیم. بسیار ساده و جذاب است و می‌توانید به راحتی پیاده سازی کنید. برای تحلیل آسان‌تر تنها دو سمت از یک چهارراه فرضی را در نظر گرفته و در انتها با تغییر در کدهای برنامه می‌توانید تعداد ال ای دی را افزایش دهید. در ادامه به بررسی اتصالات و کد برنامه خواهیم پرداخت و همچنین کدها را مرحله به مرحله بررسی خواهیم کرد.

چراغ راهنمایی رانندگی با آردوینو aRDUINO - دیجی اسپارک

وسایل مورد نیاز

برد آردوینو UNO با  تراشه اورجینال – Arduino UNO R3

شیلد آردوینو پروتوتایپ –  Arduino Shield Uno Prototype

ال ای دی RGB 

کابل فلت نری به نری 

 

اتصالات مدار چراغ راهنما

در ابتدا ال ای دی ها را در دو سمت چپ و راست خود قرار دهید تا عملکرد آن ها را به راحتی تحلیل کنید. همچنین ال ای دی LED دارای دو پایه است. پایه بلند آن به عنوان سیگنال و پایه کوتاه آن  به عنوان زمین در نظر گرفته می‌شود، پس در اتصالات پایه ها دقت کنید.

  • پایه سیگنال ( پایه بلند ) ال ای دی قرمز سمت چپ را به پایه ۱ آردوینو اتصال دهید.
  • پایه سیگنال ( پایه بلند ) ال ای دی زرد سمت چپ را به پایه ۲ آردوینو اتصال دهید.
  • پایه سیگنال ( پایه بلند ) ال ای دی سبز سمت چپ را به پایه ۳ آردوینو اتصال دهید.
  • پایه های کوتاه – GND هر سه ال ای دی را به زمین – GND آردوینو اتصال دهید.
  • پایه سیگنال ( پایه بلند ) ال ای دی قرمز سمت راست را به پایه ۸ آردوینو اتصال دهید.
  • پایه سیگنال ( پایه بلند ) ال ای دی زرد سمت راست را به پایه ۹ آردوینو اتصال دهید.
  • پایه سیگنال ( پایه بلند ) ال ای دی سبز سمت راست را به پایه ۱۰ آردوینو اتصال دهید.
  • پایه های کوتاه – GND  هر سه ال ای دی را به زمین – GND آردوینو اتصال دهید.

 

کد برنامه چراغ راهنمایی رانندگی

 

نکته مهم

اگر شیوه آپلود کدها را در آردوینو نمی‌دانید، به آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE مراجعه کنید. با توجه به اینکه هر دو چراغ قرمز سمت راست و چراغ سبز سمت چپ و برعکس در یک زمان خاموش و روشن می‌شوند، در کدها نیاز به ترتیب خاصی نیست و بدون اولویت تعریف خواهند شد. همچنین زمانبندی و تعریف تاخیر – Delay در کدها کاملا اختیاری است.

اتصالات مدار چراغ راهنمایی رانندگی با آردوینو - دیجی اسپارک

توضیح کد چراغ خطر Traffic Light

در ابتدا طبق اتصالات گفته شده در آمورش اتصالات ال ای دی ها را انجام دهید. حال کد را در نرم افزار آردوینو کپی کرده و سپس کامپایل کنید. همانطور که در شروع آموزش گفته شد، ال ای دی ها در دو سمت چپ و راست در یک خط قرار گرفته اند. دقت داشته باشید که نحوه ی قرار گرفتن ال ای دی ها اهمیتی ندارد و تنها برای تحلیل دقیق آن ها را در دو سمت متفاوت بر روی شیلد پیاده سازی کرده ایم. حال پس از کامپایل برنامه، در ابتدا ال ای دی قرمز سمت چپ روشن و در طرف دیگر ال ای دی سبز سمت راست روشن است. پس از گذشت ۹ ثانیه ال ای دی قرمز سمت چپ خاموش شده و سپس ال ای دی سبز سمت راست خاموش می‌شود و سپس ال ای دی زرد سمت راست روشن خواهد شد. حال پس از گذشت ۵ ثانیه ال ای دی قرمز سمت راست روشن شده و در طرف دیگر ال ای دی سبز سمت چپ روشن خواهد شد. در این مرحله پس از گذشت ۷ ثانیه ال ای دی سبز سمت چپ خاموش شده و ال ای دی زرد سمت چپ روشن خواهد شد. در نهایت پس از گذشت ۵ ثانیه، ال ای دی زرد سمت چپ خاموش شده و ال ای دی قرمز سمت چپ روشن خواهد شد. این حلقه ال ای دی مداوم تکرار شده و شما به راحتی یک چراغ خطر – Traffic Light طراحی کرده اید.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۶ دیدگاه

  • سلام خانوم مهندس
    خیلی آموزش جالب و جامعی بود ازتون ممنونم، حالا اگر من بخوام چراغ خطر ۴ تایی برای یه چهارراه بسازم، میشه راهنمایی کنید چه اقدامی بکنم؟

    • سلام
      از توجه شما ممنونم.
      ابتدا با توجه به اینکه کد ها را کامل توضیح داده ام، تمام مراحل کدها را تحلیل کنید. سپس باید تعداد ال ای دی هاذ را تعمیم دهید و ۱۲ ال ای دی در کدها تعریف کنید و در دستورات void setup و void loop طبق توضیحات بنده در کدها برای هر ال ای دی وضعیت Low و High را تعریف کنید. پیشنهاد میشود کامل کدهای آموزش را با توجه به تحلیل فارسی آن مطالعه کنید و سپس تعمیم دهید.

    • سلام
      از توجه شما ممنونم
      در این پست هدف آموزش زمانبندی و ترتیب آن در کد برنامه است. پیشنهاد شما هم بسیار جالب است و میتوان به همین کد تعمیم داد.

  • بسیار عالی
    خانم مهندس اگر بخواهم تعیین کنم که در ساعت ۶ الی ۷ صبح چراغ زرد چشمک زن باشه میشه چیکار باید بکنم ؟ قطعه دیگری نیاز است یا باید برنامه نویسی کنم ؟

    • سلام
      اگر ارور در اجرای کد دارید ارسال کنید تا مشکل را برطرف کنم.
      تنها نکته ی مهم در اجرای این پرژه اتصالات ال ای دی ها است. بخش اتصالات را کامل مطالعه کنید. همچنین در کد آردوینو برنامه هم خط به خط توضیح داده شده است.
      اتصالات خود را چک کنید و مجددا نتیجه را اعلام کنید.

  • سلام با تشکر از آموزش مفید شما بنده با کمک این آموزش شما و مقداری تغییر در کدها توانستم یک ال ای دی بارگراف ۱۰ تایی را به صورت یکی پس از دیگری و به ترتیب، روشن و خاموش کنم. این هم کدهاش:

    int led1 = 1;
    int led2 = 2;
    int led3 = 3;
    int led4 = 4;
    int led5 = 5;
    int led6 = 6;
    int led7 = 7;
    int led8 = 8;
    int led9 = 9;
    int led10 = 10;
    void setup()
    pinMode (led1, OUTPUT);
    pinMode (led2, OUTPUT);
    pinMode (led3, OUTPUT);
    pinMode (led4, OUTPUT);
    pinMode (led5, OUTPUT);
    pinMode (led6, OUTPUT);
    pinMode (led7, OUTPUT);
    pinMode (led8, OUTPUT);
    pinMode (led9, OUTPUT);
    pinMode (led10, OUTPUT);
    }

    void loop() {
    digitalWrite(led1, HIGH);
    digitalWrite(led10, LOW);
    delay(4000);
    digitalWrite(led2, HIGH);
    digitalWrite(led1, LOW);
    delay(4000);
    digitalWrite(led3, HIGH);
    digitalWrite(led2, LOW);
    delay(4000);
    digitalWrite(led4, HIGH);
    digitalWrite(led3, LOW);
    delay(4000);
    digitalWrite(led5, HIGH);
    digitalWrite(led4, LOW);
    delay(4000);
    digitalWrite(led6, HIGH);
    digitalWrite(led5, LOW);
    delay(4000);
    digitalWrite(led7, HIGH);
    digitalWrite(led6, LOW);
    delay(4000);
    digitalWrite(led8, HIGH);
    digitalWrite(led7, LOW);
    delay(4000);
    digitalWrite(led9, HIGH);
    digitalWrite(led8, LOW);
    delay(4000);
    digitalWrite(led10, HIGH);
    digitalWrite(led9, LOW);
    delay(4000);
    }

    • سلام
      از توجه شما ممنونم.
      پروژه بسیار جالبی است. در صورت تمایل میتوانید با ایجاد یک حساب کاربری در سایت، پروژه خود را با نام خودتان منتشر کنید. برای اطلاعات بیشتر لینک زیر را بررسی کنید.
      همکاری

  • با تشکر از آموزش های زیبا و کامل شما
    استاد برای اتصال LED ها که ۱٫۵ ولت هستند به خروجی آردوینو که ۵ ولت است نیازی به مقاومت نیست؟
    LED ها نمی سوزند؟
    برایم جالب است که باوجودی که پورتها بعنوان خروجی دیجیتال معرفی شده اند، مستقیما به LED وصل شدند!
    آیا شیلد پروتوتایپ چنین قابلیتی داره؟
    ممنون اگه جواب بدید

    • سلام
      از توجه شما ممنونم.
      در ابتدا ال ای دی استفاده شده در این آموزش از نوع اوال Oval است. همچنین برای ال ای دی های ساده هم تا وقتی که جریان در مدار قابل کنترل است، الزامی به استفاده از مقاومت نیست. در خصوص سوال دوم هم به نظر می‌رسد شما فقط به دنبال مسایل تئوریک بوده اید. پیشنهاد می‌کنم دست به کار شده و پروژه ها را به صورت عملی ببندید و لذت ببرید.

      • با سلام و عرض ادب خدمت خانم مهندس بلورچیان
        من تازه با سایت شما آشنا شدم و از اینکه آموزشهای تخصصی را به بهترین نحو برای هموطنان عزیز ارائه میکنید بسیار خوشحال شدم.
        جسارتاً بنده کارشناسی الکترونیک و کارشناسی ارشد نرم افزار را با ۲۸ سال سابقه تدریس دارم و بیش از ۳۰ سال است که از طراحی و ساخت پروژه های پیچیده لذت میبرم و صد البته کار شما را هم تحسین میکنم.

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

        در دیتاشیت میکروکنترلر، حداکثر جریان مطلق برای هر پین ۴۰ میلی آمپر مشخص شده است که در حالت عادی با یک مقاومت داخلی تنها ۲۵ میلی‌آمپر برای هر پین می‌باشد. اتصال به قطعه ای که بیش از این جریان بکشد، موجب داغ شدن و در دراز مدت برای خراب کردن یک میکروکنترلر کافیست!

        و اینکه فرقی نمیکند LED کلاهی باشد یا اوال
        هردو در ولتاژی حدود ۱٫۵ ولت (LED سفید و آبی ۳ ولت) داشته و برای اتصال به منبع ۵ ولت باید با یک مقاومت سری شوند.
        اتصال مستقیم دیود به منبع با ولتاژ بالاتر از خود، موجب جریان کشی تا حداکثر توان قطعات میشود (دیود اتصال کوتاه میشود). یعنی یا دیود می سوزد یا منبع جریان.
        مگر اینکه شما از محدودکننده جریان نظیر مقاومت یا لیمیتر استفاده کنید.
        بنابراین علاقمندم بدانم در این پروژه چگونه جریان خروجی میکرو بدون بافر یا لیمیتر کنترل میشود؟

        ممنون از اینکه وقت میگذارید

        • سلامت باشید، با این شرایط ممکن است شیوه‌های نوین و به روز آموزشی را از قلم انداخته باشید. اطلاعات شما در خصوص میکروکنترلر صحیح است ولی ما اینجا با برد امبدد طرف هستیم و نکته بسیار مهم‌تر، اینجاست که با بحث کارایی درازمدت طرف نیستیم.
          در حالت کاربردی استفاده از مقاومت الزامی است.

          • درود بر شما
            اولا اطلاعاتی که عرض کردم دقیقاً مربوط به برد آردوینو UNO است که در این پروژه استفاده شده.
            اتفاقاً یکی از همکاران شما در مطلبی با عنوان «راه کارهایی برای نابود کردن آردوینو» به این موضوع اشاره کرده است!

            ثانیاً ذکر سوابق کاری بنده تنها در پاسخ به کنایه شما بود! والا اینجا جای چنین مباحثی نیست و بنده هم فرصت درگیری با این موضوعات را ندارم. بلکه بدنبال محتوای آموزشی مناسب برای دانشجویانم بودم که به سایت شما برخوردم.

            ثالثاً اگر هدف شما و همکاران محترمتان ایجاد فضای علمی و آموزشی مدرن است (که قطعاً همینطور است و کار شما مقدس و مورد احترام می باشد) ضروری است ضمن احترام به نظرات و تلاش برای بهبود مستمر و رفع نواقص، با پرهیز از نگاه بالادستی، به چالشهای علمی بعنوان فرصتی برای ارتقاء سطح علمی و جذب مخاطبین و هواداران علاقمند نگاه کنید.

            موفق باشید

            • از توجه و دقت شما ممنونم.
              در خصوص استفاده از آموزش‌ها، موسسه‌ها و آموزشگاه‌های فارسی زبان زیادی از سورس دیجی اسپارک استفاده می‌کنند و دارای حساب کاربری ویژه در فروشگاه هستند. شما هم آزاد هستید از این سورس رایگان استفاده بفرمایید. از اینکه از دیجی اسپارک حمایت می‌کنید سپاسگزارم.

  • سلام
    این آموزش کامل، جامع و بسیار با لحن ساده ای نوشته شده، از اینکه سایتتان به فکر رشد جوانان و پیشرفتشان است، بسیار باید تشکر کرد.
    موفق باشید.

  • سلام. با تشکر از مطالب آموزشی و کاربردی دیجی اسپارک.
    به نظرم سطر ۲۵ کد باید حذف شود، چون در آن واحد در هر یک از طرفین چپ و راست، حداقل یک چراغ باید روشن باشد در حالی که در ۵ ثانیه ای که چراغ زرد سمت راست روشن است(سطور ۲۷ و ۲۸) هیچ چراغی در سمت چپ روشن نیست.

    • سلام
      از توجه شما ممنونم.
      به نکته دقیقی اشاره کردید و کاملا صحیح است. دقت داشته باشید کدها قابل تعمیم است و می‌توان تغییرات بسیاری در آن ایجاد کرد.

  • سلام
    من این پروژه رو شروع کردم. از ۱۲ تا led و ۴ تا سنسور ultrasonic استفاده میکنم.
    میخداستم بدونم که از پورت های آنالوگ A میشه مثل دیجیتال استفاده کرد؟؟

    • سلام
      هر دو پورت بر اساس جا به جایی ولتاژ عمل می‌کنند و تفاوت در دامنه ولتاژ است. اساسا سوال شما منطقی نیست و باید مشخص کنید برای چه نوع کاربری نیاز به استفاده از آن دارید.