The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

IPST-MicoBOX (SE) Starter Manual
คู่ มือเริ่มต้นใช้งานกล่องสมองกล IPST-MicroBOX (SE) กับ Arduino IDE

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by Kritsada Jaiyen, 2021-04-25 06:20:25

คู่มือเริ่มต้นใช้งานกล่องสมองกล IPST-MicroBOX SE

IPST-MicoBOX (SE) Starter Manual
คู่ มือเริ่มต้นใช้งานกล่องสมองกล IPST-MicroBOX (SE) กับ Arduino IDE

Keywords: IPST-SE,inex,Arduino

    Arduino IDE151

วิธีการที่สองคอื ใชก ระบวนการทางซอฟตแวรเขา มาชวย ซึ่งมีขั้นตอนโดยสรปุ ดังนี้

(1) อา นคาการกดสวติ ชคร้ังแรกเขามากอน

(2) หนว งเวลาประมาณ 0.1 ถงึ 1 วนิ าที
(3) อา นคาของการกดสวติ ชอกี ครง้ั

ถาหากคาทอ่ี านไดเ หมือนกับการอานคร้ังแรก

แสดงวา มีการกดสวติ ชเกิดข้ึนจรงิ

ถาคาที่อา นไดไ มเ หมือนกับการอานครั้งแรก

แสดงวา สญั ญาณทเ่ี กิดขึ้นอาจเปน เพยี งพลั สแคบๆ อาจตีความไดวา
เปนสญั ญาณรบกวน จึงยังไมม ีการกดสวติ ชเกดิ ขึ้นจรงิ

9.2 ฟง กช นั่ โปรแกรมภาษา C/C++ ในไลบรารี ipst.h ท่ีใชในการทดลอง

สาํ หรบั คําส่ังหรอื ฟงกชน่ั ของโปรแกรมภาษา C/C++ ท่ีใชในการทดลองทั้งหมดในบทนี้ ได
รบั การบรรจไุ วในไฟลไ ลบรารี ipst.h คือ คําส่งั in, sw_OK และ sw1

9.2.1 in

เปนฟง กช่ันอา นคาสถานะลอจกิ ของพอรต ท่ีกําหนด

รูปแบบ

char in(x)

พารามเิ ตอร

x - กําหนดขาพอรต ท่ีตอ งการอา นคา มีคาตงั้ แต 0 ถงึ 50 สาํ หรบั IPST-SE ใชไ ดถงึ 30

หมายเหตุ : ไมแนะนําใหใชฟ งกช่ันนก้ี ับจุดตอ 19 และ 20 บนแผงวงจร IPST-SE

การคนื คา

เปน 0 หรอื 1

ตัวอยา งที่ 9-1 // ประกาศตัวแปร x เพอื่ เกบ็ คาผลลัพธจ าการอา นคาระดบั สญั ญาณ
// อานคาดจิ ติ อลจากพอรต หมายเลข 16 แลวเกบ็ คาไวท ตี่ ัวแปร x
char x;
x = in(16);

152     Arduino IDE

9.2.2 sw_OK()

เปน ฟง กช นั่ ตรวจสอบสถานะสวติ ช OK บนแผงวงจร IPST-SE โดยใหส ถานะ “เปนจรงิ ” เมอ่ื
มีการกดสวติ ชและ “เปนเท็จ” เมื่อไมม ีการกดสวติ ช

รูปแบบ
unsigned char sw_ok()

การคนื คา

1 (เปน จริง) เมื่อมีการกดสวติ ช
0 (เปน เทจ็ ) เมอื่ ไมม ีการกดสวติ ช

ตวั อยางท่ี 9-2 // ผนวกไฟลไลบรารหี ลกั

#include <ipst.h> // ตรวจสอบการกดสวติ ช OK
void setup() // เปลยี่ นสีพน้ื เปน สเี หลอื ง
{ // แสดงสีพนื้ ใหมน าน 3 วนิ าที
// เคลยี รห นาจอแสดงผล กาํ หนดพนื้ หลงั เปนสดี าํ
glcdClear();
}
void loop()
{

if (sw_OK())
{

glcdFillScreen(GLCD_YELLOW);
delay(3000);
}
glcdClear();

}

9.2.3 sw_OK_press()

เปน ฟง กช่ันวนตรวจสอบการกดสวติ ช OK บนแผงวงจร IPST-SE ตองรอจนกระทั่งสวติ ชถ กู
ปลอยหลงั จากการกดสวติ ชจงึ จะผา นฟง กช่นั นี้ไปกระทําคําส่งั อน่ื ๆ

ตัวอยา งที่ 9-3 // รอจนกระท่งั เกดิ กดสวติ ช OK

............

sw_OK_press();

............

   Arduino IDE153

9.2.4 sw1_press

เปน ฟง กช่ันวนตรวจสอบการกดสวติ ช SW1 บนแผงวงจร IPST-SE ตองรอจนกระท่ัง SW1
ถกู ปลอยหลงั จากมีการกดสวติ ช จงึ จะผานพน การทํางานของฟงกชน่ั นไี้ ป

รูปแบบ
void sw1_press()

ตัวอยา งท่ี 9-4

............
sw1_press(); // รอจนกระทงั่ สวติ ช SW1 ถูกกดและปลอ ย
................

9.2.5 sw1

เปน ฟง กช่นั ตรวจสอบการกดสวติ ช SW1 ในขณะใดๆ

รูปแบบ

char sw1()

การคนื คา

เปน “0” เมือ่ สวิตช SW1 ถกู กด และ เปน “1” เมื่อไมมีการกดสวิตช SW1

ตัวอยางที่ 9-5 // ประกาศตวั แปร x เพอื่ เกบ็ คาผลลพั ธจ ากการอา นคาดจิ ติ อล
// อา นคาสถานะของสวติ ช SW1 มาเกบ็ ไวท ตี่ ัวแปร x
char x;

x = sw1();

154       Arduino IDE

    

ปฏบิ ัตกิ ารท่ี 4-1 ควบคมุ LED ดวยการกดสวิตช OK

การเชอื่ มตอ ทางฮารด แวร

 ตอ แผงวงจร ZX-LED กบั จุดตอ พอรต 17 ของแผงวงจรหลัก IPST-SE

ข้ันตอนการทดลอง

4.1.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชื่อ microbox_OKtest.ino
4.1.2 เปดสวิตชจายไฟแกแ ผงวงจร IPST-SE แลว เช่ือมตอ สาย USB เขา กบั คอมพิวเตอร

4.1.3 คอมไพลและอัปโหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลิกท่ีปุม

28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
ZX-LED 24 A0 30 A6 27 A3
D
+S ON
Hello0World0000000000
  G
  000000000000000000000 6V
 12
  Press OK000000000000000000000 G
  6V
 000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
S  
+
DC MOTORO
15 SV0 14 SV1 13 SV2 12 SV3
KNOB

OK

SW1

16 18 UART1 LOW 12
17 19 +5

20 RESET 2 RxD1 3 TxD1

รปู ที่ L4-1 การตอ วงจรเพ่ือทําการทดลองสาํ หรบั ปฏบิ ัตกิ ารท่ี 4

      Arduino IDE155

#include <ipst.h> // ผนวกไฟลไ ลบรารหี ลกั
void setup()
{ // กาํ หนดขนาดตวั อักษร 2 เทา
// แสดงขอ ความออกหนา จอแสดงผล
setTextSize(2); // วนรอจนกระท่ังกดสวติ ช OK
glcd(1,1,"Press OK"); // เคลยี รหนาจอแสดงผล กาํ หนดพน้ื หลงั เปนสดี าํ
sw_OK_press();
glcdClear(); // ตรวจสอบการกดสวติ ช OK
} // ดบั LED ทจี่ ดุ ตอ พอรต 17
void loop() // นาน 2 วนิ าที
{ // ขบั LED ทจ่ี ุดตอ พอรต 17 ใหต ิดสวา ง
if (sw_OK())
{

out(17,0);
delay(2000);
}
out(17,1);
}

คําอธบิ ายโปรแกรม

การทํางานของโปรแกรมเรมิ่ ตน ดว ยการแสดงขอ ความแจงใหกดสวิตช OK บนแผงวงจร IPST-SE เมอื่
กดแลว จะเขาสูลูปการทาํ งานหลักในฟงกชั่น loop() เพ่ือตรวจสอบตอ ไปวา มกี ารกดสวติ ช OK หรอื ไม ถา ไม
มี จะสงขอ มลู “1” ออกไปยังจุดตอพอรต 17 ทําให LED ที่ตอ อยตู ดิ สวา ง และยงั คงสวางอยเู ชน นัน้ จนกวาจะ
มกี ารกดสวติ ช OK

เม่อื สวิตช OK ถกู กด จะทําใหเงอื่ นไขการตรวจสอบเปนจรงิ เกิดการตอบสนองดว ยการสงขอ มลู “0”
ไปท่ีจุดตอ พอรต 17 ทําให LED ท่ีตอ อยดู บั ลงเปน เวลา 2 วินาที ตามการทํางานของฟงกช ่ัน delay จากนั้นก็
จะหลุดออกจากการตรวจสอบ มาพบฟงกช ั่น out เพ่อื ขบั ให LED กลบั มาตดิ อกี ครั้ง แลว วนรอการกดสวติ ช
OK ในรอบใหม

