---
# System prepended metadata

title: 生活科技_高三上_機電整合專案
tags: [開發, Arduino]

---

---
tags: 開發
---



# 生活科技_高三上_機電整合專案_"智慧遙控車"

https://hackmd.io/@87DDB8mLTxuij-166W3TaA/ryKliqeQp/edit

## 實作

### 材料

1. 3D列印
2. 伺服馬達
3. 超音波感測器
4. TT馬達
5. L298N擴展版
6. Arduino版
7. 紅外線遙控器
8. 紅外線接收器
9. 電池
10. 電池盒

### 資料

<https://crazymaker.com.tw/arduino-how-to-use-millis-instead-of-delay/>

<https://emmanuel-studios.blogspot.com/2020/02/l298n-rototics-by-sam-arduino-20200205.html>

<https://blog.jmaker.com.tw/irremoterecv/>

### Code

#### 零件code

##### 紅外線遙控

```arduino=
#include <IRremote.h>

#define IR_RECEIVE_PIN 9

void setup() {
  Serial.begin(9600);
  Serial.println("open");
  IrReceiver.begin(IR_RECEIVE_PIN);
}

void loop() {
  if (IrReceiver.decode()) {
    IrReceiver.resume();
    Serial.println(IrReceiver.decodedIRData.command);
  }
}
```

#### 總code

```arduino=
///函式庫和腳位宣告
#include <IRremote.h>
#define IR_RECEIVE_PIN 9
#include <Servo.h>
#define pin 6
int b=0;
Servo servo6;

void setup() 
{
  Serial.begin(9600);
  servo6.attach(pin);
  Serial.println("open");
  IrReceiver.begin(IR_RECEIVE_PIN);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  servo6.write(90); // 旋轉到0度
}


void loop() 
{
  int x=IrReceiver.decodedIRData.command;

  //輸出遙控器讀取值
  if (IrReceiver.decode()) 
  {
    IrReceiver.resume();
    Serial.println(x);
  }

  //遙控器判斷執行動作
  
  //前進
  if (x==70)
    {
        Serial.println("Front");
        digitalWrite(3, HIGH);
        digitalWrite(4,LOW);
    }
    
  //後退
  if (x==21)
    {
        Serial.println("Back");
        digitalWrite(4, HIGH);
        digitalWrite(3,LOW);
    }
    
  //右轉
  if (x==67)
    {
        Serial.println("Right");
        servo6.write(0); // 旋轉到0度
    }
    
  //左轉
  if (x==68)
    {
        Serial.println("Left");
        servo6.write(180); // 旋轉到0度
    }
    
  //停止
  if (x==64)
    {
        Serial.println("Stop");
        servo6.write(90); // 旋轉到0度
        digitalWrite(3,LOW);
        digitalWrite(4,LOW);
    }
  if (x==66)
    {
        int a=random(0,1800);
        a=a%180;
        servo6.write(a);
        delay(100);
    }
  if (x==74)
    {
        if(b==180)
          {
            b=0;
          }
        b++;
        servo6.write(b);
        delay(100);
    }
}
```
## 小論文-零散

<https://docs.google.com/document/d/1-AGE7l7uBa7K0gmSrqNNvjHY4e_gfvTt82dlHFHrPEM/edit?usp=sharing>

### 標題:

阿克曼轉向機構的研究與實作_自走車實作

### 動機:

近來短影片盛行，網路上的Maker陸陸續續把自己的實作作品發佈到網路上，跟各位創客界的大家庭交流。觀看了許多影片，發現運用Arduino的載具基本上都是使用兩輪驅動，用最簡單的方式實作「轉方向」這個動作，但是在車水馬龍的大馬路上跑的卻不是「兩輪車」；因此我開始思考為何我在小時候玩的玩具車的轉向方式。經過搜尋後發現小時候的遙控車的轉向方式幾乎都是使用「阿克曼轉向結構」來達成轉彎的動做。所以我決定著手研究「阿克曼轉向結構」並在最後做出一台自走車。

### 程式碼解說:

