วันอาทิตย์ที่ 23 พฤศจิกายน พ.ศ. 2557

Ultrasonic Distance Sensor, Timer1, External Interrupt

การทดลองใช้งานโมดูล Ultrasonic Distance Sensor อย่างเช่น HC-SR04 

  • โมดูลนี้ใช้สำหรับวัดระยะห่างจากวัตถุหรือสิ่งกีดขวาง โดยส่งสัญญาณเสียงความถี่สูง
  • ใช้แรงดันไฟเลี้ยง +5V 
  • ในการสื่อสารกับไมโครคอนโทรลเลอร์ จะมีขา TRIG และ ECHO รับสัญญาณ Pulse ที่ขา TRIG และส่งสัญญาณเอาต์พุตออกที่ขา ECHO 
  • ระยะห่างจากวัตถุให้คำนวณจากความกว้างช่วง HIGH ของสัญญาณ ECHO
  • สำหรับ Arduino จะใช้คำสั่ง PulseIn() เพื่อวัดความกว้างในหน่วยเป็นไมโครวินาที (microseconds)


โจทย์ 1.1
  • ทดลองใช้งานโมดูล HC-SR04
  • เขียนโค้ด Arduino โดยไม่ใช่คำสั่ง PulseIn() ของ Arduino แต่ให้ใช้ Timer1 เพื่อวัดความกว้างของช่วงเวลา (ใช้ Timer1 สร้างฐานเวลาในการนับ)
  • ใช้ External Interrupt 0 หรือ 1 และใช้ ISR ที่เกี่ยวข้องอ่านค่าเวลา 2 ครั้ง (ขอบขาขึ้นและขอบขาลงของสัญญาณ ECHO) แล้วนำมาคำนวณช่วงกว้างของ HIGH แล้วนำค่าที่ได้ไปคำนวณระยะห่างจากสิ่งกีดขวาง
  • ใช้ออสซิลโลสโคปดูสัญญาณ ทั้ง TRIG และ ECHO
  • ต่อวงจรใช้งานโมดูล 16x2 LCD เพื่อแสดงผล
Timer1
  • เป็นตัวนับขนาด 16 บิต นับได้ตั้งแต่ 0 ถึง 65535
  • การใช้งานกับ Arduino Uno ใช้ในการสร้างสัญญาณ PWM (Servo) และทำงานในโหมด Phase Correct PWM 
Phase Correct PWM (Count 0>>255, 255>>0)ใช้วิธีนับขึ้น (BOTTOM to TOP) แล้วตามด้วยการนับลง (TOP to BOTTOM) ต่อหนึ่งคาบ
  • เริ่มนับจาก BOTTOM ไปยัง TOP จากนั้นจะนับถอยหลังไปยัง BOTTOM
  • Timer/Counter Overflow Flag (TOV0) ถูกเซตให้เป็น 1 เมื่อนับถึง BOTTOM และใช้สร้างอินเทอร์รัพท์ได้



โจทย์ 1.2
  • เหมือน 1.1 แต่เปลี่ยนไปใช้ Pin Change Interrupt แทน External Interrupt

ไม่มีความคิดเห็น:

แสดงความคิดเห็น