แสดงบทความที่มีป้ายกำกับ สัญญาณ แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ สัญญาณ แสดงบทความทั้งหมด

10 มิถุนายน 2559

อาร์ดุยโน : นำเข้าสัญญาณแอนะล็อก

ลองเล่นอินพุท-เอาท์พุทกับสัญญาณดิจิทัลแล้ว มาในตอนนี้ ลองเล่นการนำเข้าสัญญาณแอนะล็อกกันบ้าง

ก่อนอื่นเราลองทำมาทำความเข้าใจกับสัญญาณแอนะล็อกกันสักหน่อยก่อน

สัญญาณแอนะล็อกเป็นสัญญาณที่ค่าสัญญาณทางไฟฟ้ามีการเปลี่ยนแปลงแบบต่อเนื่อง หมายความว่า เมื่อจะมีการเปลี่ยนแปลงแรงดันไฟฟ้า ระหว่าง 0 ถึง 5 โวลท์ มันจะค่อยๆ เปลี่ยนแปลง เช่นจาก 0.1, 0.2, 0.3, .... ไปเรื่อยๆ จนกระทั่งถึง 5 โวลท์ ซึ่งแตกต่างจากสัญญาณดิจิทัล ที่มันจะมีเพียง 2 สถานะ คือ ประมาณ 0 โวลท์ กับประมาณ 5 โวลท์ เท่านั้น ใครยังไม่เข้าใจ ลองอ่านเรื่อง สัญญาณแอนะล็อก กับสัญญาณดิจิทัล เมื่อบทความที่แล้วดูอีกที

อาร์ดุยโนจัดการสัญญาณแอนะล็อกอย่างไร

เมื่อมีสัญญาณแอนะล็อก ซึ่งอยู่ในรูปแรงดันไฟฟ้า(voltage)ที่มีการเปลี่ยนแปลงอย่างต่อเนื่องเข้ามายังขาเข้าแอนะล็อก ไม่ว่าขาไหนช่องใดก็ตาม อาร์ดุยโนก็ต้องแปลงมันให้เป็นดิจิทัลอยู่ดี การแปลงนี้เรียกว่า ADC (Analog to Digital Converter) วิธีการแปลงก็คือ มันจะแบ่งระดับของแรงดันไฟฟ้าขาเข้าออกเป็น 1024 ระดับ (210) คือตั้งแต่ค่า 00000000002 (010) จนถึง 11111111112 (102310) ตัวเลขที่ห้อยท้ายหมายถึงฐานของเลขที่เราต้องการอ้างถึงนะครับ

สมมติว่าแรงดันไฟฟ้าที่ผ่านเข้ามายังช่องแอนะล็อก มีตั้งแต่ 0 โวลท์ ถึงสูงสุด 5 โวลท์ นั่นคือ
แรงดันไฟฟ้าที่เข้ามา 0 โวลท์ จะถูกแปรผลเป็นตัวเลข 0
แรงดันไฟฟ้าที่เข้ามา 0.005 โวลท์ จะถูกแปรผลเป็นตัวเลข 1
แรงดันไฟฟ้าที่เข้ามา 0.010 โวลท์ จะถูกแปรผลเป็นตัวเลข 2
แรงดันไฟฟ้าที่เข้ามา 0.015 โวลท์ จะถูกแปรผลเป็นตัวเลข 3
.
.
.
แรงดันไฟฟ้าที่เข้ามา 4.995 โวลท์ จะถูกแปรผลเป็นตัวเลข 1022
แรงดันไฟฟ้าที่เข้ามา 5.000 โวลท์ จะถูกแปรผลเป็นตัวเลข 1023

โดย...

ในแต่ละวินาทีอาร์ดุยโนจะทำการจัดเก็บข้อมูลแปลงค่าแอนะล็อกเป็นดิจิทัล 10,000 ครั้ง  หรือจะพูดอีกแบบหนึ่งก็คือ อาร์ดุยโนจะเก็บข้อมูลทุกๆ 0.0001 วินาทีอย่างต่อเนื่องเป็นสายของตัวเลขยาวเหยียดตามระยะเวลาที่สัญญาณแอนะล็อกส่งเข้ามา


