วิเคราะห์สัญญาณ: มาอ่านค่า Duty Cycle ของ PWM กันเถอะน้อง
ปกติเราก็สั่ง output สัญญาณ PWM ไปหรี่ไฟ LED หรือคุม Servo Motor กันจนเบื่อแล้วใช่ปะ? แต่ถ้าต้องให้ Arduino มานั่ง read สัญญาณ PWM จากอุปกรณ์อื่นดูล่ะ เช่นพวก RC Receiver หรือ Sensor ในโรงงาน? โปรเจกต์ Read Duty Cycle นี่แหละจะเปลี่ยน Board เราให้กลายเป็น Oscilloscope แบบบ้านๆ ความถี่ต่ำๆ ได้เลย จัดไปวัยรุ่น หล่อเท่แน่นอน!

ฟังก์ชัน pulseIn() ตัวตึง
เอาจริงถ้าจะเอาแบบแม่นยำที่สุดต้องใช้พวก Interrupts (ISRs) แต่มันยากไปสำหรับมือใหม่ เอาแบบง่ายสุดแต่ใช้งานได้จริงไปก่อนด้วยคำสั่ง pulseIn() เลยน้อง:
- ช่วง High Pulse: Arduino จะรอให้สัญญาณที่เข้ามาใน Pins เปลี่ยนเป็น HIGH แล้วเริ่มจับเวลาหน่วยเป็น Microsecond ทันที พอมันตกลงมาเป็น LOW ปุ๊บ มันก็จะหยุดจับเวลา เราก็ได้ค่า
time_highมานอนกอด - ช่วง Low Pulse: ทำเหมือนกันเด๊ะเพื่อวัดค่า
time_lowออกมา - สูตรคำนวณ: พอได้เวลามาครบแล้ว ก็เอามาเข้าสูตรหาเปอร์เซ็นต์ Duty Cycle ตามนี้เลย:
Duty Cycle = (time_high / (time_high + time_low)) * 100เลขคณิตมัธยมชัดๆ อย่าคิดเลขผิดนะเว้ย!
Visuino: สายลากวาง ไม่ต้องนั่งปวดหัวเขียน Code
ใครที่งมกับ Syntax ของ C++ แล้วรู้สึกว่าไม่ใช่ทาง หรือกลัวเซมิโคลอน (;) หายแล้ว Error กระจาย พี่แนะนำให้รู้จักกับ Visuino มันคือการเขียนโปรแกรมแบบลากวาง (Visual Programming) ที่โครตง่าย:
- ลากบล็อก 'PulseIn' มาวางบนจอ
- ลากเส้นเชื่อมสายไฟจากบล็อกนั้นไปหาบล็อก 'Math Divider'
- แล้วก็ลากผลลัพธ์สุดท้ายไปโชว์ที่บล็อก 'Serial Terminal' ที่เหลือเดี๋ยว Visuino มันจะปั่น Code C++ ยากๆ อยู่เบื้องหลังให้เอง แล้วกด Upload ลง Board ได้เลย สบายจัด!
ของต้องเตรียม (Hardware)
- Arduino Uno/Nano: เอามาทำเป็นตัววิเคราะห์ (The analyzer)
- A 5V Signal Generator: ตัวสร้างสัญญาณ 5V จะใช้ชิป 555-Timer, รีซีฟเวอร์รถบังคับ RC หรือจะเอา Arduino อีกตัวมาเขียน
analogWrite()ส่งสัญญาณมาให้ทดสอบก็ยังได้ - Visuino Software (อันนี้เป็นตัวเลือกเสริม แต่พี่แนะนำสำหรับสายขี้เกียจเขียน Code แต่อยากได้งานไว)