2024年2月17日 星期六

Arduino 從零開始玩--[觀念、Leonardo、L293D、IDE、Servo]

嗯,我想,Arduino歷史簡介之類的前言

也就跳過了吧。(主要是我也不太了解,也不想了解👃)

就我印象, Arduino好像是很理工很資工很電機很......的玩意兒

一般人要利用 Arduino做出個有用可用的東西出來

好像很折騰......好吧,我承認,有時真的有些折騰,但Arduino主打的是自由度,自由的創作


雖然我是打算從零開始"玩"

但我不想用LED燈號控制那種很多人的第一個Arduino專案範例作為起點

覺得好沒吸引力

說實在,我被那種範例騙很久

就覺得一個很簡單的東西,講好久好久(其實也十分鐘左右而已啦,我沒什麼耐性👃)

要學到可以作自己想作的東西,那要搞多久勒?

嗯,想到以前作的遙控車,連拍片也不到一天就出來了💩

先談談怎麼快速上手好了,就直接找個專案,跟著專案上的主板,擴充板,電機,程式

一步一步作,基本很快就上手了,前提是你得能判斷,該案內容是否完整。

可以的話,第一次是照著買,比如板子的版本、晶片......都一樣的話,除非遇到留一手,不然通常不需DEBUG,板子裝一裝,線接一接,程式燒錄到板子,開機開始玩,很爽的🙈

可是丫,快速上手完之後伴隨而來的是空虛丫......

好像學了很多,但好像又什麼不太懂,比如換一個元件就CODE不出來或出現一些不可預期的錯誤?於是丫我想說把自己完成的專案,詳細的記錄下來

未來有用的時候可以直接爽😁 

那今天我要作的專案是......CNC!!(哇拷,會不會太重口味🙈)

本來是想作3D印表機的,但覺得在加熱還有補料那邊的知識有些不足

所以退而求其次,剛好手邊有材料不用再買(主因),就先CNC囉

對了,這邊先談一下,Arduino到底是幹什麼用的。

簡單的說,就可程式化的板(什麼東西😭) 

比如上面提到我想作CNC,於是呢,我要先想CNC需要哪些東西組合出來

CNC就是命令機器X軸Y軸座標,然後讓電機到(X,Y)上鑽個洞(👇),然後命令下一下坐標直到結束。那要讓電機到坐標就需要把程式寫到Arduino裡,Arduino控制步進馬達,告訴X軸的步進馬達要轉幾圈,Y要轉幾圈,大約就是這樣。

雖是從零開始玩,但我們今天會玩很多零件

1.Arduino Leonardo r3

2.L293D電機擴充板(L293D Motor Control Shield)

3.舵機

4.步進馬達28BYJ-48

5.130馬達 

 

先看一下第一個硬體的規格(圖從網路抓,和我手上一樣就不另補照片)

 Arduino Leonardo r3

Arduino Leonardo R3 開發板.jpg
使用Arduino Leonardo需要新版本的Arduino IDE1.01以上版本。

