19 มิถุนายน 2559

อิเล็กทรอนิกส์ : ทรานซิสเตอร์

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

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

ทรานซิสเตอร์มีหลากหลายรูปร่าง และหลากหลายขนาด ตั้งแต่ตัวเล็กๆ ที่สร้างบนชิปไมโครโพรเซสเซอร์ที่มองไม่เห็นชัดเจนเป็นตัวๆ เพราะมีขนาดเล็กมาก จนถึงทรานซิสเตอร์ขนาดใหญ่ๆ ประมาณปลายหัวมือมือของเราประมาณนั้น (ชิปไมโครโพรเซสเซอร์ของ Intel® รุ่นใหม่ๆ มีจำนวนทรานซิสเตอร์ได้ถึงหลายร้อยล้านตัว ดูรายละเอียดจำนวนทรานซิสเตอร์ บนที่ใช้ในไมโครโพรเซสเซอร์ของ Intel®  ได้ที่ http://www.intel.com/pressroom/kits/quickreffam.htm )

ตัวอย่างทรานซิสเตอร์รูปร่างและขนาดต่างๆ 

ไม่ว่าจะเป็นทรานซิสเตอร์แบบไหน ตัวใหญ่หรือตัวเล็ก พวกมันล้วนแล้วแต่มีหลักการทำงานที่เหมือนกันทั้งสิ้น ทรานซิสเตอร์แต่ละตัวจะมีเบอร์หรือชื่อเรียกของมันซึ่งจะพิมพ์ติดไว้กับตัวมันเสมอ (ยกเว้นทรานซิสเตอร์บนชิปวงจรรวม) ทรานซิสเตอร์มีขา 3 ขา เรียกว่า คอลเล็กเตอร์ (Collector) เบส (Base) และอีมิตเตอร์ (Emitter) หรือเรียกย่อๆ ว่า C B E การวางตำแหน่งขาของมัน จะเป็นอย่างไรเราต้องเปิดดูจากดาต้าชีต(Datasheet) ของมัน เพราะถึงแม้จะทรานซิสเตอร์จะมีรูปร่างเหมือนกันแต่การวางตำแหน่งขาอาจต่างกันได้  ดังนั้นสิ่งสำคัญก็คือดูเบอร์ของมัน เมื่อได้เบอร์แล้วก็เอาไปเปิดดูดาต้าชีต  ซึ่งในปัจจุบันนี้เราไม่จำเป็นต้องพกเอกสารที่เรียกว่าดาต้าชีตเลย เพราะเพียงป้อนเบอร์ทรานซิสเตอร์ลงไปในช่องค้นหาของ Google ผลการค้นหาก็จะพบดาต้าชีต ซึ่งเป็นเอกสารอิเล็กทรอนิกส์ให้เราเปิดดูได้ทันที

ตัวอย่างการค้นหา datasheet ของทรานซิสเตอร์เบอร์ bc547
ลักษณะของดาต้าชีตที่มีการบอกการวางตำแหน่งขาของทรานซิสเตอร์ไว้

สัญลักษณ์ในวงจร

ทรานซิสเตอร์มีสองชนิด คือ NPN และ PNP ชนิดที่ใช้กันโดยส่วนใหญ่ก็คือ NPN รายละเอียด 2 อย่างนี้ ถ้าต้องการเจาะลึก ไปอ่านเอาเองที่ https://en.wikipedia.org/wiki/Bipolar_junction_transistor ครูจะเน้นเฉพาะในส่วนการใช้งานในวงจรจริง ซึ่งเราต้องดูสัญลักษณ์ของทรานซิสเตอร์ให้ออก

และนี่คือสัญลักษณ์ของทรานซิสเตอร์ทั้งสองชนิด


วงจรพื้นฐาน

ด้วยเหตุที่ทรานซิสเตอร์ชนิด NPN ใช้กันอย่างแพร่หลายกว่าชนิด PNP  ดังนั้นครูก็จะนำเอาทรานซิสเตอร์ชนิด NPN นี่แหละมาเป็นตัวอย่าง

วงจรทรานซิสเตอร์( NPN ) อย่างง่าย 

วงจรทรานซิสเตอร์แบบง่ายๆ ที่แสดงตามรูปด้านบนนี้ เป็นวงจรสวิทช์ที่ใช้นิ้วมือ เป็นตัวควบคุมการติดของหลอด LED

ทีนี้เราลองหาอุปกรณ์มาทำการทดลองกันนะครับ จากรูปวงจรก็จะมี

  1. แบตเตอรี่ขนาด 9 โวลท์ 1 ก้อน
  2. ตัวต้านทาน 560 โอห์ม 1 ตัว 
  3. LED 1 หลอด
  4. เบรดบอร์ด 1 แผ่น
  5. ทรานซิสเตอร์ NPN เบอร์ 2N2222  1 ตัว  



การวางตำแหน่งขาของ 2N2222

ทดลองบนเบรดบอร์ด

ต่ออุปกรณ์ตามรูปด้านล่างนี้ เมื่อต่อเสร็จแล้วลองใช้นิ้วแตะที่คู่สายไฟ จะเห็นหลอด LED สว่าง




การทำงานของวงจร

เมื่อเราใช้นิ้วไปแตะบริเวณปลายของลวดทองแดง นิ้วมือของเราจะทำหน้าที่คล้ายตัวต้านทานตัวหนึ่ง และจะมีกระแสไฟฟ้าขนาดเล็กๆ จำนวนหนึ่งไหลผ่านเข้าไปยังขาเบสของทรานซิสเตอร์ ทำให้เกิดศักย์ไฟฟ้าคร่อมระหว่างขา Base-Emitter  ผลเช่นนี้จะเป็นการกระตุ้นให้ทรานซิสเตอร์ระหว่างขา Collector -Emitter ทำหน้าที่คล้ายสวิทช์ ทำให้กระแสไฟฟ้าไหลผ่านระหว่างขา Collector-Emitter ได้ ทำให้หลอด LED ซึ่งต่ออนุกรมอยู่กับ ขา C-E นี้มีกระแสไฟฟ้าไหลผ่านด้วยและแสดงผลให้เราเห็นได้ด้วยการเปล่งแสงสว่างออกมา

การทดลองของเราจะสนุกขึ้นถ้าหากว่าเราสามารถทำให้นิ้วมือชื้นมากน้อยแตกต่างกันได้  เพราะเป็นการเปลี่ยนแปลงค่าความต้านทานจากแรงดันไฟฟ้าที่ต่อเข้าขาเบส หรือพูดอีกอย่างหนึ่งว่าทำให้กระแสไฟฟ้าที่ป้อนเข้าขาเบสเปลี่ยนแปลง  ผลจากการเปลี่ยนแปลงนี้ก็จะมีผลต่อกระแสไฟฟ้าที่ผ่าน C-E ด้วย โดยสังเกตได้จากหลอด LED ที่สว่างแตกต่างกัน

อุปมาเหมือนเช่นดั่งท่อน้ำที่มีวาล์วควบคุมการไหล

จะเห็นว่าการไหลของกระแสไฟฟ้าระหว่าง Collector-Emitter สามารถเปรียบได้กับการไหลของน้ำผ่านวาล์วน้ำที่ควบคุมได้ เปรียบเสมือนว่าน้ำจะไหลจากด้าน Collector ไปยัง Emitter โดยการควบคุมวาล์ว จากขา Base

กรณีที่ไม่มีกระแสไฟฟ้าไหลเข้าที่ขาเบส กระแสไฟฟ้าที่ไหลผ่าน C-E มีค่าเป็นศูนย์ จะเปรียบเสมือนกับวาล์วน้ำปิด น้ำไม่สามารถไหลได้(หรือไหลได้น้อยมาก)

กรณีที่กระแสไฟฟ้าที่ขาเบส มีค่ามากจนถึงค่าหนึ่ง กระแสไฟฟ้าที่ไหลผ่าน C-E ได้เต็มที่ จะเปรียบเสมือนกับวาล์วน้ำเปิดเต็มที่ น้ำไหลได้เต็มท่อ


กรณีที่กระแสไฟฟ้าที่ขาเบสน้อยๆ กระแสไฟฟ้าที่ไหลผ่าน C-E จะไหลได้ไม่เต็มที่ จะเปรียบเสมือนกับวาล์วน้ำเปิดไว้ส่วนหนึ่ง น้ำก็สามารถไหลได้แต่ไม่เต็มท่อ

สรุป

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

ขอจบตอนนี้เพียงเท่านี้ก่อน

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

11 มิถุนายน 2559

อาร์ดุยโน : serial monitor

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

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


จุดประสงค์ของการเล่น


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

ลุย

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



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


เปิด IDE แล้วก็คลิก File > Examples > Basics > ReadAnalogVoltage




ครั้งนี้ ย้อนกลับมาเล่นกับโค้ดมาตรฐานที่อาร์ดุยโนเผยแพร่ดู



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

เราจะเห็นตัวเลขแสดงแรงดันไฟฟ้าปรากฏขึ้น แต่อาจวิ่งเร็วเกินไป จนดูไม่ทัน ลองเพิ่มบรรทัดคำสั่งนี้ ลงไปด้านล่างสุดของโปรแกรม

delay(1000);

แล้วอัพโหลดใหม่อีกครั้งหนึ่ง คราวนี้ก็จะเห็นตัวเลขวิ่งช้าลง หาไขควงปลายแฉกก็ได้ ปลายแบนก็ได้ ลองหมุน VR ดู ก็จะพบตัวเลขที่แปรเปลี่ยนไประหว่าง 0-5 หรือถ้าต้องการให้มีคำว่า volts ต่อท้าย ก็ให้แก้ไขโค้ดอีกเล็กน้อย ใน 2 บรรทัดสุดท้าย ดังนี้

Serial.print(voltage);
Serial.println("  volts");
delay(1000);

นี่คือผลลัพธ์ (ค่อยๆ หมุน VR ไปด้วย)




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

Serial.begin(9600);

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

serial.Println(voltage);

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

ถ้ายังไม่เข้าใจอีก ก็ทิ้งคำถามไว้นะครับ

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



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 {
ข้อความคำสั่ง เมื่อเงื่อนไขเป็นเท็จ ;
}

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

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



06 มิถุนายน 2559

อาร์ดุยโน : ไฟแอล อี ดี กระพริบ ตอนสอง

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

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


LED ตัวที่สองนี้ อาโนดถูกต่อเข้ากับช่องหมายเลข 5 (digital) ส่วนคาโทดต่อเข้ากับตัวต้านทาน 220 โอห์ม ส่วนของด้านหนึ่งของตัวต้านทานต่อเข้ากับกราวด์ซึ่งเราใช้สายโยงมายังต้วต้านทานตัวแรกได้เลยครับ แล้วมันจะมาลงกราวด์ที่บอร์ดด้วยกัน

ตรวจดูความเรียบร้อยอีกครั้ง ก่อนเสียบสาย USB เข้ากับคอมพิวเตอร์ แล้วดำเนินการ ดังนี้

  1. เปิด IDE
  2. เปิดไฟล์โปรแกรมที่เราได้แก้ไขไว้ เมื่อตอนที่แล้วขึ้นมา
  3. พิมพ์แก้ไขโปรแกรม ดังต่อไปนี้
  4. คลิกปุ่ม  เพื่อคอมไฟล์ ตรวจสอบ และอัพโหลด พร้อมกันเลยทีเดียว

คราวนี้ก็จะสังเกตเห็นหลอด LED ทั้งสองหลอดผลัดกันติด ผลัดกันดับช่วงเวลาละ 1 วินาที

อธิบายการทำงาน

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

ทีนี้มาดูส่วนส่วนแรก ซึ่งเป็นการประกาศตัวแปร ที่มีประเภทของตัวแปรเป็นจำนวนเต็ม โดยใช้คีย์เวิร์ดว่า int แล้วตามด้วยชื่อตัวแปร led1, led2 สำหรับเก็บหมายเลขพอร์ทดิจิทัล 10 และ 5 ตามลำดับ ส่วน delayTime1, delayTime2 สำหรับเก็บตัวเลขค่าหน่วงเวลาของการเกิดแสงสว่างของหลอดที่ 1 และ 2 ตามลำดับ

ต่อจากนั้นก็เป็นส่วน void setup()  ซึ่งเป็นการตั้งค่าให้พอร์ทดิจิทัล ทำหน้าที่เป็นเอาท์พุทส่งค่าไปยังภายนอก 
   pinMode(led1, OUTPUT) ;  //เป็นการเซ็ตพอร์ท led1 เป็นเอาท์พุด
   pinMode(led2, OUTPUT);  //เป็นการเซ็ตพอร์ท led2 เป็นเอาท์พุต

ส่วนที่สาม void loop() เป็นส่วนของการวนรอบการทำงานไม่สิ้นสุด ซึ่งก็จะเหมือนกับตัวอย่างในตอนที่แล้ว เพียงแต่ในตอนนี้ จะมีการควบคุมหลอด 2 หลอด โดยให้หลอดที่หนึ่ง led1 สว่างก่อน จากนั้นหน่วงเวลาตามค่าที่ตั้งไว้ที่ delayTime1 แล้วให้หลอดที่สอง led2 สว่าง จากนั้นก็หน่วงเวลาไว้อีกตามค่า delayTime2 จากนั้นก็ปิด แล้ววนรอบกลับไปทำซ้ำใหม่ ..... เรื่อยๆ ไม่รู้จบ

หากเราต้องการเปลี่ยนจังหวะการหน่วงเวลา ก็ทำได้โดยการแก้ไขค่าของตัวแปร delayTime1 กับ delayTime2 เราก็จะได้รูปแบบการกระพริบที่แปลกๆ ออกไปอย่างง่ายดาย 

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

แล้วพบกันใหม่ครับ


อาร์ดุยโน : ไฟแอล อี ดี กระพริบ ตอนแรก

ครูจะพาเริ่มเรียนรู้อิเล็กทรอนิกส์กับอาร์ดุยโน จะเริ่มไปพร้อมๆ กับการเขียนโปรแกรม วันนี้เราจะมาเริ่มรู้จักกับ Digital Output โดยใช้บทเรียนง่ายๆ ที่เรียกว่า ไฟแอล อี ดี กระพริบ

สำหรับใครที่ยังไม่รู้จัก LED ลองเข้าไป "รู้จักและเล่นกับ หลอด LED"  ก่อนนะครับ

จุดประสงค์ของครูในการเขียนบทความนี้ ก็เพื่อให้ผู้เริ่มเรียนรู้อาร์ดุยโน ได้ในสิ่งเหล่านี้
  1. รู้จักการใช้ Arduino IDE เพื่อเขียนโปรแกรมและอัพโหลดโปรแกรมลงอาร์ดุยโน
  2. ฝึกการใช้ Digital Output แบบง่ายๆ โดยใช้ LED ในการแสดงผล
อุปกรณ์ที่จำเป็นต้องมี
  1. บอร์ดอาร์ดุยโน (จะของแท้ ของเทียม ของเทียบก็ได้ สำหรับครูใช้ของเทียบ)
  2. หลอด LED 2 หลอด สีอะไรก็ได้
  3. ตัวต้านทาน 220 โอห์ม 2 ตัว
  4. แผ่นเบรดบอร์ด พร้อมสายไฟสำหรับเสียบเบรดบอร์ด
  5. คอมพิวเตอร์ที่ติดตั้ง Arduino Software (IDE) แล้ว (ใครยังไม่มี ไปดาวน์โหลดฟรี  ได้ที่ https://www.arduino.cc/en/Main/Software )

    *** IDE คำนี้ครูจะใช้บ่อยมาก ความหมายก็คือ ชุดโปรแกรมมาตรฐานของอาร์ดุยโนที่เผยแพร่ ผ่านเว็บไซต์ arduino.cc 

เริ่มต้นการทดลอง

ทดลองใช้หลอด LED  กับตัวต้านทาน 220 โอห์มอย่างละอันก่อน ต่อสายไฟเข้ากับช่องเสียบ ดังแสดงในภาพ


ภาพที่แสดงนี้ครูแคปเจอร์มาจากหน้าจอของโปรแกรม Fritzing ครับ ในภาพครูต่อสายไฟเส้นหนึ่งจาก ช่อง 10 ของ Digital เข้าไปยังอาโนดของหลอด LED ซึ่งเสียบอยู่บนบอร์ดทดลอง จากนั้นนำความต้านทาน 220 โอห์ม (ถ้าไม่มีก็เอาใกล้เคียงก็พอได้ครับ) แล้วอีกด้านหนึ่งของตัวต้านทาน ต่อเข้ากราวด์ (GND) บนบอร์ดอาร์ดุยโน



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

ถึงเวลา IDE

  1. เปิด IDE ของอาร์ดุยโนขึ้นมา
  2. คลิก File > Examples > 01. Basics > Blink

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



    เลื่อนเคอร์เซอร์ไปเปลี่ยนเลข 13 ให้เป็นเลข 10 ให้หมด ซึ่งมีอยู่ 3 ที่(ทำตามไปก่อน ครูจะอธิบายเหตุผลทีหลัง)
  4. คลิก File > Save as ... แล้วเลือกโฟลเดอร์ที่จะเก็บไฟล์ต้นฉบับโปรแกรมของเราไว้ (อาจสร้างใหม่เลยก็ได้) แล้วตั้งชื่อไฟล์ที่เราจำได้ง่าย ของครูตั้งว่า test_blink แล้วก็คลิก Save
  5. คลิกปุ่มเครื่องหมายถูก เพื่อตรวจสอบและคอมไพล์โปรแกรม ถ้าทำตามครู มันควรจะขึ้นข้อความที่แถบดำๆ ด้านล่าง ดังแสดงให้ภาพ



    หากไม่ขึ้นดังภาพ ปิดโปรแกรมแล้วย้อนกลับไปทำใหม่
  6. เมื่อเสร็จขั้นตอน 5 แล้ว ทีนี้ก็คลิกที่ปุ่มลูกศรขวา  เพื่ออัพโหลดโค้ดที่คอมไฟล์แล้ว (Object Code) ไปยังส่วนความจำแฟลชของอาร์ดุยโน
  7. สังเกตการหลอด LED ซึ่งตอนนี้มันจะติด 1 วินาที ดับ 1 วินาที สลับกันไปอย่างไม่มีสิ้นสุด หรือจนกว่าจะถอดสาย USB 

ทำความเข้าใจกับโครงสร้างของภาษาซีใน IDE

Comments

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

  • อยู่ภายในเครื่องหมาย /* ........... คอมเมนต์ ........... */   และ
  • อยู่หลังจากเครื่องหมาย // .......... คอมเมนต์

















ตัวอย่างการคอมเมนต์ในการเขียนโปรแกรม ซึ่งครูนำมาจากโค้ดตัวอย่างใน IDE

Function

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

เมื่ออ้างถึงฟังก์ชั่น จะต้องมีเครื่องหมายวงเล็บเปิด-ปิด ด้วยเสมอ  จากตัวอย่างที่ครูนำมาแสดง จะมี 2 ฟังก์ชั่นคือ setup() และ loop()  ซึ่งสองฟังก์ชั่นนี้เป็นฟังก์ชั่นหลักที่จะต้องมีอยู่ด้วยเสมอในการเขียนโปรแกรมบน IDE

Statements

Statements หรือ ข้อความคำสั่ง (ที่ครูจะใช้ในการเรียกเป็นภาษาไทย) ก็คือ ข้อความที่เราพิมพ์ เพื่อสั่งให้อาร์ดุยโนทำงาน ซึ่งแต่ละข้อความคำสั่งจะต้องจบด้วยเครื่องหมายเซมิโคลอน (;) จากตัวอย่างที่ครูนำมาให้เล่น จะมีดังนี้
   pinMode(10, OUTPUT);   // หมายถึงการตั้งค่าให้ช่องที่ 10 ของ Digital IO ใช้ส่งข้อมูลออก
   digitalWrite(10, HIGH);   // หมายถึง การตั้งค่าสถานะช่องที่ 10 ให้อยู่ในสถานะเป็น 1 ซึ่งจะมีความต่างศักย์ไฟฟ้า เท่ากับ +5 โวลท์
   delay(1000); // หมายถึง ให้มีการหน่วงเวลาไว้ 1000 มิลลิวินาที
   digitalWrite(10, LOW);   // หมายถึง การตั้งค่าสถานะช่องที่ 10 ให้อยู่ในสถานะเป็น 0 ซึ่งจะมีความต่างศักย์ไฟฟ้า เท่ากับ 0 โวลท์

ข้อความคำสั่งอยู่จะอยู่ภายในฟังก์ชั่นหลักของ IDE โดยมีเครื่องหมายวงเล็บปีกกา {......} ล้อมเอาไว้


Variables 

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

  • จำนวนเต็ม (integer) เป็นตัวแปรที่สามารถเก็บจำนวนเต็มตั้งแต่ -32,768 ถึง 32,767 ในการสร้างตัวแปรชนิดจำนวนเต็มนี้จะใช้หน่วยความจำ 2 ไบต์ (16 บิต) 
  • อักขระ (charactor)  เป็นตัวแปรที่ใช้เก็บตัวอักขระหรือตัวอักษรต่างๆ ได้ 1 ตัว ตัวแปรนี้จะใช้หน่วยความจำ 1 ไบต์ (8 บิต) รหัสที่ใช้เก็บเป็นรหัสแอสกี้ ซึ่งเราสามารถดูรหัสได้ที่ https://en.wikipedia.org/wiki/ASCII
  • บูลีน (Boolean) ใช้เก็บ "จริง" กับ "เท็จ" ใช้หน่วยความจำ 1 ไบต์ (8 บิต)
ครูแนะนำตัวแปรง่ายๆ เบื้องต้นเพียงแค่นี้ก่อนนะครับ เพราะเรายังไม่ได้ใช้งาน แม้ในต้วอย่างที่ครูยกมาในครั้งนี้ แต่เราจะลองใช้ตัวแปรในตอนต่อไป ซึ่งครูจะพาให้รู้จักตัวแปร และเริ่มใช้งานกัน

สรุปการเรียนรู้ในครั้งนี้

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

ครั้งต่อไป เราจะเริ่มเล่นกับตัวแปร และใช้ LED เป็น 2 ตัว อย่าลืมติดตามนะครับ



04 มิถุนายน 2559

อิเล็กทรอนิกส์ : รู้จักและเล่นกับ "หลอด LED"

LED ภาษาไทย เราเรียกทับศัพท์กันเลยว่า แอลอีดี (ออกเสียงเป็น แอว-อี-ดี) มาจากคำเต็มของภาษาอังกฤษว่า Light Emitting Diode แปลว่า ไดโอดเปล่งแสง

ปัจจุบันนี้มองไปทางไหน เราก็จะเห็น LED ทั้งสิ้น ไฟเขียว ไฟแดง บริเวณสี่แยก ไฟท้ายรถยนต์ ไฟหรี่รถยนต์ จอแสดงภาพยนตร์โฆษณาตามสี่แยก ไฟแสดงสถานะการเปิดปิดของโทรทัศน์ วิทยุ เครื่องเสียง ดีวีดี คอมพิวเตอร์ ฯลฯ


แอลอีดี เป็นสิ่งประดิษฐ์ที่ทำมาจากสารกึ่งตัวนำ โดยส่วนใหญ่จะใช้ธาตุแกลเลียม(Ga : Gallium) สารหนูหรืออาเซนิก (As : Arsenic) หรือไม่ก็ฟอสฟอรัส (P : Phosphurus)  ผสมกัน

ตามประวัติศาสตร์บุคคลที่นับได้ว่าเป็นคนแรกที่สังเกตปรากฏการณ์ในลักษณะของการเปล่งแสงแบบที่เรียกว่า electroluminescene  จากไดโอด คือ Captain Henry Joseph Round   ส่วน Vladimirovich Losev ก็สังเกตเห็นการเปล่งแสงออกจากรอยต่อของคาร์โบรันดัม (Carborundum) และบุคคลที่ได้พัฒนาแอลอีดีในย่านแสงที่เรามองเห็นได้ขึ้นมาเป็นคนแรกคือ Nick Holonyak, Jr. หลังจากนั้นเป็นต้นมาก็ได้มีการคิดค้นและประดิษฐ์ LED จากสีแดง สีเหลือง สีเขียว และอื่นๆ ออกมาอย่างมากมายอย่างที่เห็นก้นในปัจจุบัน

การทำงาน

ไดโอดเปล่งแสงหรือ แอลอีดีนี้เป็นสารกึ่งนำที่เกิดจากการนำสารกึ่งตัวชนิด P ก้บชนิด N มาเชื่อมต่อกัน  และเมื่อได้รับการต่อขั้วไฟฟ้าแบบฟอร์เวิร์ดไบอัส(ขั้วบวกต่อเข้าอาโนด ขั้วลบต่อเข้าคาโทด) เป็นผลทำให้เกิดกระแสไฟฟ้าไหลผ่านรอยต่อดังกล่าว และมีการเปล่งแสงออกมาได้ (แทนที่จะเป็นความร้อนเหมือนในไดโอดธรรมดา)

ลองดูแอนิเมชั่น ที่ครูลิงค์มาจากยูทูป ซึ่งจะทำให้เราเข้าใจหลักการทำงานได้ง่ายขึ้น


สัญลักษณ์ที่ใช้ในวงจร


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

การนำไปใช้งานในวงจร

หลอด LED มีหลากหลายสี หลากหลายรูปร่าง แต่ที่ครูจะนำมาแนะนำ และสาธิตการทำงานให้เห็นในบทความตอนนี้ก็คือ LED สีแดง รุ่นธรรมดา 5 mm ดังที่เห็นในภาพ 
ครูจำไม่ได้ว่ามันมีราคากี่บาท แต่ไปหาซื้อตามร้านขายอุปกรณ์อิเล็กทรอนิกส์ทั่วไปได้ ขนาดประมาณ 5 มิลลิเมตร ความต่างศักย์คร่อมตัวมันรับได้ในระหว่าง 2 โวลท์ (บวกลบได้นิดหน่อย) กระแสไฟฟ้าไม่เกิน 20 มิลลิแอมป์ (น้อยกว่าได้แต่ไม่ควรเกิน) ความเข้มการส่องสว่าง 150-200 มิลลิแคนเดลลา (ดูจาก datasheet ของอุปกรณ์ที่เราซื้อมา)

นี่คือวงจรการใช้งาน LED

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

ทดลอง เล่น

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

สิ่งที่ต้องมี
  1. แผ่นเบรดบอร์ดหรือบอร์ดเสียบอุปกรณ์สำหรับการทดลอง หาตัวเล็กๆ ก็ได้
  2. ลวดสายไฟ

  3. หลอด LED
  4. ตัวต้านทาน 50-100 โอห์ม
  5. รังถ่าน AA 2 ก้อน
เอามาต่อกันดังภาพ
อย่าลืมนะครับ ขายาวคือ อาโนด ต่อขั้วบวก ขาสั้น คาโทด ขั้วลบ

การคำนวณหาค่าความต้านทาน

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

เมื่อเรามีแหล่งจ่ายกำลัง  ซึ่งมีแรงเคลื่อนไฟฟ้าต่างๆ และเราต้องการใช้แหล่งจ่ายกำลังนี้ต่อเข้ากับ LED เราต้องคำนวณค่าความต้านทานที่เหมาะสมด้วย ซึ่งมีขั้นตอนดังนี้ครับ

กำหนดให้
E คือ แรงเคลื่อนไฟฟ้าที่เราจ่ายให้วงจรทั้งหมด
VLED  คือ ความต่างศักย์คร่อม LED (ดูได้จากสเปคของ LED เอง)
ILED  คือ กระแสไฟฟ้าที่เราต้องการป้อนให้แก่ LED (ดูได้จากสเปคของ LED เอง)
R คือ ค่าความต้านทานของตัวทานที่เราจะนำมาต่ออนุกรมกับวงจร
สูตรคำนวณ คือ   R = (E-VLED) / ILED

เช่น จากการทดลองเล่นในตอนต้น ครูใช้แหล่งจ่ายกำลังที่มีแรงเคลื่อนไฟฟ้า E=3 โวลท์ ใช้หลอด LED ที่มีความต่างศักย์คร่อมตัวมัน VLED= 2 โวลท์ กระแสไฟฟ้าที่ต้องการให้ผ่านตัวหลอด ILED=18 มิลลิแอมป์ ดังนั้น ค่าความต้านทานที่ต้องใช้ คือ R = (3-2)/18x10-3 =55.6 ประมาณ 56 โอห์ม แต่ความต้านทานค่ามาตรฐานคือ 58 โอห์ม จึงใช้ค่าตามตัวอย่าง แต่อย่างไรก็ตาม เราอาจหาค่าที่ใกล้เคียงมาใช้ก็พอได้เหมือนกันครับ

ดูอีกสักตัวอย่าง เช่น การใช้แหล่งจ่ายกำลัง 12 โวลต์ จ่ายให้ LED 2 ตัวที่ต่อการแบบอนุกรม
E=12 volts,  VLED2ตัว= 4 volts (เพราะเอา 2 volts มาต่ออนุกรมกัน), ILED=18 mA
ดังนั้น R = (12-4)/18x10-3 =444.4 โอห์ม ค่าความต้านทานมาตรฐานคือ 470 โอห์ม ก็นำตัวนี้มาใช้

มีคำถามอะไร ถามได้ในคอมเมนต์นะครับ

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