จุดประสงค์การทดลอง

  • เพื่อทำความเข้าใจกับการจัดการสัญญาณป้อนเข้าแบบแอนาล็อกของอาร์ดุยโน

อุปกรณ์การทดลอง

  1. บอร์ด Arduino UNO
  2. ตัวต้านแบบปรับค่าได้ 10kΩ (แบบเกือกม้าก็ได้ แบบมือหมุนก็ได้)
  3. สายไฟ
  4. magnetic buzzer (ลำโพงขนาดเล็กๆ นิยมนำมาทำเป็นเสียงออด)
ต่ออุปกรณ์ดังรูป


ขยายให้เห็นชัดๆ ต่อจะได้ไม่ผิด



จากรูปภาพตัวต้านทานที่ปรับค่าได้แบบโวลุ่มหรี่เสียง ด้านหนึ่งต่อเข้ากับแหล่งจ่ายกำลัง 5 โวลท์ อีกด้านหนึ่งต่อลงกราวด์ ส่วนตรงกลางนั้นต่อเข้ากับทางเข้าสัญญาณแอนะล็อกช่อง A5 หรือช่องไหนก็ได้ ส่วนบัซเซอร์ ขั้วบวกต่อเข้ากับช่องทางดิจิทัลช่อง 9 (หรือตามสะดวก เขียนโปรแกรมให้ถูกช่องก็แล้วกัน) ขั้วลบขั้วเข้ากับกราวด์โดยใช้จุดพักดังแสดงให้ภาพ

เขียนและรันโปรแกรม 


  1. เปิด IDE
  2. คลิก File > New
  3. บันทึกไฟล์ให้เรียบร้อย เสียบสาย USB จากบอร์ดเข้ายังคอมพิวเตอร์
  4. คลิก  เพื่อทำการตรวจสอบ คอมไพล์และอัพโหลด(ในคลิกเดียว) ถ้ามีปัญหาอะไร IDE ก็จะแจ้ง ครูเชื่อว่าถ้าพิมพ์ตามที่ครูบอกก็จะไม่มีปัญหาอะไร
  5. ตอนนี้ควรจะได้ยินเสียงออด (ฟังดูน่ารำคาญอยู่ ) ลองหมุนปรับโวลุ่มดู จะเห็นว่าเสียงออดมีการแปรเปลี่ยนได้ ด้านหนึ่งจะได้ยินเสียงต่ำ ด้านหนึ่งจะได้ยินเสียงสูง

การทำงานของโปรแกรม

นี่ถือเป็นส่วนสำคัญ เพราะหากทดลองแล้ว เวิร์กแล้ว ก็หันหลังไปหาเรื่องใหม่เลย มันก็จะไม่เข้าใจ ไม่มีประโยชน์ ดังนั้นต้องมาทำความเข้าใจกับมันก่อน


เรื่องแรกที่ต้องทำความเข้าใจคือ ออดมันดังได้อย่างไร มันดังได้เพราะว่ามีการกระเพื่อมของกระแสไฟฟ้าทำให้เกิดการเปลี่ยนแปลงสนามแม่เหล็กทำให้เกิดการสั่นของแผ่นไดอะแฟรมแล้วก็เกิดเป็นเสียงออกมา ไอ้เจ้าการกระเพื่อมของกระแสไฟฟ้าหรือแรงดันไฟฟ้านี่แหละเกิดจาก คำสั่งในส่วนนี้

aValue=analogRead(5);
digitalWrite(9, HIGH);
delayMicroseconds(1000+10*aValue);
digitalWrite(9, HIGH);
delayMicroseconds(1000+10*aValue);

ค่า aValue คือ ค่าตัวเลขที่ได้จากฟังก์ชั่น analogRead(5);
ถัดมาก็เซตสถานะสัญญาณดิจิทัลช่อง 9 เป็น HIGH แรงดัน 5 โวลท์จะถูกจ่ายออกไปที่บัซเซอร์ ถัดมาอีกบรรทัดหนึ่งเป็นคำสั่งที่เลื่อนเวลาออกไป เป็นเวลา 1000+10*aValue  ในหน่วยไมโครวินาที ค่า aValue จะมีค่าจะอยู่ระหว่าง 0-1023 ดังได้กล่าวมาแล้ว เมื่อเอามาคูณ 10 แล้วบวกกับ 1000 ก็จะกลายเป็นจาก 1000-11230 ไมโครวินาที จากนั้นก็เซตสถานะสัญญาณดิจิทัลของช่อง 9 เป็น LOW (0 โวลท์) แล้วก็รอไปอีกเท่าช่วงเวลาเดิม ก่อนวนกลับไปเริ่มทำใหม่

