วันจันทร์ที่ 6 กุมภาพันธ์ พ.ศ. 2560

การเขียนโปรแกรมเบื้องต้นกับ Arduino C++ (ไฟวิ่ง)

การเขียนโปรแกรมเบื้องต้นกับ Arduino C++ (ไฟวิ่ง)

โดย เจ้าของร้าน
เมื่อ 2 ปีที่ผ่านมา
บทความตอนนี้จะเป็นการทดลองเขียนไฟวิ่ง 4 ดวงกันครับ โดยจะกำหนดขาใช้งาน ที่จะต่อกับ LED ดังนี้ คือ
ขา Digital pin 2 จะต่อกับ LED 1
ขา Digital pin 3 จะต่อกับ LED 2
ขา Digital pin 4 จะต่อกับ LED 3
ขา Digital pin 5 จะต่อกับ LED 4
โดยการทำงานในตอนนี้จะไห้วิ่งแบบเรียงลำดับกันไป จาก LED 1 ไปถึง LED 4 ครับ

คำสั่งกำหนดสถานะของpin HIGH หรือ LOW

digitalWrite(pinของ Arduino,สถานะมี HIGH และ LOW);




สำหรับการเขียน code คงจะไม่ใช้เรื่องยากอะไร คงจะใช้คำสั่งเดิมๆจากบทความตอนที่แล้วๆมาใช้กันครับ

int led1 = 2; // กำหนดขาใช้งาน
int led2 = 3;
int led3 = 4;
int led4 = 5;
void setup()
{
pinMode(led1, OUTPUT); // กำหนดขาทำหน้าที่ OUTPUT
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}
void loop()
{
digitalWrite(led1,HIGH); // ไฟ LED 1 ติด 500 ms
delay(500);
digitalWrite(led1,LOW); // ไฟ LED 1 ดับ500 ms
delay(500);
digitalWrite(led2,HIGH);
delay(500);
digitalWrite(led2,LOW);
delay(500);
digitalWrite(led3,HIGH);
delay(500);
digitalWrite(led3,LOW);
delay(500);
digitalWrite(led4,HIGH);
delay(500);
digitalWrite(led4,LOW);
delay(500);
}

อ้างอิง

http:// www.myarduino.net/article/6/การเขียนโปรแกรมเบื้องต้นกับ-arduino-c-ไฟวิ่ง

Arduino เล่นกับไฟกระพริบ

Arduino เล่นกับไฟกระพริบ






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


สำหรับครั้งนี้ ผมจึงอยากจะมานำเสนอ “แบบฝึกหัดใช้ Arduino สำหรับคนเริ่มต้น” เพราะว่า ทางผมได้ BB SMS และ อีเมล์มาเยอะเกี่ยวกับ “ผม (หนู เค้า ตัวเอง) อยากเริ่มต้น และอยากใช้ไมโครฯ ไม่รู้จะเริ่มต้นอย่างไงดีอ่ะ?”   (มากันทุกเพศ ทุกวัย) ส่วนมาก ผมก้อแนะนำให้อ่านตาม ตัวอย่างบ้าง หรือ แนะนำหนังสือไปบ้าง ผมกลับมาคิดๆว่า ก่อนหน้านี้ ผมเคยใช้ไมโครคอนโทรลเลอร์ตัวอื่น ผมลองผิค ลองถูกเอง ใช้เวลานานเหมือนกัน กว่าจะเข้าใจพื้นฐาน มันก้อทำให้บางคนก็เล่นทางลัด ต่อตาม ตัวอย่างเลยแต่พอไม่ work ก้อทำอะไรต่อไม่ถูก ก้อมีอีกมาก
ฉะนั้น ผมนึกๆแล้ว คงต้องมี แบบฝึกหัดง่ายๆ ฉบับชาวบ้านไม่ต้อง เคยเป็น Programming อะไรล่ะครับ เพราะว่าจะไม่ใส่คำศัพท์อะไรยากๆเลย อยากให้พื้นฐานการเขียนโปรแกรม เดี่ยวไปศึกษาการใช้ Hardware ขั้นที่สูงกันต่อไป สำหรับคนที่เพิ่งจะเริ่มต้นกับ arduino (ไม่เคยใช้ไมโครตัวอื่นมาก่อน) อยากให้ลองทำการทดลองตาม บทความนี้ สักนิดก่อนครับ

ผมสรุป แบบฝึกหัดไว้หลายตอนครับ เอาเป็นว่าคิดออกแค่นี้ก่อน ทำไปเรื่อย เดือนก้อคงจะเสร็จ
เล่นกับไฟกระพริบ
สื่อสารกับคอมพิวเตอร์ ด้วย arduino
เล่นกับ Analog
ยังนึกไม่ออก ส่ง SMS มา Vote ก้อแล้วกัน
สำหรับอุปกรณ์เพิ่มเติม มีแค่บอร์ด arduino กับ LED ที่ติดมากับบอร์ดพอแล้ว อย่างน้อยๆทำให้เรา คุ้นเคยกับไมโครคอนโทรลเลอร์ และ เข้าใจพื้นฐานการเขียนโปรแกรมบน arduino กันครับ


<1> Blinking LED
Blinking LED คือ ไฟกระพริบ การหัดเขียนโปรแกรม เราจะเริ่มต้นทดสอบการเขียนโปรแกรมง่าย ให้ได้ Output ออกมาอย่างรวดเร็ว เหมือนกับ ในทางคอมพิวเตอร์เราจะเขียนโปรแกรม “Hello World”  ให้คอมพิวเตอร์ส่งข้อความออกมาทักทายทางจอภาพให้เร็วที่สุด ก้อเพื่อทดสอบว่าเราเริ่มจะเข้าใจการเขียนโปรแกรมแล้ว เซ็ทคอมไพล์เลอร์ เซ็ทบอร์ดถูกต้อง ผมเชื่อเลยว่ายังมีบางคน ต่อให้ พิมพ์ตาม ก้อยังมีอะไรสักอย่างที่ต้องผิคพลาดแน่ๆ เดี่ยวมาลองดูกัน
ก่อนจะทำไฟกระพริบกัน มารู้สิ่งแรกของการเขียนโปรแกรมบน Arduino ก่อนครับ การเขียนโปรแกรมบน Arduino จะเรียกว่า “sketch” (สะ-เคทช) เพราะว่าจริงๆ มันไม่เห็นรูปแบบการเขียนโปรแกรมแบบมาตราฐานนั้นสิ  มันบอกเรานิดๆว่า โปรแกรมที่เราเขียนเป็นแบบร่างๆ อยู่นะ
โครงสร้างใน sketch