在本次專案中我們使用的是Arduino IDE來編輯程式碼，並整合了L298N、TT馬達、伺服馬達、紅外線接收器、紅外線遙控器、Arduino擴展版等元件，


### BING

阿克曼轉向機構是一種用於汽車和其他車輛的轉向系統，它可以使前輪在不同的角度轉動，從而減少轉彎時的側向滑動。阿克曼轉向機構的原理是根據阿克曼理論，即在轉彎時，內外輪的圓心應該在同一條直線上，這條直線稱為阿克曼線。阿克曼轉向機構通常由一個連桿組成，它將方向盤與前輪的轉向節連接起來，並且使內外輪的轉向角度呈現一定的比例關係。

阿克曼轉向機構與其他轉向系統相比有什麼不同呢？一般來說，其他轉向系統都是使前輪保持相同的轉向角度，而不考慮阿克曼理論。這樣做的結果是，在轉彎時，內外輪的速度和半徑不同，會產生側向力，使車輛產生滑動或打滑。這不僅會降低車輛的轉彎性能，還會增加胎面的磨損和油耗。因此，阿克曼轉向機構是一種更符合物理原理和工程實際的轉向系統。

更詳細地解釋一下，阿克曼轉向機構是通過改變連桿的長度和角度來實現不同的轉向比例。連桿的一端連接方向盤，另一端分別連接左右前輪的轉向節。當方向盤旋轉時，連桿會推動或拉動左右前輪的轉向節，使其產生相對於方向盤旋轉角度的一定比例的偏移。這個比例就是阿克曼比例，它決定了內外輪的最佳轉向角度。當阿克曼比例等於1時，表示內外輪都完全符合阿克曼理論；當阿克曼比例大於1時，表示內外輪都過度轉向；當阿克曼比例小於1時，表示內外輪都不足轉向。

阿克曼轉向機構的優點是可以提高車輛的穩定性和操作性，減少胎面的磨損和油耗。阿克曼轉向機構的缺點是它需要精確的設計和調整，否則會產生過度轉向或不足轉向的現象，影響車輛的性能和安全性。

------------------------


阿克曼轉向機構是一種利用連桿傳動實現不同轉向比例的轉向系統，它可以有效地減少轉彎時的側向滑動，提高車輛的操控性和經濟性。阿克曼轉向機構的設計原理是基於阿克曼理論，該理論指出，在轉彎時，內外輪的圓心應該在同一條直線上，這條直線稱為阿克曼線。阿克曼轉向機構通常由一個連桿組成，它將方向盤與前輪的轉向節連接起來，並且使內外輪的轉向角度呈現一定的比例關係。

阿克曼轉向機構與其他轉向系統相比有什麼優勢和劣勢呢？一般來說，其他轉向系統都是使前輪保持相同的轉向角度，而不考慮阿克曼理論。這樣做的結果是，在轉彎時，內外輪的速度和半徑不同，會產生側向力，使車輛產生滑動或打滑。這不僅會降低車輛的轉彎性能，還會增加胎面的磨損和油耗。因此，阿克曼轉向機構是一種更符合物理原理和工程實際的轉向系統。

更詳細地分析一下，阿克曼轉向機構是通過改變連桿的長度和角度來實現不同的轉向比例。連桿的一端連接方向盤，另一端分別連接左右前輪的轉向節。當方向盤旋轉時，連桿會推動或拉動左右前輪的轉向節，使其產生相對於方向盤旋轉角度的一定比例的偏移。這個比例就是阿克曼比例，它決定了內外輪的最佳轉向角度。當阿克曼比例等於1時，表示內外輪都完全符合阿克曼理論；當阿克曼比例大於1時，表示內外輪都過度轉向；當阿克曼比例小於1時，表示內外輪都不足轉向。

阿克曼比例的計算公式如下：

$$
\alpha_{\text{Ack}} = \frac{L}{R} = \frac{\tan \beta_{\text{out}} - \tan \beta_{\text{in}}}{W}
$$

其中，

