ใบงานที่ 4.5 การเขียนโปรแกรมอา่ นคา่ จากพอร์ตแอนาลอกและการใช้ PWM 95F GH I J20 2025 2530 3035 3540 4045 4550 5055 5560 60F GH I J D12 1 การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลองD11 D10 รูปท่ี 4.5-6 การตอ่ ลงบอร์ดทดลองD9 การตอ่ วงจรเพื่อทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม ProteusD8 5 D7 รูปที่ 4.5-7 การต่อวงจรทดลองในโปรแกรมจาลองการทางานD6 หมายเหตุ D5 D4 1. จากการจาลองการทางานดว้ ยโปรแกรม Proteus ขาพอร์ต D3, D5, D6 ไม่มีสัญญาณ PWMD3 10 ออก แกไ้ ขโดยการเปลี่ยนไปใชข้ าพอร์ต D9, D10, D11 แทนD2 2. การทดลอง PWM เม่ือต่อโหลดดว้ ย LED จะไม่เห็นการเปลี่ยนแปลงของระดบั ความสว่างGND แต่จะเห็นวา่ LED กระพริบ แกไ้ ขโดยการใชส้ โคปจบั สญั ญาณเพือ่ ดูรูปคลื่นแทนRST 8. การเขยี นโค้ดโปรแกรมควบคุม D0 D1 15 การทดลองท่ี 1 เขียนโปรแกรมควบคุมระดบั ความสวา่ งของ LED ที่ต่ออยทู่ ี่ขาพอร์ตดิจิทลั D9 ซ่ึงเป็นขา ที่สามารถส่งสัญญาณ PWM ออกมาไดด้ ้วยคาสั่ง analogWrite(pin,value) โดยควบคุมความสว่างด้วยABCDE ABCDE โพเทนธิโอมิเตอร์ท่ีต่ออยู่ที่ขาพอร์ตแอนาลอก A5 ค่าที่อ่านไดจ้ ะมีค่าอยู่ระหว่าง 0-1023 แต่ค่าที่ใช้D13 ควบคุมดิวต้ีไซเคิลอยรู่ ะหวา่ ง 0-255 การดาเนินการลดคา่ ใหใ้ ชค้ า่ ท่ีอ่านไดห้ ารดว้ ย 4 ก่อนเอาไปใชง้ าน3V3 REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15
96 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริม่ ต้นต่าง อ่านคา่ จาก POT เขยี นค่า PWM แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #define LED 9 //LED Connected to D9 2 #define POT 5 //POT Connected to A5 3 void setup() 4{ 5 pinMode(LED,OUTPUT); 6 Serial.begin(9600); 7} 8 void loop() 9{ 10 int adc=analogRead(POT); 11 analogWrite(LED,adc/4); 12 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ท่ี 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 แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #define LED1 9 //LED1 Connected to D9 2 #define LED2 10 //LED2 Connected to D10 3 #define POT 5 //POT Connected to A5 4 void setup() 5{ 6 pinMode(LED1,OUTPUT); 7 pinMode(LED2,OUTPUT); 8 Serial.begin(9600); 9} 10 void loop() 11 { 12 int adc=analogRead(POT); 13 Serial.print(\"Analog Read value : \"); 14 Serial.print(adc); 15 adc=map(adc,0,1023,0,255); 16 Serial.print(\" map value to : \"); 17 Serial.println(adc); 18 analogWrite(LED1,adc); 19 analogWrite(LED2,255-adc); 20 delay(500); 21 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1,2 กาหนดช่ือ LED1,2 ใหแ้ ทน 9,10 (เป็นขาท่ี LED ต่ออยกู่ บั Arduino) - บรรทดั ท่ี 3 กาหนดชื่อ POT ใหแ้ ทน 5 (เป็นขาที่ Potentiometer ต่ออยกู่ บั Arduino) - บรรทดั ท่ี 6,7 กาหนดโหมดใหก้ บั ขาพอร์ตท่ีตอ่ กบั LED ทางานเป็นเอาตพ์ ทุ พอร์ต - บรรทดั ที่ 8 กาหนดอตั ราเร็วในการส่ือสารขอ้ มูลของพอร์ตอนุกรม - บรรทดั ท่ี 12 อ่านค่าแอนาลอกจาก POT โดยนาเขา้ มาเกบ็ ไวใ้ นตวั แปร adc - บรรทดั ที่ 14 แสดงค่าที่อา่ นไดจ้ าก POT
98 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] - บรรทดั ท่ี 15 ใชฟ้ ังกช์ นั่ เปล่ียนยา่ นตวั เลขของตวั แปรจาก 0-1023 ไปเป็น 0-255 - บรรทดั ที่ 18 เขียนคา่ แอนาลอก (ส่งสญั ญาณพลั ส์แบบ PWM) ออกทางขาที่ใชช้ ่ือวา่ LED1 - บรรทดั ท่ี 19 เขียนคา่ แอนาลอก ซ่ึงเปลี่ยนแปลงค่าตวั เลขท่ีกาหนด duty cycle โดยใชก้ ารคานวณ ทางคณิตศาสตร์ออกทางขาที่ใช้ช่ือว่า LED2 (ใช้ 255 ลบออกจากค่าตวั แปรจะทาให้ค่า duty cycle ท่ีไดต้ รงขา้ มกบั คา่ ตวั แปรเดิม) ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองแกโ้ ปรแกรมให้ LED ติดในรูปแบบอ่ืน ๆ แลว้ สงั เกตผล 9. สรุปผลการปฏบิ ตั ิงาน 10. งานทมี่ อบหมาย 1. เขียนโปรแกรมไฟวง่ิ LED 4 ตวั (กาหนดรูปแบบเอง)โดยใหส้ ามารถปรับความเร็วในการวิง่ ไดด้ ว้ ยโพเทนธิโอมิเตอร์ วงจรที่ใชท้ ดลองเป็นดงั รูป ARDUINO R1-R4 LED1-LED4 D2 220 (PWM)D3 D4 (PWM)D5 VCC A5 10k GND รูปที่ 4.5-8 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง
ใบงานที่ 4.6 การเขียนโปรแกรมรับสวติ ชท์ างพอร์ตแอนาลอก 99 ใบงานท่ี 4.6 การเขยี นโปรแกรมรับสวิตช์ทางพอร์ตแอนาลอก 1. จุดประสงค์ทวั่ ไป เพ่อื ใหส้ ามารถเขียนโปรแกรมรับสวติ ชท์ างพอร์ตแอนาลอกได้ 2. จุดประสงค์เชิงพฤติกรรม 1. บอกวธิ ีเขียนโปรแกรมรับสวติ ช์ทางพอร์ตแอนาลอกได้ 2. บอกข้นั ตอนการตอ่ วงจรเพ่ือทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเล็กทรอนิกส์ประกอบดว้ ย 1 ตวั 4 ตวั 2.1 ตวั ตา้ นทาน 220 ohm 4 ตวั 2.5 ตวั ตา้ นทาน 2.7k 4 ตวั 2.6 LED 3mm 2.2 ตวั ตา้ นทาน 1k 1 ตวั 2.7 Tack Switch 1 ตวั 1 เส้น 2.3 ตวั ตา้ นทาน 680 ohm 1 ตวั 1 ชุด 1 เคร่ือง 2.4 ตวั ตา้ นทาน 820 ohm 1 ตวั 3. บอร์ด Arduino Nano 3.0 4. สายเชื่อมต่อ USB (Mini USB) 5. สายเช่ือมต่อวงจร 6. คอมพวิ เตอร์ 4. ลาดับข้นั การปฏบิ ัติงาน 1. ศึกษาจุดประสงคท์ วั่ ไปจุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้ืนฐานท่ีเก่ียวขอ้ ง 2. ดาเนินการตอ่ วงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน
100 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน สวติ ช์ที่นามาใชง้ านกบั ไมโครคอนโทรลเลอร์จะเป็นสวิตช์ชนิดกดติดปล่อยดบั เมื่อนามาใชง้ าน จาเป็ นจะตอ้ งใชพ้ อร์ตในการเช่ือมต่อ 1 ช่องต่อสวติ ช์ 1 ตวั ดงั ใบงานรับค่าจากพอร์ตดิจิทลั ที่ผา่ นมา ซ่ึง หากมีการใชง้ านสวติ ชจ์ านวนมากจานวนพอร์ตก็จะยง่ิ มากตาม ดงั รูป ARDUINO VCC Internal pull up R1-R4 SW1 220 x4 D9 SW2 D10 SW3 D11 SW4 D12 GND รูปท่ี 4.6-1 การต่อใชง้ านสวิตชก์ บั พอร์ตดิจิทลั ใบงานอ่านค่าจากพอร์ตแอนาลอกที่ผา่ นมาเป็ นการเรียนรู้เก่ียวกบั การใชง้ านพอร์ตท่ีรับสัญญาณ เขา้ ที่เป็ นแอนาลอกซ่ึงสามารถแยกความแตกต่างได้ 1024 ระดบั ในช่องรับเพียงช่องเดียว ดงั น้ันหาก ผูใ้ ชง้ านออกแบบวงจรสวิตช์ให้ต่อวงจรที่สามารถใหแ้ รงดนั ที่แตกต่างกนั ไดเ้ มื่อกดสวิตช์แต่ละตวั (ใช้ วงจรแบง่ แรงดนั ) กส็ ามารถใชง้ านสวติ ชห์ ลายตวั ในพอร์ตรับสัญญาณเพียงช่องเดียวได้ ดงั รูป ARDUINO VCC A0 R1 GND 1k SW1 R2 680 SW2 R8230 SW3 R4 2.7k SW4 รูปที่ 4.6-2 การตอ่ ใชง้ านสวิตช์กบั พอร์ตแอนาลอก
ใบงานที่ 4.6 การเขียนโปรแกรมรับสวติ ชท์ างพอร์ตแอนาลอก 101 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: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต 3. ฟังก์ช่ันหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาที่ ตอ้ งการหยดุ คา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาท่ี ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms) ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) 4. ฟังก์ชั่นกาหนดความเร็วในการส่ือสารทางพอร์ตอนุกรม Serial.begin(speed) speed: ตวั เลขของอตั ราเร็วในการสื่อสารผา่ นพอร์ตอนุกรม 5. ฟังก์ชั่นส่งข้อมูลออกพอร์ต เป็ นฟังก์ช่ันท่ีใชใ้ นการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรือ พิมพข์ อ้ มูลออกทางพอร์ตเพ่ือแสดงผลท่ีจอคอมพิวเตอร์เมื่อพมิ พเ์ สร็จตวั เคอร์เซอร์จะรออยู่ ท่ีทา้ ยส่ิงที่พิมพน์ ้นั ๆ Serial.print(val) Serial.print(val, format)
102 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 6. ฟังก์ช่ันส่งข้อมูลออกพอร์ต คล้ายกบั ฟังก์ชน่ั Serial.print ต่างกนั ตรงท่ีเม่ือพิมพ์เสร็จตวั เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้ันเม่ือสั่งพิมพ์คร้ังถดั ไปขอ้ มูลที่ปรากฏจะอยูท่ ี่ บรรทดั ใหม่ แทนท่ีจะตอ่ ทา้ ยเหมือนกบั ฟังกช์ น่ั Serial.print Serial.println(val) Serial.println(val, format) 7. ฟังก์ชั่นอ่านสัญญาณแอนาลอก เป็นฟังกช์ นั่ ที่อา่ นสัญญาณแอนาลอกท่ีปรากฏอยทู่ ่ีขาพอร์ต แอนาลอกที่ตอ้ งการอ่านน้นั ๆ คา่ ท่ีอ่านไดจ้ ะอยใู่ นช่วง 0-1023 สาหรับแรงดนั ของสัญญาณ แอนาลอกท่ี 0-5V ดงั น้นั ตอ้ งใชต้ วั แปรที่เป็น int สาหรับเกบ็ คา่ ที่อา่ นได้ analogRead(pin) pin: ขาพอร์ตแอนาลอกท่ีตอ้ งการอ่านค่าสญั ญาณแอนาลอก 7. วงจรทใี่ ช้ทดลอง วงจรเพอ่ื ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูป 3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus กรณีที่ใชว้ งจรที่สร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป D1 VCC Peripheral circuit 1N5819 CPU circuit R1 7,20 ATMEGA328 10k VCC SW1 1 RST AVCC D2 4 R4-R7 LED1-LED3 220 C1 D3 5 0.1uF D4 6 USB to UART (TTL Level) R2,R3 3 D5 11 VCC 1k 2 DTR R8 RXD D1(TXD) 1k SW1 TXD D0(RXD) R9 +5V 680 SW2 GND R10 3V3 820 SW3 R11 A0 2.7k SW4 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.6-3 วงจรที่ใชไ้ อซี AVR ในการทดลอง
รูปท่ี 4.6-6 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน รูปที่ 4.6-5 การตอ่ ลงบอร์ดทดลอง ABCDE F GH I J รูปที่ 4.6-4 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป การตอ่ วงจรเพอ่ื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus 1 D13 D12 1 การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง D11 ARDUINO 3V3 D10 D2 REF D9 D3 A0 D8 5 D4 5 A1 D7 D5 A2 D6 A3 D5 VCC A4 D4 A5 D3 10 10 A6 D2 A7 5V GND RST RST GND 15 VIN D0 D1 15 20 20 A0 GND 25 25 ใบงานที่ 4.6 การเขียนโปรแกรมรับสวติ ชท์ างพอร์ตแอนาลอก 103 30 30 35 35 R4 1k SW1 R5 680 SW2 R6 820 SW3 R7 2.7k SW4 40 40 R1-R3 220 45 45 LED1-LED3 50 50 55 55 60 60 ABCDE F GH I J
104 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 8. การเขยี นโค้ดโปรแกรมควบคุม การทดลองที่ 1 เขียนโปรแกรมอ่านคา่ แอนาลอกจากการกดสวติ ช์แตล่ ะตวั โดยแสดงผลท่ีจอคอมพิวเตอร์ ผา่ นทางพอร์ตอนุกรม ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดค่าเริม่ ต้นต่าง อ่านค่าจากสวิตช์ แสดงค่าทอ่ี ่านได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 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 Serial.print(\"value from sw is: \"); 10 Serial.println(adc); 11 delay(100); 12 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ท่ี 1 กาหนดช่ือ sw ใหแ้ ทน 0 (เป็นขาที่วงจรสวติ ช์ต่อเขา้ ท่ีขา A0 ของ Arduino) - บรรทดั ท่ี 4 กาหนดอตั ราเร็วในการส่ือสารขอ้ มูลของพอร์ตอนุกรม - บรรทดั ท่ี 8 อ่านค่าแอนาลอกจากวงจรสวติ ชโ์ ดยนาเขา้ มาเก็บไวใ้ นตวั แปร adc - บรรทดั ที่ 10 แสดงคา่ แอนาลอกจากการกดสวติ ช์ผา่ นทางพอร์ตอนุกรม ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. บนั ทึกผลค่าท่ีอ่านได้จากการกดสวิตช์แต่ละตัวและบนั ทึกผลเพื่อนาไปใช้งานในการ ทดลองถดั ไป การกดสวติ ช์ ไมก่ ดสวติ ช์ กดสวติ ช์ SW1 กดสวติ ช์ SW2 กดสวติ ช์ SW3 กดสวติ ช์ SW4 ค่าท่ีอ่านได้
ใบงานที่ 4.6 การเขียนโปรแกรมรับสวติ ชท์ างพอร์ตแอนาลอก 105 การทดลองท่ี 2 เน่ืองจากค่าที่อ่านจากการกดสวิตช์เขา้ มาทางพอร์ตแอนาลอกมีโอกาสท่ีตวั เลขจะแกวง่ ได้ ดงั น้นั หากเขียนโปรแกรมโดยวธิ ีการตรวจสอบการเท่ากนั ของค่าที่กาหนดมีโอกาสจะคลาดเคล่ือนได้ ทางแกป้ ัญหาการแกวง่ ของค่าทาไดโ้ ดยเพ่ิมช่วงในการตรวจสอบแทนท่ีจะตรวจสอบเพียงค่าเดียว การ ทดลองน้ีเป็นการทดลองการกดสวติ ช์ที่รับเขา้ มาทางพอร์ตแอนาลอกและมีการเพิม่ ช่วงในการตรวจสอบ เป็น 30 คา่ และแสดงผลเป็นขอ้ ความวา่ สวติ ชใ์ ดถูกกด หมายเหตุ ค่าที่ใชต้ รวจสอบจะตอ้ งใชผ้ ลจากการทดลองในการทดลองที่ 1 สาหรับตวั อยา่ งการทดลองที่ 2 สมมุติวา่ ไดค้ า่ ดงั รูปที่ 4.6-7 (สาหรับการทดลองจริงใหใ้ ชค้ ่าจริงท่ีไดจ้ ากการทดลอง) Value Value 1024 No sw presses 1024 No sw presses 827 sw4 is pressed 827 sw4 is pressed 614 sw3 is pressed 614 sw3 is pressed 415 sw2 is pressed 415 sw2 is pressed 0 sw1 is pressed Time 0 sw1 is pressed Time รูปที่ 4.6-7 การตรวจสอบแบบคา่ เดียว รูปที่ 4.6-8 การตรวจสอบแบบช่วง ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริม่ ต้นต่าง อ่านคา่ จากพอร์ต อย่ใู นช่วงท่ี 1 จริง แสดงข้อความ เท็จ จริง แสดงข้อความ จริง แสดงข้อความ อย่ใู นช่วงที่ 2 จริง แสดงข้อความ เท็จ อย่ใู นช่วงที่ 3 เท็จ อย่ใู นช่วงที่ 4 เทจ็
106 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม 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. สรุปผลการปฏบิ ัติงาน 10. งานทมี่ อบหมาย 1. ปรับปรุงโปรแกรมในการทดลองที่ 2 โดยใหส้ ามารถตรวจสอบการปล่อยคียไ์ ดด้ ว้ ย และให้ สวติ ช์แตล่ ะตวั ควบคุมการติดดบั ของ LED ดงั น้ี สวติ ช์ที่ถูกกด ผลที่ตอ้ งการ SW1 LED 1 ติดสวา่ ง พร้อมแสดงขอ้ ความ SW2 LED 2 ติดสวา่ ง พร้อมแสดงขอ้ ความ SW3 LED 3 ติดสวา่ ง พร้อมแสดงขอ้ ความ SW4 LED ทุกตวั ดบั ท้งั หมด พร้อมแสดงขอ้ ความ ARDUINO R1-R3 LED1-LED3 D2 220 D3 D4 VCC D5 1Rk4 SW1 A0 R5 680 SW2 GND R6 820 SW3 R7 2.7k SW4 รูปท่ี 4.6-9 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง
ใบงานท่ี 4.7 การเขียนโปรแกรมวดั อณุ หภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC 109 ใบงานที่ 4.7 การเขยี นโปรแกรมวดั อุณหภูมดิ ้วยเทอร์มสิ เตอร์ชนิด NTC 1. จุดประสงค์ทวั่ ไป เพอ่ื ใหส้ ามารถเขียนโปรแกรมวดั อุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC ได้ 2. จุดประสงค์เชิงพฤตกิ รรม 1. บอกวธิ ีเขียนโปรแกรมวดั อุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC ได้ 2. บอกข้นั ตอนการตอ่ วงจรเพอ่ื ทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เครื่องมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 4 ตวั 1 ตวั 2.1 ตวั ตา้ นทาน 10k 1 ตวั 2.3 LED 3mm 1 ตวั 2.4 Thermistor NTC 10k 1 เส้น 2.2 ตวั ตา้ นทาน 220 ohm 4 ตวั 1 ชุด 1 เคร่ือง 3. บอร์ด Arduino Nano 3.0 4. สายเช่ือมต่อ USB (Mini USB) 5. สายเช่ือมต่อวงจร 6. คอมพิวเตอร์ 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 รูปท่ี 4.7-1 วงจรแบง่ แรงดนั ในการนาเทอร์มิสเตอร์ไปใชง้ าน ค่าแรงดนั ที่ได้ส่งเขา้ ไปยงั ขาพอร์ตแอนาลอกเพ่ืออ่านค่าเข้าซีพียูเพ่ือนาไปคานวณเป็ นค่า อุณหภูมิต่อไป โดยสมการของวงจรเป็นดงั น้ี สมการวงจรแบ่งแรงดนั = RNTC 1023 ADC 10k RNTC 10k RNTC = 1023 RNTC 10k RNTC ADC 10k = 1023RNTC 10k ADC RNTC = 1023RNTC RNTC ADC = RNTC 1023 1 ADC = 10k 1023 1 ADC
ใบงานที่ 4.7 การเขียนโปรแกรมวดั อุณหภมู ิดว้ ยเทอร์มิสเตอร์ชนิด NTC 111 สมการอุณหภูมิ 1 =1 1 RNTC T B ln RNTC 0 T0 เมื่อ T อุณหภูมิหน่วยเป็ นเคลวนิ T0 อุณหภูมิหอ้ งปกติที่ 25 องศาเซลเซียสหน่วยเป็นเคลวนิ (25+273.15) B คา่ สมั ประสิทธ์ิของเทอร์มิสเตอร์ NTC มีคา่ เป็น 3950 RNTC0 คา่ ความตา้ นทานของเทอร์มิสเตอร์ NTC ที่อุณหภูมิหอ้ งปกติมีคา่ เท่ากบั 10k 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: หมายเลขขาท่ีตอ้ งการเขียนลอจิกออกพอร์ต 3. ฟังก์ช่ันหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตวั เลขของเวลาที่ ตอ้ งการหยุดคา้ งโดยตวั เลขท่ีใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long)
112 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 4. ฟังก์ชั่นกาหนดความเร็วในการส่ือสารทางพอร์ตอนุกรม Serial.begin(speed); speed: ตวั เลขของอตั ราเร็วในการส่ือสารผา่ นพอร์ตอนุกรม 5. ฟังก์ช่ันส่งข้อมูลออกพอร์ต เป็ นฟังก์ชน่ั ท่ีใช้ในการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรือ พมิ พข์ อ้ มูลออกทางพอร์ตเพอื่ แสดงผลที่จอคอมพิวเตอร์เมื่อพมิ พเ์ สร็จตวั เคอร์เซอร์จะรออยู่ ที่ทา้ ยสิ่งที่พมิ พน์ ้นั ๆ Serial.print(val); Serial.print(val, format); 6. ฟังก์ชั่นส่งข้อมูลออกพอร์ต คล้ายกบั ฟังก์ชน่ั Serial.print ต่างกนั ตรงที่เม่ือพิมพ์เสร็จตวั เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้ันเม่ือส่ังพิมพ์คร้ังถดั ไปขอ้ มูลที่ปรากฏจะอยูท่ ่ี บรรทดั ใหม่ แทนท่ีจะต่อทา้ ยเหมือนกบั ฟังกช์ น่ั Serial.print Serial.println(val); Serial.println(val, format); 7. ฟังก์ชั่นอ่านสัญญาณแอนาลอก เป็นฟังกช์ นั่ ท่ีอ่านสัญญาณแอนาลอกท่ีปรากฏอยทู่ ่ีขาพอร์ต แอนาลอกท่ีตอ้ งการอ่านน้นั ๆ ค่าที่อา่ นไดจ้ ะอยใู่ นช่วง 0-1023 สาหรับแรงดนั ของสัญญาณ แอนาลอกที่ 0-5V ดงั น้นั ตอ้ งใชต้ วั แปรที่เป็น int สาหรับเก็บคา่ ที่อ่านได้ analogRead(pin); pin: ขาพอร์ตแอนาลอกที่ตอ้ งการอ่านคา่ สญั ญาณแอนาลอก ตวั อย่างเช่น int ADC analogRead(0) หมายถึง อา่ นสัญญาณแอนาลอกท่ีขา A0 นามาเก็บในตวั แปร ADC 7. วงจรทใ่ี ช้ทดลอง วงจรเพอื่ ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูป 3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus
ใบงานที่ 4.7 การเขียนโปรแกรมวดั อณุ หภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC 113 กรณีท่ีใชว้ งจรที่สร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป D1 VCC Peripheral circuit 1N5819 CPU circuit R1 10k 7,20 ATMEGA328 VCC SW1 1 RST AVCC C1 R4-R7 LED1-LED3 0.1uF 220 USB to UART (TTL Level) R2,R3 3 D2 4 1k 2 D3 5 DTR D4 6 RXD D1(TXD) D5 11 TXD D0(RXD) +5V GND 3V3 X1 9 XTAL1 A5 28 VCC 16MHz 10 XTAL2 R8 10k C2,C3 GND 22pF NTC 8,22 T Thermistor 10k รูปท่ี 4.7-2 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป R1-R4 LED1-LED4 220 ARDUINO D2 D3 D4 D5 VCC A5 R5 NTC GND 10k Thermistor 10k T รูปที่ 4.7-3 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE ABCDE D13 3V3 REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปที่ 4.7-4 การตอ่ ลงบอร์ดทดลอง
114 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การตอ่ วงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปที่ 4.7-5 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน หมายเหตุ โปรแกรมจาลองบางเวอร์ชน่ั อาจจาลอง NTC ไม่ได้ (เช่น 7.10) ใหเ้ ปล่ียนไปใชเ้ วอร์ชนั่ อื่นท่ี สามารถจาลองได้ (เช่น 8.60) 8. การเขยี นโค้ดโปรแกรมควบคุม การทดลองท่ี 1 เขียนโปรแกรมอ่านคา่ จากเทอร์มิสเตอร์ NTC ขนาด 10k โดยใหแ้ สดงผลเป็นอุณหภูมิที่มี หน่วยเป็นเซสเซียส (เขียนโคด้ จากสมการในทฤษฎี) แสดงผลที่จอคอมพิวเตอร์ผา่ นทางพอร์ตอนุกรม ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริ่มต้นต่าง อ่านคา่ จาก NTC คานวณ แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #define NTCPin A5 2 #define SERIESRESISTOR 10000 3 #define NOMINAL_RESISTANCE 10000 4 #define NOMINAL_TEMPERATURE 25 5 #define BCOEFFICIENT 3950 6 void setup() 7{ 8 Serial.begin(9600); 9} 10 void loop() 11 { 12 float ADCvalue; 13 float Resistance; 14 float steinhart; 15 ADCvalue = analogRead(NTCPin);
ใบงานท่ี 4.7 การเขียนโปรแกรมวดั อุณหภูมิดว้ ยเทอร์มิสเตอร์ชนิด NTC 115 16 Resistance = (1023 / ADCvalue) - 1; 17 Resistance = SERIESRESISTOR / Resistance; 18 steinhart = Resistance / NOMINAL_RESISTANCE; // (R/Ro) 19 steinhart = log(steinhart); // ln(R/Ro) 20 steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) 21 steinhart += 1.0 / (NOMINAL_TEMPERATURE + 273.15); // + (1/To) 22 steinhart = 1.0 / steinhart; // Invert 23 steinhart -= 273.15; // convert to C 24 Serial.print(\"Temperature is : \"); 25 Serial.print(steinhart); 26 Serial.println(\" 'C\"); 27 delay(1000); 28 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ท่ี 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. ทดลองเพ่ิม/ลด อุณหภูมิท่ีตวั เทอร์มิสเตอร์ สงั เกตคา่ อุณหภูมิที่อา่ นได้ การทดลองที่ 2 เขียนโปรแกรมอา่ นค่าจากเทอร์มิสเตอร์ NTC ขนาด 10k โดยใหแ้ สดงผลเป็นอุณหภูมิท่ีมี หน่วยเป็นเซสเซียส (เขียนแบบยอ่ ) แสดงผลท่ีจอคอมพวิ เตอร์ผา่ นทางพอร์ตอนุกรม ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดค่าเริม่ ต้นต่าง อ่านค่าอุณหภูมิ แสดงผล
116 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #define NTC A5 2 double Thermistor(int RawADC) ; 3 void setup() 4{ 5 Serial.begin(9600); 6} 7 void loop() 8{ 9 float Temp=Thermistor(analogRead(NTC)); 10 Serial.print(\"Temperature is : \"); 11 Serial.print(Temp); 12 Serial.println(\" 'C\"); 13 delay(1000); 14 } 15 double Thermistor(int RawADC) 16 { 17 double Cal; 18 Cal = log(10000.0/((1024.0/RawADC-1))); 19 Cal = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Cal * Cal))* Cal); 20 Cal = Cal - 273.15; // Convert Kelvin to Celcius 21 return Cal; 22 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 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. สรุปผลการปฏบิ ัตงิ าน 10. งานทม่ี อบหมาย 1. เขียนโปรแกรมควบคุมการติดดบั ของ LED 4 ตวั ตามอุณหภูมิ ใหส้ ามารถติดหรือดบั ท้งั หมด ในช่วงอุณหภูมิท่ีสามารถทดลองได้ วงจรที่ใชท้ ดลองเป็นดงั รูป ARDUINO R1-R4 LED1-LED4 220 D2 D3 D4 D5 A5 VCC GND R5 10k NTC T Thermistor 10k รูปที่ 4.7-6 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง หมายเหตุ สามารถให้เทอร์มิสเตอร์ NTC อ่านค่าให้ไดอ้ ุณหภูมิท่ีแตกต่างกนั โดยการส่งผ่าน ความร้อนความเยน็ ไปยงั ตวั ตวั NTC ซ่ึงอาจใชอ้ ุณหภูมิจากนิ้วมือหรือใชว้ ธิ ีอื่นท่ีทาได้ รูปแบบการติดสวา่ งของ LED ในแตล่ ะช่วงอุณหภูมิที่ทาได้ ช่วงอุณหภูมิ รูปแบบการติดสวา่ งของ LED ค่าอุณหภมู ติ ่าสดุ ที่ทาได้ คา่ อุณหภูมสิ ูงสุดท่ีทาได้
118 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 2. เขียนโปรแกรมวดั ค่าอุณหภูมิโดยใช้เทอร์มิสเตอร์ 2 ตวั แลว้ เปรียบเทียบความแตกต่างของ อุณหภูมิท่ีวดั ได้ วงจรท่ีใชท้ ดลองเป็นดงั รูป ARDUINO VCC R1 10k A4 NTC T Thermistor 10k VCC A5 R102k NTC GND Thermistor T 10k บนั ทึกผลลงตาราง อุณหภูมิท่ีวดั จาก NTC ตวั ท่ี 2 คา่ ที่ อุณหภูมิท่ีวดั จาก NTC ตวั ที่ 1 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 ตวั 2.1 ตวั ตา้ นทาน 4.8 k 1 ตวั 2.3 LED 3mm 1 ตวั 1 ตวั 2.2 ตวั ตา้ นทาน 220 ohm 2 ตวั 1 เส้น 1 ชุด 3. บอร์ด Arduino Nano 3.0 1 เคร่ือง 4. โมดูลวดั อุณหภูมิ DHT22 5. สายเช่ือมตอ่ USB (Mini USB) 6. สายเชื่อมตอ่ วงจร 7. คอมพิวเตอร์ 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 จากตารางเปรียบเทียบจะเห็นความแตกต่างของโมดูลวดั อุณหภูมิและความช้ืนสัมพทั ธ์ท้งั สอง เบอร์ไดพ้ อสมควร ใบงานน้ีเลือกใช้เบอร์ DHT22 (เวลาเขียนโคด้ โปรแกรมไม่ต่างกนั ) รูปร่างหน้าตา และขนาดของโมดูลตลอดจนหนา้ ท่ีของแตล่ ะขาเป็นดงั รูป รูปท่ี 4.8-1 รูปร่างของโมดูลวดั อุณหภูมิและความช้ืนสมั พทั ธ์ DHT22 การต่อใช้งานโมดูล DHT11, DHT22 จะตอ้ งใช้ตวั ต้านทานพูลอพั ที่ขาสัญญาณข้อมูลท่ีมีค่า เทา่ กบั 4.7k ดงั รูป 3.3V-6V 4k7 DHT22 MCU DATA รูปที่ 4.8-2 การตอ่ ใชง้ านโมดูล DHT11, DHT22
ใบงานที่ 4.8 การเขียนโปรแกรมวดั อุณหภูมิและความช้ืนดว้ ยโมดูล DHT22 121 การเขียนโค้ดโปรแกรมเพื่ออ่านค่าอุณหภูมิและความช้ืนสัมพทั ธ์ท้งั DHT11 และ DHT22 ปัจจุบนั มีไลบราร่ีช่วยงานทาให้ผูเ้ ขียนโคด้ สามารถเขียนโคด้ ไดง้ ่ายข้ึน ซ่ึงไลบราร่ีท่ีตอ้ งเอามาใชง้ าน เพื่ออ่านค่าจากโมดูลดงั กล่าวจะตอ้ งใชไ้ ลบรารี่ 2 ตวั โดยสามารถดาวนโ์ หลดไดท้ ่ี ไลบรารี่ แหล่งดาวน์โหลด DHT.h https://github.com/adafruit/DHT-sensor-library Adafruit_Sensor.h https://github.com/adafruit/Adafruit_Sensor มีข้นั ตอนการดาเนินการเพ่ือนาไลบราร่ีมาใชง้ านดงั น้ี 1. ดาวนโ์ หลดไลบรารี่ตวั ท่ี 1 ซ่ึงเป็นไฟล์ Zip ดงั รูป รูปที่ 4.8-2 การดาวน์โหลดไลบราร่ีที่นามาใชง้ านตวั ที่ 1 2. ดาวน์โหลดไลบรารี่ตวั ท่ี 2 ซ่ึงเป็นไฟล์ Zip ดงั รูป รูปท่ี 4.8-3 การดาวน์โหลดไลบราร่ีที่นามาใชง้ านตวั ท่ี 2 3. ทาการเพมิ่ ไลบราร่ีท้งั 2 ลงในโปรแกรม Arduino IDE โดยการเพิ่มจากไฟล์ zip แลว้ ทาการหา ไฟล์ zip ท่ีไดจ้ ากการดาวน์โหลดในขอ้ 1 และ 2 รูปท่ี 4.8-4 การเพ่ิมไลบราร่ีที่เป็นไฟล์ zip ลงในโปรแกรม Arduino IDE
122 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 6. ฟังก์ช่ัน Arduino ทใี่ ช้งานในใบงาน 1. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาท่ี ตอ้ งการหยดุ คา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขท่ีหยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) 2. ฟังก์ชั่นกาหนดความเร็วในการส่ือสารทางพอร์ตอนุกรม Serial.begin(speed); speed: ตวั เลขของอตั ราเร็วในการสื่อสารผา่ นพอร์ตอนุกรม 3. ฟังก์ชั่นส่งข้อมูลออกพอร์ต เป็ นฟังก์ช่ันท่ีใชใ้ นการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรือ พิมพข์ อ้ มูลออกทางพอร์ตเพือ่ แสดงผลที่จอคอมพิวเตอร์เมื่อพิมพเ์ สร็จตวั เคอร์เซอร์จะรออยู่ ที่ทา้ ยสิ่งที่พิมพน์ ้นั ๆ Serial.print(val); Serial.print(val, format); 4. ฟังก์ชั่นส่งข้อมูลออกพอร์ต คล้ายกบั ฟังก์ชั่น Serial.print ต่างกนั ตรงที่เม่ือพิมพ์เสร็จตวั เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้นั เม่ือสั่งพิมพค์ ร้ังถดั ไปขอ้ มูลที่ปรากฏจะอยู่ที่ บรรทดั ใหม่ แทนที่จะต่อทา้ ยเหมือนกบั ฟังกช์ น่ั Serial.print Serial.println(val); Serial.println(val, format); ฟังก์ชั่นใช้งานของไลบราร่ี DHT การอ่านค่าจากโมดูล DHT จาเป็ นตอ้ งใชไ้ ลบรารี่ช่วยงาน ซ่ึงไลบรารี่ไม่ไดถ้ ูกเพ่ิมเขา้ มาในตวั โปรแกรม Arduino IDE ต้งั แต่แรกจาเป็นตอ้ งติดต้งั เพ่มิ เติม โดยมีฟังกช์ นั่ ใหใ้ ชง้ านดงั น้ี 1. ฟังก์ชั่นกาหนดขาเช่ือมต่อ ใชใ้ นการระบุขาที่ใชเ้ ช่ือมต่อให้ตวั โปรแกรมรับรู้ รูปแบบเป็ น ดงั น้ี DHT dht(DHTPIN, DHTTYPE); DHTPIN: ตวั เลขระบุขาพอร์ตท่ีใชเ้ ช่ือมต่อกบั โมดูล DHTTYPE: ชนิดของโมดูลที่เชื่อมต่อไดแ้ ก่ DHT11, DHT21, DHT22
ใบงานท่ี 4.8 การเขียนโปรแกรมวดั อุณหภมู ิและความช้ืนดว้ ยโมดูล DHT22 123 ตวั อย่าง 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 เรียบร้อยแลว้ ต่อวงจรดงั รูป D1 VCC Peripheral circuit 1N5819 CPU circuit R1 10k 7,20 ATMEGA328 VCC SW1 1 RST AVCC VCC C1 0.1uF R4 4k7 DHT22 DATA R2,R3 D8 14 1k USB to UART (TTL Level) 3 2 D1(TXD) DTR D0(RXD) RXD TXD +5V GND 3V3 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.8-5 วงจรท่ีใชไ้ อซี AVR ในการทดลอง
รูปท่ี 4.8-7 การตอ่ ลงบอร์ดทดลอง AB C DE F GH I J GND 124 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การต่อวงจรเพ่อื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus 1 D13 D12 1 รูปที่ 4.8-8 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน D11 5 รูปท่ี 4.8-6 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป 3V3 D10 การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง REF D9 10 ARDUINO A0 D8 5 A1 D7 15 A2 D6 A3 D5 A4 D4 A5 D3 10 A6 D2 A7 5V GND RST RST GND 15 VIN D0 D1 20 20 25 25 D8 DATA 30 30 R1 4k7 35 35 VCC 40 40 DHT22 45 45 50 50 55 55 60 60 AB C DE F GH I J
ใบงานท่ี 4.8 การเขียนโปรแกรมวดั อุณหภูมิและความช้ืนดว้ ยโมดูล DHT22 125 8. การเขยี นโค้ดโปรแกรมควบคุม การทดลองท่ี 1 เขียนโปรแกรมอ่านค่าอุณหภูมิและความช้ืนสัมพทั ธ์จากโมดูล DHT22 แสดงผลที่ จอคอมพิวเตอร์ผา่ นทางพอร์ตอนุกรม ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริ่มต้นต่าง อ่านคา่ จากโมดลู DHT22 แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <DHT.h> 2 #define DHTPIN 8 // pin to connect DHT22 3 #define DHTTYPE DHT22 // Type of use DHT11,DHT21,DHT22 4 5 DHT dht(DHTPIN, DHTTYPE); 6 void setup() 7{ 8 Serial.begin(9600); 9 Serial.println(\"DHTxx test!\"); 10 dht.begin(); 11 } 12 void loop() 13 { 14 delay(2000); 15 float h = dht.readHumidity(); 16 float t = dht.readTemperature(); 17 if (isnan(h) || isnan(t)) 18 { 19 Serial.println(\"Failed to read from DHT sensor!\"); 20 return; 21 } 22 Serial.print(\"Humidity: \"); 23 Serial.print(h); 24 Serial.print(\" %\\t\"); 25 Serial.print(\" Temperature: \"); 26 Serial.print(t); 27 Serial.println(\" *C \"); 28 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ท่ี 1 รวมไฟลไ์ ลบราร่ี DHT.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 2 กาหนดชื่อ DHTPIN ใหแ้ ทน 8 (เป็นขาท่ี DHT22 ตอ่ เขา้ ที่ขา D8 ของ Arduino) - บรรทัดที่ 3 กาหนดชื่อ DHTTYPE ให้แทน DHT22 เมื่อวงจรต่อใช้งานโมดูล DHT22 แต่ถ้า ผใู้ ชง้ านใชโ้ มดูล DHT11 หรือ DTH21 ใหเ้ ปล่ียนการกาหนดช่ือตาม - บรรทดั ที่ 5 ประกาศใชง้ านไลบราร่ีโดยสามารถกาหนดชื่อเรียกโมดูลตามตอ้ งการไดต้ วั อยา่ งน้ี กาหนดชื่อเรียกเป็น dht
126 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] - บรรทดั ท่ี 8 กาหนดอตั ราเร็วในการส่ือสารขอ้ มูลของพอร์ตอนุกรม - บรรทดั ที่ 10 ส่งั ใหไ้ ลบรารี่ DHT.h เร่ิมทางานโดยใชช้ ื่อเรียกโมดูลวา่ dht - บรรทดั ที่ 15 เรียกใชฟ้ ังกช์ นั่ อ่านคา่ ความช้ืนที่ตรวจวดั ไดแ้ ลว้ เอามาเก็บไวใ้ นตวั แปร h - บรรทดั ท่ี 16 เรียกใชฟ้ ังกช์ น่ั อ่านค่าอุณหภูมิท่ีตรวจวดั ไดแ้ ลว้ เอามาเก็บไวใ้ นตวั แปร t - บรรทดั ท่ี 17 ตรวจสอบค่าในตวั แปร h และ t วา่ มีตวั ใดตวั หน่ึงหรือท้งั สองตวั มีค่าที่ไม่ใช่ตวั เลข หรือไม่ - บรรทัดที่ 19-20 หากตรวจสอบจากบรรทดั ที่ 17 แลว้ พบว่ามีค่าของตวั แปรที่ไม่ใช่ตวั เลขให้ แสดงขอ้ ความพร้อมกลบั ใหอ้ อกไปเริ่มตน้ ใหม่ - บรรทดั ท่ี 23,26 แสดงคา่ ความช้ืนจากตวั แปร h และคา่ อุณหภูมิจากตวั แปร t ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพม่ิ /ลด อุณหภูมิและความช้ืนสัมพทั ธ์ท่ีตวั โมดูล สงั เกตค่าที่อ่านได้ 9. สรุปผลการปฏบิ ัตงิ าน 10. งานทมี่ อบหมาย 1. เขียนโปรแกรมควบคุมการติดดับของ LED 2 ตวั ให้ LED1 ถูกควบคุมการติดดับตาม อุณหภูมิและ LED2 ถูกควบคุมการติดดบั ตามความช้ืนสัมพทั ธ์ โดยใช้สามารถติดหรือดบั ท้งั หมดตามอุณหภูมิและความช้ืนที่สามารถทดลองได้ วงจรที่ใชท้ ดลองเป็นดงั รูป ARDUINO VCC R1 DHT22 4k7 D8 DATA R2 LED1 220 D3 2R230 LED2 D2 GND รูปที่ 4.8-9 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง
ใบงานท่ี 4.9 การเขียนโปรแกรมใชง้ านไอซีวดั อุณหภมู ิ DS18B20 127 ใบงานท่ี 4.9 การเขยี นโปรแกรมใช้งานไอซีวดั อุณหภูมิ DS18B20 1. จุดประสงค์ทว่ั ไป เพ่อื ใหส้ ามารถเขียนโปรแกรมใชง้ านไอซีวดั อุณหภูมิ DS18B20ได้ 2. จุดประสงค์เชิงพฤติกรรม 1. บอกวธิ ีเขียนโปรแกรมใชง้ านไอซีวดั อุณหภูมิ DS18B20ได้ 2. บอกข้นั ตอนการตอ่ วงจรเพือ่ ทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 4 ตวั 2 ตวั 2.1 ตวั ตา้ นทาน 220 ohm 4 ตวั 2.3 LED 3mm 1 ตวั 2.4 ไอซี DS18B20 1 เส้น 2.2 ตวั ตา้ นทาน 4.7k 2 ตวั 1 ชุด 1 เคร่ือง 3. บอร์ด Arduino Nano 3.0 4. สายเชื่อมต่อ USB (Mini USB) 5. สายเช่ือมตอ่ วงจร 6. คอมพวิ เตอร์ 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-1 ไอซี DS18B20
ใบงานท่ี 4.9 การเขียนโปรแกรมใชง้ านไอซีวดั อณุ หภูมิ DS18B20 129 การเขียนโคด้ โปรแกรมเพื่ออ่านค่าอุณหภูมิจากไอซีวดั อุณหภูมิ DS18B20 ปัจจุบนั มีไลบรารี่ ช่วยงานทาใหผ้ ูเ้ ขียนโคด้ สามารถเขียนโคด้ ไดง้ ่ายข้ึน ซ่ึงไลบราร่ีที่ตอ้ งเอามาใชง้ านเพื่อท่ีจะอ่านค่าจาก โมดูลดงั กล่าวจะตอ้ งใชไ้ ลบรารี่ 2 ตวั โดยสามารถดาวน์โหลดไดท้ ี่ ไลบรารี่ แหล่งดาวน์โหลด OneWire.h https://github.com/PaulStoffregen/OneWire DallasTemperature.h https://github.com/milesburton/Arduino-Temperature-Control-Library มีข้นั ตอนการดาเนินการเพื่อนาไลบรารี่มาใชง้ านดงั น้ี 1. ดาวนโ์ หลดไลบราร่ี OneWire.h เป็นไฟล์ Zip ดงั รูป รูปที่ 4.9-2 การดาวน์โหลดไลบราร่ีท่ีนามาใชง้ านตวั ที่ 1 2. ดาวนโ์ หลดไลบราร่ี DallasTemperature.h เป็ นไฟล์ Zip ดงั รูป รูปท่ี 4.9-3 การดาวน์โหลดไลบราร่ีท่ีนามาใชง้ านตวั ที่ 2 3. ทาการเพ่มิ ไลบราร่ีท้งั 2 ลงในโปรแกรม Arduino IDE โดยการเพม่ิ จากไฟล์ zip แลว้ ทาการหา ไฟล์ zip ที่ไดจ้ ากการดาวนโ์ หลดในขอ้ 1 และ 2 รูปที่ 4.9-4 การเพิม่ ไลบรารี่ที่เป็นไฟล์ zip ลงในโปรแกรม Arduino IDE
130 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 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: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต value: HIGH or LOW 3. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาที่ ตอ้ งการหยุดคา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวินาที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) 4. ฟังก์ช่ันหน่วงเวลาเป็ นไมโครวินาที เนื่องจากฟังกช์ น่ั หน่วงเวลาปกติเวลาต่าสุดที่ทาไดค้ ือ 1 มิลลิวนิ าที ดงั น้นั หากตอ้ งการหน่วงเวลาท่ีต่ากวา่ จ่ึงตอ้ งใชฟ้ ังชนั่ น้ีซ่ึงสามารถหน่วงเวลาได้ ในระดบั ไมโครวนิ าที รูปฟังชนั่ เป็นดงั น้ี delayMicroseconds(us); us: ตวั เลขท่ีหยดุ คา้ งของเวลาหน่วยไมโครวนิ าที (unsigned int) 5. ฟังก์ชั่นกาหนดความเร็วในการสื่อสารทางพอร์ตอนุกรม Serial.begin(speed); speed: ตวั เลขของอตั ราเร็วในการสื่อสารผา่ นพอร์ตอนุกรม
ใบงานท่ี 4.9 การเขียนโปรแกรมใชง้ านไอซีวดั อุณหภมู ิ DS18B20 131 6. ฟังก์ชั่นส่งข้อมูลออกพอร์ต เป็ นฟังก์ช่ันที่ใชใ้ นการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรือ พิมพข์ อ้ มูลออกทางพอร์ตเพอ่ื แสดงผลที่จอคอมพิวเตอร์เม่ือพมิ พเ์ สร็จตวั เคอร์เซอร์จะรออยู่ ที่ทา้ ยสิ่งท่ีพิมพน์ ้นั ๆ Serial.print(val); Serial.print(val, format); 7. ฟังก์ช่ันส่งข้อมูลออกพอร์ต คลา้ ยกบั ฟังก์ชน่ั Serial.print ต่างกนั ตรงท่ีเม่ือพิมพ์เสร็จตวั เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้นั เม่ือสั่งพิมพ์คร้ังถดั ไปขอ้ มูลท่ีปรากฏจะอยูท่ ่ี บรรทดั ใหม่ แทนที่จะต่อทา้ ยเหมือนกบั ฟังกช์ น่ั Serial.print Serial.println(val); Serial.println(val, format); ฟังก์ชั่นใช้งานของไลบราร่ี OneWire.h การอ่านค่าจากไอซี DS18B20 จาเป็ นตอ้ งใชไ้ ลบรารี่สื่อสารแบบ One wire ช่วย โดยมีฟังก์ชน่ั ใหใ้ ชง้ านดงั น้ี ฟังก์ช่ันกาหนดขาเชื่อมต่อ ใชใ้ นการระบุขาที่ใชเ้ ชื่อมตอ่ ใหต้ วั โปรแกรมรับรู้ รูปแบบเป็นดงั น้ี OneWire name(pin); name: ช่ือของอุปกรณ์ท่ีเชื่อมตอ่ ทางพอร์ตที่สื่อสารแบบ One wire pin: ขาพอร์ตดิจิทลั ที่เชื่อมตอ่ กบั ขา DQ ของไอซี DS18B20 ตวั อย่างเช่น OneWire ds(2); หมายถึง ต่อไปในโปรแกรมจะใช้ชื่อ ds ในการเรียกใช้งานอุปกรณ์ที่มีการเช่ือมต่อ สายสญั ญาณเขา้ ท่ีขาพอร์ต D2 ฟังก์ชั่นใช้งานของไลบรารี่ DallasTemperature.h การอ่านค่าจากไอซี DS18B20 จาเป็ นตอ้ งใชไ้ ลบรารี่ช่วยงาน ซ่ึงไลบรารี่ไม่ไดถ้ ูกเพ่ิมเขา้ มาใน ตวั โปรแกรม Arduino IDE ต้งั แต่แรกจาเป็นตอ้ งติดต้งั เพม่ิ เติม โดยมีฟังกช์ นั่ ใหใ้ ชง้ านดงั น้ี 1. ฟังก์ชั่นกาหนดการเช่ือมต่อ ใช้ในการระบุการเชื่อมต่อโดยจะเชื่อมโยงกับไลบรารี่ OneWire.h รูปแบบเป็นดงั น้ี DallasTemperature sensor_name(&onewire_name); sensor_name: ชื่อของเซนเซอร์ ที่ต้งั ข้ึนเพอ่ื เรียกใช้ onewire_name: ช่ือของอุปกรณ์ท่ีเชื่อมตอ่ ทางพอร์ตท่ีสื่อสารแบบ One wire
132 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ตัวอย่างเช่น DallasTemperature sensor(&ds); หมายถึง ต่อไปในโปรแกรมจะใช้ชื่อ sensor ในการเรียกใช้งานท่ีเชื่อมต่อแบบ One wire ท่ีอุปกรณ์ที่ช่ือวา่ ds ท่ีไดก้ าหนดจากไลบราร่ี OneWire.h 2. ฟังก์ช่ันเริ่มให้ทางาน ใชใ้ นการกระตุน้ ใหเ้ ซนเซอร์ทางาน รูปแบบเป็นดงั น้ี sensor_name.begin(); sensor_name: ช่ือของเซนเซอร์ท่ีต้งั ช่ือไว้ ตัวอย่างเช่น sensor.begin(); หมายถงึ ใหไ้ อซีตรวจวดั อุณภูมิท่ีช่ือวา่ sensor เริ่มทางาน 3. ฟังก์ชั่นอ่านค่าอุณหภูมทิ เ่ี ป็ นเซลเซียส ใชใ้ นการอา่ นคา่ อุณหภูมิ รูปแบบเป็นดงั น้ี sensor_name.getTempCByIndex(0) sensor_name: ช่ือของเซนเซอร์ที่ต้งั ชื่อไว้ ตัวอย่างเช่น Serial.println(sensor.getTempCByIndex(0)); หมายถงึ ใหพ้ มิ พอ์ ุณหภูมิท่ีอ่านไดจ้ ากไอซีตรวจวดั อุณภูมิที่ชื่อวา่ sensor 4. ฟังก์ชั่นอ่านค่าอุณหภูมทิ เ่ี ป็ นฟาเรนไฮต์ ใชใ้ นการอ่านคา่ อุณหภูมิ รูปแบบเป็นดงั น้ี sensor_name.getTempFByIndex(0) sensor_name: ช่ือของเซนเซอร์ท่ีต้งั ช่ือไว้ ตวั อย่างเช่น Serial.println(sensor.getTempFByIndex(0)); หมายถึง ใหพ้ ิมพอ์ ุณหภูมิที่อ่านไดจ้ ากไอซีตรวจวดั อุณภูมิท่ีช่ือวา่ sensor 7. วงจรทใี่ ช้ทดลอง วงจรเพ่อื ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูป 3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus กรณีใชว้ งจรท่ีสร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ท่ีลงบูตโหลดเดอร์เป็น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป
ใบงานที่ 4.9 การเขียนโปรแกรมใชง้ านไอซีวดั อุณหภมู ิ DS18B20 133 D1 VCC Peripheral circuit 1N5819 CPU circuit R1 10k 7,20 ATMEGA328 VCC SW1 R4-R5 LED1-LED3 1 RST AVCC D2 4 220 D3 5 C1 0.1uF R6 VCC 4.7k USB to UART (TTL Level) R21,kR3 3 6 3 DS18B20 2 D4 DTR D1(TXD) 2 VCC RXD D0(RXD) DQ TXD GND +5V GND 1 3V3 R7 VCC 4.7k X1 D5 11 3 DS18B20 16MHz 2 DQ VCC 9 XTAL1 10 XTAL2 GND 1 GND C2,C3 22pF 8,22 รูปที่ 4.9-1 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป R12-2R02 LED1-LED3 ARDUINO R3 VCC D2 4.7k D3 3 DS18B20 D4 2 VCC D5 DQ GND GND 1 4R.74k VCC 3 DS18B20 2 VCC DQ GND 1 รูปที่ 4.9-2 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE D S1 8 D S1 8 ABCDE D13 B 20 B 20 3V3 REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปที่ 4.9-3 การต่อลงบอร์ดทดลอง
134 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การต่อวงจรเพ่อื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปที่ 4.9-4 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน ปัญหาการจาลองการทางานของไลบรารี่ 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 กาหนดคา่ เริ่มต้นต่าง อ่านค่าจากไอซี แสดงค่าท่ีอา่ นได้
ใบงานท่ี 4.9 การเขียนโปรแกรมใชง้ านไอซีวดั อุณหภูมิ DS18B20 135 แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <OneWire.h> 2 #include <DallasTemperature.h> 3 OneWire ds(4); //sensor on pin D4 4 DallasTemperature sensor(&ds); 5 float temp; //variable keep temp value 6 void temp_read(); //prototype of function read temp 7 void setup(void) 8{ 9 Serial.begin(9600); 10 Serial.println(\"Dallas Temperature IC Control Library Demo\"); 11 sensor.begin(); 12 } 13 void loop(void) 14 { 15 temp_read(); 16 Serial.print(\"Temperature is: \"); 17 Serial.println(temp); 18 Serial.println(\"-----------Next read---------------\"); 19 delay(1000); 20 } 21 void temp_read() // Temperature read 22 { 23 sensor.requestTemperatures(); 24 temp = sensor.getTempCByIndex(0); //Read Temp 25 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ท่ี 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 เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การทดลองท่ี 2 เขียนโปรแกรมแสดงค่าอุณหภูมิที่วดั จากไอซี DS18B20 จานวน 2 ตวั โดยแสดงผลที่ จอคอมพวิ เตอร์ผา่ นทางพอร์ตอนุกรม ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริม่ ต้นต่าง อ่านค่าจากไอซี แสดงค่าทอี่ ่านได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <OneWire.h> 2 #include <DallasTemperature.h> 3 OneWire ds_1(4); //sensor 1 on pin D4 4 OneWire ds_2(5); //sensor 2 on pin D5 5 DallasTemperature sensor_1(&ds_1); 6 DallasTemperature sensor_2(&ds_2); 7 float temp_1; //variable keep temp value 8 float temp_2; //variable keep temp value 9 void temp_read(); 10 void setup(void) 11 { 12 Serial.begin(9600); 13 Serial.println(\"Dallas Temperature IC Control Library Demo\"); 14 sensor_1.begin(); 15 sensor_2.begin(); 16 } 17 void loop(void) 18 { 19 temp_read(); 20 Serial.print(\"Temperature for Device 1 is: \"); 21 Serial.println(temp_1); 22 Serial.print(\"Temperature for Device 2 is: \"); 23 Serial.println(temp_2); 24 Serial.println(\"-----------Next read---------------\"); 25 delay(1000); 26 } 27 void temp_read() 28 { 29 sensor_1.requestTemperatures(); 30 sensor_2.requestTemperatures(); 31 //------------------------------------------ 32 temp_1 = sensor_1.getTempCByIndex(0); //read temp from sensor_1 33 temp_2 = sensor_2.getTempCByIndex(0); //read temp from sensor_2 34 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 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 เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 10. งานทม่ี อบหมาย 1. เขียนโปรแกรมควบคุมการติดดบั ของ LED ท้งั 2 ตวั จากอุณหภูมิที่วดั ไดจ้ ากไอซี DS18B20 โดยแสดงผลการทางานและอุณภูมิที่จอคอมพวิ เตอร์ผา่ นทางพอร์ตอนุกรม ARDUINO R1-R2 LED1-LED3 D2 220 D3 4R.73k VCC 3 DS18B20 D4 2 DQ VCC GND 1 R4 VCC 4.7k 3 DS18B20 D5 2 VCC GND DQ GND 1 รูปท่ี 4.9-6 วงจรท่ีใชท้ ดลอง
ใบงานท่ี 4.10 การเขียนโปรแกรมวดั ระยะดว้ ยโมดูลอลั ตร้าโซนิค 139 ใบงานท่ี 4.10 การเขยี นโปรแกรมวดั ระยะด้วยโมดูลอลั ตร้าโซนิค 1. จุดประสงค์ทว่ั ไป เพ่ือใหส้ ามารถเขียนโปรแกรมวดั ระยะดว้ ยโมดูลอลั ตร้าโซนิคได้ 2. จุดประสงค์เชิงพฤตกิ รรม 1. บอกวธิ ีเขียนโปรแกรมวดั ระยะดว้ ยโมดูลอลั ตร้าโซนิคได้ 2. บอกข้นั ตอนการต่อวงจรเพ่ือทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เครื่องมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 4 ตวั 2.1 ตวั ตา้ นทาน 220 ohm 4 ตวั 2.2 LED 3mm 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 เมตรและมีมุมท่ีใชง้ านแคบดงั รูป รูปท่ี 4.7-1 รูปร่างของมุมกระจายคล่ืนเสียงของโมดูลอลั ตร้าโซนิค โมดูลอลั ตราโซนิคสาหรับวดั ระยะทางถูกสร้างมีให้เลือกใช้หลายรุ่นแต่ละรุ่นมีขอ้ แตกต่างกนั อยา่ งเดียวคือความแม่นยาของการวดั ดงั ตาราง การเลือกใชง้ านหากระดบั ความแม่นยาไม่สาคญั มากนกั โมดูล HR-SC04 จึงเหมาะท่ีจะนามาทดลองใช้ในใบงานเนื่องจากเป็ นโมดูลวดั ระยะท่ีมีราคาถูกกว่ารุ่น อ่ืน ๆ ตารางที่ 4.10-1 1. Sensor angle HR-SC04 HY-SRF05 US-100 2. Detection distance 3. precision < 15 degrees < 15 degrees < 15 degrees 4. Working Voltage 2cm-450cm 2cm-450cm 2cm-450cm 5. Static current ~3 mm ~2 mm ~1 mm 5VDC 5VDC 5VDC < 2mA < 2mA < 2mA การเขียนโคด้ โปรแกรมเพื่อวดั ระยะทางดว้ ยโมดูลอลั ตา้ โซนิคสามารถเขียนโดยไม่พึงไลบรารี่ก็ ได้ หรือถา้ หากตอ้ งการใชไ้ ลบราร่ีเพือ่ ใหก้ ารเขียนโคด้ ง่ายข้ึนสามารถดาวน์โหลดไดท้ ่ี ไลบราร่ี แหล่งดาวน์โหลด Ultrasonic.h https://github.com/JRodrigoTech/Ultrasonic-HC-SR04
ใบงานที่ 4.10 การเขียนโปรแกรมวดั ระยะดว้ ยโมดูลอลั ตร้าโซนิค 141 มีข้นั ตอนการดาเนินการเพื่อนาไลบราร่ีมาใชง้ านดงั น้ี 1. ดาวน์โหลดไลบราร่ีซ่ึงเป็นไฟล์ Zip ดงั รูป รูปท่ี 4.10-2 การดาวน์โหลดไลบราร่ีท่ีนามาใชง้ าน 2. แต่เนื่องจากการบีบอดั ไฟลไ์ ลบรารี่จดั โฟลเดอร์ไม่ถูกตอ้ งดงั น้นั การเพิ่มไลบราร่ีเช่นใบงานที่ ผ่านมาจึงไม่สามารถใชง้ านได้ วิธีการติดต้งั จึงตอ้ งจดั การเองท้งั หมดเริ่มจากแตกไฟล์ที่ดาวน์ โหลด ดงั รูป รูปท่ี 4.10-3 แตกไฟลท์ ่ีดาวน์โหลดมาในโฟลเดอร์ปัจจุบนั 3. ทาการดบั เบิลคลิกเขา้ ไปในโฟลเดอร์ท่ีแตกมาไดจ้ ากขอ้ 2 คดั ลอกเฉพาะโฟลเดอร์ Ultrasonic (คลิกขวาที่โฟลเดอร์เลือก copy) รูปที่ 4.10-4 คดั ลอกโฟลเดอร์ Ultrasonic
142 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 4. นาไปวางในโฟลเดอร์ท่ีเก็บไลบรารี่ของโปรแกรม Arduino IDE ซ่ึงจะอยทู่ ่ี C:\\Users\\......\\Documents\\Arduino\\libraries (คลิกขวาบริเวณวา่ ง ๆ ภายในโฟลเดอร์แลว้ เลือก paste) รูปท่ี 4.10-5 วางโฟลเดอร์ที่คดั ลอกลงในโฟลเดอร์ไลบราร่ีของ Arduino IDE 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: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต value: HIGH or LOW 3. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ชั่นหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาท่ี ตอ้ งการหยุดคา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวินาที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long)
ใบงานท่ี 4.10 การเขียนโปรแกรมวดั ระยะดว้ ยโมดูลอลั ตร้าโซนิค 143 4. ฟังก์ชั่นหน่วงเวลาเป็ นไมโครวินาที เนื่องจากฟังกช์ น่ั หน่วงเวลาปกติเวลาต่าสุดที่ทาไดค้ ือ 1 มิลลิวนิ าที ดงั น้นั หากตอ้ งการหน่วงเวลาท่ีต่ากวา่ จ่ึงตอ้ งใชฟ้ ังชน่ั น้ีซ่ึงสามารถหน่วงเวลาได้ ในระดบั ไมโครวนิ าที รูปฟังชนั่ เป็นดงั น้ี delayMicroseconds(us); us: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยไมโครวนิ าที (unsigned int) 5. ฟังก์ช่ันกาหนดความเร็วในการสื่อสารทางพอร์ตอนุกรม Serial.begin(speed); speed: ตวั เลขของอตั ราเร็วในการส่ือสารผา่ นพอร์ตอนุกรม 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 ฟังก์ช่ันใช้งานของไลบรารี่ Ultrasonic.h การอ่านคา่ จากโมดูล Ultrasonic จาเป็นตอ้ งใชไ้ ลบรารี่ช่วยงาน ซ่ึงไลบรารี่ไม่ไดถ้ ูกเพมิ่ เขา้ มาใน ตวั โปรแกรม Arduino IDE ต้งั แตแ่ รกจาเป็นตอ้ งติดต้งั เพิ่มเติม โดยมีฟังกช์ นั่ ใหใ้ ชง้ านดงั น้ี 1. ฟังก์ชั่นกาหนดขาเช่ือมต่อ ใชใ้ นการระบุขาที่ใชเ้ ช่ือมต่อให้ตวั โปรแกรมรับรู้ รูปแบบเป็ น ดงั น้ี Ultrasonic ultrasonic(Trig PIN,Echo PIN); Trig PIN: ตวั เลขระบุขาพอร์ตที่ใชเ้ ชื่อมตอ่ กบั ขา Trig ของโมดูล Echo PIN: ตวั เลขระบุขาพอร์ตท่ีใชเ้ ชื่อมตอ่ กบั ขา Echo ของโมดูล ตัวอย่างเช่น Ultrasonic ultrasonic(9,8); หมายถึง ต่อไปในโปรแกรมจะใช้ช่ือ ultrasonic ในการเรียกใช้งานโมดูล โดยมีการ เชื่อมต่อขาพอร์ต D9 เขา้ ที่ขา Trig และขาพอร์ต D8 เขา้ ท่ีขา Echo ของโมดูล 2. ฟังก์ชั่นอ่านค่าระยะทาง ใชอ้ ่านค่าระยะทางจากตวั โมดูลโดยสามารถระบุหน่วยท่ีตอ้ งการ วดั ได้ 2 แบบคือ เซนติเมตร (CM) และหน่วยที่เป็นนิ้ว (IN) รูปแบบเป็นดงั น้ี .Ranging(Unit); Unit: หน่วยท่ีตอ้ งการวดั CM ,IN ตัวอย่างเช่น Serial.print(ultrasonic.Ranging(CM)); หมายถงึ แสดงผลระยะที่วดั ไดห้ น่วยเป็นเซนติเมตรทางพอร์ตอนุกรม
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338