轉角防撞感測器

by 張維 in Circuits > Arduino

14 Views, 2 Favorites, 0 Comments

轉角防撞感測器

DF2534F9-C2E9-4AAE-A873-BA63DAAECE7D.jpg


Supplies

S__73441282.jpg
S__73441286.jpg
S__73441284.jpg
064DD430-D1F2-4DC2-A586-92EF2373C17E.jpg

瓦楞板 兩顆超音波感測器 WS2812燈條 Arduino板 一般電線 杜邦線

程式碼

#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 // 第二個超音波感測器 ECHO


Adafruit_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;

}


裁切

剪兩塊長81cm寬5cm的瓦楞板


組合

S__73441285.jpg

把兩塊瓦楞板黏在一起

定位裝置

S__73457667.jpg

把兩個超音波感測器 WS2812燈條 Arduio板 電線定位