โปรแกรมท่ีL4-1 : ไฟลmicrobox_OKtest.ino โปรแกรมภาษา C/C++ สาํ หรบั ทดลองควบคมุ LED ดว ยสวติ ช

4.1.4 รนั โปรแกรม

ที่จอแสดงผลกราฟก LCD จะแจงใหกดสวิตช OK ทันทีที่กดสวิตช OK บนแผงวงจร IPST-SE จะทําให
LED ของแผงวงจร ZX-LED ท่ีตอ กบั จุดตอ พอรต 17 ตดิ สวาง

4.15 กดสวติ ช OK อีก 1 คร้ัง แลว ปลอย สงั เกตการทาํ งานของ LED

LED ของแผงวงจร ZX-LED จะดบั ลงนาน 2 วินาที จากนั้นจะกลับมาตดิ สวางใหมอ ีกครงั้ และจะทํา
งานในลักษณะนี้ไปตลอด จนกวา จะมกี ารรเี ซตระบบ หรอื ปดเปดจายไฟเลี้ยงใหม

156      Arduino IDE

ปฏบิ ัตกิ ารท่ี 4-2 ควบคมุ LED ดวยการกดสวิตช SW1

ในการทดลองนจ้ี ะเพมิ่ เตมิ สวติ ชเ ขา มาอกี 1 ตวั คอื SW1 โดยสวติ ช SW1 ถกู ตดิ ตงั้ ไวพ รอ มใชง านบนแผง
วงจร IPST-SE อยแู ลว โดยในปฏบิ ัตกิ ารน้ีตอ งการนําสวิตช SW1 มาควบคมุ การเปดปด LED ในแบบท็อกเกลิ
(toggle) น่ันคือ เม่อื กดสวติ ชหนง่ึ ครั้ง LED ตดิ และเมือ่ กดซา้ํ LED จะดบั สลับกันเชนน้ี

การเชื่อมตอ ทางฮารด แวร

 ตอ แผงวงจร ZX-LED กบั จุดตอ พอรต 17 ของแผงวงจรหลัก IPST-SE

ขั้นตอนการทดลอง

4.2.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในช่ือ microbox_SW1test.ino

4.2.2 คอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลิกทป่ี ุม

4.2.3 รนั โปรแกรม
ที่จอแสดงผลกราฟก LCD จะแจงใหกดสวติ ช OK

4.2.4 กดสวติ ช OK อีก 1 ครัง้ แลว ปลอย
4.2.5 ทดลองกดสวิตช SW1 แลวปลอย 3 ครงั้ สังเกตการทํางานของ ZX-LED

LED ของแผงวงจร ZX-LED จะตดิ และดบั กลบั สถานะกนั ในทกุ ครงั้ ทม่ี กี ารกดสวติ ช SW1 นน่ั คอื จากเดมิ
ดบั จะกลายเปน ติดสวา ง และจากตดิ สวา งจะกลายเปนดับ
4.2.6 กดสวติ ช SW1 คา งไวครูหน่งึ แลว จึงปลอย สงั เกตการทํางานของ LED

เมื่อสวิตชยงั ถูกกดคา ง สถานะของ LED จะไมม กี ารเปล่ียนแปลง จนกวา สวิตชจะถกู ปลอย

    Arduino IDE157

#include <ipst.h> // ผนวกไฟลไลบรารหี ลกั
int i=0;
void setup() // กาํ หนดขนาดตวั อกั ษร 2 เทา
{ // แสดงขอ ความออกหนาจอแสดงผล
// วนรอจนกระทั่งกดสวติ ช OK
setTextSize(2); // เคลยี รห นาจอแสดงผล กาํ หนดพน้ื หลงั เปนสดี าํ
glcd(1,1,"Press OK");
sw_OK_press(); // ตรวจสอบการกดสวติ ช OK
glcdClear(); // ดบั LED ทจ่ี ดุ ตอ พอรต 17
}
void loop()
{
if (sw1())
{

out(17,i^=1);
while(sw1())

delay(5);
}
}

คําอธบิ ายโปรแกรม

โปรแกรมจะมตี วั อยา งการรบั คา สวติ ช 2 ตวั คอื สวติ ช OK (ใชฟ ง กช นั่ sw_OK_press()) และสวติ ช SW1
(ใชฟงกช ่ัน sw1()) โดยตวั แรกจะอยใู นฟงกช ่ัน setup เพือ่ วนรอการกดสวติ ช OK เพอ่ื เรมิ่ ตน การทํางาน

หลังจากมกี ารกดสวติ ช OK จะเขา สูลูปการทํางานของฟงกช ่ัน loop เพือ่ วนรอการกดสวติ ช SW1 เมื่อ
สวิตช SW1 ถกู กด จะทําการสงสัญญาณออกมายงั พอรต 17 โดยคา ที่สงออกมาจะไดม าจากการเอ็กคลซู ีฟ
ออรค า ของตวั แปร i กบั 1 จากคาํ ส่ัง i^=1 ทําใหคา ที่ไดมกี ารกลบั สถานะทกุ ครั้งท่มี กี ารเรยี กใหทํางาน ซ่ึงการ
ทํางานในลักษณะน้ีสามารถใชคําสั่ง i=~i ก็ได แตเนื่องจากในคอมพิวเตอรบางเครื่อง (โดยเฉพาะเครื่อง
คอมพิวเตอร Macintosh) ไมม คี ยี  ~ ใหใช จึงตอ งเขยี นคาํ สั่งดว ยการทําเอก็ คลูซีฟ-ออรแ ทน

ดงั น้ันเมอื่ มกี ารกดสวติ ช SW1 ทุกครง้ั กจ็ ะมกี ารกลบั สถานะลอจิกเดมิ ทจี่ ุดตอพอรต 17 ทําให LED
ของแผงวงจร ZX-LED ที่ตอ อยเู กดิ การตดิ และดบั สลับกนั ในทุกครง้ั ที่กดสวิตช

สาํ หรบั คาํ สงั่ while(sw1()) และ dealy(5); ทาํ หนา ทลี่ ดสญั ญาณรบกวนทเี่ กดิ จากการกดสวติ ช ทาํ ใหก
ารกดสวติ ช SW1 ในแตล ะครัง้ มคี วามแนนอนมากขึน้

โปรแกรมท่ี L4-2 : ไฟล microbox_SW1test.ino โปรแกรมภาษา C/C++ สาํ หรบั ทดลองควบคุม LED
ดว ยสวติ ช SW1 ในลกั ษณะกลบั สถานะการทาํ งานในทกุ ครงั้ ทม่ี กี ารกดสวติ ช SW1

158      Arduino IDE

     

การเชื่อมตอ ทางฮารด แวร

 ตอ แผงวงจร ZX-SWITCH01 กบั จุดตอ พอรต 16 ของแผงวงจรหลัก IPST-SE

ขน้ั ตอนการทดลอง

5.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมท่ี L1-1 บันทึกในชื่อ microbox_CounterSwitch.ino
5.2 เปด สวติ ชจ า ยไฟแกแ ผงวงจร IPST-SE แลว เชอื่ มตอ สาย USB เขา กบั คอมพวิ เตอร

5.3 คอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลกิ ทปี่ มุ

5.4 รนั โปรแกรม
ท่ีจอแสดงผลกราฟก LCD แสดงขอ ความ Start ใหกดสวติ ช OK

5.5 กดสวติ ช OK 1 คร้ัง แลว ปลอย
ทจี่ อแสดงผลกราฟก LCD แสดงขอ ความ COUNTER ใหเ รมิ่ การนบั ดว ยการกดสวติ ชท ตี่ อ กบั พอรต 16

5.6 กดสวิตชท่ีแผงวงจร ZX-SWITCH01 ท่ีตอ กบั พอรต 16 สังเกตการทํางานท่ีจอแสดงผลของแผงวงจร IPST-SE

ท่ีจอแสดงผลจะเรมิ่ ตนแสดงคา การนับจํานวนการกดสวติ ช โดยเรม่ิ จาก 0 คา จะเปล่ียนทันทีท่ ่ีมกี ารกด
สวิตชท่ีพอรต 16 และจะทําการบั คา ตอไปได กต็ อ เม่ือมีการปลอยสวติ ช แลว กดใหม หากสวิตชยงั ถกู กดคาง
คา การนับจะไมม กี ารเปล่ียนแปลง จนกวา สวิตชจะถกู ปลอย และกดเขา มาใหม

28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
ZX-Switch01 24 A0 30 A6 27 A3
D D
ON
+S Hello0World0000000000
G
  000000000000000000000 6V
   12
   COUNTER000000000000000000000 G
6V
000000000000000000000 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
15
27000000000000000000000
SERVO
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000
S  
+
DC MOTORKNOB
15 SV0 14 SV1 13 SV2 12 SV3
OK

SW1

16 18 UART1 LOW 12
17 19 +5

