ทำความรู้จักสัญญาณ Analog กันก่อนนะครับ
สัญญาณแอนะล็อก (Analog Signal) เป็นสัญญาณแบบต่อเนื่อง มีลักษณะเป็นคลื่นไซน์ (sine wave) โดยที่แต่ละคลื่นจะมีความถี่และความเข้มของสัญญาณที่ต่างกัน
Credit: https://th.wikipedia.org
คำถามก็คือ แล้วเราจะอ่านสัญญาณ Analog นี้ได้อย่างไรล่ะ แล้วนำไปใช้งานอะไรได้บ้าง ????
คำตอบก็คือ ต้องใช้ตัวแปลงสัญญาณ Analog to Digital นะซิ
Arduino ได้เตรียมฟังก์ชั่นไว้ให้ สามฟังก์ชั่น คือ
ฟังก์ชั่น analogReference()
ใช้สำหรับกำหนดค่าแรงดันอ้างอิง สามารถกำหนดได้ดังนี้
1. DEFAULT ค่าปกติคือ 5V
2. INTERNAL - มีค่าเท่ากับ 1.1V สำหรับ ATmega168, ATmega328
- มีค่าเท่ากับ 2.56V สำหรับ ATmega8
3. EXTERNAL กำหนดได้เองโดยป้องแรงดันเข้าที่ PIN AREF
เช่น
- analogReference(DEFAULT);
- analogReference(INTERNAL);
- analogReference(EXTERNAL);
คำเตือน
ห้ามต่อ AREF PIN กับ 0V หรือมากกว่า 5V เพราะอาจทำให้บอร์ดเสียหายได้ แต่ถ้าต้องการใช้ external voltage จากภายนอกให้กับ AREF ให้เรียกใช้งานฟังก์ชั่น analogReference(EXTERNAL) ก่อนทุกครั้ง และต้องต่อตัวต้านทานขนาด 5k อนุกรมกับ AREF PIN ด้วย แต่แรงดันจะตกลงไปนิดหน่อย ดังตัวอย่างนี้
- สมมติว่าป้องแรงดันภายนอกให้กับ AREF PIN เท่ากับ 2.5V จะได้ 2.5 * 32 / (32 + 5) = ~2.2V
32 คือความต้านทานภายในของ AREF PIN ที่มีค่าเท่ากับ 32k
ฟังก์ชั่น analogRead()
ใช้สำหรับอ่านค่าแรงดันจาก PIN ที่ถูกอ้างอิง ซึ่งจะให้ค่าระหว่าง 0-1023 ฉนั้นหากเรากำหนดแรงดันอ้างอิงไว้ที่ 5V จะได้ 5/1024 = 0.0049V คือความละเอียดในการอ่านค่าแรงดันอินพุต แต่หากกำหนดแรงดันอ้างอิงไว้ที่ 2.56V จะได้ 2.56/1024 = 0.0025V ซึ่งให้ผลลัพธ์ที่ละเอียดกว่า
เช่น
- var = analogRead(A0);
- out = analogRead(A3);
ฟังก์ชั่น analogWrite()
คร่าวหน้ามา ต่อ analogWrite พร้อมตัวอย่างทั้งหมดนะ ครับ