วันพฤหัสบดีที่ 9 กุมภาพันธ์ พ.ศ. 2560

Arduino with Keypad and 4 Channel Relay

Arduino with Keypad and 4 Channel Relay


Arduino with 4x4 Keypad membrane and 4 Channel Relay
   วันนี้จะว่ากันด้วยเรื่องของ 4x4 Keypad membrane นะครับ โดยรุ่นที่นิยมใช้กับ Arduino ก็จะเป็นแบบ 4 x 4  ซึ่งมีตัวเลข 0 - 9  และ ตัวอักษรอีกนิดหน่อย
  มาดูหลักการทำงานของ Keypad membrane กันนิดหน่อยนะครับ  4x4 Keypad membrane แบบ 4 x 4  ชนิดนี้ก็ประกอบไปด้วยปุ่ม 16 ปุ่ม ที่เรียงต่อกันเป็นเมตริกซ์แบบ 4 Row และ 4 Column  ถ้าใครเคยได้สัมผัสแล้วก็คงพอจะเดาออกว่าปุ่มแต่ละปุ่ม  เป็นการกดเพื่อให้หน้าสัมผัสที่เป็นชั้นสีแดงในรูปด้านล่าง ไปแตะกันทำให้เป็นการเชื่อมต่อกันทางไฟฟ้าไปอีกด้านหนึ่งของสวิตช์
   ทีนี้หลักการในการตรวจสอบว่าผู้ใช้กำลังกดปุ่มอะไรอยู่นั้นก็ใช้วิธีการ scan ไปทีละ Column ครับจบครบทุก Column แล้วนำมาตีความว่ามีการตอบสนองออกมาเป็นแบบใดบ้าง  เช่น ถ้ามีการกดเลข 1  อยู่  ในขณะที่เราจ่ายแรงดัน 5 โวลต์ไปที่ Column ที่ 1  จะมีเพียง Row แรกเท่านั้นที่จะอ่านค่า แรงดันได้ High นอกนั้นจะเป็น Low     หรือ ถ้ามีการกดปุ่ม # อยู่ ขณะที่ Scan ไปแต่ละ Column นั้นจะไม่เจอแรงดัน High ที Row ใดเลย จนกว่าจะ Scan ไปถึง Column ที่ 3 ซึ่งจะพบว่ามีการตอบสนองกลับมาจาก Row ที่ 4 นั้นเอง  ดังนั้นเมือพบว่าเป็นการ Scan Column ที่ 3 และมี Row 4 ตอบสนอง ก็คือปุ่ม '#' นั่นเอง
  อ่านแล้วก็รู้สึกว่าไม่ซับซ้อนมานักใช่มั้ยครับ  แต่มันมีมากกว่านั้นอีกตรงที่ว่าจังหวะการกดของคนแต่ละคน กดด้วยช่วงเวลาสั้นยาวไม่เท่ากัน  ทำให้ต้องมีการตรวจสอบโดยมีระยะเวลาเข้ามาเกี่ยวข้อง  ไม่อย่างนั้นจะสับสนระหว่างการกดแช่ หรือ การกดแบบซ้ำปุ่ม   นอกจากนั้นยังต้องมี debouncing ด้วยครับ เพื่อป้องกันการรับค่าผิดจากการ bounce ของสวิตช์  (ถ้าใครเคยเรียน Digital Design อาจจะเข้าใจได้ทันที ถ้าไม่รู้จักก็ไม่เป็นไรนะครับ)    แถมยังต้องมีการจดจำปุ่มที่กดไปแล้วอีกว่ากดอะไรไปบ้าง  กี่ครั้งแล้ว ก่อนที่จะมาประมวลผล ตรวจสอบค่าที่ใส่ เปรียบเทียบกับค่าที่ตั้งไว้เป็นรหัส  
  แต่ไม่ต้องกังวลครับ ว่าเริ่มที่จะยุ่งยาก เพราะในโลกนี้มีคนแก่งและใจดีเขียนโปรแกรมขึ้นมาให้ใช้กันฟรีๆ อีกแล้วครับ  Library ที่ว่าก็ไป  ที่นี่เลยครับ  ไม่ต้องเขียนเอง  และต่อด้วยการตรวจสอบรหัสอีกอันที่นี่ครับ ฟรีเช่นกัน
  โหลดมาแล้วก็เอาไปใส่ใน Folder Library ของเราเช่นเคยนะครับ ใครที่นึกไม่ออกก็กลับไปหาอ่านบทความเก่าของผมก็ได้ครับ  แล้วอย่าลืมปิดและเปิดโปรแกรมใหม่หลังจากใส่ไว้ใน Folder library นะครับ