ที่แตกต่างจากรูปแบบมาตราฐานคือ ใน sketch จะมี ฟังก์ชั่นเพิ่มเติมสองส่วน ได้แก่
ฟังก์ชั่น Setup() ทุกครั้งของการทำงาน ตั้งแต่จ่ายไฟ arduino จะทำงานตามคำสั่งที่อยู่ใน setup() เป็นส่วนแรก และ ทุกคำสั่งใน setup() ทำงานแค่ครั้งเดียวเท่านั้น ส่วนนี้จึงตั้งชื่อว่า setup หรือเอาไว้ตั้งค่านี้เอง

Void Setup() {
  // the setup() method runs once ,when starts
  // setup() ทำงาน แค่ครั้งแรก ครั้งเดียว ในใช้ในการ initial ค่าตัวแปร
  ……………………………
}
ฟังก์ชั่น loop() หลังจากที่ทำงานส่วน setup() ,โปรแกรมใน sketch จะทำงานในฟังก์ชั่น loop() ตามชื่อ ตลอดการจ่ายไฟ arduino จะทำงานทุกคำสั่งที่อยู่ใน loop() วนไปเรื่อยๆ

Void Loop(){
   // the loop() method runs again and again ,as long as arduino have a power.
   // loop() หลังจากรันส่วน setup ,โปรแกรมจะทำงาน เฉพาะคำสั่งที่อยู่ใน loop() และ วนอยู่ลูป เท่านั้น
   ……………………………
}

ลงมือกันเลย

อุปกรณ์ที่จำเป็น
บอร์ด  Arduino
LED ใช้บนบอร์ดเลย LED จาก D13
วงจร ยังไม่มี ใช้ LED จากบอร์ด Arduino เลย

เกริ่นมากแล้ว เริ่มกันเลยดีกว่าไฟกระพริบ พิมพ์ sketch ตามตัวอย่างข้างล่าง แล้วกดปุ่มคอมไพล์ (อยากให้พิมพ์เองนะครับ 😀 จะได้ชินกับการเขียนโปรแกรม)

// Blinking Testing Program
int ledPin =  13;    // LED connected to digital pin 13

// The setup() method runs once, when starts
void setup()   {
  // initialize the digital pin as an output:
  pinMode(ledPin, OUTPUT);
}

// the loop() method runs again and again
// as long as Arduino has power
void loop()
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(1000);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(1000);                  // wait for a second
}
**สำหรับใครที่ compile ไม่ผ่าน มีเรื่องหนึ่งที่ผมไม่ได้บอกไว้ คือ การเขียนโปรแกรมบน Arduino ตัวเล็ก ตัวใหญ่มีผลด้วยนะครับ เรียกว่า “Case Sensitive”
digitalwrite();  , DigitalWrite();  , digitalWRITE();
รูปแบบข้างบน ใช้ไม่ได้ มันผิค ใช้ได้แค่ digitalWrite();
ฉะนั้น ใคร compile ไม่ผ่าน ลองกลับไปดูว่าพิมพ์ ถูกหรือป่าว ถ้าเป็นคำสั่ง และพิมพ์ถูกต้อง  ตัว Arduino IDE  จะเปลี่ยนเป็นตัวเข้มให้เองครับ
** ถ้าใคร upload ไม่ผ่าน กลับไป บทเริ่มต้นใช้งานเลยครับ น่าจะเซ็ทอัป ผิค

Sketch ว่ามันทำงานกันอย่างไง?

สำหรับคนที่คอมไพล์ผ่าน โดยไม่มีปัญหาใดๆ ก็กดอีกปุ่ม upload ได้เลย สิ่งที่เราเห็นว่าไฟกระพริบ ความจริงแล้ว ที่เราเห็นก้อคือ การจ่ายไฟกับ ไม่จ่ายไฟให้ LED พอมันทำแบบ loop() เราจึงเห็นมันติดและดับ เป็นไฟกระพริบอย่างที่เห็น
จากตัวอย่างจะเห็น คำสั่งของ arduino สามคำสั่ง คือ digitalWrite() ,delay() ,pinMode() ซึ่งอยากศึกษารายละเอียด กดปุ่ม Help -> Reference  ที่ Arduino IDE ได้ครับ จะพาไปหน้า อธิบายคำสั่งนี้เอง

เมื่อจ่ายไฟ โปรแกรมจะทำงานในส่วนของ setup() ก่อน โดยเราได้กำหนดว่าจะใช้ขาไหนว่าเป็น Output เพื่อจ่ายไฟให้ LED ไว้โดยใช้คำสั่ง pinMode()  โดยที่ขา LED บนบอร์ด Arduino จะต่อกับ D13 ครับ จากตัวอย่างเราจึงสร้างตัวแปรชื่อ ledPin ซึ่งมีค่า 13 ไว้ เพื่อใช้แทนกำหนด ตัวเลข 13 ลงไปในโปรแกรม

int ledPin =  13;   // LED connected to digital pin 13

// The setup() method runs once, when the sketch starts
void setup()   {
  // initialize the digital pin as an output:
  pinMode(ledPin, OUTPUT);
}
มาถึงฟังก์ชั่น Loop() เราได้ใส่คำสั่ง digitalWrite() เป็นคำสั่งให้ขา Digital ของ Arduino จ่ายไฟ หรือ หยุดจ่ายไฟ คิดง่ายๆว่า Arduino เหมือนสวิตส์ที่เราสั่งเปิดปิดไฟ ได้โดยการโปรแกรมคำสั่ง การสร้างไฟกระพริบ ก้อเป็นการจ่ายไฟ และ หยุดจ่ายไฟ ที่เป็นจังหวะเท่ากัน  ดูในคำสั่งข้างล่าง ผมใส่ digitalWrite() แล้วจะต่อท้าย delay() เพื่อให้ไฟติด และหน่วงเวลาไว้ เพื่อให้มันยังติดหรือดับอยู่

