無人機與 Arduino
我從上次的無人機科學玩具開箱學到怎麼組裝一台無人機,但這種玩具並沒有提供詳細的原理,我在 Github 上看到一個開源項目 CarbonAeronautics/Manual-Quadcopter-Drone 教你從底層開始做無人機,接下來我會參考這個教材來學習無人機
準備材料
教材中用的開發板是 Teensy 4.0,不過這個價格比較高,我會用 Arduino 來實驗
- Arduino Uno, USB 線:很流行的開發板,先用這個做實驗
- Arduino Pro Mini (3.3V, 5V):體積比 Uno 小很多,兩種版本都買,後續再想供電要怎麼安排
- USB 轉 Serial 模組(CH340G):用來給 Arduino Pro Mini 上傳程式,因為 Pro Mini 沒有內建 USB 接口
教材總共有24個項目,Project 1 是整個教材的總覽,介紹製作無人機所需的零件、工具和基本概念,今天先做 Project 2,用開發板控制 LED 的開關
控制 LED
先在電腦安裝好 Arduino IDE,把 Arduino Uno 用 USB 線接到電腦,IDE 的 Examples/01.Basics/Blink 有控制 LED 閃爍的程式碼,上傳到 Arduino Uno 可以看到板子上的 LED 開始閃爍
範例的註解很詳細,setup 函式在一開始被執行一次,適合在這裡面寫一些初始化的程式,這裡是把板子內建的 LED 設定成 OUTPUT 模式,這顆 LED 已經跟某一個 GPIO 接起來,這裡設定的 OUTPUT 是在設定 GPIO,loop 函式則是會重複地被執行,每一次執行會先把這個 GPIO 給高電位,等待一秒,設定成低電位,等待一秒,繼續下一個迴圈,這樣 LED 就會不停的閃了
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Arduino Pro Mini
我買的 Arduino Pro Mini 是需要自己焊上排針的,我有兩片(3.3V, 5V),第一片(左)的 6 pin 排針應該焊在上方,我弄錯了所以沒辦法完全插入麵包板,右邊那一片才是對的,6 pin 的排針沒有焊的很垂直,以後再改進
以下步驟要小心,再三確認之後再接電腦,如果要以防萬一可以買 USB 隔離器,但我還沒有買
Arduino Pro Mini 板子上沒有 USB 接口,所以我們要用 USB to Serial 模組跟 Pro Mini 對接,模組有支援 3.3V 跟 5V 兩種模式,剛好我兩個板子都有,但電源供電就要注意,我打算直接用模組的電源來給 Pro Mini 供電
-
3.3V 的 Pro Mini
- 工作電壓(3.3V版本):3.3V(VCC)、5V ~ 9V(RAW)
- 把 USB to Serial 模組的 3V3 跟 VCC 接一起,像下圖就是用跳線帽接起來了,5V 沒有用到,可以給 3.3V 的 Pro Mini 供電,但要接在 RAW 腳位!不要直接接在 VCC
-
5V 的 Pro Mini
- 工作電壓(5V版本):5V(VCC)、7V ~ 9V(RAW)
- 把 USB to Serial 模組的 5V 跟 VCC 接一起,然後再接到 Pro mini 的 VCC,我是用麵包板接的
GND 接 GND,訊號的部分 RX 接 TX, TX 接 RX
把 USB to Serial 模組接到電腦 接著要開啟 Arduino IDE,Board 選「Arduino Pro or Pro Mini」,Processor 選擇相對應的 ATmega328p(3.3V 8 MHz) 或是 ATmega328p(5V 16 MHz)
我要上傳 Blink 範例卻失敗了,上網查發現要按板子上的 reset 按鈕,幾秒內放開,多試幾次會成功,可以上傳但效率差,先用 Arduino Uno 測試程式,好了再上傳到 Pro Mini
註:也有看到有人說要接 DTR 那個腳位,就可以不用按 reset,不過我的 USB to Serial 模組沒有把這個腳位拉出來,需要買有這種功能的 USB to Serial 模組