แล้วเสียงเกิดได้อย่างไร 

ปกติความถี่เสียง(ƒ) ที่เราได้ยินคือ 20-20000 Hz หรือหากเราคิดเป็นคาบ(T) คือ 0.05-0.00005 วินาที หรือ 50000 ไมโครวินาที - 50 ไมโครวินาที

ทีนี้ไปพิจารณาการรอจังหวะสถานะ HIGH และสถานะ LOW รวมกัน (ครบ 1 ลูกคลื่น) จะมีค่าระหว่าง 2000 - 22460 ไมโครวินาที ซึ่งคิดเป็นความถี่เสียงที่ได้คือ 45-500 Hz

สรุป

อาจจะไม่หรูหราฟู่ฟ่า แต่ตัวอย่างโปรแกรมง่ายๆ อย่างนี้ หากเข้าใจมันอย่างถ่องแท้ ครูเชื่อว่า ตอนนี้น่าจะเริ่มมองโปรเจกต์ที่จะนำเอาอาร์ดุยโนไปใช้งานได้แล้ว

ขอบคุณที่ติดตามครับ

09 มิถุนายน 2559

อิเล็กทรอนิกส์ : สัญญาณดิจิทัล กับ สัญญาณแอนะล็อก

ทุกวันนี้เราอยู่ในยุค "ดิจิทัล" นี่เป็นคำพูดที่ได้ยินกันโดยทั่วไป หรือไม่ก็จะมีอีกคำพูดหนึ่งว่า เทคโนโลยีทุกวันนี้ อะไรๆ ก็ "ดิจิทัล"  แล้วยังไงล่ะทีนี้ คำถามที่น่าจะถามกัน คือ ก่อนหน้าที่จะมี "ดิจิทัล" มันมีอะไรมาก่อน คำถามนี้ครูไม่เคยได้ยินจากเด็กนักเรียนที่ตัวเองสอนสักที แต่ก็อยากทำความเข้าใจ ใครรู้แล้ว ก็ไม่ต้องอ่านก็แล้วกัน

เริ่มแรกเรามารู้จักกับนิยามมันก่อนดีกว่า เข้าใจหรือไม่เข้าใจก็ให้รู้จักกันไว้ก่อน

สัญญาณทางไฟฟ้า ในวิชาอิเล็กทรอนิกส์เขาแบ่งไว้เป็น 2 ประเภทคือ

  • สัญญาณดิจิทัล (Digital Signal)
    ใน wikipedia.org ได้ให้ความหมายของสัญญาณดิจิทัลไว้ว่า เป็นสัญญาณทางกายภาพที่เป็นตัวแทนของลำดับของค่าที่แยกจากกัน(สัญญาณที่มีปริมาณไม่ต่อเนื่องในแกนเวลา)
  • สัญญาณแอนะล็อก (Analog Signal)
    ใน wikipedia.org ได้ให้ความหมายของสัญญาณแอนะล็อกไว้ว่า เป็นสัญญาณแบบต่อเนื่อง มีลักษณะเป็นคลื่นไซน์ (sine wave) โดยที่แต่ละคลื่นจะมีความถี่และความเข้มของสัญญาณที่ต่างกัน
อ่านแล้วแม้คนที่มีพื้นฐานทางไฟฟ้า อิเล็กทรอนิกส์มาบ้างแล้วก็อาจจะยังงง ยิ่งไปอ่าน wikipedia ฉบับภาษาอังกฤษ ยิ่งมีการอธิบายไว้แบบพิสดาร

เอางี้ ครูจะลองอธิบายแบบของครู สำหรับเด็กๆ นักเรียนที่เพิ่งเริ่มเล่นอิเล็กทรอนิกส์ ซึ่งครูจะยกตัวอย่างเป็นวงจรที่สามารถทดลองจริงได้ แต่ไม่ต้องทดลองก็ได้ แต่ต้องนึกภาพไล่เรียงเหตุผลตามกันเองนะครับ

