2017年9月11日 星期一

『職人教學』飛龍在天 Sensor (超音波、光強度、溫溼度) 介紹 part1



                各位在購買完飛龍在天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");

}

實際結果:



<光強度感測>


               光強度感測主要是通過光敏電阻來感測光源的刺激,當有光線照射時,電阻內原本處於穩定狀態的電子受到激發,成為自由電子。所以光線越強,產生的自由電子也就越多,電阻就會越小。

暗電阻:當電阻在完全沒有光線照射的狀態下(室溫),稱這時的電阻值為暗電阻(當電阻值穩定不變時,例如1kM歐姆),與暗電阻相對應的電流為暗電流
亮電阻:當電阻在充足光線照射的狀態下(室溫),稱這時的電阻值為亮電阻(當電阻值穩定不變時,例如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秒一次)


              在編輯arduino 程式碼之前我們需要從Github先下載DHTlibrary,在下載完之後就可以來編寫DHT11的程式碼了喔~


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的露天賣場參觀購買~~ 




1 則留言:

  1. 出現錯誤訊息
    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

    回覆刪除