# 第十週週記
### 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);
}
}
```
### 專案進度
經過跟老師的課上討論,覺得需要將大概的閾值,每個反應歸納一下,因此先歸納出了以下的概念圖,還有目前的輸入輸出反應。

參考圖 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)

[音頻分析模組](https://youtu.be/wqfsiMbhk5o?si=7jdrRgFoWwvlj6lp)

### 其他問題