// the loop() method runs over and over again, as long as Arduino has power
void loop()
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(500);                   // wait for a second
  digitalWrite(ledPin,LOW);     // set the LED off
  delay(500);                   // wait for a second
}

เอาล่ะครับ ตอนนี้เราได้ไฟกระพริบ แบบยังไม่รู้เลยวงจรอย่างไง 😀 เอาเป็นว่า เดี่่ยวรอบหน้าจะให้ลองลงมือมากขึ้นนะครับ สำหรับตอนนี้เราก้ออุ่นใจ เราว่าเขียนโปรแกรมบน Arduino ได้ และ บอร์ดที่เราได้มาไม่มีปัญหา  มาเจอความความท้าทายอันต่อไป
แบบทดสอบย่อย เพิ่มเติมไปลองทำดูเองนะครับ
สำหรับ ใครมีอุปกรณ์เพิ่มเติม ลองหา LED มาเพิ่ม ถ้าเราอยากจะย้าย จาก LED ที่ต่อกับ digital pin 13 (D13) มาใช้ขา digital pin 12 (D12) จะต้องทำอย่างไง
ทำได้ ส่ง เมล์ ส่ง BB มาบอกผม ด้วยนะ
<2> Too Fast ,Too Slow (Blinky LED II)
จากแบบฝึกหัดที่แล้ว ง่ายๆมาก ใช้ไฟกระพริบเดิมนี้ล่ะครับ เราจะทำอย่างไงให้ ไฟมันกระพริบ ช้าหรือเร็วขึ้น จากแบบฝึกหัด ครั้งที่แล้ว เราจะเห็นว่าการกระพริบของ LED คือ การติดหรือดับ LED เป็นจังหวะโดยกำหนดค่าหน่วงเวลาไว้
ฉะนั้น ถ้าเราอยากให้มันกระพริบเร็วหรือช้า ก้อแค่เปลี่ยนค่าหน่วงเวลา ใน delay() ครับ ลองแก้ไข sketch เดิมเป็น sketch ใหม่ ตามข้างตารางข้างล่างครับ


int ledPin =  13;    // LED connected to digital pin 13

// The setup() method runs once, when the sketch starts

void setup()   {
  // initialize the digital pin as an output:
  pinMode(ledPin, OUTPUT);
}

// the loop() method runs over and over again,
// as long as Arduino has power

void loop()
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(250);                   // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(250);                   // wait for a second
}
จากตัวอย่างข้างต้น จะทำให้ไฟกระพริบถี่ขึ้น ถ้าเราอยากให้เร็วขึ้นอีกล่ะ เราก้อลดค่าใน delay() ลงไปอีก ลองแก้ไข คำสั่งในฟังก์ชั่น loop() จากตัวอย่างข้างต้น เป็นค่าใหม่ดังตารางข้างล่างครับ

void loop()
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(100);                   // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(100);                   // wait for a second
}
รอบนี้ ลองอีกเพิ่มเวลา เพื่อให้ ไฟกระพริบช้าลงได้
void loop()
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(1000);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(1000);                  // wait for a second
}

ถ้าใครยังสนุกอยู่ ลองเปลี่ยนค่าหน่วงเวลาเล่นดูครับ ดูสิว่า เราทำค่ามากสุด น้อยสุด จะทำให้เกิดอะไรขึ้น หรือ ลองทำไฟกระพริบ เป็นจังหวะอื่นบ้าง อย่างจังหวะเต้นหัวใจ มาถึงตอนนี้ เราคงจะได้เห็นว่า แค่เปลี่ยนโปรแกรม ทำให้ Hardware ทำงานได้ไม่เหมือนเดิมแล้ว
<3 >สร้างฟังก์ชั่นกันดีกว่า
มาลองสร้างฟังก์ชั่นกันบ้าง สำหรับตอนที่ ผมหัดเขียนโปรแกรมใหม่ ผมก้อสงสัยว่าเราจะสร้างฟังก์ชั่นกันไปทำไม เอาเป็นว่า ถ้าเราอยากปรับเปลี่ยนการหน่วงเวลา หรือ ใช้ทำไฟกระพริบบ่ิอยๆ
จะให้ก๊อปปี้ โปรแกรมดังกล่าว ไปแปะๆ วางๆ มันก้อดูแปลก ๆจริงไหมครับ

// ไฟกระพริบ เทพ ๆ
digitalWrite( ledPin, HIGH );   // set the   LED on
delay(500);                        // wait for a second

digitalWrite( ledPin, LOW );   // set the   LED off
delay(500);                       // wait for a second
        เขาจึงใช้ฟังก์ชั่นเข้าช่วย ให้การออกแบบโปรแกรม ดูดี เข้าใจง่าย ดูสะอาด ฟังก์ชั่นใช้งานซ้ำๆ ได้ง่ายอีกด้วย
        มาดูตัวอย่าง ผมได้สร้างฟังก์ชั่น หรือ ชุดคำสั่ง ขึ้นมาเองได้ ในตัวอย่างนี้ ผมย้ายโปรแกรม”ไฟกระพริบ” มาสร้างเป็นฟังก์ชั่น Blinky() จากตัวอย่างจะเห็นว่า ต่อไปถ้าอยากได้ ไฟกระพริบ 1 ครั้ง เราก้อมักฟังก์ชั่น Blinky() แทนการกระพริบ LED ครับ แต่ถ้าจะให้กระพริบตลอด ก้อเอาฟังก์ชั่น Blinky() ไปใส่ใน Loop() เราจะได้เห็นไฟกระพริบตลอดกาลแล้วครับ ลองทำตาม Sketch ดังตารางข้างล่างดูครับ

int ledPin =  13;    // LED connected to digital pin 13

// The setup() method runs once, when the sketch starts

void setup()   {
  // initialize the digital pin as an output:
  pinMode(ledPin, OUTPUT);
}

// the loop() method runs over and over again,
// as long as the Arduino has power
void loop()
{
    Blinky();
}