- $\alpha_{\text{Ack}}$ 是阿克曼比例；
- $L$ 是車軸長；
- $R$ 是後軸到阿克曼線的距離；
- $\beta_{\text{out}}$ 和 $\beta_{\text{in}}$ 分別是外側和內側前輪的偏角；
- $W$ 是前軸寬。

阿克曼轉向機構的優點是可以提高車輛的穩定性和操作性，減少胎面的磨損和油耗。阿克曼轉向機構的缺點是它需要精確的設計和調整，否則會產生過度轉向或不足轉向的現象，影響車輛的性能和安全性。

--------

阿克曼轉向機構是一種讓車子轉彎時更順暢的裝置，它可以讓前面的輪子在不同的角度轉動，這樣就不會讓車子在轉彎時打滑或滑出去。阿克曼轉向機構是根據一個叫做阿克曼的人提出的理論來設計的，這個理論說，在轉彎時，最裡面的輪子和最外面的輪子的中心點應該在同一條直線上，這條直線叫做阿克曼線。阿克曼轉向機構通常是用一根棒子來做的，這根棒子一頭連接方向盤，另一頭分別連接左右前輪的轉動部分，並且讓左右前輪的轉動角度有一定的比例關係。

阿克曼轉向機構跟其他讓車子轉彎的裝置有什麼不一樣呢？一般來說，其他的裝置都是讓前面的輪子保持相同的轉動角度，而不管阿克曼的理論。這樣做的結果是，在轉彎時，最裡面的輪子和最外面的輪子的速度和半徑不一樣，會產生側向力，讓車子滑動或打滑。這不僅會讓車子轉彎不靈活，還會讓輪胎更容易磨損和耗油。因此，阿克曼轉向機構是一種更符合自然規律和實際需求的裝置。

再用更簡單更詳細的方式來說明一下，阿克曼轉向機構是通過改變棒子的長度和角度來讓左右前輪有不同的轉動比例。棒子的一頭連接方向盤，另一頭分別連接左右前輪的轉動部分。當方向盤旋轉時，棒子會推或拉左右前輪的轉動部分，讓它們跟方向盤旋轉角度有一定比例的偏移。這個比例就是阿克曼比例，它決定了最裡面和最外面的輪子要轉多少度才能符合阿克曼理論。當阿克曼比例等於1時，表示最裡面和最外面的輪子都完全符合阿克曼理論；當阿克曼比例大於1時，表示最裡面和最外面的輪子都轉得太多；當阿克曼比例小於1時，表示最裡面和最外面的輪子都轉得太少。

阿克曼比例可以用下面這個公式來計算：

$$
\alpha_{\text{Ack}} = \frac{L}{R} = \frac{\tan \beta_{\text{out}} - \tan \beta_{\text{in}}}{W}
$$

其中，

- $\alpha_{\text{Ack}}$ 是阿克曼比例；
- $L$ 是車子的車軸長，就是前後輪之間的距離；
- $R$ 是後輪到阿克曼線的距離；
- $\beta_{\text{out}}$ 和 $\beta_{\text{in}}$ 分別是最外面和最裡面的前輪的偏角，就是它們跟車子的方向有多少差別；
- $W$ 是前輪的寬度，就是左右輪之間的距離。

阿克曼轉向機構的好處是可以讓車子轉彎更順暢，減少輪胎的磨損和油耗。阿克曼轉向機構的壞處是它需要精確的設計和調整，否則會讓最裡面和最外面的輪子轉得不夠或太多，影響車子的性能和安全性。


-------------

在本次專案中，我們的目標是製作一台可以遠端控制的小車，並且具有阿克曼轉向機構的特性。阿克曼轉向機構是一種讓車輪在轉彎時能夠保持不同角度的裝置，可以提高小車的靈活性和穩定性。為了實現這個目標，我們使用了以下的硬體和軟體元件：

