整個(gè)裝置的結(jié)構(gòu)非常簡(jiǎn)單,將超聲波傳感器嵌于鴨嘴帽的帽檐,裝有Arduino、蜂鳴器和電池等主體電子設(shè)備的“黑盒”掛于帽子的后面。而使用時(shí),佩戴者只需要“戴上”帽子,并不需要任何其它的繁瑣步驟。當(dāng)然,在帽子上加裝這些裝置仍然有許多不盡人意的地方。
Arduino主板
為這個(gè)運(yùn)用,我在網(wǎng)上找到了一個(gè) Arduino超聲波測(cè)距程序,大家可以去實(shí)踐。程序如下:
arduio 超聲波測(cè)距模塊
------------------------------------------
5v ----- Vcc
GND ----- GND
pin 7 ----- Echo
pin 8 ----- Trig
程序如下:
const int PIN_ECHO = 7;
const int PIN_TRIG = 8;
const int PIN_LED = 13;
void setup()
{
Serial.begin(9600);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_TRIG, OUTPUT);
}
// led blink
void blink(const int interval = 300)
{
digitalWrite(PIN_LED, HIGH);
delay(interval);
digitalWrite(PIN_LED, LOW);
delay(interval);
}
// distance detect
int distanceDetect()
{
digitalWrite(PIN_TRIG, LOW); // 保持超聲波控制接口低電平2us
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH); // 保持超聲波控制接口高電平10us
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW); // 超聲波控制接口轉(zhuǎn)低電平以觸發(fā)測(cè)距過(guò)程
// 距離測(cè)試公式為 脈沖長(zhǎng)度 * 音速 / 2;
const int SONIC_SPEED = 340; // 音速在大氣中傳播速度為340米/秒
int duration = pulseIn(PIN_ECHO, HIGH); // 讀出脈沖時(shí)間
return duration * SONIC_SPEED / 2;
}
// loop control
void loop()
{
int val = Serial.read();
if (val == 'r')
{
// notify msg
blink();
Serial.println("cmd rcv, begin detect.");
// detect
int distance = distanceDetect();
if (0 >= distance)
{
Serial.println("detect fail.");
}
else
{
Serial.print("distance: ");
Serial.println(distance);
}
}
delay(500);
}