20 RESET 2 RxD1 3 TxD1

รปู ที่ L5-1 การตอ วงจรเพ่ือทําการทดลองสาํ หรบั ปฏบิ ัตกิ ารท่ี 5

      Arduino IDE159

#include <ipst.h> // ผนวกไฟลไลบรารหี ลกั
int i=0; // ประกาศตวั แปรเกบ็ คาการนับ
void setup()
{ // กาํ หนดขนาดตวั อักษร 2 เทา
// แสดงขอ ความ Start ออกหนา จอแสดงผล
setTextSize(2); // วนรอจนกระท่งั กดสวติ ช OK
glcd(1,3,"Start"); // เคลยี รห นาจอแสดงผล กาํ หนดพนื้ หลงั เปน สดี าํ
sw_OK_press(); // แสดงขอ ความ COUNTER เพอื่ แจงชื่อการทดลอง
glcdClear(); // กาํ หนดขนาดตวั อักษร 3 เทา
glcd(1,2,"COUNTER"); // กาํ หนดคา เรม่ิ ตนเปน 0
setTextSize(3);
glcd(3,3,"0"); // ตรวจสอบการกดสวติ ชทพี่ อรต 16
}
void loop() // เพมิ่ คาตัวนับ
{ // แสดงคา การนับ
if (in(16)==0) // ตรวจสอบการปลอ ยสวติ ช
{

i=i++;
glcd(3,3,"%d",i);
while(in(16)==0)

delay(5);
}
}
คําอธบิ ายโปรแกรม

โปรแกรมนใี้ ชฟ ง กช น่ั in ในการตรวจจบั และอา นคา จากการกดสวติ ชท พ่ี อรต 16 โดยตรงสอบวา ทพ่ี อรต
16 เปน ลอจกิ “0” หรอื ไม ถา ใชแ สดงวา มกี ารกดสวิตชเปดขน้ึ จากนนั้ จะทําการเพมิ่ คา ตวั นบั แลว นํามาแสดง
ผลท่ีจอแสดงผลกราฟก LCD ของแผงวงจร IPST-SE

คาํ สั่ง while(in(16)==0) และ dealy(5); ทําหนา ที่ลดสัญญาณรบกวนท่ีเกิดจากการกดสวติ ช โดยจะ
ตรวจสอบวา มกี ารปลอยสวติ ชแลว หรอื ไม ถา ไม กจ็ ะวนทํางานอยทู ่ีคาํ สั่งน้ัน ชวยใหไมเกิดการนับคา โดยไม
ตง้ั ใจขึน้ ดงั นั้นการกดสวิตชท่ีพอรต 16 ในแตล ะครงั้ จึงมคี วามแนนอนสูง

โปรแกรมท่ี L5-1 : ไฟล microbox_CounterSwitch.ino โปรแกรมภาษา C/C++ สาํ หรบั ทดลองใชง านสวติ ช
ในการสรา งเครอ่ื งนบั จาํ นวนอยา งงา ย

จากทง้ั สองปฏิบตั กิ ารผพู ฒั นาสามารถนาํ ไปประยุกตใชง านสวติ ชหลายๆ ตวั พรอ มกันและมี
ความสามารถทแ่ี ตกตางกันไปแลว แตจุดประสงค เชน สวติ ชบางตัวสามารถกําหนดใหเม่ือกดสวติ ช
คา งแลว สามารถเพม่ิ คา หรอื ลดคา ขอ มลู ทกี่ าํ หนดได ในขณะทส่ี วติ ชบ างตวั อาจกาํ หนดใหไ มส ามารถ
กดคางได เปนตน

160     Arduino IDE

      Arduino IDE161

 
     

สัญญาณทางไฟฟา แบง ออก 2 แบบหลกั คอื สญั ญาณอะนาลอก (analog) และดจิ ติ อล (digital)
สญั ญาณอะนาลอกก็คือ สญั ญาณไฟฟา ทีม่ ีการเปล่ียนแปลงสัมพนั ธก ับคาเวลา โดยการเปลี่ยนแปลง
นนั้ จะเพมิ่ ขน้ึ หรอื ลดลงกไ็ ด และมรี ะดบั แรงดนั เทา ใดกไ็ ด สว นสญั ญาณดจิ ติ อลเปน สญั ญาณทมี่ กี าร
เปลี่ยนแปลงเพยี ง 2 ระดบั ทแ่ี ตกตางกัน กลาวคอื มรี ะดบั สัญญาณสงู และตํ่า (เกือบหรอื เทา กับ 0V)
โดยปกตจิ ะมรี ะดบั แรงดนั เทา กบั +5V สาํ หรบั ระดบั แรงดนั สงู หรอื เรยี กวา ลอจกิ “1” และ 0V สาํ หรบั
ระดบั แรงดนั ต่ํา หรอื เรยี กวา ลอจกิ “0” แตในปจจุบนั ระดับแรงดนั ของลอจกิ “1” อาจเทา กับ +3.3V
หรอื 1.8V ข้ึนอยกู ับเทคโนโลยขี องอปุ กรณด ิจติ อล อยา งไรก็ตาม สาํ หรบั การเรยี นรโู ดยพนื้ ฐานนี้จะ
อธบิ ายระดบั ลอจกิ “1” ดว ยคา แรงดนั +5V เปน หลกั ในรปู ท่ี 10-1 แสดงความแตกตา งระหวา งสญั ญาณ
อะนาลอกกับดิจติ อล

V Data
Vp 1

tt

0010110
V

Data
Vp

1

t
t

V 1101001

Vp Data

t1

t

101010

(ก) ตวั อยางสัญญาณอะนาลอก (ข) ตัวอยางสัญญาณดจิ ิตอล จะเห็นวา

ระดับของสญั ญาณเปลยี่ นแปลง มเี พยี ง 2 ระดบั สญั ญาณเทา นั้นคอื

สัมพันธก บั คา เวลา ระดับสงู ("1") และระดับตาํ่ ("0")

รปู ท่ี 10-1 ตวั อยา งของสญั ญาณอะนาลอกและดจิ ติ อล

162       Arduino IDE

10.1 สัญญาณอะนาลอก

แบง ได 3 แบบ คอื แบบสญั ญาณไฟตรง (analog DC signals), แบบเปลยี่ นคา ตามเวลา (time-
domain) และ แบบเปลย่ี นคา ตามความถ่ี (frequency-domain)

สัญญาณอะนาลอกไฟตรง มักเปนคาที่ไดจากการวัดขนาดหรือระดับของสัญญาณ ซึ่งมีการ
เปลย่ี นแปลงคา สญั ญาณในเวลาทไี่ มเ รว็ มากนกั อาทิ คา อณุ หภมู ,ิ ระดบั ของไหล, ความดนั , อตั ราการ
ไหล, นาํ้ หนกั เปน ตน สามารถใชว งจรแปลงสญั ญาณอะนาลอกเปน ดจิ ติ อล (ADC : Analog to Digital
Converter) ทม่ี ีอตั ราการสมุ สัญญาณไมเ ร็วมากได

สญั ญาณอะนาลอกแบบเปลยี่ นคา ตามเวลา เปน สญั ญาณทวี่ ดั เพอ่ื พจิ ารณาลกั ษณะรปู สญั ญาณ
เปน หลกั อาทิ สญั ญาณคลนื่ หวั ใจมนษุ ย (ECG) ซงึ่ มคี วามจาํ เปน ตอ งใชว งจรแปลงสญั ญาณอะนาลอก
เปน ดิจติ อลที่มีความเรว็ ในการสมุ สญั ญาณสงู

สัญญาณอะนาลอกแบบเปลี่ยนคาตามความถ่ี ไดแ ก สัญญาณความถว่ี ทิ ยุ (radio frequency :
RF) และสญั ญาณคลนื่ เสยี ง เปน ตน ในการวเิ คราะหจ าํ เปน ตอ งมฮี ารด แวรพ เิ ศษเพอื่ ชว ยวเิ คราะหอ ยา ง
DSP (digital signal processing) ทํางานรว มกบั วงจรแปลงสญั ญาณอะนาลอกเปน ดจิ ิตอลดว ย

10.2 ทําไมไมโครคอนโทรลเลอรตอ งอา นคา สญั ญาณอะนาลอก

สาเหตุหลักที่ไมโครคอนโทรลเลอรตองติดตอกับสัญญาณอะนาลอกคือ ตองการอานคา
ปรมิ าณทางฟส ิกสในรูปของสัญญาณไฟฟา เพอ่ื นําไปประมวลผลและควบคมุ ระบบตอ ไป

ในรูปท่ี 10-2 แสดงไดอะแกรมการทํางานเบ้ืองตนของการอานคาสัญญาณอะนาลอกของ
ไมโครคอนโทรลเลอร มีสว นประกอบสาํ คัญ 4 สว นคอื

1. สว นตรวจจบั สญั ญาณกายภาพ (Transducer/Sensor/Detector)

2. วงจรปรบั สภาพสัญญาณ (Signal conditioning)

3. วงจรแปลงสญั ญาณอะนาลอกเปนดิจติ อล (Analog to Digital Converter : ADC)

