轉角防撞感測器 By 張維 in CircuitsArduino292Introduction: 轉角防撞感測器Supplies瓦楞板 兩顆超音波感測器 WS2812燈條 Arduino板 一般電線 杜邦線Step 1: 程式碼#include <Adafruit_NeoPixel.h>#define LED_PIN 6 // WS2812 資料腳位接到 D6#define LED_COUNT 10 // LED 總數 10 顆// **交換超音波感測器腳位**#define TRIG_PIN1 7 // 第一個超音波感測器 TRIG#define ECHO_PIN1 8 // 第一個超音波感測器 ECHO#define TRIG_PIN2 9 // 第二個超音波感測器 TRIG#define ECHO_PIN2 10 // 第二個超音波感測器 ECHOAdafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);// 記錄觸發時間unsigned long lastTriggerTime1 = 0;unsigned long lastTriggerTime2 = 0;const unsigned long delayTime = 7000; // 7 秒延遲bool ledState = false; // LED 狀態unsigned long lastBlinkTime = 0; // 記錄上次閃爍時間const unsigned long blinkInterval = 20; // 0.2 秒閃爍間隔void setup() { Serial.begin(9600); pinMode(TRIG_PIN1, OUTPUT); pinMode(ECHO_PIN1, INPUT); pinMode(TRIG_PIN2, OUTPUT); pinMode(ECHO_PIN2, INPUT); strip.begin(); strip.show(); // 初始化所有 LED 關閉}void loop() { long distance1 = getDistance(TRIG_PIN1, ECHO_PIN1); long distance2 = getDistance(TRIG_PIN2, ECHO_PIN2); unsigned long currentTime = millis(); Serial.print("Distance1: "); Serial.print(distance1); Serial.print(" cm | Distance2: "); Serial.print(distance2); Serial.println(" cm"); if (distance1 > 0 && distance1 < 50) { lastTriggerTime1 = currentTime; } if (distance2 > 0 && distance2 < 50) { lastTriggerTime2 = currentTime; } if (currentTime - lastBlinkTime >= blinkInterval) { ledState = !ledState; // 切換 LED 狀態 lastBlinkTime = currentTime; } strip.clear(); if ((currentTime - lastTriggerTime1 < delayTime) && ledState) { for (int i = 0; i < 5; i++) { strip.setPixelColor(i, strip.Color(255, 0, 0)); // 紅色 } } if ((currentTime - lastTriggerTime2 < delayTime) && ledState) { for (int i = 5; i < 10; i++) { strip.setPixelColor(i, strip.Color(255, 0, 0)); // 紅色 } } strip.show(); delay(50);}long getDistance(int trigPin, int echoPin) { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(15); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH, 30000); if (duration == 0) { Serial.println("No echo received"); return -1; } long distance = duration * 0.034 / 2; return distance;}Step 2: 裁切剪兩塊長81cm寬5cm的瓦楞板Step 3: 組合把兩塊瓦楞板黏在一起Step 4: 定位裝置把兩個超音波感測器 WS2812燈條 Arduio板 電線定位