初學者arduino程式設計:紅綠燈控制器專案教程

建立一個Arduino交通燈控制器可以幫助你發展基本的編碼技能!我們讓你開始。...

Arduino紅綠燈是一個有趣的小項目,你可以在一個小時內建成。下面介紹如何使用Arduino構建自己的電路,以及如何為高級變體更改電路。

arduino-traffic-light-featured

如果您願意將本教程作為視頻觀看,我們將為您介紹:

你需要什麼來建立一個arduino交通燈控制器

除了基本的Arduino,您還需要:

  • 1 x 10k歐姆電阻器
  • 1個按鈕開關
  • 6 x 220歐姆電阻器
  • 試驗板
  • 連接線
  • 紅色、黃色和綠色LED

只要有足夠的引腳,幾乎所有的Arduino都會為這個項目工作。如果您不確定您需要什麼型號,請務必閱讀我們的Arduino購買指南。您的Arduino入門套件中可能已經有這些部件。

arduino紅綠燈:基礎

讓我們從小事做起。一個基本的,單一的紅綠燈是一個很好的開始。電路如下:

Circuit diagram for basic Arduino traffic light

將每個LED的陽極(長腿)連接到數字管腳8、9和10(通過220歐姆電阻器)。將陰極(短腿)連接到Arduino的接地上。

arduino紅綠燈代碼

從定義變量開始,這樣您就可以通過名稱而不是數字來尋址燈光。開始一個新的Arduino項目,從以下幾行開始:

int red = 10;int yellow = 9;int green = 8;

接下來,讓我們添加setup函數,您將在其中配置紅色、黃色和綠色LED作為輸出。由於您已經創建了表示管腳編號的變量,現在可以改為按名稱引用管腳:

void setup(){ pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT);}

pinMode函數配置Arduino以使用給定的引腳作為輸出。你必須這樣做,你的發光二極管的工作。現在來看看紅綠燈的實際邏輯。這是你需要的密碼。在變量定義和設置函數下面添加以下內容:

