Arduino 路燈自動開關 --使用LinkIt Smart 7688 Duo
****注意 LinkIt 7688 Duo 在 Arduino IDE 1.6.9 有問題 ,Arduino IDE 要用1.6.7*****小雪幼兒園都使用Grove 套件 + LinkIt Smart 7688 Duo。
本實驗使用材料 :
LinkIt Smart 7688 Duo X 1
Grove - Light Sensor X 1
Grove - OLED Display X 1
Grove - Relay X 1
Grove 7688 Duo 底座 X 1
LinkIt Smart 7688 Duo X1
Light Sensor 接在 A0 ,OLED Display 接在 I2C , Relay 接在 D5。
光感應器Light Sensor 最常應用在路燈或庭園燈自動開關上,當白天光線較亮就將燈關閉 ,當光線較暗時就將燈開啟。從Light Sensor讀取的數據最大為630,用手遮在上方時讀取的數據200~400,為了實驗方便臨界值就設為250。用if 來判斷Light Sensor讀取的數據大於250燈就關閉,Light Sensor讀取的數據小於250燈就開啟。
/*********以下為程式**************/
#include <Wire.h>
#include <SeeedOLED.h>
#define LIGHT_SENSOR A0 // Light Sensor 接在 A2
void setup()
{
pinMode(5, OUTPUT); //設定 Pin5 為輸出
Wire.begin();
SeeedOled.init(); //初始化 OLED
SeeedOled.setNormalDisplay(); //設定 OLED 正常顯示
SeeedOled.setPageMode(); //設定 OLED 為頁模式
SeeedOled.clearDisplay(); //清除OLED
}
void loop()
{
int sensorValue = analogRead(LIGHT_SENSOR); //感測器的值 = 類比輸入腳的值
if(sensorValue < 250) // 如果感測器的值小於250
digitalWrite(5, 1); //將燈打開
else //如果不是
digitalWrite(5, 0); //將燈關閉
SeeedOled.setTextXY(0,0); //OLE 游標移至 0,0
SeeedOled.putString("The analog is "); //顯示字元 The analog is
SeeedOled.setTextXY(2,0); //OLE 游標移至 2,0
SeeedOled.putFloat(sensorValue); //顯示 感測器的值
}
但上面這程式以一個臨界值做判斷,當Light Sensor讀取的數據剛好在250附近變動時,燈就會有閃爍現象, 這時就要用兩個臨界值來修正。
下面這程式 當Light Sensor讀取的數據低於250時燈會開啟,當燈開啟後一直要到Light Sensor讀取的數據高於 280 時燈才會關閉。
Light Sensor 會顯示於OLED,用手慢慢遮住Light Sensor直到Light Sensor讀取的數據低於250燈就會開啟,開啟後再慢慢移開當Light Sensor讀取的數據高於280燈才會關閉。
#include <Wire.h>
#include <SeeedOLED.h>
#define LIGHT_SENSOR A0 // Light Sensor 接在 A2
void setup()
{
pinMode(5, OUTPUT); //設定 Pin5 為輸出
Wire.begin();
SeeedOled.init(); //初始化 OLED
SeeedOled.setNormalDisplay(); //設定 OLED 正常顯示
SeeedOled.setPageMode(); //設定 OLED 為頁模式
SeeedOled.clearDisplay(); //清除OLED
}
void loop()
{
int sensorValue = analogRead(LIGHT_SENSOR); //感測器的值 = 類比輸入腳的值
if(sensorValue < 250) // 如果感測器的值小於250
digitalWrite(5, 1); //將燈打開
else if (sensorValue > 280) //如果不是且感測器的值大於280
digitalWrite(5, 0); //將燈關閉
SeeedOled.setTextXY(0,0); //OLE 游標移至 0,0
SeeedOled.putString("The analog is "); //顯示字元 The analog is
SeeedOled.setTextXY(2,0); //OLE 游標移至 2,0
SeeedOled.putFloat(sensorValue); //顯示 感測器的值
}
if-else 函數
if...else 如果 .. 否則....例 : 如果"好天氣" 就 "出門玩",否則就 "在家" 。
if (好天氣) // 條件成立會做下面這件事,條件不成立會執行 else。
出門玩
else //if 條件不成立時會執行下面這件事。
在家
if 需要條件執行,當然 else 也可以有條件執行 。例如 : 如果"好天氣" 就 "出門玩",天氣不好又有500塊就 "吃麥當勞" ,兩個都不成立就當作沒說過。
if (好天氣) // 條件成立會做下面這件事,條件不成立會執行 else
出門去玩
else if (有500塊) //else條件成立時會執行下面這件事
吃麥當勞
參考資料 : 聯發科創意實驗室 http://home.labs.mediatek.com/?lang=zh-hans
Seeed Technology Co., Ltd http://www.seeedstudio.com/depot/
Arduino LLC https://www.arduino.cc/
沒有留言:
張貼留言