4. ไมโครคอนโทรลเลอร

10.2.1 สวนชดุ ตรวจจับสัญญาณกายภาพ

ชดุ ตรวจจบั สญั ญาณกายภาพหรอื ทรานสดวิ เซอร(transducer)คอื ตวั แปลงสญั ญาณทางกายภาพ
เชน อณุ หภมู ิความดนั ระดบั ของไหลความยาวตาํ แหนง การเคลอื่ นท่ีฯลฯใหเ ปน ในรปู สญั ญาณทางไฟฟา
นน่ั เองหรอื บางครง้ั เรยี กอปุ กรณเ หลา นว้ี า ตวั ตรวจจบั (sensor)ซง่ึ มดี ว ยกนั หลากหลายรปู แบบอาทิเทอรโ ม
คปั เปล (thermocouple) , เทอรม สิ เตอร (thermistor), ตวั ตรวจจบั การไหล (flow sensor) เปน ตน

     Arduino IDE163

 
    
 
          
       
    
  
oC

  

 


   10001000
    01110110
 00011101
11100110
   11111010
  




รปู ท่ี 10-2 แสดงกระบวนการอา นคาสญั ญาณอะนาลอกของไมโครคอนโทรลเลอร

10.1.2 สวนปรบั สภาพสัญญาณ

หนา ทหี่ ลกั ของสว นปรบั สภาพสญั ญาณนค้ี อื ปรบั ปรงุ คณุ ภาพของสญั ญาณไฟฟา ทไี่ ดจ ากชดุ
ตรวจจบั กอ นสง สญั ญาณตอ ไปยงั ฮารด แวรท เี่ ชอ่ื มตอ กบั ไมโครคอนโทรลเลอร ซง่ึ อาจมคี วามจาํ เปน
ตองปรับสเกลสัญญาณ, ขยายขนาดสัญญาณ, แปลงรปู สญั ญาณใหเปนเชิงเสน (linearization), กรอง
คลนื่ สัญญาณและแยกกราวดของสญั ญาณ (common-mode rejection)

หนา ทเี่ ดน ของสว นปรบั สภาพสญั ญาณคอื ขยายขนาดสญั ญาณ (amplifly) เพราะโดยสว นใหญ
สัญญาณที่ไดจากชุดตรวจจับจะมีขนาดสัญญาณที่ต่ํามาก มีขนาดแรงดันไฟฟาในหนวยมิลลิโวลต
(millivolt : mV) หรอื 1/1000V และมักมีสัญญาณรบกวนจากแหลง จา ยไฟปะปนมา ซึ่งอาจรบกวน
สัญญาณดา นอนิ พตุ ในขณะทส่ี ญั ญาณเขาสรู ะบบ ทําใหคาสญั ญาณท่ีวดั ไมถ กู ตอ งและไมเ ท่ียงตรง

นอกจากนั้นวงจรปรับสภาพสัญญาณยังใชในการแปลงสัญญาณไฟฟาท่ีไมไดอยูในรูปของ
แรงดนั ไฟฟา เชน กระแสไฟฟา หรอื ความตา นไฟฟา มาอยใู นรปู ของแรงดนั ไฟฟา ใหเ หมาะสมกบั วงจร
แปลงสญั ญาณอะนาลอกเปนดจิ ิตอล อาทิ แปลงคา กระแสไฟฟา 4 ถึง 20mA จากตัวตรวจจบั ท่ใี ห
ผลแบบกระแสไฟฟาเปนแรงดนั ไฟตรง 0 ถึง +5V เปนตน

164      Arduino IDE

10.1.3 วงจรแปลงสญั ญาณอะนาลอกเปนดจิ ติ อล

วงจรนี้ทําหนา รบั สัญญาณอะนาลอกที่ผานมาจากวงจรปรบั สภาพสัญญาณ เพอ่ื ทําการแปลง
เปน ขอ มลู ทางดจิ ติ อลเพอื่ สง ไปยงั ประมวลผลยงั ไมโครคอนโทรลเลอรต อ ไป จดุ ทต่ี อ งใหค วามสนใจ
ในสวนนี้คือ ความละเอยี ดในการแปลงสญั ญาณ วงจรแปลงสัญญาณอะนาลอกเปนดจิ ิตอลทเี่ หมาะ
สมในการนาํ มาใชใ นการทดลองวทิ ยาศาสตรค วรมคี วามละเอยี ดไมน อ ยกวา 8 บติ ซงึ่ ใหค วามแตกตา ง
ของขอมูล 256 คา และถา ยิ่งมีความละเอียดสูงเทาใดย่ิงดี เพราะจะใหผ ลการแปลงที่แมนยํามากข้ึน
แตนน่ั จะทําใหตนทุนของระบบสูงขึ้นตามไปดว ย

10.1.4 ไมโครคอนโทรลเลอร

ไมโครคอนโทรลเลอรเ ปน หนง่ึ ในอปุ กรณข องระบบดจิ ติ อล ดงั นนั้ การอา นคา สญั ญาณอะนา
ลอกโดยตรงจงึ ตอ งใชอ ปุ กรณช ว ยเพมิ่ เตมิ นน่ั คอื วงจรแปลงสญั ญาณอะนาลอกเปน ดจิ ติ อล (analog
to digital converter) ไมโครคอนโทรลเลอรใ นอดตี จะไมม ีวงจรแปลงสญั ญาณอะนาลอกเปนดจิ ติ อล
บรรจุอยูภายในตัวชิป จึงตองใชไอซีแปลงสัญญาณอะนาลอกเปนดิจิตอลเขามาชวย โดยไอซีแปลง
สญั ญาณนจี้ ะใหผ ลลพั ธอ อกมาเปนขอมูลดจิ ิตอลทมี่ คี วามละเอยี ดของขอ มลู ตางกันไป แลว แตค วาม
สามารถของไอซี โดยจะเริ่มต้ังแต 8, 10, 12, 16 บติ หรอื สงู กวา

ในปจ จบุ นั ไมโครคอนโทรลเลอรไ ดร วมเอาวงจรแปลงสญั ญาณอะนาลอกเปน ดจิ ติ อลเขา มา
ไวภ ายในชปิ ทงั้ นเ้ี พอ่ื ลดขนาดของระบบโดยรวมลง ทาํ ใหก ารประมวลผลสญั ญาณทาํ ไดเ รว็ ขน้ึ และ
ตนทนุ รวมของระบบลดลงตามไปดวย

ขอมูลดิจิตอลที่ไดมาจากวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล ไมวาจะเปนแบบไอซี
แปลงสญั ญาณภายนอก หรอื จากโมดลู ทอ่ี ยภู ายในไมโครคอนโทรลเลอรจ ะถกู สง เขา มาในระบบบสั
ขอมลู เพอ่ื ทาํ การประมวลผลและนาํ ไปใชในการตัดสินใจเพอ่ื ควบคุมการทาํ งานของระบบตอไป

สาํ หรบั ในชดุ IPST-MicroBOX (SE) ไดเ ลอื กใชไ มโครคอนโทรลเลอร ATmega644P อนั เปน
ไมโครคอนโทรลเลอรท ม่ี วี งจรแปลงสญั ญาณอะนาอลกเปน ดจิ ติ อล 8 ชอ งอยภู ายในชปิ แลว จงึ ทาํ ให
การนําแผงวงจรควบคุมไปใชใ นการเชอื่ มตอกับตัวตรวจจับแบบตางๆ เพอื่ อา นคากระทําไดง า ยและ
สะดวกขึ้น

     Arduino IDE165

10.2 การแปลงสญั ญาณอะนาลอกเปน ดิจิตอล (ADC)

การแปลงสัญญาณอะนาลอกเปนดิจิตอล สัญญาณจะไดร ับการแปลงเปนจํานวนทางดิจิตอล
โดยการสมุ หรอื แซมปลง้ิ (sampling) ดงั ในรปู ที่10-3 ถา หากวงจรแปลงสญั ญาณอะนาลอกเปน ดจิ ติ อล
มีความละเอยี ด 8 บิต จะมีความแตกตา งทางผลลัพธเ ลขฐานสองทง้ั หมด 28 หรอื 256 คา และถาหาก
มคี วามละเอยี ด 10 บิต ก็จะใหผ ลลัพธข องขอมลู เลขฐานสองสงู ถงึ 210 หรอื 1,024 คา

คาความละเอียดของตัวแปลงสัญญาณอะนาลอกเปนดิจิตอลถูกอธิบายเปนระยะหางท่ีนอย
ที่สุดของคาแรงดันทางอินพุตท่ีเพิ่มขึ้น ซ่ึงถูกกําหนดโดยตัวแปลงสัญญาณน้ัน ระยะหางยิ่งนอย
เทาไหร คาความละเอยี ดย่ิงสูงขึ้น โดยคาความละเอยี ดแปรผันตรงกับจํานวนของบติ เอาตพุต ยกตัว
อยางเชน ถาวงจรแปลงสัญญาณมีความละเอียด 10 บิต ทําใหเกิดผลลัพธที่แทนคาสัญญาณมากถึง
1,024 ระดบั สัญญาณอนิ พตุ ถูกแทนเปนรหสั เลขฐานสองจาก 0000000000 ถงึ 1111111111 ถา ยาน
อนิ พตุ เรมิ่ ตนจาก 0 ถึง +5 V ดังนั้นความละเอยี ดเทากับ (คาโดยประมาณ)