void loop(){ changeLights(); delay(15000);}void changeLights(){ // green off, yellow on for 3 seconds digitalWrite(green, LOW); digitalWrite(yellow, HIGH); delay(3000); // turn off yellow, then turn red on for 5 seconds digitalWrite(yellow, LOW); digitalWrite(red, HIGH); delay(5000); // red and yellow on for 2 seconds (red is already on though) digitalWrite(yellow, HIGH); delay(2000); // turn off red and yellow, then turn on green digitalWrite(yellow, LOW); digitalWrite(red, LOW); digitalWrite(green, HIGH); delay(3000);}

將此代碼上載到Arduino,然後運行(確保從Tools>board and Tools>port菜單中選擇正確的板和端口)。你應該有一個每15秒改變一次的工作紅綠燈,像這樣(加速):

Arduino traffic light in action

我們來分解一下代碼。changeLights函數執行所有的艱苦工作。這將使紅綠燈旋轉通過黃色和紅色,然後返回綠色。在循環函數中調用時,Arduino將永遠運行此代碼,每次暫停15秒。

changeLights功能包括四個不同的步驟:

  • 綠色開,黃色關
  • 黃色關閉,紅色打開
  • 黃色亮,紅色亮
  • 綠色開,紅色關,黃色關

這四個步驟複製了在實際交通信號燈中使用的過程。對於每個步驟,代碼都非常相似。使用digitalWrite打開或關閉相應的LED。這是一個Arduino函數,用於將輸出引腳設置為高(on)或低(off)。

啟用或禁用所需的LED後,延遲會使Arduino等待給定的時間。在這種情況下是3秒鐘。

更深入:arduino人行橫道

既然你知道了基礎知識,那就讓我們改進一下吧。增加一個按鈕,讓行人隨時可以改變燈光:

Circuit diagram for Arduino pedestrian crossing

請注意紅綠燈與上一個示例完全相同。將按鈕連接到數字針腳12。你會注意到開關上有一個高阻抗的10k歐姆電阻器,你可能想知道為什麼。這是一個下拉電阻器。

開關可以讓電流流動,也可以不讓電流流動。這看起來很簡單,但在邏輯電路中,電流應該總是以高或低的狀態流動(記住,1或0,高或低)。你可以假設一個沒有被按下的按鈕開關會處於低電平狀態,但事實上,它被稱為“浮動”,因為根本沒有電流被吸引。

在這種浮動狀態下,可能會出現錯誤讀數,因為它會隨著電氣干擾而波動。換句話說,浮動開關既不能提供可靠的高讀數,也不能提供可靠的低讀數。下拉電阻器在開關閉合時保持少量電流流動,從而確保準確的低狀態讀數。

在其他邏輯電路中,你可能會發現一個上拉電阻代替,這工作原理相同,但反過來,確保特定的邏輯門默認為高。

現在,在代碼的循環部分,不是每15秒改變一次燈,而是讀取按鈕開關的狀態,只在激活時改變燈。

arduino人行橫道規範

首先添加一個新變量來存儲按鈕pin:

int button = 12; // switch is on pin 12

現在,在setup函數中,添加一個新行將開關聲明為輸入。添加一條線以將紅綠燈設置為綠色舞臺。如果沒有這個初始設置,它們將關閉,直到第一次運行changeLights。

pinMode(button, INPUT);digitalWrite(green, HIGH);

將整個循環函數改為以下內容:

void loop() { if (digitalRead(button) == HIGH){ delay(15); // software debounce if (digitalRead(button) == HIGH) { // if the switch is HIGH, ie. pushed down - change the lights! changeLights(); delay(15000); // wait for 15 seconds } }}

應該可以了。您可能想知道為什麼按鈕檢查會發生兩次(digitalRead(button)),間隔很小的延遲。這是去抖動。就像按鈕的下拉電阻一樣,這個簡單的檢查可以阻止代碼在按下按鈕時檢測到輕微的干擾。

在if語句中等待15秒,交通燈至少在這段時間內不能改變。15秒後,循環重新啟動。每次重新啟動循環時,它都會再次讀取按鈕的狀態,但如果沒有按下,if語句將永遠不會激活,指示燈也不會更改,程序將再次重新啟動。

下面是它的樣子(加速):

Arduino pedestrian crossing in action

帶交叉口的arduino紅綠燈

讓我們試試更高級的型號。將電路改為有兩個紅綠燈,而不是人行橫道:

Cricuit diagram for Arduino traffic lights with junction

將第二個紅綠燈連接到數字針腳11、12和13。

帶交叉口的arduino紅綠燈代碼

首先,將新的紅綠燈管腳分配給變量,並將其配置為輸出,如第一個示例中所示:

// light oneint red1 = 10;int yellow1 = 9;int green1 = 8;// light twoint red2 = 13;int yellow2 = 12;int green2 = 11;void setup(){ // light one pinMode(red1, OUTPUT); pinMode(yellow1, OUTPUT); pinMode(green1, OUTPUT); // light two pinMode(red2, OUTPUT); pinMode(yellow2, OUTPUT); pinMode(green2, OUTPUT);}

現在,更新循環以使用第一個示例中的代碼(而不是人行橫道):

void loop(){ changeLights(); delay(15000);}

同樣,所有的工作都是在changeLights功能中執行的。此代碼不會變為紅色>紅色>黃色>綠色,而是交替切換紅綠燈。一個在綠色,另一個在紅色。代碼如下:

void changeLights(){ // turn both yellows on digitalWrite(green1, LOW); digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); delay(5000); // turn both yellows off, and opposite green and red digitalWrite(yellow1, LOW); digitalWrite(red1, HIGH); digitalWrite(yellow2, LOW); digitalWrite(red2, LOW); digitalWrite(green2, HIGH); delay(5000); // both yellows on again digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); digitalWrite(green2, LOW); delay(3000); // turn both yellows off, and opposite green and red digitalWrite(green1, HIGH); digitalWrite(yellow1, LOW); digitalWrite(red1, LOW); digitalWrite(yellow2, LOW); digitalWrite(red2, HIGH); delay(5000);}

下面是它的樣子(加速):

Arduino traffic light with junction in action

arduino紅綠燈下一步

今天就這些。您對Arduino LED和按鈕的新理解適用於各種不同的項目。如果你想擴大這些交通燈,為什麼不建立一個四路(或更多)交叉口,完成許多人行橫道,行人交通燈?你可以編程許多不同的Arduino板容易!

或者為什麼不擴展一個更大的項目,如這個DIY MIDI控制器或與Xod的Arduino機器人你的新技能?您還可以使用VS代碼和PlatformIO查看Arduino編碼。

圖片來源:androsvector/Shutterstock

  • 發表於 2021-03-18 03:37
  • 閱讀 ( 51 )
  • 分類:DIY

你可能感興趣的文章

6個最佳arduino替代微控制器

...腳佈局相結合,你就會明白為什麼許多人認為這些微型微控制器是一個強大的替代品。 ...

  • 發佈於 2021-03-11 16:53
  • 閲讀 ( 72 )

今年你能做的7個arduino聖誕專案

也許你最近收到了一個Arduino初學者工具包作為禮物,或者你一直聽說修補匠有一個很棒的愛好,你想嘗試一下,或者你是一個Arduino專業人士,只是需要一些有趣的想法來度過假期。如果是這樣,你來對地方了。 ...

  • 發佈於 2021-03-12 03:34
  • 閲讀 ( 62 )

你現在可以做10個預算的arduino星球大戰專案

... 在本文中,我們將介紹一些基於Arduino的星球大戰專案,你可以在預算。這些專案有的只花了幾美元,有的甚至高達40美元。我們還加入了一些更大專案的連結,雖然沒有一個專案可以說是預算意識強,但...

  • 發佈於 2021-03-12 05:05
  • 閲讀 ( 52 )

6個顯示器從arduino輸出資料

所以,你有一個Arduino。你已經學會了一些基礎知識,也許你已經按照初學者指南開始了。接下來呢? ...

  • 發佈於 2021-03-12 19:42
  • 閲讀 ( 56 )

你需要了解的12個樹莓皮音樂專案

...duino更適合你的風格,為什麼不看看如何用Arduino**一個MIDI控制器——它是這些Pi音樂專案的完美伴侶! ...

  • 發佈於 2021-03-12 21:52
  • 閲讀 ( 51 )

6種將arduino連線到android的簡單方法

Arduino板和類似的微控制器使創造力比以往任何時候都更容易獲得。無論你是控制LED燈帶,自動化你的家,甚至保護你的財產,這些小奇蹟是大多數DIY電子產品的核心。 ...

  • 發佈於 2021-03-12 23:13
  • 閲讀 ( 61 )

關於arduino你一直想知道的10件事

Arduino是你能學到的最好的極客愛好之一,因為它涉及到一點點東西:電路、編碼、自己動手、解決問題、創造力等等。但即使你沒有任何這方面的經驗,你仍然應該學習Arduino——即使只是基礎知識。 ...

  • 發佈於 2021-03-13 02:49
  • 閲讀 ( 55 )

作為一個arduino初學者不要犯的10個錯誤

Arduino板,以及隨之而來的許多價格合理的微控制器,永遠改變了人們的電子愛好。曾經是超級極客的領域,擁有廣泛的電子和計算知識,現在所有人都可以使用。 ...

  • 發佈於 2021-03-13 03:20
  • 閲讀 ( 52 )

arduino nano利弊:最便宜的arduino值得嗎?

...奈米是一個多功能板適合幾乎所有DIY電子專案。這些微型控制器使緊湊的DIY硬體開發比以往任何時候都更適合更多的人。 ...

  • 發佈於 2021-03-13 04:51
  • 閲讀 ( 53 )

如何用arduino遙控你的家,5個diy專案

...何工作的基礎知識,並給出一些任何人都能做的簡單DIY Arduino專案的例子。 ...

  • 發佈於 2021-03-13 11:21
  • 閲讀 ( 57 )