สัญญาณดิจิทัล

พิจารณาวงจรดังต่อไปนี้


จากวงจร เมื่อเรากดปุ่มสวิทช์แบบกดติด-ปล่อยดับ(puth button) กระแสไฟฟ้าจะเคลื่อนที่ผ่านตัวต้านทาน ทำให้เกิดความต่างศักย์คร่อมที่ตัวต้านทาน 5 โวลท์ (อ่านค่าได้จากโวลท์มิเตอร์) เมื่อเราปล่อยสวิทช์ กระแสไฟฟ้าถูกกั้นไว้ที่สวิทช์ไม่ให้ไหลผ่านตัวต้านทานได้ ทำให้ความต่างศักย์ที่คร่อมตัวต้านทานลดค่าลงเหลือ 0 โวลท์ จะเห็นว่า สถานะ 5 โวลท์ ถูกเปลี่ยนเป็น 0 โวลท์ และเมื่อกดสวิทช์อีกครั้ง สถานะความต่างศักย์คร่อมตัวต้านทานก็จะกลายเป็น 5 โวลท์ ค่าความต่างศักย์ 1 โวลท์ 2 โวลท์ หรือค่ากี่โวลท์ก็ตามระหว่าง 0 ถึง 5 โวลท์ จะไม่มีโอกาสเกิดขึ้นเลยที่ตัวต้านทาน R   ซึ่งการเปลี่ยนแปลงในลักษณะนี้ เรียกกันว่า การเปลี่ยนแปลงแบบไม่ต่อเนื่อง

ทีนี้ลองเขียนแผนภาพเวลา (time diagram) โดยแกนตั้งให้เป็นค่าความต่างศักย์คร่อมตัวต้านทาน ส่วน แกนนอนเป็นแกนของเวลา สมมติว่ามีการกด-ปล่อย กด-ปล่อย สวิทช์ด้วยช่วงเวลา 1 วินาทีเท่าๆ กัน


นี่ล่ะที่เขาเรียกกันว่า สัญญาณดิจิทัล  ถ้าเราให้สถานะที่มีความต่างศักย์คร่อมตัวต้านทาน 0 โวลท์ หมายถึง สถานะ LOW หรือ 0 และสถานะที่มีความต่างศักย์คร่อมตัวต้านทาน 5 โวลท์ หมายถึง สถานะ HIGH หรือ 1 จากตัวอย่างที่ให้มาดังภาพ ด้านบนนี้ ก็จะแปลความหมายได้เป็นตัวเลขได้ คือ  00101010

ในทางปฏิบัติไม่มีใครเขามานั่งกดสวิทช์แบบนี้ แต่จะใช้สวิทช์อิเล็กทรอนิกส์แทน เช่น พวกอุปกรณ์ทรานซิสเตอร์อะไรนั่นล่ะ ซึ่งอัตราการสวิทช์กลับไปมาจะสูงกว่านี้มากมายเป็นแสน เป็นล้านเท่า ซึ่งครูจะไม่กล่าวถึงในบทความที่เป็นเนื้อหาเริ่มต้นนี้นะครับ

สัญญาณแอนะล็อก

พิจารณาวงจรดังต่อไปนี้


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