ลองตัวอย่างง่ายๆที่เขาให้มากับ Library กันก่อนครับ

  เริ่มต้นจากการต่อ Keypad membrane นี้เข้ากับ Digital Pin ตั้งแต่   D6-D13 โดยเริ่มจาก Pin บนสายแพด้านซ้ายไปขวาของ Keypad นะครับ  จากนั้นก็ลอง Sketch ใน Example ชื่อ "Password Keypad"  หรือดูตามด้านล่างนี้ครับ
/*
||  Simple Password Entry Using Matrix Keypad
||  4/5/2012 Updates Nathan Sobieck: Nathan@Sobisource.com
||
*/
//* is to validate password   
//# is to reset password attempt
/////////////////////////////////////////////////////////////////
#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
Password password = Password( "1234" );
const byte ROWS = 4; // Four rows
const byte COLS = 4; //  columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7, 6};
// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
  Serial.begin(9600);
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
}
void loop(){
  keypad.getKey();
}
//take care of some special events
void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
    case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey){
 case '*': checkPassword(); break;
 case '#': password.reset(); break;
 default: password.append(eKey);
     }
  }
}
void checkPassword(){
  if (password.evaluate()){
    Serial.println("Success");
    //Add code to run if it works
  }else{
    Serial.println("Wrong");
    //add code to run if it did not work
  }
}
ในตัวอย่างนี้ก็ใช้ Password เป็น '1234' นะครับ แก้ไขกันได้ตามสะดวก แต่ผมสาธิตโดยใช้ตัวเดิมนะครับ  จะเห็นว่าตัว Sketch กำหนดให้เมื่อใส่ Password ครบให้กด * ด้วย ถ้ากดรหัสถูกก็จะแจ้งว่า Success    ถ้ากดไปแล้วผิด จะเริ่มต้นใหม่ (Reset) ให้ก็ '#' นะครับ
อีกซักตัวอย่างนึง คราวนี้เราจะเอามันมาเป็น Pass Code เพื่อใช้เข้ารหัสก่อนที่จะสามารถควบคุมการทำงานของ Relay แบบ 4 ช่องได้นะครับ  
ผมเอามาจาก http://lathama.net/Arduino_and_Relays_and_a_Keypad  ถ้าใครอยากอ่านตัวอย่างนี้ของต้นฉบับ
เริ่มต้นก็ต่อวงจรตามนี้เลยครับ 
LEDsRed LED positive connected to Arduino Uno Analog A0Green LED positive connected to Arduino Uno Analog A1Ground legs connected to Arduino GroundRelaysVCC connected to Arduino 5vIN1 connected to Arduino D2IN2 connected to Arduino D3IN3 connected to Arduino D4IN4 connected to Arduino D5Ground connected to Arduino GroundKeypadConnected to Arduino D6-D13Power9V battery connected to Arduino Ground and VIN when not connected to computer USB
ตัวอย่างนี้ใช้ รหัสเริ่่มต้นเป็น '0000' นะครับ เวลาใส่ไม่ต้องใส่ * ตามท้าย ถ้าใส่รหัสถูกต้อง LED สีเขียวจะติด  ถ้าใส่ไม่ถูกจะเป็นสีแดง  ถ้าอยู่ระหว่างการใส่รหัส LED สีแดงจะกระพริบ  หลังจากใส่รหัสถูกแล้ว จะสามารถควบคุม Relay ได้ทั้ง 4 ตัวนะครับ  โดยการกดปุ่ม A B C D  กดแล้ว Relay ทำงานก็จะได้ยินเสียงป๊อกแป็กชัดเจนครับ :-) 
/* Locked Relays
 *
 * An Arduino Uno, Keypad, Relays and some LEDs for fun
 *
 * Using a password to enable the relays, then selective
 *    toggle the relays by key.
 *
 * Needed libraries
 * http://arduino.cc/playground/uploads/Code/Keypad.zip
 * http://arduino.cc/playground/uploads/Code/Password.zip
 */