void Blinky()
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(500);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(500);                  // wait for a second
}
จะเห็นว่า มันก้อทำงานไฟกระพริบได้เหมือนเดิม แต่เราไม่ต้อง แปะคำสั่งเยอะๆ แต่ว่าที่เห็นมันยังไม่ใช่ความสามารถของฟังก์ชันที่แท้จริงครับ มาดูกันต่อ ฟังก์ชั่นนอกใช้ลดคำสั่งซ้ำๆแล้ว เรายังสามารถส่งค่าตัวแปรผ่านฟังก์ชั่นได้อีกด้วย อย่างเช่นว่า เราอยากจะทำให้ไฟกระพริบ เร็วหรือ ช้าลง เหมือนแบบฝึกหัดที่ 2 แทนที่จะต้องทำฟังก์ชั่น สองตัว เราก้อใช้แค่ฟังก์ชั่นเดียวล่ะครับ ส่งค่าตัวแปรแทน ทำได้ ดังตารางข้างล่างครับ

int ledPin =  13;    // LED connected to digital pin 13

// The setup() method runs once, when the sketch starts
void setup()   {
  // initialize the digital pin as an output:
  pinMode(ledPin, OUTPUT);
}

// the loop() method runs over and over again,
void loop()
{
    Blinky(1000);

    Blinky(250);
}

void Blinky(int time)
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(time);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(time);                  // wait for a second
}

        จาก Sketch ข้างต้น เราจะทำไฟกระพริบ ช้าๆ และ เร็วๆ สลับกัน อย่างสบายมาก และ sketch ที่สร้างดูดี และเรายังแก้ไขได้ง่ายยิ่งขึ้น อีกด้วยครับ แค่แก้ไข คำสั่งตัวแปรที่ส่งไปกับ Blinky() เท่านั้นเอง
ความสามารถของฟังก์ชั่น ยังมีอีกครับ คือส่งค่ากลับได้อีกด้วย เดี่ยวไว้ทดลองกันในการทดลองหน้าครับ
       มาถึงตอนนี้ ความสามารถควบคุม LED เราคงเพิ่มขึ้นเป็นทวีคูณแล้ว ถ้าน้องๆ เพื่อนๆ ทำมาถึงตรงนี้ ผมก้อขอบอกว่า ตอนนี้เราได้ข้ามส่วนที่ยากมาได้แล้ว และ เริ่มเข้าใจ concept การใช้งานไมโครคอนโทรลเลอร์แล้วครับ

เเหล่งอ้างอิง
http://www.ayarafun.com/2011/01/tutorial-arduino-play-with-blinky-led/

วิธีใช้งาน Fingerprint Senser โมดูลสแกนลายนิ้วมือ สำหรับ Arduino

วิธีใช้งาน Fingerprint Senser โมดูลสแกนลายนิ้วมือ สำหรับ Arduino
การต่อสายกับบอร์ด Arduino Uno
  • VCC : สีแดง - 5V
  • GND : สีดำ - GND
  • RX : สีขาว - 3
  • TX : สีเขียว - 2

โคดตัวอย่างการใช้งาน Arduino Fingerprint Scanner Code แบบเข้าใจง่าย
2. เพิ่มลายนิ้วมือลงในโมดูล โดย อัพโหลด Arduino Fingerprint Scanner Code จากไฟล์ตัวอย่าง enroll.ino จากโฟลเดอร์ Fingerprint\examples\enroll
พิมพ์เลข ID ที่ต้องการบันทึก เช่น
  • พิมพ์เลข 2 เพื่อบันทึกลายนิ้วมือ ID 2 แล้วกดปุ่ม Send
  • เอามือออก และประทับลายนิ้วมืออีกครั้ง 
  • โปรแกรมบันทึกเรียบร้อยได้เป็น ID #2 ที่ตรงกับลายนิ้วมือที่สแกน
3. การสแกนอ่านลายนิ้วมือว่าเป็นของใคร ทำได้โดย อัพโหลด Arduino Fingerprint Scanner Code ไฟล์ตัวอย่าง fingerprint.ino จากโฟลเดอร์ Fingerprint\examples\fingerprint
  • เมื่อรันโปรแกรมและวางนิ้วมือที่สแกน ก็จะพบข้อมูลว่าตรงกับเลข ID อะไร
  • ถ้าไม่ตรงก็จะไม่พบหมายเลข ID

ข้อมูล Fingerprint Senser โมดูลสแกนลายนิ้วมือ

  • Supply voltage: 3.6 - 6.0VDC
  • Operating current: 120mA max
  • Peak current: 150mA max
  • Fingerprint imaging time: 
  • Window area: 14mm x 18mm
  • Signature file: 256 bytes
  • Template file: 512 bytes
  • Storage capacity: 162 templates
  • Safety ratings (1-5 low to high safety)
  • False Acceptance Rate: <0.001% (Security level 3)
  • False Reject Rate: <1.0% (Security level 3)
  • Interface: TTL Serial
  • Baud rate: 9600, 19200, 28800, 38400, 57600 (default is 57600)
  • Working temperature rating: -20C to +50C
  • Working humidy: 40%-85% RH
  • Full Dimensions: 56 x 20 x 21.5mm
  • Exposed Dimensions (when placed in box): 21mm x 21mm x 21mm triangular
  • Weight: 20 grams
ข้อมูลเพิ่มเติม Fingerprint Senser โมดูลสแกนลายนิ้วมือ

อ้างอิง

 https://www.arduinoall.com/product/1336/fingerprint-arduino-senser-โมดูล-สแกนลายนิ้วมือ-สำหรับ-arduino

Home Alarm Systems ระบบเตือนภัยภายในบ้านควบคุมโดยบอร์ด Arduino

