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

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

สรุป

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

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