5  0.005V
1024

ถาเอาตพ ตุ รหสั เลขฐานสองเปน 0000000001 แทนแรงดนั 0.005 V ดังนนั้ ขอมลู ของแรงดัน
3V จะมีคาเทากับ

3  600 10
0 .005

ทําการแปลงเปนเลขฐานสองจะไดค าเทากับ 10010110002

ขอมลู ดจิ ติ อล

1101100111

0101101111

สัญญาณ
อะนาลอกอนิ พุต

ระยะหา งของการสุม

รปู ที่ 10-3 การสมุ สญั ญาณอะนาลอกเพื่อกาํ หนดขอมลู ดจิ ติ อล

166      Arduino IDE

10.3 ฟง กช นั่ ของโปรแกรมภาษา C/C++ ทใ่ี ชอ า นคา สญั ญาณอะนาลอกของ
IPST-MicroBOX (SE)

เพอื่ อาํ นวยความสะดวกในการเขียนโปรแกรมภาษา C/C++ เพอ่ื ควบคุมกลอ งสมองกล IPST-
MicroBOX (SE) เพอื่ ใหอ า นคาสญั ญาณอะนาลอกจากตัวตรวจจบั ตางๆ ในไฟลไ ลบรารี ipst.h จึงได
บรรจฟุ ง กช่ันสําหรบั อา นคาสญั ญาณอะนาลอกโดยเฉพาะ 2 ฟง กช่ันคือ analog() และ knob();

การอา นคาผานฟง กชั่น analog() และ knob() จะไดผ ลลัพธค ืนคากลับมาในชวง 0 ถึง 1,023
ของเลขฐานสิบ หรือ 0x0000 ถึง 0x03FF ของเลขฐานสิบหก เนื่องจากความละเอียดในการแปลง
สัญญาณอะนาลอกเปน ดจิ ติ อลเทากับ 10 บติ (เกิดคาได 1,024 คา)

10.3.1 analog

เปน ฟง กช น่ั อา นคา จากการแปลงสญั ญาณอะนาลอกของแผงวงจร IPST-SE ทจี่ ดุ ตอ A0 ถงึ A6

รูปแบบ
unsigned int analog(unsigned char channel)

พารามเิ ตอร
channel - กําหนดชอ งอินพุตที่ตอ งการ มีคา 0 ถงึ 6 ซ่งึ ตรงกับขาพอรต A0 ถงึ A6

การคนื คา
เปน ขอ มลู ทไ่ี ดจ ากการแปลงสญั ญาณไฟฟา 0 ถงึ +5V จากชอ งอนิ พตุ ทก่ี าํ หนด มคี า 0 ถงึ 1,023

10.3.2 knob( )

เปน ฟง กช นั่ อา นคา ขอ มลู ทไี่ ดจ ากการแปลงสญั ญาณไฟฟา ทข่ี าพอรต A7 ซงึ่ ตอ กบั ตวั ตา นทาน
ปรบั คาไดท ตี่ ําแหนง KNOB

รูปแบบ
unsigned int knob()

การคนื คา
เปน ขอ มลู ทไี่ ดจ ากการแปลงสญั ญาณไฟฟา ทมี่ าจากการปรบั คา ทป่ี มุ KNOB บนแผงวงจร IPST-

SE มคี า 95 ถงึ 1,023

      Arduino IDE167

          

ในปฏิบัตกิ ารน้ีเปนการแนะนําการเชื่อมตอ ชุดกลองสมองกล IPST-MicroBOX (SE) กบั อุปกรณท ี่ใหผล
การทาํ งานเปน แรงดนั ไฟตรง เพอื่ ทดสอบการอา นคา สญั ญาณอะนาลอกหรอื สญั ญาณไฟตรงมาแสดงผลเปน ตวั
เลขทเ่ี ขา ใจไดง า ยขนึ้ ซง่ึ การทาํ งานของอปุ กรณแ บบนจ้ี ะแตกตา งกนั ไปตามลกั ษณะและจดุ ประสงค เชน ตวั ตรวจ
จับอุณหภูมิที่ใหผลการเปล่ียนแปลงอุณหภูมิสัมพันธกับแรงดันทางเอาตพุต, ตัวตานทานแปรคาตามแสงที่
สามารถใหแรงดนั ไฟตรงเอาตพ ุตเปล่ียนแปลงตามความเขม ของแสงท่ีมาตกกระทบตัวมนั เปนตน ตวั แทนของ
อุปกรณใ นลักษณะน้ีในขั้นพ้ืนฐานท่ีสุดคอื ZX-POTV แผงวงจรตัวตานทานปรบั คา ได (Potentiometer) โดยใน
ปฏิบัตกิ ารน้ีจะแสดงใหเห็นถงึ การอา นคา และนําผลลัพธม าประยกุ ตใ ชงานรว มกบั แผงวงจรหลัก IPST-SE

ปฏบิ ัตกิ ารที่ 6-1 อา นคา ตวั ตรวจจับมาแสดงผล

ในปฏบิ ตั กิ ารนน้ี าํ เสนอการเขยี นโปรแกรมภาษา C/C++ เพอื่ อา นคา สญั ญาณไฟฟา แบบอะนาลอกจาก
แผงวงจรตวั ตา นทานปรบั คา ไดท ตี่ อ กบั จดุ ตอ พอรต A1 มาแสดงผลทจ่ี อแสดงผลกราฟก LCD สบี นแผงวงจรหลกั
IPST-SE

การเช่ือมตอทางฮารด แวร

 ตอ เอาตพ ตุ หรอื เอาตพ ตุ ปรบั แรงดนั เพมิ่ เมอ่ื หมนุ ตามตามเขม็ นาฬกิ าของแผงวงจร ZX-POTV กบั จดุ ตอ A1
ของแผงวงจรหลัก IPST-SE

ZX-POTV28 A4 25 A1 8 SCL 9 SDA
29 A5 26 A2 USB
24 A0 A30 A6 27 A3
DC MOTORD
KNOB ON
OK 15 SV0 14 SV1 13 SV2 12 SV30 0000000000
SW1 G
Analog000000000000000000000 6V
12
000000000000000000000 G
000000000000000000000 6V
13
583000000000000000000000 G
6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
SERVO
Volts000000000000000000000

000000000000000000000

2.847000000000000000000000

000000000000000000000
000000000000000000000
000000000000000000000

16 18 UART1 LOW 12
17 19 +5

20 RESET 2 RxD1 3 TxD1

รปู ที่ L6-1 การตอ วงจรเพ่ือทําการทดลองสาํ หรบั ปฏบิ ัตกิ ารที่ 6

168      Arduino IDE

ขั้นตอนการทดลอง

6.1.1 เปดซอฟตแ วร Wiring 1.0 สรา งไฟลใหม พิมพโปรแกรมที่ L6-1 บันทึกในชื่อ microbox_AnalogTest.ino

6.1.2 คอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลกิ ทปี่ มุ

#include <ipst.h> // ผนวกไฟลไลบรารหี ลกั
int val = 0;
float volts = 0.0; // เลอื กขนาดตัวอกั ษรใหญเ ปน 2 เทา จากขนาดปกติ
void setup() // แสดงขอ ความท่ีจอแสดงผล
{ // อานคาของสัญญาณชอง A1 มาเก็บไวท ต่ี ัวแปร val
// เลอื กขนาดตัวอักษรใหญเ ปน 3 เทา จากขนาดปกติ
glcdClear(); // แสดงคา ที่อา นไดจ ากจดุ ตอ A1 ทหี่ นาจอแสดงผล
setTextSize(2); // เลอื กขนาดตัวอักษรใหญเ ปน 2 เทา จากขนาดปกติ
} // แสดงขอ ความ Volts
void loop() // แปลงขอ มูลเปน หนวยแรงดนั
{ // เลอื กขนาดตัวอกั ษรใหญเ ปน 3 เทา จากขนาดปกติ
glcd(0,2,"Analog"); // แสดงคา แรงดันความละเอยี ดทศนยิ ม 3 ตําแหนง
val = analog(1); // เลอื กขนาดตัวอกั ษรใหญเ ปน 2 เทา จากขนาดปกติ
setTextSize(3);
glcd(1,2,"%d ",val);
setTextSize(2);
glcd(5,3,"Volts");
volts = (float(val)*5)/1024;
setTextSize(3);
glcd(4,1,"%f",volts);
setTextSize(2);
}

คําอธบิ ายโปรแกรม

