2017年4月29日 星期六

筆記 Arduino 傾斜開關 Tilt Ball Switch

Arduino 傾斜開關 Tilt Ball Switch


使用傾斜開關控制LED燈亮暗

材料


  1. Arduino主板 *1 (Uno)
  2. 麵包板 *1
  3. 麵包板跳線 數根
  4. 220歐姆電阻 *1
  5. 傾斜開關 *1

電路圖



接線圖



CODE


/*
 使用傾斜開關控制LED亮暗
*/

#define TBS_PIN 2 //傾斜開關腳位
#define LED_PIN 13 //LED燈開關腳位

bool state; //宣告一個布林變數用於儲存傾斜開關狀態

void setup() {  
 pinMode(TBS_PIN,INPUT); //將傾斜開關腳位設為輸入
 pinMode(LED_PIN,OUTPUT); //將LED燈腳位設為輸出
}

void loop() {
  state = digitalRead(TBS_PIN); //讀取傾斜開關狀態
  //如果開關狀態為開點亮LED燈 否則熄掉LED燈
  if(state == true){
   digitalWrite(LED_PIN,HIGH);
  }else{
   digitalWrite(LED_PIN,LOW);
  }
}


影片


筆記 Arduino DHT11溫濕度計

Arduino DHT11溫濕度計


簡易溫濕度計製作

材料


  1. Arduino *1 (Uno)
  2. 麵包板 *1
  3. 麵包板跳線 數根
  4. DHT11 *1
  5. OLED面板 *1 (SSD1306)

電路圖



接線圖



CODE


// DHT sensor library - Version: Latest 
#include <DHT.h>
#include <DHT_U.h>

// U8g2_Arduino - Version: Latest 
#include <U8g2lib.h>
#include <U8x8lib.h>

#define DHTPIN 8 //定義DHT腳位
#define DHTTYPE DHT11 //定義DHT型號

//OLED面板
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);//(rotation, clock, data [, reset])
//DHT11溫濕度計
DHT dht(DHTPIN, DHTTYPE);
 
float h = 0; //宣告一個浮點數 用於儲存濕度 
float t = 0; //宣告一個浮點數 用於儲存溫度

void setup() {
  u8g2.begin();
}

void loop() {
  h = dht.readHumidity(); //取得濕度
  t = dht.readTemperature(); //取得溫度
  
  u8g2.firstPage();
  do {
    draw();
  } while( u8g2.nextPage() ); 
  delay(1000);
}

void draw(){
  u8g2.setFont(u8g2_font_unifont_t_greek);//設定字型
  u8g2.setCursor(0,16);//設定位置(0,16)
  u8g2.print("DHT11 Sensor");//印出文字
  
  u8g2.setCursor(0,32);//設定位置
  u8g2.print("Humidity: ");//印出文字
  u8g2.print(h,0);//印出濕度
  u8g2.print("%");//印出單位
  
  u8g2.setCursor(0,48);//設定位置
  u8g2.print("Temperature: ");//印出文字
  u8g2.print(t,0);//印出溫度
  u8g2.print("C");//印出單位
}


影片



筆記 Arduino HC-SR04超音波測距

Arduino HC-SR04超音波測距


使用HC-SR04偵測距離並印在OLED面板上

材料


  1. Arduino *1 (Uno)
  2. 麵包板 *1
  3. 麵包板跳線 數根
  4. HC-SR04超音波模組 *1
  5. OLED面板 *1 (SSD1306 128*64)

如果沒有OLDE面板也可以選擇使用Serial Monitor將數值印出

另外在這個例子中使用了 JRodrigoTech所製作的函式庫"Ultrasonic-HC-SR04"
Github連結:https://github.com/JRodrigoTech/Ultrasonic-HC-SR04
函式庫點這裡下載

電路圖



接線圖



CODE


這個例子使用U8G2lib函式庫控制OLED面板
若要使用Serial Monitor印出數值,請參考"Ultrasonic-HC-SR04"函式庫Example中的"Serial"

// U8g2_Arduino - Version: Latest 
#include <U8g2lib.h>
#include <U8x8lib.h>

// Ultrasonic - Version: Latest 
#include <Ultrasonic.h>

#define TRIG_PIN 12 //定義TrigPin
#define ECHO_PIN 11 //定義EchoPin

//OLED面板
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);//(rotation, clock, data [, reset])
//HC-SR04超音波測距
Ultrasonic ultrasonic(TRIG_PIN,ECHO_PIN); // (Trig PIN,Echo PIN)


void setup() {
  u8g2.begin();
}

void loop() {  
  
  u8g2.firstPage();  
  do {
    draw();
  } while( u8g2.nextPage() );   
  
}