#include <Keypad.h>
#include <Password.h>
int relay1 = 2;   
int relay2 = 3;
int relay3 = 4;
int relay4 = 5;
int locked = 1; 
int passinput = 0;
int lockedled = 14;
int unlockedled = 15;
long ledflashvar = 0;
long ledflashtime = 300;  
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}};
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7, 6};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
Password password = Password("0000");   // รหัสของการปลดล็อค
void setup(){
  //  กำหนดค่าเริ่มต้น และ PIN ต่างๆ
  Serial.begin(9600);
  pinMode(relay1, OUTPUT);
  digitalWrite(relay1, 255);
  pinMode(relay2, OUTPUT);
  digitalWrite(relay2, 255);
  pinMode(relay3, OUTPUT);
  digitalWrite(relay3, 255);
  pinMode(relay4, OUTPUT);
  digitalWrite(relay4, 255);
  pinMode(lockedled, OUTPUT);
  digitalWrite(lockedled, 255);
  pinMode(unlockedled, OUTPUT);
  digitalWrite(unlockedled, 0);
}
void loop(){
  char key = keypad.getKey();  // รับค่าจาก keypad
  
  
  // กรณีที่ Lock อยู่  LED สีแดงจะติด  และหากอยู่ระหว่างการใส่รหัส LED สีแดงจะกระพริบ
  if(locked){
    if(passinput){
      unsigned long ledcurrentvar = millis();
      if(ledcurrentvar - ledflashvar > ledflashtime) {
        ledflashvar = ledcurrentvar;
        digitalWrite(lockedled, !digitalRead(lockedled));
      }
    }
    
    // ถ้าไม่ได้อยู่ระหว่างการใส่รหัส
    else{
      digitalWrite(lockedled, 255);   // LED สีแดงจะติด
    }
    digitalWrite(unlockedled, 0);     // LED สีเขียวดับ
  }
  
  
  if (key != NO_KEY){
    Serial.println(key);   // แสดงค่าที่กดบน Serial monitor
    password.append(key);  // บันทึกค่ารหัสที่กดและเปรียบเทียบกับรหัสที่ถูกต้อง
    passinput = 1;         // อยู่ระหว่างการใส่รหัส
    
    // ถ้ากด '*' ให้เริ่มใส่รหัสใหม่
    if(key == '*'){  
      password.reset();     // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก
      passinput = 0;        // ไม่อยู่ระหว่างการกดรหัส  
      locked = 1;
      digitalWrite(relay1, HIGH);   // ตั้งค่า Relay ให้อยู่ในสถานะ Hight
      digitalWrite(relay2, HIGH);
      digitalWrite(relay3, HIGH);
      digitalWrite(relay4, HIGH);
    }
    
    if(password.evaluate()) {       //  ถ้าใส่ Password ถูกต้องให้ปลดล็อค 
      locked = !locked; 
      password.reset();             // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก
      passinput = 0;
    }
    
     //  ถ้าปลดล๊อคแล้วให้ไฟสีเขียวติด  สีแดงดับ  และสามารถควบคุมการเปิดปิดของ Relay ได้
    if(!locked) {                  
      passinput = 0;
      digitalWrite(lockedled, 0);
      digitalWrite(unlockedled, 255);
      
      switch (key) {                //  และเลือก Relay ที่ต้องการควบคุม
        case 'A':
          digitalWrite(relay1, !digitalRead(relay1));
          break;
        case 'B':
          digitalWrite(relay2, !digitalRead(relay2));
          break;
        case 'C':
          digitalWrite(relay3, !digitalRead(relay3));
          break;
        case 'D':
          digitalWrite(relay4, !digitalRead(relay4));
          break;
      }
      
      
      password.reset();              // เริ่มต้นใส่รหัสใหม่ตั้งแต่ตัวแรก
    }
  }
}

 เรียบร้อยครับ กับการตั้งรหัสเพื่อควบคุมอุปกรณ์ไฟฟ้า  ด้วยต้นทุนไม่ถึง 1500 บาท  วันนี้ขอจบบทความเพียงเท่านี้นะครับ  หากต้องการถาม หรือ แนะนำติชม หรือ ซื้อสินค้า  ก็ติดต่อเข้ามาได้ที่ Website หรือ Facebook ของเรานะครับ

หาข้อมูลเพิ่มเติมได้ที่


โดย Mountain "A"


801S Vibration Sensor vibration module โมดูลตรวจจับความสันไหวปรับความไวได้

801S Vibration Sensor vibration module โมดูลตรวจจับความสันไหวปรับความไวได้

คุณภาพสูง ใช้ไฟเลี้ยง3-5V


สามารถปรับความไวได้ ให้สัญญาณanalog และ digital ใช้กับงานตรวจจับ เช่น อุปกร์ป้องกันขโมย,บอร์ดล็อกแบบอิเล็กทรอนิกส์ 
,อุปกรณ์ตรจจับความสั่นไหว






ตัวอย่างการใช้งาน

เซนเซอร์ -> Arduino

+5V -> 5V

Gnd -> Gnd

Output -> A0

 ตัวอย่าง Code

void setup() {

  // initialize serial communication at 9600 bits per second:

  Serial.begin(9600);

}

// the loop routine runs over and over again forever:

void loop() {

  // read the input on analog pin 0:

  int sensorValue = analogRead(A0);

  // print out the value you read:

  Serial.println(sensorValue);

  delay(1000);        // delay in between reads for stability

}

 ตัวอย่าง VDO

https://www.youtube.com/watch?v=7FkL_tyRbQA