คา ของแรงดนั ไฟตรงที่ไดจ ากตวั ตรวจจับหรอื ตวั ตา นทานปรบั คา ไดท ่ีจุดตอ A1 ของแผงวงจร IPST-SE
จะถกู แปลงเปน ขอ มลู ดจิ ติ อลและจดั รปู แบบเปน เลขฐานสบิ ไดค า ในชว ง 0 ถงึ 1023 จากการทาํ งานของฟง กช นั่
analog() จากนนั้ ขอ มลู นนั้ ไดร บั การสง ตอ ไปแสดงทจ่ี อแสดงผลกราฟก LCD สดี ว ยฟง กช นั่ glcd อยา งตอ เนอื่ ง

นอกจากนน้ั ในโปรแกรมยงั นาํ ขอ มลู ทไ่ี ดจ ากการแปลงสญั ญาณมาคาํ นวณกลบั เพอื่ ใหไ ดเ ปน คา แรงดนั
ไฟตรง โดยใชสมการ volts = (val x 5) / 1024 แลว ใชตวั แปร volts ที่เปนตวั แปรแบบทศนิยมมารบั คาที่ไดจ าก
คาํ นวณเพอื่ นาํ ไปแสดงผลทจ่ี อกราฟก LCD สี โดยแสดงเปน คา แรงดนั ในหนว ยโวลต ดว ยความละเอยี ดทศนยิ ม
3 ตาํ แหนง

ในโปรแกรมมกี ารกาํ หนดขนาดของตวั อกั ษรทใ่ี ชแ สดงผลตา งกนั เนอื่ งจากตอ งการแยกขอ ความและขอ มลู
ออกจากกนั ใหช ดั เจน

โปรแกรมที่L6-1:ไฟลmicrobox_AnalogTest.inoโปรแกรมภาษาC/C++สาํ หรบั อา นคา สญั ญาณอะนาลอกของ
แผงวงจรIPST-SE

     Arduino IDE169

6.1.3 รันโปรแกรม ทดลองหมนุ แกนของตวั ตา นทานบนแผงวงจรตวั ตา นทานปรบั คา ได ZX-POTV สงั เกตผลการ
ทํางานผานทางจอแสดงผลของแผงวงจร IPST-SE

ท่ีจอแสดงผลกราฟก LCD ชวงบนแสดงคา ขอ มลู ท่ีไดจากการแปลงสัญญาณที่จุดตอ A1 ซึ่งตอ กบั แผง
วงจรตวั ตา นทานปรบั คา ได ZX-POTV โดยมคี า ระหวาง 0 ถงึ 1023 (เทียบกบั แรงดนั 0 ถงึ +5V)

ทชี่ ว งลา งของจอแสดงผลกราฟก LCD สแี สดงคา แรงดนั ไฟตรงในหนว ย โวลต (Volts) ทไ่ี ดจ ากการปรบั
คา ของตวั ตา นทานบนแผงวงจรตวั ตา นทานปรบั คา ได ZX-POTV โดยมคี า ระหวาง 0.000 ถงึ 4.995 (เทียบกบั
ขอ มลู 0 ถงึ 1023)

ZX-POTV

A

28 A4 25 A1 8 SCL 9 SDA
  29 A5 26 A2 USB
 24 A0 30 A6 27 A3
   D
ON
KNOB 0 0000000000 DC MOTOR
OK G
SW1 Analog000000000000000000000 15 SV0 14 SV1 13 SV2 12 SV36V
12
000000000000000000000 G
000000000000000000000 6V
13
0000000000000000000000 G
6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
SERVO
Volts000000000000000000000

000000000000000000000

0.000000000000000000000000

000000000000000000000
000000000000000000000
000000000000000000000

16 18 UART1 LOW 12
17 19 +5

20 RESET 2 RxD1 3 TxD1

ZX-POTV

A

28 A4 25 A1 8 SCL 9 SDA
  29 A5 26 A2 USB
 24 A0 30 A6 27 A3
    D
ON
KNOB 0 0000000000 DC MOTOR
OK G
SW1 Analog000000000000000000000 15 SV0 14 SV1 13 SV2 12 SV36V
12
000000000000000000000 G
000000000000000000000 6V
13
1023000000000000000000000 G
6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
SERVO
Volts000000000000000000000

000000000000000000000

4.995000000000000000000000

000000000000000000000
000000000000000000000
000000000000000000000

16 18 UART1 LOW 12
17 19 +5

20 RESET 2 RxD1 3 TxD1

170      Arduino IDE

ปฏบิ ัตกิ ารที่ 6.2 ควบคมุ การเปด /ปด LED ดว ยแผงวงจรตวั ตา นทานปรับคา ได

ในปฏิบัตกิ ารนี้เปนการนําขอ มลู ที่ไดจ ากการแปลงสัญญาณไฟฟาซึ่งมาจากการปรบั คาของ ZX-POTV
แผงวงจรตวั ตา นทานปรบั คาไดม ากาํ หนดเงอ่ื นไขในการเปด /ปด LED เพ่อื ใหเห็นแนวทางในการประยกุ ตใ ชงาน
เบอ้ื งตน

การเช่ือมตอทางฮารด แวร

 เชอ่ื มตอ แผงวงจร ZX-LED เขา กบั จดุ ตอ พอรต 17 ของแผงวงจรหลกั IPST-SE

 ตอ เอาตพุต หรอื เอาตพ ุตปรบั แรงดนั เพิ่มเมอ่ื หมนุ ตามตามเขม็ นาฬิกาของแผงวงจร ZX-POTV กบั จุดตอ
พอรต A1 ของแผงวงจรหลัก IPST-SE

ขั้นตอนการทดลอง

6.2.1 เปด ซอฟตแ วร Wiring 1.0 สรา งไฟลใ หม พมิ พโ ปรแกรมที่ L6-1 บนั ทกึ ในชอื่ microbox_AnalogSwitch.ino

6.2.2 คอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลกิ ทป่ี มุ

ZX-POTV 

A

28 A4 25 A1 USB 8 SCL 9 SDA
29 A5 26 A2 D
24 A0 30 A6 27 A3
Analog0 0000000000
ZX-LED KNOB DC MOTOR ON
OK 000000000000000000000
15 SV0 14 SV1 13 SV2 12 SV3 G
control000000000000000000000 6V
12
000000000000000000000 G
6V
Switch000000000000000000000 13

000000000000000000000

000000000000000000000
000000000000000000000

000000000000000000000
000000000000000000000
000000000000000000000
000000000000000000000

108000000000000000000000

000000000000000000000
000000000000000000000
000000000000000000000

+ S SW1 G
6V
+ S
14
O

16 18 UART1 LOW 12 G
+5 6V

15

17 19 20 RESET 2 RxD1 3 TxD1 SERVO

รปู ที่ L6-2 การตอ วงจรเพ่ือทําการทดลองสาํ หรบั ปฏบิ ัตกิ ารท่ี 6-2

    Arduino IDE171

#include <ipst.h> // ผนวกไฟลไ ลบรารหี ลกั
int val=0; // กาํ หนดตวั แปรเกบ็ คาท่ีไดจากการแปลงสญั ญาณแลว
void setup()
{ // เลอื กขนาดตัวอกั ษรใหญเปน 2 เทา จากขนาดปกติ
// แสดงขอ ความที่จอแสดงผล
glcdClear();
setTextSize(2); // อา นคาของสญั ญาณชอ ง A1 มาเกบ็ ไวท ต่ี ัวแปร val
glcd(1,2,"Analog"); // ตรวจสอบวาคาท่ีอานไดมากกวา 512 หรอื ไม
glcd(2,2,"control"); // เลอื กขนาดตัวอักษรใหญเ ปน 4 เทา จากขนาดปกติ
glcd(3,2,"Switch"); // เปลยี นเปนสแี ดง
} // แสดงคา ที่อานไดจากจดุ ตอ A1 ทห่ี นาจอแสดงผล
void loop() // ถา คา val มากกวา 512 ทาํ การขับ LED ทพี่ อรต 17
{
val = analog(1); // เลอื กขนาดตัวอกั ษรใหญเ ปน 4 เทา จากขนาดปกติ
if(val>512) // แสดงตัวอักษรสีขาว
{ // แสดงคา ที่อานไดจ ากจดุ ตอ A2 ทห่ี นาจอแสดงผล
// ถาคา val นอ ยกวา 512 ทาํ การปด LED ทพี่ อรต 17
setTextSize(4); // เลอื กขนาดตัวอกั ษรใหญเปน 2 เทา จากขนาดปกติ
setTextColor(GLCD_RED);
glcd(3,1,"%d ",val);
out(17,1);
}
else
{
setTextSize(4);
setTextColor(GLCD_WHITE);
glcd(3,1,"%d ",val);
out(17,0);
}
setTextSize(2);
}

คําอธบิ ายโปรแกรม

สญั ญาณไฟฟาจากแผงวงจรตวั ตา นทานปรบั คาไดจะถกู อา นดวยคาํ สั่ง analog() เก็บไวท่ีตวั แปร val
เพื่อนําไปตรวจสอบและสง ไปแสดงผลยังจอแสดงผลกราฟก LCD สี หากคา ท่ีได นอยกวา 512 ตวั เลขทแี่ สดง
ผลยังเปนสีขาว และสง ขอ มลู “0” ไปยังพอรต 17 ทําให LED ทต่ี อ อยไู มทํางาน

เม่ือคา ของ val มากกวา 512 ตวั เลขแสดงผลจะเปล่ียนเปนสีแดง และมกี ารสงขอ มลู “1” ไปยงั พอรต
17 ทําให LED ทตี่ อ อยตู ดิ สวา ง

โปรแกรมท่ีL6-2 : ไฟล microbox_AnalogSwitch.ino โปรแกรมภาษา C/C++ สาํ หรบั อา นคา สญั ญาณไฟฟา
เพอ่ื นาํ มาควบคมุ อปุ กรณเ อาตพ ตุ

172     Arduino IDE

6.2.3 รนั โปรแกรม ทดลองปรบั คา ทแี่ กนหมนุ ของตวั ตา นทานปรบั คา ไดบ นแผงวงจร ZX-POTV สงั เกตการทาํ งาน
ของจอแสดงผลบนแผงวงจร IPST-SE และ LED บนแผงวงจร ZX-LED

เมอื่ ปรบั คา ทแ่ี กนของตวั ตา นทาน สงั เกตผลลพั ธท จ่ี อแสดงผล มนั จะแสดงคา 0 ถงึ 1023 เมอ่ื ปรบั คา ท่ี
แผงวงจร ZX-POTV ถา มคี า นอ ยกวา 512 ตัวเลขจะเปนสีขาว และ LED ดบั เมือ่ ใดปรบั คาจนไดมากกวา 512
คา ตวั เลขทจ่ี อแสดงผลจะเปลี่ยนเปนสีแดง และ LED ทตี่ อ กบั พอรต 17 ตดิ สวา ง

  

ZX-POTV

A

28 A4 25 A1 USB 8 SCL 9 SDA
29 A5 26 A2 D
24 A0 30 A6 27 A3
Analog0 0000000000
ON
000000000000000000000

control000000000000000000000

000000000000000000000

Switch000000000000000000000

000000000000000000000
000000000000000000000

000000000000000000000

ZX-LED 000000000000000000000

000000000000000000000 GDC MOTOR
000000000000000000000
 6V 15 SV0 14 SV1 13 SV2 12 SV3
420 000000000000000000000
+S KNOB 12
OK 000000000000000000000
SW1 000000000000000000000 G
000000000000000000000 6V
16 18 000000000000000000000
17 19 13

ZX-POTV S G
6V
A O
+ 14

UART1 LOW 12 G
+5 6V

15

20 RESET 2 RxD1 3 TxD1 SERVO

  


28 A4 25 A1 USB 8 SCL 9 SDA
29 A5 26 A2 D
24 A0 30 A6 27 A3
Analog0 0000000000

000000000000000000000
control000000000000000000000
ON
000000000000000000000

Switch000000000000000000000

000000000000000000000
000000000000000000000

000000000000000000000

ZX-LED 000000000000000000000

000000000000000000000 DC MOTORG
520  000000000000000000000
   KNOB 15 SV0 14 SV1 13 SV2 12 SV36V
OK 000000000000000000000 12
+S SW1 000000000000000000000
000000000000000000000 G
16 18 000000000000000000000 6V
17 19 000000000000000000000
13

+ S G
6V
O
14

UART1 LOW 12 G
+5 6V

15

20 RESET 2 RxD1 3 TxD1 SERVO

   Arduino IDE173

ปฏบิ ตั กิ ารที่ 6.3 ควบคมุ การเปด /ปด LED ดว ยแผงวงจรตรวจจบั แสง

ในปฏบิ ตั กิ ารนเี้ ปน การตอ ยอดจากปฏบิ ตั กิ ารท่ี 6.2 โดยเปลย่ี นจากการปรบั คา ของ ZX-POTV แผงวงจรตวั
ตา นทานปรบั คา ไดเ ปนการตรวจจับแสงโดยใชแผงวงจรตวั ตา นทานแปรคา ตามแสดงหรอื ZX-LDR โดยยงั คงใช
เงอ่ื นไขในการเปด /ปด LED ในแบบเดยี วกนั

การเช่ือมตอทางฮารด แวร

 เชอื่ มตอ แผงวงจร ZX-LED เขา กบั จดุ ตอ พอรต 17 ของแผงวงจรหลกั IPST-SE

 ตอ เอาตพุต + หรอื เอาตพ ุตแรงดนั แปรคา ตามแสงของแผงวงจร ZX-LDR กบั จุดตอ พอรต A1 ของแผง

วงจรหลัก IPST-SE

ขน้ั ตอนการทดลอง

6.3.1 เขยี นโปรแกรมท่ี L6-3 บันทึกในชื่อ microbox_NightSwitch.ino

6.3.2 คอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลกิ ทปี่ มุ

ZX-LDR ++
Light sensor
A
Potentiometer +28 A4 25 A18 SCL 9 SDA
DC MOTOR29 A5 26 A2USB
  24 A0 30 A6 27 A3
  15 SV0 14 SV1 13 SV2 12 SV3D
  ON
Night0 0000000000
  ZX-LED KNOB G
 OK 000000000000000000000 6V
 SW1 000000000000000000000 12
  G
16 18 Switch000000000000000000000 6V
17 19 13
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 14
000000000000000000000 G
000000000000000000000 6V
000000000000000000000 15
000000000000000000000
000000000000000000000 SERVO

98000000000000000000000

000000000000000000000
000000000000000000000
000000000000000000000

+S

S

O

UART1 LOW 12
+5

20 RESET 2 RxD1 3 TxD1

รปู ท่ี L6-3 การตอ วงจรเพอ่ื ทดสอบการทาํ งานของแผงวงจรตรวจจบั แสงเพอื่ ใชก าํ หนดเงอื่ นไขในการ
เปด -ปด อุปกรณเ อาตพ ุต

174      Arduino IDE

#include <ipst.h> // ผนวกไฟลไ ลบรารหี ลกั
int val=0; // กาํ หนดตวั แปรสําหรบั เก็บคาท่ีไดจ ากการแปลงสญั ญาณ
void setup()
{
glcdClear();
setTextSize(2); // เลอื กขนาดตัวอักษรใหญเ ปน 2 เทา จากขนาดปกติ
setTextColor(GLCD_YELLOW);
glcd(1,2,"Night"); // แสดงขอ ความท่ีจอแสดงผล
glcd(2,2,"Switch");
}
void loop()
{
val = analog(1); // อานคาของสัญญาณชอ ง A1 มาเกบ็ ไวท ตี่ ัวแปร val
if(val<100) // ตรวจสอบวาคาท่ีอา นไดม ากกวา 512 หรอื ไม
{
setTextSize(4); // เลอื กขนาดตัวอักษรใหญเ ปน 4 เทา จากขนาดปกติ

setTextColor(GLCD_WHITE); // เปลยี นเปนสขี าว

glcd(3,1,"%d ",val); // แสดงคา ท่ีอา นไดจากจดุ ตอ A1 ทห่ี นาจอแสดงผล

} out(17,1); // ถาคา val นอยกวา 100 ทาํ การขับ LED ทพ่ี อรต 17

else
{
setTextSize(4); // เลอื กขนาดตัวอักษรใหญเปน 4 เทา จากขนาดปกติ

setTextColor(GLCD_BLUE); // แสดงตัวอกั ษรสนี ํ้าเงนิ

glcd(3,1,"%d ",val); // แสดงคา ท่ีอา นไดจ ากจดุ ตอ A1 ทห่ี นาจอแสดงผล

} out(17,0); // ถาคา val มากกวา 100 ทาํ การปด LED ทพ่ี อรต 17

setTextSize(2); // เลอื กขนาดตัวอกั ษรใหญเ ปน 2 เทา จากขนาดปกติ

}

คําอธบิ ายโปรแกรม

ในโปรแกรมนจี้ ะตรวจสอบคา จากแผงวงจรตรวจจบั แสงทอี่ า นดว ยคาํ สง่ั analog(1); เกบ็ ไวท ตี่ วั แปร val
หากคา ท่ีไดมากกวา 100 ตวั เลขทแี่ สดงผลเปนสีน้ําเงนิ และสงขอ มลู “0” ไปยงั พอรต 17 ทําให LED ท่ีตอ อยู
ไมท ํางาน

เมื่อคา ของ val นอยกวา 100 ตวั เลขแสดงผลจะเปล่ียนเปนสีขาว และมกี ารสงขอ มลู “1” ไปยงั พอรต
17 ทําให LED ท่ตี อ อยตู ดิ สวา ง

โปรแกรมที่L6-3:ไฟลmicrobox_NightSwitch.inoโปรแกรมภาษาC/C++สาํ หรบั ควบคมุ การเปด ปด อปุ กรณ
เอาตพ ตุ ดว ยแสง

    Arduino IDE175

6.3.3 รนั โปรแกรม ทดลองใชม อื หรอื แปน กระดาษโปรง แสงบงั แสงทสี่ อ งมายงั ตวั ตา นทานแปรคา ตามแสงหรอื LDR
บนแผงวงจร ZX-LDR สังเกตการทํางานของจอแสดงผลบนแผงวงจร IPST-SE และ LED บนแผงวงจร ZX-LED

