# 第十週週記 ### 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) ### 其他問題