- Arduino IDE：這是一個開源的整合開發環境，可以讓我們編寫和上傳程式碼到Arduino板子上。Arduino IDE支援多種語言和函式庫，方便我們使用各種感測器和驅動器。
- Arduino擴展版：這是一個可以讓我們將Arduino板子和其他元件連接起來的板子，有多個數位和類比輸入輸出埠，以及電源埠和地線埠。我們使用了兩塊擴展版，一塊連接L298N和TT馬達，另一塊連接伺服馬達和紅外線接收器。
- L298N：這是一個雙H橋驅動模組，可以讓我們控制兩組直流電機的轉向和速度。我們使用了兩個L298N模組，分別控制前後兩組TT馬達。
- TT馬達：這是一種常見的直流減速電機，可以提供足夠的扭力和速度給小車。我們使用了四個TT馬達，分別安裝在前後兩組輪子上。
- 伺服馬達：這是一種可以精確控制角度的電機，我們使用了一個伺服馬達，安裝在前方的轉向桿上，用來控制前輪的轉向角度。
- 紅外線接收器：這是一個可以接收紅外線訊號的元件，我們使用了一個紅外線接收器，連接到Arduino擴展版上，用來接收紅外線遙控器的指令。
- 紅外線遙控器：這是一個可以發送紅外線訊號的裝置，我們使用了一個紅外線遙控器，用來遠端控制小車的行進方向和速度。

在硬體連接完成後，我們就可以開始編寫程式碼了。我們使用了Arduino IDE來編輯程式碼，並且引用了IRremote.h和Servo.h兩個函式庫，分別用來處理紅外線訊號和伺服馬達訊號。程式碼的主要邏輯如下：

- 首先，我們定義了各種變數和常數，例如紅外線接收器、伺服馬達、L298N、TT馬達等的引腳號、紅外線遙控器按鍵對應的十六進位碼、阿克曼轉向機構的參數等。
- 然後，我們在setup()函式中初始化各種元件，例如設定引腳模式、啟動紅外線接收器、設定伺服馬達的初始角度等。
- 接著，我們在loop()函式中不斷讀取紅外線接收器的訊號，並根據不同的按鍵指令，控制小車的行進方向和速度。我們使用了switch-case語句來判斷按鍵指令，並使用了if-else語句來判斷阿克曼轉向機構的條件。
- 最後，我們在每次執行完一個指令後，都將小車停止，以避免出現意外情況。

這就是我們在本次專案中使用的是Arduino IDE來編輯程式碼，並整合了L298N、TT馬達、伺服馬達、紅外線接收器、紅外線遙控器、Arduino擴展版等元件，並運用阿克曼轉向機構做出一台遙控車的過程和結果。希望這篇文章能夠對你有所幫助和啟發，如果你有任何問題或建議，歡迎在下方留言或聯繫我們。感謝你的閱讀！


## 小論文-標準格式

---

### 壹、前言

#### 一、研究動機

近來短影片盛行，網路上的Maker陸陸續續把自己的實作作品發佈到網路上，跟各位創客界的大家庭交流。觀看了許多影片，發現運用Arduino的載具基本上都是使用兩輪驅動，用最簡單的方式實作「轉方向」這個動作，但是在車水馬龍的大馬路上跑的卻不是「兩輪車」；因此我開始思考為何我在小時候玩的玩具車的轉向方式。經過搜尋後發現小時候的遙控車的轉向方式幾乎都是使用「阿克曼轉向結構」來達成轉彎的動做。所以我決定著手研究「阿克曼轉向結構」並在最後做出一台自走車。

#### 二、研究目的

本研究旨在深入探究阿克曼轉向機構的原理，並藉由實作一套完整的自走車系統，從機構設計、控制演算法到實際運行測試，全面了解阿克曼轉向機構在自走車運動中的行為特性並在linkage、thinkercad上練習模擬，並測試其可行性。透過詳盡的實驗和數據分析，我們將瞭解不同參數設定對自走車性能的影響，並提出優化建議，以推進自走車技術的發展。並在最後做出一台有阿克曼轉向機構的自走車

#### 三、研究方法

本研究旨在理解並實作出阿克曼轉向機構其步驟可以分為以下幾點:

1. 了解阿克曼轉轉向機構
2. 透過Linkage、Thinkercad模擬阿克曼轉向機構
3. 探討不同車長對阿克曼轉向機構的影響
4. 實做出一台自走車

