用arduino做一個buzz wire遊戲

在這個有趣的專案中,我們將學習如何使用Arduino製作buzz wire遊戲。許多需要的零件可以在初學者工具包和房子周圍找到。...

在這個有趣的項目中,我們將學習如何使用Arduino**buzz wire遊戲。許多需要的零件可以在初學者工具包中找到(初學者工具包中有什麼?)在房子周圍。這個項目使用一個Arduino,儘管你幾乎可以使用任何你身邊的微控制器(看看這個5美元的微控制器之間的比較,從中得到一些啟示)。

buzz-wire-game-arduino

查看最終結果--它甚至播放音樂:

你需要什麼

以下是完成此項目所需的核心部分:

  • 1 x Arduino UNO或類似產品。
  • 1個金屬衣架。
  • 2 x 220歐姆電阻器。
  • 1 x試驗板。
  • 1個壓電蜂鳴器。
  • 2個鱷魚夾。
  • 各種熱縮管。
  • 外螺紋到外螺紋連接線。

Elenco TL-6 Alligator Lead Set, 10-Piece, 14 inches BUY NOW ON AMAZON

以下是一些增強構建的可選部分:

  • 1個附加壓電蜂鳴器。
  • 1 x定位銷杆。
  • 1 x四路七段顯示器。
  • 1 x 220歐姆電阻器。
  • 1個瞬時按鈕。
  • 外螺紋到內螺紋連接線。
  • 木板(用於箱子)。
  • 各種木螺絲。

只要有足夠的引腳,幾乎所有的Arduino都能工作。如果你不確定你需要什麼,請看一下這個購買指南。

建造計劃

Arduino Buzzwire Completed

雖然這看起來很複雜,但實際上是一個相當簡單的項目。我將從基本遊戲開始,然後添加其他組件以增加複雜性。根據可用的組件,您可以隨意“選擇”。

