Arduino專案:使用被動式蜂鳴器

在這個專案中,我們將使用Arduino來通過被動式蜂鳴器產生聲音。 像我們在主動式蜂鳴器的例子中所做的那樣,將蜂鳴器連接到線路,然後連接到Arduino。 蜂鳴器有一個“+”極,我使用紅色線連接(這是一個好習慣)。 然後將“-”線接地到Arduino上,將“+”線接到數字輸出引腳上,在這個例子中我選了8號引腳: 現在我們切換到Arduino程式。 你可以像之前使用被動式蜂鳴器時一樣,使用digitalWrite()來生成聲音,它也能正常工作。 但是Arduino語言還提供了另一個非常適合與被動式蜂鳴器一起工作的函數:tone()。 使用tone()我們可以在蜂鳴器引腳上播放一個指定頻率的聲音,並指定持續時間。 範例: int duration = 500; void setup() { } void loop() { tone(8, 1400, duration); delay(200); tone(8, 800, duration); delay(200); tone(8, 1800, duration); delay(200); tone(8, 600, duration); delay(200); } 你可以使用tone()來進行很多花式的操作,比如播放實際的歌曲。 這個程式碼是Arduino例程的一部分,播放了一首小曲,聽起來比我上面亂弄的聲音好得多: /* Melody Plays a melody circuit: - 8 ohm speaker on digital pin 8 created 21 Jan 2010 modified 30 Aug 2011 by Tom Igoe This example code is in the public domain....

Arduino專案:使用電位計控制伺服馬達

這個專案中,我們將學習如何使用電位計控制伺服馬達。 透過類比輸入腳位,我們可以讀取電位計的旋轉值,範圍從0到1023。 我們將利用這些數值將伺服馬達從0°旋轉到180°。 首先我們需要建立電路,然後撰寫程式碼。 將電源腳位5V和GND連接到麵包板的「+」和「-」行上: 然後將這些訊號連接至電位計的輸入腳位: 將輸出腳位連接至類比I/O腳位A0: 接下來,連接伺服馬達。將棕色線連接至0V,紅色線連接至5V,橙色線連接至腳位9: 現在切換到Arduino IDE以撰寫程式。 首先我們需要讀取電位計的輸入: void setup() { Serial.begin(9600); } void loop() { int value = analogRead(A0); Serial.println(value); } 將此程式上傳至Arduino,您應該可以在序列監視器中看到從0到1023的輸出。 現在我們需要將這個0-1023的數值重新映射為0-180,以供伺服馬達使用。 我們可以使用map()函式來實現: value = map(value, 0, 1023, 0, 180); 接下來,我們將使用一個函式庫。 在Arduino IDE的「Sketch」選單中,選擇「Include Library」,然後選擇「Servo」: 這將在檔案頂部加入#include <Servo.h>這一行。 Servo函式庫是一個內建的函式庫,您可以透過開啟「Tools」和「Manage libraries…」來取得更多關於此函式庫的資訊。 這會開啟Library manager: 在搜尋方塊中搜尋「servo」,您應該會看到相關結果: 點擊「More info」連結,這會在您的瀏覽器中開啟https://www.arduino.cc/reference/en/libraries/servo/這個頁面。 這是獲取任何函式庫相關資訊的方式,不僅僅是這個函式庫,知道如何獲取更多資訊是很有用的。 該頁面列出了一些使用資訊、函式庫暴露的方法以及一些範例: Arduino的好處是它是完全開源的。在這種情況下,您可以在https://github.com/arduino-libraries/Servo找到該函式庫的原始碼,因此您可以撰寫自己修改後的版本,或者僅僅了解其內部運作方式。 我們將使用兩個方法:attach()和write()。 使用attach()函式告訴Servo使用哪個端口。 使用write()函式將伺服馬達移動到指定的角度(參數範圍為0到180)。 但首先我們需要宣告一個Servo物件。我們在setup()函式之前這麼做,使用Servo myservo;: #include <Servo.h> Servo myservo; 然後在setup()函式中,我們將伺服馬達連接至I/O腳位9: #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } 最後在loop()函式中,我們呼叫myservo....

Arduino專案:讀取數位輸入

在這個專案中,您將學習使用digitalRead()函數從數位I/O腳位讀取數據。 Arduino Uno板上的數位I/O腳位通常位於USB連接埠一側並可能在腳位上有標示為數位的標籤,就像我的情況一樣: 這些腳位的編號從0到13,但除非沒有足夠的腳位,否則您幾乎不會使用腳位0和1,因為它們用於串列通信(請參閱印刷在腳位上的rx和tx標籤)。 首先,我們將建立電路,然後轉到電腦上的Arduino IDE。 這個電路非常簡單。我們將使用一個按鈕,其中一個引腳連接到Arduino的GND,另一個引腳連接到數位腳位#3(任何其他數位腳位均可)。 我們將每秒檢測腳位#3的電壓水平。我們將定義腳位號碼為常數以避免在代碼中使用神奇數字: #define BUTTON_PIN 3 在setup()函數中,我們呼叫pinMode()將此腳位設置為輸入腳位,並使用INPUT_PULLUP選項: pinMode(BUTTON_PIN, INPUT_PULLUP); 需要使用INPUT_PULLUP選項,因為默認情況下,如果沒有任何東西連接到腳位上(如果按鈕未點擊,電路是斷開的,就像沒有任何東西連接到腳位上),輸入腳位是浮動的,這意味著它容易受到干擾,可能會隨機選擇0或1。 在電路中,我們可以添加上拉電阻或下拉電阻,但更簡單的方法是將INPUT_PULLUP標誌傳遞給Arduino。如果沒有連接任何東西,它將默認為1。 然後,在loop()函數中,我們使用digitalRead()函數獲取輸入腳位的值: int value = digitalRead(BUTTON_PIN); 這個值可以是0或1,取決於輸入。 如果按下按鈕,Arduino將檢測到0。 如果未按下按鈕,Arduino將檢測到1。 您也可以使用常數LOW(對應0)和HIGH(對應1)。 這個值可以打印到串行輸出上,就像在這個程式中一樣: #define BUTTON_PIN 3 void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); Serial.begin(9600); } void loop() { int value = digitalRead(BUTTON_PIN); Serial.print(value); delay(1000); } 保存並上傳程式到Arduino,然後在Arduino IDE中點擊右上角的“Serial Monitor”按鈕: 它將顯示串行接口監視器。請確保底部調整到9600波特率,您應該會看到一堆1,直到您按下按鈕一秒鐘,此時您應該會得到一個0。 我们还可以点亮一个LED。我们可以将LED添加到电路中,但我们也可以使用Arduino Uno板上的內建LED,它映射到数字I/O腳位#13。我们可以这样编写程序: #define BUTTON_PIN 3 void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(13, OUTPUT); digitalWrite(13, LOW); } void loop() { int value = digitalRead(BUTTON_PIN); digitalWrite(13, value); } 实时反映按钮输入值,无需等待1秒。之前我们这样做是为了避免向串行接口写入过多的值,使其难以管理。...

Arduino項目:analogWrite()函數和PWM

我們使用由Arduino語言提供的analogWrite()函數來輸出模擬信號。 好吧,其實不是真正的模擬信號,而是**PWM(脈衝寬度調變)**信號。 以Arduino Uno為例,你會注意到有6個類比輸入引腳A0-A5,但沒有類比輸出引腳。 我們使用數字輸出引腳以特定方式來模擬類比輸出。 PWM意味著脈衝寬度調變,這是一種我們從數字設備模擬類比輸出的技術。我們基本上會發出高電平信號一小段時間,然後發出低電平信號,並且我們不斷重複這個過程,速度非常快。類比設備將根據週期的平均值。高電平的時間越短,平均值越小。 要模擬0V的類比信號,使用: analogWrite(0) 要模擬高電平類比信號(Arduino Uno上的5V),使用: analogWrite(255) 介於這兩個值之間的任何值都是在這兩個值之間的值。2.5V的類比信號是analogWrite(127)。 這適用於輸出5V的設備。一些Arduino設備(例如Arduino MKR 1010 WiFi)最大輸出3.3V,因此這些值將適應輸出引腳可以發出的最高電壓。 並非所有數字輸出引腳都可以做到這一點。特別是我們可以使用analogWrite()的引腳上標有波浪號〜。在Arduino Uno上,我們可以使用3、5、6、9、10、11引腳。 在Arduino MKR 1010 Wifi上,我們可以使用0-8、10、11、A3、A4引腳。 在每個板的官方規格中,您將找到PWM引腳的列表。

Arduino項目:使用主動蜂鳴器

在這個項目中,我們將使用Arduino來發出聲音,並使用一個主動蜂鳴器。 首先將蜂鳴器連接到一根電線上: 蜂鳴器有一個“+”極,我使用紅色電線連接該極(這是一個好的習慣)。 然後將“-”電線連接到Arduino的GND引腳,將“+”電線連接到數字輸出引腳,這裡我選擇了引腳#9: 現在切換到Arduino程序。為了發出聲音,我們需要向蜂鳴器的“+”引腳寫入HIGH值,延遲一小段時間,例如一毫秒,然後在同一引腳上寫入LOW值: int delay_ms = 5; int buzzer_pin = 9; void setup() { pinMode(buzzer_pin, OUTPUT); } void loop() { digitalWrite(buzzer_pin, HIGH); delay(delay_ms); digitalWrite(buzzer_pin, LOW); delay(delay_ms); } 將程序加載到Arduino上,蜂鳴器將發出低音。 嘗試更改delay_ms變量的值以改變聲音。 然後,您可以通過像這樣的程序使其播放不同的聲音: int buzzer_pin = 9; void setup() { pinMode(buzzer_pin, OUTPUT); } void play(int ms, int delay1, int delay2) { for (int i = 1; i <= ms; i++) { digitalWrite(buzzer_pin, HIGH); delay(delay1); digitalWrite(buzzer_pin, LOW); delay(delay2); } } void loop() { play(100, 1, 1); play(100, 2, 2); play(100, 1, 1); play(100, 2, 2); play(100, 1, 1); play(50, 2, 1); play(100, 3, 2); play(100, 4, 4); }

Arduino項目:讀取類比輸入

在這個項目中,我們將使用一個電位計並將其連接到Arduino的類比輸入引腳,並編寫一個程式來讀取當前的值。 在Arduino的第2個項目中,我們學會了如何讀取數字輸入。讀取到的值可以是 0 或 1,LOW 或 HIGH。 這可以通過數字I/O引腳來完成,引腳編號從 0 到 13。 類比I/O引腳以 A 開頭。在Arduino Uno上,您可以找到6個類比I/O引腳 A0 / A5: 在Arduino MKR 1010 WiFi上,您有7個類比I/O引腳,從 A0 到 A6: 不同的板子擁有不同數量和位置的引腳。這些引腳可以配置為類比輸入或類比輸出。 數字信號只能是高或低。類比信號可以保持一系列的值,在Arduino的情況下,它的範圍從 0 到 1023,對應著輸入端的電壓從0V到5V的程度。 各種傳感器都會提供給我們類比值。想想溫度傳感器、距離傳感器、聲音傳感器、運動傳感器…我們可以使用Arduino讀取它們的數值,並根據數據決定要做什麼。 我們可以使用一個名為 analogRead() 的函數來實現。 但讓我們先建立一個小電路。 在項目“使用電位計建立一個LED調光器”中,我們建立了一個簡單的電路,使用一個電位計控制LED光。現在讓我們複製該電路的一部分,除了現在我們將Arduino放在那裡。 如果將電位計完全向左轉動,我們讀取到的值應該是 0。完全向右轉動時,我們讀到的值應該是 1023,在中間位置時應該是 512。 以下是使用一個10kΩ電位計構建的電路示意圖: 我們從Arduino的電源輸出引腳獲得0V和5V,並將它們連接到麵包板。然後我們將這些電壓級別連接到電位計的輸入引腳,並獲得輸出引腳,將其連接到類比引腳 A1: 我們編寫一個程式從該引腳讀取,並將讀取到的值打印到串行接口,這樣我們就可以從Arduino IDE的串行監視器上讀取它: void setup() { Serial.begin(9600); } void loop() { int value = analogRead(A1); Serial.println(value); } 需要注意的是,我沒有將 A1 引腳明確設置為輸入引腳,因為引腳默認情況下是輸入的。如果我想寫入該引腳,我需要在 setup() 中使用 pinMode() 进行設置。 以下是我們的程式運行時的結果。當電位計完全向左轉動時,我們讀到的值是 0: 當電位計完全向右轉動時,我們讀到的值是 1023(有時由於處理類比值並且不是100%精確,可能是 1022):...

electronics-components-dht11-temperature-sensor

#電子元件:DHT11溫濕度傳感器 這個傳感器是你學習使用的第一個傳感器之一,因為每個人都有一個很好的應用:建立室內或室外溫度計。 在這裡,你可以看到它安裝在一個分輔板上: ! ! ! 請注意,該傳感器有4個輸出引腳,但我得到的分輔板只有3個(原因是DHT11的引腳3未連接到任何地方 - 別問我為什麼)。 從左邊開始,保持底部的引腳,我們有: Vdd,正輸入(+) Vss,負輸入(-) 輸出信號 輸出是一個持續4ms的40位序列化信號。 這意味著每4ms傳感器發送一次溫度信息,為了讀取它,我們必須獲取值並將其反序列化。 在Arduino程序中,我們使用由Adafruit維護的DHT Sensor Library(這是存儲庫的鏈接),它使我們可以非常簡單地讀取溫度: ! 你可以使用#include <DHT.h>將其包含,然後通過傳遞傳感器信號引腳和類型(在這種情況下使用常量DHT11)初始化DHT類的對象。 該庫還可以與其他傳感器一起使用,如更精確的DHT22和`DHT21。 然後,你可以調用readHumidity()和readTemperature()方法以``float`變量的方式獲取值。 readTemperature()以攝氏度表示該值,但該庫還提供convertCtoF()方法來獲取華氏值。 該庫還提供了其他方法,例如computeHeatIndex()。我建議你查看GitHub上的DHT.h頭文件源代碼(https://github.com/adafruit/DHT-sensor-library/blob/master/DHT.h)。 這個簡單的Arduino程序從DHT11上的信號引腳連接到數字引腳#2,並將其打印到串行監視器上: #include <DHT.h> DHT dht(2, DHT11); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("無法讀取數值"); return; } Serial.println((String)"濕度:" + h + "%,溫度:" + t + "C"); } ! ! 濕度:56.00%,溫度:20.20C 濕度:56....

Johnny Five,如何與LCD屏幕配合工作

本文是Johnny Five系列文章的一部分。請參閱第一篇文章。 LCD屏幕是一個很酷的組件,因為我們可以用它在各種不同的創意項目中使用。 這個我拿到的是名叫1602A的。 它有16個引腳。我按照以下方式連接它: 引腳1連接到0V 引腳2連接到控制背光的電位器 引腳3連接到5V 引腳4連接到Arduino的引腳7 引腳5連接到0V 引腳6連接到Arduino的引腳8 引腳11連接到Arduino的引腳9 引腳12連接到Arduino的引腳10 引腳13連接到Arduino的引腳11 引腳14連接到Arduino的引腳12 引腳15連接到5V 引腳16連接到0V 電位器有3個腳。中間的腳連接到LCD屏幕,左邊的腳連接到0V,右邊的腳連接到5V。 接線就完成了。 創建一個新的lcd.js文件並載入以下代碼: const { Board, LCD } = require("johnny-five"); const board = new Board(); board.on("ready", function() {}); 現在從LCD類初始化一個新的LCD對象。 確切的初始化程序取決於所使用的顯示器的類型。在我的情況下,是這樣的: const lcd = new LCD({ pins: [7, 8, 9, 10, 11, 12] }); 最後,調用print()方法顯示一個字符串: const { Board, LCD } = require("johnny-five"); const board = new Board(); board.on("ready", function() { const lcd = new LCD({ pins: [7, 8, 9, 10, 11, 12] }); lcd....

Johnny Five,如何點亮一個LED

學習如何使用JavaScript與電子設備進行通訊 本文是Johnny Five系列的一部分。請先看第一篇文章。 首先創建一個文件夾並初始化npm: npm init -y 然後在本地安裝Johnny Five: npm install johnny-five 現在創建一個名為app.js的文件,內容如下: const { Board, Led } = require("johnny-five") const board = new Board() board.on("ready", () => { const led = new Led(13) led.blink() }) 這個程式通過調用new Board()來初始化一個新的開發板。 當開發板準備就緒時,board對象會觸發ready事件,我們可以在回調函數中執行我們的應用程序。 在這個簡單的例子中,我們通過初始化一個新的Led對象在引腳13上初始化一個新的LED,然後使其閃爍(不斷開關)。 Led對象和Board對象是Johnny Five庫提供的許多功能之一。 Arduino Uno開發板上的13號引腳是連接到內置LED的引腳。 現在運行node app.js來執行程序: 你應該可以看到LED不斷開關! 你也可以通過將負極引腳連接到GND(0V),將正極引腳連接到引腳13,以連接一個真實的LED: 注意我使用了一個電阻器來限制LED通過的電流量。 要停止運行程序,請按兩次ctrl-C:

介紹Arduino

對Arduino電子平台的總覽 Arduino是業餘電子生態系統中的一項突破性技術。 所謂的突破性並不是指它引入了一個強大的微處理器或任何相關的技術。 它實際上創造了整個行業,一個運動,在此之前並不存在。 我所說的是創客運動。在Arduino之前,電子學並不像今天這樣有趣且容易學習,周圍也沒有太多資源。我在技術高中和米蘭理工學院學習了多年的電子學,但那是一些非常嚴肅、理論性的東西,幾乎沒有程式編碼和樂趣。 Arduino誕生於意大利,來自Ivrea,這個城市也因為創造了1965年的第一台個人電腦的公司Olivetti而聞名。 Arduino從一開始就特別設計成一個學習設備。這一個簡單的事實影響了原始Arduino核心團隊所做的幾個設計選擇。 我不會深入探討歷史細節,但你可以在維基百科上自由查看它們。 Arduino的關鍵成功因素在於它完全是開源的,並且它是最早一批開源項目。硬體是開源的,軟體也是開源的。 例如,最新的Arduino Uno板,Arduino Uno Wifi Rev2的電路圖可以在線上找到。這很酷,因為你可以自己建立Arduino,如果你想的話。公司可以製造和銷售自己的Arduino克隆版,而且他們已經這樣做了。我第一個Arduino是從一家叫做Elegoo的公司買的,他們提供了令人驚喜而又便宜的套裝,裡面有很多元件和教程可以讓你入門。 此外,周圍有一個完整的工具、庫和教育資源生態系統,使它取得了巨大的成功。在此之前,像這樣的開發板要麼很難獲得,材料也太過專業,更適合技術人員而不是學生。Arduino改變了一切。官方網站https://www.arduino.cc/上充滿了學習材料、示例、教程,還有一個活躍的項目中心和社區論壇。此外,Arduino還建立了一個IoT雲平台,讓你可以將設備連接到網絡。 隨著時間的推移,Arduino團隊推出了幾款不同的開發板:Arduino Uno、Arduino Mega、Arduino Diecimila、Arduino Robot、Arduino Nano、Arduino Micro、Arduino Leonardo、Arduino MKR等等。 每個開發板都有自己的用例。例如,Arduino Nano和Arduino Micro非常適合物聯網、可穿戴設備和小型裝置。Arduino Mega具有比其他任何板子更多的記憶體和I/O引腳。 截至今天,Arduino Uno開發板是目前最受歡迎的學習板,它包含在許多套件中,並且被用於大量的教程中。 Arduino MKR WiFi 1010開發板在物聯網中得到了廣泛的應用,因為它具有內置的WiFi和藍牙功能。 Arduino沒有操作系統,它一次只運行一個程序。 你不必擔心任何其他事情,因為Arduino上除了你的程式之外沒有其他東西。 大多數Arduino開發板甚至沒有網絡連接,出廠時如此。有些開發版是有網絡連接的,比如Arduino Uno WiFi rev 2或Arduino MKR WiFi 1010。 程序加載之後,只要Arduino通過USB或電源端口通過交流-直流電源線或電池供電,它就會啟動。 這意味著一旦你加載了程序,你可以將Arduino放在山上,配備太陽能電池板和電池,它將在有電力的情況下一直運行。 它只能運行為Arduino平台編譯的程序,這主要是指使用Arduino語言編寫的程序,該語言是C++語言的一種帶有一些便利功能的版本,使初學者能夠輕松上手。 但你不僅僅局限於此。如果你可以忍受Arduino連接到計算機的USB端口(或者由樹莓派驅動連接),你可以使用Johnny Five項目在其中運行Node.js代碼,這相當酷。其他語言也有類似的工具,例如pyserial和Gobot。 Arduino有什麼用處? 首先,它非常適合學習電子學。 此外,當你想為Arduino編譯一個程序,連接一個電池或電源連接器並將其放置在某個地方運行,並且與傳感器和其他與現實世界接口的有趣的東西進行玩耍時,Arduino十分強大。 例如,我會使用Arduino來為我的自動澆水植物、追蹤室外溫度或控制家居自動化設備等等。 在不久的將來,我將製作很多項目,並將在這裡發布教程,以展示我如何構建這些東西。