การใช้งาน อุปกรณ์ I/O สาระการเรียนรู้ 1. อุปกรณ์สัญญาณดิจิทัล 2. อุปกรณ์สัญญาณแอนะล็อก 3. ฟังก์ชันเกี่ยวกับเวลา 4. ฟังก์ชันกําเนิดเสียง จุดประสงค์การเรียนรู้ 1. บอกอุปกรณ์สัญญาณดิจิทัลได้ 2. บอกอุปกรณ์สัญญาณแอนะล็อกได้ 3. บอกฟังก์ชันเกี่ยวกับเวลาได้ 4. บอกฟังก์ชันกําเนิดเสียงได้ สมรรถนะประจําหน่วย ผูเ้รียนสามารถเขียนคาํสั่งรับค่าและควบคุมอุปกรณ์แบบ สัญญาณดิจิทัลหรือสัญญาณแอนะล็อกได้ รวมถึงสามารถ เรียกใช้งานฟังก์ชันเกี่ยวกับเวลาและเสียงได้ 1. อุปกรณ์สัญญาณดิจิทัล ในการเชื่อมต่ออุปกรณ์นําเข้า (Input) หรื ออุปกรณ์แสดงผล (Output) แบบสัญญาณดิจิทัลน้ัน จะต้องเชื่อมต่อกับ ขา (Pin) ที่ระบุเป็ นตัวเลขมาซึ่งได้ระบุไว้ในหน่วยที่ 2 ดังภาพที่ 5.1 ภาพที่ 5.1 การเชื่อมต่ออุปกรณ์สัญญาณดิจิทัล
ที่มา : อุไรวรรณ มีแสง. (2564), จาก : https://bit.ly/3kOKes1 1.1 โหมดการทํางานของอุปกรณ์สัญญาณดิจิทัล เมื่อเชื่อมต่อกับบอร์ดเรียบร้อยแล้ว การทํางานของอุปกรณ์จะแบ่งออกเป็ น 2 โหมด คือ 1.1.1 โหมด Input 1.1.2 โหมด Output 1.2 การกําหนดฟังก์ชัน pinMode การกําหนดฟังก์ชัน pinMode จะถูกเขียนในส่วนของ void setup() ซ่ึงเป็นส่วนของการต้งัค่าเริ่มการ ทํางานให้กับอุปกรณ์ต่าง ๆ โครงสร้าง pinMode(pin, mode); เมื่อ pin หมายถึง ขาที่เชื่อมต่อกับอุปกรณ์ I/O mode หมายถึง โหมดการทํางานสามารถระบุได้เป็ น INPUT หรือ OUTPUT หลังจากกําหนดสถานะการทํางานให้กับขา (Pin) ที่เชื่อมต่อกับอุปกรณ์เรียบร้อยแล้ว สามารถนําไป เขียนคาํสั่งควบคุมการทาํงานในส่วนของvoid loop() ได้ 2 ลักษณะ คือ 1.2.1 คาํสั่งแสดงผลเป็นการส่งค่าออกไป หรือเป็นการสั่งให้อุปกรณ์ทาํงานก็ได้สามารถใชไ้ดท้ ้งัโหมด INPUT และ OUTPUT โครงสร้าง digitalWrite(pin, value); เมื่อ value หมายถึง สถานะการทํางานของอุปกรณ์สามารถระบุได้เป็ น HIGH หรือ LOW pin หมายถึง ขาที่เชื่อมต่อกับอุปกรณ์รับค่า 1.2.2 คาํสั่งรับค่าจะใชใ้นกรณีที่ขามีโหมดการทาํงานเป็น INPUT เท่าน้นั โครงสร้าง val = digitalRead(pin); เมื่อ val หมายถึง ตัวแปรที่นําเก็บค่า pin หมายถึง ขาที่เชื่อมต่อกับอุปกรณ์รับค่า ข้อควรระวัง ในการใชง้านคาํสั่งรับค่าจะตอ้งเขียนคาํสั่งให้อุปกรณ์ทาํงานก่อนเสมอจึงสามารถรับค่าได้ 2. อุปกรณ์สัญญาณแอนะล็อก
การพฒันาระบบอินเทอร์เน็ตสรรพสิ่งน้ัน จะตอ้งมีการเชื่อมต่ออุปกรณ์ตรวจจับสภาพแวดล้อม (Sensor) ไม่ว่าจะเป็ น การตรวจจับความร้อน การตรวจจับอุณหภูมิ หรือการตรวจจับแสง เป็ นต้น ซึ่งอุปกรณ์ เหล่าน้ีรับค่าและแสดงผล การทํางานในรูปแบบแรงดันไฟฟ้ามีค่าไม่คงที่มักเปลี่ยนแปลงไปตาม สภาพแวดลอ้มที่ตรวจจบัเรียกสัญญาณลกัษณะน้ีว่า สัญญาณแอนะล็อก อุปกรณ์สัญญาณแอนะล็อกจะไม่สามารถเชื่อมต่อกับชาดิจิทัลแบบปกติได้ เพราะในการใช้งานจะตอ้งผ่าน การแปลงสัญญาณให้เป็นสัญญาณดิจิทลัก่อน ผ่านโมดูลที่ชื่อว่า ADC หรือ Analog to Digital Converter ซึ่งมีอยู่ ในขา (Pin) ที่ข้ึนตน้ดว้ยตวัอกัษร A เท่าน้นั โดยมีกระบวนการสาํคญั 2 ประการ คือ 1) กระบวนการแปลงสัญญาณหรือปริมาณทางวิทยาศาสตร์มาเป็ นสัญญาณไฟฟ้า 2) กระบวนการแปลงสัญญาณแอนะล็อกเป็ นสัญญาณดิจิทัล กระบวนการท้งัสองจะทาํงานต่อเนื่องกนั โดยจะรับคลื่นเสียงความเขม้ของแสง พลงังานความร้อน หรืออื่น ๆ มาอยู่ในรูปสัญญาณไฟฟ้า และส่งต่อไปแปลงเป็ นสัญญาณดิจิทัล เพื่อนําค่าไปใช้ต่อไป ในการใช้งานขา (Pin) ที่มีโมดูล ACD น้ัน จะต้องใช้ฟังก์ชัน pinMode กําหนดโหมดการทํางาน ให้กับอุปกรณ์ เช่นเดียวกับการใช้อุปกรณ์สัญญาณดิจิทัล ในส่วนของ void setup() ก่อนนาํไปเขียนคาํสั่ง ควบคุมใน void loop() ภาพที่ 5.6 การต่อวงจรและการกําหนดโหมดให้อุปกรณ์สัญญาณแอนะล็อก ที่มา : อุไรวรรณ มีแสง. (2564), จาก : https://bit.ly/3DshXi5 2.1 ฟังก์ชันการรับค่าสัญญาณแอนะล็อก 2.1.1 ฟังก์ชัน analogRead เป็ นฟังก์ชันที่ใช้ในการอ่านค่าจากอุปกรณ์สัญญาณแอนะล็อก ใช้มาตรฐานการแปลงสัญญาณความ ละเอียดอยู่ที่ 10 บิต ทาํให้สามารถรับค่าแรงดนั ไฟฟ้าไดต้้งัแต่0-5 โวลต์ และแปลงค่าเป็ นข้อมูลตัวเลขได้ ต้งัแต่0-1023 โครงสร้าง val = analogRead(pin);
เมื่อ val หมายถึง ตัวแปรใด ๆ ที่นํามาเก็บค่าจากการอ่านสัญญาณแอนะล็อก pin หมายถึง ขาที่เชื่อมกับอุปกรณ์สัญญาณแอนะล็อก ภาพที่5.7 การต่อวงจร ที่มา : อุไรวรรณ มีแสง. (2564), จาก : https://bit.ly/3qlfFrQ ภาพที่ 5.8 ฟังก์ชัน analogRead และการแสดงค่าจาก Serial Monitor ที่มา : อุไรวรรณ มีแสง. (2564), จาก : https://bit.ly/3CvmnUa 2.1.2 ฟังก์ชัน map เป็ นฟังก์ชันสําหรับการปรับค่าของข้อมูลในช่วงที่ต้องการ ซึ่งฟังก์ชัน analogRead จะให้ค่าในช่วง 0-1023 เท่าน้ัน แต่ในขณะเดียวกนฟังก์ชัน ั map สามารถกําหนดให้อยู่ในช่วงที่ต้องการได้อย่างอิสระ เช่น กําหนด ให้รับค่าอยู่ในช่วง 0-100 โครงสร้าง map (value, fromLow, fromHigh, toLow, toHigh); เมื่อ value หมายถึง ตัวแปรที่ต้องการนํามาแปลงให้อยู่ในช่วงที่ต้องการ fromLow หมายถึงค่าต่ ํ าสุดของข้อมูลที่ต้องการแปลง fromHigh หมายถึง ค่าสูงสุดของข้อมูลที่ต้องการแปลง
toLow หมายถึงค่าต่ ํ าสุดของช่วงที่ตอ้งการ toHigh หมายถึง ค่าสูงสุดของช่วงที่ต้องการ ตัวอย่าง ภาพที่ 5.9 การใช้ฟังก์ชัน map และการแสดงค่าจาก Serial Monitor ที่มา : อุไรวรรณ มีแสง. (2564), จาก : https://bit.ly/3ozcasu จากภาพที่ 5.9 จะเป็ นการใช้วงจรตามภาพที่ 5.7 เพียงแต่เพิ่มฟังก์ชัน map ลงไป เพื่อแปลงค่าตัว แปร sensorvalue จากฟังก์ชัน analogRead ให้อยู่ในช่วง 0-100 และเก็บไวท้ ี่ตวัแปรเดิม ก่อนนาํมาแสดงผล ทาง Serial Monitor 2.2 สัญญาณ PWM หรือ Pulse Width Modulation Pulse Width Modulation : PWM เป็ นการสร้างสัญญาณเอาต์พุตแบบดิจิทัล หรื อสัญญาณพัลส์ (Pulse) มีลักษณะเป็ นคลื่นสี่เหลี่ยม (Square Wave) มีความต่อเนื่องและมีความถี่ หรือคาบเวลาที่คงที่ มีความ กวา้งของ คลื่นฝั่งบวก เป็น 1 หรือ HIGH และฝั่งลบ เป็น 0 หรือ LOW ซึ่งค่าที่แตกต่างกันใน 1 คาบเวลา (Period) จะถูก นํามาคิดสัดส่วนเป็ นเปอร์เซ็นต์ของสถานะ HIGH ต่อสัญญาณพัลส์ใน 1 คาบเวลา เรียกว่า Duty Cycle ซึ่งจะถูก นําไปใช้แทนค่าเอาต์พุตของสัญญาณแอนะล็อก เพื่อควบคุมอุปกรณ์ต่าง ๆ เช่น ความ สว่างของหลอดไฟ ความเร็ว ของรอบ DC Motor และการหมุนของ Servo Motor ให้อยู่ในช่วงที่ต้องการได้ ไม่ใช่แค่ค่าต่ ํ าสุดและสูงสุดแบบ สัญญาณดิจิทลัมีวิธีการคาํนวณดงัน้ี Duty Cycle (%) = Time HIGH (Time HIGH + Time LOW) เมื่อได้ค่า Duty Cycle สามารถนํามาวิเคราะห์รูปคลื่นของสัญญาณ PWM ได้ว่า 1) Duty Cycle มีค่าเป็ น 0% คือ ใน 1 คาบเวลาให้ค่าสัญญาณเอาต์พุต LOW ตลอดเวลา 2) Duty Cycle มีค่าเป็ น 25% คือ ใน 1 คาบเวลาให้ค่าสัญญาณเอาต์พุต HIGH ประมาณ 1 ใน 4 3) Duty Cycle มีค่าเป็ น 50% คือ ใน 1 คาบเวลาให้ค่าสัญญาณเอาต์พุต HIGH และ LOW เท่ากัน 4) Duty Cycle มีค่าเป็ น 75% คือ ใน 1 คาบเวลาให้ค่าสัญญาณเอาต์พุต HIGH ประมาณ 3 ใน 4
5) Duty Cycle มีค่าเป็ น 100% คือ ใน 1 คาบเวลาให้ค่าสัญญาณเอาต์พุต HIGH ตลอด ซึ่งค่า Duty Cycle ที่ได้จะถูกนําไปคํานวณหาค่าเฉลี่ย ตามแรงดันที่จ่ายออกไป เช่น จ่ายแรงดันไฟ ออกไป 3.3 โวลต์ ค่าเฉลี่ยที่ได้จะออกมาอยู่ในช่วง 0-3.3 ซึ่ งเป็ นค่าตัวเลขของ สัญญาณดิจิทัล มีวิธีการ คา้นวณดงัน้ี V (avg.) = Duty Cycle × Vcc ภาพที่ 5.11 สัญญาณ PWM และค่า Duty Cycle ใน 1 คาบเวลา ทีมา : https://bit.ly/3Dlds3r 2.3 ฟังก์ชันการแสดงผลของสัญญาณแอนะล็อก ฟังก์ชัน analogWrite เป็ นการแสดงค่าของสัญญาณแอนะล็อก โดยได้ใช้หลักการสร้างสัญญาณ PWM แปลงค่าให้เป็ นสัญญาณดิจิทัล เพื่อส่งค่าแรงดันที่ได้รับออกไปควบคุมอุปกรณ์ให้ทํางานในช่วงค่า ต่าง ๆ โครงสร้าง analogWrite (pin, value); เมื่อ pin หมายถึง ขาที่เชื่อมกับอุปกรณ์สัญญาณแอนะล็อก value หมายถึง ค่าที่ต้องการส่งออกไป ภาพที่ 5.12 การใช้ฟังก์ชัน analogWrite
ที่มา : อุไรวรรณ มีแสง. (2564). จาก : https://bit.ly/3oKxG6m จากภาพที่ 5.12 จะเป็ นการรับค่าจากอุปกรณ์ Potentiometor มาเก็บไว้ที่ตัวแปร sensor value และนํา ค่ามาใช้ในฟังก์ชัน analog Write ส่งค่าไปให้หลอดไฟทํางานมีความสว่างตามค่าตัวแปร sensor value 3. ฟังก์ชันเกี่ยวกับเวลา การทํางานของอุปกรณ์ภายในวงจรมักมีเรื่องของเวลาเข้ามาเกี่ยวข้องอยู่เสมอ ไม่ว่าจะเป็ นการ หน่วงเวลาเพื่ออ่านค่า หรือรอรับค่าจากอุปกรณ์ประเภทเซนเซอร์ต่าง ๆ โดยฟังก์ชนัที่นิยมนาํมาใช้มีดงัน้ี 3.1 ฟังก์ชัน delay เป็นฟังก์ชันสําหรับผูเ้ริ่มต้นพฒันาซ่ึงนิยมนํามาใช้ในช่วงแรกมากที่สุด เพื่อหน่วงเวลาในการ ทํางาน หรือรอดู ผลลัพธ์ที่ใช้ได้ง่ายที่สุด ไม่ต้องคํานวณให้ยุ่งยาก มีการใช้งานอยู่ 2 ลักษณะ คือ 3.1.1 delay(ms); เป็ นการหน่วงเวลาในหน่วยมิลลิวินาที (ms) โดย 1000 มิลลิวินาที เท่ากับ 1 วินาที โครงสร้าง delay(ms); เมื่อ ms หมายถึง ระยะเวลาที่ต้องการหน่วง นับเป็ นมิลลิวินาที 3.1.2 delayMicroseconds(us); เป็ นการหน่วงเวลาในหน่วยไมโครวินาที โดย 1000 ไมโครวินาที เท่ากับ 1 มิลลิวินาที และ 1 ล้านไมโครวินาที เท่ากับ 1 วินาที โครงสร้าง delayMicroseconds(us); เมื่อ us หมายถึง ระยะเวลาที่ต้องการหน่วง นับเป็ นไมโครวินาที ข้อควรระวังในการใช้งาน เพื่อความแม่นยํา ฟังก์ชัน delayMicroseconds ควรใชห้น่วงเวลาต้งัแต่ 3 ไมโครวินาทีข้ึนไป และใช้ หน่วงเวลา ในระยะส้ัน ๆ เท่าน้นัเนื่องจากฟังก์ชนั delay ท้งัสองแบบน้ีจะหยดุการทาํงานของอินเตอร์รัปต์ บางอย่าง อาจทําให้ได้รับค่าจากอุปกรณ์พอร์ตอนุกรมได้ไม่ต่อเนื่องหรือผิดพลาดได้ ทําให้นักพัฒนาส่วน ใหญ่หลีกเลี่ยงการใช้ฟังก์ชัน delay และเลือกใช้ฟังก์ชัน millis แทน 3.2 ฟังก์ชัน millis ฟังก์ชันสําหรับนับเวลาในหน่วยมิลลิวินาทีโดยจะนับต้งัแต่บอร์ดเริ่มทาํงาน จนกว่าจาํนวนนบัจะ เกินขอบเขต ที่จะนับได้ (Overflow) แลว้กลบั ไปเริ่มตน้ที่0 ใหม่อีกคร้ังการนับค่าโดยประมาณยาวนานถึง 50 วนั โดยฟังก์ชนัน้ีจะทาํงานตลอดเวลาจนกว่าระบบจะปิดลง หรือมีการรีเซ็ตระบบ และไม่ส่งผลกระทบ ต่อการทํางานของอินเตอร์รับ ใด ๆ จึงนิยมนํามาประยุกต์ใช้ในเรื่องของการหน่วงเวลา โดยอาศัยวิธีการ คาํนวณเขา้มาช่วย ทาํให้มีวิธีใชท้ ี่ยงุ่ยากข้ึนมาเล็กนอ้ย โครงสร้าง time = millis();
เมื่อ time หมายถึง ตัวแปรใด ๆ ที่มีชนิดเป็ น long ข้ึนไป ในวงเล็บไม่ต้องระบุค่า Parameter ใด แต่ฟังก์ชันจะส่งค่านับเวลาในหน่วยมิลลิวินาที (Returns) มาเก็บไว้ที่ตัวแปร time 4. ฟังก์ชันกําเนิดเสียง เป็ นสัญญาณเสียงส่งออกมาทางลําโพง มีการใช้งาน 2 ฟังก์ชัน คือ ฟังก์ชันสําหรับการสร้าง สัญญาณเสียง 4.1 ฟังก์ชัน tone ฟังก์ชันแปลงสัญญาณไฟฟ้าให้เป็ นสัญญาณเสียง และส่งออกไปยังอุปกรณ์ส่งเสียง เช่น ลําโพง โดยอาศัยใช้คลื่นความถี่โดยใช้คลื่นความถี่และระยะเวลาที่ต้องการให้เกิดการเปลี่ยนสัญญาณไฟฟ้า โครงสร้าง tone(pin, freq, time); เมื่อ pin หมายถึง ขาที่เชื่อมกับอุปกรณ์ส่งเสียง freq หมายถึง คลื่นความถี่สัญญาณเสียง มีหน่วย เป็ นเฮิรตซ์ (Hz) มีค่า 31-65, 535 time หมายถึง ระยะเวลาในการเกิดเสียงมีหน่วยเป็ นมิลลิวินาที 4.2 ฟังก์ชัน noTone ฟังก์ชันหยุดส่งสัญญาณเสียงไปยังอุปกรณ์ส่งเสียง โครงสร้าง noTone(pin); ภาพที่ 5.17 ตัวอย่างการใช้ฟังก์ชัน toneและ noTone ที่มา : อุไรวรรณ มีแสง. (2564) จาก : https://bit.ly/3kLpVww จากภาพที่ 5.17 จะเป็ นการควบคุมขา 8 ให้ เมื่อ pin หมายถึง ขาที่เชื่อมกับอุปกรณ์ส่งเสียง เป็ นอุปกรณ์ส่งเสียง และใช้คลื่นความถี่ค่า 500 จะทําให้เกิดเสียง “ติด” นาน 100 มิลลิวินาที และ หน่วงไว้ 3 วินาที และปิ ดการทํางานขา 8