核心機械由一個線形狀和一個在把手上的環組成。球員必須在沒有兩個觸摸的情況下引導循環。如果兩觸,電路完成,蜂鳴器發出聲音。當然,可以使用無微控制器構建這個電路,但是在這裡面有什麼樂趣(還有你怎麼才能聽蒙蒂·Python的《飛行馬戲團》主題曲呢?

課程

Arduino Buzzwire Course

這是球員必須引導他們的循環的形狀。這是整個比賽的基礎,所以好好做!我選擇了一小滴,然後是一次大的攀登。將金屬衣架彎曲成您需要的形狀。銅線或銅管同樣工作,儘管衣架可能是最便宜的。

你可能需要戴上手套,用鉗子或錘子把事情弄得完美。用螺栓切割器切掉多餘的部分。留下兩個垂直的支柱,推動通過基地。為了安全起見,你得把切好的部分銼平。最後,切割兩片熱縮管,並將其放置在端部,如下所示:

Arduino Buzzwire Insulation

這將使環路與球場隔離,提供一個起點/終點或安全區。或者,膠帶,甚至吸管將做,如果你沒有任何熱縮管。

現在在課程的一端連接一根電纜。這裡有兩種選擇:要麼焊接,要麼使用鱷魚夾。鱷魚夾是更容易的選擇,但焊接是一個更可靠和長期的選擇。一定要先用砂紙將衣架表面“磨光”,並使用大量的助焊劑。(以前從未焊接過?在這裡學習如何使用。)

根據下一步在底座上鑽的孔的大小,可能需要先將電纜穿過安裝孔。使用兩根絞合在一起的電線將提高耐用性:

Arduino Twisted Wire

使用演練來完成這一點有很大幫助:

Drill Chuck Wire Twisting

基地

Arduino Buzzwire Case

是時候建立基地了。這有助於保持球場在一個直立的位置,以及提供一個地方錨電子到。我用了一些松木邊角料,儘管你可以用房子周圍的任何東西——甚至一個紙板箱。

把三塊切成“n”形。簡單地把這三塊擰在一起。切記先在側件上鑽一個導向孔,以防側件開裂。你可能想在螺絲上鑽埋頭孔(特別是當你要填充然後上漆的時候),我強烈推薦一個埋頭孔鑽頭。如果你沒有一個沉孔工具或鑽孔,一個更大直徑的鑽頭將做的把戲。

鑽出兩個足夠遠的孔,以便課程結束時能坐進去。在底面埋頭,準備膠合。

把手

Arduino Buzzwire Handle

現在是**循環/控制器的時候了。在衣架的一端擰一小塊,形成一個帶有小金屬把手的環。確保將切割邊緣銼平,必要時用膠帶/泡沫覆蓋。

Arduino Buzzwire Loop

這將形成電路的另一半——當這個迴路接觸到路線時,它將完成電路(就像一個開關)。焊接(或使用鱷魚夾)另一個電線底部這個,完全一樣,你以前的課程。

為實際手柄切一小段銷釘。這個金屬環將**這個把手。如果你沒有任何銷釘,你可以用砂帶或砂光機磨圓一塊方形軟木(你也可以用砂紙,但要花很長時間)。

在這個把手上鑽個洞。這需要足夠大,以適應金屬環和電線通過:

Arduino Buzzwire Handle Hole

這是可以做到的支柱演習,雖然這是棘手的。車床可以完美地完成這項工作:

Dowel Lathe Buzzwire Handle

是的,我很清楚這是一臺金屬車床(對任何有興趣的人來說,這是一臺從30年代開始的博利製表車床。我想是3C,但如果你知道更多的話,我很想聽聽你的來信)。

你也可以用圓珠筆的中心刪除。

最後,用熱膠水將電纜和線圈固定在把手上。熱膠將提供一個強大的(但不是永久性的)夾具,所以這是完美的。

結束

將金屬絲層**底座的孔中。別忘了先添加循環/控制器。再次使用熱膠水將基層固定在基層上,方法是按如下方式填充基層底面的沉孔:

Arduino Buzzwire Soldering

電路

這是完整的電路圖。你不必把你的問題弄得這麼複雜——我們把每一部分都分解一下,繼續讀下去。

Arduino Buzzwire Full Circuit

首先,將兩個壓電元件連接到數字管腳10和11。極性並不重要:

Arduino Piezo Circuit

你不必使用兩個壓電元件——我這樣做的唯一原因是當電線接觸時會有更大的嗡嗡聲。將一端連接到數字管腳,另一端連接到接地。

現在**金屬層和把手:

Arduino Buzzwire Circuit

同樣,這兩個線繞哪條線都無關緊要。電路的這一部分完全像一個按鈕或開關——當迴路接觸到球場時,播放器完成電路。確保包含兩個電阻器。

一個電阻器將電路接地(稱為下拉電阻器),確保電路不“浮動”(這允許Arduino檢測電路變化)。另一個電阻器保護Arduino。當兩部分接觸時,+5V進入數字管腳。如果這個電阻不存在的話,就會出現死短路——如果你幸運的話,你的電腦會因為吸取太多電流而斷開USB插座。

將信號線(圖上的紫色)連接到數字針腳9。

接下來,將按鈕連接到數字針腳2:

Arduino Piezo Button Circuit

最後,連接七段式LED顯示屏:

Arduino Seven Segment Circuit

這個特殊的模型來自Seeed。它使用TM1637驅動四個顯示器——這意味著只需要兩個數字管腳。將GND連接到Arduino接地,VCC連接到Arduino+5V。將D10連接到Arduino數字針腳13,將CLK連接到數字針腳12。

代碼

要使此項目正常工作,您需要另外兩個文件。第一個被稱為

pitches.h

. 這個文件只需將註釋名映射到它們的壓電值。這使得編寫一首曲子容易得多,例如,你可以簡單地說“NOTE_uc3”而不是“31”。這是在公共領域,可以在Arduino網站上獲得。按照說明創建一個名為

pitches.h

(或者,將代碼粘貼到現有腳本中)。

接下來,你需要一種方法來在壓電上演奏音符/旋律。AnthonyDigirolamo在Github上的這篇文章包含了您需要的代碼。複製“voidbuzz”和“}}”之間的所有內容並將其粘貼到主文件中。供參考:

