2014年8月20日 星期三

第一屆半導體大數據分析競賽


敬邀教授與學生組團參加「第一屆半導體大數據分析競賽」

說明:
一、     清華大學「科技部IC產業同盟」計畫與台灣積體電路製造股份有限公司共同主辦「第一屆半導體大數據分析競賽」,本競賽不限就讀系所,凡大學(含)以上的在校生皆可參賽,亦可跨校組隊報名。
二、     半導體大數據分析競賽提供高額獎金,第一名獎金30萬元整,第二名獎金10萬元整,第三名獎金5萬元整,以及指導老師獎盃一座,學員每人獎狀等,並能獲得台積公司優先面試機會。
三、     清華大學「科技部IC產業同盟」計畫並整合共同主辦單位台灣積體電路製造股份有限公司、以及1111人力銀行、AcerIBMSAS、前程出版社、採智科技、精誠資訊、營邦企業等協辦單位,在正式比賽前為所有報名參加競賽的學生開班授課,增強他們在半導體、資料挖礦及數據分析軟硬體應用等方面的專業知識,並且提供實際案例的個案分享,為半導體業培養大數據(Big Data)分析人才紮根。
四、     報名時間即日起至920日止,懇請卓參附件海報,詳細競賽及相關培訓課程資訊亦請參考IC產業同盟計畫(NSC STEP)及「清華-台積電卓越製造中心」網站http://step.unison.org.tw/



2014年8月18日 星期一

四通道繼電器模組

我們為了簡化電路,採用了Arduino開發板的協力廠商開發的四通道繼電器模組,如 45所示,詳細線路圖,我們可以參考附錄章節中『四通道繼電器模組線路圖』的內容,自行設計四通道繼電器的線路圖或是使用本實驗使用的四通道繼電器模組(如 45所示)。

45 四通道繼電器模組
為了能夠將四通道繼電器模組整合到電風扇的線路之中,我們設計了如 46之四通道繼電器實驗一,並攥寫測試程式來測試Arduino開發板控制四通道繼電器模組。若有興趣的讀者,可以依本章內容實驗,或參考附錄資料自行設計或依實際情形修改對應的線路圖。
46 四通道繼電器實驗一線路接線圖
使用工具 by Fritzing (Interaction_Design_Lab, 2013)

7 四通道繼電器模組接腳表
Relay接腳
Arduino開發板接腳
解說
In1(Relay 1)
Arduino digital output pin 32
四通道繼電器模組版
控制繼電器接腳
In2(Relay 2)
Arduino digital output pin 34
In3(Relay 3)
Arduino digital output pin 36
In4(Relay 4)
Arduino digital output pin 38
5V
Arduino pin 5V
5V 陽極接點
GND
Arduino pin Gnd
共地接點

Arduino開發板與四通道繼電器模組(參考 45)的接腳圖,參考 7之接腳圖,完成如 46之四通道繼電器實驗一之硬體線路之後,我們將下列的測試程式,撰寫在Arduino sketch上,並進行編譯與上傳到Arduino開發板,進行四通道繼電器控制外部電力開關的實驗。
四通道繼電器實驗一測試程式(relaytest001)
#define relaypin1 32
#define relaypin2 34
#define relaypin3 36
#define relaypin4 38

void setup()
{
  pinMode(relaypin1,OUTPUT) ;
  pinMode(relaypin2,OUTPUT) ;
  pinMode(relaypin3,OUTPUT) ;
  pinMode(relaypin4,OUTPUT) ;

  Serial.begin(9600);
  Serial.println("program start here....");
}
void loop()
{
digitalWrite(relaypin1,HIGH);
digitalWrite(relaypin2,HIGH);
digitalWrite(relaypin3,HIGH);
digitalWrite(relaypin4,HIGH);
 delay(2000);
digitalWrite(relaypin1,LOW);
digitalWrite(relaypin2,LOW);
digitalWrite(relaypin3,LOW);
digitalWrite(relaypin4,LOW);
 delay(2000);
}
47所示,可以看到Arduino開發板透過四通道繼電器模組,控制四組外部電源供應的紅色led燈,並在每隔二秒鐘全亮與每隔二秒鐘全暗交錯執行。