Home Alarm Systems ระบบเตือนภัยภายในบ้านควบคุมโดยบอร์ด Arduino
อุปกรณ์ที่ใช้
1. บอร์ด Arduino Uno R3 (EADN014) (บทความ Arduino) Q'ty 1 pcs

           เป็นบอร์ดไมโครคอนโทรเลอร์ตระกูล AVR ที่มีการพัฒนาแบบ Open Source คือมีการเปิดเผยข้อมูลทั้งด้าน Hardware และ Software ตัวบอร์ด Arduino ถูกออกแบบมาให้ใช้งานได้ง่าย ดังนั้นจึงเหมาะสำหรับผู้เริ่มต้นศึกษา และสามารถนำไปดัดแปลงเพิ่มเติม หรือพัฒนาต่อยอดได้อีกด้วย


2. จอ LCD Character 20x4 (EDPM045) (บทความ LCD) Q'ty 1 pcs
           จอ Liquid Crystal Display (LCD) เป็นจอแสดงผลรูปแบบหนึ่งที่นิยมนำมาใช้งานร่วมกับระบบสมองกลฝังตัวอย่างแพร่หลาย จอ LCD มีทั้งแบบแสดงผลเป็นตัวอักขระเรียกว่า Character LCD ซึ่งมีการกำหนดตัวอักษรหรืออักขระที่สามารถแสดงผลไว้อยู่แล้ว และแบบแสดงเป็นจุดเรียกว่า Graphic LCD


3. บอร์ดรีเลย์ 2 Channels (EFDV237) (บทความ Relay) Q'ty 1 pcs
           รีเลย์ (Relay) เป็นอุปกรณ์ไฟฟ้าชนิดหนึ่ง ซึ่งทำหน้าที่ตัดต่อวงจรแบบเดียวกับสวิตช์ โดยควบคุมการทำงานด้วยไฟฟ้า รีเลย์มีหลายประเภทหลายขนาด ตั้งแต่ขนาดเล็กที่ใช้ในงานอิเล็กทรอนิกส์ทั่วไป จนถึงขนาดใหญ่ที่ใช้ในงานไฟฟ้าแรงสูง โดยมีรูปร่างแตกต่างกันออกไป แต่มีหลักการทำงานที่คล้ายคลึงกัน สำหรับรีเลย์นิยมใช้ในการตัด-ต่อวงจร นอกจากนี้ยังสามารถนำไปใช้งานแบบอื่นได้หลากหลายรูปแบบ


4. Keypad 4x4 (EMSW025) Q'ty 1 pcs
           แป้นปุ่มกดหรือ Keypad เป็นอุปกรณ์สำหรับรับอินพุตจากผู้ใช้ มีลักษณะเป็นปุ่มกดหลายปุ่มจัดเรียงกันในลักษณะเป็นอาร์เรย์ แบ่งเป็นแถวแนวนอน (Row) และแถวแนวตั้ง (Column) เช่น 3x4 (12 ปุ่ม) หรือ 4x4 (16 ปุ่ม) เป็นต้น แต่ละปุ่มก็จะมีสัญลักษณ์เขียนกำกับไว้ เช่น ตัวเลข 0-9 # * A-D เป็นต้น


5. Buzzer Module (EADN028) Q'ty 1 pcs
           ลำโพงแบบ Magnetic-diaphragm ขนาดเล็กให้เสียงดัง มีความต้านทานภายในต่ำ Buzzer จะคล้ายกับลำโพงคือมันสามารถส่งเสียงได้โดยการสั่นสะเทือนที่เป็นจังหวะความถี่แล้วเกิดเป็นคลื่นเสียง


6. Flame Detector Module (EFDV309) Q'ty 1 pcs
           อุปกรณ์ตรวจจับเปลวไฟ (Flame Detector) สามารถตรวจจับเปลวไฟในขณะที่เกิดเหตุเพลิงไหม้ มักติดตั้งไว้เพื่อตรวจสอบในบริเวณที่มีวัตถุไวไฟวางอยู่


7. LED Module (EADN023) Q'ty 2 pcs
           LED (Light-Emitting Diode) หรือที่แปลเป็นไทยว่า ไดโอดเปล่งแสง หลอดไฟLED เมื่อได้รับแรงดันไฟฟ้าจะปล่อยคลื่นแสงออกมาให้ความสว่าง หลอดไฟ LED ที่เราเห็นมีขายกันตามร้านอุปกรณ์อิเล็กทรอนิกส์นั้นมีหลายแบบ โดยแต่ละแบบนั้นจะมีหลักการทำงานเหมือนกัน


8. PIR Motion Sensor Module (ESEN071) (บทความ PIR) Q'ty 1 pcs
           อุปกรณ์ Sensor ชนิดหนึ่งที่ใช้ตรวจจับคลื่นรังสี Infrared ที่แพร่จาก มนุษย์ หรือ สัตว์ ที่มีการเคลื่อนไหว ทำให้มีการนำเอา PIR มาประยุคใช้งานกันเป็นอย่างมากใช้เพื่อตรวจจับการเคลื่อนไหวของสิ่งมีชีวิต หรือ ตรวจจับการบุกรุกในงานรักษาความปลอดภัย


9. IIC (I2C) Adaptor Plate (EFDV296) Q'ty 1 pcs
           โมดูล I2C Bus เป็นโมดูลแปลงขาสัญญาณ Parallel เป็น I2C เพื่อลดจำนวนขาสัญญาณในการใช้งานจาก 16 ขาเหลือเพียง ขา ส่วนใหญ่นำมาใช้งานคู่กับจอ Character LCD เพื่อให้สะดวกต่อการเชื่อมต่อ และสามารถต่อจอแสดงผลหรืออุปกรณ์อื่นได้ในจำนวนที่มากขึ้น สามารถปรับให้รองรับได้ถึง ตำแหน่งแอดเดรส (20-27) เพื่อความยืดหยุ่นในการใช้งาน