void buzz(int targetPin, long frequency, long length) { /* Buzzer example function by Rob Faludi http://www.faludi.com https://gist.github.com/AnthonyDiGirolamo/1405180 */ long delayValue = 1000000/frequency/2; // calculate the delay value between transiti*** //// 1 second's worth of microseconds, divided by the frequency, then split in half since //// there are two phases to each cycle long numCycles = frequency * length/ 1000; // calculate the number of cycles for proper timing //// multiply frequency, which is really cycles per second, by the number of seconds to //// get the total number of cycles to produce for (long i=0; i < numCycles; i++){ // for the calculated length of time... digitalWrite(targetPin,HIGH); // write the buzzer pin high to push out the diaphragm delayMicroseconds(delayValue); // wait for the calculated delay value digitalWrite(targetPin,LOW); // write the buzzer pin low to pull back the diaphragm delayMicroseconds(delayValue); // wait again for the calculated delay value }}

最後一個庫是控制七段顯示,如果不使用,可以跳過此步驟。這個庫被稱為TM1637,由Seeed創建,該公司創建了驅動板。

在Arduino IDE中,轉到“管理庫”(Sketch&gt;Include Library&gt;Manage Libraries)。這會引起圖書館經理的注意。允許它幾秒鐘更新,然後在右上角的搜索框“TM1637”中搜索。將找到兩個庫——您想要的是“TM1637”,而不是“TM1637Display”。選擇,然後單擊“安裝”。

這個庫的最後一個任務——它還沒有完成!目前,庫只能顯示數字0--9和字母A--F。如果這涵蓋了您希望顯示的所有內容,則可以跳過此步驟。如果沒有,則需要修改代碼。放鬆點!這並不像聽起來那麼難,如果可以使用ArduinoIDE編寫代碼,就可以做到這一點。

首先,打開庫文件夾。這將在您的Arduino文件夾中。在Mac OS X上,這是

/Users/Joe/Documents/Arduino/Libraries

. 打開名為TM1637的文件夾。您需要編輯名為

TM1637.cpp

--您可以安全地忽略另一個擴展名為

.h

. 在您最喜歡的文本編輯器(對我來說,這是Sublime text 3)、記事本或Arduino IDE中打開此文件。

修改第三行代碼:

static int8_t TubeTab[] = {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//0~9,A,b,C,d,E,F

對此:

static int8_t TubeTab[] = {/* defaults */0x3f, // 0 0x06, // 10x5b, // 20x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f, // 90x77, // A -- 100x7c, // b -- 110x39, // C -- 120x5e, // d -- 130x79, // E -- 140x71, // F -- 15/* additional */0x174, // h -- 16 0x176, // H -- 17 0x138, // L -- 18 0x15, // M -- 19 0x137, // n -- 20 0x73, // P -- 21 0x67, // q -- 22 0x131, // r -- 23 0x78, // t -- 24 0x240 // - 25};

現在可以保存並關閉此文件。在每個元素之後,註釋描述了這是什麼字符。註釋的下一部分是元素的索引。

是時候開始編寫實際代碼了。首先,包括前面提到的兩個庫:

#include <TM1637.h>#include <pitches.h>

現在創建顯示對象:

TM1637 *_display = new TM1637(12, 13);

如果您不理解語法,請不要擔心--這行告訴Arduino引腳12和13連接到一個七段顯示器,並對其進行適當的配置。

歌曲存儲在

melody

tempo

. 它們包含音樂的所有音符和音符持續時間。如果您想更改音樂,請修改這些數組(雖然這不像粘貼音符值那麼簡單,但計時是音樂中非常重要的一部分)。這個

songState

變量只存儲最後一個播放的音符的位置。這確保旋律從頭到尾播放,而不是前後不一致地跳躍:

int songState = 0; int melody[] = { NOTE_F4,...}int tempo[] = { 8,...}

注意,我已經刪除了數組的內容,請參見下面的完整代碼。

這段代碼是非阻塞的——這意味著Arduino可以同時執行多個任務。有關更多信息,請參閱此說明。定時器是這樣設置的:

unsigned long previousMillis1 = 0;c***t long interval1 = 1500;

變量

previousMillis1

將在稍後階段更新以存儲當前時間。這個

interval1

變量存儲代碼執行之間的等待時間——在本例中為1.5秒。定義為

c***t

,這意味著它是常量並且永遠不會改變--這允許Arduino進一步優化代碼。

內部

setup()

有一些事情正在發生。首先,設置輸入和輸出。必須這樣做,以便Arduino知道與每個引腳連接的是什麼:

pinMode(9, INPUT); // setup circuitpinMode(10, OUTPUT); // setup buzzer 1pinMode(11, OUTPUT); // setup buzzer 2pinMode(2, INPUT); // setup button

現在需要配置顯示器:

_display->set(5); // set brightness_display->point(false); // remove colon_display->init(); // start display

方法

set

,

point

,和

init

都包含在

_display

對象。使用指針(“->”)而不是點來訪問這些。同樣,不要擔心語法(儘管如果你想了解更多,請查找C++指針)。

主循環有兩種遊戲模式:挑戰和自由發揮。自由遊戲允許玩家無限次數地玩。挑戰模式使用

showCountdown

方法。它用這個按鈕來啟動和停止計時器。目前,更改遊戲模式的唯一方法是手動編輯名為

mode

. 看看是否可以添加另一個按鈕來執行此操作,並適當地修改代碼。

這個

buzz

方法播放給它的音符。這與

sing

. 唱法貫穿每個音符並演奏。這個方法是定期調用的,儘管它只會在上次播放後經過足夠的時間播放下一個音符。一旦歌曲結束,它會將歌曲重置為第1節(songState=14)。您可以將其設置為零,以便在歌曲開始時就開始播放,但是這樣做的原因是為了跳過介紹。在Arduino通電後播放一次介紹,然後不再播放。

這個

showFree

showPlay

方法只需在顯示器上寫上“FrEE”和“PLAY”。注意free中的“r”是小寫的,而其他字符都是大寫的。這是七段顯示的限制之一。它們不能顯示字母表中的每個字母,它們可以顯示的一些字符必須是混合大小寫的。

這個

toggleFreePlay

方法在“自由”和“播放”之間閃爍顯示。同樣,它以一種非阻塞的方式來實現這一點。

另一個有用的方法是

showNumber

. 這會將數字寫入顯示器的中間兩個字符,如下所示:

Arduino Buzzwire Display

顯示器不夠聰明,不知道如何顯示大量的數字,它必須明確告訴做什麼。此方法使用一些簡單的邏輯來顯示每個字符上的適當數字。

最後使用的方法是

showCountdown

. 這個計數器從20開始,每秒鐘減少一個。如果該值為零,它會發出三次蜂鳴,表示時間已過。

下面是所有代碼:

#include <TM1637.h> // include display library#include <pitches.h> // include pitchesTM1637 *_display = new TM1637(12, 13); // create display object, 12 = CLK (clock), 13 = D10 (data)// musicint songState = 0;int melody[] = { NOTE_F4, NOTE_E4, NOTE_D4, NOTE_CS4, NOTE_C4, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_A3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_C4, 0, NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_A3, NOTE_F4, NOTE_C4, NOTE_C4, NOTE_A3, NOTE_AS3, NOTE_AS3, NOTE_AS3, NOTE_C4, NOTE_D4, 0, NOTE_AS3, NOTE_G3, NOTE_G3, NOTE_G3, NOTE_FS3, NOTE_G3, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_AS3, NOTE_A3, NOTE_A3, NOTE_A3, NOTE_AS3, NOTE_C4, 0, NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_A3, NOTE_A4, NOTE_F4, NOTE_F4, NOTE_C4, NOTE_B3, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_G4, 0, NOTE_G4, NOTE_E4, NOTE_G4, NOTE_G4, NOTE_FS4, NOTE_G4, NOTE_D4, NOTE_G4, NOTE_G4, NOTE_FS4, NOTE_G4, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, 0};int tempo[] = { 8, 16, 8, 16, 8, 16, 8, 16, 16, 16, 16, 8, 16, 8, 3, 12, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 4, 12, 12, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 4, 12, 12, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 4, 16, 12, 17, 17, 17, 8, 12, 17, 17, 17, 8, 16, 8, 16, 8, 16, 8, 1 };// non blocking setup// free playunsigned long previousMillis1 = 0; // time words last changedc***t long interval1 = 1500; // interval between changing// musicunsigned long previousMillis2 = 0; // time last changedc***t long interval2 = 100; // interval between notesint displayStatus = 0; // keep track of what's displayedint mode = 0; // keep track of game mode -- change to 0 or 1 for different modesbool countdown = false;unsigned long previousMillis3 = 0; // time last changedc***t long interval3 = 1000; // interval between countdownint count = 20; // challenge mode timervoid setup() { // put your setup code here, to run once: pinMode(9, INPUT); // setup circuit pinMode(10, OUTPUT); // setup buzzer 1 pinMode(11, OUTPUT); // setup buzzer 2 pinMode(2, INPUT); // setup button _display->set(5); // set brightness _display->point(false); // remove colon _display->init(); // start display}void loop() { // put your main code here, to run repeatedly: if(mode == 0) { // challenge mode if(digitalRead(2) == HIGH) { delay(25); if(digitalRead(2) == HIGH) { countdown = true; // stop the countdown } else { countdown = false; // stop the countdown } } if(countdown) { showCountdown(); // advance countdown } } else { // free play toggleFreePlay(); } if(digitalRead(10) == HIGH) { delay(25); if(digitalRead(10) == HIGH) { while(digitalRead(10) == HIGH) { buzz(11, NOTE_B0, 1000/24); } } } else sing();}void showCountdown() { // countdown the time remaining unsigned long currentMillis = millis(); // current time if (currentMillis - previousMillis3 >= interval3) { previousMillis3 = currentMillis; --count; showNumber(count); if(count == 0) { // game over countdown = false; count = 20; // reset countdown // buzz 3 times buzz(11, NOTE_B0, 1000/24); delay(100); buzz(11, NOTE_B0, 1000/24); delay(100); buzz(11, NOTE_B0, 1000/24); } }}void showNumber(int number) { // show numbers (maximum 99) on display _display->display(0, 25); // write - to segment 1 _display->display(3, 25); // write - to segment 4 // write number to middle of displayif(number == 10){ _display->display(1,1); _display->display(2,0);}else if(number > 9){ _display->display(1,1); int newVal = number - 10; _display->display(2, newVal);}else{ _display->display(1,0); _display->display(2,number);}}void toggleFreePlay() { // scroll between words without blocking unsigned long currentMillis = millis(); // current time if (currentMillis - previousMillis1 >= interval1) { previousMillis1 = currentMillis; if(displayStatus == 1) showPlay(); else showFree(); }}void showPlay() { // write "PLAY" to the display _display->display(0, 21); // write P to segment 1 _display->display(1, 18); // write L to segment 2 _display->display(2, 10); // write A to segment 3 _display->display(3, 4); // write Y to segment 4 displayStatus = 2;}void showFree() { // write "Free" to the display _display->display(0, 15); // write F to segment 1 _display->display(1, 23); // write r to segment 2 _display->display(2, 14); // write E to segment 3 _display->display(3, 14); // write E to segment 4 displayStatus = 1;}void buzz(int targetPin, long frequency, long length) { /* Buzzer example function by Rob Faludi http://www.faludi.com https://gist.github.com/AnthonyDiGirolamo/1405180 */ long delayValue = 1000000/frequency/2; // calculate the delay value between transiti*** //// 1 second's worth of microseconds, divided by the frequency, then split in half since //// there are two phases to each cycle long numCycles = frequency * length/ 1000; // calculate the number of cycles for proper timing //// multiply frequency, which is really cycles per second, by the number of seconds to //// get the total number of cycles to produce for (long i=0; i < numCycles; i++){ // for the calculated length of time... digitalWrite(targetPin,HIGH); // write the buzzer pin high to push out the diaphragm delayMicroseconds(delayValue); // wait for the calculated delay value digitalWrite(targetPin,LOW); // write the buzzer pin low to pull back the diaphragm delayMicroseconds(delayValue); // wait again for the calculated delay value }}void sing() { // play the song in a non blocking way unsigned long currentMillis = millis(); if (currentMillis - previousMillis2 >= interval2) { previousMillis2 = currentMillis; int noteDuration = 1000 / tempo[songState]; buzz(10, melody[songState], noteDuration); int pauseBetweenNotes = noteDuration; delay(pauseBetweenNotes); // stop the tone playing: buzz(10, 0, noteDuration); ++songState; // start song again if finished if(songState > 79) { songState = 14; // skip intro } }}

將此文件另存為“buzzwire”(文件gt;另存為),然後將其上載到您的板(文件&gt;上載)。如果您不確定如何上傳Arduino,或者代碼看起來有點嚇人,請看一下我們的Arduino初學者指南。一切都好,你現在應該有自己的嗡嗡聲電玩——酷!

如果你看完這篇文章後做了一些很酷的東西,我很樂意看到——請在下面的評論中告訴我!

  • 發表於 2021-03-17 09:39
  • 閱讀 ( 54 )
  • 分類:DIY

你可能感興趣的文章

有史以來最怪異最糟糕的7個diy技術專案

...術的世界充滿了各種各樣的奇怪和古怪的想法。從實用的Arduino家庭自動化專案到Raspberry Pi驅動的萬聖節恐慌,似乎沒有多少電子愛好者做不到的。 ...

  • 發佈於 2021-03-11 18:51
  • 閲讀 ( 60 )

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

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

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

6個顯示器從arduino輸出資料

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

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

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

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

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

arduino入門:初學者指南

Arduino是一個開源的電子產品原型平臺,它是世界上最流行的平臺之一——除了Raspberry Pi之外。銷量超過300萬臺(更多的是以第三方克隆裝置的形式):是什麼讓它這麼好,你能用它做什麼? ...

  • 發佈於 2021-03-14 15:19
  • 閲讀 ( 55 )

用這些arduino專案像個怪人一樣控制你的燈光

...配有紅外線遙控器。這些很有用,原因很明顯,但是使用Arduino可以增加功能。(如果您剛剛開始學習Arduino,請先閱讀我們的初學者指南)。 ...

  • 發佈於 2021-03-15 06:56
  • 閲讀 ( 54 )

帶有oled顯示屏的arduino復古遊戲

...沒有想過要花多少功夫才能寫出自己的復古遊戲?Pong為Arduino編寫程式碼有多容易?加入我,我告訴你如何建立一個Arduino供電的迷你復古遊戲控制檯,以及如何從頭開始編碼乒乓球。最終結果如下: ...

  • 發佈於 2021-03-16 17:37
  • 閲讀 ( 59 )

如何用arduino和unity製作自定義遊戲控制器

...戲控制器與Unity遊戲引擎一起使用。這個控制器將由一個Arduino Uno提供動力,不過你也可以在這個專案中使用許多替代品中的一個。我們還將建立一個基本的遊戲,你將使用你的控制器,以避免下降的物體和減慢時間。 ...

  • 發佈於 2021-03-17 05:47
  • 閲讀 ( 68 )

15個優秀的arduino初學者專案

Arduino專案可能很難知道從哪裡開始。幸運的是有這麼多的選擇。這裡有15個初學者Arduino專案,讓你去! ...

  • 發佈於 2021-03-23 11:30
  • 閲讀 ( 62 )

100美元以下的7款最佳機械臂套件

... 你可以用Arduino控制機械臂套件,透過USB程式設計,甚至用液壓遙控器。雖然許多機械臂套件都很貴,但你不必花很多錢來獲得樂趣。 ...

  • 發佈於 2021-03-23 13:59
  • 閲讀 ( 47 )