void draw(){
  u8g2.setFont(u8g2_font_unifont_t_greek);//設定字型
  u8g2.setCursor(0,16);//設定位置(0,16)
  u8g2.print("HC-SR04 Sensor");//印出文字
  
  u8g2.setCursor(20,32);//設定位置(20,32)
  u8g2.print("CM: ");//印出文字
  u8g2.setCursor(64,32);//設定位置(64,32)
  u8g2.print(ultrasonic.Ranging(CM));//印出HC-SR04測出的距離(單位:公分)
  
  u8g2.setCursor(20,48);//設定位置(20,48)
  u8g2.print("INC: ");//印出文字
  u8g2.setCursor(64,48);//設定位置(64,48)
  u8g2.print(ultrasonic.Ranging(INC));//印出HC-SR04測出的距離(單位:英吋)

}


影片



筆記 Arduino 被動式紅外線偵測器(人體感應模組) PIR Motion Sensor

Arduino 被動式紅外線偵測器(人體感應模組)


使用人體模組感測器控制LED燈亮暗

材料


  1. Arduino *1 (UNO)
  2. 人體偵測模組 *1 (RCW-0506)
  3. 杜邦線 公母 *3
  4. LED燈 *1

電路圖



接線圖



CODE

/*
  人體感測器控制LED燈亮暗
*/

#define PIR_PIN 2 //感測器腳位
#define LED_PIN 13 //LED燈腳位

bool pirState = false; //宣告一個布林 用於儲存感人體感測器的狀態

void setup() {
  pinMode(PIR_PIN,INPUT);//設定人體感測器腳位為輸入
  pinMode(LED_PIN,OUTPUT);//設定LED燈腳位為輸出
}

void loop() {
  pirState = digitalRead(PIR_PIN); //取得感測器狀態
  if(pirState == true){ //如果感測器偵測到人體點亮LED燈
    digitalWrite(LED_PIN,HIGH);
  }else{
    digitalWrite(LED_PIN,LOW);
  }
}

影片



筆記 Arduino 光敏電阻 Photoresistor

Arduino 光敏電阻 Photoresistor


使用OLED面板顯示光敏電阻偵測到的數值

材料

  1. Arduino *1 (UNO)
  2. 麵包板 *1
  3. 麵包線 數根
  4. OLED面板 *1 (SSD1306 128*64 I2C)
  5. 光敏電阻 *1
  6. 1k歐姆電阻 *1

電路圖



接線圖



CODE

/*
  使用U8g2在OLED上顯示光敏電阻偵測到的數值
*/

// U8g2_Arduino - Version: Latest 
#include <U8g2lib.h>
#include <U8x8lib.h>

//OLED面板
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);//(rotation, clock, data [, reset])

#define LDR_PIN A0 //光敏電阻腳位

void setup() {
  u8g2.begin();
}

int ldrVal = 0;
void loop() {
  ldrVal = analogRead(LDR_PIN);//讀取數值
    
  u8g2.firstPage();  
  do {
    draw();
  } while( u8g2.nextPage() ); 

}

void draw(){
  u8g2.setFont(u8g2_font_9x18B_mr);//設定字型
  u8g2.setCursor(0,16);//設定位置
  u8g2.println("LDR Value:");
  u8g2.println(ldrVal);//印出數值
  
  //圖形數值計
  u8g2.drawFrame(10,24,108,20);
  u8g2.drawBox(11,24,map(ldrVal,0,1023,1,107),20);

}

影片


此影片中的OLED面版使用了ArduinoSensorShleldv5.0擴充板所提供的I2C接腳


2017年4月28日 星期五

筆記 Arduino 使用U8g2 印出點陣圖

U8g2 Github: https://github.com/olikraus/U8g2_Arduino
U8g2 Wike: https://github.com/olikraus/u8g2/wiki
U8g2支援的LCD面板 https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
U8g2 Reference: https://github.com/olikraus/u8g2/wiki/u8g2reference
U8g2 Font: https://github.com/olikraus/u8g2/wiki/fntlistall

OLED面板腳位
OLED 128*64 I2C

GND -> Ground
VCC -> 5V
SCL  -> A5 (UNO)
SDA -> A4 (UNO)


製作Bitmap:
使用GIMP將圖檔轉為索引值(使用黑白1bit)->輸出成.XBM->使用文字編輯器開啟->複製Bit Array到自己的Code裡
或是輸出後將.xbm副檔名改為.h後跟Arduino的ino檔放在一起使用#include "xxx.h"的方式讀入

*不知道為甚麼我使用LCDAssistant轉出來的bitArray在U8glib中都不能正確顯示

顯示BitArray的函式:
u8g2.drawXBM(x, y, bitmap_width, bitmap_height, bitmap);
u8g2.drawXBMP(x, y, bitmap_width, bitmap_height, bitmap);

當BitArray使用PROGMEM儲存在ROM裡的時候要使用drawXBMP()這個函式





















code: