2016年12月20日 星期二

老皮講堂-ESP8266-01之韌體更新

ESP8266-01之韌體更新

前言:
ESP8266是一塊常用於自製IOT裝置的WIFI module, 聽說其CP值極高, 且能搭配Arduino板子使用. 因老皮所學主要為機械航太科技, 對此領域頗為陌生, 想要稍微了解一下其使用方法, 因此花了一點銀兩購買了一塊常見ESP8266-01來研究研究. 不過看起來要進入這個領域頗有門檻, 得花點時間. 首先, 就先學習從更新韌體開始...

材料:
1. 
FT232RL USB轉串口模組 USB轉TTL ARDUINO下載線, 需找一個mini USB轉USB轉接線
PS: 此可以提供穩定的3.3V.
2. 
FT232RL USB轉串口模組 USB轉TTL ARDUINO下載線

目的:
更新韌體為舊的V0.9.2.2 版, 其鮑率為9600, 才能跟Arduino UNO正常work.
因新購買的為較新的版本, 其鮑率為115200. 使用AT指令時很容易出現亂碼. 

照片說明:
















下載韌體更新軟體及韌體映像檔(For Arduino Uno, 鮑率:9600):
1. 燒錄程式
2. 韌體版本:V0.9.2.2 firmware.bin

AT指令測試=>使用Arduino Uno

目的:
測試完成了ESP8266-01之韌體更新後, 可於Serial視窗測試一下AT指令的運作狀況是否正常.

照片說明:



老皮講堂-自製一個手持式空氣懸浮粒子偵測盒

引言:
        近年來, 由於空污問題愈來愈嚴重, 身處在都市中的我們, 往往在不知不覺中, 吸進了未知的空氣汙染物.  尤其是飄浮在空中的懸浮粒子, 經年累月的吸入, 久而久之可能會誘發身體的變化, 變得容易過敏甚至更嚴重的疾病. 有鑑於此, 今日想要動手自製一個簡易而且可以隨身攜帶的手持式空氣懸浮粒子偵測盒, 來偵測一下空氣中懸浮粒子的濃度. 隨時想量的時候, 只要按一下開關就可以量一下, 偵測周遭的空氣品質. 如果濃度超過一定的標準, 機體可以發出警報聲提醒一下.

目標:
         自製一個手持式空氣懸浮粒子偵測盒並以數據判斷空氣品質, 若超標能發出警示聲.數值超標愈多, 警示聲愈急促.

         此機可以隨身攜帶, 或放在車裡, 家裡或工廠等, 可以9V電池維持供電或外插9V直流變壓器.

主要材料:
1arduino兼容改進funduino 給力板 單片機 兼容ARDUINO
2. LCD 1602 LCM 液晶 藍屏 含 I2C TWI 轉接板 8051
3. SHARP 原裝 GP2Y1010AU0F PM2.5灰塵/粉塵/空氣品質感測器
4. 蜂鳴器 有源蜂鳴器 5V 採用SOT塑封管 電磁式蜂鳴器 長音 Arduino
5. Arduino 9V 電池扣含線12CM 連接 DC2.1電源插頭
6. 麵包板 MB-102 紅藍標線 830孔165×55mm
7. 聯府 TL101 A通通集合長型盒-中
8. BSP-2277開關
9. 公對公/母對母/公對母杜邦線若干
10. M2.5鎖固螺絲及對應六角螺帽
11. 泡棉式雙面膠
12. 紅黑電源分接開關用延長電線
13. 束線帶
14. 9V電池

照片及紀錄:






影片紀錄:




2016年11月18日 星期五

老皮講堂-如何藉由超聲波模組(HC-SR04)來偵測距離

       大家好! 今天主要來簡單介紹一下, 怎麼透過Arduino板子及超聲波模組(HC-SR04)來偵測距離並能在1602LCD屏幕上顯示.

       關於超聲波模組(HC-SR04), 請參考以下照片. 至於工作原理, 可在網路上搜尋關鍵字, 即可參考得知, 在此不多作描述. 
       主要Spec => 量測範圍 : 2~450cm, 精度 : 3mm, 有效量測角度: <15度.











     
       另外, 這邊比較特別的是想要把偵測到的距離, 顯示在一個簡單的1602 LCD屏幕, 此處選用的是1602 藍屏 LCM含I2C TWI轉接板.















       
      
      
      以下是整體的接線圖, 其中HC-SR04 & 1602 LCD都吃5V的電. 1602 LCD的SDA接在類比A04端口, SCL則皆在A05端口. 1602 LCD的TrigPIN則接在數字2端口, EchoPIN則接在數字3端口.








       








      以下是程序碼, 提供參考!
=======================================================================
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);   // LCD接腳定義
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
lcd.begin();
for (int i = 0; i < 2; i++) {       //閃2次
  lcd.backlight();                  // 開啟背光
  delay(250);
  lcd.noBacklight();                // 關閉背光
  delay(250);
}
  lcd.backlight();                    // 開啟背光


}
void loop()
{
lcd.clear();
lcd.setCursor(1, 0);                //(第1格,第0行),設定游標位置在第一行第2格
lcd.print("DIS=");
digitalWrite(TrigPin, LOW); //低高低電平發一個短時間脈衝去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);

cm = pulseIn(EchoPin, HIGH) / 58.0; //將回波時間換算成cm
cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
Serial.println("sc;");
  Serial.println("sd0,0;");
  Serial.println("ssHC-SR04:;");
  Serial.println("sd0,8;");
  Serial.print("ss");
  Serial.print(cm);
  Serial.println(";");
  Serial.println("ssCM;");
  lcd.setCursor(5, 0);
  lcd.print(cm);
  lcd.print(" cm");
  delay(3000);

}

