วันพุธที่ 10 มกราคม พ.ศ. 2561

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

PIR Sensor เป็นเซ็นเซอร์ตรวจจับความเคลื่อนไหวที่อาศัยหลักการที่ว่า สิ่งมีชีวิตจะปล่อยรังสีอินฟาเรดออกมา เซ็นเซอร์ตัวนี้จะตรวจจับรังสีอินฟาเรดที่เข้ามาตกกระทบบนตัวเซ็นเซอร์ และให้สัญญาณออกมาเป็นแบบดิจิตอล สามารถปรับความไว และหน่วงเวลาได้จากตัวต้านทานปรับค่าได้แบบเกือกม้า
การใช้งานกับไมโครคอนโทรลเลอร์


ขา DATA จะให้เอาต์พุตออกมาในรูปของดิจิตอล สามารถปรับลักษณะของสัญญาณขาออกได้จากการเปลี่ยนจั้มเปอร์ มีรูปแบบสัญญาณเอาต์พุต 2 แบบ คือ
  • สัญญาณแบบคลื่นพัลส์ต่อเนื่อง
  • สัญญาณลอจิก 1 ค้างไว้ จนกว่าจะไม่สามารถจับความเคลื่อนไหวได้ จึงจะกลับมาเป็นลอจิก 0
ปุ่มปรับ Delay Time Adjust ใช้ปรับการหน่วงเวลาตรวจจับ หากปรับไวมาก จะทำให้ค้างสถานะ 1 ไว้นาน เนื่องจากการตรวจจับไม่ให้ผลแบบทันทีทันใด เมื่อตรวจจับพบ จะให้สถานะทางเอาต์พุตเป็น 1 ค้างไว้ เวลาที่ค้างไว้ขึ้นอยู่กับการปรับ Delay Time Adjust เมื่อหมดเวลาจึงตรวจจับอีกครั้ง หากตรวจจับไม่เจอก็จะให้สถานะเป็น 0 แต่หากจับเจอ จะค้างสถานะ 1 ไว้
ปุ่มปรับ Sensitivity Adjust ใช้ปรับความไว และระยะในการตรวจจับ

ตัวอย่างการใช้งานร่วมกับ Arduino
/* PIRTEST By IOXhop.com */

int PIRPin = 2;
int ledPin = 13;

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

void loop() {
  digitalWrite(ledPin, digitalRead(PIRPin));
  delay(10);
}


การนำไปใช้งานกับ nodeMCU



ขอบคุณที่มา : ioxhop

ตัวอย่างการใช้งาน NodeMCU ส่งข้อความแจ้งเตือนไปยัง LINE

Line Notify การแจ้งเตือนจากเว็บเซอร์วิสทาง LINE


LINE ได้มีบริการแจ้งเตือนจากเว็บเซอร์วิสไปยังผู้ขอรับบริการ แต่ผู้ใช้งานจะต้องเพิ่ม Line Notify เป็นเพื่อนในบัญชีของท่านก่อน Line Notify สามารถส่งได้ทั้งคุณคนเดียวหรือเป็นกลุ่มก็ได้

ขั้นตอนการสมัครใช้งาน

1. ไปที่ https://notify-bot.line.me จากนั้นเลื่อนลงด้านล่างจะเจอ QR Code ให้เพิ่มเพื่อนโดยการสแกน QR Code นี้



2. จากนั้นไปที่ เข้าสู่ระบบ ดังรูป



3. ให้ใส่ Email และ รหัสผ่าน ในขั้นตอนนี้ผู้อ่านต้องไปตั้งค่าบัญชี LINE ของท่านให้ลงทะเบียนผ่านอีเมล์ได้ก่อน



4. เมื่อคลิก Log in แล้วตรงส่วนเข้าสู่ระบบจะเปลี่ยนเป็นชื่อบัญชีของผู้ใช้นั้น ให้คลิกตรงรูปลูกศรชี้ลง(หมายเลข 1) แล้วคลิกที่ My page (หมายเลข2)



5. เลื่อนลงด้านล่างจากนั้นจะเห็นปุ่มที่มีข้อความว่า Generate token ดังรูปให้คลิกปุ่มเพื่อสร้าง Token