หาก ZX-LDR ไดร บั แสงมาก สังเกตไดจ ากคา ท่ีแสดงบนจอแสดงผล นั่นคอื มคี า มากกวา 100 (ตวั เลข
เปน สีนํ้าเงิน) จะสมมตสิ ถานการณว า เปนตอนกลางวัน จึงไมม เี ปดไฟสองสวาง ซึ่งในท่ีน้ีใช LED บนแผงวงจร
ZX-LED ทําหนาที่แทน

แตถ าั หาก ZX-LDR ไดร บั แสงลดลงจนตาํ่ กวา 100 จะถอื วา เปนตอนกลางคนื ระบบจะทํางานสั่งให
LED ท่ีพอรต 17 ตดิ สวาง จนกวา ZX-LDR จะไดร บั แสงมากเพียงพอ ซ่ึงอาจตคี วามวา เปนตอนเชาแลว วงจร
ขบั LED หยุดทํางาน ทําให LED ที่พอรต 17 ดบั

ดงั นั้น จึงอาจเรยี กการทาํ งานของปฏบิ ัตกิ ารนี้วา สวิตชสนธยา (Twilight Switch) หรอื สวิตชกลางคนื
(Night Switch) กไ็ ด

176     Arduino IDE

            

ในปฏิบัติการนี้เปนการนําไอซีวัดอุณหภูมิท่ีใหผลการทํางานเปนแรงดันไฟฟามาเช่ือมตอกับชุดกลอง
สมองกล IPST-MicroBOX (SE) เพ่ือสรา งเปนเครอื่ งวัดอุณหภมู ริ ะบบตวั เลขอยา งงาย

รูจักกับ MCP9701 ไอซวี ัดอุณหภมู ิ

เปน อปุ กรณต รวจจบั และวดั อณุ หภมู ทิ ใี่ หผ ลการทาํ งานเปน แรงดนั ไฟฟา แบบเชงิ เสน รบั รกู ารเปลย่ี นแปลง
ของอณุ หภูมภิ ายในเวลาไมถ งึ 2 วินาที เช่ือมตอ กบั อนิ พุตอะนาลอก A0 ถงึ A6 ของแผงวงจรหลัก IPST-SE ได

คณุ สมบัตทิ างเทคนิคของ MCP9701 ท่ีควรทราบ
 เปนไอซีวัดอณุ หภมู ใิ นกลุมเทอรม สิ เตอรแ บบแอกตีฟทใ่ี หผลการทํางานแบบเชงิ เสน

 ยา นวัด -40 ถงึ +125 องศาเซลเซียส

 ผลการวดั อา งอิงกับหนวยขององศาเซลเซียสโดยตรง

 ความผดิ พลาดเฉล่ีย 2 องศาเซลเซียส

 ยา นไฟเล้ียง +3.1 ถงึ +5.5V กนิ กระแสไฟฟาเพยี ง 6uA ใชแบตเตอรเ่ี ปนแหลงจายไฟได

 คา แรงดนั เอาตพ ุต 500mV (ที่ 0๐C) ถงึ 2.9375V (ที่ 125๐)

 คา แรงดนั เอาตพ ตุ ตอ การเปลย่ี นแปลงอณุ หภมู ิ 19.5mV/๐C ใชง านกบั วงจรแปลงสญั ญาณอะนาลอก
เปน ดิจิตอลความละเอียดตงั้ แต 8 บิตได โดยมีความคลาดเคล่ือนตํ่า

รปู ที่ L7-1 การจดั ขาของ MCP9701, หนาตาเมอื่ ตอ สายสญั ญาณพรอ มใชงานและกราฟคุณสมบัติ

     Arduino IDE177

    28 A4 25 A1 8 SCL 9 SDA
 29 A5 26 A2 USB
24 A0 30 A6 27 A3
KNOB D
DC MOTOR ON
OK Digital0 0000000000
15 SV0 14 SV1 13 SV2 12 SV3 G
SW1 000000000000000000000 6V
000000000000000000000 12
000000000000000000000 G
6V
THERMO000000000000000000000 13
METER000000000000000000000 G
6V
000000000000000000000 14
000000000000000000000 G
6V
26.740000000000000000000000 15

000000000000000000000 SERVO
000000000000000000000
000000000000000000000

Celsius000000000000000000000

000000000000000000000
000000000000000000000
000000000000000000000

16 18 UART1 LOW 12
17 19 +5

20 RESET 2 RxD1 3 TxD1

รปู ท่ี L7-2 การตอ วงจรเพอ่ื ใชง านชดุ กลอ งสมองกล IPST-MicroBOX (SE) กบั ไอซวี ดั อณุ หภมู ิ MCP9701

การเช่ือมตอทางฮารด แวร

 ตอ สายวัดอณุ หภูมทิ ่ีเช่ือมตอ กบั ไอซี MCP9701 เขา กบั จุดตอ A3 ของแผงวงจรหลัก IPST-SE

ขน้ั ตอนการทดลอง

7.1 เขยี นโปรแกรมท่ี L7-1 บันทึกในชื่อ microbox_Thermometer.ino

7..2 คอมไพลแ ละอปั โหลดโปรแกรมไปยงั แผงวงจร IPST-SE โดยคลกิ ทป่ี มุ

7.3 รนั โปรแกรม ทดลองใชมอื จับทตี่ วั ไอซีวัดอณุ หภมู ิ หรอื นําหัววัดอณุ หภมู ไิ ปแชในน้ําแขง็ สังเกตการทาํ งานท่ี
จอแสดงผลบนแผงวงจร IPST-SE

แผงวงจร IPST-SE แสดงขอ ความแจงหนาท่ีการทํางาน และแสดงคา อณุ หภมู ิในหนวยองศาเซลเซียส
(Celsius) ดว ยความละเอียดทศนิยม 3 ตาํ แหนง โดยทค่ี า ของอณุ หภมู จิ ะแสดงดว ยตวั เลขสเี หลืองขนาดใหญ
(3x)

178      Arduino IDE

#include <ipst.h> // ผนวกไฟลไลบรารหี ลกั
int val,i; // กาํ หนดตวั แปรเกบ็ คาท่ีอานไดจาก MCP9701
float Temp; // ประกาศตัวแปรคา อณุ หภมู ใื นแบบทศนยิ ม
void setup() // เคลยี รจอแสดงผล
{ // เลอื กขนาดตัวอกั ษร 2 เทา

glcdClear(); // แสดงขอ ความเรม่ิ ตน
setTextSize(2);
} // กาํ หนดรอบการอา นคาจาก MCP9701 รวม 20 ครงั้
void loop() // อานคาจากอินพุต A3
{ // หาคา เฉลยี่ จากการอา นคา 20 ครงั้
glcd(1,2,"Digital");
glcd(2,2,"THERMO");
glcd(3,3,"METER");
val=0;
for (i=0;i<20;i++)
{

val = val+analog(3);
}
val = val/20;

Temp = (float(val)*0.25) - 20.51 ; // แปลงคา เปน อณุ หภมู ิในหนว ยองศาเซลเซยี ส
setTextSize(3); // เปลยี่ นขนาดตวั อกั ษรเปน 3 เทา
setTextColor(GLCD_YELLOW); // เปลยี นสีตัวอักษรเปน สเี หลอื ง
glcd(3,1,"%f",Temp); // แสดงคา อณุ หภมู ิดว ยความละเอยี ดทศนยิ ม 3 ตําแหนง
setTextColor(GLCD_WHITE); // เปลยี นสีตัวอักษรเปน สขี าว
setTextSize(2); // เปล่ยี นขนาดตวั อักษรเปน 2 เทา
glcd(6,2,"Celsius"); // แสดงหนวยองศาเซลเซยี ส
delay(500); // หนวงเวลากอ นเรม่ิ ตนการอานคาในรอบใหม

}

คาํ อธบิ ายโปรแกรม

ในโปรแกรมน้ีหัวใจสําคญั คอื การคํานวณเพ่ือเปล่ียนขอมูลดิจิตอลที่ไดจ ากการแปลงแรงดนั เอาตพ ุต
ของไอซี MCP9701 เปนคา อณุ หภูมใิ นหนว ยองศาเซลเซยี ส กระบวนการจะเรม่ิ จากการอา นและแปลงคา ของ
แรงดนั ไฟตรงทจี่ ดุ ตอ A3 ซงึ่ ไดม าจากการทาํ งานของไอซี MCP9701 มาเกบ็ ไวใ นตวั แปร val จากนนั้ นาํ ขอ มลู
ท่ีไดม าคาํ นวณดว ยสูตร Temp = (val x 0.25) - 20.51 จากนั้นนําคา อณุ หภมู ไิ ดม าแสดงผลดว ยความละเอียด
ทศนิยม 3 ตาํ แหนง

โปรแกรมที่ L7-1 : ไฟล microbox_Thermometer.ino โปรแกรมภาษา C/C++ สาํ หรบั พฒั นากลอ งสมองกล
IPST-MicroBOX(SE)เปน เครอ่ื งวดั อณุ หภมู ริ ะบบตวั เลขอยา งงา ย


Click to View FlipBook Version