อ้างอิง

www.myarduino.net/product/34/801s-vibration-sensor-vibration-module-โมดูลตรวจจับความสันไหวปรับความไวได้

โครงงาน โปรเจคหุ่นยนต์ Arduino

โครงงาน โปรเจคหุ่นยนต์ Arduino

เชื่อว่าหุ่นยนต์เป็นของโปรดของคนไทยจำนวนไม่น้อย และมีคนไทยจำนวนไม่น้อยเช่นกันที่ใฝ่ฝันจะเป็น "ผู้สร้าง"หุ่นยนต์ด้วยตัวของเขาเอง แต่การสร้างหุ่นยนต์นั้นถือเป็นสิ่งที่ทำได้ยากยิ่งสำหรับคนไทยเพราะบ้านเราไม่มีสิ่งที่เอื้อต่อการเป็นนักประดิษฐ์เลย แต่เมื่อประตูโลก อินเตอร์เน็ต ได้เปิดกว้างขึ้นทำให้คนไทยจำนวนไม่น้อยเริ่มมองเห็นโอกาสที่เขาจะเป็นอีกผู้หนึ่งที่จะเป็นผู้สร้างหุ่นยนต์ และปัจจุบันมีหน่วยงานหลายแห่งที่เล็งเห็นความสำคัญในการส่งเสริมและสนับสนุนให้คนไทยได้มีโอกาสเป็น "ผู้สร้าง"หุ่นยนต์
การเรียนรู้  Arduino นั้นเป็นสิ่งที่น่าสนใจเพราะได้ความในเรื่องของการ ต่อวงจรอิเล็กทรอนิกส์ การเขียนโปรแกรมคอมพิวเตอร์ ภาษาซี  การสร้างแอพแอนดรอยด์ และ เรียนรู้ การประกอบหุ่นยนต์

นอกจากนี้ ในอนาคต ยังสามารถพัฒนา คิดค้นสิ่งประดิษฐ์ใหม่ๆ พัฒนาหุ่นยนต์ใหม่ๆ หรือ ต่อยอดกับการเรียนรู้หุ่นยนต์ และ คอนโทรลเลอร์ การเขียนโปรแกรมคอมพิวเตอร์ แบบอื่นๆต่อไป ได้อีกด้วย
ไมโครคอนโทรลเลอร์ เป็นอุปกรณ์ชิปไอซีพิเศษชนิดหนึ่ง ที่เราสามารถเขียนโปรแกรม เพื่อควบคุมการทำงานตามที่ต้องการได้ ภายในไมโครคอนโทรลเลอร์จะประกอบไปด้วย  หน่วยประมวลผล  , หน่วยความจำชั่วคราว (RAM) , หน่วยความจำถาวร (ROM) , พอร์ตอินพุต , เอาท์พุต
บอร์ด Arduino (ขออ่านว่า อาดูโน่) ก็เป็น ไมโครคอนโทรลเลอร์  เช่นกัน มีหลายรุ่นหลายขนาด ยกตัวอย่าง เช่น UNO, Leonardo, Micro, Pro Mini, BT, Mega2560 , Nano เป็นต้น ซึ่งแต่ละรุ่น จะมี Spec ที่ไม่เหมือนกัน ได้แก่ ขนาด, ความจุ, ความเร็ว, จำนวนขา I/O ผู้เล่นสามารถเลือกให้เหมาะสมกับงานของตัวเองได้ รุ่นที่เห็นว่าได้รับความนิยมในเมืองไทยมากๆ ก็คงจะเป็นรุ่น UNO ซึ่งปัจจุบัน ก็เป็น Arduino UNO R3 แล้ว (R3 หมายถึง เวอร์ชั่นที่ 3)

การเขียนโปรแกรมคอมพิวเตอร์ ภาษาซีถือว่าเป็นภาษาระดับสูง และภาษาโปรแกรมที่นักเขียนโปรแกรมหรือ ที่เรียกว่าโปรแกรมเมอร์ นิยมใช้กันมาก เนื่องจากเป็นภาษาที่มีความเร็ว ในการทำงานสูงใกล้เคียงกับภาษาเครื่อง มีโครงสร้างที่ชัดเจน เข้าใจง่าย สามารถเขียนโปรแกรม เพื่อติดต่อกับฮาร์ดแวร์ ของเครื่องได้ เช่น คอนโทรลเลอร์ ของ Arduino และ อีกหลายๆบริษัท ที่ภาษาโปรแกรมระดับสูงหลายๆภาษาไม่สามารถทำได้ และ ยังเป็นพื้นฐานที่ดี ในการศึกษา ภาษาโปรแกรม ภาษาอื่นๆ ต่อไป

