2017年6月18日 星期日

筆記 mBlock搭配Arduino Uno使用

筆記 mBlock搭配Arduino Uno使用


事前準備

安裝好Arduino的驅動程式

選擇板子(UNO)所在的序列阜位置

執行更新韌體

等待上傳完成

這樣ArduinoUno板就能在mBlock中使用了


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: