Professional Documents
Culture Documents
Arduino เบื้องต้น
ครูประภาส สุวรรณเพชร
ก
คำนำ
ปั จจุ บ นั ไมโครคอนโทรลเลอร์ มี ก ารนามาใช้ง านกันแพร่ หลายมากขึ้ น โดยมี ก ารฝั ง ตัวของ
ไมโครคอนโทรลเลอร์ อยูใ่ นเครื่ องใช้ไฟฟ้าหลาย ๆ ประเภท เช่น เครื่ องซักผ้าแบบอัตโนมัติ เตาอบไฟฟ้า
เตาไมโครเวฟ เครื่ องปรั บ อากาศที่ ส ามารถก าหนดอุ ณหภู มิ ไ ด้และอื่ น ๆ อี ก มากมาย Arduino เป็ น
ไมโครคอนโทรลเลอร์ แพลทฟอร์ มหนึ่งที่ได้รับความนิยมมาก อันเนื่องจากเป็ นแพลทฟอร์ มแบบเปิ ดทั้ง
ฮาร์ ดแวร์ แ ละซอฟต์แ วร์ ก ารใช้ง านง่ า ยไม่ ซับ ซ้ อ นมี ต้น ทุ นในการสร้ างวงจรต่ า ซึ่ ง ในการใช้ง าน
ไมโครคอนโทรลเลอร์ จะต้องประกอบด้วยองค์ประกอบ 2 อย่างคือ ตัวเครื่ องหรื อที่เรี ยกว่า ฮาร์ ดแวร์
(Hardware) และโปรแกรมหรื อชุดคาสั่งที่เรี ยกว่า ซอฟต์แวร์ (Software) ที่ใช้สั่งให้ไมโครคอนโทรลเลอร์
ทาตามความต้องการของผูอ้ อกแบบ หนังสื อเล่มนี้ อธิ บายถึ งหลักการออกแบบฮาร์ ตแวร์ และการเขี ยน
ซอฟท์แวร์เพื่อใช้ควบคุม
ประภาส สุ วรรณเพชร
ผูเ้ รี ยบเรี ยง
ข
สำรบัญ
หน้า
คานา ก
สารบัญ ข
บทที่ 1 ควำมรู้ เบื้องต้ นเกีย่ วกับไมโครคอนโทรลเลอร์ 1
1.1 ระบบตัวเลขและรหัส 2
1.2 ดิจิทลั พื้นฐาน 9
1.3 โครงสร้างพื้นฐานของระบบคอมพิวเตอร์ 12
1.4 ไมโครคอนโทรลเลอร์ Arduino 14
บทที่ 2 กำรเขียนโปรแกรมภำษำซีสำหรับไมโครคอนโทรลเลอร์ 17
2.1 ขั้นตอนในการพัฒนาโปรแกรม 18
2.2 ภาษาซีสาหรับไมโครคอนโทรลเลอร์ 21
2.3 การสร้างฟังก์ชนั่ รองขึ้นใช้เอง 33
บทที่ 3 เครื่ องมือช่ วยพัฒนำงำนไมโครคอนโทรลเลอร์ 45
3.1 เครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ อง 46
3.2 การติดตั้งไดร์ เวอร์ USB 50
3.2 เครื่ องมือจาลองการทางาน 51
บทที่ 4 ใบงำนกำรทดลอง 55
ใบงานที่ 4.1 การทดสอบบอร์ ดเบื้องต้น 57
ใบงานที่ 4.2 การเขียนโปรแกรมสื่ อสารทางพอร์ตอนุกรม 63
ใบงานที่ 4.3 การเขียนโปรแกรมใช้งานพอร์ ตทาหน้าที่เอาท์พุทพอร์ ตเบื้องต้น 71
ใบงานที่ 4.4 การเขียนโปรแกรมรับค่าจากพอร์ ตดิจิทลั 79
ใบงานที่ 4.5 การเขียนโปรแกรมอ่านค่าจากพอร์ ตแอนาลอกและการใช้ PWM 89
ใบงานที่ 4.6 การเขียนโปรแกรมรับสวิตช์ทางพอร์ ตแอนาลอก 99
ใบงานที่ 4.7 การเขียนโปรแกรมวัดอุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC 109
ใบงานที่ 4.8 การเขียนโปรแกรมวัดอุณหภูมิและความชื้นด้วยโมดูล DHT22 119
ใบงานที่ 4.9 การเขียนโปรแกรมใช้งานไอซีวดั อุณหภูมิ DS18B20 127
ใบงานที่ 4.10 การเขียนโปรแกรมวัดระยะด้วยโมดูลอัลตร้าโซนิค 139
ใบงานที่ 4.11 การเขียนโปรแกรมควมคุมดีซีมอเตอร์ 151
ใบงานที่ 4.12 การเขียนโปรแกรมควมคุมสเต็ปเปอร์มอเตอร์ 163
ค
สำรบัญ (ต่ อ)
หน้า
ใบงานที่ 4.13 การเขียนโปรแกรมควมคุมเซอร์ โวมอเตอร์ 173
ใบงานที่ 4.14 การเขียนโปรแกรมใช้งานอินเตอร์ รัพท์ 181
ใบงานที่ 4.15 การเขียนโปรแกรมใช้งานหน่วยความจา EEPROM 193
ใบงานที่ 4.16 การเขียนโปรแกรมใช้งานคียแ์ พด 203
ใบงานที่ 4.17 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ 4 บิต 213
ใบงานที่ 4.18 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ I2C 221
ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219 231
ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลด้วยจอ OLED 128×64 245
ใบงานที่ 4.21 การเขียนโปรแกรมแสดงผลรู ปภาพด้วยจอ OLED 128×64 263
ใบงานที่ 4.22 การประยุกต์การแสดงผลที่ LCD 4 bit กับเซนเซอร์ ต่าง ๆ 275
ใบงานที่ 4.23 การประยุกต์การแสดงผลที่ LCD I2C กับเซนเซอร์ ต่าง ๆ 289
ใบงานที่ 4.24 การประยุกต์การแสดงผลด้วยโมดูล MAX7219 กับเซนเซอร์ ต่าง ๆ 303
ใบงานที่ 4.25 การประยุกต์การแสดงผลที่ OLED กับเซนเซอร์ ต่าง ๆ 317
บรรณานุกรม 329
ภาคผนวก 330
บทที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 1
บทที่ 1
ความรู้ เบื้องต้ นเกีย่ วกับไมโครคอนโทรลเลอร์
หัวข้อเรื่ อง
1.1 ระบบตัวเลขและรหัส
1.2 ดิจิทลั พื้นฐาน
1.3 โครงสร้างพื้นฐานของระบบคอมพิวเตอร์
1.4 ไมโครคอนโทรลเลอร์ Arduino
สาระสาคัญ
ความรู ้ เบื้ องต้นเกี่ ย วกับ ไมโครคอนโทรลเลอร์ ใ นบทนี้ กล่ า วถึ ง ระบบตัวเลขที่ เกี่ ยวข้องกับ
ไมโครคอนโทรลเลอร์ มีหวั ข้อความรู ้ดา้ นดิจิทลั พื้นฐานที่มีใช้งานในไมโครคอนโทรลเลอร์ และความรู ้
ทัว่ ไปของไมโครคอนโทรลเลอร์ Arduino
สมรรถนะประจาหน่วยการเรี ยนรู ้
แสดงความรู ้เกี่ยวกับไมโครคอนโทรลเลอร์ Arduino
จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีความรู ้เกี่ยวกับระบบตัวเลขและดิจิทลั พื้นฐาน
2. เพื่อให้มีความรู ้เกี่ยวกับโครงสร้างพื้นฐานของระบบคอมพิวเตอร์
3. เพื่อให้มีความรู ้เกี่ยวกับไมโครคอนโทรลเลอร์ Arduino
จุดประสงค์ เชิ งพฤติกรรม
1. บอกวิธีการแปลงเลขฐานในระบบตัวเลขและดิจิทลั พื้นฐานได้
2. บอกเกี่ยวกับโครงสร้างพื้นฐานของระบบคอมพิวเตอร์ ได้
3. บอกเกี่ยวกับไมโครคอนโทรลเลอร์ Arduino ได้
4. ทาแบบฝึ กหัดเสร็ จทันเวลาและทาแบบทดสอบผ่านเกณฑ์ที่กาหนด
2 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
1.1 ระบบตัวเลขและรหัส
แนวคิ ดเกี่ ยวกับจานวนและการนับมี มาแต่โบราณ มนุ ษย์สามารถนับจานวนสิ่ งต่าง ๆ โดยมี
ความคิดว่าเมื่อเพิ่มสิ่ งใดสิ่ งใดก็จะได้สิ่งนั้น “มากขึ้น” และถ้าเอาสิ่ งนั้นออกไปจะทาให้สิ่งนั้น “ลดลง”
ต่อเมื่อสังคมเจริ ญขึ้ นก็ใช้วิธีการจับคู่สิ่งนั้น เช่ น อาจใช้นิ้วมือแทนสิ่ งเหล่านั้น เช่ น หนึ่ งนิ้ วแทนสัตว์
หนึ่งตัวและอาจใช้กอ้ นหิ นบันทึกจานวนสิ่ งนั้น หรื ออาจใช้ขีดเขียนบนพื้นดิน หรื อสลักบนต้นไม้ ต่อมา
จึงใช้สัญลักษณ์แทนจานวนขึ้น และพบว่าการนับและการเขียนในสมัยโบราณนั้นจะไม่มี “ศูนย์”
มีหลักฐานยืนยันเมื่อปี ค.ศ. ที่ 9 ใช้เรี ยกเป็ นตัวเลขอาระบิกเป็ นชื่ อที่เรี ยกตัวเลขที่ประดิษฐ์ข้ ึน
ขึ้นในประเทศอินเดียยุคโบราณโดยนักคณิ ตศาสตร์ ชาวอินเดียนประมาณ 500 ปี ก่อนคริ สตศักราชจากนั้น
จึงไปถ่ายทอดไปยังประเทศในแถบยุโรปในยุคกลางทั้ง ๆ ที่เริ่ มต้นที่ประเทศอินเดี ย แต่เริ่ มรู ้ จกั ในฝั่ ง
ตะวันตกในชื่ อว่า ตัวเลขอาระบิก ทั้งนี้เนื่องจากในยุโรปได้ใช้ตาราของอาหรับ (Arabic texts) เช่น “ The
calculation with Hindu numerals” เป็ นต้น ทาให้ชาวยุโรปพากันเรี ยกตัวเลขนี้ ว่าตัวเลขอาระบิกและใน
ปั จจุบนั จึงเรี ย กตัวเลขนี้ ว่าตัวเลขฮิ นดู อาระบิ กด้วยตัวเลขอาระบิ กนี้ เรี ยกในภาษาอาระบิ กว่า "Hindu
numerals"," " أرقام هنديةต่ อ มาเรี ยกว่ า Hindu-Arabic numerals หรื อ Indian numerals อัน เป็ น
สัญลักษณ์ที่ใช้แทนจานวนกันทัว่ โลก
รศ. รัตนพร บ่อคา, ประวัตขิ องจานวนและตัวเลข, วารสารวิทยาศาสตร์ ฉบับที่ 1-2, หน้า 48.
2
4 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ระบบเลขฐาน 16
ระบบเลขฐาน 16 (HEX: Hexadecimal) เป็ นเลข ตารางที่ 1-1 ความสัมพันธ์ของเลขฐาน
ที่ถูกเรี ยกใช้ในระบบคอมพิวเตอร์ซ่ ึงใช้แทนตัวเลขที่เป็ น
เลขฐาน 10 เลขฐาน 2 เลขฐาน 16
เลขฐาน 2 เพื่อให้ง่ายต่อการใช้งานเนื่ องจากเลขฐาน 2 มี 0 0000 0
แค่ เลข 0 และ 1 เท่ า นั้น ดัง เช่ น 1000100101102 แต่ เมื่ อ 1
2
0001
0010
1
2
เขียนเป็ นเลขฐาน 16 จะได้เพียง 89616 ในระบบเลขฐาน 3 0011 3
4 0100 4
2 ที่มีเพียงเลข 2 ตัวคือ 0 กับ 1 ในระบบเลขฐาน 10 มีเลข 5 0101 5
10 ตัวคือ 0, 1, 2, … 9 และในระบบเลขฐาน 16 มีตวั เลข 6
7
0110
0111
6
7
16 ตัว โดย 10 เลขแรกใช้เลขเดียวกับเลขฐาน 10 คือ 0 ถึง 8 1000 8
9 1001 9
9 ส่ วนที่เหลื ออีก 6 ตัว จะใช้ตวั อักษรภาษาอังกฤษแทน 10 1010 A
11 1011 B
คือ A, B, C, D, E, Cและ F ดังตารางที่ 1-1 12 1100 C
13 1101 D
14 1110 E
15 1111 F
บทที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 7
การแปลงเลขฐานระหว่างเลขฐาน 2 กับเลขฐาน 16
ในการแปลงเลขฐาน 2 ให้เป็ นเลขฐาน 16 สามารถทาได้โดยการแบ่งกลุ่มตัวเลขของเลขฐาน 2
เริ่ มจากขวาไปซ้ายเป็ นกลุ่ม ๆ ละ 4 บิต และใช้จากตารางแสดงความสัมพันธ์ของเลขฐานในการแปลง
เลขฐานได้โดยตรงดังตัวอย่าง
2. แปลงโดยตรงโดยรวมจากน้ าหนักของแต่ละหลักดังตัวอย่าง
ตัวอย่าง การแปลงเลขฐาน 16 ให้เป็ นเลขฐาน 10 โดยรวมจากน้ าหนักในแต่ละหลัก
โจทย์ จงแปลงค่า 6B216 เป็ นเลขฐาน 10
วิธีทา
น้ าหนักฐาน 16 162 161 160
6 B(11) 2
6B216 = (6×16 )+(11×161)+(2×160)
2
= 1536+176+2
คาตอบ = 171410
ระดับลอจิก
ระดับลอจิกที่ใช้งานในวงจรจริ ง สถานะของลอจิกดิจิทลั 2 สถานะจะแทนค่าด้วยแรงดันไฟฟ้ า
คือ ลอจิก 0 แทนแรงดัน 0 โวลต์ และลอจิก 1 แทนแรงดัน 5 โวลต์ แต่ในเป็ นความจริ งอุปกรณ์ที่นามาใช้
งานจะสามารถรับรู ้ลอจิกได้กว้างพอสมควร โดยการรับรู ้ลอจิก 0 ก็ไม่จาเป็ นต้องมีค่าแรงดันเป็ น 0 โวลต์
โดยสามารถที่ จะรับรู ้ ค่าของแรงดันที่สูงกว่า 0 โวลต์ได้เล็กน้อย และในทานองเดี ยวกันลอจิก 1 ก็ไม่
จาเป็ นต้องเป็ น 5 โวลต์เช่นกัน ดังรู ปที่ 1-1
5
4
ระดับลอจิก 1
3
2
1
ระดับลอจิก 0
ลอจิกเกตของเลขฐาน 2
ระบบเลขฐาน 2 สามารถนาลอจิกผ่านวงจรต่าง ๆ เพื่อให้ได้ลอจิกที่เปลี่ยนไป โดยวงจรดังกล่าว
เรี ยกว่าวงจรลอจิกเกตโดยมีวงจรต่าง ๆ ดังนี้
1. แอนด์เกต (AND gate)
2. ออร์ เกต (OR gate)
3. เอ็กซ์คลูซีฟออร์ เกต (XOR gate)
4. แนนด์เกต (NAND gate)
5. นอร์ เกต (NOR gate)
6. น็อตเกต (NOT gate)
บทที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 11
หน่วยความจา
โดยส่ ว นต่ า ง ๆ ทั้ง หมดประกอบขึ้ น ด้ว ยอุ ป กรณ์ ว งจรอิ เ ล็ ก ทรอนิ ก ส์ ดัง นั้น ถ้า หากวงจร
อิเล็กทรอนิกส์ใด ๆ ก็ตามที่มีส่วนประกอบครบทั้ง 4 ส่ วนที่กล่าวมาข้างต้นก็จะเป็ นระบบคอมพิวเตอร์
ทันที ซึ่ งไม่จาเป็ นต้องมีลกั ษณะเหมือนกับคอมพิวเตอร์ ส่วนบุคคล (PC: Personal computer) ที่ใช้งานกัน
ทัว่ ไป
ส่ วนรับข้อมูลหรื ออินพุต
เป็ นส่ วนหรื อวงจรที่ใช้เชื่ อมต่อคอมพิวเตอร์ กบั อุ ปกรณ์ ภายนอกโดยทาหน้าที่แปลงสั ญญาณ
จากอุ ป กรณ์ ภายนอกให้มี ระดับลอจิ กที่ เหมาะสมกับวงจรภายใน เรี ย กทับ ศัพ ท์ว่า วงจรอิ นเตอร์ เฟช
(Interface circuit) เพื่อส่ งต่อให้หน่วยประมวลผลใช้เป็ นข้อมูลประกอบการประมวลผลตามชุดคาสั่งที่ได้
เขียนขึ้น เช่ นวงจรแป้ นพิมพ์เป็ นวงจรที่เปลี่ ยนพลังงานกลจากการกดแป้ นพิมพ์เป็ นพลังงานไฟฟ้ าใน
ระดับแรงดัน 5 โวลต์และ 0 โวลต์เพื่อเป็ นลอจิก 1 และลอจิก 0
ส่ วนส่ งข้อมูลหรื อเอาต์พุต
เป็ นส่ วนหรื อวงจรที่ใช้เชื่ อมต่อคอมพิวเตอร์ กบั อุปกรณ์ภายนอกโดยทาหน้าที่รับสัญญาณไฟฟ้ า
จากหน่วยประมวลผลที่เป็ นลอจิก 1 และลอจิก 0 ที่ระดับแรงดัน 5 โวลต์และ 0 โวลต์ ส่ งให้กบั อุปกรณ์
ภายนอกที่นาระดับแรงดันนี้ไปใช้งาน
ส่ วนประมวลผลกลาง
ส่ วนประมวลผลกลางเป็ นหัวใจของระบบคอมพิวเตอร์ โดยทาหน้าที่คิดประมวลผลซึ่ งมีส่วน
การประมวลผลทางคณิ ตศาสตร์ และลอจิก (Arithmetic and logic unit) หรื อที่ เรี ยกว่าทับศัพท์ว่า ALU
โดยการประมวลผลจะกระทาตามชุดคาสั่งที่เก็บไว้ในหน่วยความจา
ส่ วนเก็บข้อมูลหรื อคาสั่งที่เรี ยกว่าหน่วยความจา
เป็ นส่ วนที่ใช้เก็บข้อมูลหรื อใช้เก็บชุ ดคาสั่งที่เขียนขึ้นเพื่อให้ระบบคอมพิวเตอร์ ทางานอย่างใด
อย่างหนึ่งตามต้องการ โดยหน่วยความจาที่ใช้ในระบบคอมพิวเตอร์ มี 2 แบบด้วยกันคือ
1. หน่ วยความจาถาวร เป็ นหน่วยความจาที่มกั ใช้เก็บโปรแกรม ซึ่ งหน่วยความจาชนิดนี้จะต้องเป็ น
หน่ วยความจาที่ สามารถคงข้อมูลไว้ได้แม้กระทั้งไม่มีไฟเลี้ ยง เพื่อรั กษาคาสั่งหรื อโปรแกรมไว้เมื่อมี
ไฟเลี้ ยงจ่ายให้แก่ระบบ คอมพิวเตอร์ จะได้สามารถทางานได้ จากคุ ณสมบัติดงั กล่าว มีหน่ วยความจา
กลุ่มหนึ่ งที่รักษาข้อมูลไว้ได้แต่มีคุณสมบัติอื่นเพิ่มเติมขึ้นมาคือเป็ นหน่วยความจาที่สามารถอ่านได้เพียง
อย่างเดียวหรื อเรี ยกกันว่า ROM (Read only memory) ซึ่ งมีอยูห่ ลายชนิดได้แก่
a) ROM คุณสมบัติ โปรแกรมจากโรงงานและลบไม่ได้
b) PROM คุณสมบัติ โปรแกรมเองได้ครั้งเดียวและลบไม่ได้
c) EPROM คุณสมบัติ โปรแกรมเองได้หลายครั้งและลบได้ดว้ ยแสง UV
14 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
รู ปที่ 1-3 บอร์ด Arduino UNO รู ปที่ 1-4 บอร์ด Arduino Nano
บทที่ 2
การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์
หัวข้อเรื่ อง
2.1 ขั้นตอนในการพัฒนาโปรแกรม
2.2 ภาษาซีสาหรับไมโครคอนโทรลเลอร์
2.3 การสร้างฟังก์ชนั่ รองขึ้นใช้เอง
สาระสาคัญ
การเขียนโปรแกรมควบคุมการทางานไมโครคอนโทรลเลอร์ ดว้ ยภาษาซี เป็ นการเขียนโปรแกรม
ที่มีความยืดหยุน่ มากกว่าและสามารถพัฒนางานได้เร็ วกว่าการเขียนโปรแกรมด้วยภาษาแอสเซมบลี การ
เขียนโปรแกรมเพื่อควบคุมการทางานของ Arduino ยึดหลักวิธีการเขียนตามไวยากรณ์ภาษาซี ดังนั้นเมื่อ
สามารถเขียนโปรแกรมควบคุมการทางานไมโครคอนโทรลเลอร์ Arduino นี้ ได้ก็สามารถนาความรู ้ไป
เขียนโปรแกรมภาษาซี ไมโครคอนโทรลเลอร์ อื่น ๆ ได้
สมรรถนะประจาหน่วยการเรี ยนรู ้
แสดงความรู ้ เกี่ ยวกับการเขียนผังงาน (Flow chart) การตรวจสอบความถู กต้องของการเขี ย น
โปรแกรมจากผังงาน และสามารถเขียนโปรแกรมจากผังงาน
จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีความรู ้เกี่ยวกับขั้นตอนในการพัฒนาโปรแกรม
2. เพื่อให้มีความรู ้เกี่ยวกับภาษาซีสาหรับไมโครคอนโทรลเลอร์
3. เพื่อให้มีความรู ้เกี่ยวกับการสร้างฟังก์ชนั่ รองขึ้นใช้เอง
จุดประสงค์ เชิ งพฤติกรรม
1. บอกเกี่ยวกับขั้นตอนในการพัฒนาโปรแกรมได้
2. บอกเกี่ยวกับภาษาซีสาหรับไมโครคอนโทรลเลอร์ ได้
3. บอกวิธีการสร้างฟังก์ชนั่ รองขึ้นใช้เองได้
4. ทาแบบฝึ กหัดเสร็ จทันเวลาและทาแบบทดสอบผ่านเกณฑ์ที่กาหนด
18 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์
การใช้งานไมโครคอนโทรลเลอร์ นอกจากจะต้องมีวงจรไมโครคอนโทรลเลอร์ และมีส่วนของ
วงจรเชื่ อมต่ อกับ อุ ป กรณ์ ภายนอกเพื่ อใช้ใ นการควบคุ ม งานต่ า ง ๆ ตามต้องการที่ เรี ย กว่า ฮาร์ ด แวร์
(Hardware) แล้วจาเป็ นต้องมีชุดคาสั่งหรื อโปรแกรมไว้สาหรับสั่งงานให้ไมโครคอนโทรลเลอร์ ทางาน
ตามที่ตอ้ งการซึ่ งเรี ยกว่าซอฟท์แวร์ (Software) ในบทนี้ เป็ นการเรี ยนรู ้หลักการเขียนโปรแกรมควบคุม
การทางานของไมโครคอนโทรลเลอร์
2.1 ขั้นตอนในการพัฒนาโปรแกรม
โปรแกรมคอมพิ ว เตอร์ ที่ น ามาใช้ ง านได้ น้ ั น ไม่ ส ามารถเริ่ มต้น จากการเขี ย นค าสั่ ง ด้ว ย
ภาษาคอมพิวเตอร์ ได้ทนั ที จะต้องมีการวิเคราะห์ วางแผน และปฏิบตั ิตามกระบวนการทางาน ซึ่ งแบ่ง
ออกเป็ น 5 ขั้นตอน คือ
1. วิเคราะห์ ปัญหา โดยจะเริ่ มจากการวิเคราะห์ผลลัพธ์ที่ตอ้ งการ (Output) แล้วย้อนกลับไปยัง
ข้อมูลที่นาเข้าสู่ ระบบ (Input) ตลอดจนข้อมูลอื่น ๆ ที่เกี่ ยวข้องในการที่จะนาไปใช้ในการ
ประมวลผล
2. ออกแบบวิธีการแก้ ปัญหา เมื่อทราบผลลัพธ์ที่ตอ้ งการและข้อมูลที่นาเข้าสู่ ระบบแล้ว ต้อง
กาหนดการวางแผนในการแก้ปัญหา โดยใช้วิธีเขียนลาดับขั้นตอนการแก้ปัญหาที่เรี ยกว่า
อัลกอริ ทึม (Algorithm ) และใช้เครื่ องมือสาหรับช่วยในการเขียนอัลกอริ ทึมเช่ น การเขียน
รหัสจาลอง (Pseudo code) การเขียนผังงาน (Flowchart) เป็ นต้น
3. เขียนโปรแกรม เลื อกภาษาคอมพิวเตอร์ ที่เหมาะสม โดยพิจารณาจากความสามารถของ
ผูเ้ ขียนโปรแกรมและประสิ ทธิ ภาพของภาษาคอมพิวเตอร์ น้ นั ๆ ให้เหมาะสมกับระบบงานที่
ต้องการแล้วเขียนชุดคาสั่งเป็ นภาษาคอมพิวเตอร์ ตามอัลกอริ ทึมที่ได้ออกแบบไว้
4. ทดสอบและแก้ ไขโปแกรม ภายหลังจากเขี ยนโปรแกรมเสร็ จสิ้ น จะต้องทาการทดสอบ
โปรแกรมเพื่อหาข้อผิดพลาด (Error) ซึ่ งข้อผิดพลาดที่พบในขั้นตอนการทดสอบโปรแกรม
นั้นจะต้องนามาปรับปรุ งแก้ไขโปรแกรมเพื่อให้สามารถทางานได้ตามต้องการ
5. จัดทาเอกสารประกอบ เมื่อโปรแกรมผ่านการทดสอบแล้วก็จะต้องจัดทาเอกสารประกอบ
ซึ่ งมีรายละเอียดของวิธีการใช้งานโปรแกรม วิธีการติดตั้งโปรแกรม ตลอดจนขั้นตอนใน
การพัฒนาโปรแกรม รวมถึงอัลกอริ ทึมและโปรแกรมต้นฉบับ (Source code) เพื่อประโยชน์
ในกรณี ที่ตอ้ งการแก้ไขหรื อปรับปรุ งโปรแกรมภายหลัง1
ผัง งาน (Flowchart) คื อ รู ป ภาพ (Image) หรื อ สั ญ ลัก ษณ์ ( Symbol) ที่ ใ ช้เ ขี ย นแทนขั้น ตอน
คาอธิ บาย ข้อความ หรื อคาพูดที่ใช้ในอัลกอริ ทึม (Algorithm) เพราะการนาเสนอขั้นตอนของงานให้
เข้าใจตรงกัน ระหว่างผูเ้ กี่ยวข้อง ด้วยคาพูด หรื อข้อความทาได้ยากกว่า3
ผังงานในการเขียนโปรแกรมเป็ นรู ปทรงเลขาคณิ ต ที่บรรจุรายละเอียดกระบวนการประมวลผล
โดยมีรูปทรงในการใช้งานหลัก ๆ (เฉพาะงานไมโครคอนโทรลเลอร์ ) ดังนี้
กระบวนการประมวลผล
การตัดสิ นใจ
ชุ ด กระบวนการที่ เตรี ย ม
ไว้แล้ว (โปรแกรมย่อย)
http://www.com5dow.com
2
http://158.108.203.7/student/simple/?t46.html
3
20 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
จุดเชื่อมในหน้าอื่น
ใส่ น้ ามันพืช
ด้าน 1 สุ กหรื อไม่
ไม่ใช่
ตอกไข่ใส่ ถว้ ยใส่ หมูสับ ใช่
กลับด้าน
ตีไข่
ด้าน 2 สุ กหรื อไม่
ไม่ใช่ ไม่ใช่
เข้ากันหรื อไม่ ใช่
ใช่ ตักใส่ จาน
กระทะร้อนหรื อไม่
ไม่ใช่ เสร็ จ
ใช่
B
บทที่ 2 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 21
ตัวอย่างการเขียนโปรแกรมไมโครคอนโทรลเลอร์
ตัวอย่างจงเขียนโปรแกรมไฟกระพริ บ LED ที่ต่ออยูท่ ี่ขา D13
ขั้นที่ 1 เขียนลาดับขั้น (Algorithm) ขั้นที่ 2 แปลงลาดับขั้นเป็ นผังงาน (Flowchart)
1. กาหนดชื่อ LED กับขาที่เชื่อมต่อ START
2. กาหนดโหมดของขาใช้งาน
กาหนดช่อ LED
3. เขียนลอจิก 1 ไปที่ขาเชื่อม LED
4. หน่วงเวลา เขียนลอจิก 1 ไปที่ขา
5. เขียนลอจิก 2 ไปที่ขาเชื่อม LED
หนวงเวลา
6. หน่วงเวลา
7. กระโดดกลับไปทาในขั้นตอนที่ 3 เขียนลอจิก 0 ไปที่ขา
หนวงเวลา
2.2 ภาษาซีสาหรับไมโครคอนโทรลเลอร์
ไมโครคอนโทรลเลอร์ ไม่วา่ จะเป็ นตระกูลใดก็ตามจะทางานได้ก็ต่อเมื่อมีชุดคาสั่งที่สั่งให้ทางาน
ตามที่ตอ้ งการที่เรี ยกว่าโปรแกรม โดยคาสั่งหรื อโปรแกรมที่ไมโครคอนโทรลเลอร์ เข้าใจและสามารถ
ทางานได้อยูใ่ นรู ปของรหัสลอจิก 0 และ 1 หากนาลอจิกมาจับกลุ่มก็เป็ นเลขฐาน 16 ที่เรี ยกว่าภาษาเครื่ อง
ซึ่ งภาษาเครื่ องเป็ นภาษาที่มนุษย์ไม่สามารถเข้าใจได้เนื่ องจากเป็ นเลขฐาน 16 ทั้งหมด ดังนั้นในการเขียน
โปรแกรมจึงจาเป็ นต้องใช้ภาษาที่มนุ ษย์สามารถเข้าใจได้ โดยภาษาที่มนุ ษย์เข้าใจได้และใกล้ เคี ยงกับ
ภาษาเครื่ องมากที่สุดคือภาษาแอสเซมบลี แต่เนื่ องจากการพัฒนางานโดยใช้ภาษาแอสเซมบลีเป็ นไปได้
ยากและซับซ้อน เพื่อให้ง่ายและรวดเร็ วต่อการพัฒนาโปรแกรมใช้งานไมโครคอนโทรลเลอร์ ภาษาที่
เหมาะสมคือภาษาซี
22 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
โครงสร้างของภาษาซี
ภาษาซี เป็ นภาษาที่ได้รับความนิ ยมสู งเป็ นภาษาโครงสร้างง่ายต่อการทาความเข้าใจง่ายต่อการ
นาไปพัฒนาต่อ สามารถเขียนโปรแกรมแยกเป็ นส่ วน ๆ โดยแต่ละส่ วนสามารถเรี ยกใช้งานได้จากส่ วน
อื่นของโปรแกรมทาให้สามารถแบ่งงานให้หลายคนไปพัฒนาได้ การเขียนโปรแกรมเป็ นส่ วน ๆ เรี ยกว่า
ฟั ง ก์ชั่น โครงสร้ า งของภาษาซี มี ส่ วนประกอบ 2 ส่ วนคื อ ส่ วนหัวโปรแกรมและส่ วนตัวโปรแกรม
ส่ วนตัวโปรแกรมจะมีฟังก์ชนั่ หลักชื่อว่า main( ) เพื่อเป็ นส่ วนหลักในการทางาน และอาจมีฟังก์ชนั่ อื่นที่
ผูใ้ ช้เขียนขึ้นเพื่อใช้งานเรี ยกว่าฟังก์ชนั่ รอง
หัวโปรแกรม
ตัวโปรแกรม
ฟังก์ชนั่ หลัก main( )
ฟังก์ชนั่ รองที่เขียนเพิม่ ขึ้น
รู ปที่ 2-1 โครงสร้างภาษาซี
โครงสร้างของภาษาซีสาหรับ Arduino
โครงสร้างภาษาซีสาหรับ Arduino ถูกจัดใหม่ให้ง่ายต่อผูใ้ ช้งานเบื้องต้นซึ่ งผูอ้ อกแบบได้จดั วาง
ให้ผใู ้ ช้งานได้ใช้งานง่ายซึ่ งโครงสร้างหลัก ๆ จะมีเพียง 2 ส่ วนเท่านั้นคือ
1. setup เป็ นส่ วนที่เก็บฟังก์ชนั่ ที่ทางานครั้งเดียว
2. loop เป็ นส่ วนที่เก็บฟังก์ชนั่ ที่เมื่อทางานครบแล้วจะวนกลับมาทาซ้ าใหม่ต้ งั แต่ตน้
แต่ถา้ ต้องการเขียนโปรแกรมขั้นสู งสามารถเขียนในส่ วนหัวโปรแกรมและส่ วนของฟังก์ชนั่ รอง
ที่เขียนขึ้นใช้งานเองเพื่อให้ใช้งานสะดวกมากยิง่ ขึ้นได้เช่นเดียวกับภาษาซี มาตรฐาน
หัวโปรแกรม
ตัวโปรแกรม
ตัวโปรแกรม ฟังก์ชนั่ ที่ทางานครั้งเดียว setup( )
ฟังก์ชนั่ ที่ทางานครั้งเดียว setup( )
ฟังก์ชนั่ ที่เวียนกลับทางานวนซ้ า loop( )
ฟังก์ชนั่ ที่เวียนกลับทางานวนซ้ า loop( ) ฟังก์ชนั่ รองที่เขียนขึ้นเอง
(พื้นฐาน) (ขั้นสู ง)
รู ปที่ 2-2 โครงสร้างภาษาซี สาหรับ Arduino
บทที่ 2 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 23
ตัวแปรในภาษาซี
การประกาศตัวแปรคือการจองพื้นที่ในหน่วยความจาเพื่อนาไปใช้งานในฟั งก์ชนั่ โดยการใช้ชื่อ
ตัวแปรแทนการกาหนดเป็ นค่าแอดเดรสของหน่วยความจา รู ปแบบของการประกาศตัวแปรเป็ นดังนี้
ชนิดของตัวแปร ชื่อตัวแปร;
หลักการตั้งชื่อตัวแปรในภาษาซี
หลักการตั้งชื่อตัวแปรมีขอ้ กาหนดหลัก ๆ อยู่ 4 ประการด้วยกันคือ
1. ชื่อที่ต้ งั ต้องไม่ซ้ ากับคาสงวนของภาษาซี (คาที่ภาษาซี มีใช้งานอยูแ่ ล้ว)
2. การใช้ตวั อักษรใหญ่กบั ตัวอักษรเล็กถือว่าเป็ นคนละตัว
3. ตัวแรกของชื่อตัวแปรต้องเป็ นตัวอักษรเท่านั้นตัวถัดไปเป็ นตัวเลขได้
4. ชื่อตัวแปรห้ามเว้นวรรค
ชนิดของตัวแปรในภาษาซีสาหรับไมโครคอนโทรลเลอร์ Arduino
ตารางที่ 2-2 ชนิดของตัวแปรในภาษาซีสาหรับไมโครคอนโทรลเลอร์ Arduino
ขนาด
ชนิด ขอบเขต
บิต ไบต์
boolean 8 1 true, false
char 8 1 -128 ถึง +127
unsigned char 8 1 0 ถึง 255
byte 8 1 0 ถึง 255
int 16 2 -32768 ถึง +32767
unsigned int 16 2 0 ถึง 65535
long 32 4 -2147483648 ถึง +2147483647
unsigned long 32 4 0 ถึง 4294967295
float 32 4 ±3.4E±38 (~7 digits)
double 64 8 ±1.7E±308 (~15 digits)
บทที่ 2 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 25
พอยน์เตอร์
พอยน์เตอร์ เป็ นตัวชี้ ตาแหน่งข้อมูลของตัวแปรอื่นที่เก็บในหน่วยความจา โดยตัวพอยน์เตอร์ เป็ น
ตัว เก็ บ ต าแหน่ ง แทนการเก็ บ ข้อ มู ล ในการใช้ง านพอยน์ เ ตอร์ จ ะใช้เ ครื่ อ งหมาย * น าหน้า และใช้
เครื่ องหมาย & เมื่อต้องการค่าตาแหน่งของตัวแปรอื่นโดยมีรูปแบบดังนี้
รู ปแบบ
ชนิดของตัวแปร * ชื่อตัวแปร;
ตัวอยาง
int *n;
int i;
i=10;
n=&i;
อาร์เรย์
อาร์ เรย์เป็ นการเพิ่มความสามารถในการเก็บข้อมูลของตัวแปรให้สามารถเก็บเป็ นชุ ดได้ โดยใช้
ชื่ อตัวแปรเดิมได้ การใช้งานตัวแปรอาร์ เรย์จะใช้เครื่ องหมาย [ ] ต่อท้ายตัวแปรโดยภายในวงเล็บ เป็ น
ตัวเลข ซึ่ งสามารถใช้งานได้หลายมิติ มีรูปแบบดังนี้
รู ปแบบ
ชนิดของตัวแปร ชื่อตัวแปร[ตัวเลข]; // เป็ นอาร์เรย์ 1 มิติ
ชนิดของตัวแปร ชื่อตัวแปร[ตัวเลข,ตัวเลข]; // เป็ นอาร์เรย์ 2 มิติ
ชนิดของตัวแปร ชื่อตัวแปร[ตัวเลข,ตัวเลข,ตัวเลข]; // เป็ นอาร์เรย์ 3 มิติ
ตัวดาเนินการในภาษาซี
ตัวดาเนินการในภาษาซี แบ่งตามลักษณะการกระทาได้ 5 กลุ่มด้วยกันคือ
1. ตัวกระทาทางคณิ ตศาสตร์
2. ตัวกระทาทางลอจิกระดับบิต
3. ตัวกระทาบูลีน
4. ตัวกระทาเปรี ยบเทียบ
5. ตัวกระทาประสม
โดยในแต่ละลักษณะมีรายละเอียดดังต่อไปนี้
ไวยากรณ์ ภาษาซี
1. ประกาศช่ อแทน เป็ นการประกาศใช้ชื่ออื่ นแทนค่าที่ ต้องการเพื่ อให้สะดวกต่อการเขี ย น
โปรแกรม รู ปแบบเป็ นดังนี้
#define constantName value
constantName: ชื่อที่ตอ้ งการกาหนดตั้ง
value: ค่าที่ตอ้ งการกาหนดให้ชื่อนั้นมีค่าเท่ากับ
ตัวอยาง
#define LED 13
หมายถึง กาหนดให้คาว่า LED มีค่าเท่ากับ 13
28 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
#include "file"
file: ชื่อไฟล์ที่ตอ้ งการนาเข้ามารวมกับโค้ดโปรแกรมที่กาลังเขียนขึ้น
ตัวอยาง
#include <SPI.h>
หมายถึง ให้โปรแกรมคอมไพลเลอร์ทาการรวมไฟล์ที่ชื่อ SPI.h ก่อนทาการคอมไพล์
4. การใสเคร่ องหมายท้ ายฟั งก์ ชั่น ภาษาซี เป็ นภาษาที่มีการใส่ เครื่ องหมายท้ายฟั งก์ชนั่ ซึ่ ง
เป็ นสิ่ งที่แตกต่างและโดดเด่นกว่าโปรแกรมในภาษาอื่น ๆ โดยมีหลักคิดดังนี้
; สาหรับฟังก์ชั่นทีท่ างานเสร็จสิ้นในตัว
ฟังก์ชั่นการดาเนินการแบบทางเลอก
ในการเขียนโปรแกรมเพื่อให้ไมโครคอนโทรลเลอร์ ทางานในสิ่ งที่ตอ้ งการ นอกจากฟังก์ชนั่ ที่สงั่
ให้ทางานเป็ นลาดับแล้ว จาเป็ นต้องใช้ฟังก์ชนั่ ที่มีการทางานแบบให้เลือกเส้นทางการทางาน โดยการทา
ตามเงื่อนไข หรื อการให้ทาซ้ าแบบมีเงื่ อนไขหรื อไม่มีเงื่ อนไข โดยฟั งก์ชนั่ ที่มีการทางานแบบทางเลือก
ในภาษาซี มีดว้ ยกัน 4 ฟังก์ชนั่ คือ
บทที่ 2 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 29
1. ฟังก์ชนั่ if
2. ฟังก์ชนั่ if-else
3. ฟังก์ชนั่ if-else if-else
4. ฟังก์ชนั่ switch
ฟังก์ชนั่ if (ทางเลือกเดียว)
ฟังก์ชนั่ if เป็ นฟังก์ชนั่ ที่มีการตรวจสอบเงื่อนไข โดยถ้าเงื่อนไขเป็ นจริ งจะทางานตามชุดฟังก์ชนั่
ที่กาหนดไว้ รู ปแบบเป็ นดังนี้
if (เง่อนไขทีต่ รวจสอบ)
ผังงาน โค้ ดโปรแกรม
if (conditional)
{
// put your code here
ไม่ใช่
เง่ อนไข }
// if conditional true
ใช่ Example:
ชุ ดฟังก์ชั่นเม่อเง่ อนไข if (value<50)
{
เป็ นจริ ง digitalWrite(13,HIGH);
}
*หากชุดฟังก์ชนั่ ที่ให้ทางานเมื่อเงื่อนไขเป็ นจริ งมีเพียงฟังก์ชนั่ เดียว ไม่ตอ้ งใส่ วงเล็บปี กกา {…} ก็ได้
ฟังก์ชนั่ if-else (สองทางเลือก)
การตรวจสอบเงื่อนไขที่มีชุดฟั งก์ชนั่ ให้ทางานเมื่อเงื่ อนไขเป็ นจริ งและมีชุดฟั งก์ชนั่ ให้ทางาน
เมื่อเงื่อนไขเป็ นเท็จ เราจะใช้ฟังก์ชนั่ if-else มาใช้งาน มีรูปแบบดังนี้
if (เง่อนไขทีต่ รวจสอบ) else
ผังงาน โค้ ดโปรแกรม
if (conditional)
{
// put main code here
ใช่ ไม่ใช่
เง่ อนไข }
// if conditional true
else
{
ชุ ดฟังก์ชั่นเม่อ ชุ ดฟังก์ชั่นเม่อ //put main code here
//if conditional false
เง่ อนไขเป็ นจริง เง่ อนไขเป็ นเท็จ }
30 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ชุ ดฟังก์ชั่นที่ตัวแปร
ตรวจสอบไมตรงกับ คาใด
บทที่ 2 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 31
ฟังก์ชั่นการดาเนินการแบบวนซ้า
การเขี ย นโปรแกรมสั่ ง งานไมโครคอนโทรลเลอร์ ต้องมี ก ารท างานแบบวนซ้ า หรื อวนรอบ
เพื่อที่ จะทางานในชุ ดคาสั่งเดิ ม ลักษณะการทางานมี ท้ งั แบบมี เงื่ อนไขหรื อไม่มีเงื่ อนไข ในภาษาซี มี
ฟังก์ชนั่ สั่งงานให้ไมโครคอนโทรลเลอร์ ทางานซ้ ามีดงั นี้
1. ฟังก์ชนั่ for
2. ฟังก์ชนั่ while
3. ฟังก์ชนั่ while(1)
4. ฟังก์ชนั่ do-while
ฟังก์ชนั่ for
ฟังก์ชนั่ for เป็ นฟังก์ชนั่ ที่ใช้ในกรณี ที่ทราบจานวนรอบที่จะทางานซ้ า โดยมีรูปแบบดังนี้
รู ปแบบ ผังงาน
for(ค่าเริ่ มต้น;เงื่อนไข;เพิ่มหรื อลดค่า )
{ คาตัวแปรนับ รอบเริ่มต้น
//ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า
เท็จ
} เง่ อนไข
จริ ง
ชุ ดฟังก์ชั่นที่ต้องการ
ทางานวนซ้ า
เพิ่ม/ลดตัวแปรนับ รอบ
ตัวอยาง
โค้ ดโปรแกรม คาอธิบาย
for(int i=0;i<10;i++)
{ ประกาศและกาหนดตัวแปรนับรอบเป็ นตัวแปร i เป็ นตัว
digitalWrite(13,HIGH);
delay(500); แปรชนิด integer โดยให้มีค่าเริ่ มต้นเท่ากับศูนย์ ทาวนซ้ า
digitalWrite(13,LOW);
delay(500); ไปเรื่ อย ๆ หากค่าตัวแปรยังน้อยกว่า 10 โดยในรอบถัดไป
}
ให้เพิ่มค่าในตัวแปรนับรอบขึ้น 1 ค่า
32 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ฟังก์ชนั่ while
ฟังก์ชนั่ while เป็ นฟังก์ชนั่ ที่ให้ทางานวนซ้ าหรื อวนรอบโดยมีการตรวจสอบเงื่อนไขก่อนถ้าหาก
เงื่อนไขเป็ นจริ งจะทางานตามชุ ดฟังก์ชนั่ ที่เตรี ยมไว้ เมื่อทางานในชุดฟั งก์ชนั่ ที่เตรี ยมไว้เสร็ จจะมีการวน
กลับไปตรวจสอบเงื่ อนไขอีก หากเงื่ อนไขเป็ นจริ งจะทางานในชุ ดฟั งก์ชนั่ ที่เตรี ยมไว้โดยทาแบบนี้ ไป
เรื่ อย ๆ จนกว่าเงื่อนไขจะเป็ นเท็จจะออกจากวงรอบการทาซ้ า โดยมีรูปแบบดังนี้
รู ปแบบ ผังงาน
while(เงื่อนไข )
{ เท็จ
เง่ อนไข
//ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า จริ ง
} ชุ ดฟังก์ชั่นที่ต้องการ
ทางานวนซ้ า
ตัวอยาง
โค้ ดโปรแกรม คาอธิบาย
i=0;
while(i<10) ตรวจสอบก่ อนว่า เงื่ อนไขเป็ นจริ ง อยู่หรื อไม่ ( i ยังน้อย
{
digitalWrite(13,HIGH); กว่า 10 ) หากเงื่ อนไขเป็ นจริ งให้ทางานที่เตรี ยมไว้ เมื่อ
delay(500);
digitalWrite(13,LOW); ท างานครบให้ก ลับ มาตรวจสอบเงื่ อ นไขใหม่ ว นซ้ า ไป
delay(500);
i++; เรื่ อย ๆ จนกว่าเงื่อนไขจะเป็ นเท็จ
}
ฟังก์ชนั่ while(1)
ฟังก์ชนั่ while เป็ นฟังก์ชนั่ ที่ให้ทางานวนซ้ าหรื อวนรอบไม่รู้จบ เนื่องจาก 1 คือเป็ นจริ งตลอดไป
ในโปรแกรม Arduino ก็คือฟั งก์ชนั่ loop( ) นัน่ เอง
รู ปแบบ ผังงาน
while(1)
{
//ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า ชุ ดฟังก์ชั่นที่ต้องการ
ทางานวนซ้ า
}
บทที่ 2 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 33
ฟังก์ชนั่ do-while
ฟั งก์ชนั่ do-while เป็ นฟั งก์ชนั่ ที่ให้ทางานวนซ้ าหรื อวนรอบ โดยมีการตรวจสอบเงื่ อนไขการ
ทางานคล้ายกับฟั งก์ชั่น while ต่างตรงที่ฟังก์ชั่น do-while จะทางานในชุ ดฟั งก์ชนั่ ที่เตรี ยมไว้ทาซ้ าไป
ก่อน 1 รอบแล้วจึงตรวจสอบเงื่อนไข
รู ปแบบ ผังงาน
do
{ ชุ ดฟังก์ชั่นที่ต้องการ
//ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า ทางานวนซ้ า
} while(เงื่อนไข ) เท็จ
เง่ อนไข
จริ ง
ตัวอยาง
โค้ ดโปรแกรม คาอธิบาย
i=0;
do ทางานในฟั งก์ชนั่ ที่เตรี ยมไว้ แล้วตรวจสอบเงื่อนไขว่าตัว
{
digitalWrite(13,HIGH); แปร i ยัง มี ค่ า น้อยกว่า 10 หรื อไม่ หากยังน้อยกว่าให้วน
delay(500);
digitalWrite(13,LOW); กลับไปทาใหม่ซ้ า ๆ จนกว่าเงื่อนไขจะเป็ นเท็จ
delay(500);
i++;
} while(i<10)
2. วางหลังฟั งก์ ชั่นที่เรี ยกใช้ งาน ตาแหน่ งการวางลักษณะนี้ จะต้องประกาศรู ปแบบของฟั งก์ชนั่
(Prototype) ซึ่ งจะต้องมีเครื่ องหมาย ; ปิ ดท้ายด้วย โดยประกาศไว้ในท้ายของส่ วนหัวโปรแกรม
การวางลักษณะนี้มีขอ้ ดีตรงที่ฟังก์ชนั่ หลัก (setup, loop) ยังอยูต่ อนบนของโปรแกรมตลอดไม่วา่
จะมีฟังก์ชนั่ รองกี่ฟังก์ชนั่ ก็ตามทาให้การตรวจสอบแก้ไขปรับปรุ งในครั้งหลังทาได้สะดวก
หัวโปรแกรม
หัวโปรแกรม ประกาศรู ปแบบฟังก์ชนั่ รอง
ตัวโปรแกรม ตัวโปรแกรม
ฟังก์ชนั่ รอง ฟังก์ชนั่ ที่ setup( )
ฟังก์ชนั่ ที่ setup( ) ฟังก์ชนั่ loop( )
ฟังก์ชนั่ loop( ) ฟังก์ชนั่ รอง
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 4, 5, 6 เป็ นการประกาศรู ปแบบของฟั งก์ชนั่ รองที่จะเขียนขึ้นใช้งาน (มี ; ปิ ดท้าย) และ
เป็ นฟังก์ชนั่ ที่ไม่รับค่าและไม่ส่งคืนค่า (มี void หน้าฟังก์ชนั่ และหลังฟังก์ชนั่ )
- บรรทัดที่ 14, 15, 16 เป็ นการเรี ยกใช้งานโดยการชื่ อฟั งก์ชนั่ ที่ตอ้ งการตามด้วย ( ) ที่ภายในว่าง
เปล่าเนื่องจากไม่มีการส่ งค่าเข้าในฟังก์ชนั่
- บรรทัดที่ 19-24 เป็ นฟังก์ชนั่ รองฟังก์ชนั่ แรกที่เขียนขึ้นใช้งานโดยภายในบรรจุฟังก์ชนั่ ที่ตอ้ งการ
ให้ทางานเมื่อมีการเรี ยกใช้
- บรรทัดที่ 25-30, บรรทัดที่ 25-30, บรรทัดที่ 31-36 เป็ นฟังก์ชนั่ รองถัด ๆ มาที่เขียนขึ้นใช้งาน
ฟังก์ชนั่ ที่รับค่าแต่ไม่ส่งคืนค่า
เป็ นฟั งก์ชนั่ ที่เขียนขึ้นเพื่อแบ่งย่อยการทางานของฟั งก์ชนั่ หลัก โดยมีการส่ งค่าจากฟั งก์ชนั่ หลัก
ในขั้นตอนการเรี ยกใช้ฟังก์ชนั่ รองเพื่อให้ฟังก์ชนั่ รองที่เขียนขึ้นนาไปประมวลผลอย่างใดอย่างหนึ่งตามที่
ผูส้ ร้างฟังก์ชนั่ ต้องการ ซึ่ งข้อกาหนดในการประกาศใช้ของฟังก์ชนั่ ประเภทนี้มีดงั นี้
1. ข้อกาหนดในการรับคา ทาโดยกาหนดชนิ ดตัวแปร พร้อมตัวแปรที่จะรับค่าท้ายชื่ อฟั งก์ชนั่
รองที่สร้างขึ้น เช่น (byte data)
2. ข้อกาหนดในการไมสงคนคา ทาโดยใส่ void หน้าชื่อฟังก์ชนั่
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 6 เป็ นการประกาศรู ป แบบของฟั งก์ชั่นรองที่ จะเขี ย นขึ้ นใช้งาน (มี ; ปิ ดท้าย) เป็ น
ฟั งก์ชนั่ ที่ไม่มีการส่ งคืนค่า (มี void อยูห่ น้าฟั งก์ชนั่ ) แต่เป็ นฟั งก์ชนั่ ที่รับค่าเพียงอย่างเดียว โดย
ในวงเล็บหลังฟั งก์ชนั่ จะเป็ นตัวแปรที่ใช้สาหรับรับค่าซึ่ งจะต้องประกาศชนิ ดของตัวแปรพร้อม
ชื่อตัวแปรสาหรับรับค่าไว้ในวงเล็บท้ายฟังก์ชนั่
- บรรทัด 17-20 เป็ นการเรี ยกใช้ฟังก์ชั่นรองโดยการเรี ยกชื่ อฟั งก์ชั่นรองพร้ อมส่ งค่า เข้าไปใน
ฟั งก์ชนั่ โดยค่าที่ส่งไปจะใส่ ในวงเล็บท้ายชื่ อฟั งก์ชนั่ รองที่เรี ยกใช้ ค่าที่ส่งไปจะเข้าไปเก็บไว้ใน
ตัวแปรที่ ฟังก์ชั่นรองประกาศไว้ เช่ น send2port(0B1000); เป็ นการเรี ยกใช้ฟังก์ชั่น send2port
โดยส่ งค่าตัวเลข 1000 ซึ่ งเป็ นเลขฐานสองเข้าไปในฟั งก์ชนั่ รองนั้นด้วย ค่าตัวเลขดังกล่าวจะถูก
เก็บไว้ในตัวแปร data ซึ่ งฟังก์ชนั่ รองได้เตรี ยมเอาไว้
- บรรทัดที่ 20-28 เป็ นฟั งก์ชนั่ รองที่เขียนขึ้น ภายในฟั งก์ชนั่ มีการนาค่าที่ถูกส่ งเข้ามาผ่านตัวแปร
data นามาใช้งาน
ฟังก์ชนั่ ที่ไม่รับค่าแต่ส่งคืนค่า
เป็ นฟั ง ก์ชั่นที่ เขี ย นขึ้ นเพื่ อแบ่ ง ย่อยการท างานของฟั ง ก์ชั่น หลัก เพี ย งแต่ ไ ม่ ไ ด้ส่ ง ข้อมู ล เข้า
โปรแกรมเพื่อช่วยให้ทาการประมวลผลแต่มีการส่ งข้อมูลกลับมายังฟั งก์ชนั่ หลัก เช่นฟั งก์ชนั่ ตรวจสอบ
การกดสวิตช์ซ่ ึ งฟั งก์ชนั่ นี้ ไม่จาเป็ นต้องรั บข้อมู ลใดมาประมวลผลมี เพียงตรวจสอบว่ามีการกดสวิตช์
หรื อไม่แล้วส่ งค่าการกดสวิตช์กลับไปยังฟั งก์ชนั่ หลักเพื่อนาไปใช้งานต่อไป โดยค่าที่ ส่งกลับผูเ้ ขียน
โปรแกรมจะเป็ นผูก้ าหนดขึ้นมาเอง เช่น เมื่อสวิตช์ 1 ถูกกดให้ส่งค่า 1 กลับและเมื่อสวิตช์ 2 ถูกกดให้ส่ง
ค่า 2 หากไม่มีการกดใด ๆ ให้ส่งกลับค่า 0 เป็ นต้น
การเขียนฟังก์ชนั่ รองลักษณะนี้มีขอ้ กาหนดในการประกาศใช้ของฟังก์ชนั่ ดังนี้
1. ข้อกาหนดในการไมรับคา ทาโดยใส่ (void) หลังชื่ อฟังก์ชนั่
2. ข้อกาหนดในการสงคนคา ทาโดยใส่ กาหนดชนิ ดของข้อมูลที่จะส่ งคืนหน้าชื่อฟังก์ชนั่ รอง
ที่สร้างขึ้น
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 4 เป็ นการประกาศรู ปแบบของฟังก์ชนั่ รอง byte readSW(void); ซึ่งเป็ นฟังก์ชนั่ ที่มีการ
ส่ งค่ากลับคืนฟังก์ชนั่ หลัก โดยค่าที่ส่งกลับมีขนาดเป็ นค่าของตัวแปร byte
- บรรทัดที่ 13 เป็ นการเป็ นการเรี ยกใช้ฟังก์ชนั่ รอง byte x=readSW(); เมื่อฟั งก์ชนั่ รองทางานเสร็ จ
สิ้ นจะส่ งค่าเข้ามายังตัวแปร x ซึ่ งเป็ นตัวแปรได้ประกาศชนิ ดที่มีขนาดที่เพียงพอที่สามารถรับ
ข้อมูลที่ส่งกลับมาจากฟังก์ชนั่ รองนี้ได้
- บรรทัด 19-27 เป็ นฟังก์ชนั่ รองที่เขียนขึ้นเพื่อใช้งานที่มีการส่ งค่าคืนไปยังฟังก์ชนั่ หลัก
- บรรทัดที่ 21 การประกาศตัวแปรที่มีชนิดเดียวกันกับค่าที่ฟังก์ชนั่ รองส่ งออก
- บรรทัดที่ 26 ฟั งก์ชนั่ return เป็ นฟั งก์ชนั่ ที่ใช้สาหรับส่ งค่าออกจากฟั งก์ชนั่ รอง โดยค่าที่ส่งออก
จะอยู่ในตัวแปรท้ายฟั งก์ชั่น return ซึ่ งมี ขนาดเดี ยวกันกับชนิ ดของค่าที่ ประกาศของฟั ง ก์ ชั่น
(หน้าชื่อฟังก์ชนั่ รอง)
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 2 เป็ นการประกาศรู ปแบบของฟั งก์ชนั่ รอง double Thermistor(int RawADC); ที่จะ
เขียนขึ้นใช้งาน (มี ; ปิ ดท้าย) เป็ นฟั งก์ชนั่ ที่มีการรับค่าและส่ งค่ากลับคืนฟั งก์ชนั่ หลัก โดยค่าที่
รับจะถูกเก็บไว้ในตัวแปรชื่อ RawADC ถูกกาหนดให้เป็ นชนิด integer และส่ งคืนค่ากลับมีขนาด
เป็ นค่าของตัวแปร double
- บรรทัดที่ 9 เป็ นการเรี ยกใช้ฟังก์ชนั่ รอง float Temp=Thermistor(analogRead(NTC)); โดยส่ งค่า
เข้าฟั งก์ชนั่ รองในวงเล็บ หลังชื่ อฟั งก์ชั่น และประกาศตัวแปรไว้รับค่ า (Temp) ที่ได้จากการ
ส่ งกลับจากฟั งก์ชนั่ รอง จากตัวอย่างจะเห็ นว่าใช้ตวั แปรที่ใช้รับค่ามีขนาดเล็กกว่าค่าที่ส่งกลับ
ดังนั้นจะมีขอ้ มูลหายไปบางส่ วน แต่ถา้ หากผูเ้ ขียนโปรแกรมยอมรับการสู ญหายของข้อมูลนั้น
ได้โดยผลการทางานของโปรแกรมยังเท่าเดิมก็สามารถทาได้
- บรรทัดที่ 14-21 เป็ นฟั งก์ชนั่ รองที่เขียนขึ้นมาเพื่อประมวลผลตามต้องการที่มีการรั บค่าเข้ามา
คานวณและส่ งค่ากลับคืนยังฟังก์ชนั่ หลัก
2.4 ขอบเขตของตัวแปร
ขอบเขตของตัวแปรหมายถึงบริ เวณหรื อตาแหน่งหรื อพิกดั ของตัวแปรที่ฟังก์ชนั่ สามารถเรี ยกใช้
งานได้ ทั้งนี้ข้ ึนอยูก่ บั ตัวแปรตัวนั้น ๆ ว่าประกาศไว้ที่จุดใด โดยขอบเขตของตัวแปรมีดว้ ยกัน 2 แบบ
1. ตัวแปรประเภทโกลบอล (global) เป็ นตัวแปรที่ประกาศนอกฟั งก์ชนั่ ซึ่ งจะประกาศไว้ใน
ส่ วนของหัวโปรแกรม ตัวแปรเหล่านี้ สามารถถูกนาไปใช้งานได้ทุกฟั งก์ชนั่ หรื ออาจกล่าว
ได้วา่ ทุกฟังก์ชนั่ สามารถมองเห็นตัวแปรประเภทนี้
40 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1,2 เป็ นการประกาศตัวแปร LED1, LED2 ซึ่ งประกาศอยูน่ อกฟังก์ชนั่ เป็ นการประกาศ
ตัวแปรในตาแหน่งโกลบอล นัน่ หมายความว่าทุกฟั งก์ชนั่ จะสามารถใช้ (มองเห็น) ตัวแปรนี้ ได้
สามารถนาไปใช้ง านได้ เช่ นในฟั ง ก์ชั่น setup ได้นาไปก าหนดโหมดการท างานในฟั งก์ชั่น
pinMode และในฟังก์ชนั่ loop ได้นาไปใช้ในฟังก์ชนั่ digitalWrite
- บรรทัดที่ 10 เป็ นการประกาศตัว แปร i ซึ่ ง จะนาไปใช้นับ รอบในค าสั่ ง forโดยตัวแปรนี้ จะ
มองเห็ นและใช้งานได้เฉพาะภายในฟั งก์ชนั่ loop เท่านั้น นอกฟั งก์ชนั่ (เช่ นฟั งก์ชนั่ setup ใน
ตัวอย่าง) ไม่สามารถใช้งานตัวแปรนี้ได้ หรื อกล่าวได้วา่ มองไม่เห็นตัวแปร i นี้
การประกาศตัวแปรแบบสตัคเจอร์ (Structure)
เป็ นการประกาศตัวแปรที่สามารถรวมกลุ่มของข้อมูลได้หลายชนิ ดไม่ว่าจะเป็ นตัวเลขจานวน
เต็ม ตัวเลขที่เป็ นทศนิ ยมหรื อเป็ นตัวอักษรก็ตาม โดยสามารถใช้งานได้ในเวลาเดียวกันเนื่ องจากตัวแปร
ย่อย ๆ ภายในสตัคเจอร์ ได้ถูกแยกพื้นที่หน่วยความจาสาหรับการเก็บข้อมูล วิธีการประกาศมีรูปแบบดังนี้
การประกาศ
struct ชื่อตัวแปรสตัคเจอร์
{
ชนิดตัวแปร ชื่อตัวแปรตัวที่ 1;
ชนิดตัวแปร ชื่อตัวแปรตัวที่ 2;
---
};
การใช้ งาน
ชื่อตัวแปรสตัคเจอร์ ชื่อตัวแปรใหม่ที่ตอ้ งการตั้งชื่อ={ค่าเริ่ มต้นของตัวแปรตัวที่ 1, 2, …};
ตัวอยางเชน
1 struct VALUE
2 {
3 byte a;
4 int b;
5 float c;
6 };
7 VALUE data={123,12345,123.45};
8 void setup()
9 {
10 Serial.begin(9600);
11 Serial.println(data.a);
12 Serial.println(data.b);
13 Serial.println(data.c);
14 }
15 void loop()
16 {
17 }
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1-6 เป็ นการประกาศตัวแปรแบบสตัคเจอร์ โดยตั้งชื่ อว่า VALUE มีตวั แปรภายใน 3 ตัว
ที่เก็บข้อมูลแตกต่างกัน
- บรรทัดที่ 7 เป็ นการกาหนดค่าเริ่ มต้นโดยสามารถเปลี่ ยนชื่ อเรี ยกใหม่ได้ ในที่น้ ี เปลี่ ยนชื่ อจาก
VALUE เป็ นชื่ อว่า data และสามารถกาหนดค่าเริ่ มต้นเข้าไปในทุกตัวแปรภายในได้ในขั้นตอน
นี้ จากตัวอย่างกาหนดตัวแปร data.a=123 ตัวแปร data.b=12345 และตัวแปร data.c=123.45
42 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ผลการรันเป็ นดังรู ป
การประกาศตัวแปรแบบยูเนียน (Union)
เป็ นการประกาศตัวแปรที่สามารถรวมกลุ่มของข้อมูลได้หลายชนิ ดเช่นเดียวกับแบบสตัคเจอร์
แต่มีความแตกต่างตรงที่แบบยูเนี ยนใช้หน่วยความจาเก็บข้อมูลในตาแหน่งเดียวกันในทุกตัวแปรดังนั้น
เวลาใช้งานจึงไม่สามารถใช้พร้ อมกันได้ เนื่ องจากตัวแปรที่กาหนดค่าตัวหลังสุ ดจะเป็ นตัวที่ได้ใช้งาน
หน่วยความจาในตาแหน่งนั้น ๆ ทาให้ขอ้ มูลในตัวแปรแรก ๆ ถูกแทนที่ไปด้วยค่าในตัวแปรล่าสุ ดแทน
รู ปแบบการประกาศดังนี้
การประกาศ
union ชื่อตัวแปรยูเนียน
{
ชนิดตัวแปร ชื่อตัวแปรตัวที่ 1;
ชนิดตัวแปร ชื่อตัวแปรตัวที่ 2;
---
};
การใช้ งาน
ชื่อตัวแปรยูเนียน ชื่อตัวแปรใหม่ที่ตอ้ งการตั้งชื่อ;
บทที่ 2 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 43
ตัวอยางเชน
1 union VALUE
2 {
3 byte a;
4 int b;
5 float c;
6 };
7 VALUE data;
8 void setup()
9 {
10 Serial.begin(9600);
11 data.a=123; Serial.println(data.a);
12 data.b=12345; Serial.println(data.b);
13 data.c=123.45; Serial.println(data.c);
14 }
15 void loop()
16 {
17 }
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1-6 เป็ นการประกาศตัวแปรแบบยูเนี ยนโดยตั้งชื่ อว่า VALUE มีตวั แปรภายใน 3 ตัวที่
เก็บข้อมูลแตกต่างกัน
- บรรทัดที่ 7 เป็ นการกาหนดชื่ อเรี ยกใหม่ในที่ น้ ี เปลี่ ยนชื่ อจาก VALUE เป็ นชื่ อว่า data แต่ไม่
สามารถกาหนดค่าเริ่ มต้นแบบตัวแปรสตรัคเจอร์ ได้
- บรรทัดที่ 11 เป็ นการกาหนดค่าให้กบั ตัวแปรตัวแรก data.a พร้อมนาไปใช้งานทันที โดยตัวอย่าง
ดังกล่าวเป็ นการนาส่ งข้อมูลออกทางพอร์ ตอนุกรมเพื่อแสดงผลหน้าจอคอมพิวเตอร์
- บรรทัดที่ 12 เป็ นการกาหนดค่าให้กบั ตัวแปรตัวแรก data.b ค่าของตัวแปรนี้ จะไปทับข้อมูลของ
data.a ซึ่ งตอนนี้ไม่ได้ใช้งานแล้ว
- บรรทัดที่ 13 เป็ นการกาหนดค่าให้กบั ตัวแปรตัวแรก data.c ค่าตัวแปรนี้ จะไปทับข้อมูลของตัว
แปร data.b เนื่องจากใช้ตาแหน่งของหน่วยความจาเดียวกันในการเก็บข้อมูล
ผลการรันเป็ นดังรู ป
ผลการรันเป็ นดังรู ป
บทที่ 3
เครื่ องมือช่ วยงานไมโครคอนโทรลเลอร์ Arduino
หัวข้อเรื่ อง
3.1 เครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ องและอัพโหลดไฟล์ลงชิพ
3.2 ไดร์ฟเวอร์ USB
3.3 เครื่ องมือจาลองการทางาน
สาระสาคัญ
เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ เป็ นเครื่ องมืออานวยความสะดวกทาให้สามารถ
พัฒนางานได้ง่ า ยและเร็ ว เครื่ องมื อที่ นามาใช้งานมี 3 อย่า งด้วยกัน คื อ เครื่ องมื อ แปลงภาษาซี เ ป็ น
ภาษาเครื่ องพร้อมอัพโหลดลงชิพ เครื่ องมือจาลองการทางาน และไดร์ฟเวอร์ USB
สมรรถนะประจาหน่วยการเรี ยนรู ้
รู ้และเข้าใจการใช้งานและสามารถใช้เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์
จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีความรู ้เกี่ยวกับเครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ องและอัพโหลดไฟล์ลงชิพ
2. เพื่อให้มีความรู ้เกี่ยวกับเครื่ องมือจาลองการทางาน
3. เพื่อให้มีความรู ้เกี่ยวกับการติดตั้งไดร์ ฟเวอร์ USB
จุดประสงค์ เชิ งพฤติกรรม
1. บอกเกี่ยวกับเครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ องและอัพโหลดไฟล์ลงชิพได้
2. บอกเกี่ยวกับเครื่ องมือจาลองการทางานได้
3. บอกขั้นตอนการติดตั้งไดร์ ฟเวอร์ USBได้
4. ทาแบบฝึ กหัดเสร็ จทันเวลาและทาแบบทดสอบผ่านเกณฑ์ที่กาหนด
46 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
เครื่ องมือที่ใช้แปลงภาษาซี เป็ นภาษาเครื่ องหรื อที่เรี ยกกันว่า ซี คอมไพเลอร์ (C Compiler) เป็ น
โปรแกรมคอมพิวเตอร์ ชนิดหนึ่งที่ถูกสร้างขึ้นเพื่อใช้สาหรับแปลงภาษาซี เป็ นภาษาเครื่ อง โปรแกรมที่ถูก
ออกแบบมาให้ใช้งานกับ Arduino คือโปรแกรม Arduino IDE การติดตั้งและการใช้งานมีดงั นี้
4. คลิกเลือกแสดงผลทั้ง 3 รายการดังรู ป
5. เขียนโค้ดโปรแกรมที่ตอ้ งการในหน้าต่างโปรแกรม
6. ในกรณี ที่ตอ้ งการคอมไพล์เพื่ อดู ผ ลของการเขี ยนโปรแกรมว่า ถู กไวยกรณ์ หรื อไม่ หรื อ
ต้องการไฟล์ภาษาเครื่ อง (HEX file) ไปจาลองการทางานในโปรแกรมจาลองการทางาน เมื่อ
เขียนโค้ดโปรแกรมเสร็ จสิ้ นแล้วให้คลิกที่ปุ่มคอมไพล์
การติดตั้งมีข้ นั ตอนดังนี้
1. แตกไฟล์ zip ไดร์ ฟเวอร์ ที่ดาวน์โหลดจากลิงค์ที่กล่าวมาแล้วข้างต้น
2. เข้าไปในโฟลเดอร์ CH341SER แล้วดับเบิลคลิกที่ไฟล์ setup.exe ดังรู ป
2. ทาการแตกไฟล์ แล้วคัดลอกไฟล์โมเดลจาลองทั้งสองไฟล์ดงั รู ป
ขั้นตอนการจาลองการทางานมีดงั นี้
1. เลือกอุปกรณ์ที่ตอ้ งการใช้งานให้อยูใ่ นช่องรายการ
2. ทาการต่อวงจรตามใบงานที่ตอ้ งการทดลอง
บทที่ 4
ใบงานการทดลอง
หัวข้อเรื่ อง
ใบงานที่ 4.1 การทดสอบบอร์ ดเบื้องต้น
ใบงานที่ 4.2 การเขียนโปรแกรมสื่ อสารทางพอร์ตอนุกรม
ใบงานที่ 4.3 การเขียนโปรแกรมใช้งานพอร์ ตทาหน้าที่เอาท์พุทพอร์ ตเบื้องต้น
ใบงานที่ 4.4 การเขียนโปรแกรมรับค่าจากพอร์ ตดิจิทลั
ใบงานที่ 4.5 การเขียนโปรแกรมอ่านค่าจากพอร์ ตแอนาลอกและการใช้ PWM
ใบงานที่ 4.6 การเขียนโปรแกรมรับสวิตช์ทางพอร์ ตแอนาลอก
ใบงานที่ 4.7 การเขียนโปรแกรมวัดอุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC
ใบงานที่ 4.8 การเขียนโปรแกรมวัดอุณหภูมิและความชื้นด้วยโมดูล DHT22
ใบงานที่ 4.9 การเขียนโปรแกรมใช้งานไอซีวดั อุณหภูมิ DS18B20
ใบงานที่ 4.10 การเขียนโปรแกรมวัดระยะด้วยโมดูลอัลตร้าโซนิค
ใบงานที่ 4.11 การเขียนโปรแกรมควมคุมดีซีมอเตอร์
ใบงานที่ 4.12 การเขียนโปรแกรมควมคุมสเต็ปเปอร์มอเตอร์
ใบงานที่ 4.13 การเขียนโปรแกรมควมคุมเซอร์ โวมอเตอร์
ใบงานที่ 4.14 การเขียนโปรแกรมใช้งานอินเตอร์ รัพท์
ใบงานที่ 4.15 การเขียนโปรแกรมใช้งานหน่วยความจา EEPROM
ใบงานที่ 4.16 การเขียนโปรแกรมใช้งานคียแ์ พด
ใบงานที่ 4.17 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ 4 บิต
ใบงานที่ 4.18 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ I2C
ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219
ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลด้วยจอ OLED 128×64
ใบงานที่ 4.21 การเขียนโปรแกรมแสดงผลรู ปภาพด้วยจอ OLED 128×64
ใบงานที่ 4.22 การประยุกต์การแสดงผลที่ LCD 4 bit กับเซนเซอร์ ต่าง ๆ
ใบงานที่ 4.23 การประยุกต์การแสดงผลที่ LCD I2C กับเซนเซอร์ ต่าง ๆ
ใบงานที่ 4.24 การประยุกต์การแสดงผลด้วยโมดูล MAX7219 กับเซนเซอร์ ต่าง ๆ
ใบงานที่ 4.25 การประยุกต์การแสดงผลที่ OLED กับเซนเซอร์ ต่าง ๆ
56 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
สาระสาคัญ
ใบงานในหน่ วยการเรี ย นนี้ เป็ นใบงานที่ รวบรวมขึ้ นเพื่ อให้ผูเ้ รี ย นสามารถเรี ย นรู ้ การใช้ง าน
ไมโครคอนโทรลเลอร์ ข้ นั พื้นฐาน ตลอดจนมีทกั ษะในการสร้างวงจรเพื่อประยุกต์ใช้งานได้ดว้ ยตนเอง
โดยใบงานมี ท้ ัง หมด 25 ใบงานซึ่ งเป็ นใบงานขั้น พื้ น ฐานเพื่ อ ให้ ผู ้ที่ ย ัง ไม่ มี พ้ื น ฐานการเขี ย น
โปรแกรมควบคุมงานด้วยไมโครคอนโทรลเลอร์ มาก่อนสามารถเรี ยนรู ้ได้ ในแต่ละใบงานมีตวั อย่างการ
เขียนโปรแกรมขั้นพื้นฐานเพื่อให้สามารถเข้าใจได้ง่ายและเป็ นแนวทางที่จะฝึ กเขียนโปรแกรมควบคุม
งานในโจทย์แบบฝึ กหัดได้
สมรรถนะประจาหน่วยการเรี ยนรู ้
ปฏิบตั ิการทดลองวงจรไมโครคอนโทรลเลอร์ และวงจรเชื่ อมต่อได้ดว้ ยตนเอง เขียนโปรแกรม
สัง่ งานวงจรไมโครคอนโทรลเลอร์ Arduino จาลองการทางานด้วยโปรแกรม Proteus
จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีทกั ษะในการต่อวงจรไมโครคอนโทรลเลอร์ และวงจรต่อพ่วง
2. เพื่อให้มีทกั ษะในการตรวจสอบวงจรในกรณี ที่วงจรไม่ทางาน
3. เพื่อให้มีทกั ษะในการแก้ไขปั ญหาในกรณี ที่วงจรไม่ทางาน
4. เพื่อให้มีความรู ้เกี่ยวกับการเขียนโปรแกรมภาษาซี สาหรับไมโครคอนโทรลเลอร์
5. เพื่อให้เข้าใจการทางานของวงจรด้วยการจาลองการทางานด้วยโปรแกรม Proteus
6. เพื่อให้สามารถทดลองด้วยวงจรจริ งที่สร้างขึ้นเอง
7. เพื่อให้มีความรับผิดชอบในการจัดทาใบงานให้เสร็ จทันเวลา
จุดประสงค์ เชิ งพฤติกรรม
1. ต่อวงจรไมโครคอนโทรลเลอร์ และวงจรต่อพ่วงได้
2. ตรวจสอบวงจรในกรณี ที่วงจรไม่ทางานได้
3. แก้ไขปั ญหาในกรณี ที่วงจรไม่ทางานได้
4. เขียนโปรแกรมภาษาซี ควบคุมไมโครคอนโทรลเลอร์ ตามตัวอย่างได้
5. เขียนโปรแกรมภาษาซี ควบคุมไมโครคอนโทรลเลอร์ ในงานที่มอบหมายได้
6. ทดลองวงจรด้วยการจาลองการทางานด้วยโปรแกรม Proteus ได้
7. ทดลองด้วยวงจรจริ งที่สร้างขึ้นเองได้
8. ทาใบงานเสร็ จทันเวลา
ใบงานที่ 4.1 การทดสอบบอร์ดเบื้องต้น 57
ใบงานที่ 4.1
การทดสอบบอร์ ดเบื้องต้ น
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถทดสอบบอร์ ดเบื้องต้นได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีการทดสอบบอร์ ดเบื้องต้นได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 1 ตัว
2.2 LED 3mm 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
58 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
ใบงานนี้ เป็ นใบงานสาหรับเตรี ยมเครื่ องมือและทดสอบการทางานเบื้องต้นของบอร์ ด Arduino
ว่าใช้งานได้ปกติหรื อไม่ โดยการเขียนโค้ดโปรแกรมให้ LED ที่อยูบ่ นบอร์ ด Arduino ซึ่ งต่ออยูท่ ี่ขา D13
ติดและดับสลับกัน ในกรณี ที่ตอ้ งการต่อวงจร LED เพิ่มภายนอกจะต้องต่อวงจร LED ให้สามารถติดได้
เมื่อรับลอจิก 1 ดังนั้นจะต้องต่อ LED อนุกรมกับตัวต้านทานลงกราวด์ดงั รู ป
ARDUINO
R1 LED1
220
D13
GND
6. ฟังก์ชั่นทีใ่ ช้ งานในใบงาน
รู ปแบบของฟังก์ชนั่ ที่ใช้งานในใบงานนี้มีดงั นี้
1. ฟังก์ชั่นกาหนดโหมดการทางานให้ กบั ขาพอร์ ต สามารถกาหนดได้ท้ งั ขาดิจิตอลโดยใส่ เพียง
ตัวเลขของขา (0, 1, 2,…13) และขาแอนาลอกที่ตอ้ งการให้ทางานในโหมดดิจิตอลได้จะต้อง
ใส่ A นาหน้า ซึ่ งใช้ได้เฉพาะ A0, A1,…A5 ส่ วนขา A6 และ A7 (ที่มีในบอร์ ด Arduino รุ่ น
Mini และ Nano) ไม่สามารถใช้งานในโหมดดิจิตอลได้ รู ปแบบของฟังก์ชนั่ เป็ นดังนี้
pinMode(pin, mode);
pin: หมายเลขขาที่ตอ้ งการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP
ตัวอย่างเช่ น
pinMode(13,OUTPUT); หมายถึง กาหนดให้ขา D13 ทางานเป็ นเอาต์พุตพอร์ต
ใบงานที่ 4.1 การทดสอบบอร์ดเบื้องต้น 59
2. ฟั งก์ ชั่นส่ งค่ าลอจิกดิจิตอลไปยังขาพอร์ ต โดยค่า HIGH เป็ นการส่ งลอจิก 1 และค่า LOW
เป็ นการส่ งลอจิก 0 ออกไปยังขาพอร์ ต ฟั งก์ชนั่ นี้ จะทางานได้ตอ้ งมีการใช้ฟังก์ชนั่ pinMode
ก่อน
digitalWrite(pin, value);
pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต
value: HIGH or LOW
ตัวอย่างเช่ น
digitalWrite(13,HIGH); หมายถึง กาหนดให้ส่งลอจิก 1 ไปที่ขา D13
digitalWrite(13,LOW); หมายถึง กาหนดให้ส่งลอจิก 0 ไปที่ขา D13
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
R2,R3 R4
USB to UART (TTL Level) 1k 220
DTR 3 D13 19
RXD D1(TXD)
2
TXD D0(RXD)
+5V
GND LED1
3V3
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
R1 LED1
220
D13
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
Out to pin
delay
Out to pin
delay
62 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 ประกาศชื่อ LED แทนตัวเลข 13
- บรรทัดที่ 4 กาหนดโหมดของขาพอร์ ตที่เชื่อมต่อ LED ให้ทางานเป็ นเอาท์พุทพอร์ต
- บรรทัดที่ 8 ส่ งค่าลอจิก 1 ออกทางขาพอร์ ตที่ต่อ LED
- บรรทัดที่ 9 หน่วงเวลา 1 วินาที (1000 mS)
- บรรทัดที่ 10 ส่ งค่าลอจิก 0 ออกทางขาพอร์ ตที่ต่อ LED
- บรรทัดที่ 11 หน่วงเวลา 1 วินาที (1000 mS)
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมจาก delay(1000); เป็ นตัวเลขอื่น แล้วสังเกตผล
9. สรุปผลการปฏิบัติงาน
ใบงานที่ 4.2 การเขียนโปรแกรมสื่ อสารทางพอร์ตอนุกรม 63
ใบงานที่ 4.2
การเขียนโปรแกรมสื่ อสารทางพอร์ ตอนุกรม
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมสื่ อสารทางพอร์ตอนุกรมได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมสื่ อสารทางพอร์ตอนุกรมได้
2. ทดสอบการทางานของบอร์ด Arduino ได้
3. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 1 ตัว
2.2 LED 3mm 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
64 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
การสื่ อ สารแบบอนุ ก รมเป็ นการส่ ง ข้อ มู ล ไปที ล่ ะ บิ ต โดยใช้ เ ทคนิ ค การเลื่ อ นข้อ มู ล บน
สายสัญญาณเส้นเดียว การส่ งข้อมูลแบบอนุกรมนี้จะไม่มีการส่ งสัญญาณนาฬิกาจากตัวส่ งไปยังตัวรับ แต่
จะอาศัยวิธีต้ งั ค่าความเร็ วในการรับส่ งสัญญาณให้เท่ากัน ซึ่ งเรี ยกว่า “อัตราบอด” โดยเรี ยกทับศัพท์ว่า
“บอดเรต” (baud rate) ในการส่ งข้อมูลจะส่ งบิตเริ่ มต้น (Start bit) เพื่อส่ งสัญญาณบอกให้ภาครับรับรู ้ ว่า
จะมีการส่ งข้อมูลไปแล้วในเวลาอันใกล้น้ ี และเมื่อส่ งข้อมูลเสร็ จจะส่ งบิตหยุด (Stop bit) เป็ นบิตปิ ดท้าย
ขบวนข้อมูลในไบต์น้ นั ๆ ดังรู ป
รู ปแบบของ ข้อมูลจากที่ส่งผ่าน Serial จะมีการเพิม่ Start bit และ Stop bit เข้าไปเพิม่ จากข้อมูลเดิม
1. บิตเริ่ มต้น (Start bit) จะมีขนาด 1 บิต จะเป็ นลอจิก LOW
2. บิตข้อมูล (Data bit) 8 บิต ข้อมูลที่จะส่ ง
3. บิตภาวะคู่หรื อคี่ (Parity bit) มีขนาด 1 บิต ใช้ตรวจสอบข้อมูลความถูกต้องของข้อมูล
4. บิตหยุด (Stop bit) เป็ นการระบุถึงขอบเขตของการสิ้ นสุ ดข้อมูล จะเป็ นลอจิก HIGH
2. ฟังก์ชั่นส่ งค่ าลอจิกดิจิทลั ไปยังขาพอร์ ต ค่า HIGH เป็ นการส่ งลอจิก 1 และค่า LOW เป็ นการ
ส่ งลอจิก 0 ออกไปยังขาพอร์ ต ซึ่ งฟังก์ชนั่ นี้จะทางานได้ตอ้ งมีการใช้ฟังก์ชนั่ pinMode ก่อน
digitalWrite(pin, value);
pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต
value: HIGH or LOW
5. ฟั งก์ ชั่นตรวจสอบว่ ามีข้อมู ลเข้ ามายังพอร์ ตอนุ กรมหรื อไม่ โดยค่าที่ ได้จากฟั งก์ชนั่ เป็ น
จานวนของข้อมูลที่เข้ามา แต่ถา้ หากไม่มีขอ้ มูลเข้าค่าที่ได้จากฟังก์ชนั่ จะมีค่าเป็ นศูนย์
Serial.available();
ตัวอย่าง
if (Serial. available()>0) หมายถึง ตรวจสอบว่ามีขอ้ มูลเข้ามายังพอร์ ตอนุ กรมหรื อไม่
หากมี (ค่าจะมากกว่า 0) ให้ทางานในกรอบงานของ if แต่ถา้ ไม่มีขอ้ มูลเข้ามาให้ขา้ ม
เงื่อนไข if นี้ไป
66 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
Serial.print(val, format)
ตัวอย่าง
Serial.print(78) ผลที่ได้คือ "78" Serial.print(78, OCT) ผลที่ได้คือ "116"
Serial.print(1.23456) ผลที่ได้คือ "1.23" Serial.print(78, DEC) ผลที่ได้คือ "78"
Serial.print('N') ผลที่ได้คือ "N" Serial.print(78, HEX) ผลที่ได้คือ "4E"
Serial.print("Hello") ผลที่ได้คือ "Hello" Serial.print(1.23456, 0) ผลที่ได้คือ "1"
Serial.print(78, BIN) ผลที่ได้คือ "1001110" Serial.print(1.23456, 2) ผลที่ได้คือ "1.23"
Serial.print(1.23456, 4) ผลที่ได้คือ "1.2346"
9. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิ มพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val)
Serial.println(val, format)
ใบงานที่ 4.2 การเขียนโปรแกรมสื่ อสารทางพอร์ตอนุกรม 67
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
R2,R3 R4
USB to UART (TTL Level) 1k 220
DTR 3 D13 19
RXD D1(TXD)
2
TXD D0(RXD)
+5V
GND
LED1
3V3
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
R1 LED1
220
D13
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 รับข้อมู ลจากพอร์ ตอนุ กรมซึ่ งส่ งจากคอมพิ วเตอร์ มายังบอร์ ด Arduino แล้วส่ งค่านั้น
กลับไปยังคอมพิวเตอร์ อีกครั้งเพื่อแสดงผลสิ่ งที่ส่งมา
ผังงาน โค้ ดโปรแกรม
1 int incomingByte = 0;
START 2 void setup()
3
{
4
Serial.begin(9600);
กาหนดค่าเริ ่มต้ นต่ า ง 5
}
6
7 void loop()
ไม่ใช่ 8 {
มีข้อมูลเข้า ? 9 if (Serial.available() > 0)
10 {
ใช่ 11 incomingByte = Serial.read();
12
Serial.print("I received: ");
เก็บ ค่าเข้ า ตัวแปร 13
14 Serial.println(incomingByte, DEC);
}
}
ส่ งค่ า ตัวแปรไปแสดงผล
ใบงานที่ 4.2 การเขียนโปรแกรมสื่ อสารทางพอร์ตอนุกรม 69
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 ประกาศตัวแปรสาหรับเก็บค่าข้อมูลที่รับเข้ามาทางพอร์ ตอนุกรม
- บรรทัดที่ 4 กาหนดอัตราเร็ วของการสื่ อสารของพอร์ ตอนุกรม (กาหนด Baud rate)
- บรรทัดที่ 8 ตรวจสอบว่ามีขอ้ มูลเข้ามาหรื อไม่ หากมีขอ้ มูลเข้ามาทางพอร์ ตอนุ กรมค่าที่ส่งออก
มาจากฟังก์ชนั่ Serial.available จะมากกว่าศูนย์
- บรรทัดที่ 10 อ่านค่าจากพอร์ ตอนุกรมนาเข้ามาเก็บลงในตัวแปรที่เตรี ยมไว้
- บรรทัดที่ 11 แสดงข้อความ “I received:” ที่จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
- บรรทัดที่ 12 แสดงค่าในตัวแปร incomingByte ที่จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้แสดงผลตัวแปรรู ปแบบอื่น ๆ แล้วสังเกตผล
การทดลองที่ 2 รับข้อมู ลจากพอร์ ตอนุ กรมซึ่ งส่ งมาจากคอมพิวเตอร์ มายังบอร์ ด Arduino แล้วทาการ
ตรวจสอบว่าข้อมูลดังกล่าวใช่ ตวั อักษร a หรื อไม่ หากข้อมูลเป็ นตัวอักษร a ให้ LED ที่ต่ออยู่ที่ขา D13
สว่างแต่ถา้ ข้อมูลที่เข้ามาไม่ใช่ตวั อักษร a ให้ LED นั้นดับ
ผังงาน โค้ ดโปรแกรม
1 #define LED 13
START 2 int incomingByte = 0;
3 void setup()
4 {
กาหนดค่าเริ ่มต้ นต่ า ง 5
Serial.begin(9600);
6
7 pinMode(LED,OUTPUT);
ไม่ใช่ 8 }
มีข้อมูลเข้า ? 9 void loop(){
10 if (Serial.available() > 0) {
ใช่ 11
incomingByte = Serial.read();
12
ใช่ ไม่ใช่ if(incomingByte =='a')
ใช่ a ? 13
14 {
15 digitalWrite(LED,HIGH);
LED ติด LED ดับ 16
17
}
else
18 {
19 digitalWrite(LED,LOW);
20 }
}
}
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ LED ให้แทน 13 (ในวงจรจริ ง LED ต่ออยูก่ บั ขา D13)
- บรรทัดที่ 2 ประกาศตัวแปรสาหรับเก็บค่าข้อมูลที่รับเข้ามาทางพอร์ ตอนุกรม
- บรรทัดที่ 5 กาหนดอัตราเร็ วของการสื่ อสารของพอร์ ตอนุกรม (กาหนด Baud rate)
70 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
D3
D4
D5
GND
ใบงานที่ 4.3
การเขียนโปรแกรมใช้ งานพอร์ ตทาหน้ าทีเ่ อาท์ พทุ พอร์ ตเบื้องต้ น
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมใช้งานพอร์ ตทาหน้าที่เอาท์พุทพอร์ ตเบื้องต้นได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมใช้งานพอร์ ตทาหน้าที่เอาท์พุทพอร์ ตเบื้องต้นได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 4 ตัว
2.2 LED 3mm 4 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
72 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
บอร์ ดArduino รุ่ นที่ใช้ไอซี ไมโครคอนโทรลเลอร์ ATMEGA328, ATMEGA168, ATMEGA8
จะมีพอร์ ตดิจิทลั ให้สามารถเชื่อมต่อใช้งานได้ 14 ขาด้วยกันโดยเริ่ มจากขา D0, D1,…D13 แต่ในขณะใช้
งานที่ มี ก ารติ ด ต่ อ สื่ อ สารกับ คอมพิ ว เตอร์ ผ่ า นทางพอร์ ต อนุ ก รม (สาย USB ที่ ก าลัง เชื่ อ มต่ อ กับ
คอมพิวเตอร์ ) ขา D0 และ D1 จะถูกใช้งานรับส่ งข้อมูลอยู่ ดังนั้นจึงห้ามใช้ในขณะที่ใช้งานพอร์ ตอนุกรม
R2,R3 5
USB to UART (TTL Level) 1k D3
DTR 3
RXD D1(TXD) 6
2 D4
TXD D0(RXD)
+5V
GND 11
3V3 D5
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
D3
D4
D5
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมไฟวิง่ LED 4 ตัวติดดับเรี ยงกันไปโดยให้ติดครั้งละ 1 ตัวและที่เหลือดับ
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START A
B
กาหนดค่าเริ ่มต้ นต่ า ง LED 3
LED 1
LED 4
LED 2
A
ใบงานที่ 4.3 การเขียนโปรแกรมใช้งานพอร์ตทาหน้าที่เอาท์พทุ พอร์ตเบื้องต้น 75
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1-4 กาหนดชื่อ LED1, 2, 3, 4 ให้แทน 2, 3, 4, 5 (เป็ นขาที่ LED ต่ออยูก่ บั Arduino)
- บรรทัดที่ 7 กาหนดอัตราเร็ วของการสื่ อสารของพอร์ ตอนุกรม (กาหนด Baud rate)
- บรรทัดที่ 8-11 กาหนดโหมดให้กบั ขาพอร์ ตทางานเป็ นเอาต์พุทพอร์ ต
- บรรทัดที่ 15 ส่ งลอจิก 1 ออกพอร์ ตที่ใช้ชื่อว่า LED1
- บรรทัดที่ 16 ส่ งลอจิก 0 ออกพอร์ ตที่ใช้ชื่อว่า LED2
- บรรทัดที่ 17 ส่ งลอจิก 0 ออกพอร์ ตที่ใช้ชื่อว่า LED3
- บรรทัดที่ 18 ส่ งลอจิก 0 ออกพอร์ ตที่ใช้ชื่อว่า LED4
- บรรทัดที่ 19 หน่วงเวลา 200 mS (1/5 วินาที)
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้ LED ติดในรู ปแบบอื่น ๆ แล้วสังเกตผล
76 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
LED 1
LED 4
LED 2
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 ประกาศตัวแปรแบบอาร์ เรย์ชื่อ LED_pin และกาหนดค่าเป็ น 2, 3, 4, 5 (เป็ นขาที่
LED ต่ออยูก่ บั Arduino)
ใบงานที่ 4.3 การเขียนโปรแกรมใช้งานพอร์ตทาหน้าที่เอาท์พทุ พอร์ตเบื้องต้น 77
- บรรทัดที่ 2 ประกาศรู ปแบบ (Prototype) ของฟั งก์ชนั่ รอง ซึ่ งเป็ นฟั งก์ชนั่ ให้ทาหน้าที่รับค่าที่ส่ง
มาจากฟังก์ชนั่ หลักแล้วคานวณเพื่อส่ งลอจิกออกพอร์ ต
- บรรทัดที่ 5 กาหนดอัตราเร็ วของการสื่ อสารของพอร์ ตอนุกรม (กาหนด Baud rate)
- บรรทัดที่ 6-9 กาหนดโหมดให้กบั ขาพอร์ ตทางานเป็ นเอาต์พุทพอร์ ต โดยใช้คาสั่ง for ในการวน
ทาซ้ า
- บรรทัดที่ 14 หน่วงเวลา 200 mS (1/5 วินาที)
- บรรทัดที่ 22-28 ฟั งก์ชั่นรองที่ รับค่าเข้ามาจากฟั งก์ชั่นหลักผ่านตัวแปร data แล้วนาค่าเข้ามา
ตรวจสอบว่าควรจะต้องส่ งลอจิก 1 หรื อลอจิก 0 ออกทางพอร์ตใด
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้ LED ติดในรู ปแบบอื่น ๆ แล้วสังเกตผล
9. สรุปผลการปฏิบัติงาน
D3
D4
D5
GND
D3
D4
D5
D6
D7
D8
D9
GND
ใบงานที่ 4.4
การเขียนโปรแกรมรับค่ าจากพอร์ ตแบบดิจิทลั
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมรับค่าจากพอร์ ตแบบดิจิทลั ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมรับค่าจากพอร์ ตแบบดิจิทลั ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 8 ตัว
2.2 LED 3mm 4 ตัว
2.2 Tack Switch 4 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
80 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
บอร์ ด Arduino รุ่ นที่ใช้ไอซี ไมโครคอนโทรลเลอร์ ATMEGA328, ATMEGA168, ATMEGA8
มีพอร์ ตดิ จิทลั ให้สามารถเชื่ อมต่ อใช้งานได้ 14 ขาด้วยกันโดยเริ่ มจากขา D0, D1, …D13 (ขา D0, D1
สงวนไว้ดงั ที่ได้กล่าวมาแล้วในใบงานที่ 4.3) และมีพอร์ตแอนาลอกอีก 6 ขาคือ A0, A1, …A5 ที่สามารถ
นามาใช้งานในโหมดดิจิทลั ได้ ส่ วน A6, A7 ที่มีอยูใ่ นบอร์ ด Arduino รุ่ น Mini และ Nano จะใช้งานได้
เฉพาะการรับสัญญาณเข้าที่เป็ นแอนาลอกเท่านั้น
โหมดการทางานของพอร์ ตที่ให้ทางานแบบดิ จิทลั สามารถสั่งให้ทางานได้ 2 โหมดคือโหมด
เอาท์พุทและโหมดอินพุท ไมโครคอนโทรลเลอร์ ที่ใช้ใน Arduino ส่ วนใหญ่เป็ นตระกูล AVR มีขอ้ โดด
เด่นอีกหนึ่ งประการคือ มีตวั ต้านทานพูลอัพที่มีค่า 20k อยูภ่ ายในซึ่ งผูใ้ ช้งานสามารถที่จะเลือกใช้หรื อไม่
ใช้ก็ได้
เนื่ องจากไมโครคอนโทรลเลอร์ AVR ที่นามาทาเป็ น Arduino สามารถขับกระแสออกจากขา
พอร์ตในโหมดดิจิทลั ได้มากพอสมควรที่จะขับ LED ให้ติดสว่างได้ ดังนั้นการใช้งานเพื่อที่จะขับโหลดที่
เป็ น LED จึงสามารถต่อโดยตรงได้โดยไม่ตอ้ งใช้ไอซี ช่วยขับกระแส ด้วยสาเหตุน้ ี หากนามาขาพอร์ ตมา
ใช้งานเป็ นอินพุทพอร์ ตจึงต้องเปลี่ยนโหมดไม่ให้ไอซี จ่ายกระแสออกมา ในทางปฏิบตั ิเพื่อป้ องกันการ
ผิดพลาดจากการต่อใช้งานหรื อจากการเลื อกโหมดเมื่อนาขาพอร์ ตไปต่อกับสวิตช์ ผูอ้ อกแบบวงจรควร
ใช้ตวั ต้านทานค่าประมาณ 200 ohm อนุกรมกับสวิตช์เพื่อป้ องกันพอร์ ตเสี ยหาย
6. ฟังก์ชั่น Arduino ทีใ่ ช้ งานในใบงาน
1. ฟังก์ ชั่นกาหนดโหมดการทางานให้ กับขาพอร์ ต โดยสามารถกาหนดได้ท้ งั ขาดิจิทลั โดยใส่
เพียงตัวเลขของขา (0, 1, 2,…13) และขาแอนาลอกที่ตอ้ งการให้ทางานในโหมดดิจิทลั แต่
การใส่ ขาต้องใส่ A นาหน้าซึ่งใช้ได้เฉพาะ A0, A1,…A5 ส่ วนขา A6 และ A7 ไม่สามารถใช้
งานในโหมดดิจิทลั ได้ รู ปแบบของฟังก์ชนั่ เป็ นดังนี้
pinMode(pin, mode);
pin: หมายเลขขาที่ตอ้ งการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP
2. ฟังก์ชั่นส่ งค่ าลอจิกดิจิทลั ไปยังขาพอร์ ต ค่า HIGH เป็ นการส่ งลอจิก 1 และค่า LOW เป็ นการ
ส่ งลอจิก 0 ออกไปยังขาพอร์ ต ฟังก์ชนั่ นี้จะทางานได้ตอ้ งมีการใช้ฟังก์ชนั่ pinMode ก่อน
digitalWrite(pin, value);
pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต
ใบงานที่ 4.4 การเขียนโปรแกรมรับค่าจากพอร์ตดิจิทลั 81
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชนั่ ที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val) Serial.print(val, format)
7. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิ มพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val) Serial.println(val, format)
82 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
R2,R3 11
USB to UART (TTL Level) 1k D5
DTR 3 VCC
RXD D1(TXD)
2
TXD D0(RXD)
+5V Internal pull up
GND
3V3 R4-R7
220 x4 SW1
15
D9
SW2
16
D10
SW3
17
X1 D11
16MHz 9 XTAL1 SW4
18
10 XTAL2 D12
C2,C3 GND
22pF 8,22
D3
D4
D5
VCC
Internal pull up
R5-R8
220 x4 SW1
D9
SW2
D10
SW3
D11
SW4
D12
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D8
D7
D6
D5
D4
D3
D2
D0
D1
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A1
A2
A3
A4
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
START
จริ ง
SW1 ูก กด LED1 ติด
เท็จ
จริ ง
SW2 ูก กด LED1 ดับ
เท็จ
จริ ง
SW3 ูก กด LED2 ติด
เท็จ
จริ ง
SW4 ูก กด LED2 ดับ
เท็จ
84 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1-2 กาหนดชื่อ LED1, 2 ให้แทน 2, 3 (เป็ นขาที่ LED ต่ออยูก่ บั Arduino)
- บรรทัดที่ 3-6 กาหนดชื่อ SW1, 2, 3, 4 ให้แทน 9, 10, 11, 12 (เป็ นขาที่สวิตช์ต่ออยูก่ บั Arduino)
- บรรทัดที่ 9 กาหนดโหมดให้กบั ขาพอร์ ตที่ต่อกับ LED ทางานเป็ นเอาต์พุทพอร์ต
- บรรทัดที่ 10,11 กาหนดโหมดให้ขาพอร์ ตที่ต่อกับสวิตช์ทางานเป็ นอินพุทพอร์ ตที่ใช้ตวั ต้านทาน
พูลอัพภายในตัวไอซี ซ่ ึ งมีค่าประมาณ 20 กิโลโอห์ม
- บรรทัดที่ 15 ตราจสอบว่าสวิตช์ที่ต่อกับขาพอร์ ตที่ชื่อว่า SW1 ถูกกดหรื อไม่ (เมื่อถูกกดขาพอร์ ต
จะเป็ นลอจิก 0)
- บรรทัดที่ 16 หากสวิตช์ SW1 ถู กกดให้ส่งลอจิ ก 1 ออกทางขาพอร์ ตที่ ใช้ชื่อว่า LED1 เพื่อให้
LED ติดสว่าง
- บรรทัดที่ 17 หากการตรวจสอบเงื่อนไขในบรรทัดที่ 15 ผิดเงื่อนไขให้ทาการตราจสอบว่าสวิตช์
ที่ต่อกับขาพอร์ ตที่ชื่อว่า SW2 ถูกกดหรื อไม่
- บรรทัดที่ 18 หากสวิตช์ SW2 ถู กกดให้ส่งลอจิ ก 1 ออกทางขาพอร์ ตที่ ใช้ชื่อว่า LED1 เพื่อให้
LED ดับ
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้ LED ติดในรู ปแบบอื่น ๆ แล้วสังเกตผล
ใบงานที่ 4.4 การเขียนโปรแกรมรับค่าจากพอร์ตดิจิทลั 85
การทดลองที่ 2 เขียนโปรแกรมควบคุมการติดดับของ LED โดยเมื่อ SW1 ถูกกดให้ LED1 ติด SW2 ถูก
กดให้ LED2 ติด SW3 ถูกกดให้ LED3 ติด SW4 ถูกกดให้ LED ดับทุกตัวและในขณะที่กดสวิตช์ตอ้ งมี
การแสดงข้อความแสดงว่าสวิตช์น้ ัน ๆ ถู กกดและสถานะของการติ ดดับของ LED และให้เขียนโค้ด
ตรวจจับการปล่อยคียก์ ่อนที่จะออกนอกลูป
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
จริ ง
SW1 ูก กด LED1 ติด แสดงข้ อความ SW1 ปล่ อ ยการกด
เท็จ
จริ ง
SW2 ูก กด LED2 ติด แสดงข้ อความ SW1 ปล่ อ ยการกด
เท็จ
จริ ง
SW3 ูก กด LED3 ติด แสดงข้ อความ SW1 ปล่ อ ยการกด
เท็จ
จริ ง
SW4 ูก กด LED ดับทั้งหมด แสดงข้ อความ SW1 ปล่ อ ยการกด
เท็จ
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1-3 กาหนดชื่อ LED1, 2, 3 ให้แทน 2, 3, 4 (เป็ นขาที่ LED ต่ออยูก่ บั Arduino)
- บรรทัดที่ 4-7 กาหนดชื่อ SW1, 2, 3, 4 ให้แทน 9, 10, 11, 12 (เป็ นขาที่สวิตช์ต่ออยูก่ บั Arduino)
- บรรทัดที่ 9,10 กาหนดโหมดให้กบั ขาพอร์ ตที่ต่อกับ LED ทางานเป็ นเอาต์พุทพอร์ต
- บรรทัด ที่ 11,12 ก าหนดโหมดให้กบั ขาพอร์ ตที่ ต่อกับ สวิตช์ท างานเป็ นอิ นพุท พอร์ ตที่ ใช้ตวั
ต้านทานพูลอัพภายในตัวไอซี ซ่ ึ งมีค่าประมาณ 20k
- บรรทัดที่ 13 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 16 ตราจสอบว่าสวิตช์ที่ต่อกับขาพอร์ ตที่ชื่อว่า SW1 ถูกกดหรื อไม่ (เมื่อถูกกดขาพอร์ ต
จะเป็ นลอจิก 0)
- บรรทัดที่ 17 หากสวิตช์ SW1 ถู กกดให้ส่งลอจิ ก 1 ออกทางขาพอร์ ตที่ ใช้ชื่อว่า LED1 เพื่อให้
LED ติดสว่าง
- บรรทัดที่ 18 ส่ งข้อความไปแสดงผลที่จอคอมพิวเตอร์ ผา่ นพอร์ ตอนุกรมโดยแสดงคาว่า “SW1 is
pressed & LED1 ON”
- บรรทัดที่ 19 วนตรวจสอบว่ายังถูกกดอยูห่ รื อไม่หากยังถูกกดอยูใ่ ห้วนตรวจสอบจนกว่าจะมีการ
ปล่อยสวิตช์
- บรรทัดที่ 21 หากการตรวจสอบเงื่อนไขในบรรทัดที่ 16 ผิดเงื่อนไขให้ทาการตราจสอบว่าสวิตช์
ที่ ต่ อ กับ ขาพอร์ ต ที่ ชื่ อ ว่า SW2 ถู ก กดหรื อ ไม่ ต่ อ จากนั้น กระบวนการเป็ นเช่ น เดี ย วกับ การ
ตรวจสอบสวิตช์ SW1
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้ LED ติดในรู ปแบบอื่น ๆ แล้วสังเกตผล
9. สรุปผลการปฏิบัติงาน
ใบงานที่ 4.4 การเขียนโปรแกรมรับค่าจากพอร์ตดิจิทลั 87
จริ ง
SW1 ูก กด LED1 ติด แสดงข้ อความ
เท็จ
จริ ง
SW2 ูก กด LED2 ติด แสดงข้ อความ
เท็จ
จริ ง
SW3 ูก กด LED3 ติด แสดงข้ อความ
เท็จ
จริ ง
SW4 ูก กด LED ดับทั้งหมด แสดงข้ อความ
เท็จ
เท็จ
ปล่ อ ย SW แล้ ว
จริ ง
2. เขียนโปรแกรมควบคุ มการติ ดดับของ LED พร้ อมแสดงข้อความสถานะของสวิต ช์และ
LED โดยเงื่อนไขให้สวิตช์หนึ่งตัวควบคุมการติดดับของ LED 1 ตัว ตัวอย่างเช่นสวิตช์ SW1
กดครั้งที่ 1 ให้ LED1 ติดเมื่อกดครั้งที่ 2 ให้ LED1 ดับสลับกันไปต่อเนื่ องสวิตช์ตวั อื่น ๆ ก็
ทางานเช่นกันโดยใช้สวิตช์ 4 ตัวควบคุมการติดดับของ LED จานวน 4 ตัวใช้วงจรดังรู ป
ARDUINO R1-R4 LED1-LED4
220
D2
D3
D4
D5
VCC
Internal pull up
R5-R8
220 x4 SW1
D9
SW2
D10
SW3
D11
SW4
D12
GND
4
ใบงานที่ 4.5 การเขียนโปรแกรมอ่านค่าจากพอร์ตแอนาลอกและการใช้ PWM 89
ใบงานที่ 4.5
การเขียนโปรแกรมอ่ านค่ าจากพอร์ ตแอนาลอกและการใช้ PWM
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมอ่านค่าจากพอร์ ตแอนาลอกและการใช้ PWMได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมอ่านค่าจากพอร์ ตแอนาลอกและการใช้ PWM ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 Potentiometer 10k 1 ตัว 2.3 LED 3mm 4 ตัว
2.2 ตัวต้านทาน 220 ohm 4 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
90 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
บอร์ ด Arduino รุ่ นที่ใช้ไอซี ไมโครคอนโทรลเลอร์ ATMEGA328, ATMEGA168, ATMEGA8
มีพอร์ตที่สามารถรับสัญญาณเข้าที่เป็ นสัญญาณแอนาลอกได้ 6 ช่อง ( 6 ขา) A0, A1, …A5 สาหรับบอร์ ด
ที่ใช้ไอซี ที่มีตวั ถัง DIP (ตัวถังตีนตะขาบ) เช่นบอร์ ดรุ่ น UNO และสามารถรับสัญญาณได้ 8 ช่องสาหรับ
บอร์ ดที่ใช้ชิพไอซี ที่มีตวั ถังแบบ SMD (อุปกรณ์ ผิวหน้า) เช่ น บอร์ ดรุ่ น Mini และ Nano ส่ วนบอร์ ดรุ่ น
Mega มีช่องสัญญาณที่สามารถสัญญาณแอนาลอกได้ 16 ช่อง ภายในตัวซีพียมู ีโมดูลแปลงสัญญาณแอนา
ลอกเป็ นดิ จิทลั ขนาด 10 บิ ต ดังนั้นเมื่ ออ่านค่ าเข้ามาซี พียูจะแปลงค่าได้เป็ นค่า ตั้ง แต่ 0 จนถึ ง 1023 ที่
ค่าแรงดันของสัญญาณแอนาลอกที่รับเข้ามาอยูใ่ นช่วง 0 ถึง 5 โวลต์
ขาพอร์ ต แอนาลอกจะมี บ างส่ ว นที่ ส ามารถน าไปใช้ง านแบบดิ จิ ทลั ได้ นั่น ก็ ห มายความว่า
สามารถใช้คาสัง่ digitalWrite( ), digitalRead( ) ได้เหมือนกับขาดิจิทลั ปกติ ขาพอร์ตแอนาลอกที่นามาใช้
งานในโหมดดิจิทลั ได้มีเพียง 6 ขาคือ A0, A1, …A5 ส่ วน A6 และ A7 ของบอร์ ดรุ่ น Mini และ Nano ใช้
รับสัญญาณเข้าที่เป็ นสัญญาณแอนาลอกเพียงอย่างเดียว ดังนั้นเมื่อใช้งานในโหมดดิจิทลั การใช้งานจะใช้
คาสั่งเดียวกันกับคาสั่งที่ควบคุมขาดิจิทลั เพียงแต่การระบุขาใช้งานจะต้องใส่ ช่องขาสัญญาณว่า A นาหน้า
เช่น
pinMode(A0,OUTPUT); หมายถึงให้ขา A0 ทางานในโหมดดิจิทลั ที่เป็ นเอาท์พุตพอร์ ต
digitalWrite(A0,HIGH); หมายถึงให้เขียนลอจิก 1 ไปที่ขาพอร์ต A0
0V 0V
20% duty cycle -> analogWrite(51); 75% duty cycle -> analogWrite(191);
5V 5V
0V 0V
30% duty cycle -> analogWrite(77); 100% duty cycle -> analogWrite(255);
5V 5V
0V 0V
ฟังก์ชนั่ ที่ส่งสัญญาณออกยังขาเหล่านี้ใช้คาสัง่
analogWrite(3, 100); หมายถึ ง ส่ ง สั ญ ญาณ PWM ออกทางขา D3 โดยให้สั ญ ญาณที่
ส่ งออกนั้นขนาดดิวตี้ไซเคิลที่ 100
pinMode(pin, mode)
pin: หมายเลขขาที่ตอ้ งการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP
2. ฟั งก์ ชั่นส่ งค่ าลอจิก ดิจิทัลไปยังขาพอร์ ต โดยค่า HIGH เป็ นการส่ งลอจิ ก 1 และค่า LOW
เป็ นการส่ งลอจิ ก 0 ออกไปยังขาพอร์ ต ซึ่ งฟั งก์ชั่นนี้ จะทางานได้จะต้องมี การใช้ฟังก์ชั่น
pinMode ก่อน
digitalWrite(pin, value)
pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต
5. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชั่นที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val) Serial.print(val, format)
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชนั่ Serial.print ต่างกันตรงที่ เมื่ อพิมพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val) Serial.println(val, format)
ใบงานที่ 4.5 การเขียนโปรแกรมอ่านค่าจากพอร์ตแอนาลอกและการใช้ PWM 93
8. ฟังก์ชั่นให้ ขาพอร์ ตส่ งสั ญญาณ PWM เป็ นฟังก์ชนั่ ที่ให้ขาพอร์ ตดิจิทลั ขา 3, 5, 6, 9, 10 และ
11 (ซึ่ งเป็ นขาที่ส่งสัญญาณ PWM ได้) ส่ งสัญญาณ PWM ออกตามค่าดิ วติ้ไซเคิลที่กาหนด
ด้วยความถี่ 490 Hz
analogWrite(pin, value)
pin: ขาพอร์ตดิจิทลั ที่ตอ้ งการส่ งสัญญาณ PWM
value: ค่าดิวติ้ไซเคิลที่อยูร่ ะหว่าง 0 ถึง 255
ตัวอย่างเช่ น
analogWrite(3, 100); หมายถึงส่ งสัญญาณ PWM ออกทางขา D3 โดยให้สัญญาณ
ที่ส่งออกนั้นขนาดดิวตี้ไซเคิลที่ 100 ( ประมาณ 39.216 %)
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
VCC
X1
16MHz 9 XTAL1 28
A5 10k
10 XTAL2
C2,C3 GND
22pF 8,22
(PWM)D3
D4
(PWM)D5
VCC
A5 10k
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมควบคุมระดับความสว่างของ LED ที่ต่ออยูท่ ี่ขาพอร์ ตดิจิทลั D9 ซึ่งเป็ นขา
ที่ สามารถส่ งสัญญาณ PWM ออกมาได้ด้วยคาสั่ง analogWrite(pin,value) โดยควบคุ มความสว่างด้วย
โพเทนธิ โอมิ เตอร์ ที่ ต่ออยู่ที่ข าพอร์ ตแอนาลอก A5 ค่าที่ อ่านได้จะมี ค่า อยู่ระหว่า ง 0-1023 แต่ค่าที่ ใ ช้
ควบคุมดิวตี้ไซเคิลอยูร่ ะหว่าง 0-255 การดาเนินการลดค่าให้ใช้ค่าที่อ่านได้หารด้วย 4 ก่อนเอาไปใช้งาน
96 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
อ่ านค่าจาก POT
เขียนค่ า PWM
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ LED ให้แทน 9 (เป็ นขาที่ LED ต่ออยูก่ บั Arduino)
- บรรทัดที่ 2 กาหนดชื่อ POT ให้แทน 5 (เป็ นขาที่ Potentiometer ต่ออยูก่ บั Arduino)
- บรรทัดที่ 5 กาหนดโหมดให้กบั ขาพอร์ ตที่ต่อกับ LED ทางานเป็ นเอาต์พุทพอร์ต
- บรรทัดที่ 6 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 10 อ่านค่าแอนาลอกจาก POT โดยนาเข้ามาเก็บไว้ในตัวแปร adc
- บรรทัดที่ 11 เขียนค่าแอนาลอก (ส่ งสัญญาณพัลส์ แบบ PWM) ออกทางขาที่ใช้ชื่อว่า LED โดย
นาค่าตัวแปรที่เก็บค่าจาก POT มาหารด้วย 4 เนื่ องจากค่าที่อ่านจาก POT มีค่าสู งสุ ดที่ 1023 และ
ค่าที่กาหนด duty cycle ของฟังก์ชนั่ analogWrite มีค่าสู งสุ ดเพียง 255
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้ LED ติดในรู ปแบบอื่น ๆ แล้วสังเกตผล
ใบงานที่ 4.5 การเขียนโปรแกรมอ่านค่าจากพอร์ตแอนาลอกและการใช้ PWM 97
การทดลองที่ 2 เขียนโปรแกรมควบคุมความสว่างแก่ LED จานวน 2 ตัวที่อยู่ที่ขา D9, D10 ซึ่ งเป็ นขาที่
สามารถส่ งสัญญาณ PWM ได้ โดยใช้โพเทนธิ โอมิเตอร์ เป็ นตัวปรับความสว่างโดยให้ LED ทั้งสองตัวมี
ความสว่างที่ตรงข้ามกัน โดยให้มีการแสดงค่าสัญญาณแอนาลอกที่อ่านได้จากขาที่ต่อโพเทนธิ โอมิเตอร์
ออกทางพอร์ตอนุกรมแสดงผลที่จอคอมพิวเตอร์
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
อ่ านค่าจาก POT
แสดงค่ าออกที่อ่านได้
เขียนค่ า PWM
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1,2 กาหนดชื่อ LED1,2 ให้แทน 9,10 (เป็ นขาที่ LED ต่ออยูก่ บั Arduino)
- บรรทัดที่ 3 กาหนดชื่อ POT ให้แทน 5 (เป็ นขาที่ Potentiometer ต่ออยูก่ บั Arduino)
- บรรทัดที่ 6,7 กาหนดโหมดให้กบั ขาพอร์ ตที่ต่อกับ LED ทางานเป็ นเอาต์พุทพอร์ต
- บรรทัดที่ 8 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 12 อ่านค่าแอนาลอกจาก POT โดยนาเข้ามาเก็บไว้ในตัวแปร adc
- บรรทัดที่ 14 แสดงค่าที่อ่านได้จาก POT
98 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้ LED ติดในรู ปแบบอื่น ๆ แล้วสังเกตผล
9. สรุปผลการปฏิบัติงาน
(PWM)D3
D4
(PWM)D5
VCC
A5 10k
GND
ใบงานที่ 4.6
การเขียนโปรแกรมรับสวิตช์ ทางพอร์ ตแอนาลอก
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมรับสวิตช์ทางพอร์ ตแอนาลอกได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมรับสวิตช์ทางพอร์ตแอนาลอกได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 4 ตัว 2.5 ตัวต้านทาน 2.7k 1 ตัว
2.2 ตัวต้านทาน 1k 1 ตัว 2.6 LED 3mm 4 ตัว
2.3 ตัวต้านทาน 680 ohm 1 ตัว 2.7 Tack Switch 4 ตัว
2.4 ตัวต้านทาน 820 ohm 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
100 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
สวิตช์ที่นามาใช้งานกับไมโครคอนโทรลเลอร์ จะเป็ นสวิตช์ชนิดกดติดปล่อยดับเมื่อนามาใช้งาน
จาเป็ นจะต้องใช้พอร์ ตในการเชื่ อมต่อ 1 ช่องต่อสวิตช์ 1 ตัว ดังใบงานรับค่าจากพอร์ ตดิจิทลั ที่ผา่ นมา ซึ่ ง
หากมีการใช้งานสวิตช์จานวนมากจานวนพอร์ ตก็จะยิง่ มากตาม ดังรู ป
ARDUINO VCC
Internal pull up
R1-R4
220 x4 SW1
D9
SW2
D10
SW3
D11
SW4
D12
GND
R1
1k SW1
A0
R2
680 SW2
R3
820 SW3
R4
2.7k
GND SW4
5. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชั่นที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val) Serial.print(val, format)
102 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิมพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val) Serial.println(val, format)
R2,R3 11
USB to UART (TTL Level) 1k D5
DTR 3 VCC
RXD D1(TXD)
2
TXD D0(RXD)
+5V
GND R8
3V3 1k SW1
A0
R9
680 SW2
X1 R10
16MHz 9 820 SW3
XTAL1
10 XTAL2
C2,C3 GND R11
22pF 8,22 2.7k
SW4
D3
D4
D5
VCC
R4
1k SW1
A0
R5
680 SW2
R6
820 SW3
R7
2.7k
GND SW4
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมอ่านค่าแอนาลอกจากการกดสวิตช์แต่ละตัวโดยแสดงผลที่จอคอมพิวเตอร์
ผ่านทางพอร์ ตอนุกรม
อ่ านค่าจากสวิตช์
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ sw ให้แทน 0 (เป็ นขาที่วงจรสวิตช์ต่อเข้าที่ขา A0 ของ Arduino)
- บรรทัดที่ 4 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 8 อ่านค่าแอนาลอกจากวงจรสวิตช์โดยนาเข้ามาเก็บไว้ในตัวแปร adc
- บรรทัดที่ 10 แสดงค่าแอนาลอกจากการกดสวิตช์ผา่ นทางพอร์ ตอนุกรม
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. บันทึ ก ผลค่ า ที่ อ่า นได้จากการกดสวิ ต ช์ แ ต่ ล ะตัวและบันทึ ก ผลเพื่ อ นาไปใช้ง านในการ
ทดลองถัดไป
การกดสวิตช์ ไม่กดสวิตช์ กดสวิตช์ SW1 กดสวิตช์ SW2 กดสวิตช์ SW3 กดสวิตช์ SW4
ค่าที่อ่านได้
ใบงานที่ 4.6 การเขียนโปรแกรมรับสวิตช์ทางพอร์ตแอนาลอก 105
อ่ านค่าจากพอร์ ต
จริ ง
อยู่ในช่ วงที่ 1 แสดงข้ อความ
เท็จ
จริ ง
อยู่ในช่ วงที่ 2 แสดงข้ อความ
เท็จ
จริ ง
อยู่ในช่ วงที่ 3 แสดงข้ อความ
เท็จ
จริ ง
อยู่ในช่ วงที่ 4 แสดงข้ อความ
เท็จ
106 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
แบบที่ 1 ตรวจสอบค่าที่อ่านได้แบบค่าเดียวไม่เพิ่มช่วงตรวจสอบ
1 #define sw 0 // switch connectec A0
2 void setup()
3 {
4 Serial.begin(9600);
5 }
6 void loop()
7 {
8 int adc=analogRead(sw);
9 if (adc==0)
10 {
11 Serial.print("SW1 is pressed : value adc is: ");
12 Serial.println(adc);
13 }
14 else if(adc==415)
15 {
16 Serial.print("SW2 is pressed : value adc is: ");
17 Serial.println(adc);
18 }
19 else if(adc==614)
20 {
21 Serial.print("SW3 is pressed : value adc is: ");
22 Serial.println(adc);
23 }
24 else if(adc==827)
25 {
26 Serial.print("SW4 is pressed : value adc is: ");
27 Serial.println(adc);
28 }
29 delay(100);
30 }
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ sw ให้แทน 0 (เป็ นขาที่วงจรสวิตช์ต่อเข้าที่ขา A0 ของ Arduino)
- บรรทัดที่ 4 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 8 อ่านค่าแอนาลอกจากวงจรสวิตช์โดยนาเข้ามาเก็บไว้ในตัวแปร adc
- บรรทัดที่ 9 ตรวจสอบว่าใช่ค่าที่เกิดจากการกดสวิตช์ 1 หรื อไม่ (ถ้ากดค่าที่อ่านได้จะมีค่าเป็ น 0)
- บรรทัดที่ 11-12 แสดงค่าข้อความพร้ อมค่าที่อ่านจากพอร์ แอนาลอกจากการกดสวิตช์ผ่านทาง
พอร์ตอนุกรม
- บรรทัดที่ 14 หากไม่ใช่ เงื่ อนไขในบรรทัดที่ 9 ให้ตรวจสอบว่าใช่ ค่าที่ เกิ ดจากการกดสวิตช์ 2
หรื อไม่ (ถ้ากดค่าที่อ่านได้จะมีค่าเป็ น 415)
- บรรทัดที่ 16-17 แสดงค่าข้อความพร้ อมค่าที่อ่านจากพอร์ แอนาลอกจากการกดสวิตช์ผ่านทาง
พอร์ตอนุกรม
- บรรทัดที่ 19-28 ทากระบวนการตรวจสอบและแสดงผลเช่นเดียวกับบรรทัดที่ 14-17 แต่เป็ นการ
ตรวจสอบค่าจากการกดสวิตช์ 3 และ 4 ตามลาดับ
- บรรทัดที่ 29 หน่วงเวลา 100mS (1/10 วินาที)
ใบงานที่ 4.6 การเขียนโปรแกรมรับสวิตช์ทางพอร์ตแอนาลอก 107
แบบที่ 2 ตรวจสอบค่าที่อ่านได้ชนิดเพิ่มช่วงตรวจสอบ
1 #define sw 0 // switch connectec A0
2 #define range 30
3 void setup()
4 {
5 Serial.begin(9600);
6 }
7 void loop()
8 {
9 int adc=analogRead(sw);
10 if (adc<0+range)
11 {
12 Serial.print("SW1 is pressed : value adc is: ");
13 Serial.println(adc);
14 }
15 else if((adc<415+range) && (adc>415-range))
16 {
17 Serial.print("SW2 is pressed : value adc is: ");
18 Serial.println(adc);
19 }
20 else if((adc<614+range) && (adc>614-range))
21 {
22 Serial.print("SW3 is pressed : value adc is: ");
23 Serial.println(adc);
24 }
25 else if((adc<827+range) && (adc>827-range))
26 {
27 Serial.print("SW4 is pressed : value adc is: ");
28 Serial.println(adc);
29 }
30 delay(100);
31 }
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ sw ให้แทน 0 (เป็ นขาที่วงจรสวิตช์ต่อเข้าที่ขา A0 ของ Arduino)
- บรรทัดที่ 2 กาหนดชื่อ range ให้แทน 30 เป็ นค่าที่ใช้ในการเพิ่มช่วงการตรวจสอบ
- บรรทัดที่ 5 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 9 อ่านค่าแอนาลอกจากวงจรสวิตช์โดยนาเข้ามาเก็บไว้ในตัวแปร adc
- บรรทัดที่ 10 ตรวจสอบว่าใช่ค่าที่เกิดจากการกดสวิตช์ 1 หรื อไม่ โดยตรงสอบค่าตั้งแต่ช่วง 0-30
- บรรทัดที่ 12-13 แสดงค่าข้อความพร้ อมค่าที่อ่านจากพอร์ แอนาลอกจากการกดสวิตช์ผ่านทาง
พอร์ตอนุกรม
- บรรทัดที่ 15 หากไม่ใช่ เงื่ อนไขในบรรทัดที่ 9 ให้ตรวจสอบว่าใช่ ค่าที่ เกิ ดจากการกดสวิตช์ 2
หรื อไม่ โดยตรวจสอบค่าในช่วง 415 30
- บรรทัดที่ 17-18 แสดงค่าข้อความพร้ อมค่าที่อ่านจากพอร์ แอนาลอกจากการกดสวิตช์ผ่านทาง
พอร์ตอนุกรม
- บรรทัดที่ 20-28 ทากระบวนการตรวจสอบและแสดงผลเช่นเดียวกับบรรทัดที่ 15-18 แต่เป็ นการ
ตรวจสอบค่าจากการกดสวิตช์ 3 และ 4 ตามลาดับ
- บรรทัดที่ 30 หน่วงเวลา 100mS (1/10 วินาที)
108 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. สังเกตผลแล้วเปรี ยบเทียบความแตกต่างระหว่างทดสอบค่าเดียวกับแบบเพิม่ ช่วง
9. สรุปผลการปฏิบัติงาน
D3
D4
D5
VCC
R4
1k SW1
A0
R5
680 SW2
R6
820 SW3
R7
2.7k
GND SW4
ใบงานที่ 4.7
การเขียนโปรแกรมวัดอุณหภูมดิ ้ วยเทอร์ มสิ เตอร์ ชนิด NTC
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมวัดอุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมวัดอุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 10k 1 ตัว 2.3 LED 3mm 4 ตัว
2.2 ตัวต้านทาน 220 ohm 4 ตัว 2.4 Thermistor NTC 10k 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
110 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
เทอร์มิสเตอร์ (Thermistor) เป็ นตัววัดอุณหภูมิแบบสารกึ่งตัวนาที่ใช้หลักการการเปลี่ยนแปลง
ความต้านทานเมื่ออุณหภูมิเปลี่ยนไปโดยมีดว้ ยกัน 2 แบบคือ
1. NTC (Negative Temperature Coefficient) มีคุณสมบัติแปรผันผกผันกับอุณหภูมิ กล่าวคือ
เมื่ออุณหภูมิสูงขึ้นค่าความต้านทานจะลดต่าลง
2. PTC (Positive Temperature Coefficient) มีคุณสมบัติแปรผันตรงกับอุณหภูมิ กล่าวคือเมื่อ
อุณหภูมิสูงขึ้นค่าความต้านทานจะสู งขึ้นตาม
ในทางปฏิบตั ิเทอร์ มิสเตอร์ ที่มีจาหน่ายในท้องตลาดส่ วนใหญ่ที่พบมากจะเป็ นชนิด NTC ใบงาน
นี้เป็ นใบงานที่นาเทอร์ มิสเตอร์ ชนิ ดนี้มาใช้งาน โดยการนามาใช้งานจะใช้เทอร์มิสเตอร์ NTC ที่มีค่าความ
ต้านทานที่ 10k ที่อุณหภูมิหอ้ ง (25 C) อนุกรมกับตัวต้านทานขนาด 10k เป็ นวงจรแบ่งแรงดันดังรู ป
VCC
10k
T
Thermistor
10k
ค่ า แรงดันที่ ไ ด้ส่ ง เข้า ไปยัง ขาพอร์ ตแอนาลอกเพื่ ออ่ า นค่ า เข้า ซี พี ยูเพื่ อ นาไปค านวณเป็ นค่ า
อุณหภูมิต่อไป โดยสมการของวงจรเป็ นดังนี้
สมการวงจรแบ่ งแรงดัน
RNTC
ADC = 1023
10k RNTC
10k RNTC 1023
=
RNTC ADC
1023RNTC
10k RNTC =
ADC
1023RNTC
10k = RNTC
ADC
1023
10k = RNTC 1
ADC
10k
RNTC =
1023
1
ADC
ใบงานที่ 4.7 การเขียนโปรแกรมวัดอุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC 111
สมการอุณหภูมิ
1 1 1 RNTC
= ln
T T0 B RNTC 0
เมื่อ T อุณหภูมิหน่วยเป็ นเคลวิน
T0 อุณหภูมิหอ้ งปกติที่ 25 องศาเซลเซี ยสหน่วยเป็ นเคลวิน (25+273.15)
B ค่าสัมประสิ ทธิ์ ของเทอร์ มิสเตอร์ NTC มีค่าเป็ น 3950
RNTC0 ค่าความต้านทานของเทอร์ มิสเตอร์ NTC ที่อุณหภูมิห้องปกติมีค่าเท่ากับ 10k
2. ฟังก์ชั่นส่ งค่ าลอจิกดิจิทลั ไปยังขาพอร์ ต ค่า HIGH เป็ นการส่ งลอจิก 1 และค่า LOW เป็ นการ
ส่ งลอจิก 0 ออกไปยังขาพอร์ต ฟังก์ชนั่ นี้จะทางานได้ตอ้ งมีการใช้ฟังก์ชนั่ pinMode ก่อน
digitalWrite(pin, value);
pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต
5. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชั่นที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val); Serial.print(val, format);
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิมพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val); Serial.println(val, format);
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
ใบงานที่ 4.7 การเขียนโปรแกรมวัดอุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC 113
VCC
R8
X1 10k
16MHz 9 28
XTAL1 A5
10 XTAL2 NTC
T
Thermistor
C2,C3 GND 10k
22pF 8,22
R1-R4 LED1-LED4
220
D2
D3
D4
D5
VCC
R5
10k
A5
NTC
T
Thermistor
10k
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมอ่านค่าจากเทอร์ มิสเตอร์ NTC ขนาด 10k โดยให้แสดงผลเป็ นอุณหภูมิที่มี
หน่วยเป็ นเซสเซี ยส (เขียนโค้ดจากสมการในทฤษฎี) แสดงผลที่จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
อ่ านค่าจาก NTC
คานวณ
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ NTCPin ให้แทน A5 (เป็ นขาที่วงจร NTC ต่อเข้าที่ขา A5 ของ Arduino)
- บรรทัดที่ 2-5 กาหนดชื่ อแทนค่าคงที่ ต่าง ๆ ที่ ใช้ในการคานวณค่าที่ อ่านได้จาก NTC มาเป็ น
ตัวเลขอุณหภูมิ
- บรรทัดที่ 8 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 12-14 กาหนดตัวแปรที่สามารถเก็บตัวเลขทศนิยมได้เอาไว้เก็บค่าเมื่อคานวณค่าที่อ่าน
ได้จาก NTC มาเป็ นตัวเลขอุณหภูมิ
- บรรทัดที่ 15 อ่านค่าแอนาลอกจากวงจร NTC มาเก็บลงในตัวแปร ADCvalue
- บรรทัดที่ 16-23 คานวณค่าที่อ่านได้จาก NTC มาเป็ นตัวเลขอุณหภูมิ โดยเก็บค่าอุณหภูมิที่เป็ น
องศาเซลเซียสไว้ในตัวแปร Steinhart
- บรรทัดที่ 25 แสดงค่าอุณภูมิจากตัวแปร Steinhart ที่จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเพิ่ม/ลด อุณหภูมิที่ตวั เทอร์ มิสเตอร์ สังเกตค่าอุณหภูมิที่อ่านได้
START
อ่ านค่าอุณหภูมิ
แสดงผล
116 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ NTCPin ให้แทน A5 (เป็ นขาที่วงจร NTC ต่อเข้าที่ขา A5 ของ Arduino)
- บรรทัดที่ 2 ประกาศรู ปแบบของฟังก์ชนั่ รองที่ใช้คานวณค่าอุณหภูมิ
- บรรทัดที่ 8 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 9 ประกาศตัวแปรและเรี ยกใช้ฟังก์ชนั่ รองโดยการส่ งค่าจากการอ่านค่าจากขาพอร์ ต
แอนาลอกที่ต่อกับเทอร์ มิสเตอร์ NTC ด้วยฟั งก์ชนั่ analogRead (ฟั งก์ชนั่ ซ้อนฟั งก์ชั่น)โดยให้
ฟังก์ชนั่ รองทาการคานวณค่าที่อ่านได้ไปเป็ นค่าอุณหภูมิที่เป็ นองศาเซลเซี ยสแล้วให้ส่งเข้าไปยัง
ตัวแปร Temp
- บรรทัดที่ 11 แสดงค่าอุณภูมิจากตัวแปร Temp ที่จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
- บรรทัดที่ 15-22 เป็ นฟั งก์ชนั่ รองที่ใช้คานวณค่าที่ส่งเข้ามาให้เป็ นค่าอุณหภูมิเป็ นองศาเซลเซี ยส
แล้วกลับคืนค่าออกนอกฟังก์ชนั่ ด้วยค่าในตัวแปร Cal ซึ่ งเป็ นค่าอุณหภูมิเป็ นองศาเซลเซี ยส
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. สังเกตข้อแตกต่างของอุณภูมิเมื่อเทียบกับการทดลองที่ 1
4. ทดลองเพิ่ม/ลด อุณหภูมิที่ตวั เทอร์ มิสเตอร์ สังเกตค่าอุณหภูมิที่อ่านได้
ใบงานที่ 4.7 การเขียนโปรแกรมวัดอุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC 117
9. สรุปผลการปฏิบัติงาน
R1-R4 LED1-LED4
220
D2
D3
D4
D5
VCC
R5
10k
A5
NTC
T
Thermistor
10k
GND
R1
10k
A4
NTC
T
Thermistor
10k
VCC
R2
10k
A5
NTC
T
Thermistor
10k
GND
บันทึกผลลงตาราง
ค่าที่ อุณหภูมิที่วดั จาก NTC ตัวที่ 1 อุณหภูมิที่วดั จาก NTC ตัวที่ 2
1
2
3
4
5
ใบงานที่ 4.8 การเขียนโปรแกรมวัดอุณหภูมิและความชื้นด้วยโมดูล DHT22 119
ใบงานที่ 4.8
การเขียนโปรแกรมวัดอุณหภูมแิ ละความชื้นด้ วยโมดูล DHT22
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมวัดอุณหภูมิและความชื้นด้วยโมดูล DHT22 ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมวัดอุณหภูมิและความชื้นด้วยโมดูล DHT22 ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 4.8 k 1 ตัว 2.3 LED 3mm 2 ตัว
2.2 ตัวต้านทาน 220 ohm 2 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. โมดูลวัดอุณหภูมิ DHT22 1 ตัว
5. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
6. สายเชื่อมต่อวงจร 1 ชุด
7. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
120 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
การวัดอุ ณหภู มิและความชื้ นสัมพัทธ์ ปั จจุ บนั มี เซนเซอร์ ชนิ ดหนึ่ งที่ ถูกออกแบบมาทางานนี้
โดยเฉพาะเซนเซอร์ ตวั นั้นคือ DHT11 และ DHT22 ซึ่ งทั้งสองเป็ นโมดูลที่ทางานแบบเดียวกันทุกประการ
เป็ นอุปกรณ์ที่ใช้ขาสื่ อสารเพียงเส้นเดียวเป็ นการสื่ อสารสองทิศทางและเป็ นการสื่ อสารที่ให้ขอ้ มูลแบบ
ดิจิทลั ความแตกต่างกันของโมดูลทั้งสองเป็ นดังตาราง
DHT11 DHT22
1. Ultra low cost 1. Low cost
2. 3 to 5V power and I/O 2. 3 to 5V power and I/O
3. 2.5mA max current use during conversion 3. 2.5mA max current use during conversion
(while requesting data) (while requesting data)
4. Good for 20-80% humidity readings with 5% 4. Good for 0-100% humidity readings with 2-5%
accuracy accuracy
5. Good for 0-50°C temperature readings ±2°C 5. Good for -40 to 125°C temperature readings
accuracy ±0.5°C accuracy
6. No more than 1 Hz sampling rate (once every 6. No more than 0.5 Hz sampling rate (once every
second) 2 seconds)
7. Body size 15.5mm x 12mm x 5.5mm 7. Body size 15.1mm x 25mm x 7.7mm
8. 4 pins with 0.1" spacing 8. 4 pins with 0.1" spacing
การต่ อใช้ง านโมดู ล DHT11, DHT22 จะต้องใช้ตวั ต้า นทานพู ล อัพ ที่ ข าสั ญญาณข้อมู ลที่ มีค่า
เท่ากับ 4.7k ดังรู ป
3.3V-6V
4k7 DHT22
MCU DATA
การเขี ย นโค้ด โปรแกรมเพื่ อ อ่ า นค่ า อุ ณ หภู มิ แ ละความชื้ น สั ม พัท ธ์ ท้ งั DHT11 และ DHT22
ปั จจุบนั มีไลบรารี่ ช่วยงานทาให้ผูเ้ ขียนโค้ดสามารถเขียนโค้ดได้ง่ายขึ้น ซึ่ งไลบรารี่ ที่ตอ้ งเอามาใช้งาน
เพื่ออ่านค่าจากโมดูลดังกล่าวจะต้องใช้ไลบรารี่ 2 ตัว โดยสามารถดาวน์โหลดได้ที่
ไลบรารี่ แหล่งดาวน์โหลด
DHT.h https://github.com/adafruit/DHT-sensor-library
Adafruit_Sensor.h https://github.com/adafruit/Adafruit_Sensor
ตัวอย่าง
DHT dht(8, DHT22);
หมายถึ ง ต่ อไปในโปรแกรมจะใช้ชื่ อ dht ในการเรี ย กใช้ง านโมดู ล โดยมี ก ารเชื่ อมต่อ
สายสัญญาณเข้าที่ขาพอร์ต D8 และใช้โมดูลชนิด DHT22
2. ฟังก์ ชั่นอ่ านค่ าความชื้น ค่าที่ได้จากฟั งก์ชนั่ อยูใ่ นรู ปของตัวแปร float หน่วยเป็ นเปอร์ เซนต์
ของความชื้นในอากาศที่วดั ได้ รู ปแบบของฟังก์ชนั่ ดังนี้
dht.readHumidity();
3. ฟังก์ ชั่นอ่ านค่ าความอุณหภูมิ ค่าที่ได้จากฟั งก์ชนั่ อยูใ่ นรู ปของตัวแปร float หน่วยเป็ นองศา
เซลเซียส รู ปแบบของฟังก์ชนั่ ดังนี้
dht.readTemperature();
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
กรณี ที่ใช้วงจรที่สร้างขึ้นเองจากไอซี ไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็ น Arduino
เรี ยบร้อยแล้ว ต่อวงจรดังรู ป
VCC
R4 DHT22
4k7
D8 14 DATA
R2,R3
USB to UART (TTL Level) 1k
DTR 3
RXD D1(TXD)
2
TXD D0(RXD)
+5V
GND
3V3
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
VCC
R1 DHT22
4k7
D8 DATA
GND
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
C
C
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขี ย นโปรแกรมอ่ า นค่ า อุ ณ หภู มิ และความชื้ นสั ม พัท ธ์ จ ากโมดู ล DHT22 แสดงผลที่
จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
อ่ านค่าจากโมดูล DHT22
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ DHT.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 กาหนดชื่อ DHTPIN ให้แทน 8 (เป็ นขาที่ DHT22 ต่อเข้าที่ขา D8 ของ Arduino)
- บรรทัด ที่ 3 ก าหนดชื่ อ DHTTYPE ให้แทน DHT22 เมื่ อวงจรต่ อใช้ง านโมดู ล DHT22 แต่ ถ้า
ผูใ้ ช้งานใช้โมดูล DHT11 หรื อ DTH21 ให้เปลี่ยนการกาหนดชื่อตาม
- บรรทัดที่ 5 ประกาศใช้งานไลบรารี่ โดยสามารถกาหนดชื่ อเรี ยกโมดูลตามต้องการได้ตวั อย่างนี้
กาหนดชื่อเรี ยกเป็ น dht
126 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
R1 DHT22
4k7
D8 DATA
R2
220 LED1
D3
R3
220 LED2
D2
GND
ใบงานที่ 4.9
การเขียนโปรแกรมใช้ งานไอซีวดั อุณหภูมิ DS18B20
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมใช้งานไอซีวดั อุณหภูมิ DS18B20ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมใช้งานไอซีวดั อุณหภูมิ DS18B20ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 4 ตัว 2.3 LED 3mm 4 ตัว
2.2 ตัวต้านทาน 4.7k 2 ตัว 2.4 ไอซี DS18B20 2 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
128 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
ไอซี ที่ถูกออกแบบมาสาหรับวัด อุณหภูมิมีอยูห่ ลายแบบ ถ้าแบ่งตามสัญญาณเอาต์พุตจะแบ่งได้
เป็ นสองประเภทคือ ไอซี ที่ให้เอาต์พุตแบบแอนาลอกและไอซี ที่ให้ค่าออกมาเป็ นดิจิทลั โดยไอซี แบบ
ดิจิทลั จะส่ งค่าออกมาเป็ นตัวเลขของอุณหภูมิซ่ ึ งผูใ้ ช้งานสามารถนาค่าไปใช้งานได้โดยตรงไม่ตอ้ งผ่าน
กระบวนการคานวณค่าเช่นไอซี ที่ให้ค่าที่เป็ นแอนาลอกอีก
ไอซี DS1820 เป็ นไอซี ถูกออกแบบมาสาหรับวัดอุณหภูมิโดยให้ค่าออกมาเป็ นแบบดิจิทลั และใช้
การสื่ อสารแบบ 1 เส้นสัญญาณหรื อที่ เรี ยกว่า “One wire” การสื่ อสารลักษณะนี้ ไม่ตอ้ งมีสายสั ญญาณ
นาฬิกามาควบคุมจังหวะการถ่ายทอดข้อมูลเหมือนกับระบบสื่ อสารข้อมูลอนุ กรมในแบบอื่น ดังนั้นหาก
การใช้งานที่ตอ้ งเดินสายในระยะไกลจึงมีความสะดวกในการใช้งาน
คุณลักษณะทัว่ ไป
- DS1820 เป็ นไอซี ดิจิทลั เทอร์ โมมิเตอร์ใช้การอินเตอร์เฟสแบบ 1-Wire ไอซี ตระกูลนี้มีหลาย
เบอร์ ขึ้นอยูก่ บั ค่าความละเอียดเช่น
• DS1820 ค่าที่อ่านได้ 9–bit ความละเอียด 0.5 °C
• DS18B20 ค่าที่อ่านได้ 12–bit ความละเอียด 0.0625 °C
- ใช้แรงดันไฟเลี้ยงได้ในช่วง 3.0V ถึง 5.5V
- ย่านการวัดตั้งแต่ –55°C ถึง +125°C หรื อ –67°F ถึง +257°F ความเที่ยงตรง 0.5°C
- ใช้เวลาการแปลง 200 ms สาหรับข้อมูล 9 บิต และ750 ms สาหรับข้อมูล 12 บิต
- มี 3 ขา คือ Gnd, DQ, Vdd
- ใช้งานได้สองแบบ: normal mode (ใช้ท้ งั 3 ขา) และ parasite power mode (ใช้เพียง 2 ขา คือ
DQ และ GND ในขณะที่ขา Vdd จะต่อกับขา Gnd)
- สามารถนาไอซี มาพ่วงต่อกันในบัสเดียว (เส้นสัญญาณ DQ) ได้หลายอุปกรณ์
รู ปที่ 4.9-4 การเพิม่ ไลบรารี่ ที่เป็ นไฟล์ zip ลงในโปรแกรม Arduino IDE
130 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชั่นที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val); Serial.print(val, format);
7. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิมพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val); Serial.println(val, format);
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
VCC
R6
4.7k VCC
R2,R3
USB to UART (TTL Level) 1k 3 DS18B20
DTR 3 6
RXD D1(TXD) 2 DQ VCC
2 D4
TXD D0(RXD)
+5V GND
GND 1
3V3
R7
4.7k VCC
3 DS18B20
D5
11 2 DQ VCC
X1
16MHz 9 GND
XTAL1
1
10 XTAL2
C2,C3 GND
22pF 8,22
D3
R3
4.7k VCC
3 DS18B20
D4 2 DQ VCC
GND
1
R4
4.7k VCC
3 DS18B20
D5 2 DQ VCC
GND
1
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D S1 8 D S1 8
B 20 B 20
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
ปัญหาการจาลองการทางานของไลบรารี่ DallasTemperature.h
ในใบงานที่ผา่ นมาการจาลองการทางานสามารถจาลองได้ปกติไม่มีขอ้ ผิดพลาดใด ๆ แต่สาหรับ
ใบงานนี้ มีการใช้ไลบรารี่ DallasTemperature.h เพื่ออ่านค่าอุ ณหภู มิจากไอซี DS18B20 จะไม่สามารถ
อ่านค่าได้แม้วา่ โค้ดนั้นสามารถทดลองในวงจรจริ งได้ก็ตาม ทั้งนี้เกิดจากเวอร์ ชนั่ ของโปรแกรม Arduino
IDE ซึ่งถ้าหากต้องการที่จะจาลองการทางานเพื่อดูผลการทางานจะต้องไปใช้เวอร์ ชนั่ 1.6.5
(a) เมื่อใช้ Arduino IDE เวอร์ ชนั่ ที่สูงกว่า 1.6.5 (b) เมื่อใช้ Arduino IDE V. 1.6.5
รู ปที่ 4.9-5 ผลการทดลองในโปรแกรมจาลองการทางานจาก Arduino IDE ต่างเวอร์ ชนั่
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขี ยนโปรแกรมแสดงค่าอุณหภูมิที่วดั จากไอซี DS18B20 จานวน 1 ตัวโดยแสดงผลที่
จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
อ่ านค่าจากไอซี
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1,2 รวมไฟล์ไลบรารี่ OneWire.h และ DallasTemperature.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 3 ประกาศใช้งานไลบรารี่ OneWire พร้อมกาหนดชื่ออุปกรณ์และขาพอร์ ตที่เชื่ อมต่อ
- บรรทัดที่ 4 ประกาศใช้งานไลบรารี่ DallasTemperature พร้อมกาหนดชื่ออุปกรณ์และขาพอร์ ตที่
เชื่อมต่อ
- บรรทัดที่ 5 ประกาศตัวแปรเก็บอุณหภูมิที่สามารถเก็บทศนิยมได้
- บรรทัดที่ 6 ประกาศตัวแปรฟังก์ชนั่ รองสาหรับอ่านค่าอุณหภูมิจากไอซี DS18B20
- บรรทัดที่ 9 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 11 สั่งให้อุปกรณ์เริ่ มทางาน
- บรรทัดที่ 15 เรี ยกใช้งานฟังก์ชนั่ รองให้อ่านค่าอุณภูมิ
- บรรทัดที่ 17 แสดงผลอุณภูมิจากตัวแปรที่เก็บค่าทางจอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
- บรรทัดที่ 21-25 ฟังก์ชนั่ รองที่มีหน้าที่อ่านค่าอุณภูมิ
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus (ใช้ Arduino IDE v. 1.6.5 ในการคอมไพล์)
2. ทดลองด้วยวงจรจริ ง
3. ทดลองให้อุณหภูมิที่ตวั ไอซี เปลี่ยนแปลงแล้วสังเกตผล
136 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
อ่ านค่าจากไอซี
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1,2 รวมไฟล์ไลบรารี่ OneWire.h และ DallasTemperature.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 3 ประกาศใช้งานไลบรารี่ OneWire พร้ อมกาหนดชื่ ออุปกรณ์ ตวั ที่ 1 และขาพอร์ ตที่
เชื่อมต่อ
ใบงานที่ 4.9 การเขียนโปรแกรมใช้งานไอซีวดั อุณหภูมิ DS18B20 137
- บรรทัดที่ 4 ประกาศใช้งานไลบรารี่ OneWire พร้ อมกาหนดชื่ ออุปกรณ์ ตวั ที่ 2 และขาพอร์ ตที่
เชื่อมต่อ
- บรรทัดที่ 5 ประกาศใช้งานไลบรารี่ DallasTemperature พร้อมกาหนดชื่ ออุปกรณ์ตวั ที่ 1 และขา
พอร์ตที่เชื่อมต่อ
- บรรทัดที่ 6 ประกาศใช้งานไลบรารี่ DallasTemperature พร้อมกาหนดชื่ ออุปกรณ์ตวั ที่ 2 และขา
พอร์ตที่เชื่อมต่อ
- บรรทัดที่ 7,8 ประกาศตัวแปรเก็บอุณหภูมิที่อ่านได้จากอุปกรณ์ตวั ที่ 1 และ 2 ตามลาดับ
- บรรทัดที่ 9 ประกาศตัวแปรฟังก์ชนั่ รองสาหรับอ่านค่าอุณหภูมิจากไอซี DS18B20
- บรรทัดที่ 12 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 14,15 สั่งให้อุปกรณ์ตวั ที่ 1 และ 2 เริ่ มทางาน
- บรรทัดที่ 19 เรี ยกใช้งานฟังก์ชนั่ รองให้อ่านค่าอุณภูมิ
- บรรทั ด ที่ 21 แสดงผลอุ ณ ภู มิ จ ากตัว แปรที่ เ ก็ บ ค่ า อุ ณ หภู มิ จ ากไอซี ต ัว ที่ 1 โดยแสดงผลที่
จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
- บรรทั ด ที่ 22 แสดงผลอุ ณ ภู มิ จ ากตัว แปรที่ เ ก็ บ ค่ า อุ ณ หภู มิ จ ากไอซี ต ัว ที่ 2 โดยแสดงผลที่
จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
- บรรทัดที่ 21-25 ฟั งก์ชนั่ รองที่มีหน้าที่อ่านค่าอุณภูมิโดยค่าที่ อ่านได้เก็บลงในตัวแปรที่ใช้เก็บ
อุณหภูมิที่ประกาศไว้โดยเป็ นประเภทตัวแปรโกลบอล
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus (ใช้ Arduino IDE v. 1.6.5 ในการคอมไพล์)
2. ทดลองด้วยวงจรจริ ง
3. ทดลองให้อุณหภูมิที่ตวั ไอซีเปลี่ยนแปลงแล้วสังเกตผล
9. สรุปผลการปฏิบัติงาน
138 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
D3
R3
4.7k VCC
3 DS18B20
D4 2 DQ VCC
GND
1
R4
4.7k VCC
3 DS18B20
D5 2 DQ VCC
GND
1
GND
ใบงานที่ 4.10
การเขียนโปรแกรมวัดระยะด้ วยโมดูลอัลตร้ าโซนิค
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมวัดระยะด้วยโมดูลอัลตร้าโซนิคได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมวัดระยะด้วยโมดูลอัลตร้าโซนิคได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 4 ตัว
2.2 LED 3mm 4 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. โมดูลอัลตร้าโซนิค HC-SR04 1 ตัว
5. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
6. สายเชื่อมต่อวงจร 1 ชุด
7. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
140 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
เสี ยงเป็ นคลื่นชนิดหนึ่งที่สามารถเดินทางผ่านอากาศได้ดงั นั้นถ้าใช้คุณสมบัติน้ ีมาสร้างเครื่ องวัด
ระยะทางโดยอาศัยการเดินทางของเสี ยงผ่านอากาศก็สามารถทาได้เช่นกัน เนื่ องจากความถี่เสี ยงจะมีช่วง
ของความถี่ช่วงหนึ่งที่มนุษย์สามารถได้ยินเสี ยงได้คืออยูใ่ นช่วง 20Hz-20kHz ดังนั้นหากใช้เสี ยงในช่วงนี้
ก็ จะเป็ นการรบกวนการได้ยินของมนุ ษ ย์ด้วย ดัง นั้นจึ ง ต้องใช้ค วามถี่ ที่ สู ง กว่า ความถี่ เสี ย งปกติ เพื่อ
หลี กเลี่ยงการได้ยินของมนุ ษย์ในปั จจุบนั ได้มีการใช้ความถี่ 40kHz เพื่อใช้ในการวัดระยะทางความถี่น้ ี
เป็ นความถี่ที่สูงกว่าเสี ยงที่มนุษย์ได้ยนิ จึงเรี ยกเสี ยงนี้วา่ “อัลตร้าโซนิค” โมดูลวัดระยะทางโดยใช้อลั ตร้า-
โซนิ คจะประกอบด้วยลาโพงที่ส่งคลื่ นเสี ยงและไมโครโฟนที่ทาหน้าที่เป็ นตัวรับเสี ยง แต่เนื่ องจากตัว
ลาโพงในโมดู ลมีขนาดเล็กเสี ยงที่ส่งออกจึงมีเสี ยงเบาทาให้ระยะของการวัดไม่ไกลนักซึ่ งจะมีระยะไม่
เกิน 5 เมตรและมีมุมที่ใช้งานแคบดังรู ป
การเขียนโค้ดโปรแกรมเพื่อวัดระยะทางด้วยโมดูลอัลต้าโซนิ คสามารถเขียนโดยไม่พึงไลบรารี่ ก็
ได้ หรื อถ้าหากต้องการใช้ไลบรารี่ เพื่อให้การเขียนโค้ดง่ายขึ้นสามารถดาวน์โหลดได้ที่
ไลบรารี่ แหล่งดาวน์โหลด
Ultrasonic.h https://github.com/JRodrigoTech/Ultrasonic-HC-SR04
ใบงานที่ 4.10 การเขียนโปรแกรมวัดระยะด้วยโมดูลอัลตร้าโซนิค 141
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชั่นที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val); Serial.print(val, format);
7. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิมพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val); Serial.println(val, format);
8. ฟังก์ชั่นวัดความกว้างของพัลซ์ โดยค่าที่วดั ได้เป็ นเวลาหน่วยเป็ นไมโครวินาที (uS) ผูใ้ ช้งาน
สามารถระบุลอจิกของสัญญาณที่ใช้ในการวัดได้ เช่ นเมื่อกาหนดลอจิกที่ใช้ตรวจจับเป็ น
HIGH ฟั งก์ชั่นจะเริ่ มนับเวลาเมื่ อขาสัญญาณที่ ตรวจจับ เป็ นลอจิ ก HIGH โดยนับเวลาไป
จนกว่าสัญญาณจะเป็ นเป็ น LOW เวลาที่ได้เป็ นตัวเลขที่มีหน่วยเป็ นไมโครวินาที รู ปฟั งชัน่
เป็ นดังนี้
pulseIn(pin, value);
pin: ขาพอร์ตที่ใช้ในการตรวจจับสัญญาณพัลซ์
value: ค่าลอจิ กที่ ใช้กาหนดเพื่ อใช้ในนับเวลาโดยฟั ง ก์ชั่นจะหยุดนับ เมื่ อค่ า
ลอจิกเป็ นตรงข้าม
144 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ตัวอย่างเช่ น
duration = pulseIn(12, HIGH);
หมายถึ ง วัด ความกว้า งของพัล ซ์ โ ดยการจับ เวลา เมื่ อ ขา D12 เป็ นลอจิ ก HIGH
จนกระทั่ง ขา D12 มี ก ารเปลี่ ย นลอจิ ก เป็ น LOW โดยค่ า ที่ ไ ด้เ ป็ นตัว เลขหน่ ว ยเป็ น
ไมโครวินาทีแล้วเอาไปเก็บไว้ในตัวแปร duration
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
VCC
R2,R3 1
USB to UART (TTL Level) 1k VCC
HC-SR04
DTR 3 15 2
RXD D1(TXD) D9 Trig
2 14 3
TXD D0(RXD) D8
+5V Echo
GND 4
3V3 GND
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
VCC
1
VCC
HC-SR04
2
D9 Trig
3
D8 Echo
4
GND
GND
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
GND
Echo
Trig
VCC
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
HC-SR04
C
C
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
จับเวลาที่ขา Echo
คานวณเป็ นระยะทาง
แสดงผล
148 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1,2 กาหนดชื่ อ TRIGGER_PIN ให้แทน 9 และ ECHO_PIN ให้แทน 8 (ขา Triger ต่อ
เข้าที่ขา D9 และขา Echo ของโมดูลอัลตร้าโซนิคต่อเข้าที่ขา D8 ของ Arduino)
- บรรทัดที่ 5 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 6,7 กาหนดโหมดการทางานของขาที่ใช้เชื่อมต่อกับโมดูลอัลตราโซนิค
- บรรทัดที่ 11 ประกาศตัวแปรที่ใช้ประกอบการคานวณระยังทาง
- บรรทัดที่ 12-16 ส่ งสัญญาณพัลส์ไปกระตุน้ การทางานของโมดูลอัลตร้าโซนิค
- บรรทัดที่ 17 เก็บค่าเวลาที่มีสัญญาณสะท้อนกลับ
- บรรทัดที่ 18 คานวณระยะทางที่วดั ได้
- บรรทัดที่ 19 แสดงค่าระยะทางที่วดั ได้ ที่จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองวัดระยะวัดถุในตาแหน่งที่ต่าง ๆ กันสังเกตค่าที่อ่านได้
ใบงานที่ 4.10 การเขียนโปรแกรมวัดระยะด้วยโมดูลอัลตร้าโซนิค 149
การทดลองที่ 2 เขี ย นโปรแกรมวัด ระยะโดยการใช้โ มดู ล อัล ตร้ า โซนิ ค แบบใช้ไ ลบรารี่ แสดงผลที่
จอคอมพิวเตอร์ ผา่ นทางพอร์ ตอนุกรม
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
อ่ านค่าระยะทาง
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Ultrasonic.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 ประกาศใช้งานไลบรารี่ พร้ อมระบุ ขาพอร์ ตที่ใช้เชื่ อมต่อกับโมดู ลและกาหนดชื่ อ
เรี ยกโมดูลตัวอย่างนี้กาหนดชื่อเรี ยกเป็ น ultrasonic
- บรรทัดที่ 4 กาหนดอัตราเร็ วในการสื่ อสารข้อมูลของพอร์ ตอนุกรม
- บรรทัดที่ 8 เรี ยกใช้งานไลบรารี่ พร้อมแสดงค่าที่วดั ได้ที่จอคอมพิวเตอร์ ผา่ นพอร์ ตอนุกรม
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองวัดระยะวัดถุในตาแหน่งที่ต่าง ๆ กันสังเกตค่าที่อ่านได้
4. เปรี ยบเทียบความแตกต่างของการการวัดระหว่างโค้ดที่ใช้กบั ไม่ใช้ไลบรารี่
9. สรุปผลการปฏิบัติงาน
150 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
1.0m s 1.5m
0.5m s 1.0m
0s 0.5m
วงจรที่ใช้ทดลองเป็ นดังรู ป
ARDUINO
VCC
1
VCC
HC-SR04
2
D9 Trig
3
D8 Echo
4
GND
R1-R4
220 LED1-LED4
D5
D4
D3
D2
GND
ใบงานที่ 4.11
การเขียนโปรแกรมควมคุมดีซีมอเตอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมควมคุมดีซีมอเตอร์ ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมควมคุมดีซีมอเตอร์ ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ไอซี L298D 1 ตัว 2.4 Potentiometer 10k 1 ตัว
2.2 ไดโอด 1N4001 1 ตัว 2.5 มอเตอร์ไฟตรง 6V 1 ตัว
2.3 ตัวเก็บประจุ 100 uF 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
152 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
มอเตอร์ ไฟฟ้ ากระแสตรง (DC motor) เป็ นเครื่ องกลไฟฟ้ าชนิ ดหนึ่ งที่มีหน้าที่เปลี่ยนพลังงาน
งานไฟฟ้าไปเป็ นพลังงานกล เมื่อได้รับการป้ อนพลังงานไฟฟ้าที่เป็ นไฟฟ้ากระแสตรงจะทาให้แกนของ
มอเตอร์ หมุน แต่เนื่ องจากการทางานของมอเตอร์ ไฟฟ้ ากระแสตรงต้องการกระแสไฟฟ้ าในปริ มาณสู ง
กว่า ความสามารถที่ ไ มโครคอนโทรลเลอร์ จะจ่ า ยโดยตรงได้ จึ งจาเป็ นที่ จะต้องมี วงจรขับ มอเตอร์
โดยเฉพาะเพื่อทาหน้าที่ขบั มอเตอร์ให้ทางานได้ตามต้องการ
S1 S3
Vs M
S2 S4
S1 S3 S1 S3
Vs M Vs M
S2 S4 S2 S4
(a) (b)
+Vs
RY1 M RY2
(a) (b)
การใช้ง านจริ ง มี ไ อซี ที่ ถู ก ออกแบบมาเพื่ อ การนี้ โดยเฉพาะมี คุ ณ สมบัติ เ ป็ นวงจรขับ แบบ
H-Bridge ในกรณี ที่ใช้กบั มอเตอร์ ไฟฟ้ ากระแสตรงขนาดเล็กที่ใช้กระแสไม่เกิ น 600 มิลลิแอมป์ จะใช้
ไอซีเบอร์ L293D แต่หากมอเตอร์ ไฟฟ้ ากระแสตรงใช้กระแสสู งเกินค่าดังกล่าวแต่ไม่เกิน 4 แอมป์ จะต้อง
ใช้ไอซี เบอร์ L298 ในใบงานนี้ ใช้มอเตอร์ ไฟฟ้ ากระแสตรงขนาดเล็กซึ่ งจะใช้ไอซี เบอร์ L293D ในการ
ทดลองโดยโครงสร้างของไอซีเป็ นดังรู ปที่ 4.11-7
EN3,4
GND
GND
VCC
4A
3A
4Y
3Y
16 15 14 13 12 11 10 9
1 2 3 4 5 6 7 8
GND
GND
VS
EN1,2
1A
1Y
2Y
2A
pinMode(pin, mode)
pin: หมายเลขขาที่ตอ้ งการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP
2. ฟังก์ชั่นส่ งค่ าลอจิกดิจิทลั ไปยังขาพอร์ ต ค่า HIGH เป็ นการส่ งลอจิก 1 และค่า LOW เป็ นการ
ส่ งลอจิก 0 ออกไปยังขาพอร์ ต ซึ่ งฟังก์ชนั่ นี้จะทางานได้ตอ้ งมีการใช้ฟังก์ชนั่ pinMode ก่อน
digitalWrite(pin, value)
pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต
3. ฟั งก์ ชั่ นหน่ ว งเวลา หรื อฟั ง ก์ชั่นหยุดค้า ง การใช้ง านสามารถก าหนดตัว เลขของเวลาที่
ต้องการหยุดค้างโดยตัวเลขที่ใส่ เป็ นตัวเลขของเวลาหน่วยเป็ นมิลลิวินาที ตัวเลขของเวลาที่
ใส่ ได้สูงสุ ดคือ 4,294,967,295 ซึ่งเป็ นขนาดของตัวแปร unsigned long
delay(ms)
ms: ตัวเลขที่หยุดค้างของเวลาหน่วยมิลลิวนิ าที (unsigned long)
5. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชั่นที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val) Serial.print(val, format)
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิมพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val) Serial.println(val, format)
156 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
7. ฟั งก์ ชั่ น อ่ า นสั ญญาณแอนาลอก เป็ นฟั ง ก์ชั่นอ่ า นสั ญ ญาณแอนาลอกที่ ป รากฏอยู่ที่ ข าที่
ต้องการอ่านนั้น ๆ ค่าที่อ่านได้จะอยูใ่ นช่วง 0-1023 สาหรับแรงดันของสัญญาณแอนาลอกที่
0-5V ดังนั้นต้องใช้ตวั แปรที่เป็ น int สาหรับเก็บค่าที่อ่านได้
analogRead(pin)
pin: ขาพอร์ ตแอนาลอกที่ตอ้ งการอ่านค่าสัญญาณแอนาลอก
8. ฟังก์ชั่นให้ ขาพอร์ ตส่ งสั ญญาณ PWM เป็ นฟังก์ชนั่ ที่ให้ขาพอร์ ตดิจิทลั ขา 3, 5, 6, 9, 10 และ
11 (ซึ่ งเป็ นขาที่ส่งสัญญาณ PWM ได้) ส่ งสัญญาณ PWM ออกตามค่าดิ วติ้ไซเคิลที่กาหนด
ด้วยความถี่ 490 Hz
analogWrite(pin, value)
pin: ขาพอร์ตดิจิทลั ที่ตอ้ งการส่ งสัญญาณ PWM
value: ค่าดิวติ้ไซเคิลที่อยูร่ ะหว่าง 0 ถึง 255
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
VCC
VCC
VS
0.1uF M1
(PWM)D11 17 1 EN1,2 1Y 3 M
D12 18 2 1A 2Y 6
D13 19 7 2A
R2,R3 M2
USB to UART (TTL Level) 1k (PWM)D10 16 9 EN3,4
3
D9 15 10 3A 3Y 11
DTR
RXD D1(TXD) M
2
TXD D0(RXD) D8 14 15 4A
4Y 14
+5V
GND
GND
GND
GND
GND
3V3
4 5 12 13 L293D
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
VS
M1
(PWM)D11 1 EN1,2 1Y 3 M
D12 2 1A
7 2Y 6
D13 2A
9 EN3,4 M2
(PWM)D10
D9 10 3A 3Y 11 M
D8 15 4A
4Y 14
GND
GND
GND
GND
GND
4 5 12 13 L293D
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
ULN2803A
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมควบคุมการทางานของดี ซีมอเตอร์ โดยควบคุ มทิศทางการหมุนให้มีท้ งั
หมุนตามเข็มนาฬิกา (CW) ทวนเข็มนาฬิกา (CCW) และหยุดหมุน การกลับทิศทางการหมุนจะต้องมีการ
สัง่ ให้หยุดหมุนก่อนช่วงเวลาหนึ่งเพื่อไม่ให้เกิดกระแสสู งกว่าปกติที่เกิดจากการต้านทิศทางการหมุน
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
มอเตอร์ 1แสดงผล
และ 2 หยุดหมุน
18 digitalWrite(IN1,LOW);digitalWrite(IN2,HIGH);delay(3000);
19 digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH);delay(2000);
20 AllStop();
21 digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);delay(3000);
22 digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW);delay(2000);
23 AllStop();
24 }
25 void AllStop(void)
26 {
27 digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);
28 digitalWrite(IN3,LOW);digitalWrite(IN4,LOW);
29 delay(250);
30 }
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1,2 กาหนดชื่อ EN1, EN2 ให้แทน 11, 10 (เป็ นขา Enable ของมอเตอร์ตวั ที่ 1 และ 2 ที่
ต่ออยูก่ บั ขา D11, D10 ของ Arduino)
- บรรทัดที่ 3,4 กาหนดชื่ อ IN1, IN2 ให้แทน 12, 13 (เป็ นขาควบคุมการหมุนของมอเตอร์ ตวั ที่ 1
ต่ออยูก่ บั ขา D12, D13 ของ Arduino)
- บรรทัดที่ 5,6 กาหนดชื่ อ IN3, IN4 ให้แทน 9, 8 (เป็ นขาควบคุมการหมุนของมอเตอร์ ตวั ที่ 2 ต่อ
อยูก่ บั ขา D12, D13 ของ Arduino)
- บรรทัดที่ 7 ประกาศรู ปแบบฟังก์ชนั่ รองที่ใช้หยุดการหมุนของมอเตอร์ ท้ งั 2 ตัว
- บรรทัดที่ 10-12 กาหนดโหมดให้กบั ขาพอร์ ตทางานเป็ นเอาต์พุทพอร์ ต
- บรรทัดที่ 13 สั่งให้ไอซี L293D พร้อมการทางานโดยการกระตุน้ ที่ขา Enable
- บรรทัดที่ 14 เรี ยกใช้ฟังก์ชนั่ รองหยุดการหมุนของมอเตอร์
- บรรทัดที่ 18 สั่งให้มอเตอร์ ตวั ที่ 1 หมุนตามเข็มเป็ นเวลา 3 วินาที
- บรรทัดที่ 19 สั่งให้มอเตอร์ ตวั ที่ 2 หมุนตามเข็มเป็ นเวลา 2 วินาที
- บรรทัดที่ 20 เรี ยกใช้ฟังก์ชนั่ รองหยุดการหมุนของมอเตอร์
- บรรทัดที่ 21 สั่งให้มอเตอร์ ตวั ที่ 1 หมุนทวนเป็ นเวลา 3 วินาที
- บรรทัดที่ 22 สั่งให้มอเตอร์ ตวั ที่ 2 หมุนทวนเข็มเป็ นเวลา 2 วินาที
- บรรทัดที่ 23 เรี ยกใช้ฟังก์ชนั่ รองหยุดการหมุนของมอเตอร์
- บรรทัดที่ 25-30 ฟังก์ชนั่ รองที่สั่งงานให้หยุดการหมุนของมอเตอร์
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้มอเตอร์ทางานในรู ปแบบอื่น ๆ แล้วสังเกตผล
160 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
VCC
VS
M1
VCC (PWM)D11 1 EN1,2 1Y 3 M
D12 2 1A
7 2Y 6
D13 2A
A0 9 EN3,4 M2
(PWM)D10
10k D9 10 3A 3Y 11 M
D8 15 4A
4Y 14
GND
GND
GND
GND
GND
4 5 12 13 L293D
A B
แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโค้ดโปรแกรมควบคุม Arduino
1 #define EN1 11
2 #define EN2 10
3 #define IN1 12
4 #define IN2 13
5 #define IN3 9
6 #define IN4 8
7 #define POT A0
8 void AllStop(void);
9 void setup()
10 {
11 pinMode(EN1,OUTPUT);pinMode(EN2,OUTPUT);
12 pinMode(IN1,OUTPUT);pinMode(IN2,OUTPUT);
13 pinMode(IN3,OUTPUT);pinMode(IN4,OUTPUT);
14 AllStop();
15 }
ใบงานที่ 4.11 การเขียนโปรแกรมควมคุมดีซีมอเตอร์ 161
16 void loop()
17 {
18 int PWM;
19 for(int i=0;i<100;i++)
20 {
21 PWM=analogRead(POT);
22 PWM=map(PWM,0,1023,50,255);
23 analogWrite(EN1,PWM);analogWrite(EN2,PWM);
24 digitalWrite(IN1,LOW);digitalWrite(IN2,HIGH);delay(30);
25 digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH);delay(20);
26 }
27 AllStop();
28 for(int i=0;i<100;i++)
29 {
30 PWM=analogRead(POT);
31 PWM=map(PWM,0,1023,50,255);
32 analogWrite(EN1,PWM);analogWrite(EN2,PWM);
33 digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);delay(30);
34 digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW);delay(20);
35 }
36 AllStop();
37 }
38 void AllStop(void)
39 {
40 digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);
41 digitalWrite(IN3,LOW);digitalWrite(IN4,LOW);
42 delay(250);
43 }
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1,2 กาหนดชื่อ EN1, EN2 ให้แทน 11, 10 (เป็ นขา Enable ของมอเตอร์ ตวั ที่ 1 และ 2 ที่
ต่ออยูก่ บั ขา D11, D10 ของ Arduino)
- บรรทัดที่ 3,4 กาหนดชื่ อ IN1, IN2 ให้แทน 12, 13 (เป็ นขาควบคุมการหมุนของมอเตอร์ ตวั ที่ 1
ต่ออยูก่ บั ขา D12, D13 ของ Arduino)
- บรรทัดที่ 5,6 กาหนดชื่ อ IN3, IN4 ให้แทน 9, 8 (เป็ นขาควบคุมการหมุนของมอเตอร์ ตวั ที่ 2 ต่อ
อยูก่ บั ขา D12, D13 ของ Arduino)
- บรรทัดที่ 7 กาหนดชื่อ POT ให้แทน A0 (เป็ นขาโพเทนธิ โอมิเตอร์ ต่ออยูก่ บั ขา A0 ของ Arduino)
- บรรทัดที่ 8 ประกาศรู ปแบบฟังก์ชนั่ รองที่ใช้หยุดการหมุนของมอเตอร์ ท้ งั 2 ตัว
- บรรทัดที่ 19-26 วนทาซ้ า 100 รอบ
- บรรทัดที่ 21-22 อ่านค่าจาก POT มาปรับค่าให้อยูใ่ นย่านที่จะส่ งค่า PWM ได้
- บรรทัดที่ 23 ส่ งสัญญาณ PWM เข้าที่ขา Enable ของไอซี L293D เพื่อให้สามารถปรับความเร็ ว
ในการหมุนได้
- บรรทัดที่ 24 สั่งให้มอเตอร์ ตวั ที่ 1 หมุนตามเข็มเป็ นเวลา 30 มิลลิวนิ าที
- บรรทัดที่ 25 สั่งให้มอเตอร์ ตวั ที่ 2 หมุนตามเข็มเป็ นเวลา 20 มิลลิวนิ าที
- บรรทัดที่ 27 เรี ยกใช้ฟังก์ชนั่ รองหยุดการหมุนของมอเตอร์
- บรรทัดที่ 28-37 มีข้ นั ตอนเดียวกันกับบรรทัดที่ 19-27 เพียงแต่สั่งให้มอเตอร์ หมุนทวนเข็ม
- บรรทัดที่ 38-43 ฟังก์ชนั่ รองที่สงั่ งานให้หยุดการหมุนของมอเตอร์
162 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมให้มอเตอร์หมุนในรู ปแบบอื่น ๆ แล้วสังเกตผล
9. สรุปผลการปฏิบัติงาน
VS
M1
10k
(PWM)D11 1 EN1,2 1Y 3 M
D12 2 1A
7 2Y 6
D13 2A
9 EN3,4 M2
VCC (PWM)D10
D9 10 3A 3Y 11 M
D8 15 4A
4Y 14
GND
GND
GND
GND
A1
10k
GND
4 5 12 13 L293D
ใบงานที่ 4.12
การเขียนโปรแกรมควมคุมสเต็ปเปอร์ มอเตอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมควมคุมสเต็ปเปอร์มอเตอร์ ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมควมคุมสเต็ปเปอร์มอเตอร์ ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ไอซี ULN2803 1 ตัว
2.2 สเต็ปเปอร์มอเตอร์ 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
164 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
สเต็ปเปอร์ มอเตอร์ หรื อที่บางคนเรี ยกว่าสเต็ปปิ้ งมอเตอร์ เป็ นมอเตอร์ ที่ทางานโดยอาศัยพลังงาน
จากไฟฟ้ ากระแสตรงเช่นเดียวกับมอเตอร์ กระแสตรง แต่มีความความแตกต่างจากมอเตอร์ กระแสตรงที่
เมื่ อ ป้ อ นไฟให้ ก ับ สเต็ป เปอร์ ม อเตอร์ จ ะขยับ เพี ย งเล็ ก น้อ ยเพื่ อ เข้า สเต็ป ในขณะที่ ม อเตอร์ ไฟฟ้ า
กระแสตรงทัว่ ไปจะหมุนตราบที่ยงั มีพลังงานจ่ายให้แก่ตวั มัน ทั้งนี้เป็ นเพราะโครงสร้างของสเต็ปเปอร์
มอเตอร์ นนั่ เอง โดย สเต็ปเปอร์ มอเตอร์ มีดว้ ยกัน 2 แบบคือ
1. Bipolar เป็ นสเต็ปเปอร์มอเตอร์ที่มีขดลวด 2 ขดมีสายไฟให้ต่อใช้งาน 4 เส้นดังรู ปที่ 4.12-1 (a)
2. Unipolar เป็ นสเต็ปเปอร์มอเตอร์ที่มีขดลวด 4 ขด (2 ขดแบบมีแท็ปกลาง) โดยมี 2 แบบ
2.1 แบบมีสายไฟให้ต่อใช้งาน 5 เส้น ดังรู ปที่ 4.12-1 (b)
2.2 แบบมีสายไฟให้ต่อใช้งาน 6 เส้น ดังรู ปที่ 4.12-1 (c)
M M M
+VS
A B C D
C 3 16 3 16
B
D 4 15 4 15
5 14 5 14
C
6 13 6 13
7 12 7 12
D
8 11 8 11
9 10 9 10
(a) (b)
1. แบบเต็มสเต็ป 1 เฟส (Full step 1 phase) เป็ นการขับครั้งละ 1 เฟสเรี ยงกันไป ทาให้มอเตอร์
หมุนไปครั้งละ 1 สเต็ป ถ้ามอเตอร์ มีคุณสมบัติ 1.8 องศาต่อสเต็ปก็จะหมุ นไปครั้งละ 1.8 องศา โดยมี
ขั้นตอนขับเฟสดังรู ปที่ 4.12-4
A A A A
D B D B D B D B
C C C C
(a) (b) (c) (d)
2. แบบเต็มสเต็ป 2 เฟส (Full step 2 phase) เป็ นการขับครั้งละ 2 เฟส โดยมีคุณสมบัติที่ดีข้ ึนคือ
แรงบิดมากขึ้นเนื่ องจากมีการขับครั้งละ 2 เฟส ทาให้เกิดสนามแม่เหล็กมากขึ้นนัน่ เอง แต่มุมในการหมุน
จะมีค่าเท่ากันกับแบบเต็มสเต็ป 1 เฟส โดยมีข้ นั ตอนขับเฟสดังรู ปที่ 4.12-5
A A A A
D B D B D B D B
C C C C
(a) (b) (c) (d)
A A A A
D B D B D B D B
C C C C
(a) (b) (c) (d)
A A A A
D B D B D B D B
C C C C
(e) (f) (g) (h)
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
OUT4 15
VCC
COM 10
GND
GND 9
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
ULN2803A
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมควบคุมการทางานของสเต็ปเปอร์ มอเตอร์ โดยให้หมุนในทิศทางเดียวเป็ น
จานวน 360 องศา (ตัวอย่างโปรแกรมใช้สเต็ปเปอร์ มอเตอร์ ที่มีขนาด 1.8 องศาต่อสเต็ป)
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
กาหนดรูปแบบการขับสเต็ป
ครบ 360 อง า?
จริ ง
เท็จ
สั ่งขับสเต็ป ัดไป STOP
ใบงานที่ 4.12 การเขียนโปรแกรมควมคุมสเต็ปเปอร์มอเตอร์ 171
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่ อ phaseA ให้แทน 4 (เป็ นขาเฟส A ของสเต็ปเปอร์ มอเตอร์ ที่เชื่ อมต่ออยู่
กับขา D4 ของ Arduino)
- บรรทัดที่ 2 กาหนดชื่อ phaseB ให้แทน 5 (เป็ นขาเฟส B ของสเต็ปเปอร์ มอเตอร์ ที่เชื่ อมต่ออยูก่ บั
ขา D4 ของ Arduino)
- บรรทัดที่ 3 กาหนดชื่อ phaseC ให้แทน 6 (เป็ นขาเฟส C ของสเต็ปเปอร์ มอเตอร์ ที่เชื่ อมต่ออยูก่ บั
ขา D4 ของ Arduino)
- บรรทัดที่ 4 กาหนดชื่ อ phaseD ให้แทน 7 (เป็ นขาเฟส D ของสเต็ปเปอร์ มอเตอร์ ที่เชื่ อมต่ออยู่
กับขา D4 ของ Arduino)
- บรรทัดที่ 5 ประกาศตัวแปรแบบอาร์ เรย์เก็บค่าตาแหน่งของขา Arduino ที่เชื่อมต่อกับมอเตอร์
- บรรทัดที่ 6-10 ประกาศตัวแปรแบบอาร์ เรย์เก็บค่ารู ปแบบการขับสเต็ปเปอร์ มอเตอร์ เป็ นแบบ
ฟูลสเต็ป 1 เฟส
- บรรทัดที่ 14-17 กาหนดโหมดให้กบั ขาพอร์ ตทางานเป็ นเอาต์พุทพอร์ ต
172 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
9. สรุปผลการปฏิบัติงาน
OUT4 15
VCC
COM 10
GND
GND 9
ใบงานที่ 4.13
การเขียนโปรแกรมควบคุมเซอร์ โวมอเตอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 Potentiometer 10 k 1 ตัว 2.3 ตัวต้านทาน 220 ohm 1 ตัว
2.2 คันโยกแบบตัวต้านทาน 1 ตัว 2.4 LED 3mm 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. อาร์ซีเซอร์โวมอเตอร์ 2 ตัว
6. สายเชื่อมต่อวงจร 1 ชุด
7. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
174 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
เซอร์ โวมอเตอร์ เป็ นมอเตอร์ ที่ ส ามารถควบคุ มการเคลื่ อนที่ ไ ปยังมุ มที่ ต้องการได้ด้วยวงจร
ควบคุมแบบป้ อนกลับภายใน เซอร์ โวมอเตอร์ ขนาดเล็กนิ ยมใช้กนั มากในเครื่ องเล่นบังคับวิทยุ เช่น รถ
เรื อ เครื่ องบิน เซอร์ โวมอเตอร์ ประกอบขึ้นจากส่ วนประกอบหลัก ๆ 3 ส่ วนคือ
1. มอเตอร์ไฟฟ้ากระแสตรงขนาดเล็ก
2. ชุดเกียร์ ทดรอบ
3. วงจรควบคุม
2. ฟั งก์ ชั่นส่ งค่ าลอจิกดิจิตอลไปยังขาพอร์ ต ค่า HIGH เป็ นการส่ งลอจิก 1 และค่า LOW เป็ น
การส่ งลอจิก 0 ออกไปยังขาพอร์ต ฟังก์ชนั่ นี้ทางานได้ตอ้ งมีการใช้ฟังก์ชนั่ pinMode ก่อน
digitalWrite(pin, value);
3. ฟั ง ก์ ชั่ น หน่ ว งเวลาหรื อ ฟั ง ก์ ชั่ น หยุ ด ค้ า ง การใช้ง านสามารถก าหนดตัวเลขของเวลาที่
ต้องการหยุดค้างโดยตัวเลขที่ใส่ เป็ นตัวเลขของเวลาหน่วยเป็ นมิลลิวินาที ตัวเลขของเวลาที่
ใส่ ได้สูงสุ ดคือ 4,294,967,295 ซึ่งเป็ นขนาดของตัวแปร unsigned long
delay(ms);
ms: ตัวเลขที่หยุดค้างของเวลาหน่วยมิลลิวนิ าที (unsigned long)
4. ฟั งก์ ชั่นอ่ านสั ญญาณแอนาลอก เป็ นฟั งก์ชั่นที่ อ่านสัญญาณแอนาลอกที่ ปรากฏอยู่ที่ ข าที่
ต้องการอ่านนั้น ๆ ค่าที่อ่านได้จะอยูใ่ นช่วง 0-1023 สาหรับแรงดันของสัญญาณแอนาลอกที่
0-5V ดังนั้นต้องใช้ตวั แปรที่เป็ น int สาหรับเก็บค่าที่อ่านได้
analogRead(pin);
5. ฟั งก์ ชั่นแปลงช่ วงตัวเลข เป็ นฟั งก์ชนั่ ทาหน้าที่เปลี่ ยนแปลงค่าที่ได้รับจากตัวแปรจากช่วง
ตัวเลขระหว่างค่าหนึ่งถึงอีกค่าหนึ่งไปสู่ ช่วงตัวเลขใหม่ที่ตอ้ งการ
map(value, fromLow, fromHigh, toLow, toHigh);
1. ฟั งก์ ชั่ น ประกาศชื่ อ เซอร์ โวมอเตอร์ ใช้ใ นการระบุ ชื่ อ ใช้แทนเซอร์ โวมอเตอร์ ที่ ใ ช้ง าน
รู ปแบบเป็ นดังนี้
Servo myservo;
หมายถึง ต่อไปในโปรแกรมจะใช้ชื่อ myservo ในการเรี ยกใช้งานเซอร์ โวมอเตอร์ ที่กาลังต่อใช้
งานกับ Arduino
ใบงานที่ 4.13 การเขียนโปรแกรมควมคุมเซอร์โวมอเตอร์ 177
Potentiometer
A5 28 10k
R2,R3
USB to UART (TTL Level) 1k
DTR 3
RXD D1(TXD)
2
TXD D0(RXD)
+5V
GND
3V3
VCC RC Servo Motor
D9 15 Signal
VCC
GND
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
Potentiometer
A5 10k
D9 Signal
VCC
GND
GND
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
C
C
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมควบคุมการเคลื่อนที่ของเซอร์ โวมอเตอร์ ไปที่มุมต่าง ๆ โดยรับค่าจากการ
หมุนโพเทนธิโอมิเตอร์
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
อ่ านค่าจาก POT
แปลงย่ านตัวเลข
ขับเซอร์ โวมอเตอร์
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Servo.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 กาหนดชื่อ pot ให้แทน 5 (โพเทนธิ โอมิเตอร์ เชื่ อมต่ออยูก่ บั ขา A5 ของ Arduino)
- บรรทัดที่ 3 ประกาศใช้งานไลบรารี่ โดยกาหนดชื่อ myservo ให้แทนเซอร์โวมอเตอร์ ที่ใช้งาน
- บรรทัดที่ 6 กาหนดขาพอร์ ตที่ใช้เชื่อมต่อกับเซอร์ โวมอเตอร์
- บรรทัดที่ 10 อ่านค่าแอนาลอกจากโพเทนธิ โอมิเตอร์ เอามาเก็บไว้ในตัวแปร val
- บรรทัดที่ 11 เปลี่ยนย่านตัวเลขจากค่าแอนาลอก 0-1023 ไปเป็ น 0-180
- บรรทัดที่ 12 สั่งให้เซอร์ โวขยับไปยังมุมที่ได้จากค่าในตัวแปร val
180 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองปรับแก้ค่าย่านตัวเลขให้เป็ นค่าอื่นแล้วสังเกตผล
9. สรุปผลการปฏิบัติงาน
วงจรที่ใช้ทดลอง
VCC ARDUINO VCC
GND
5V +5V
A3 VRx
VRy
SW
A5
D7
VCC RC Servo Motor
D8 Signal
VCC
D9 GND
R1 220
D10 RC Servo Motor
VCC
Signal
LED1 VCC
GND GND
ใบงานที่ 4.14
การเขียนโปรแกรมใช้ งานอินเตอร์ รัพท์
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมใช้งานอินเตอร์ รัพท์ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมใช้งานอินเตอร์รัพท์ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 6 ตัว 2.3 ตัวเก็บประจุ 1uF 2 ตัว
2.2 LED 3mm 4 ตัว 2.4 Tack Switch 2 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
182 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
การขัดจังหวะการทางานหรื อเรี ยกทับศัพท์วา่ การอินเตอร์ รัพต์ (Interrupt) เป็ นการขัดจังหวะการ
ทางานปกติ (ประมวลผลในโปรแกรมหลัก) ของไมโครคอนโทรลเลอร์ โดยจะกระโดดไปทางานใน
โปรแกรมตอบสนองการอินเตอร์ รัพท์ในตาแหน่งที่ตอบสนองการอินเตอร์ รัพท์ (Interrupt Vector) ชนิด
นั้น ๆ เมื่ อทางานในโปรแกรมตอบสนองการอิ นเตอร์ รัพท์เสร็ จสิ้ นซี พียูจะกระโดดกลับมาทางานใน
ตาแหน่ ง เดิ ม ของโปรแกรมหลัก ต่ อไป ไมโครคอนโทรลเลอร์ ใ นทุ ก ตระกู ล จะมี อิน เตอร์ รัพ ท์ที่ ไ ม่
สามารถปฏิเสธได้ 1 ชนิดได้แก่ Reset กล่าวคือเมื่อซี พียไู ด้รับสัญญาณอินเตอร์ รัพท์ชนิดนี้ไม่วา่ จะทางาน
ในคาสั่งใดอยูก่ ็ตามจะต้องกลับไปทางานในตาแหน่ง 0x0000 ซึ่ งเป็ นตาแหน่งแรกของโปรแกรม บอร์ ด
Arduino ในรุ่ นที่ใช้ไมโครคอนโทรลเลอร์ ตระกูล AVR เบอร์ Atmega328 สามารถอินเตอร์ รัพท์ได้จาก
หลายแหล่งโดยแต่ละแหล่งมีตาแหน่งตอบสนองการอินเตอร์ รัพท์ที่แตกต่างกันไปดังตารางที่ 4.14-1
0V
closed open
Switch position
VCC
Switch contacts
debouncing
R
10k 5V
SW VOUT
C
0V
closed open
Switch position
2. ฟังก์ชั่นส่ งค่ าลอจิกดิจิทลั ไปยังขาพอร์ ต ค่า HIGH เป็ นการส่ งลอจิก 1 และค่า LOW เป็ นการ
ส่ งลอจิก 0 ออกไปยังขาพอร์ ต ฟังก์ชนั่ นี้จะทางานได้ตอ้ งมีการใช้ฟังก์ชนั่ pinMode ก่อน
digitalWrite(pin, value);
pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต
delay(ms);
ms: ตัวเลขที่หยุดค้างของเวลาหน่วยมิลลิวนิ าที (unsigned long)
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชั่นที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val) Serial.print(val, format)
7. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิ มพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val) Serial.println(val, format)
1. ฟั งก์ ชั่นเปิ ดการใช้ งานอินเตอร์ รัพท์ จากขาอินเตอร์ รัพท์ ภายนอก ค่าเริ่ มต้นของ Arduino
ไม่ได้เปิ ดการใช้งานส่ วนนี้ ไว้โดยขาใช้งานได้นาไปใช้งานเป็ นขาดิจิทลั ปกติ ในทางปฏิบตั ิ
โปรแกรมตอบสนองการอินเตอร์ รัพท์จะต้องสั้นเพื่อให้ซีพียูได้ทางานเสร็ จสิ้ นด้วยความ
รวดเร็ ว เนื่ องจากเมื่อกาลังทาโปรแกรมตอบสนองการอินเตอร์ รัพท์อยูน่ ้ นั ฟั งชัน่ อื่นที่มีการ
ใช้งานอินเตอร์ รัพท์จะไม่สามารถใช้งานได้เช่ น delay(), millis() และหากมีการใช้งานตัว
แปรที่ เป็ นตัวแปรโกลบอลจะต้องประกาศด้า นหน้า ว่า volatile เพื่อให้ค่าที่ นาไปใช้ง าน
186 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
detachInterrupt(interrupt);
pin: หมายเลขขาดิจิทลั ที่สามารถใช้งานได้เช่น D2 ใส่ เฉพาะเลข 2
interrupt: หมายเลขขาอินเตอร์ รัพท์เช่น INT0(D2) ใส่ เฉพาะเลข 0
ใบงานที่ 4.14 การเขียนโปรแกรมใช้งานอินเตอร์รัพท์ 187
3. ฟั ง ก์ ชั่ น เปิ ดการใช้ งานอิน เตอร์ รั พ ท์ อีก ครั้ ง เป็ นฟั ง ก์ ชั่น ที่ ใ ช้เ มื่ อ ต้อ งการเปิ ดให้ มี ก าร
อินเตอร์ รัพท์ได้อีกครั้งหลังจากการถูกสั่งปิ ดการอินเตอร์ รัพท์จากฟังก์ชนั่ noInterrupts();
interrupts();
4. ฟังก์ ชั่นปิ ดการใช้ งานอินเตอร์ รัพท์ เป็ นฟั งก์ชนั่ ที่ใช้ปิดการอินเตอร์ รัพท์ทุกชนิ ด ดังนั้นเมื่อ
ใช้งานฟังก์ชนั่ นี้แล้วฟังก์ชนั่ อื่น ๆ ที่มีการใช้งานอินเตอร์ รัพท์จะใช้งานไม่ได้เช่น delay();
noInterrupts();
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
R2,R3 18
USB to UART (TTL Level) 1k
D12
DTR 3 VCC
RXD D1(TXD)
2
TXD D0(RXD)
+5V Internal pull up
GND
3V3 R9,R10
220 x2 SW2
4
(INT0)D2
SW3
5
(INT1)D3
X1 C4,C5
16MHz 9 1uF 16V
XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
D10
D11
D12
VCC
Internal pull up
R4-R5
220 x2 SW1
(INT0)D2
SW2
(INT1)D3
C1-2
GND 1uF 16V
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมทดสอบฟั งก์ชนั่ noInterrupts(); และ interrupts(); โดยการสั่งให้ LED ติด
และดับโดยใช้ฟังก์ชนั่ หน่วงเวลาพร้อมแสดงการนับเลขสังเกตผลที่เกิดขึ้น
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ LED ให้แทน 12 (เป็ นขาที่ LED ต่ออยูก่ บั ขา D12 ของ Arduino)
- บรรทัดที่ 2 ประกาศตัวแปรสาหรับเก็บสถานะของ LED โดยให้ค่าเริ่ มต้นเป็ น LOW
190 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
11 void loop() {
12 // noInterrupts();
13 Serial.print("Test :");
14 for(int i=1;i<=20;i++)
15 {
16 Serial.print("-");
17 Serial.print(i);
18 delay(250);
19 digitalWrite(LED, state);
20 }
21 Serial.println("");
22 }
23 void blink()
24 {
25 state = !state;
26 Serial.println("");
27 Serial.println("Interrupted");
28 }
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 กาหนดชื่อ LED ให้แทน 12 (เป็ นขาที่ LED ต่ออยูก่ บั ขา D12 ของ Arduino)
- บรรทัดที่ 2 กาหนดชื่อ interruptPin ให้แทน 2 (เป็ นขาที่สวิตช์ต่ออยูก่ บั ขา D2 ของ Arduino)
- บรรทัดที่ 3 ประกาศตัวแปรสาหรับเก็บสถานะของ LED โดยให้ค่าเริ่ มต้นเป็ น LOW
- บรรทัดที่ 6 กาหนดโหมดให้กบั ขาพอร์ ตที่ต่อกับ LED ทางานเป็ นเอาต์พุทพอร์ต
- บรรทัดที่ 7 กาหนดโหมดให้กบั ขาพอร์ ตที่ต่อกับสวิตช์ทางานเป็ นอินพุทแบบพูลอัพ
- บรรทัดที่ 8 เปิ ดการอินเตอร์รัพท์ภายนอกโดยรับสัญญาณแบบ CHANGE
- บรรทัดที่ 9 กาหนดความเร็ วในการสื่ อสารผ่านพอร์ ตอนุกรมที่ 9600 bps
- บรรทัดที่ 14-20 แสดงตัวเลขนับรอบพร้อมสั้งให้ LED ติด/ดับตามตัวแปรเก็บสถานะ
- บรรทัดที่ 23-28 ฟังก์ชนั่ ตอบสนองการอินเตอร์ รัพท์ โดยสั่งกลับค่าตัวแปรเก็บสถานะและแสดง
ข้อความว่าเกิดการอินเตอร์ รัพท์ข้ ึนแล้ว
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองกดสวิตช์แล้วสังเกตผลที่เกิดขึ้น
4. ทดลองเปลี่ยนรู ปแบบของลักษณะสัญญาณอินเตอร์ รัพท์เป็ น LOW, CHANGE, RISING,
FALLING
5. ทดลองใช้และไม่ใช้วงจรแก้สัญญาณรบกวนดังรู ปที่ 4.14-7 (a) และ (b) สังเกตผลที่เกิดขึ้น
R1, R2 R1, R2
220 x2 SW1 220 x2 SW1
(INT0)D2 (INT0)D2
SW2 SW2
(INT1)D3 (INT1)D3
C1, C2
1uF 16V
(a) (b)
9. สรุปผลการปฏิบัติงาน
D10
D11
D12
VCC
Internal pull up
R4-R5
220 x2 SW1
(INT0)D2
SW2
(INT1)D3
C1-2
GND 1uF 16V
ใบงานที่ 4.15
การเขียนโปรแกรมใช้ งานหน่ วยความจา EEPROM
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมใช้งานหน่วยความจา EEPROMได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมใช้งานหน่วยความจา EEPROMได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 5 ตัว 2.3 ตัวเก็บประจุ 1uF 2 ตัว
2.2 LED 3mm 1 ตัว 2.4 Tack Switch 4 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. สายเชื่อมต่อ USB (mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
194 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
EEPROM (Electrically Erasable Programmable Read-Only Memory) หรื อ E2PROM สาหรับ
การออกเสี ย งสามารถเรี ยกได้ ห ลายแบบได้ แ ก่ อี อี พ รอม ดับ เบิ ล อี พ รอม หรื ออี ส แควร์ พ รอม
หน่วยความจาชนิ ดนี้เป็ นหน่วยความจาประเภทกึ่งถาวรกล่าวคือเป็ นหน่ วยความจาที่สามารถเขียนและ
ลบได้โ ดยใช้แ รงดัน ไฟฟ้ า ปกติ ไ ด้แ ละข้อ มู ล ที่ บ รรจุ อ ยู่ภ ายในสามารถคงค่ า อยู่ไ ด้ใ นสภาพที่ ไ ม่ มี
ไฟเลี้ ยงวงจร (non-volatile memory) หน่ วยความจาชนิ ดนี้ มีอายุการใช้งานจากัดตามวงรอบของการ
เขียนข้อมูล ดังนั้นการใช้งานจึงใช้เก็บข้อมูลที่จาเป็ นที่ตอ้ งคงค่านั้นเพื่อนามาใช้งานใหม่ได้ในกรณี ที่
หยุดจ่ายไฟให้กบั วงจร เช่นการตั้งค่าโหมดการทางาน การตั้งค่าสู งสุ ดต่าสุ ด การตั้งเวลาทางานของวงจร
เป็ นต้น บอร์ด Arduino ในแต่ละรุ่ นมีการใช้ซีพียแู ตกต่างกันซึ่ งซี พียแู ต่ละเบอร์ มีหน่วยความจาชนิ ดนี้ ที่มี
ขนาดแตกต่างกันดังตาราง 4.15-1
ตารางเปรี ยบเทียบคุณสมบัติของ Arduino ในแต่ละรุ่ น (เฉพาะบางรุ่ น)
Name Processor EEPROM[KB] SRAM [KB] Flash [KB]
101 Intel® Curie - 24 196
Gemma ATtiny85 0.5 0.5 8
ATmega168V
LilyPad 0.512 1 16
ATmega328P
LilyPad SimpleSnap ATmega328P 1 2 32
LilyPad USB ATmega32U4 1 2.5 32
Mega 2560 ATmega2560 4 8 256
Micro ATmega32U4 1 2.5 32
ATmega168 0.512 1 16
Pro
ATmega328P 1 2 32
Pro Mini ATmega328P 1 2 32
Uno ATmega328P 1 2 32
Zero ATSAMD21G18 - 32 256
Due ATSAM3X8E - 96 512
Esplora ATmega32U4 1 2.5 32
Ethernet ATmega328P 1 2 32
Leonardo ATmega32U4 1 2.5 32
Mega ADK ATmega2560 4 8 256
Mini ATmega328P 1 2 32
ATmega168 0.512 1 16
Nano
ATmega328P 1 2 32
ATmega32U4 2.5 32
Yùn 1
AR9331 Linux 16MB 64MB
บอร์ ด Arduino รุ่ นที่ ใช้ในการทดลองนี้ เป็ นรุ่ น Nano ใช้ซีพียูตระกูล AVR เบอร์ ATmega328
ซึ่ งมี หน่ วยความจา EEPROM ขนาด 1 Kbyte (1024 byte) จากข้อมูลในดาต้าชี ต ระบุ วงรอบการเขี ย น
ข้อมูลลงหน่วยความจาสามารถใช้งานได้ประมาณ 100,000 ครั้ง
ใบงานที่ 4.15 การเขียนโปรแกรมใช้งานหน่วยความจา EEPROM 195
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต เป็ นฟั งก์ชั่นที่ ใช้ในการส่ งข้อมู ลออกทางพอร์ ตอนุ กรมหรื อ
พิมพ์ขอ้ มูลออกทางพอร์ ตเพื่อแสดงผลที่จอคอมพิวเตอร์ เมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะรออยู่
ที่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ
Serial.print(val) Serial.print(val, format)
7. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิ มพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val) Serial.println(val, format)
3. ฟังก์ ชั่นบันทึกข้ อมูลขนาด 1 ไบต์ เฉพาะค่ าที่เปลี่ยนแปลง เป็ นฟั งก์ชนั่ ที่บนั ทึกข้อมูลขนาด
1 ไบต์ลงในหน่ วยความจา EEPROM ในตาแหน่ งที่ระบุโดยฟั งก์ชนั่ นี้ จะตรวจสอบว่าค่าที่
ต้องการบันทึกเป็ นค่าที่ไม่ตรงกับค่าที่มีอยูเ่ ดิมทาให้ลดจานวนวงรอบการเขียนข้อมูลทาให้
อายุการใช้งานยาวนานขึ้น รู ปแบบดังนี้
.update(address, value);
address: หมายเลขตาแหน่งของหน่วยความจาที่ตอ้ งการบันทึก
value: ค่าที่ตอ้ งการบันทึกลงหน่วยความจามีค่าระหว่าง 0-255
4. ฟังก์ชั่นอ่ านข้ อมูลตามขนาดตัวแปรในตาแหน่ งทีร่ ะบุ รู ปแบบเป็ นดังนี้
.get(address, data);
address: หมายเลขตาแหน่งของหน่วยความจาที่ตอ้ งการอ่านค่า
data: ตัวแปรที่ตอ้ งการเก็บค่าที่ได้จากการอ่าน
5. ฟังก์ชั่นบันทึกข้ อมูลตามขนาดตัวแปรในตาแหน่ งทีร่ ะบุ รู ปแบบเป็ นดังนี้
.put(address, data);
address: หมายเลขตาแหน่งของหน่วยความจาที่ตอ้ งการบันทึก
data: ตัวแปรที่ตอ้ งการบันทึกค่าลงหน่วยความจา
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
กรณี ที่ใช้ Arduino ในการทดลอง ต่อวงจรดังรู ป
R1 LED1
220
D9
VCC
Internal pull up
R2-R4
220 x2 SW1
D5
SW2
D4
SW3
(INT1)D3
SW4
(INT0)D2
GND C1-C2
1uF 16V
VCC
Internal pull up
R2,R3
USB to UART (TTL Level) 1k R9-R12
DTR 3 220 x2 SW2
RXD D1(TXD) 11
2 D5
TXD D0(RXD)
+5V SW3
GND 6
3V3 D4
SW4
5
(INT1)D3
SW5
4
(INT0)D2
X1 C4-C5
16MHz 9 1uF 16V
XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมอ่านค่าข้อมูลจากหน่วยความจา EEPROM แอดเดรส 0-20 พร้อมทั้งเขียน
ข้อมูลเข้าไปใหม่โดยใช้สวิตช์ 2 ตัวในการตั้งค่าข้อมูลแล้วใช้สวิตช์ตวั ที่ 3 บันทึกข้อมูล
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
START
กาหนดค่าเริ ่มต้ นต่ าง
บันทึกค่ าข้อมูลลง EEPROM
อ่ านค่าข้ อมูลจาก EEPROM
เพิ่ม ค่าแอดเดรส 1 ค่ า
จริ ง
SW1 ูก กด? เพิ่ม ค่าข้ อมูล STOP
เท็จ
จริ ง ฟั งก์ชนั ่ ตอบสนองการอินเตอร์ ร ัพท์
SW2 ูก กด? ลดค่ า ข้อ มูล
เท็จ
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ EEPROM.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 กาหนดชื่อ interruptPin ให้แทน 2 (เป็ นขาที่สวิตช์ต่ออยูก่ บั ขา D2 ของ Arduino)
- บรรทัดที่ 3 กาหนดชื่อ IncValue ให้แทน 3 (เป็ นขาที่สวิตช์ต่ออยูก่ บั ขา D3 ของ Arduino)
- บรรทัดที่ 4 กาหนดชื่อ DecValue ให้แทน 4 (เป็ นขาที่สวิตช์ต่ออยูก่ บั ขา D4 ของ Arduino)
- บรรทัดที่ 5 ประกาศตัวแปรสาหรับเก็บข้อมูลของหน่วยความจา EEPROM
- บรรทัดที่ 6 ประกาศตัวแปรสาหรับเก็บแอดเดรสของหน่วยความจา EEPROM
- บรรทัดที่ 9 กาหนดความเร็ วในการสื่ อสารผ่านพอร์ ตอนุกรมที่ 9600 bps
- บรรทัดที่ 10-12 กาหนดโหมดให้กบั ขาพอร์ ตที่ต่อกับสวิตช์ทางานเป็ นอินพุทพอร์ ต
- บรรทัดที่ 13 ประกาศใช้งานอินเตอร์รัพท์จากขา D2(INT0)
- บรรทัดที่ 14-22 อ่านข้อมูลจากหน่วยความจา EEPROM แอดเดรส 0 ถึงแอดเดรสที่ 10 แล้วนา
ค่าที่อ่านได้มาแสดงผลหน้าจอคอมพิวเตอร์
- บรรทัด ที่ 26-30 ตรวจสอบถ้า สวิตช์ IncValue ถู ก กดให้ท าการเพิ่ มค่ าตัวแปร value ขึ้ น 1 ค่ า
พร้อมแสดงผลหน้าจอคอมพิวเตอร์
- บรรทัดที่ 31-35 ตรวจสอบถ้าสวิตช์ DecValue ถูกกดให้ทาการลดค่าตัวแปร value ลง 1 ค่าพร้อม
แสดงผลหน้าจอคอมพิวเตอร์
- บรรทัดที่ 38-44 ฟั งก์ชั่นตอบสนองการอิ นเตอร์ รัพท์ทาหน้าที่ บ นั ทึ กค่าจากตัวแปร value ลง
หน่วยความจา EEPROM
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus เมื่อทาการจาลองการทางานที่มีการบันทึกข้อมูลลง
หน่วยความจา EEPROM แล้วกดหยุดการจาลองข้อมูลที่เคยบันทึกลงหน่วยความจาจะยังคง
อยู่ ดังนั้นเมื่อทาการจาลองใหม่ที่มีการอ่านข้อมูลจากหน่วยความจา EEPROM จะเป็ นข้อมูล
ที่ได้ถูกบันทึกไว้จากการจาลองครั้งที่ผา่ นมา และถ้าหากต้องการล้างข้อมูลใน EEPROM ให้
ดูเหมือนว่าเป็ นการทดลองครั้งแรกในซี พียใู หม่สามารถล้างข้อมูลใน EEPROM ได้โดยการ
คลิกที่ Reset Persistent Model data ดังรู ปที่ 4.15-5
2. ทดลองด้วยวงจรจริ ง
3. สังเกตผลที่เกิดขึ้นจากการบันทึกข้อมูลลงในหน่วยความจา EEPROM
ใบงานที่ 4.15 การเขียนโปรแกรมใช้งานหน่วยความจา EEPROM 201
9. สรุปผลการปฏิบัติงาน
Internal pull up
R2-R4
220 x2 SW1
D5
SW2
D4
SW3
(INT1)D3
SW4
(INT0)D2
GND C1-C2
1uF 16V
Internal pull up
R2-R4
220 x2 SW1
D5
SW2
D4
SW3
(INT1)D3
SW4
(INT0)D2
GND C1-C2
1uF 16V
ใบงานที่ 4.16
การเขียนโปรแกรมใช้ งานคีย์แพด
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมใช้งานคียแ์ พดได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมใช้งานคียแ์ พดได้
2. ทดสอบการทางานของบอร์ด Arduino ได้
3. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวต้านทาน 220 ohm 1 ตัว
2.2 LED 3mm 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. คียแ์ พดขนาด 3×4 1 ตัว
5. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
204 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
การใช้งานสวิตช์ของไมโครคอนโทรลเลอร์ ไม่วา่ จะเป็ นในตระกูลใดสามารถใช้งานได้โดยการ
ต่อเข้ากับพอร์ ต 1 บิตต่อสวิตช์ 1 ตัวซึ่ งการต่อลักษณะนี้ เหมาะสาหรับวงจรที่ใช้สวิตช์จานวนน้อยแต่ถา้
หากต้องการใช้งานสวิตช์จานวนมากจะทาให้เหลือพอร์ ตที่ ไปใช้งานอย่างอื่นลดลง ตัวอย่างเช่นต้องการ
ต่อสวิตช์จานวน 12 ตัวกับพอร์ ตดิจิทลั ของ Arduino UNO หรื อ Nano ที่มีพอร์ตดิจิทลั ใช้งานเพียง 14 บิต
(หากมีการสื่ อสารผ่านพอร์ อนุกรมจะเหลือเพียง 12 ตัว) จะไม่เหลือพอร์ ตเอาไปใช้งานอื่นได้เลยดังรู ป
D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13
1 2 3 4 5 6 7 8 9 0 * #
D11 2
row pinouts
4 5 6
D10 3
7 8 9
D9 4
* 0 #
5 6 7
D8 D7 D6
column pinouts
0 1 1 1 1 1
1 2 3 1 2 3 1 2 3
Logic to Input Port
1 3 1 3 0 3
7 8 9 7 8 9 7 8 9
1 4 1 4 1 4
* 0 # * 0 # * 0 #
5 6 7 5 6 7 5 6 7
0 1 1 0 1 1 0 1 1
Logic from Output Port Logic from Output Port Logic from Output Port
1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 8 9
* 0 # * 0 #
1 2 3 4 5 6 7
1 7
2. ฟังก์ชั่นส่ งค่ าลอจิกดิจิทลั ไปยังขาพอร์ ต ค่า HIGH เป็ นการส่ งลอจิก 1 และค่า LOW เป็ นการ
ส่ งลอจิก 0 ออกไปยังขาพอร์ ต ซึ่ งฟังก์ชนั่ นี้จะทางานได้ตอ้ งมีการใช้ฟังก์ชนั่ pinMode ก่อน
digitalWrite(pin, value);
pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต
value: HIGH or LOW
6. ฟั งก์ ชั่นส่ งข้ อมู ลออกพอร์ ต คล้ายกับฟั งก์ชั่น Serial.print ต่างกันตรงที่ เมื่ อพิ มพ์เสร็ จ ตัว
เคอร์ เซอร์ จะขึ้ นมารอยังบรรทัดใหม่ ดังนั้นเมื่ อสั่งพิมพ์ครั้ งถัดไปข้อมูลที่ ปรากฏจะอยู่ที่
บรรทัดใหม่ แทนที่จะต่อท้ายเหมือนกับฟังก์ชนั่ Serial.print
Serial.println(val) Serial.println(val, format)
208 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
D12 18
7 8 9
D11 17 * 0 #
USB to UART (TTL Level)
R2,R3 D10 16
1k
DTR 3 D9 15
RXD D1(TXD)
2
TXD D0(RXD) D8 14
+5V
GND D7 13
3V3
D6 12
X1
16MHz 9 XTAL1 R4 LED1
220
10 XTAL2 11
D5
C2,C3 GND
22pF 8,22
1 2 3
4 5 6
7 8 9
D12
D11 * 0 #
D10
D9
D8
D7
D6
R1 LED1
220
D5
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
D13
3V3
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมอ่านค่าข้อมูลจากหน่วยความจา EEPROM แอดเดรส 0-20 พร้อมทั้งเขียน
ข้อมูลเข้าไปใหม่โดยใช้สวิตช์ 2 ตัวในการตั้งค่าข้อมูลแล้วใช้สวิตช์ตวั ที่ 3 บันทึกข้อมูล
ใบงานที่ 4.16 การเขียนโปรแกรมใช้งานคียแ์ พด 211
อ่ านค่าจากคีย์แพด
เท็จ
มีการกดคีย์?
จริ ง
แสดง ลคีย์ท่ ี ู กกด
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Keypad.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 กาหนดชื่อ LED ให้แทน 5 (เป็ นขา LED ต่ออยูก่ บั ขา D5 ของ Arduino)
- บรรทัดที่ 3 กาหนดจานวนขาต่อคียแ์ พดด้าน Row
- บรรทัดที่ 4 กาหนดจานวนขาต่อคียแ์ พดด้าน Colum
- บรรทัดที่ 5 กาหนดค่าที่ได้จากการกดคียแ์ พดในแต่ละตาแหน่ง
212 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
1 2 3
4 5 6
7 8 9
D12
D11 * 0 #
D10
D9
D8
D7
D6
R1 LED1
220
D5
GND
ใบงานที่ 4.17
การเขียนโปรแกรมแสดงผลด้ วยจอ LCD ทีเ่ ชื่ อมต่ อแบบ 4 บิต
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ 4 บิตได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ 4 บิตได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 ตัวท้านทานปรับค่าได้ขนาด 10k 1 ตัว
3. บอร์ด Arduino Nano 3.0 1 ตัว
4. LCD ชนิดตัวอักษรขนาด 16x2 1 ตัว
5. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
6. สายเชื่อมต่อวงจร 1 ชุด
7. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
214 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
อุปกรณ์ แสดงผลของเครื่ องใช้ไฟฟ้ าหรื อเครื่ องใช้ที่เป็ นอิเล็กทรอนิ กส์ ในปั จจุบนั จะเลือกใช้
LCD ในการแสดงผลเป็ นส่ วนใหญ่ เช่ น เครื่ องคิดเลข นาฬิ กา เครื่ องมือวัดแบบตัวเลขและอื่นๆ อีก
มากมาย LCD ย่อมาจากคาว่า Liquid Crystal Display เป็ นอุปกรณ์แสดงผลที่กินไฟน้อยมากเป็ นอุปกรณ์
ที่แสดงผลโดยไม่ได้อาศัยการเปล่งแสงที่ตวั เองแต่ใช้วิธีการปิ ดบังแสงไม่ให้สะท้อนให้หรื อไม่ให้ส่อง
ผ่านแทน ซึ่ง LCD สามารถแบ่งได้ 3 แบบคือ
1. Segment display ชนิด LCD module
2. Character LCD module
3. Graphic LCD module
ส่ วนประกอบหลักของจอผลึกเหลว (LCD) ภายในประกอบด้วยส่ วนหลัก 3 ส่ วนด้วยกันคือ
1. ตัวแสดงผล (Display) เป็ นตัวแสดงผลให้เราได้มองเห็น ในลักษณะการปิ ดและเปิ ดกับแสง
ก็คือส่ วนที่เป็ นตัวกระจกบรรจุผลึกเหลว
2. ตัวขับ (Driver) เป็ นตัวรับสัญญาณจากตัวควบคุมมาขับให้ตวั แสดงผลแสดงข้อมูล ตามที่
กาหนด
3. ตัวควบคุม (Controller) เป็ นตัวรับข้อมูลจากอุปกรณ์ภายนอก มาควบคุมการทางานของตัว
LCD Module เบอร์ที่นิยมใช้คือ
- HD4478 ใช้ควบคุม Character LCD module
- HD61830ใช้ควบคุม Graphic LCD module
การต่ อใช้ งาน ใบงานนี้ เป็ นการทดลองการใช้งาน LCD ชนิ ดตัวอักษร ซึ่ งการต่อใช้งานตาม
คุ ณสมบัติข องโมดู ลสามารถเชื่ อมต่ อให้มีก ารสื่ อสารข้อมู ลได้ 2 แบบคื อ แบบ 8 บิ ตและแบบ 4 บิ ต
สาหรับการทดลองเพื่อใช้งาน LCD ด้วย Arduino ใช้การเชื่อมต่อแบบ 4 บิตเนื่องจากพอร์ ตของ Arduino
มีจากัด สาหรับขนาดของ LCD ชนิ ดตัวอักษรมีให้เลือกใช้หลายขนาดผูใ้ ช้งานสามารถเลือกใช้ได้ตาม
ต้องการโดยมีขนาดให้เลือกตามตาราง
ตารางที่ 4.17-1
จานวนตัวอักษรต่อแถว 8 ตัวอักษร 16 ตัวอักษร 20 ตัวอักษร 40 ตัวอักษร
ขนาดของ LCD ที่มีให้ใช้งาน 8×2 16×1 20×1 40×1
16×2 20×2 40×2
16×4 20×4 40×4
ใบงานที่ 4.17 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ 4 บิต 215
.print(data, BASE);
data: คือข้อมูลที่ตอ้ งการแสดงผลซึ่ งอาจเป็ นข้อความ ตัวเลข หรื อค่าในตัวแปร
โดยถ้าเป็ นข้อความจะต้องใส่ “-” คร่ อมข้อความนั้น ๆ
BASE: รู ปแบบการแสดงผลของค่าตัวเลข (เลขฐาน) ได้แก่ BIN,DEC,OCT,HEX
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
ใบงานที่ 4.17 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ 4 บิต 217
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
11
5V D2 D4
12
D3 D5
13
D4 D6
14
D5 D7
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ LiquidCrystal.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2-10 เป็ นส่ วนอธิ บายว่าขาใดของ LCD เชื่อมต่อกับขาใดของ Arduino
ใบงานที่ 4.17 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ 4 บิต 219
อ่ านค่าเวลาจากบอร์ ด
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ LiquidCrystal.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2-10 เป็ นส่ วนอธิ บายว่าขาใดของ LCD เชื่อมต่อกับขาใดของ Arduino
- บรรทัดที่ 11 กาหนดจานวนขาพอร์ ตที่ใช้เชื่อมต่อกับ LCD
- บรรทัดที่ 14 ประกาศเริ่ มใช้งานไลบรารี่ LCD พร้อมกาหนดขนาดของ LCD
- บรรทัดที่ 15 แสดงข้อความบนหน้าจอ LCD "Running time"
- บรรทัดที่ 16 ขยับเคอร์ เซอร์ ไปยังตาแหน่งที่ระบุ
- บรรทัดที่ 22 แสดงข้อมูลที่เกิดจากการคานวนค่าเวลาบนหน้าจอ LCD
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงรู ปแบบการแสดงผล
9. สรุปผลการปฏิบัติงาน
11
5V D2 D4
12
D3 D5
13
D4 D6
14
D5 D7
GND
ใบงานที่ 4.18
การเขียนโปรแกรมแสดงผลด้ วยจอ LCD ทีเ่ ชื่ อมต่ อแบบ I2C
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ I2C ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ I2C ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. บอร์ด Arduino Nano 3.0 1 ตัว
3. LCD ชนิดตัวอักษรขนาด 16x2 1 ตัว
4. โมดูลสื่ อสาร I2C สาหรับ LCD 1 ตัว
5. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
6. สายเชื่อมต่อวงจร 1 ชุด
7. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
222 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
I2C Bus ย่อ มาจาก Inter Integrate Circuit Bus (IIC) (ออกเสี ย งว่า ไอ-แสคว-ซี - บัส ) เป็ นการ
สื่ อสารอนุกรม แบบซิ งโครนัส (Synchronous) เพื่อใช้ ติดต่อสื่ อสาร ระหว่าง ไมโครคอนโทรลเลอร์ กบั
อุปกรณ์ต่อพ่วงภายนอกใช้สายสัญญาณสื่ อสาร 2 เส้นคือ Serial data (SDA) และ Serial clock (SCL) ซึ่ ง
สามารถเชื่อมต่ออุปกรณ์จานวนหลาย ๆ ตัว เข้าด้วยกันโดยใช้ขาพอร์ตเพียง 2 ขาเท่านั้น
VDD
Rpullup
SCL
SDA
ID ID ID ID A2 A1 A0 R/W
การใช้งานจอแสดงผล LCD ที่ใช้การสื่ อสารแบบ I2C ตัวอุปกรณ์จริ งเป็ นการใช้ LCD ธรรมดา
เช่นเดียวกับใบงานที่ผา่ นมาเพียงแต่เพิ่มโมดูลสื่ อสารแบบ I2C เสี ยบเพิ่มเข้าที่ตวั จอ หากไม่ได้แก้ไขใด ๆ
ที่ตวั โมดู ล ขาแอดเดรสของโมดู ลจะไม่ได้ถูกชอร์ ตลงกราวด์ดงั นั้นขาแอดเดรสทั้ง 3 ขาจะเป็ นลอจิก
HIGH ทั้งหมดดังรู ป
การเขี ย นโค้ด โปรแกรมเพื่ อ ใช้ง านการแสดงผลจอ LCD ที่ สื่ อ สารด้ว ยโมดู ล สื่ อ สาร I2C
จาเป็ นต้องใช้ไลบรารี่ ช่วยงานพร้อม ๆ กันถึงสองตัวดังนี้
- Wire.h มีมาพร้อมกับโปรแกรม Arduino IDE
- LiquidCrystal_I2C.h ต้องดาวน์โหลดเพิ่ม เติ ม เนื่ องจากโปรแกรม Arduino IDE ไม่ได้มีก าร
ติดตั้งมาให้ต้ งั แต่เริ่ มต้น
ไลบรารี่ แหล่งดาวน์โหลด
Wire.h ไม่ตอ้ งดาวน์โหลดเนื่องจากมาพร้อมกับ Arduino IDE
LiquidCrystal_I2C.h https://github.com/marcoschwartz/LiquidCrystal_I2C
224 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
2. ฟั งก์ ชั่นส่ งค่ าเวลาตั้งแต่ บอร์ ดเริ่ มทางาน ตัวเลขที่ส่งกลับมาจากฟั งก์ชนั่ เป็ นเลขของเวลา
ตั้งแต่บอร์ ดเริ่ มทางานมีหน่ วยเป็ นมิ ลลิ วินาที ซึ่ งตัวเลขจะวนกลับเป็ นศูนย์อีกครั้ ง (Over
Flow) เมื่อเวลาผ่านไปประมาณ 50 วันหลังจากบอร์ ดเริ่ มทางาน รู ปฟังชัน่ เป็ นดังนี้
millis();
ใบงานที่ 4.18 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ I2C 225
.print(data, BASE);
data: คือข้อมูลที่ตอ้ งการแสดงผลซึ่ งอาจเป็ นข้อความ ตัวเลข หรื อค่าในตัวแปร
โดยถ้าเป็ นข้อความจะต้องใส่ “-” คร่ อมข้อความนั้น ๆ
BASE: รู ปแบบการแสดงผลของค่าตัวเลข (เลขฐาน) ได้แก่ BIN,DEC,OCT,HEX
226 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
GND
VCC
SDA
SCL
A4(SDA)
A5(SCL)
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
GND
I
I
VCC
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
SDA
G
G
SCL
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมแสดงข้อความ “Hello, world!” ในบรรทัดบนและ “LCD i2c Lab” บรรทัดล่าง
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Wire.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 รวมไฟล์ไลบรารี่ LiquidCrystal_I2C.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 3 กาหนดแอดเดรสของโมดูล I2C และขนาดของ LCD ที่ใช้งาน
- บรรทัดที่ 6 ประกาศเริ่ มใช้งานไลบรารี่
- บรรทัดที่ 7 สัง่ เปิ ดไฟแบล็คไลต์
- บรรทัดที่ 8 ขยับเคอร์ เซอร์ ไปยังตาแหน่งที่ระบุ (Colum ที่ 2, Row ที่ 0)
- บรรทัดที่ 9 แสดงข้อความบนหน้าจอ LCD "Hello, world!"
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนรู ปแบบการแสดงผล
ใบงานที่ 4.18 การเขียนโปรแกรมแสดงผลด้วยจอ LCD ที่เชื่อมต่อแบบ I2C 229
อ่ านค่าเวลาจากบอร์ ด
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Wire.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 รวมไฟล์ไลบรารี่ LiquidCrystal_I2C.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 3 กาหนดแอดเดรสของโมดูล I2C และขนาดของ LCD ที่ใช้งาน
- บรรทัดที่ 6 ประกาศเริ่ มใช้งานไลบรารี่
- บรรทัดที่ 7 สัง่ เปิ ดไฟแบล็คไลต์
- บรรทัดที่ 8 ขยับเคอร์ เซอร์ ไปยังตาแหน่งที่ระบุ
- บรรทัดที่ 9 แสดงข้อความบนหน้าจอ LCD "Hello, world!"
- บรรทัดที่ 15 ขยับเคอร์ เซอร์ ไปยังตาแหน่งที่ระบุ
- บรรทัดที่ 16 แสดงข้อมูลที่เกิดจากการคานวนค่าเวลาบนหน้าจอ LCD
230 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงรู ปแบบการแสดงผล
4. เปลี่ยนเทียบความแตกต่างของการเขียนโค้ดระหว่างใช้ LCD ธรรมดากับแบบ I2C
9. สรุปผลการปฏิบัติงาน
GND
VCC
SDA
SCL
A4(SDA)
A5(SCL)
D12
D11 1 2 3
D10
4 5 6
D9
D8 7 8 9
D7
* 0 #
D6
GND
ใบงานที่ 4.19
การเขียนโปรแกรมแสดงผลด้ วยโมดูลตัวเลข MAX7219
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219 ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219 ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. บอร์ด Arduino Nano 3.0 1 ตัว
3. โมดูลตัวเลข MAX7219 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
232 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
MAX7219 เป็ นไอซี ที่ถูกออกแบบมาสาหรับการแสดงตัวเลขด้วย 7-Segment ได้มากกว่าหนึ่ ง
หลักและยังสามารถนาไปประยุกต์ใช้กบั LED (Dot) matrix ได้อีกด้วย ใบงานนี้เป็ นการใช้งานเฉพาะการ
แสดงผลที่ เป็ นตัวเลขเท่านั้นซึ่ งปั จจุ บ นั มี ผูผ้ ลิ ตเป็ นโมดู ลสาเร็ จรู ป จาหน่ ายมี จานวนตัวเลขในโมดู ล
จานวนทั้งสิ้ น 8 ตัวต่อหนึ่งโมดูล ข้อดีของการแสดงผลที่เป็ นตัวเลขด้วยโมดลู MAX7219 คือสามารถต่อ
พ่วงโมดูลได้อีกหลายโมดูลจึงทาให้สามารถแสดงตัวเลขได้จานวนมากโดยใช้สายสัญญาณจานวนน้อย
เพียง 3 เส้นคือ DIN, CS และ CLK
LedControl.h
เป็ นไลบรารี่ สาหรับแสดงผลโมดูลที่ใช้ไอซี MAX7219 ไลบรารี่ น้ ี ไม่มีมาพร้ อมโปรแกรม Aduino
IDE ดังนั้นการใช้งานจึงต้องมีการติดตั้งเพิ่มเติ่มเข้าไปในโปรแกรม ซึ่งสามารถสามารถดาวน์โหลดได้ที่
ไลบรารี่ แหล่งดาวน์โหลด
LedControl.h https://github.com/wayoda/LedControl/releases
(1)
http://embedded-lab.com/blog/introducing-a-new-serial-spi-8-digit-seven-segment-led-display-module-using-max7219/
ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219 233
HCMAX7219.h
เป็ นไลบรารี่ สาหรับแสดงผลโมดูลที่ใช้ไอซี MAX7219 ไลบรารี่ น้ ี จะต้องใช้ไลบรารี่ เพิ่มอีก 1 ตัวคือ
SPI.h ซึ่ งมีมาพร้ อมโปรแกรม Aduino IDE ไม่ตอ้ งติ ดตั้งเพิ่ม เติ ม แต่จะติ ดตั้งเพิ่ม เติ ม เฉพาะไลบรารี่
HCMAX7219.h ซึ่งสามารถดาวน์โหลดได้ที่
ไลบรารี่ แหล่งดาวน์โหลด
HCMAX7219.h https://github.com/HobbyComponents/HCMAX7219
234 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
2. ฟั งก์ ชั่นส่ งค่ าเวลาตั้งแต่ บอร์ ดเริ่ มทางาน ตัวเลขที่ส่งกลับมาจากฟั งก์ชนั่ เป็ นเลขของเวลา
ตั้งแต่บอร์ ดเริ่ มทางานมีหน่ วยเป็ นมิ ลลิ วินาที ซึ่ งตัวเลขจะวนกลับเป็ นศูนย์อีกครั้ ง (Over
Flow) เมื่อเวลาผ่านไปประมาณ 50 วันหลังจากบอร์ ดเริ่ มทางาน รู ปฟังก์ชนั่ เป็ นดังนี้
millis();
6. ฟั งก์ ชั่ นแสดงตั ว อัก ษร ใช้แสดงตัวอัก ษรแสดงจุ ดทศนิ ย มในต าแหน่ ง ที่ ระบุ บ นโมดู ล
ตัวอักษรที่แสดงได้มีเพียงบางตัวได้แก่ A b c d E F H L P . -_ รู ปแบบเป็ นดังนี้
.setChar(addr, digit, character, point_decimal);
addr: ตัวเลขแอดเดรสของโมดูล หากเป็ นตัวแรกจะเป็ น 0
digit: ต าแหน่ ง ที่ ต้อ งการให้ แ สดงโดยต าแหน่ ง หน้ า สุ ด เป็ นต าแหน่ ง ที่ 7
หลังสุ ดเป็ นตาแน่ง 0
character: ค่าตัวอักษรที่ต้องการแสดง เวลาใช้ตอ้ งใช้เครื่ องหมาย ‘-‘ ครอบ
ตัวอักษรที่ตอ้ งการให้แสดงผลด้วย
point_decimal: การแสดงทศนิยม ต้องการแสดงใช้ true ไม่ตอ้ งการใช้ false
7. ฟังก์ ชั่นแสดงผลที่กาหนดรู ปแบบเอง ใช้เมื่อต้องการแสดงสิ่ งที่ตอ้ งการโดยการกาหนดการ
ติดดับในแต่ละเซ็กเมนต์ รู ปแบบเป็ นดังนี้
lc.setRow(addr, digit,value);
addr: ตัวเลขแอดเดรสของโมดูล หากเป็ นตัวแรกจะเป็ น 0
digit: ต าแหน่ ง ที่ ต้อ งการให้ แ สดงโดยต าแหน่ ง หน้ า สุ ด เป็ นต าแหน่ ง ที่ 7
หลังสุ ดเป็ นตาแน่ง 0
value: ค่าที่ตอ้ งการให้ติดดับ
ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219 237
lc.setDigit(0,7,1,false);
lc.setDigit(0,6,2,true);
lc.setDigit(0,5,3,false);
7 6 5 4 3 2 1 0
VCC
GND
DIN
CS
CLK
lc.setRow(0,2,B00110111); a
f b
Ex Want to display H g
segment dp a b c d e f g e c
data 0 0 1 1 0 1 1 1 d dp
รู ปที่ 4.19-7 การใช้ฟังก์ชนั่ การแสดงผลด้วยไลบรารี่ LedControl.h
HCMAX7219.print7Seg("ABCD",8);
8 7 6 5 4 3 2 1
VCC
GND
DIN
CS
CLK
HCMAX7219.print7Seg(123,2,3);
รู ปที่ 4.19-8 การใช้ฟังก์ชนั่ การแสดงผลด้วยไลบรารี่ HCMAX7219.h
ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219 239
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 3 แนวทางคือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
3. ทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
กรณี ที่ใช้วงจรที่สร้างขึ้นเองจากไอซี ไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็ น Arduino
เรี ยบร้อยแล้ว ต่อวงจรดังรู ป
VCC
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
5V
VCC
MAX7219 7-Segment 4-Digit
VCC
D11(MOSI) Din
D10(SS) Load
D13(SCK) Clk
GND
GND
15
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
VCC
GND
F
F
DIN
CS
GND
RST
REF
VIN
3V3
D13
CLK
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
C
C
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมแสดงผลบนโมดู ล MAX7219 โดยให้แสดงทั้ง ข้อความทั้ง ตัวเลขที่ มี
ทศนิยมโดยใช้ไลบรารี่ LedControl.h
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
แสดงผล
ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219 241
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ LedControl.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 กาหนดขาพอร์ ต Arduino ที่ใช้เชื่อมต่อกับโมดูล MAX7219
- บรรทัดที่ 5 สั่งให้โมดูล MAX7219 เริ่ มทางาน
- บรรทัดที่ 6 กาหนดความสว่างของตัวเลขบนโมดูล MAX7219
- บรรทัดที่ 7 ล้างข้อมูลที่แสดงผลบนโมดูล MAX7219
- บรรทัดที่ 11 แสดงเลข 2 ที่ตาแหน่ง 7 และไม่แสดงทศนิยม
- บรรทัดที่ 12 แสดงเลข 3 ที่ตาแหน่ง 6 และแสดงทศนิยม
- บรรทัดที่ 13 แสดงเลข 4 ที่ตาแหน่ง 5 และไม่แสดงทศนิยม
- บรรทัดที่ 14 ตาแหน่ง 4 ให้ติดสว่างเป็ นตัว “H”
- บรรทัดที่ 15 ตาแหน่ง 3 ให้ติดสว่างเป็ นตัว “E”
- บรรทัดที่ 16 ตาแหน่ง 2 ให้ติดสว่างเป็ นตัว “L”
- บรรทัดที่ 17 ตาแหน่ง 1 ให้ติดสว่างเป็ นตัว “L”
- บรรทัดที่ 18 ตาแหน่ง 0 ให้ติดสว่างเป็ นตัว “O”
- บรรทัดที่ 19 สั่งให้ซีพียวู นอยูก่ บั ที่
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนรู ปแบบการแสดงผล
242 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1-8 เป็ นส่ วนอธิ บายว่าขาใดของโมดูล MAX7219 เชื่อมต่อกับขาใดของ Arduino
- บรรทัดที่ 9 รวมไฟล์ไลบรารี่ HCMAX7219.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 10 รวมไฟล์ไลบรารี่ SPI.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 11 กาหนดจานวนขาพอร์ ตของ Arduino ที่ใช้เชื่อมต่อขา CS ของโมดูล
- บรรทัดที่ 12 ประกาศเริ่ มใช้งานไลบรารี่
- บรรทัดที่ 15 กาหนดความสว่างของตัวเลขบนโมดูล MAX7219
- บรรทัดที่ 19 ล้างข้อมูลในบัฟเฟอร์ที่แสดงผลบนโมดูล MAX7219
- บรรทัดที่ 20 ใส่ ขอ้ ความ"ABCD" ลงบัฟเฟอร์ โดยให้เริ่ มแสดงผลตาแหน่งที่ 8
- บรรทัดที่ 21 ใส่ ตวั เลข 123 ที่เป็ นตัวเลขที่มีทศนิยม 2 ตาแหน่งลงบัฟเฟอร์ เริ่ มตาแหน่งที่ 3
- บรรทัดที่ 22 แสดงผลบนโมดูล MAX7219 จากข้อมูลที่อยูใ่ นบัฟเฟอร์
ใบงานที่ 4.19 การเขียนโปรแกรมแสดงผลด้วยโมดูลตัวเลข MAX7219 243
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงรู ปแบบการแสดงผล
แสดงค่ าตัวแปรบนโมดูล
จริ ง เท็จ
ตัวแปร<1000?
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 9 รวมไฟล์ไลบรารี่ HCMAX7219.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 10 รวมไฟล์ไลบรารี่ SPI.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 11 กาหนดจานวนขาพอร์ ตของ Arduino ที่ใช้เชื่อมต่อขา CS ของโมดูล
- บรรทัดที่ 12 ประกาศเริ่ มใช้งานไลบรารี่
- บรรทัดที่ 14 ประกาศใช้งานตัวแปรที่จะนาไปแสดงผล
- บรรทัดที่ 15 กาหนดความสว่างของตัวเลขบนโมดูล MAX7219
- บรรทัดที่ 19 ล้างข้อมูลในบัฟเฟอร์ที่แสดงผลบนโมดูล MAX7219
- บรรทัดที่ 23 ใส่ ค่าข้อมูลจากตัวแปรลงบัฟเฟอร์ โดยให้เริ่ มแสดงผลตาแหน่งที่ 8
- บรรทัดที่ 24 แสดงผลบนโมดูล MAX7219 จากข้อมูลที่อยูใ่ นบัฟเฟอร์
- บรรทัดที่ 26-29 ตรวจสอบค่าตัวแปรให้มีค่าอยูใ่ นระหว่าง 0-999
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงรู ปแบบการแสดงผล
9. สรุปผลการปฏิบัติงาน
5V
VCC
MAX7219 7-Segment 4-Digit
VCC
D11(MOSI) Din
D10(SS) Load
D13(SCK) Clk
GND
GND
ใบงานที่ 4.20
การเขียนโปรแกรมแสดงผลด้ วยจอ OLED ทีเ่ ชื่ อมต่ อแบบ I2C
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมแสดงผลด้วยจอ OLED ที่เชื่อมต่อแบบ I2C ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมแสดงผลด้วยจอ OLED ที่เชื่อมต่อแบบ I2C ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. บอร์ด Arduino Nano 3.0 1 ตัว
3. OLED ขนาด 128×64 แบบ I2C ที่ใช้ไดร์เวอร์เบอร์ SSD1306 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
246 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
OLED (Organic Light-Emitting Diode) เป็ นจอแสดงผลกราฟิ กประเภทหนึ่ งที่ สร้ างจากวัสดุ
"สารกึ่ ง ตัวนาอิ นทรี ย ์" (Organic Semiconductor) ที่ ส ามารถเปล่ งแสงเองได้เมื่ อได้รับ พลัง งานไฟฟ้ า
เรี ยกว่ากระบวนการอิเล็คโทรลูมิเนเซนส์ (Electroluminescence) โดยที่ไม่ตอ้ งพึ่งพาแสงสว่างที่ส่องมา
จากด้านหลัง (Backlight) และจะไม่มีการเปล่งแสงแสดงในบริ เวณที่เป็ นภาพสี ดาส่ งผลให้สีดานั้นดา
สนิทและยังช่วยประหยัดพลังงาน โมดูลแสดงผล OLED ขนาด 128×64 มีหลายแบบให้ผใู ้ ช้งานสามารถ
เลือกใช้ตามความเหมาะสมของแต่ละงานได้ดงั รู ปที่ 4.20-1
โมดูลจอแสดงผลกราฟิ กแบบ OLED 128×64 ทั้งที่ใช้การเชื่ อมต่อแบบ I2C และแบบ SPI มีชิพ
ไดร์ เวอร์ อยูด่ ว้ ยกัน 2 เบอร์ ที่มีการใช้งานอย่างแพร่ หลายคือ SSD1306 และ SH1106 ดังนั้นการเตรี ยมการ
จัดหาอุปกรณ์เพื่อนามาใช้งานต้องรู ้วา่ โมดูลจอ OLED ใช้ชิพไดร์ เวอร์ ตวั ใดเนื่ องจากจะต้องใช้ไลบรารี่
ให้ตรงกับชิพไดร์ เวอร์ ของโมดูลจอ
ใบงานนี้เป็ นการทดลองใช้งานโมดูลจอแสดงผลกราฟิ กแบบ OLED ขนาด 128×64 พิกเซลเป็ น
จอแสดงผลแบบให้แสงเพียงสี เดียว (Monochrome) ที่ใช้การเชื่ อมต่อสื่ อสารแบบ I2C และใช้ชิพควบคุม
เบอร์ SSD1306 การเขียนโค้ดโปรแกรมเพื่อใช้งานการแสดงผลจอ OLED จาเป็ นต้องใช้ไลบรารี่ ช่วยงาน
พร้ อม ๆ กันสองตัว ซึ่ งทั้งหมดต้องดาวน์โหลดเพิ่มเติ มเนื่ องจากโปรแกรม Arduino IDE ไม่ได้มีการ
ติดตั้งมาให้ต้ งั แต่เริ่ มต้นจึงจาเป็ นต้องมีการติดตั้งเพิ่มเติ่มเข้าไปในโปรแกรม ไลบรารี่ ท้ งั สองตัวคือ
ไลบรารี่ แหล่งดาวน์โหลด
Adafruit_GFX.h https://github.com/adafruit/Adafruit-GFX-Library
Adafruit_SSD1306.h https://github.com/adafruit/Adafruit_SSD1306
5. ค้นหาค่าเดิมที่ต้ งั ค่าไว้ดงั รู ป
11. ฟั งก์ ชั่นพิมพ์ ข้อความ เป็ นฟั งก์ชนั่ ที่ใช้ในพิมพ์ขอ้ ความหรื อค่าในตัวแปรให้แสดงบนจอ
OLED รู ปแบบการใช้งานคล้ายคลึ งกับ Serial.print() นัน่ คือเมื่อพิมพ์เสร็ จตัวเคอร์ เซอร์ จะ
รออยูท่ ี่ทา้ ยสิ่ งที่พิมพ์น้ นั ๆ รู ปแบบเป็ นดังนี้
.print();
13. ฟั งก์ ชั่นกาหนดตาแหน่ งเคอร์ เซอร์ สาหรั บพิมพ์ ข้อความ เป็ นฟั งก์ชั่นกาหนดพิกดั ให้กบั
เคอร์ เซอร์ เพื่อใช้พิมพ์ขอ้ ความในตาแหน่งที่ตอ้ งการ รู ปแบบเป็ นดังนี้
.setCursor(x0,y0);
x0: พิกดั แกน x
y0: พิกดั แกน y
14. ฟังก์ ชั่นเรียกใช้ งานฟอนต์ เป็ นฟั งก์ชนั่ ที่ใช้เรี ยกใช้งานฟอนต์ที่ตอ้ งการโดยใส่ ชื่อฟอนต์ที่
ต้องการใช้งาน (ชื่อฟอนต์ในตารางที่ 4.20-2) รู ปแบบเป็ นดังนี้
.setFont(&Font);
Font: ชื่อฟอนต์ที่ตอ้ งการใช้งาน(ไม่ตอ้ งใส่ สกุล .h)
ตัวอย่าง OLED.setFont(&FreeMonoBold9pt7b);
หมายถึง ใช้งานฟอนต์ที่ชื่อว่า FreeMonoBold9pt7b
ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลด้วยจอ OLED 128×64 257
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 2 แนวทาง คือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
เนื่องจากไม่มีโมเดลจาลอง OLED ในโปรแกรม Proteus จึงไม่สามารถจาลองการทางานได้
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
A4(SDA)
A5(SCL)
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
VCC GND S CL S DA
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Wire.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 รวมไฟล์ไลบรารี่ Adafruit_GFX.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 3 รวมไฟล์ไลบรารี่ Adafruit_SSD1306.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 4 กาหนดชื่อเรี ยกโมดูลจอว่า OLED
- บรรทัดที่ 8 ประกาศเริ่ มใช้งานไลบรารี่ พร้อมระบุแอดเดรสจอ OLED
- บรรทัดที่ 12 ล้างข้อมูลที่แสดงผลหน้าจอ
- บรรทัดที่ 13 กาหนดสี ตวั อักษรและสี พ้นื หลังของตัวอักษร
- บรรทัดที่ 14 กาหนดพิกดั ที่จะพิมพ์ขอ้ ความ
- บรรทัดที่ 15 กาหนดขนาดของตัวอักษร
- บรรทัดที่ 16 แสดงผลข้อความแล้วให้เคอร์ เซอร์ ข้ ึนไปรอที่บรรทัดใหม่
- บรรทัดที่ 24 แสดงผลจากค่าของตัวแปรแล้วให้เคอร์ เซอร์ ข้ ึนไปรอที่บรรทัดใหม่
- บรรทัดที่ 25 สั่งให้แสดงผล
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองเปลี่ยนรู ปแบบการแสดงผล
การทดลองที่ 2 เขียนโปรแกรมวาดวัตถุแบบต่าง ๆ โดยแสดงผลที่จอ OLED
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
วาดวัตถุแบบต่ าง
แสดงผล
260 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Wire.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 รวมไฟล์ไลบรารี่ Adafruit_GFX.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 3 รวมไฟล์ไลบรารี่ Adafruit_SSD1306.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 4 กาหนดชื่อเรี ยกโมดูลจอว่า OLED
- บรรทัดที่ 7 ประกาศเริ่ มใช้งานไลบรารี่ พร้อมระบุแอดเดรสจอ OLED
- บรรทัดที่ 11 ล้างข้อมูลที่แสดงผลหน้าจอ
- บรรทัดที่ 12 กาหนดสี ตวั อักษรและสี พ้นื หลังของตัวอักษร
- บรรทัดที่ 13 วาดรู ปสี่ เหลี่ยมพื้นโปร่ งใส
- บรรทัดที่ 14 วาดเส้นตรง
- บรรทัดที่ 15 วาดรู ปวงกลมพื้นโปร่ งใส
- บรรทัดที่ 16 วาดรู ปวงกลมพื้นทึบสี ขาว
- บรรทัดที่ 17 วาดรู ปสามเหลี่ยมพื้นโปร่ งใส
- บรรทัดที่ 25 สั่งให้แสดงผล
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองเปลี่ยนรู ปแบบการแสดงผล
ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลด้วยจอ OLED 128×64 261
การทดลองที่ 3 เขียนโปรแกรมแสดงข้อความโดยเปลี่ยนฟอน์ตการแสดงผล
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Wire.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 รวมไฟล์ไลบรารี่ Adafruit_GFX.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 3 รวมไฟล์ไลบรารี่ Adafruit_SSD1306.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 4 รวมไฟล์ฟอนต์เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 5 กาหนดชื่อเรี ยกโมดูลจอว่า OLED
- บรรทัดที่ 8 ประกาศใช้งานฟอนต์
- บรรทัดที่ 9 ประกาศเริ่ มใช้งานไลบรารี่ พร้อมระบุแอดเดรสจอ OLED
- บรรทัดที่ 13 ล้างข้อมูลที่แสดงผลหน้าจอ
- บรรทัดที่ 14 กาหนดสี ตวั อักษรและสี พ้นื หลังของตัวอักษร
- บรรทัดที่ 15 กาหนดพิกดั ที่จะพิมพ์ขอ้ ความ
262 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
- บรรทัดที่ 16 กาหนดขนาดของตัวอักษร
- บรรทัดที่ 17 แสดงผลข้อความแล้วให้เคอร์ เซอร์ ข้ ึนไปรอที่บรรทัดใหม่
- บรรทัดที่ 20 สั่งให้แสดงผล
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองเปลี่ยนรู ปแบบการแสดงผล
9. สรุปผลการปฏิบัติงาน
A4(SDA)
A5(SCL)
GND
ใบงานที่ 4.21
การเขียนโปรแกรมแสดงผลรู ปภาพด้ วยจอ OLED 128×64
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถเขียนโปรแกรมแสดงผลรู ปภาพด้วยจอ OLED 128×64 ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีเขียนโปรแกรมแสดงผลรู ปภาพด้วยจอ OLED 128×64ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. บอร์ด Arduino Nano 3.0 1 ตัว
3. OLED ขนาด 128×64 แบบ I2C ที่ใช้ไดร์เวอร์เบอร์ SSD1306 1 ตัว
4. สายเชื่อมต่อ USB (Mini USB) 1 เส้น
5. สายเชื่อมต่อวงจร 1 ชุด
6. คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
264 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
รู ปภาพที่แสดงผลบนจอ OLED ขนาด 128×64 สามารถทาได้ 2 วิธีหลัก ๆ คือ เขียนขึ้นมาใหม่
และใช้รูปภาพที่มีอยู่แล้ว สาหรับการเขียนรู ปภาพขึ้นมาใหม่สามารถใช้โปรแกรมวาดรู ปภาพทัว่ ๆ ไป
เขียนรู ปภาพที่ตอ้ งการได้เพียงการเขียนรู ปภาพให้ได้ตามต้องการมีความซับซ้อนมากพอสมควรสาหรับ
ผูท้ ี่ไม่มีทกั ษะในการวาดรู ปด้วยแล้วแทบจะเป็ นไปไม่ได้เลย งานครั้งนี้เสนอการนารู ปภาพที่มีอยูแ่ ล้วซึ่ ง
เป็ นวิธีที่ง่ายสุ ดคือการค้นหารู ปภาพที่ตอ้ งการทางอินเตอร์เน็ตมีข้ นั ตอนการดาเนินการดังนี้
ขั้นตอนการดาเนินการ
1. เปิ ดหาภาพทีต่ ้ องการ เป็ นการหารู ปภาพจากแหล่งต่าง ๆ ที่มีลกั ษณะตามที่ตอ้ งการและมีขนาดที่
สามารถใช้งานได้ ตัวอย่างเช่ นจากเวปไซต์ http://www.alessioatzeni.com/meteocons ซึ่ งเป็ น
ภาพขาวดาและมีขนาดใกล้เคียงกับที่ตอ้ งการ หากภาพเล็กหรื อใหญ่เกินความต้องการสามารถ
ปรับขยาย/ย่อการแสดงผลในโปรแกรมบราวน์เซอร์ (โปรแกรมที่กาลังเปิ ดเวป) เพื่อให้ได้ขนาด
ที่ตอ้ งการและมีขนาดไม่เกินขนาดของหน้าจอ OLED ที่ใช้งาน การปรับขยาย/ย่อทาได้โดยการ
กดแป้นพิมพ์ Ctrl ค้างไว้แล้วกลิ้งเมาส์ให้ได้ขนาดตามต้องการ
7. ฟั งก์ ชั่นกาหนดตาแหน่ งเคอร์ เซอร์ สาหรั บพิมพ์ ข้อความ เป็ นฟั งก์ชั่นกาหนดพิกดั ให้กบั
เคอร์ เซอร์ เพื่อใช้พิมพ์ขอ้ ความในตาแหน่งที่ตอ้ งการ รู ปแบบเป็ นดังนี้
270 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
.setCursor(x0,y0);
x0: พิกดั แกน x
y0: พิกดั แกน y
8. ฟังก์ ชั่นเรียกใช้ งานฟอนต์ เป็ นฟั งก์ชนั่ ที่ใช้เรี ยกใช้งานฟอนต์ที่ตอ้ งการโดยใส่ ชื่อฟอนต์ที่
ต้องการใช้งาน (ชื่อฟอนต์ในตารางที่ 4.20-2) รู ปแบบเป็ นดังนี้
.setFont(&Font);
Font: ชื่อฟอนต์ที่ตอ้ งการใช้งาน (ไม่ตอ้ งใส่ สกุล .h)
7. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานสามารถทาได้ 2 แนวทาง คือ
1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR
2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ ดโมดูล Arduino สาเร็ จรู ป
เนื่องจากไม่มีโมเดลจาลอง OLED ในโปรแกรม Proteus จึงไม่สามารถจาลองการทางานได้
VCC
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
A4(SDA)
A5(SCL)
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
VCC GND S CL S DA
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
8. การเขียนโค้ ดโปรแกรมควบคุม
การทดลองที่ 1 เขียนโปรแกรมแสดงภาพบนจอ OLED
ผังงาน จากโจทย์สามารถเขียนเป็ นผังงานได้ดงั นี้
START
แสดงผล
รายละเอียดโค้ ดโปรแกรม
- บรรทัดที่ 1 รวมไฟล์ไลบรารี่ Wire.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 2 รวมไฟล์ไลบรารี่ Adafruit_GFX.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 3 รวมไฟล์ไลบรารี่ Adafruit_SSD1306.h เข้ามาในโค้ดโปรแกรม
- บรรทัดที่ 4 กาหนดชื่อเรี ยกโมดูลจอว่า OLED
- บรรทัดที่ 5-62 ตัวแปรที่ใช้เก็บรู ปภาพ
- บรรทัดที่ 65 ประกาศเริ่ มใช้งานไลบรารี่ พร้อมระบุแอดเดรสจอ OLED
- บรรทัดที่ 66 ล้างข้อมูลที่แสดงผลหน้าจอ
- บรรทัดที่ 67 วาดรู ปภาพจากตัวแปรเก็บรู ปภาพ
- บรรทัดที่ 68 สั่งให้แสดงผล
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองเปลี่ยนรู ปภาพในการแสดงผล
9. สรุปผลการปฏิบัติงาน
274 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
A4(SDA)
A5(SCL)
GND
ใบงานที่ 4.22
การประยุกต์ การแสดงผลที่ LCD 4 bit กับเซนเซอร์ ต่าง ๆ
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถประยุกต์การแสดงผลที่ LCD 4 bit กับเซนเซอร์ ต่าง ๆ ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีประยุกต์การแสดงผลที่ LCD 4 bit กับเซนเซอร์ ต่าง ๆ ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 Trim pot 10k 1 ตัว 2.5 LED 3mm 4 ตัว
2.2 Potentiometer 10k 1 ตัว 2.6 ตัวท้านทาน 220 4 ตัว
2.3 Thermistor NTC 10k 1 ตัว 2.7 ตัวท้านทาน 4.7k 1 ตัว
2.4 IC DS18B20 1 ตัว 2.8 ตัวท้านทาน 10k 1 ตัว
3. อุปกรณ์ร่วมอื่น ๆ
3.1 บอร์ ด Arduino Nano 3.0 1 ตัว 3.5 สายเชื่อมต่อ USB (Mini) 1 เส้น
3.2 LCD ชนิดตัวอักษร 16×2 1 ตัว 3.6 สายเชื่อมต่อวงจร 1 ชุด
3.3 โมดูลวัดอุณหภูมิ DHT22 1 ตัว 3.7 คอมพิวเตอร์ 1 เครื่ อง
3.4 โมดูลอัลตร้าโซนิค HC-SR04 1 ตัว
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
276 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
การประยุกต์ใช้งานในใบงานนี้ เป็ นการเปลี่ ยนเป้ าหมายการแสดงผลจากเดิ มในใบงานที่ 4.6,
4.7, 4.8, 4.9 และ 4.10 ที่เป็ นการอ่านค่าจากเซนเซอร์ แบบต่าง ๆ แล้วนาผลมาคานวณ (หรื อนามาใช้ได้
เลยในบางใบงาน) ไปแสดงผลผ่านทางจอคอมพิวเตอร์ ผ่านทางการสื่ อสารทางพอร์ ตอนุ กรมซึ่ ง การ
ดาเนิ นการดัง กล่ า วเป็ นการเขี ยนโค้ดโปรแกรมเพื่ อใช้ท ดสอบผลการท างานกับ เซนเซอร์ ต่า ง ๆ ใน
เบื้องต้นซึ่ งไม่ตอ้ งต่อตัวแสดงผลอื่น ๆ สาหรับใบงานนี้ เป็ นการเปลี่ ยนเป้ าหมายจากการแสดงผลจาก
จอคอมพิวเตอร์มาเป็ นจอ LCD ชนิดตัวอักษรที่ต่อเชื่อมแบบ 4 บิต
6. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานเป็ นการทดลองจากเซนเซอร์ ท้ งั 5 แบบโดยแสดงผลที่จอ LCD
ชนิดตัวอักษรที่เชื่ อมต่อแบบ 4 บิต วงจรที่ใช้ทดลองมีดงั นี้
1. วงจรที่ใช้เซนเซอร์ เป็ นตัวต้านทานปรับค่าได้
2. วงจรที่ใช้เซนเซอร์เป็ นเทอร์ มิสเตอร์วดั อุณหภูมิที่อ่านค่ามาเป็ นแรงดันแอนาลอก
3. วงจรที่ใช้เซนเซอร์เป็ น DHT22
4. วงจรที่ใช้เซนเซอร์เป็ น Ultrasonic
5. วงจรที่ใช้เซนเซอร์เป็ น DS18B20
X1 28
16MHz 9 A5 10k
XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
11
5V D2 D4
12
D3 D5
13
D4 D6
14
D5 D7
VCC
A5 10k
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
D13
3V3
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจาก POT
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงค่าโพเทนธิ โอมิเตอร์ แล้วสังเกตผล
ใบงานที่ 4.22 การประยุกต์การแสดงผลที่ LCD 4 bit กับเซนเซอร์ต่าง ๆ 279
VCC
R4
X1 10k
16MHz 9 28
XTAL1 A5
10 XTAL2 NTC
T
Thermistor
C2,C3 GND 10k
22pF 8,22
11
5V D2 D4
12
D3 D5
13
D4 D6
14
D5 D7
VCC
R1
10k
A5
NTC
T
Thermistor
GND 10k
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
D13
3V3
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจาก NTC
คานวณ
แสดงผล
26 delay(500);
27 }
28 double Thermistor(int RawADC)
29 {
30 double Cal;
31 Cal = log(10000.0/((1024.0/RawADC-1)));
32 Cal = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Cal * Cal))* Cal);
33 Cal = Cal - 273.15; // Convert Kelvin to Celcius
34 return Cal;
35 }
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเพิ่ม/ลดอุณหภูมิที่เทอร์ มิสเตอร์ สังเกตผล
วงจรทีใ่ ช้ เซนเซอร์ เป็ น DHT22
VCC
R4 DHT22
4k7
X1
16MHz 9 D8 14 DATA
XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
11
5V D2 D4
12
D3 D5
13
D4 D6
14
D5 D7
R1 DHT22
4k7
D8 DATA
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
D13
3V3
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจากโมดูล DHT22
แสดงผล
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเพิ่ม/ลดอุณหภูมิและความชื้น สังเกตผล
VCC
1
VCC
HC-SR04
X1 15 2
16MHz 9 D9 Trig
XTAL1 14 3
10 XTAL2 D8 Echo
4
C2,C3 GND GND
22pF 8,22
VCC
1
VCC
HC-SR04
2
D9 Trig
3
D8 Echo
4
GND
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
Echo
Trig
VCC
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
HC-SR04
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจากโมดูล Ultrasonic
แสดงผล
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงรู ปแบบการแสดงผล
286 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
3 DS18B20 3 DS18B20
D8
14 2 DQ VCC 2 DQ VCC
X1 15 GND GND
16MHz D9
9 XTAL1 1 1
10 XTAL2
C2,C3 GND
22pF 8,22
11
5V D2 D4
12
D3 D5
13
D4 D6
14
D5 D7
3 DS18B20 3 DS18B20
D8 2 DQ VCC 2 DQ VCC
D9 GND GND
1 1
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
GND
RST
REF
VIN
D13
3V3
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D S1 8 D S1 8
B 20 B 20
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจากไอซี
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus (ใช้ Arduino IDE v. 1.6.5 ในการคอมไพล์)
2. ทดลองด้วยวงจรจริ ง
3. ทดลองให้อุณหภูมิที่ตวั ไอซีเปลี่ยนแปลงแล้วสังเกตผล
9. สรุปผลการปฏิบัติงาน
11
D2 D4
12
5V D3 D5
13
D4 D6
14
D5 D7
R5 DHT22
4k7
D8 DATA
GND
ใบงานที่ 4.23
การประยุกต์ การแสดงผลที่ LCD I2C กับเซนเซอร์ ต่าง ๆ
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถประยุกต์การแสดงผลที่ LCD I2C กับเซนเซอร์ ต่าง ๆ ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีประยุกต์การแสดงผลที่ LCD I2C กับเซนเซอร์ ต่าง ๆ ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 Potentiometer 10k 1 ตัว 2.5 ตัวท้านทาน 220 ohm 4 ตัว
2.2 Thermistor NTC 10k 1 ตัว 2.6 ตัวท้านทาน 4.7k 1 ตัว
2.3 IC DS18B20 1 ตัว 2.7 ตัวท้านทาน 10k 1 ตัว
2.4 LED 3mm 4 ตัว
3. อุปกรณ์ร่วมอื่น ๆ
3.1 บอร์ ด Arduino Nano 3.0 1 ตัว 3.5 โมดูลอัลตร้าโซนิค HC-SR04 1 ตัว
3.2 LCD ชนิดตัวอักษร 16x2 1 ตัว 3.6 สายเชื่อมต่อ USB (Mini) 1 เส้น
3.3 โมดูล I2C สาหรับ LCD 1 ตัว 3.7 สายเชื่อมต่อวงจร 1 ชุด
3.4 โมดูลวัดอุณหภูมิ DHT22 1 ตัว 3.8 คอมพิวเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
290 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
การประยุกต์ใช้งานในใบงานนี้ เป็ นการเปลี่ ยนเป้ าหมายการแสดงผลจากเดิ มในใบงานที่ 4.6,
4.7, 4.8, 4.9 และ 4.10 ที่เป็ นการอ่านค่าจากเซนเซอร์ แบบต่าง ๆ แล้วนาผลมาคานวณ (หรื อนามาใช้ได้
เลยในบางใบงาน) ไปแสดงผลผ่านทางจอคอมพิวเตอร์ ผ่านทางการสื่ อสารทางพอร์ ตอนุ กรมซึ่ ง การ
ดาเนิ นการดัง กล่ า วเป็ นการเขี ยนโค้ดโปรแกรมเพื่ อใช้ท ดสอบผลการท างานกับ เซนเซอร์ ต่า ง ๆ ใน
เบื้องต้นซึ่ งไม่ตอ้ งต่อตัวแสดงผลอื่น ๆ สาหรับใบงานนี้ เป็ นการเปลี่ ยนเป้ าหมายจากการแสดงผลจาก
จอคอมพิวเตอร์มาเป็ นจอ LCD ชนิดตัวอักษรที่ต่อเชื่อมแบบ I2C ผ่านทางโมดูลสื่ อสาร
6. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานเป็ นการทดลองจากเซนเซอร์ ท้ งั 5 แบบโดยแสดงผลที่จอ LCD
ชนิดตัวอักษรที่เชื่ อมต่อแบบ 4 บิต วงจรที่ใช้ทดลองมีดงั นี้
1. วงจรที่ใช้เซนเซอร์ เป็ นตัวต้านทานปรับค่าได้
2. วงจรที่ใช้เซนเซอร์เป็ นเทอร์ มิสเตอร์วดั อุณหภูมิที่อ่านค่ามาเป็ นแรงดันแอนาลอก
3. วงจรที่ใช้เซนเซอร์เป็ น DHT22
4. วงจรที่ใช้เซนเซอร์เป็ น Ultrasonic
5. วงจรที่ใช้เซนเซอร์เป็ น DS18B20
VCC
X1
16MHz 9 XTAL1 26
A3 10k
10 XTAL2
C2,C3 GND
22pF 8,22
GND
VCC
SDA
SCL
A4(SDA)
A5(SCL)
VCC
A3 10k
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
GND
I
I
VCC
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
SDA
G
G
SCL
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
START
อ่ านค่าจาก POT
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงค่าโพเทนธิ โอมิเตอร์ แล้วสังเกตผล
วงจรทีใ่ ช้ เซนเซอร์ เป็ นเทอร์ มสิ เตอร์ วดั อุณ ภูมิ
VCC
VCC
R4
X1 10k
16MHz 9 26
XTAL1 A3
10 XTAL2 NTC
T
Thermistor
C2,C3 GND 10k
22pF 8,22
GND
VCC
SDA
SCL
A4(SDA)
A5(SCL)
VCC
R1
10k
A3
NTC
T
Thermistor
10k
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
GND
I
I
VCC
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
SDA
G
G
SCL
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจาก NTC
คานวณ
แสดงผล
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเพิ่ม/ลดอุณหภูมิที่เทอร์ มิสเตอร์ สังเกตผล
ใบงานที่ 4.23 การประยุกต์การแสดงผลที่ LCD I2C กับเซนเซอร์ตา่ ง ๆ 295
VCC
R4 DHT22
4k7
X1
16MHz 9 XTAL1 D8 14 DATA
10 XTAL2
C2,C3 GND
22pF 8,22
GND
VCC
SDA
SCL
A4(SDA)
A5(SCL)
VCC
R1 DHT22
4k7
D8 DATA
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
GND
I
VCC
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
SDA
G
SCL
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจากโมดูล DHT22
แสดงผล
24 {
25 lcd.clear();
26 lcd.print("Failed read DHT");
27 return;
28 }
29 lcd.setCursor(10,0);
30 lcd.print(h);
31 lcd.setCursor(10,1);
32 lcd.print(t);
33 }
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเพิ่ม/ลดอุณหภูมิและความชื้น สังเกตผล
VCC
1
VCC
HC-SR04
15 2
D9 Trig
X1 14 3
16MHz 9 D8 Echo
XTAL1 4
10 XTAL2 GND
C2,C3 GND
22pF 8,22
VCC
1
VCC
HC-SR04
2
D9 Trig
3
D8 Echo
4
GND
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
GND
I
I
VCC
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
SDA
GND
Echo
Trig
VCC
G
G
SCL
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
HC-SR04
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจากโมดูล Ultrasonic
แสดงผล
8 lcd.init();
9 lcd.backlight();
10 lcd.begin(16, 2); // set LCD size
11 lcd.print("Length is :");
12 lcd.setCursor(13,1);
13 lcd.print("cm");
14 }
15 void loop()
16 {
17 delay(500);
18 lcd.setCursor(7,1);
19 float L=ultrasonic.Ranging(CM);
20 lcd.print(L);
21 }
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงรู ปแบบการแสดงผล
3 DS18B20 3 DS18B20
D8
14 2 DQ VCC 2 DQ VCC
X1 15 GND GND
16MHz D9
9 XTAL1 1 1
10 XTAL2
C2,C3 GND
22pF 8,22
GND
VCC
SDA
SCL
A4(SDA)
A5(SCL)
R1 R2
4.7k VCC 4.7k VCC
3 DS18B20 3 DS18B20
D8 2 DQ VCC 2 DQ VCC
D9 GND GND
1 1
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
GND
I
I
VCC
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
SDA
G
G
SCL
F
F
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
D S1 8 D S1 8
B 20 B 20
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจากไอซี
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus (ใช้ Arduino IDE v. 1.6.5 ในการคอมไพล์)
2. ทดลองด้วยวงจรจริ ง
3. ทดลองให้อุณหภูมิที่ตวั ไอซีเปลี่ยนแปลงแล้วสังเกตผล
302 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
7. สรุปผลการปฏิบัติงาน
8. งานทีม่ อบ มาย
1. ออกแบบโจทย์ประยุกต์ใช้งานที่ใช้เซนเซอร์ วดั อุณหภูมิและความชื้ น DHT22 แสดงผลการ
ทางานที่จอ LCD I2C
ARDUINO
VCC VCC
GND
VCC
SDA
SCL
A4(SDA)
A5(SCL)
R1-R4 220
D10
D11
D12
D13 VCC
LED1-LED4
R5 DHT22
4k7
D8 DATA
GND
R1-R4 220
D10
D11
D12
D13
LED1-LED4 VCC
1
VCC
HC-SR04
2
D9 Trig
3
D8 Echo
4
GND
GND
ใบงานที่ 4.24
การประยุกต์ การแสดงผลด้ วยโมดูล MAX7219 กับเซนเซอร์ ต่าง ๆ
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถประยุกต์การแสดงผลด้วยโมดูล MAX7219 กับเซนเซอร์ ต่าง ๆ ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีประยุกต์การแสดงผลด้วยโมดูล MAX7219 กับเซนเซอร์ ต่าง ๆ ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 Potentiometer 10k 1 ตัว 2.5 ตัวท้านทาน 220 ohm 4 ตัว
2.2 Thermistor NTC 10k 1 ตัว 2.6 ตัวท้านทาน 4.7k 1 ตัว
2.3 IC DS18B20 1 ตัว 2.7 ตัวท้านทาน 10k 1 ตัว
2.4 LED 3mm 4 ตัว
3. อุปกรณ์ร่วมอื่น ๆ
3.1 บอร์ ด Arduino Nano 3.0 1 ตัว 3.5 สายเชื่อมต่อ USB (Mini) 1 เส้น
3.2 โมดูลตัวเลข MAX7219 1 ตัว 3.6 สายเชื่อมต่อวงจร 1 ชุด
3.3 โมดูลวัดอุณหภูมิ DHT22 1 ตัว 3.7 คอมพิวเตอร์ 1 เครื่ อง
3.4 โมดูลอัลตร้าโซนิค HC-SR04 1 ตัว
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
304 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
การประยุกต์ใช้งานในใบงานนี้ เป็ นการเปลี่ ยนเป้ าหมายการแสดงผลจากเดิ มในใบงานที่ 4.6,
4.7, 4.8, 4.9 และ 4.10 ที่เป็ นการอ่านค่าจากเซนเซอร์ แบบต่าง ๆ แล้วนาผลมาคานวณ (หรื อนามาใช้ได้
เลยในบางใบงาน) ไปแสดงผลผ่านทางจอคอมพิวเตอร์ ผ่านทางการสื่ อสารทางพอร์ ตอนุ กรมซึ่ ง การ
ดาเนิ นการดัง กล่ า วเป็ นการเขี ยนโค้ดโปรแกรมเพื่ อใช้ท ดสอบผลการท างานกับ เซนเซอร์ ต่า ง ๆ ใน
เบื้องต้นซึ่ งไม่ตอ้ งต่อตัวแสดงผลอื่น ๆ สาหรับใบงานนี้ เป็ นการเปลี่ ยนเป้ าหมายจากการแสดงผลจาก
จอคอมพิวเตอร์มาแสดงผลที่โมดูลตัวเลข MAX7219
6. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่ อใช้ท ดลองในใบงานเป็ นการทดลองจากเซนเซอร์ ท้ งั 5 แบบโดยแสดงผลที่ โมดู ล
แสดงผลตัวเลข MAX7219 วงจรที่ใช้ทดลองมีดงั นี้
1. วงจรที่ใช้เซนเซอร์ เป็ นตัวต้านทานปรับค่าได้
2. วงจรที่ใช้เซนเซอร์ เป็ นเทอร์ มิสเตอร์ วดั อุณหภูมิที่อ่านค่ามาเป็ นแรงดันแอนนาลอก
3. วงจรที่ใช้เซนเซอร์เป็ น DHT22
4. วงจรที่ใช้เซนเซอร์เป็ น Ultrasonic
5. วงจรที่ใช้เซนเซอร์เป็ น DS18B20
28
A5 10k
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
5V
VCC
MAX7219 7-Segment 4-Digit
VCC
D11(MOSI) Din
D10(SS) Load
D13(SCK) Clk
GND
VCC
A5 10k
GND
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
VCC
GND
F
F
DIN
CS
GND
RST
REF
VIN
3V3
D13
CLK
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
C
C
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจาก POT
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงค่าโพเทนธิ โอมิเตอร์ แล้วสังเกตผล
วงจรทีใ่ ช้ เซนเซอร์ เป็ นเทอร์ มสิ เตอร์ วดั อุณ ภูมิ
VCC
5V
VCC
MAX7219 7-Segment 4-Digit
VCC
D11(MOSI) Din
D10(SS) Load
D13(SCK) Clk
GND
VCC
R1
10k
A5
NTC
T
Thermistor
10k
GND
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
VCC
GND
F
F
DIN
CS
GND
RST
REF
VIN
3V3
D13
CLK
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
C
C
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจาก NTC
คานวณ
แสดงผล
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเพิ่ม/ลดอุณหภูมิที่เทอร์ มิสเตอร์ สังเกตผล
ใบงานที่ 4.24 การประยุกต์การแสดงผลด้วยโมดูล MAX7219 กับเซนเซอร์ต่าง ๆ 309
D8 14 DATA
X1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
5V
VCC
MAX7219 7-Segment 4-Digit
VCC
D11(MOSI) Din
D10(SS) Load
D13(SCK) Clk
GND
VCC
R1 DHT22
4k7
D8 DATA
GND
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
VCC
GND
F
DIN
CS
GND
RST
REF
VIN
3V3
D13
CLK
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
C
C
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจากโมดูล DHT22
แสดงผล
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเพิม่ /ลดอุณหภูมิและความชื้น สังเกตผล
HC-SR04
15 2
D9 Trig
14 3
D8 Echo
4
X1 GND
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
5V
VCC
MAX7219 7-Segment 4-Digit
VCC
D11(MOSI) Din
D10(SS) Load
D13(SCK) Clk
GND
VCC
1
VCC
HC-SR04
2
D9 Trig
3
D8 Echo
4
GND
GND
15
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
VCC
GND
F
F
DIN
GND
Echo
Trig
VCC
CS
GND
RST
REF
VIN
3V3
D13
CLK
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
C
C
HC-SR04
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
อ่ านค่าจากโมดูล Ultrasonic
แสดงผล
7 {
8 HCMAX7219.Intensity(12, 0); /*Sets the intensity of the LED 0 to 15 */
9 }
10 void loop()
11 {
12 delay(500);
13 HCMAX7219.Clear(); /* Clear the output buffer */
14 float L=ultrasonic.Ranging(CM);
15 HCMAX7219.print7Seg(L,8); /* Write value to the output buffer */
16 HCMAX7219.print7Seg("CM",5); /* Write value to the output buffer */
17 HCMAX7219.Refresh(); /* Send the output buffer to the display */
18 }
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองเปลี่ยนแปลงรู ปแบบการแสดงผล
3 DS18B20 3 DS18B20
14 2 DQ VCC 2 DQ VCC
D8
D9 15 GND GND
X1
1 1
16MHz 9 XTAL1
10 XTAL2
C2,C3 GND
22pF 8,22
R1 R2
4.7k VCC 4.7k VCC
3 DS18B20 3 DS18B20
D8 2 DQ VCC 2 DQ VCC
D9 GND GND
1 1
GND
15
40
60
10
20
25
30
35
45
50
55
1
5
J
J
I
I
G H
G H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
VCC
GND
F
F
DIN
CS
GND
RST
REF
VIN
3V3
D13
CLK
A0
A2
A4
A1
A3
A5
A6
A7
5V
D E
D E
D S1 8 D S1 8
B 20 B 20
C
C
B
B
A
A
15
40
60
10
20
25
30
35
45
50
55
1
การต่อวงจรเพื่อทดลองด้วยการจาลองการทางานด้วยโปรแกรม Proteus
(a) เมื่อใช้ Arduino IDE V. 1.8.3 (b) เมื่อใช้ Arduino IDE V. 1.6.5
รู ปที่ 4.24-20 ผลการทดลองในโปรแกรมจาลองการทางานจาก Arduino IDE ต่างเวอร์ ชนั่
ใบงานที่ 4.24 การประยุกต์การแสดงผลด้วยโมดูล MAX7219 กับเซนเซอร์ต่าง ๆ 315
อ่ านค่าจากไอซี
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus (ใช้ Arduino IDE v. 1.6.5 ในการคอมไพล์)
2. ทดลองด้วยวงจรจริ ง
3. ทดลองให้อุณหภูมิที่ตวั ไอซีเปลี่ยนแปลงแล้วสังเกตผล
316 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
7. สรุปผลการปฏิบัติงาน
8. งานทีม่ อบ มาย
1. ออกแบบโจทย์ประยุกต์ใช้งานที่ใช้เซนเซอร์ วดั อุณหภูมิและความชื้ น DHT22 แสดงผลการ
ทางานที่โมดูลตัวเลข MAX7219
VCC ARDUINO
VCC
MAX7219 7-Segment 4-Digit
5V VCC
D11(MOSI) Din
D10(SS) Load
D13(SCK) Clk
GND
R1-R4 220
D2
D3
D4
VCC
D5
LED1-LED4
R5 DHT22
4k7
D8 DATA
GND
R1-R4 220
D2
D3
D4
D5
LED1-LED4
VCC
1
VCC
HC-SR04
2
D9 Trig
3
D8 Echo
4
GND
GND
ใบงานที่ 4.25
การประยุกต์ การแสดงผลที่ OLED กับเซนเซอร์ ต่าง ๆ
1. จุดประสงค์ ทวั่ ไป
เพื่อให้สามารถประยุกต์การแสดงผลที่ OLED กับเซนเซอร์ ต่าง ๆ ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกวิธีประยุกต์การแสดงผลที่ OLED กับเซนเซอร์ ต่าง ๆ ได้
2. บอกขั้นตอนการต่อวงจรเพื่อทดลองบนบอร์ ดทดลองได้
3. ทดสอบการทางานของบอร์ด Arduino ได้
4. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. บอร์ดทดลอง Breadboard 830 Point 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ ประกอบด้วย
2.1 Potentiometer 10k 1 ตัว 2.5 ตัวท้านทาน 220 ohm 4 ตัว
2.2 Thermistor NTC 10k 1 ตัว 2.6 ตัวท้านทาน 4.7k 1 ตัว
2.3 IC DS18B20 1 ตัว 2.7 ตัวท้านทาน 10k 1 ตัว
2.4 LED 3mm 4 ตัว
3. อุปกรณ์ร่วมอื่น ๆ
3.1 บอร์ ด Arduino Nano 3.0 1 ตัว 3.5 สายเชื่อมต่อ USB (Mini) 1 เส้น
3.2 โมดูลจอ OLED (SSD1306) 1 ตัว 3.6 สายเชื่อมต่อวงจร 1 ชุด
3.3 โมดูลวัดอุณหภูมิ DHT22 1 ตัว 3.7 คอมพิวเตอร์ 1 เครื่ อง
3.4 โมดูลอัลตร้าโซนิค HC-SR04 1 ตัว
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไป จุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการต่อวงจรลงบอร์ ดทดลองตามวงจรที่กาหนด
3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
318 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
5. ทฤษฎีพืน้ ฐาน
การประยุกต์ใช้งานในใบงานนี้ เป็ นการเปลี่ ยนเป้ าหมายการแสดงผลจากเดิ มในใบงานที่ 4.6,
4.7, 4.8, 4.9 และ 4.10 ที่เป็ นการอ่านค่าจากเซนเซอร์ แบบต่าง ๆ แล้วนาผลมาคานวณ (หรื อนามาใช้ได้
เลยในบางใบงาน) ไปแสดงผลผ่านทางจอคอมพิวเตอร์ ผ่านทางการสื่ อสารทางพอร์ ตอนุ กรมซึ่ ง การ
ดาเนิ นการดัง กล่ า วเป็ นการเขี ยนโค้ดโปรแกรมเพื่ อใช้ท ดสอบผลการท างานกับ เซนเซอร์ ต่า ง ๆ ใน
เบื้องต้นซึ่ งไม่ตอ้ งต่อตัวแสดงผลอื่น ๆ สาหรับใบงานนี้ เป็ นการเปลี่ยนเป้ าหมายจากการแสดงผลจาก
จอคอมพิวเตอร์มาเป็ นจอ OLED
6. วงจรทีใ่ ช้ ทดลอง
วงจรเพื่อใช้ทดลองในใบงานเป็ นการทดลองจากเซนเซอร์ ท้ งั 5 แบบโดยแสดงผลที่จอ OLED
วงจรที่ ใ ช้ท ดลองมี ดัง นี้ (OLED ไม่ ส ามารถจาลองการท างานด้วย Proteus ได้ต้องทดลองวงจรจริ ง
เท่านั้น)
1. วงจรที่ใช้เซนเซอร์ เป็ นตัวต้านทานปรับค่าได้
2. วงจรที่ใช้เซนเซอร์เป็ นเทอร์ มิสเตอร์วดั อุณหภูมิที่อ่านค่ามาเป็ นแรงดันแอนาลอก
3. วงจรที่ใช้เซนเซอร์เป็ น DHT22
4. วงจรที่ใช้เซนเซอร์เป็ น Ultrasonic
5. วงจรที่ใช้เซนเซอร์เป็ น DS18B20
VCC
X1
16MHz 9 XTAL1 26
A3 10k
10 XTAL2
C2,C3 GND
22pF 8,22
A4(SDA)
A5(SCL)
A3 10k
GND
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
VCC GND S CL S DA
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
อ่ านค่าจาก POT
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองเปลี่ยนแปลงค่าโพเทนธิ โอมิเตอร์ แล้วสังเกตผล
วงจรทีใ่ ช้ เซนเซอร์ เป็ นเทอร์ มสิ เตอร์ วดั อุณ ภูมิ
VCC
VCC
R4
X1 10k
16MHz 9 26
XTAL1 A3
10 XTAL2 NTC
T
Thermistor
C2,C3 GND 10k
22pF 8,22
A4(SDA)
A5(SCL)
VCC
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
VCC GND S CL S DA
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
อ่ านค่าจาก NTC
คานวณ
แสดงผล
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองเพิ่ม/ลดอุณหภูมิที่เทอร์ มิสเตอร์ สังเกตผล
VCC
R4 DHT22
4k7
X1
16MHz 9 XTAL1 D8 14 DATA
10 XTAL2
C2,C3 GND
22pF 8,22
A4(SDA)
A5(SCL)
VCC
R1 DHT22
4k7
D8 DATA
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
F
VCC GND S CL S DA
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
อ่ านค่าจากโมดูล DHT22
แสดงผล
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองเพิ่ม/ลดอุณหภูมิและความชื้น สังเกตผล
R2,R3
USB to UART (TTL Level) 1k
DTR 3 VCC GND SCL SDA
RXD D1(TXD)
2
TXD D0(RXD)
+5V
GND
3V3
VCC
1
VCC
HC-SR04
15 2
D9 Trig
X1 14 3
16MHz 9 D8 Echo
XTAL1 4
10 XTAL2 GND
C2,C3 GND
22pF 8,22
A4(SDA)
A5(SCL)
VCC
1
VCC
HC-SR04
2
D9 Trig
3
D8 Echo
4
GND
GND
10
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D8
D7
D6
D5
D4
D3
D2
D0
D1
GND
D11
D10
GND
Echo
Trig
VCC
G
G
F
F
VCC GND S CL S DA
GND
RST
REF
VIN
3V3
D13
A0
A1
A2
A3
A4
A5
A6
A7
5V
E
E
HC-SR04
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
อ่ านค่าจากโมดูล Ultrasonic
แสดงผล
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองเปลี่ยนแปลงรู ปแบบการแสดงผล
326 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
R2,R3
USB to UART (TTL Level) 1k
DTR 3
RXD D1(TXD)
2
TXD D0(RXD) VCC GND SCL SDA
+5V
GND
3V3
R4
4.7k VCC
3 DS18B20
D8
14 2 DQ VCC
X1 GND
16MHz 9 XTAL1 1
10 XTAL2
C2,C3 GND
22pF 8,22
A4(SDA)
A5(SCL)
R1
4.7k VCC VCC GND SCL SDA
3 DS18B20
D8 2 DQ VCC
GND
GND 1
15
20
25
30
35
40
45
50
55
60
1
5
J
J
I
I
H
H
D12
RST
D9
D7
D5
D1
D8
D6
D4
D3
D2
D0
GND
D11
D10
G
G
F
B 20
D S1 8
VCC GND S CL S DA
GND
RST
REF
VIN
3V3
D13
A0
A2
A4
A1
A3
A5
A6
A7
5V
E
E
D
D
C
C
B
B
A
A
10
15
20
25
30
35
40
45
50
55
60
1
อ่ านค่าจากไอซี
ทดลองการทางาน
1. ทดลองด้วยวงจรจริ ง
2. ทดลองให้อุณหภูมิที่ตวั ไอซีเปลี่ยนแปลงแล้วสังเกตผล
7. สรุปผลการปฏิบัติงาน
328 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุวรรณเพชร]
8. งานทีม่ อบ มาย
1. เขียนโปรแกรมประยุกต์ใช้งานที่ใช้เซนเซอร์ วดั อุณหภูมิ DS18B20 และควบคุมการทางาน
ของ LED ตามค่าของอุณหภูมิที่กาหนดโดยแสดงผลการทางานที่จอ OLED
ARDUINO
VCC VCC
A4(SDA)
A5(SCL)
R1-R2
220
LED1-LED2
D2
VCC GND SCL SDA
D3
R3
4.7k VCC
3 DS18B20
D8 2 DQ VCC
GND
1
GND
A4(SDA)
A5(SCL)
A3 10k
GND
บรรณานุกรม
ภาคผนวก
ภาพตัวอย่างวงจรที่ใช้ทดลองที่ต่อลงโปรโต้บอร์ ด
ภาพตัวอย่างวงจรที่ใช้ทดลองที่ต่อแผงทดลองที่สร้างแผ่นวงจรพิมพ์ดว้ ยตัวเอง
ภาพตัวอย่างวงจรที่ใช้ทดลองที่ต่อแผงทดลองที่สร้างแผ่นวงจรพิมพ์โดยสั่งโรงงานผลิต
ภาพตัวอย่างวงจรที่ใช้ทดลองที่ต่อลงแผ่นวงจรพิมพ์เอนกประสงค์
เรี ยนรู ้และลองเล่น Arduino เบื้องต้น 331
ภาพตัวอย่างวงจรที่ใช้ทดลองที่ต่อลงโปรโต้บอร์ ด
ภาพตัวอย่างวงจรที่ใช้ทดลองที่ต่อแผงทดลองที่สร้างแผ่นวงจรพิมพ์ดว้ ยตัวเอง
ภาพตัวอย่างวงจรที่ใช้ทดลองที่ต่อแผงทดลองที่สร้างแผ่นวงจรพิมพ์โดยสั่งโรงงานผลิต
332 เรี ยนรู ้และลองเล่น Arduino เบื้องต้น [ครู ประภาส สุ วรรณเพชร]
ภาพตัวอย่างวงจรที่ใช้ทดลองที่ต่อลงแผ่นวงจรพิมพ์เอนกประสงค์