● 控制晶片:ATmega32u4
● 晶體震盪器:16 MHz
● 工作電壓:5V
● 輸入電壓:7 ~ 12V
● 數位I/O埠:22 (D0-D13,D14-MISO,D15-SCK,D16-MOSI, D18-23[A0-A5])
● PWM通道:7 (D3,D5,D6,D9,D10,D11,D13)
● 類比輸入:12 (A0-A5,D4-A6,D6-A7,D8-A8 ,D9-A9,D10-A10,D12-A11)
● 數位I/O埠最大電流:5V、40 mA
● 3.3V腳位供直流電流:50 mA
● Flash Memory:32 KB (ATmega32u4) of which 4 KB used by bootloader
● SRAM: 2.5 KB (ATmega32u4)
● EEPROM: 1 KB (ATmega32u4
● 電源插頭:2.1mm
● 尺寸:68.6(L)x53.3(W)mm
● 重量:20g
*詳情請參考官方連接http://arduino.cc/en/Main/ArduinoBoardLeonardo

接腳

 

接腳的圖很重要丫,官網有完整版。 


L293D電機擴充板

商店街

此板搭配L293D及74HC595N晶片
無法單獨使用
腳位可直接插Leonardo r3
可控制4個直流馬達或2個5線步進馬達,同時控制2個伺服舵機,

並可透過PWM控制直流馬達轉速,馬達電力超過0.5A,務必搭配外部電源使用

 

 

看完硬體基本資料以後,我們要開始玩囉,首先要下載IDE,https://www.arduino.cc/en/software,到官網下載吧,安全一些。我下載的最新版本是Arduino IDE 2.3.1,一般來說,我是建議直接下載最新版,除非新版一直有問題,亦指別人的CODE可以RUN,但你就不行,沒步的時候,或許可能出現在IDE版本??

IDE安裝完以後,用MINI USB線連接PC與Leonardo,嗯。我的OS是WIN10。然後它自動會去下載Leonardo的驅動耶😁?之前玩UNO時,是要自己去下載驅動。好吧,如果沒自來動下載或你的OS不是WIN10,就請自行處理囉。

先把Leonardo第0腳對準L293D電機擴充板第0腳插入,兩邊腳位都剛好可以插進去,會有一兩個腳位是空白那沒錯的(下面就把Leonardo+L293D電機擴充板合稱為LL板囉)。然後MINI USB線連接PC與Leonardo,

這時會看到IDE已經抓到Leonardo,嗯,我好像有等一下下吧,第一次開啟IDE時,要下載一些些檔案,然後沒多久會出現win10抓到新硬體,然後下載driver。總之看到Leonardo出現在IDE裡,表示OK囉。如下面的圖片紅框所示。

 

接下來先把LL板拔掉。並安裝上舵機。安裝完舵機後再接回PC

(這裡很重要,雖我也不是很確定,但要在 Leonardo板或LL板新增馬達或電源什麼的硬體變動,最好先把USB斷掉,安裝完後再插回電腦比較好)

然後我在網路上抓了一段舵機的程式碼

#include <Servo.h>

Servo servo_pin_10;

void setup()
{
  servo_pin_10.attach(10);
}

void loop()
{
  servo_pin_10.write( 0 );
  delay( 1000 );
  servo_pin_10.write( 180 );
  delay( 1000 );
}

 上傳至LL板後,舵機就開始動了🙈

#include <Servo.h>這個是函數,嗯,馬達有馬達的函數,舵機有舵機的函數,那要怎麼想這個東西呢?抽象搞具體化來說好了。如果沒宣告,等於程式不知舵機是什麼,第一行程式Servo servo_pin_10;大寫的Servo就會出錯,我出現的錯誤訊息如下:

error: 'servo_pin_10' was not declared in this scope
   servo_pin_10.write( 0 );
   ^~~~~~~~~~~~

exit status 1 

Compilation error: 'Servo' does not name a type; did you mean 'Serial'? 

嗯,因為我的接法和網路查的都一模一樣,可以動也是理所當然。

我試著換PIN 然後把程式改成下面,就猜對了,L293D電機擴充板SERVO_2就是PIN9

#include <Servo.h>

Servo servo_pin_9;

void setup()
{
servo_pin_9.attach(9);
}

void loop()
{
servo_pin_9.write( 0 );
delay( 1000 );
servo_pin_9.write( 180 );
delay( 1000 );
}
 
那怎麼猜的勒??上面不是有提到Leonardo板的接腳圖嗎?看原本~10接腳應該就是Servo servo_pin_10;然後我看~9跟它長得很像,都有PWM,於是RUN看看,沒想都OK了。那我也測第2段程碼然後插
SER1舵機是不會動的哦!
總結一下:
1.先下載ARDUINO IDE並安裝
2.Leonardo+L293D電機擴充板+舵機
3.上傳程式,然後舵機就會動了😁爽。