มาพิจารณาว่าเกิดอะไรขึ้น
จะเห็นว่าตัวต้านทานที่ต่อกันแบบอนุกรม มันก็คือวงจรแบ่งแรงดันนั่นเอง ในสภาวะเริ่มต้นที่กำหนดให้ VR มีค่าความต้านทานมากที่สุด แรงเคลื่อนไฟฟ้าส่วนใหญ่ก็จะไปตกคร่อมที่ VR  ประมาณ 4.5 โวลท์ ส่วนที่เหลือ 0.5 โวลท์จะตกคร่อมที่ R ซึ่งเราสามารถอ่านได้จากโวลท์มิเตอร์  ครั้นเมื่อเราหมุน VR ให้มีค่าน้อยลง ความต่างศักย์คร่อม R ก็จะเพิ่มขึ้น (เพราะความต่างศักย์ของ VR จะลดลง) จนกระทั่งเมื่อค่าความต้านทานVR มีค่าน้อยที่สุด(ใกล้เคียง 0) ความต่างศักย์ส่วนใหญ่ก็จะไปตกคร่อมที่ R คือประมาณ 5 โวลท์  (การคำนวณค่าความต่างศักย์ ศึกษาได้จากหัวข้อ Voltage Divider ที่่ http://hyperphysics.phy-astr.gsu.edu/hbase/electric/voldiv.html ) และเมื่อหมุนค่าความต้านทานของ VR กลับจากน้อยไปหามาก ความต่างศักย์ที่คร่อม R ก็จะค่อยๆ น้อยลง จนเหลือประมาณ 0.5 โวลท์เหมือนสภาวะเริ่มต้น แล้วก็กลับไปกลับมาเช่นนี้ ตามจังหวะการหมุน VR

ลองเอาเหตุการณ์ที่เกิดขึ้นมาสร้างเป็นกราฟเวลา เหมือนในหัวข้อสัญญาณดิจิทัล



จะแผนภาพเวลา จะเห็นว่าการเปลี่ยนแปลงสภาวะจาก 0.5 โวลท์(โดยประมาณ) ที่คร่อม R ก่อนไปเป็นสภาวะที่มีความต่างศักย์ 5 โวลท์นั้น ความต่างศักย์ที่คร่อม R จะไม่กระโดดทีเดียวจากค่าน้อยๆ ไปหาค่ามากเลยทีเดียว แต่จะค่อยๆ เปลี่ยนจาก 0.5 เป็น 0.6, 0.7, 0.8, 0.9, 1.0 ... ไปเรื่อยๆ จนถึง 5 โวลท์ ในทำนองเดียวกัน การเปลี่ยนแปลงความต่างศักย์จาก 5 โวลท์มาเป็น 0.5 โวลท์ ก็จะในทำนองเดียวกัน คือ เปลี่ยนแปลงอย่างต่อเนื่อง ไม่มีการกระโดดข้ามช่วง  และนี่คือต้วอย่างหนึ่งของสัญญาณที่เราเรียกกันว่า สัญญาณแอนะล็อก

ตัวเลขที่บอกสภาวะของสัญญาณแอนะล็อกจึงเป็นปริมาณที่เกี่ยวข้องกับไฟฟ้าโดยตรงเช่น ความต่างศักย์ไฟฟ้า หรือกระแสไฟฟ้า เป็นต้น 

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


มาถึงตรงนี้ก็คาดหวังว่า ผู้ที่ยังไม่รู้จัก สัญญาณดิจิทัล สัญญาณแอนะล็อก ก็คงจะรู้จักกันบ้างแล้ว ส่วนจะมองภาพออกต่อไปจนว่ามันมีบทบาทอย่างไรต่อเทคโนโลยีในทุกวันนี้ ก็ต้องศึกษากันต่อไปครับ

ตอนนี้คงจบไว้แค่นี้ ขอบคุณที่ติดตามนะครับ



07 มิถุนายน 2559

อาร์ดุยโน : นำเข้าสัญญาณดิจิทัล

ตอนที่แล้ว เราได้ลองเล่น(และเรียนรู้ไปพร้อมๆ กัน) โดยการตั้งค่าให้มีการส่งสัญญาณออกผ่านช่องทางดิจิทัลกันไปแล้ว ในบทความนี้ ครูจะทำกลับกัน นั่นคือจะมีการตั้งค่าเพื่อให้ช่องทางดิจิทัลรับข้อมูลจากภายนอกเข้ามายังอาร์ดุยโนของเรา

สัญญาณดิจิทัล เป็นสัญญาณที่มีสองสถานะ เช่นถ้าเราใช้แรงเคลื่อนไฟฟ้า 5 โวลท์ เป็นระดับอ้างอิง สัญญาณจะมีสองระดับ คือ 0 โวลท์ (อยู่ในสถานะ LOW) กับ 5 โวลท์ (อยู่ในสถานะ HIGH) ซึ่งใครที่ทำการทดลองตามครูเมื่อคราวที่แล้ว จะเห็นได้ว่าเมื่อเราใช้คำสั่ง digitalWrite(pinNumber, state) หมายถึง การสั่งให้ส่งสัญญาณดิจิทัลออกไปยังหมายเลขช่องที่ระบุใน pinNumber เช่น pinNumber = 10 ส่วน state เซตเป็น LOW  ก็จะมีแรงเคลื่อนไฟฟ้า 0 โวลท์ ออกที่ขาหมายเลข10 (LED ดับ) แต่หากระบุ state เป็น HIGH แรงเคลื่อนไฟฟ้าที่ช่องหมายเลข 10 จะมีแรงเคลื่อนไฟฟ้ากลายเป็น 5 โวลท์ (LED สว่าง)

สิ่งที่เราจะทำในครั้งนี้ก็คือ เซตสถานะจากภายนอกให้เป็น LOW (0 โวลท์) หรือ HIGH (5 โวลท์) แล้วให้ช่องรับข้อมูลของอาร์ดุยโนรับไปปฏิบัติงานต่อไป

จุดประสงค์ของการทำการทดลองหรือเล่นในครั้งนี้ 

  1. รู้จักสัญญาณดิจิทัลและสร้างสัญญาณดิจิทัลง่ายๆ เพื่อป้อนเข้าสู่บอร์ดอาร์ดุยโน
  2. เขียนโปรแกรมสั่งให้อาร์ดุยโนนำสัญญาณดิจิทัลขาเข้า มาควบคุม LED ให้ติดหรือดับ ผ่านช่องทางดิจิทัลขาออก

อุปกรณ์ต้องใช้ 

  1. บอร์ด Arduino UNO 1 บอร์ด
  2. เบรดบอร์ด 1 แผ่น
  3. สวิทช์กดติด ปล่อยดับ (push button) 1 ตัว
  4. หลอด LED 1 หลอด
  5. ตัวต้านทาน 10k , 220 Ω อย่างละตัว
  6. สายไฟสำหรับเสียบแผ่นบอร์ด

ลุย 

ต่ออุปกรณ์ดังภาพ

ขยายหน่อยให้เห็นชัดๆ ตัวต้านทาน 10k คือตัวนอน 220 Ω คือตัววางตั้ง

 


การทำงาน

      เมื่อกดสวิทช์ กระมีกระแสไฟฟ้าจากแหล่งจ่ายกำลัง 5 โวลท์ที่เราต่อออกจากบอร์ด ไหลผ่านตัวต้านทาน 10k ซึ่งจำให้เกิดความต่างศักย์ตกคร่อมที่ตัวต้านทานนี้ เกิดเป็นสถานะ HIGH ป้อนเข้าสู่ช่อง 11 ของพอร์ทดิจิทัล และเมื่อเราปล่อย กระแสไฟฟ้าไม่สามารถไหลผ่านตัวต้านทาน 10k ได้ ก็จะเกิดเป็นสถานะ LOW ขึ้น เราจะใช้ 2 สถานะนี้ในการควบคุมการกระพริบของ LED ที่เราต่อไว้ที่ขา 0 ของพอร์ทดิจิท้ล

ตรวจสอบความเรียบร้อยของสายไฟให้ดีก่อนนะครับ เตรียมสาย USB ไว้อย่าเพิ่งเสียบเข้ากับเครื่องคอมพิวเตอร์ รอก่อน

การดำเนินการทางซอฟท์แวร์
  1. เปิด IDE
  2. คลิก File > New
    พิมพ์โค้ดของโปรแกรมเข้าไปดังแสดงในภาพ

  3. คลิก File > Save
    ตั้งชื่อไฟล์ในโฟลเดอร์ที่เราต้องการ ครูตั้งชื่อไฟล์นี้ว่า digital_IN
  4. เสียบสาย USB จากบอร์ดอาร์ดุยโน เข้ากับเครื่องคอมพิวเตอร์
  5. คลิกที่ปุ่ม  เพื่อคอมไพล์ ตรวจสอบและอัพโหลดไฟล์ที่คอมไพล์แล้วไปยังหน่วยความจำแฟลชของอาร์ดุยโน
  6. ทดลองกดปุ่มสวิทช์กดติด ปล่อยดับ โดยกดแช่ไว้นิ่งๆ (เซตสถานะของสัญญาณดิจิทัลให้เป็น HIGH) สลับกับการปล่อย (เซตสถานะของสัญญาณดิจิท้ลให้เป็น LOW) แล้วเปรียบเทียบความแตกต่าง โดยสังเกตการกระพริบของ LED ทั้งสองสถานะเปรียบเทียบกัน

ผล

หากเราพิมพ์โค้ดโปรแกรมลงไปอย่างถูกต้อง คอมไพล์และอัพโหลดโดยไม่พบปัญหาใดๆ ในช่วงแรกๆ หลอด LED จะกระพริบช้าๆ แต่ถ้าหากเรากดสวิทช์ค้างเอาไว้ หลอด LED จะกระพริบเร็วขึ้น และถ้าปล่อยมันก็จะกลับมากระพริบช้าอีกครั้งหนึ่ง 

การทำงานของโปรแกรม

โปรแกรมนี้เราพิมพ์ขึ้นมาโล้นๆ เลย ไม่มีคอมเมนต์ใดๆ ทั้งสิ้นให้เสียเวลาล่ะ เริ่มต้นขึ้นมาก็
int button;

นี่เป็นการประกาศตัวแปร ให้เป็นแบบ int (หรือจะประกาศให้เป็นก boolean ก็ได้) ตั้งชื่อตัวแปรว่า button ตั้งไว้เฉยๆ ยังไม่มีการกำหนดค่าใดๆ 
จากนั้นในส่วนของการตั้งค่า ก็มีการตั้งค่าให้ช่อง 0 เป็นขาส่งออก(OUTPUT) ช่อง 11 เป็นขารับข้อมูล (INPUT) ด้วยโค้ดต่อไปนี้

pinMode(0, OUTPUT);
pinMode(11, INPUT);

ส่วนการวนรอบ(loop() ) เริ่มต้นก็มีการอ่านข้อมูลสถานะจากช่อง 11 โดยค่าที่ได้นำมาเก็บไว้ในตัวแปรชื่อ button ดังโค้ดคำสั่งต่อไปนี้

button=digitalRead(11);

แล้วก็นำมาตรวจสอบกับเงื่อนไขว่า button นี้สถานะอย่างไร HIGH หรือ LOW โดยใช้นิพจน์

if (button==HIGH) 

ถ้าเป็นไปตามเงื่อนไขนี้ (ปุ่มกดถูกกด สถานะสัญญาณดิจิทัลขาเข้าเป็น HIGH) หลอด LED ก็จะกระพริบอย่างรวดเร็ว ตามคำสั่งในโค้ดดังนี้

  digitalWrite(0, HIGH);
  delay(100);
  digitalWrite(0, LOW);
  delay(100);

แต่ถ้าไม่เป็นไปตามเงื่อนไข(ปุ่มกดไม่ถูกกด สถานะสัญญาณดิจิทัลขาเข้าเป็น LOW) หลอด LED จะกระพริบช้าๆ  ตามคำสั่งในโค้ด ดังนี้

  digitalWrite(0, HIGH);
  delay(1000);
  digitalWrite(0, LOW);
  delay(2000);

สรุป

ในตัวอย่างนี้จะเห็นแนวทางการประยุกต์ใช้ช่องทางดิจิทัลในการรับข้อมูลจากภายนอกเข้ามา ซึ่งเราต้องสร้างตัวแปรไว้ตัวหนึ่งสำหรับการรับข้อมูลนี้ แล้วนำข้อมูลนี้ไปใช้ประโยชน์ต่อไป ในโปรแกรมนี้ ครูได้เริ่มนำเงื่อนไข เพื่อให้โปรแกรมตัดสินใจมาใช้ โดยคำสั่งที่ใช้ คือ 

if (เงื่อนไขหรือตัวแปรที่ต้องการตรวจสอบ) { 
ข้อความคำสั่ง เมื่อเงื่อนไขเป็นจริง ;
}
else {
ข้อความคำสั่ง เมื่อเงื่อนไขเป็นเท็จ ;
}

เริ่มสนุกขึ้นแล้วนะครับ

แล้วพบกันใหม่ ตอนต่อไปครับ