---
# System prepended metadata

title: 第十週週記

---

# 第十週週記
### Arduino學習紀錄
超音波測距

```
float ultrasonic_distance_cm(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  digitalWrite(echoPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  unsigned long sonic_duration = pulseIn(echoPin, HIGH);
  float distance_cm = (sonic_duration / 2.0) / 29.1;

  return distance_cm;
}

void setup() {
  Serial.begin(9600);
  pinMode(12, OUTPUT); // trigPin
  pinMode(13, INPUT);  // echoPin
}

void loop() {
  Serial.print("distance = ");
  Serial.println(ultrasonic_distance_cm(12, 13));
  delay(1000); // 1秒的延遲
}
```

伺服馬達控制
（似乎是因為電流不夠？旋轉的時候會震動）

```
#include <Servo.h>

Servo servo_2;

void setup() {

  servo_2.attach(5);
  servo_2.write(90);
  delayMicroseconds(3000);

}

void loop() {
  servo_2.write(10);
  delayMicroseconds(1000);
  servo_2.write(90);
  delayMicroseconds(1000);
  servo_2.write(170);
  delayMicroseconds(1000);
  servo_2.write(90);
  delayMicroseconds(1000);

}
LCD
(待整理)

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2); // 設置LCD地址和顯示尺寸

void setup() {
  Wire.begin();
  lcd.init();                      // 初始化LCD
  lcd.backlight();                 // 打開LCD背光
  Serial.begin(9600);
  Serial.println("LCD Display Example");
  
  // Display your text on the LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Hello, World!");
}

void loop() {
  // Your loop code here, if needed
  
  delay(5000); // Delay for 5 seconds (or adjust as needed)
}
```
要記得下載一些沒有的library
### 小挑戰:利用Arduino達到 輸入→演算→輸出
輸入距離感測數據然後用亮燈的頻率輸出結果的arduino程式
```
#define TRIG_PIN 9  // 超聲波感測器的 Trig 引腳
#define ECHO_PIN 10 // 超聲波感測器的 Echo 引腳
#define LED_PIN 13  // LED 的引腳

void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // 觸發超聲波感測器發送超聲波脈衝
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // 讀取超聲波感測器的回波時間，並轉換成距離
  long duration = pulseIn(ECHO_PIN, HIGH);
  int distance = duration * 0.034 / 2;

  // 顯示距離
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  // 根據距離控制LED的頻率
  if (distance < 10) {
    // 如果距離小於10cm，LED快速閃爍
    digitalWrite(LED_PIN, HIGH);
    delay(100);
    digitalWrite(LED_PIN, LOW);
    delay(100);
  } else if (distance < 20) {
    // 如果距離在10cm和20cm之間，LED慢慢閃爍
    digitalWrite(LED_PIN, HIGH);
    delay(500);
    digitalWrite(LED_PIN, LOW);
    delay(500);
  } else {
    // 如果距離大於20cm，LED保持常亮
    digitalWrite(LED_PIN, HIGH);
  }
}
```
### 專案進度
經過跟老師的課上討論，覺得需要將大概的閾值，每個反應歸納一下，因此先歸納出了以下的概念圖，還有目前的輸入輸出反應。
![371145943_1012880006649068_4651024804698902062_n](https://hackmd.io/_uploads/SJsUWuA7p.jpg)
參考圖 https://www.artstation.com/artwork/zvnkw
**購買材料清單**
[聲音感測器模組 Sound Sensor](https://sites.google.com/view/rayarduino/%E8%81%B2%E9%9F%B3%E6%84%9F%E6%B8%AC%E5%99%A8)
![image](https://hackmd.io/_uploads/rydZwuRXT.png)
[音頻分析模組](https://youtu.be/wqfsiMbhk5o?si=7jdrRgFoWwvlj6lp)
![image](https://hackmd.io/_uploads/Sk6LvuR7a.png)
### 其他問題