แอพแอนดรอยด์  เขียนด้วย App inventor เพื่อควบคุม บอร์ด Arduino ผ่าน สมาร์ทโฟน มีลักษณะการเขียนโปรแกรมเป็นแบบ Visual Programming  คือ เขียนโปรแกรมด้วยการต่อบล็อกคำสั่งเหมือนการต่อ LEGO สามารถเรียนรู้ได้อย่างรวดเร็ว โดยโปรแกรมนี้จะให้บริการผ่านอินเตอร์เน็ต สามารถสร้าง แอพแอนดรอยด์ต่างๆได้อย่าง ง่ายดาย  และ รวดเร็ว และยังช่วยให้เรามีความเข้าใจ โครงสร้างของการเขียนโปรแกรมด้วยภาษา Java ได้เป็นอย่างดี

เครื่องตรวจวัดระดับฝุ่นละอองในอากาศ แสดงผลผ่านอินเตอร์เน็ต

โครงงานเครื่องตรวจวัดระดับฝุ่นละอองในอากาศ แสดงผลผ่านอินเตอร์เน็ต


1

รูปที่ 1 การต่อใช้งานเครื่องตรวจวัดระดับฝุ่นละอองในอากาศ แสดงผลผ่านอินเตอร์เน็ต
 ที่มาและความสำคัญของ เครื่องตรวจวัดระดับฝุ่นละอองในอากาศ
ในปัจจุบันปัญหาเรื่องฝุ่นละอองในอากาศ โดยเฉพาะในกรุงเทพมีความรุนแรงมากขึ้นเนื่อง จากความหน่าแน่นของประชากร ยานพาหนะ การก่อสร้าง กิจกรรมต่างๆที่เกิดขึ้นทำให้คุณภาพอากาศแย่ มีผลกระทบต่อคุณภาพชีวิต ทางผู้จัดทำเห็นปัญหาที่เกิดขึ้น จึงมีความสนใจที่จะทำ เครื่องตรวจวัดระดับฝุ่นละอองในอากาศ เมื่อทำเครื่องนี้สำเร็จ จะใช้วัดคุณภาพอากาศตามสถานที่ต่างๆและสามารถปรับปรุงคุณภาพของอากาศที่แย่ ในดียิ่งขึ้น
คุณสมบัติการทำงานของโครงงาน
-ความละเอียดของฝุ่นที่วัดได้ต่ำสุดประมาณ 1µm
– ย่านการตรวจวัดความเข้มของฝุ่น 0 – 28000 pcs/liter
– แสดงค่าคุณภาพของอากาศผ่าน Webpage
– เก็บค่าและเรียกดูคุณภาพของอากาศผ่าน Webpage
การต่อวงจรของโครงงาน
2
รูปที่ 2 รูปวงจรสมบูรณ์

วงจรการต่อวงจรที่สมบูรณ์ของโครงงาน
ส่วนที่ 1 aMG Ethernet INFโมดูลการการติดต่อสื่อผ่านระบบอินเตอร์เน็ต ผ่านสายแลน ทำหน้าที่เป็นตัวรับส่งข้อมูลโดยมีบอร์ด STM32F4-Discover เป็นตัวประมวลผลการทำงานของโครงงาน โดยการต่อจะต่อเข้าที่ขาดังรูป
3
รูปที่ 3 การต่อวงจรของ aMG Ethernet INF

ส่วนที่ 2 aMG SQLite Database Serverโมดุลการเก็บข้อมูล(Database) โดยจะมีSDCard เป็นตัวเก็บข้อมูล และสามารถเรียกดูข้อมูลได้ โดยมีบอร์ด STM32F4-Discover เป็นตัวประมวลผลการทำงานของโครงงาน การต่อจะต่อเข้าที่ขาดังรูป
Capture
รูปที่ 4 การต่อวงจรของ aMG SQLite Database Server

ส่วนที่ 3 MicroSD cardสื่อจัดเก็บข้อมูล ที่ใช้ในการเก็บค่าหน้าเว็บเพจแสดงผลของโครงงาน การต่อจะต่อเข้าที่ขาดังรูป
4
รูปที่ 5 การต่อวงจรของ MicroSD card
ส่วนที่ 4 Particle Sensor Model PPD42NS เซ็นเซอร์วัดความเข้มของฝุ่น เมื่อตรวจพบความเข้มของฝุ่น เซ็นเซอร์จะส่งสัญญาณ PWM ไปที่บอร์ดSTM32F4-Discover ทำการประมวลผลและส่งค่าไปเก็บข้อมูล และแสดงผล โดยการต่อจะต่อเข้าที่ 1 ของเซ็นเซอร์ต่อกับ GND , ขา 3 ต่อกับ5V, ขา 4ต่อกับ PB2
5
รูปที่ 6 การต่อวงจรของ Particle Sensor Model PPD42NS
ส่วนที่ 5 ขาที่ใช้ของบอร์ดSTM32F4-Discoverที่ทำการต่อขา โดยเราจะใช้ต่อขาจากส่วนที่ 1 – 6 ที่ได้ระบุไว้
 อุปกรณ์ที่ใช้ในโครงงาน
  1. STM32F4-Discover 1 อัน
  2. aMG F4 Connect 2 1 อัน
  3. Lan cable 1 เส้น
  4. aMG Ethernet INF 1 อัน
  5. aMG SQLite Database Server 1 อัน
  6. Particle Sensor Model PPD42NS 1 อัน
  7. MicroSD card 2 อัน 8. 9VDC Adapter   1 อัน
 Particle Sensor Model PPD42NS