6. กรอกรายละเอียดและเลือกบัญชีปลายทางที่ต้องการรับการแจ้งเตือน
          หมายเลข 1 ชื่อ Token
          หมายเลข 2 ช่องค้นหาบัญชีปลายทางที่ต้องการส่งถึง
          หมายเลข 3 ปุ่มสร้าง Token



จากตัวอย่าง ตั้งชื่อ Token ว่า “แปลงปลูกผักที่ 1” และเลือกบัญชีปลายทาง 1-on-1 คือบัญชีของเรานั้นเอง ผู้อ่านสามารถเลือกส่งไปยังกลุ่มได้เช่นกัน ให้สังเกตจากสีข้อความจะขึ้นเป็นสีเขียวนั้นหมายถึงท่านได้เลือกใช้บัญชีนั้น
กรณีเลือกส่งไปยังกลุ่ม   *หากเลือกเป็นกลุ่มอย่าลืมเชิญ Line Notify เข้าไปในกลุ่มด้วยไม่อย่างนั้นข้อความแจ้งเตือนจะไม่ขึ้น
7. จากนั้นคลิกที่ปุ่ม Generate token จะปรากฏ Token ให้คัดลอกเก็บไว้ เพราะท่านจะได้เห็น Token นี้ครั้งเดียวเท่านั้นถ้าหากปิดหน้าต่างไปแล้วจะไม่สามารถเรียกดูได้อีก

8. เมื่อคลิกปุ่ม Close แล้วจะเห็นชื่อ Token ที่เราได้สร้างไว้ดังรูป หากต้องการยกเลิกให้คลิกปุ่ม Disconnect




ทดสอบการส่งข้อความแจ้งเตือน
            ไปที่  https://iot.makersmagazine.in.th/webLine




การทดสอบ
                   1.ใส่ Token ที่ได้จากการขั้นตอนนี้ผ่านมาลงในช่อง Token
                   2.พิมพ์ข้อความที่ต้องการส่งลงในช่อง Messages
                   3.กดปุ่ม Send เพื่อส่ง
                   ช่อง Responses จะแสดงผลลัพธ์ทั้งหมดที่ เว็บเซอร์วิสส่งกลับมา


ผลลัพธ์ที่ Application LINE



ตัวอย่างการใช้งาน NodeMCU ส่งข้อความแจ้งเตือนไปยัง LINE
ตัวอย่างนี้จะให้ NodeMCU ส่ง LINE ทุกครั้งที่มีการกด ZX-SWITCH01




ตัวอย่างโปรแกรม
#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino

String LINE_TOKEN = <token LINE>;

#define buttonPin D1 // Define D1 as switch pin
#define ledPin1 D3 // Define D1 as LED pin

// Variables will change:
int ledState = HIGH;         // the current state of the output pin
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin

const char* ssid     = "your-ssid";   //Wifi Name
const char* password = "your-password";   //Wifi Password

void setup() {

  pinMode(ledPin1, OUTPUT); // Set pin as output
  pinMode(buttonPin, INPUT); // set pin as input

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

}

void loop() {
  int reading = digitalRead(buttonPin);
  // if the button state has changed:
  if (reading != buttonState) {
    buttonState = reading;

    // only toggle the LED if the new button state is LOW
    if (buttonState == LOW) {
      ledState = !ledState;
      Line_Notify(LINE_TOKEN, "กดปุ่ม ZX-SWITCH01"); // Call funtion Line_Notify();
      delay(100);
    }
  }
  digitalWrite(ledPin1, ledState);  // set the LED:
}

void Line_Notify(String LINE_Token, String message) {

  String msg = String("message=") + message;

  WiFiClientSecure client;
  if (!client.connect("notify-api.line.me", 443)) {
    Serial.println("connection failed");
    return;
  }

  String req = "";
  req += "POST /api/notify HTTP/1.1\r\n";
  req += "Host: notify-api.line.me\r\n";
  req += "Content-Type: application/x-www-form-urlencoded\r\n";
  req += "Authorization: Bearer " + String(LINE_Token) + "\r\n";
  req += "Content-Length: " + String(msg.length()) + "\r\n";
  req += "\r\n";
  req +=  msg;

  client.print(req);

  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");
}
  

ขอบคุณที่มาของข้อมูลและภาพ : inex