影片紀錄(延伸應用設計):


2016年11月6日 星期日

老皮講堂-關於水龍頭 過濾水(水鵝頭) & 廚房(龍頭)

最近發現家裡的廚房水龍頭紛紛出現異象...


問題點:

1. 家裡的過濾水(水鵝頭) , 使用了七年, 這根金屬管壁面竟然出現了大幅的鏽蝕, 雖然照片是外表面, 但不知內管壁會是怎樣, 我們都是用這根管出來的水再接水去煮沸來飲用,  如今此管變成這副德性, 實在用的心不安. 最擔心的是, 若此管材質為銅, 目前表面的電鍍層看似已經被腐蝕破壞了, 是否有可能變出綠色的銅鏽? 這可是飲用水之來源啊, 不可不慎!



























2. 家裡的廚房(龍頭) , 使用了七年, 那根看似厚實的龍嘴, 竟然也出現裂縫, 尤其使用熱水時, 水會從此縫更明顯的噴出, 實在危險, 被噴到不得了啊! 看來這根也該換了...>< !




















解決方式:

1. 關於過濾水(水鵝頭) , 打算選購材質為不銹鋼304的, 我想這樣應該能較能避免再次生鏽吧!
PS: 因為家中是使用PE 2分管來跟水鵝頭作連接的, 因此選購時要特別注意管徑呀!
==>最後去X天拍賣選了一款中價位的不鏽鋼水鵝頭, 1pcs花了750NTD(含運費).

2. 關於廚房(龍頭), 因為這個頭出來的水, 不是給人喝的, 所以材質就不要太介意, 能用就好了!
畢竟錢歹賺啊!
==>最後還是去X天拍賣選了一款廉價的龍頭, 1pcs花了445NTD(含運費).

等收到後, 再好好處理一下了.

2016年11月5日 星期六

老皮講堂-如何藉由Arduino跟安卓手機的通訊來控制一顆LED燈的明滅

大家好! 今天主要來簡單介紹一下, 怎麼透過Arduino板子及藍芽模組(HC-05)來跟Android手機做個連接. 讓手機上的App軟體可以控制麵包板上的LED燈開與關.

1. 首先我們必須先去下載一個App軟體, 名字叫作 " LED Controller "
這個軟體, 我們可以去以下這個網站下載.
https://github.com/Mayoogh/Arduino-Bluetooth-Basic

最主要我們要能下載到 "LED Controller.apk" 這個檔案. 我們可以使用電腦下載後,
再藉由E-mail附加此檔案寄信到自己的信箱, 然後用手機去開啟便可以安裝.
以下就是這個軟體的icon. 安裝好了, 當然我們就可以在手機上開啟這個Free軟體.














2. 接下來, 這邊使用了一個類似Arduino UNO的板子叫做Funduino, 當然它的功能是跟Arduino UNO一樣, 只是它多了一些讓USER方便使用的針腳.
 
怎麼接線, 請參考下面的接線圖.

整體的接線圖如上, 其中藍芽模組是使用型號為HC-05.

LED在麵包板上, 正極(長腳)會串接一個220歐姆的電阻, 避免LED燒掉, 然後接到MB上Power插孔的5V,負極則接到Power插孔的接地Gnd.









HC-05上面的接線如左, 其中Vcc請接到數字接口Pin 13, GND則接到數字接口Pin 的GND.
RXD則接到數字接口Pin1(TX).
TXD則接到數字接口Pin0(RX).
請注意: RXD跟TXD接到主板上的TX跟RX是正好相反喔!














3. 燒錄程序, 這個程序的來源同樣來自https://github.com/Mayoogh/Arduino-Bluetooth-Basic
程序內容如下:

/*
 *  Bluetooh Basic: LED ON OFF - Avishkar
 *  Coder - Mayoogh Girish
 *  Website - http://bit.do/Avishkar
 *  Download the App :
 *  This program lets you to control a LED on pin 13 of arduino using a bluetooth module
 */
char data = 0;                //Variable for storing received data
void setup()
{
  Serial.begin(9600);         //Sets the data rate in bits per second (baud) for serial data transmission
  pinMode(13, OUTPUT);        //Sets digital pin 13 as output pin
}
void loop()
{
  if(Serial.available() > 0)  // Send data only when you receive data:
  {
    data = Serial.read();      //Read the incoming data and store it into variable data
    Serial.print(data);        //Print Value inside data in Serial monitor
    Serial.print("\n");        //New line
    if(data == '1')            //Checks whether value of data is equal to 1
      digitalWrite(13, HIGH);  //If value is 1 then LED turns ON
    else if(data == '0')       //Checks whether value of data is equal to 0
      digitalWrite(13, LOW);   //If value is 0 then LED turns OFF
  }                          

}

4. 接下來, 我們可以開始進行測試了. 當然首先需要進行藍芽連線. HC-05的連線密碼一般是0000 或者 1234,  自己試試應該可以. 接著開啟" LED Controller "這個App程式.
 

此程式的第一個畫面, 就是讓你確認藍芽模組配對無誤, 接著進入第二個畫面, 即是一個簡單的ON跟OFF開關, 很清楚地, 當你按下ON時LED就會亮燈, 當你按下OFF時LED就會熄滅. 若操作無誤, LED有正常運作, 這樣就算完成了這個課程.

PS : 你也可以參考Arduino官方網站的教學說明.
https://create.arduino.cc/projecthub/user206876468/arduino-bluetooth-basic-tutorial-d8b737?ref=platform&ref_id=424_trending___&offset=120