6
รูปที่ 7Particle SensorModel PPD42NS
8
รูปที่ 8 รายละเอียดของเซ็นเซอร์

หลักการทำงานของเซ็นเซอร์
ภายในจะมีInfrared LED ทำมุม 45 องศา กับ Photodiode จะมีเลนส์รวมแสง รวมแสงบังหน้าPhotodiode จะทำงานโดยเมื่อมีฝุ่นมาบดบังแสง แสงที่ส่งไปยัง Photodiode จะมีความเข้มของแสงน้อยลง ทำให้แรงดันตกไปอยู่ที่ 0.7 V แต่ถ้าไม่มีฝุ่นมากบังแสง แรงดันก็จะเพิ่มขึ้นเป็น 4V ทำให้เกิดสัญญาณPWM ขึ้นมา ทำให้สามารถตรวจวัดความเข้มของฝุ่นได้
7
รูปที่  9 ภายในตัวเซ็นเซอร์
หลักการทำงานของโครงงาน
ทำการติดตั้งอุปกรณ์ให้ครบ ในสภาวะปกติเซ็นเซอร์จะจ่ายแรงดันไฟฟ้ากระแสตรง 4V ออกมา แต่เมื่อเซ็นเซอร์ตรวจพบฝุ่นละออง เซ็นเซอร์จะให้กำเนิดสัญญาณพัลส์ที่มีความกว้าง 10 msถึง 90 ms เมื่อไมโครคอนโทรลเลอร์พบสัญญาณพัลส์ขอบขาลง(Falling edge) จะเริ่มทำงาน โดยจะนับค่าเพิ่มขึ้นทีละหนึ่ง จนเมื่อพบสัญญาณพัลส์ขอบขาขึ้น(Rising edge) จะหยุดทำการนับ และจะเก็บไว้ในตัวแปรที่กำหนดไว้ และเมื่อพบสัญญาณพัลส์ขอบขาลง(Falling edge) จะเริ่มทำงานอีกครั้ง โปรแกรมจะทำงานโดยการเก็บค่าที่ได้ทั้งหมดมารวมกัน ภายใน 30 วินาที และนำค่าที่ได้มาหารด้วย 30 วินาที ในที่นี้ คือ 30000 มิลลิวินาที
8
รูปที่  10 สัญญาณพัลส์ของเซ็นเซอร์เมื่อตรวจพบฝุ่น
ค่าที่ได้จะทำไปคูณกับสมาการพหุนามตัวแปรเดียว(Polynomial equation) ที่หาได้จากกราฟในดาต้าชีท ซึ้งเป็นการ Calibrate ค่าให้ถูกต้องตาม Datasheet โดยค่าที่ได้ถูกแสดงทุกๆ 30 วินาที และจะแสดงผลในหน้าเว็บเพจ และถูกเก็บไว้ สามารถเรียกดูภายหลังได้
9
10
รูปที่  11, 12 กราฟCalibrate โดยใช้บุหรี่ และการพลอตกราฟของสมาการ
ขั้นตอนการใช้งานโครงงาน
  1. ตรวจการต่อสายของแต่ละวงจรให้พร้อมใช้งาน
11
รูปที่ 13 ตรวจการต่อสายของวงจรให้เรียบร้อย
  1. ทดสอบโดยการจุดรูป แล้วนำไปอยู่ใกล้ๆกับเซ็นเซอร์
12
รูปที่ 14 ทดสอบโดยการจุดธูป
  1. โดยเข้าเว็บเบาร์เซอร์ ที่ 192.168.1.42จะขึ้นหน้าแรกของเว็บ13