---

### 貳、正文 

#### 一、實驗設備及器材

##### (一)實驗儀器及材料

- 電腦
- 手機
- 3D列印機
- 電動螺絲起子
- 螺絲
- 伺服馬達
- Arduino UNO- Arduino UNO擴展版
- 迷你麵包版
- 紅外線接收器
- 紅外線遙控器
- 杜邦線
- TT馬達

##### (二)應用程式及軟體

- Linkage
- Thinkercad
- Fusion360
- GeoGebra

#### 二、實驗步驟

##### (一) 實驗前置處理

了解阿克曼轉轉向機構

阿克曼轉向機構是一種讓車子轉彎時更順暢的裝置，它可以讓前面的輪子在不同的角度轉動，這樣就不會讓車子在轉彎時打滑或滑出去。阿克曼轉向機構是根據一個叫做阿克曼的人提出的理論來設計的，這個理論說，在轉彎時，最裡面的輪子和最外面的輪子的中心點應該在同一條直線上，這條直線叫做阿克曼線。阿克曼轉向機構通常是用一根棒子來做的，這根棒子一頭連接方向盤，另一頭分別連接左右前輪的轉動部分，並且讓左右前輪的轉動角度有一定的比例關係。

阿克曼轉向機構跟其他讓車子轉彎的裝置有什麼不一樣呢？一般來說，其他的裝置都是讓前面的輪子保持相同的轉動角度，而不管阿克曼的理論。這樣做的結果是，在轉彎時，最裡面的輪子和最外面的輪子的速度和半徑不一樣，會產生側向力，讓車子滑動或打滑。這不僅會讓車子轉彎不靈活，還會讓輪胎更容易磨損和耗油。因此，阿克曼轉向機構是一種更符合自然規律和實際需求的裝置。

再用更簡單更詳細的方式來說明一下，阿克曼轉向機構是通過改變棒子的長度和角度來讓左右前輪有不同的轉動比例。棒子的一頭連接方向盤，另一頭分別連接左右前輪的轉動部分。當方向盤旋轉時，棒子會推或拉左右前輪的轉動部分，讓它們跟方向盤旋轉角度有一定比例的偏移。這個比例就是阿克曼比例，它決定了最裡面和最外面的輪子要轉多少度才能符合阿克曼理論。當阿克曼比例等於1時，表示最裡面和最外面的輪子都完全符合阿克曼理論；當阿克曼比例大於1時，表示最裡面和最外面的輪子都轉得太多；當阿克曼比例小於1時，表示最裡面和最外面的輪子都轉得太少。

阿克曼比例可以用下面這個公式來計算：

$$
\alpha_{\text{Ack}} = \frac{L}{R} = \frac{\tan \beta_{\text{out}} - \tan \beta_{\text{in}}}{W}
$$

其中，

- $\alpha_{\text{Ack}}$ 是阿克曼比例；
- $L$ 是車子的車軸長，就是前後輪之間的距離；
- $R$ 是後輪到阿克曼線的距離；
- $\beta_{\text{out}}$ 和 $\beta_{\text{in}}$ 分別是最外面和最裡面的前輪的偏角，就是它們跟車子的方向有多少差別；
- $W$ 是前輪的寬度，就是左右輪之間的距離。

阿克曼轉向機構的好處是可以讓車子轉彎更順暢，減少輪胎的磨損和油耗。阿克曼轉向機構的壞處是它需要精確的設計和調整，否則會讓最裡面和最外面的輪子轉得不夠或太多，影響車子的性能和安全性。

##### (二) 操作步驟

#### 三、實驗結果

探討不同車長對阿克曼轉向機構的影響

![image.png](https://hackmd.io/_uploads/SyZ9D5lmT.png)

<https://docs.google.com/spreadsheets/d/1lh2m7i7ktemDYjnG29oc3kJ9QidGZaYXOIyfughjqeg/edit?usp=sharing>

#### 四、討論

### 參、結論

### 肆、引註資料 