47 四通道繼電器實驗一展示圖

Arduino溫濕度感測模組(DHT11)

本實驗為了讓Arduino開發板簡化使用,使用了 42DHT11溫濕度感測模組DHT11溫濕度感測模組,本模組只要將Vcc接到Arduino開發板+5V腳位,Gnd接到Arduino開發板Gnd腳位,DataVcc接到Arduino開發板Digital Input 腳位2,接腳圖見 5(參考 5Arduino開發板外部插斷接腳圖,詳細內容請參閱http://arduino.cc/en/Reference/AttachInterrupt),並執行下列程式,若讀者想要自行阻立DHT11溫濕度感測器的線路,可以參閱 43DHT11溫濕度感測器與單晶片開發板連接線路圖。
5 Arduino開發板外部插斷接腳圖
Board
int.0
int.1
int.2
int.3
int.4
int.5
Uno, Ethernet
2
3




Mega2560
2
3
21
20
19
18
Leonardo
3
2
0
1
7


6 DHT11溫濕度感測模組接腳圖
DHT11溫濕度感測模組
Arduino開發板接腳
解說
Data
Arduino digital Input pin 2
DHT11資料輸出腳位
5V
Arduino pin 5V
5V 陽極接點
GND
Arduino pin Gnd
共地接點

其餘關於DHT11溫濕度感測器的細部資料,本書使用的DHT-11函式庫,是採用網路上Nicolas(niesteszeck@gmail.com)針對DHT11 Temperature and Humidity Sensor所攥寫的Arduino libraryNicolasGitHub, Inc.撰寫之程式碼(GitHub, 2013),其下載網址為:https://github.com/niesteszeck/idDHT11,特此感謝分享請參閱與單晶片開發板連接線路簡圖



42  DHT11溫濕度感測模組



43 DHT11溫濕度感測器與單晶片開發板連接線路簡圖

本文中DHT測試程式,為參考Nicolas(niesteszeck@gmail.com)針對DHT11 Temperature and Humidity Sensor所攥寫的Arduino librar,其中所附的範例程式idDHT11_Lib_example所改寫得程式,其下載網址為:https://github.com/niesteszeck/idDHT11,特此感謝分享

DHT11溫濕度感測器讀取溫濕度測試程式(DHT_11_test1)
/*
  Board           int.0      int.1      int.2      int.3      int.4      int.5
 Uno, Ethernet       2    3
 Mega2560     2 ZX      3    21          20          19          18
 Leonardo       3    2    0    1
 Due                (any pin, more info http://arduino.cc/en/Reference/AttachInterrupt)

 This example, as difference to the other, make use of the new method acquireAndWait()
 */
// use digital pin 2 to connect DHT-11 data pin

#include <idDHT11.h>

int idDHT11pin = 2; //Digital pin for comunications
int idDHT11intNumber = 0; //interrupt number (must be the one that use the previus defined pin (see table above)

//declaration
void dht11_wrapper(); // must be declared before the lib initialization

// Lib instantiate
idDHT11 DHT11(idDHT11pin,idDHT11intNumber,dht11_wrapper);

void setup()
{
  Serial.begin(9600);
  Serial.println("idDHT11 Example program");
  Serial.print("LIB version: ");
  Serial.println(IDDHT11LIB_VERSION);
  Serial.println("---------------");
}
// This wrapper is in charge of calling
// mus be defined like this for the lib work
void dht11_wrapper() {
  DHT11.isrCallback();
}
void loop()
{
  Serial.print("\nRetrieving information from sensor: ");
  Serial.print("Read sensor: ");
  //delay(100);
 
  int result = DHT11.acquireAndWait();
  switch (result)
  {
  case IDDHTLIB_OK:
    Serial.println("OK");
    break;
  case IDDHTLIB_ERROR_CHECKSUM:
    Serial.println("Error\n\r\tChecksum error");
    break;
  case IDDHTLIB_ERROR_TIMEOUT:
    Serial.println("Error\n\r\tTime out error");
    break;
  case IDDHTLIB_ERROR_ACQUIRING:
    Serial.println("Error\n\r\tAcquiring");
    break;
  case IDDHTLIB_ERROR_DELTA:
    Serial.println("Error\n\r\tDelta time to small");
    break;
  case IDDHTLIB_ERROR_NOTSTARTED:
    Serial.println("Error\n\r\tNot started");
    break;
  default:
    Serial.println("Unknown error");
    break;
  }
  Serial.print("Humidity (%): ");
  Serial.println(DHT11.getHumidity(), 2);

  Serial.print("Temperature (oC): ");
  Serial.println(DHT11.getCelsius(), 2);

  Serial.print("Temperature (oF): ");
  Serial.println(DHT11.getFahrenheit(), 2);

  Serial.print("Temperature (K): ");
  Serial.println(DHT11.getKelvin(), 2);

  Serial.print("Dew Point (oC): ");
  Serial.println(DHT11.getDewPoint());

  Serial.print("Dew Point Slow (oC): ");
  Serial.println(DHT11.getDewPointSlow());

  delay(2000);
}
資料來源:https://github.com/niesteszeck/idDHT11

由上述程式執行後,可以見到 44DHT11簡單實驗畫面結果,也可以輕易讀到外界的溫度與濕度了。




44 DHT11簡單實驗畫面結果

VS 1838B通訊測試

紅外線傳輸是採用序列(Serial) 通訊的方式傳輸資料,在序列(Serial) 通訊的方式中常會提到 mark space 狀態。space 是紅外線的預設訊號,Transmitter 處於 off 狀態,這時 IR LED 不會發射光亮;而在 mark 狀態 IR LED 會以特定的頻率送出 on/off 脈衝 (Pulse)

序列通訊注意事項:
1.          因為 Receiver 會把訊號反向,所以從 Receiver 這端來看,space 意味著 high level 訊號輸出,而 mark 則是 low level 訊號輸出。
2.          要特別注意 mark space 並非我們要傳輸的 1 0 數位訊號。mark space 以及 1 0 之間的關係是由所用的 protocol 決定的。目前 IR Protocol 有相當多種,如 NEC, Phlips RC5, RC6, RC-MM, Toshiba, Sharp, JVC, Sony SIRC 等。

一般使用紅外線傳輸使用 30kHz 60kHz 的頻率(Bergmans, 2013, Bergmans, 2013),本書實驗使用 37的紅外線發射器是38 khz,,它的發射的紅外線編碼,是採用NEC IR Protocol,其NEC format特點如下:
l          8-bit Custom Code 8-bit Data Code
l          38kHz Carrier freqeuncy
l          使用 PPM (Pulse Position Modulation)
l          Bit time 1.125ms 2.25ms  

我們為了實作紅外線傳輸,在 38之中,是我們紅外線傳輸的測試電子線路,將VS 1838BOut 輸出腳位接在Arduino開發板的digital Input11個腳位,其餘S 1838BVccGnd腳位則同步+5VGnd腳位,進行下列實驗。



38 紅外線接收模組連接線路圖
使用工具 by Fritzing (Interaction_Design_Lab, 2013)

我們使用網路上GitHub, Inc網路上,Ken Shirriff攥寫的為Arduino開發板驅動IR的函式庫『IRremote(Shirriff, 2013),驅動 IR LED 發射訊號,而偵測到的訊號則從右手邊的 receiver 跑出來。

紅外線接收模組測試程式(IRrecvDemo)
/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */


#include <IRremote.h>


int RECV_PIN = 11;


IRrecv irrecv(RECV_PIN);


decode_results results;


void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}


void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}
資料來源:https://github.com/shirriff/Arduino-IRremote

執行上述程式之後,我們可以得到 39的畫面,我們使用市面上常見的紅外線遙控器,對著VS 1838B,按下紅外線遙控器上面任合一顆按鍵,如果角度對,接收成功的,可以從Arduino 開發板的監控畫面得到 39的畫面,可以看到回傳一個『FF18E7』三位元組的資料。




39 紅外線接收模組測試程式結果畫面