หลักการทำงาน
           ระบบจำลองการรักษาความปลอดภัยภายในบ้านนี้ จะทำงานในขณะที่ผู้ใช้งานนั้นไม่อยู่บ้านหรือล็อคบ้านไว้ ระบบนี้ประกอบไปด้วยเซ็นเซอร์ที่ทำหน้าที่ในการตรวจจับสิ่งต่างๆ เช่น การบุกรุกเข้ามาโจรกรรม การเกิดอัคคีภัย เป็นต้น
           ขณะทำงานระบบจะเปิดการตรวจจับโดยรับสัญญาณอินพุตจากเซ็นเซอร์ 2 อย่างด้วยกันคือ PIR Motion Sensor (เซ็นเซอร์ตรวจจับการเคลื่อนไหว) ในระบบจำลองนี้ จะติดเซนเซอร์ไว้ในห้องรับแขก และ Flame Detector Sensor (เซ็นเซอร์ตรวจจับเปลวไฟ) จะติดเซนเซอร์ไว้ในห้องครัว เมื่อผู้อาศัยไม่อยู่บ้านหรือล็อคบ้านไว้ PIR Motion Sensor และ Flame Detector Sensor จะทำงาน เมื่อมีการเคลื่อนไหวภายในบ้าน สัญญาณกันขโมยจะส่งเสียง Alarm แจ้งเตือนออกทาง Buzzer ทันที หรือเมื่อเกิดเปลวไฟบริเวณห้องครัว (Flame Detector Sensor จะทำงานและสัญญาณ Alarm ก็จะทำงานเช่นกัน
           แต่เมื่อผู้อาศัยกลับมาแล้วและปลดล็อคประตูด้วยรหัสผ่าน “1234” ตามด้วยเครื่องหมาย ตามที่ตั้งไว้ มีผลทำให้ระบบเซนเซอร์ตรวจจับปิดการทำงาน และหลังจากปลดล็อคแล้ว ผู้อาศัยจะสามารถควบคุมการปิดเปิดเครื่องใช้ไฟฟ้าภายในบ้านได้ โดยกดปุ่มที่ Keypad (ปุ่ม A - หลอดไฟดวงที่ หรือ ปุ่ม B - หลอดไฟดวงที่ 2) และเมื่อผู้อาศัยจะเข้านอน ต้องการล็อคบ้านและเปิดระบบเตือนภัย ก็สามารถทำได้โดยกดที่ Keypad (ปุ่มC) 
           จากการทำงานของระบบนี้ เป็นเพียงการทำงานเบื้องต้นให้เห็นภาพ ผู้ใช้สามารถนำไปต่อยอดพัฒนาเพิ่มเติมได้ เช่น เชื่อมต่อกับ GSM Module เพื่อสื่อสารผ่านเครือข่ายโทรศัพท์มือถือและอินเตอร์เน็ต หรือเชื่อมต่ออุปกรณ์ LAN หรือ Wi-Fi เพิ่มเติมเพื่อสื่อสารผ่านอินเตอร์เน็ต แล้วประยุกต์การทำงานให้เกิด Alarm ให้ระบบส่ง SMS หรือโทรออกไปยังเจ้าของบ้านเพื่อเตือนภัยได้อีกด้วย
วิธีการต่อวงจร


โค้ดโปรแกรมการทำงาน การควบคุมการทำงานอุปกรณ์ต่างๆ (อ้างอิงตามบทความนี้) จำเป็นต้องมีการเรียกใช้ไลบรารี่ต่างๆ ดังต่อไปนี้คือ Password, Keypad, Wire และLiquidCrystal_I2C 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <Password.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

Password password = Password( "1234" ); // Set the Password

// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

const byte ROWS = 4;        // Four rows
const byte COLS = 4;        //  columns
const int status_lock = A0; // LED Status Pin
const int status_unlock = A1; // LED Status Pin
const int led_bed = 11;     // Home Light2 Pin
const int led_bath = 12;    // Home Light1 Pin
int pir = A2;               // PIR Sensor Pin
int flame = A3;             // Flame Sensor Pin
int Buzzer = 10;            // Buzzer Module Pin
int alarmValue = 0; 
int fl = 0, state = 0, state1 = 0, state2 = 0, Alarm_fl = 0; // Flag
int dir = 8, dir1 = 0;
String test = "                    ";
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = { 2,3,4,5, };// Connect keypad ROW0, ROW1, ROW2 and
                    // ROW3 to these Arduino pins.
byte colPins[COLS] = { 6,7,8,9 };// Connect keypad COL0, COL1, COL2 and
                        // COL3 to these Arduino pins.

// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
ในส่วนแรกของโปรแกรมเป็นการประกาศเรียกใช้ไลบรารี่และตั้งค่า เริ่มจากกำหนด Password ในบทความนี้เป็น Password("1234" );
กำหนดค่าของจอ LCD (ในบทความนี้ ใช้จอ LCD ร่วมกับ I2C Adaptor) ต้องทำการกำหนดค่า ค่า คือ ตำแหน่งแอดเดรส จำนวนตัวอักษร และจำนวนบรรทัดเป็นLiquidCrystal_I2C lcd(0x27, 20, 4);
กำหนดค่าตัวแปรต่างๆ ที่ต้องการนำไปใช้ในโปรแกรม
และสุดท้าย กำหนดขาในการนำไปใช้งานกับ Keypad โดยต้อง Mapkey ที่ต้องการใช้งานไว้ก่อนว่าเป็นแบบไหน ซึ่งในบทความนี้ใช้เป็น 4x4 Keypad พร้อมทั้งกำหนดPinRow, PinColumn หลังจากกำหนดเสร็จแล้วเรียกใช้ฟังก์ชั่นในการสร้าง Keypad จากไลบรารี่โดยนำพารามิเตอร์ที่กำหนดไว้ใส่ลงไปในฟังก์ชั่นเพื่อ Mapkey

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void setup()
{
    Serial.begin(9600); // Define Serial for Debug Sensor & Keyped
    lcd.begin();  //Define LCD
    lcd.backlight();
    pinMode(status_lock, OUTPUT);    // Sets the digital pin as output
    pinMode(status_unlock, OUTPUT);  // Sets the digital pin as output
    pinMode(led_bed, OUTPUT);        // Sets the digital pin as output
    pinMode(led_bath, OUTPUT);       // Sets the digital pin as output

    keypad.addEventListener(keypadEvent); // Add an event listener for this keypad
    // Sets First Screen LCD
     lcd.print("* Hello Welcome To *");
     lcd.setCursor(0, 1);
     lcd.print(" Home Alarm Systems ");
     lcd.setCursor(0, 2);
     lcd.print("www.ThaiEasyElec.com");
     lcd.setCursor(0, 3);
     lcd.print("  ** Home Lock **  ");
}

void loop()
{
  keypad.getKey(); // Check the Keyped
  motion_on();     // Open PIR Motion Sensor
  flame_on();      // Open Flame Detector Sensor
  close_all_power(); // Close Light1-2 and Set status_lock
}
ฟังก์ชั่น Setup เป็นการตั้งค่าหรือกำหนดการทำงานอินพุตเอาต์พุตของขาต่างๆ ดังนี้
กำหนดความเร็วในการสื่อสาร Serial เพื่อใช้ในการรับ-ส่งข้อมูลกับคอมพิวเตอร์
เรียกใช้ฟังก์ชั่นเพื่อ Initial จอ LCD ที่เรานำมาใช้งานในที่นี้เป็นการติดต่อแบบ I2C
กำหนดการทำงานของขา status_lock(A0)  status_unlock(A1)  led_bed(11)  led_bath(12) ให้เป็นโหมดเอาต์พุต
ฟังก์ชั่น Loop เรียกใช้งานฟังก์ชั่นย่อยๆ ด้วยกันทั้งหมด ฟังก์ชั่น คือ
motion_on(); = เปิดการใช้งาน PIR Motion Sensor รับค่าจาก Analog A2 เพื่อตรวจสอบการเคลื่อนไหว
flame_on(); = เปิดการใช้งาน Flame Detector รับค่าจาก Analog A3 เพื่อตรวจสอบเปลวไฟ
close_all_power(); = ปิดหรือตัดไฟเครื่องใช้ไฟฟ้าที่ไม่ได้ใช้งานภายในบ้าน 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//take care of some special events
void keypadEvent(KeypadEvent eKey){
    switch (keypad.getState()){
    case PRESSED:
        //Serial.print("Pressed: ");
        //Serial.println(eKey);
        lcd.setCursor(dir1, 3);
        lcd.print(test);
        test = "*";
        lcd.setCursor(dir, 3);
        lcd.print(test);
        dir1 = dir;
        switch (eKey){
            case 'A':
                if(fl == 1){
                    if(state == 0){
                        digitalWrite(led_bed, HIGH); // Open the light 2
                        state = 1;
                    }else if(state == 1){
                        digitalWrite(led_bed, LOW); // Close the light 2
                        state = 0;
                    }
                }
                break;
            case 'B':
                if(fl == 1){
                    if(state1 == 0){
                        digitalWrite(led_bath, HIGH); // Open the light 1
                        state1 = 1;
                    }else if(state1 == 1){
                        digitalWrite(led_bath, LOW); // Close the light 1
                        state1 = 0;
                    }
                }
                break;
            case 'C':
                if(fl == 1){
                    state2 = 1;
                    lcd.setCursor(0, 3);
                    lcd.print("  ** Home Lock **  ");
                    dir  = 8;
                    dir1 = 0;
                    test = "                    ";
                }
                break;
            case '#':
                checkPassword(); // Call the function checkPassword
                password.reset(); //Reset Key
                break;
            default:
                password.append(eKey);
        }
    }
}

KeypadEvent เป็นฟังก์ชั่นตรวจสอบเหตุการณ์ของ Keypad เมื่อกดคีย์เข้ามา ใช้ในการกำหนดเหตุการณ์ให้เป็นไปตามที่เราต้องการ เช่น ถ้าทำการกดปุ่ม ให้สั่งงาน Outputที่ขา led_bed (11) ให้อยู่ในสภาวะ HIGH(1) เป็นต้น ในบทความนี้เราได้กำหนดเหตุการณ์ไว้ด้วยกันทั้งหมด เหตุการณ์ด้วยกัน คือ
1.             เมื่อกดปุ่ม # ให้นำคีย์ที่กดเข้ามาก่อนหน้าไปตรวจสอบด้วยฟังก์ชั่นcheckPassword และเคลียร์ค่าคีย์ที่กดเข้ามาก่อนหน้าทั้งหมดเพื่อรอรับคีย์ใหม่
2.             เมื่อกดรหัสผ่านถูกต้องแล้ว การกดปุ่ม A หนึ่งครั้งจะเป็นการสั่งงานให้ Output1 อยู่ในสภาวะ HIGH หรือถ้ามีการกดซ้ำก็จะสั่งงาน Output1 อยู่สภาวะ LOW สลับกันไปเรื่อยๆ
3.             เมื่อกดรหัสผ่านถูกต้องแล้ว การกดปุ่ม B หนึ่งครั้งจะเป็นการสั่งงานให้ Output2 อยู่ในสภาวะ HIGH หรือถ้ามีการกดซ้ำก็จะสั่งงาน Output2 อยู่สภาวะ LOW สลับกันไปเรื่อยๆ
4.             กดปุ่ม C เมื่อต้องการล็อคบ้านหรือเปิดระบบการแจ้งเตือนขึ้นมาใหม่อีกครั้ง

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void checkPassword(){ // Function check the password
    if (password.evaluate()){
    //Add code to run if it works
        while(1){
            //Serial.println("Success");
            fl = 1;
            digitalWrite(status_lock, LOW);
            digitalWrite(status_unlock, HIGH);
            lcd.setCursor(0, 3);
            lcd.print(" ** Home Unlock ** ");
            keypad.getKey();
            Alarm_off();
            password.reset();
        }
    }else{
        Serial.println("Wrong");
        //add code to run if it did not work
        lcd.setCursor(0, 3);
        lcd.print("**Password Wrong **");
        delay(1000);
    }
}

checkPassword เป็นฟังก์ชั่นตรวจสอบ password ว่าคีย์ที่กดเข้ามานั้นตรงกับที่กำหนดไว้ข้างต้นหรือไม่ ในฟังก์ชั่นนี้เราต้องกำหนดเหตุการณ์ว่าถ้า password ถูกต้อง จะให้ทำอะไร และถ้าไม่ถูกต้องจะให้ทำอะไร เราได้กำหนดไว้แล้วในที่นี้ คือ
กรณี password ถูกต้อง ให้สั่งงาน Output ที่ขา status_lock เป็นสภาวะ LOWพร้อมทั้งสั่งงาน Output ที่ขา status_unlock เป็นสภาวะ HIGH ต่อมาให้เปลี่ยนการแสดงผลทางหน้าจอ LCD บรรทัดที่ เป็น HomeUnlock และทำการวนรอรับค่าจาก Keypad อีกครั้งเพื่อใช้ในการสั่งงาน เปิด-ปิด ไฟภายในบ้าน พร้อมทั้งตัดระบบเตือนภัยทั้งหมด
กรณี password ไม่ถูกต้อง ให้ทำการกลับเริ่มต้นรับคีย์ใหม่จนกว่า password จะถูกต้อง

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void close_all_power(){ // Function close the light all.
    digitalWrite(status_lock, HIGH);
    digitalWrite(status_unlock, LOW);
    digitalWrite(led_bed, LOW);
    digitalWrite(led_bath, LOW);
}
void Alarm(){ // Function Alarm.
    tone(Buzzer, 10, 100); // Alarm at 10 Hz 100 milliseconds.
    delay(100); // delay 100 milliseconds
    tone(Buzzer, 300, 100);// Alarm at 300 Hz 100 milliseconds.
    delay(100); // delay 100 milliseconds
}
void Alarm_off(){ // Function Alarm off.
    digitalWrite(Buzzer,HIGH); //Set buzzer pin is HIGH for stop alarm
}

close_all_power เป็นฟังก์ชั่นกำหนดให้ปิดไฟทั้งหมดที่ต้องการหรือสั่งงานให้Output ที่ต้องการ อยู่ในสภาวะ LOW ทั้งหมด
Alarm เป็นฟังก์ชั่นสั่งงานหรือกำหนดให้ buzzer ดังที่ความถี่เท่าไร นานแค่ไหน ในบทความนี้เราจะตั้งให้สลับเสียงกัน เสียงเพื่อให้เหมือนกับ Alarm 2 เสียงทั่วๆ ไป เราสามารถกำหนดเพิ่มเติมหรือแก้ไข ขึ้นอยู่กับการนำไปใช้งาน
Alarm_off เป็นฟังก์ชั่นกำหนดให้ buzzer ไม่ส่งเสียงดังหรือปิด buzzer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void motion_on(){ // Function Open PIR Motion Sensor.
    alarmValue = analogRead(pir); // Read analog sensor 0-1023.
    //Serial.println (alarmValue); // Debug Sensor value.
    if(alarmValue >= 1000){ // Check the value
        Alarm();
    }
        if(alarmValue < 1000){
        Alarm_off();
    }
}
void flame_on(){ // Function Open Flame Detector Sensor.   
    alarmValue = analogRead(flame); // Read analog sensor 0-1023.
    //Serial.println (alarmValue);  // Debug Sensor value. 
    if(alarmValue <= 700){   // Check the value     
        Alarm();
    }
    if(alarmValue > 700){
        Alarm_off();
    }
}

motion _on เป็นฟังก์ชั่นเปิดใช้งาน PIR Motion Sensor การทำงานคือรับค่าที่ได้จาก Sensor มาเป็น Analog แรงดัน 0-5 V มาแปลงเป็นดิจิตอล โดยต้องบันทึกค่าไว้ก่อนว่าตอนที่ไม่มีการเคลื่อนไหวจะเท่ากับเท่าไร ในที่นี้ค่าตอนที่ไม่มีการเคลื่อนไหวอ่านได้ประมาณ 700 และเมื่อมีการเคลื่อนไหวอ่านได้ประมาณ 1000+ จึงกำหนดว่าถ้ามากกว่า1000 แสดงว่ามีการเคลื่อนไหวให้ทำการ Alarm ทันที แต่ถ้าน้อยกว่า 1000 แสดงว่าไม่มีการเคลื่อนไหวก็ไม่ต้อง Alarm (ผู้ใช้ต้องตรวจสอบค่าที่ได้จากเซ็นเซอร์แต่ละตัวก่อนการใช้งาน เนื่องจากค่า output นั้นขึ้นอยู่กับอุปกรณ์แต่ละตัวทำให้ค่าที่ได้อาจไม่เท่ากัน)
flame_on เป็นฟังก์ชั่นเปิดการใช้งาน Flame Detector การทำงานคือรับค่าที่ได้จากSensor มาเป็น Analog แรงดัน 0-5 V เช่นเดียวกันกับ PIR Motion Sensor แต่ Flame Detector นั้นใช้ในการตรวจวัดแสงไฟ หรือเปลวไฟ ต้องทำการบันทึกค่าไว้ก่อนว่าตอนที่ไม่เกิดเปลวไฟจะเท่ากับเท่าไร และตอนที่เกิดเปลวไฟนั้นมีค่าเท่าไร ในที่นี้ค่าตอนยังไม่มีเปลวไฟ ค่าที่ได้ประมาณ 800+ และเมื่อเกิดเปลวไฟค่าที่ได้ลดลงเหลือประมาณ 500+ แต่ไม่เกิน 700 จึงกำหนดว่าถ้าน้อยกว่า 700 แสดงว่ามีเปลวไฟเกิดขึ้นให้ทำการ Alarmทันที แต่ถ้ามากกว่า 700 แสดงว่าไม่มีเปลวไฟเกิดขึ้นก็ไม่ต้อง Alarm  (เช่นเดียวกับ PIR Motion Sensor ผู้ใช้ต้องตรวจสอบค่าที่ได้จากเซ็นเซอร์แต่ละตัวก่อนการใช้งาน  เนื่องจากค่า output นั้นขึ้นอยู่กับอุปกรณ์แต่ละตัวทำให้ค่าที่ได้อาจไม่เท่ากัน)
         หากสนใจจะต่อขยายเพิ่มเติมสามารถนำไปต่อกับ GSM โมดูล แล้วเมื่อเกิด Alarmให้ส่ง SMS หรือโทรออกไปแจ้งผู้อาศัยได้ สามารถหาข้อมูลเพิ่มเติมและประยุกต์ใช้ได้จากบทความด้านล่างครับ



อ้างอิง
http://www.thaieasyelec.com/article-wiki/embedded-electronics-application/home-alarm-systems-control-by-arduino.html