รูปที่ 15 เข้าหน้าเว็บเพจ ที่ทาการตั้งค่าไว้
 4. ให้คลิกที่แทบด้านบนชื่อ Pages > Show ในที่นี้ดูการเปลี่ยนแปลงค่าความเข้มของฝุ่น โดยจะมีการแสดงผล 2 แบบ คือแบบกราฟ กับตัวเลข และการแจ้งเตือนด้วยเสียง(Alarm) โดยการแจ้งเตือนด้วยเสียงเราสามารถปรับค่าการแจ้งเตือนได้ โดยเลื่อนSlide input ตามค่าที่เราต้องการ โดยค่านี้จะมากกว่าหรือเท่ากับค่าที่เราปรับที่ Slide input เสียงก็จะดังขึ้นมา
                         14
รูปที่ 16 หน้าการแสดงผลแบบตัวเลข กราฟ และการปรับค่าการแจ้งเตือน
  1. หากต้องการดูค่าที่เก็บไว้ใน Database ให้คลิกที่แทบด้านบนชื่อ Database > Select Database >database.db> Select Table > concentration
15

รูปที่ 17 เลือกดู Database ที่บันทึกไว้
ผลการทดลอง
ทดลองตรวจวัดความเข้มของฝุ่นในหอพัก หลังมหาลัยเทคโนโลยีพระจอมเกล้าพระนครเหนือ
ix
รูปที่ 18 ห้องที่ทาการทดสอบ
แสดงผลผ่านเว็บเพจ
19
รูปที่ 19 ดูค่าที่เซ็นเซอร์ตรวจวัด
ค่าที่ได้จากการทดสอบ
20
รูปที่ 20 ตารางค่าที่วัดได้ 30 ค่า
ทดลองโดยการจุดธูป 1 และ 2 ดอก
21
รูปที่ 21 ทดลองด้วยการจุดธูป 1 และ 2 ดอก
16
รูปที่ 22 ตารางค่าที่วัดช่วงที่ทดสอบ 5 ค่า

จากการทดลองสรุปได้ว่าการจุดธูป 1 ดอก ค่าความเข้มของฝุ่นมีค่าใกล้เคียงกับการจุดธูป 2 ดอก เนื่องมาจากขนาดของอนุภาคฝุ่นเหมือนกัน แต่ถ้าหากทำการทดลองโดยการเปรียบเทียบระหว่างธูปและบุหรี่ จะทำให้ค่าที่เห็นแตกต่างกันอย่างชัดเจน
โปรแกรม Simulink ที่สมบูรณ์ของโครงงาน
17

โปรแกรม Simulink ที่ใช้ทั้งหมดในโครงงาน
1. Target Setup เลือกชนิดของการ Compiler และ MCU ที่ต้องการ
2. Http Webserver Setup ตั้งค่าการทางาน Webserver ของ aMG Ethernet INF เช่น IP Address หรือ UART
3. SQLite Database Setup ตั้งค่าการเชื่อมต่อของ aMG SQLite Database Server
4,5,6. Webserver Volatile Data Mapping เลือกตัวแปรที่ต้องการแสดงค่าบนเว็บ
7. UART Setup ตั้งค่าความเร็วในการรับส่งข้อมูล และขาการติดต่อของ UART
8. Volatile Data Storage3 ทาการเก็บค่าต่างๆที่ส่งมาไว้ในตัวแปร sld
9. Volatile Data Storage1 ทาการเก็บค่าต่างๆที่ส่งมาไว้ในตัวแปร LPO
10. Volatile Data Storage4 ทาการเก็บค่าต่างๆที่ส่งมาไว้ในตัวแปร alm
11. Volatile Data Storage Read1 อ่านค่าจากตัวแปร sld รอการส่งค่าต่อไป
12. Volatile Data Storage Read2 อ่านค่าจากตัวแปร LPO รอการส่งค่าต่อไป
13. MATLAB Function โปรแกรมเปรียบเทียบค่าของLPO และsld เพื่อทาการตั้งค่าการแจ้งเตือน
14. Volatile Data Storage Write นาค่าที่คานวณเสร็จแล้ว มาเก็บไว้ในตัวแปร alm
15. SQLite Database Query สร้างพื้นที่การเก็บค่าต่างๆไว้ใน Database
16. Digital Input กาหนดให้ขา PB2 เป็นขารับสัญญาณดิจิตอล รับสัญญาณ PWM ที่ส่งมากจากเซ็นเซอร์
17. MATLAB Function โปรแกรมคานวณค่าความเข้มข้นของฝุ่น จะอธิบายรายละเอียดโปรแกรมในขั้นต่อไป
18. Volatile Data Storage Write นาค่าที่คานวณเสร็จแล้ว มาเก็บไว้ในตัวแปร LPO
19. Volatile Data Storage Read อ่านค่าจากตัวแปร LPO นาไปใช้
20. Data Type Conversion แปลงชนิดของตัวแปร LPO จาก int32 เป็น single
21. SQLite Database Query1 นาค่าจากตัวแปร LPO ที่แปลงชนิดแล้ว มาทาการเก็บไว้ใน Database ชื่อ
concentration
22. Terminator ปิดช่องของบล๊อคต่างๆที่ไม่ต้องการใช้ และป้องกันการแจ้งเตือน
โปรแกรม MATLAB Function ของโครงงาน
a
b
c
d

