各位在購買完飛龍在天1.0之後有沒有發現,他除了正面能插上飛行底板外,背後還留有許多接孔呢?
今天就來告訴大家飛龍在天1.0除了能飛在空中之外,還有什麼新鮮的玩法~
<超音波避障>
超音波感測器是由超音波發射器、接收器和控制電路所組成。當它被觸發的時候,會發射一連串 40 kHz的聲波並且從離它最近的物體接收回音。人類的耳朵只能接收20~20K赫茲的頻率,所以在發射超音波的時候我們是聽不到的。
超音波感測的原理是利用超音波發射器(Transmitter)發射音波之後,碰到物體返回使接收器(Receiver)收到回音之間的時間差來計算與物體之間的距離。聲音的速度約為340M/s
1000000/340*100=29.4
由上面的計算我們可以知道聲音傳播1公分所需要的時間為29.4 毫秒
所以我們在真正計算距離時使用公式distance =
(duty/2)/29.4來得到我們需要感測的距離。
arduino程式碼:
int trig = A0;
int echo = A1;
int ini_time =1000;
long current_time =0;
float duty,distance;
void setup(){
Serial.begin(115200);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
}
void loop(){
digitalWrite(trig,HIGH);
delayMicroseconds(ini_time);
digitalWrite(trig,LOW);
duty =
pulseIn(echo,HIGH);
distance =
(duty/2)/29.4;
delay(ini_time);
Serial.print("data:");
current_time =
millis();
Serial.print("NO. ");
Serial.print
(current_time/1000);
Serial.print(", d = ");
Serial.print(distance);
Serial.println(" cm");
}
實際結果:
<光強度感測>
亮電阻:當電阻在充足光線照射的狀態下(室溫),稱這時的電阻值為亮電阻(當電阻值穩定不變時,例如1歐姆),與亮電阻相對應的電流為亮電流。
當光敏電阻感受到強光時電阻下降,我們設計當電阻讀取的值小於500時將LED關閉,反之當讀取的值大於500代表沒有光源,將LED燈打開。
Arduino程式碼:
#define lightsensor
A1
#define led A0
float light;
void setup() {
Serial.begin(115200);
pinMode(lightsensor, INPUT); //data pin for ambientlight sensor
pinMode(led,
OUTPUT);
}
void loop() {
light =
analogRead(lightsensor);
if (light <
500) {
digitalWrite(led, LOW);
}
if(light>500) {
digitalWrite(led,HIGH);
}
Serial.println(light);
delay(100);
}
<溫溼度感測>
DHT-11
是一個結合濕度計和測溫元件的複合式感測器,並與一個高性能8位元單晶片相連接,將所量測到的溫、濕度資料拆解成為數位訊號,再由 data pin腳將資料送出。使用上很簡單,但是抓取資料時必須要特別注意時間的掌控,而且每筆資料的抓取時間間隔要1~2秒鐘,不能做太快速的取樣。
其規格如下:
1、濕度測量範圍:20~90%RH
2、濕度測量精度:±5%RH
3、溫度測量範圍:0~50℃
4、溫度測量精度:±2℃
5、電源供應範圍: 3~5V
6、頻率不可超過:0.5Hz (每2秒一次)
5、電源供應範圍: 3~5V
6、頻率不可超過:0.5Hz (每2秒一次)
Arduno程式碼:
#include "DHT.h"
#define DHTPIN A0
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
char o='127';
void setup() {
Serial.begin(115200);
Serial.println("DHT11 test!");
dht.begin();
}
void loop() {
delay(2000);
float h =
dht.readHumidity();
float t =
dht.readTemperature();
float f =
dht.readTemperature(true);
if (isnan(h) ||
isnan(t) || isnan(f)) {
Serial.println("Failed
to read from DHT !");
return;
}
float hif =
dht.computeHeatIndex(f, h);
float hic =
dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" C \t");
Serial.print(f);
Serial.print(" F \t\t");
Serial.print("Heat index: ");
Serial.print(hic);
Serial.print(" C \t");
Serial.print(hif);
Serial.println(" F");
}
實際測試:
這次介紹的都是最基礎的應用,希望起到Arklab拋磚引玉的效果,吸引更過人加入創客的行列。真正的實用科技不在於技術的高深複雜,而是在於誰更符合生活、更有創意,這才是我們的創客精神。下篇文章會繼續介紹剩下的感測器,如果對我們的產品有興趣的話,歡迎到Arklab的露天賣場參觀購買~~
出現錯誤訊息
回覆刪除In file included from C:\Users\James\Documents\Arduino\libraries\DHT-sensor-library-master\DHT_U.cpp:22:
C:\Users\James\Documents\Arduino\libraries\DHT-sensor-library-master\/DHT_U.h:35: error: expected class-name before '{' token
C:\Users\James\Documents\Arduino\libraries\DHT-sensor-library-master\/DHT_U.h:38: error: 'sensors_event_t' has not been declared