สรุปผลการทำงานเครื่องตรวจวัดระดับฝุ่นละอองในอากาศ แสดงผลผ่านอินเตอร์เน็ต
          จากการทำงานของเครื่องพบว่า การทำงานของเซ็นเซอร์จะเสถียรเมื่อเปิดไว้ประมาณ 3 นาที และการวัดระดับฝุ่นในอากาศ ควรทำในที่ที่ มีอากาศนิ่ง เซ็นเซอร์จะทำการตรวจวัดได้ดีที่สุด แต่บางครั้งอาจไม่ตรงตามการ Calibrate ที่ได้ตั้งไว้ เนื่องไม่สามารถควบคุมตัวแปรในอากาศอื่นได้ ส่วน Datasheet ที่ให้มามีรายละเอียดน้อยเกินไป ต้องไปศึกษาดูวิธีการใช้งานในอินเตอร์เน็ตเพิ่ม ประโยชน์ที่ได้จากการทำโครงงานนี้ คือสามารถเอาโครงงานไปใช้ตรวจวัดฝุ่นตามสถานที่ต่างๆได้ และดูความเข้มของฝุ่น เพื่อจะได้ปรับสภาพอากาศให้ดีขึ้น ความรู้ที่ได้จากโครงงาน สามารถตั้งค่าการติดต่อหรือ IP ในการติดต่อระหว่างอุปกรณ์และคอมพิวเตอร์ ศึกษาการทำงานของเซ็นเซอร์ และเขียนโปรแกรมอ่านค่าจากเซ็นเซอร์ รู้ความเข้มของฝุ่นในแต่ละสถานที่ และทำการศึกษาการเก็บและเรียกดูข้อมูลในDatabase การนำไปต่อยอดอาจจะนำเซ็นเซอร์ตัวนี้ไปใช้ตรวจวัด และแจ้งเตือนฝุ่นควันไฟในห้องเก็บของหรือโกดังที่มีสภาพอากาศนิ่ง แสดงผลผ่านระบบอินเตอร์เน็ตแจ้งเตือนผ่านระบบอินเตอร์เน็ต

เซนเซอร์ตรวจจับความเคลื่อนไหว Motion Sensor Module

PIR เซนเซอร์ตรวจจับความเคลื่อนไหว Motion Sensor Module
          ตรวจจับความเคลื่อนไหวจากความร้อน เมื่อมีคนเดินผ่านก็จะจับค่าความร้อนที่เปลี่ยนแปลง แล้วส่งค่าสัญญาณมีไฟ ออกมา ในกรณีที่ไม่มีการเปลี่ยนแปลงส่งค่าไม่มีไฟ ออกมา เราสามารถนำค่านี้ไปสั่งควบคุม Arduino ได้ สามารถปรับเวลาหน่วงเวลาในการตรวจจับครั้งต่อไปได้ ปรับระยะทางการตรวจจับได้ 3-7 เมตร มีช่องให้ต่อ LDR เพิ่ม เพื่อให้ทำงานตรวจจับแค่ตอนกลางคืน

รายละเอียด PIR เซนเซอร์ตรวจจับความเคลื่อนไหว Motion Sensor Module
  • Dimension: 3.2cam x 2.4cm x 1.8cm (approx)
  • Infrared sensor with control circuit board
  • The sensitivity and holding time can be adjusted
  • Working Voltage Range: DC 3V- 5V
  • Current drain:<60uA
  • Voltage Output: High/Low level signal:3.3V TTL output
  • Detection distance: 3--7M(can be adjusted)
  • Detection range: <140°
  • Delay time: 5-200S(can be adjusted, default 5s +-3%)
  • Blockade time: 2.5 S (default)
  • Trigger: L: Non-repeatable trigger  H: Repeat Trigger (default)
  • Work temperature:-20-+80°C
  • Trigger Method: L unrepeatable trigger / H repeatable trigger


ตัวอย่างโคด Code Arduino PIR Motion Sensor Module


int ledPin= 13;
int inputPin= 3;

void setup(){
  pinMode(ledPin, OUTPUT);
  pinMode(inputPin, INPUT);
}

void loop(){
  int valuedigitalRead(inputPin);

  if (value == HIGH)
  {
    digitalWrite(ledPin, HIGH);
    delay(1000) ;
  }

  else
  {
    digitalWrite(ledPin, LOW);
  }
}