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

06 มิถุนายน 2559

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

ครูจะพาเริ่มเรียนรู้อิเล็กทรอนิกส์กับอาร์ดุยโน จะเริ่มไปพร้อมๆ กับการเขียนโปรแกรม วันนี้เราจะมาเริ่มรู้จักกับ 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 ตัว อย่าลืมติดตามนะครับ



27 พฤษภาคม 2559

อาร์ดุยโน : ฮาร์ดแวร์

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

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

ส่วนที่เป็นฮาร์ดแวร์ของอาร์ดุยโน ก็คือ แผงวงจร หรือแผ่นวงจร หรือบอร์ด ของมันนั่นเอง ซึ่งรูปร่างหน้าตาของมันก็แตกต่างไปตามชนิดหรือรุ่นที่มีอยู่อย่างหลากหลาย ซึ่งที่ครูฟิสิกส์จะนำมาใช้ในครั้งนี้ก็คือ Arduino Uno R3 ดังรูป (บอร์ดที่เห็นในภาพนี้เป็นบอร์ดที่ผลิตในประเทศจีนนะครับ บางคนเรียกมันว่า อาร์ดุยโนปลอม แต่จะอย่างไรก็ตาม มันทำงานได้เหมือนกัน แล้วที่สำคัญราคาถูก )



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

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

เข้าใจสเปคของ ATMega328P

ลองป้อนข้อมูล ATMega328P ไปที่ช่องของกูเกิ้ล เราจะพบข้อมูลคล้ายๆ อย่างนี้ ซึ่งจะบอกค่าเฉพาะบางอย่างของมัน



นี่คือเรื่องแรกที่เราควรเรียนรู้ครับ คือ อ่านสเปคให้ออก ซึ่งครูจะแนะนำเฉพาะตัวสำคัญๆ เท่านั้นนะครับ

ในคอลัมน์ซ้ายมือ คำว่า Parameter เป็นการอ้างถึงขนาดหรือค่าต่างๆ ของหน่วยย่อยที่อยู่ภายในชิป ส่วน Value หมายถึง ตัวเลขที่บอกค่าในหน่วยย่อยนั้น

Flash (kBytes): 32 kBytes 

Flash หรือ Flash Memory หมายถึง หน่วยความจำแบบแฟลช ซึ่งเป็นหน่วยความจำชนิดหนึ่งที่สามารถเขียนและอ่านได้ ในขณะที่ไม่มีไฟฟ้าเลี้ยงวงจรมันก็สามารถเก็บข้อมูลไว้ได้ ถ้าจะว่าไปแล้วมันก็เหมือนกัน sd-card หรือแผ่นเก็บข้อมูลที่เราใช้ในโทรศัพท์มือถือรุ่นใหม่ๆ ที่เราใช้เก็บรูปภาพนั่นเอง ค่า 32 kBytes หมายถึงขนาดของความจุข้อมูลของมัน 32x1024=32,768 bytes นั่นเอง (น้อยมากๆ เลยใช่ไหมครับ เทียบไม่ได้เลยกับหน่วยเก็บข้อมูลที่มีอยู่ในโทรศัพท์มือถือเราที่เราใช้ ซึ่งเก็บได้หลายจิ๊กกะไบท์)

Pin Count : 32

หมายถึง จำนวนช่องเสียบหรือขาที่เชื่อมต่อกับอุปกรณ์รอบๆ ตัว ซึ่งมี 32 ช่อง

Max. Operating Freq. (MHz): 20  

หมายถึง ความถี่สัญญาณนาฬิกา หรือบางทีก็เรียกสั้นๆ ว่า คล็อก (clock) ค่านี้ยิ่งมีค่ามากแปลว่ามันยิ่งมีความเร็วในการประมวลผลมากตามไปด้วย ในที่นี้เราจะเห็นค่า 20 เมกะเฮิร์ตซ์ ซึ่งเป็นค่ามากที่สุดที่ชิปประมวลผลรุ่นนี้จะสามารถรับได้ ในทางปฏิบัติผู้ออกแบบเขาจะให้ใช้งานที่ 16 MHz คือ ใช้ไม่เต็มกำลังนัก เป็นไปได้ว่าผู้ออกแบบไม่ต้องการให้ชิปร้อนเร็วและมากเกินไปขณะทำงาน ซึ่งจะมีผลต่ออายุการใช้งานของตัวชิปด้วย

CPU : 8 bit-AVR

เป็นคำย่อของหน่วยประมวลผล ตัวเลข 8 bit หมายถึง จำนวนบิทหรือสายสัญญาณที่ CPU จะประมวลผล หรือจะพูดอีกอย่างหนึ่งว่า มันจะประมวลผลข้อมูลครั้งละ 8 บิทในแต่ละรอบการทำงานก็ได้ ส่วน AVR มาจากคำว่า Advanced Virtual RISC เป็นคำที่อธิบายไปแล้วอาจจะยากไปสำหรับระดับที่เรากำลังคลานเตาะแตะแบบนี้ เอาเป็นว่ามันเป็นรูปแบบของการออกแบบตัวประมวลผลแบบหนึ่งก็แล้วกัน ว่ากันว่ามันง่ายต่อการเข้าถึงและพัฒนา แล้วก็เหมาะกับมือใหม่อย่างเราๆ

เอาแค่นี้ก่อน ทีนี้ถ้าคลิกตรงคำว่า + more ก็จะเจอสเปคอีกหลายสิบบรรทัด เอาเฉพาะที่สำคัญๆ ก็แล้วกันนะครับ

SRAM (kBytes): 2

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

EEPROM (Bytes): 1024

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

คงหมดแล้วล่ะ ที่สำคัญๆ ที่เราควรรู้จัก สำหรับตัวชิป ATMega328P

สิ่งที่ควรรู้จักเพิ่มเติมเกี่ยวกับบอร์ดอาร์ดุยโนตัวนี้

CH340G

เป็นชิปที่ทำหน้าที่ในการติดต่อสื่อสารกับเครื่องคอมพิวเตอร์ผ่านพอร์ท USB ตัวนี้แหละที่ทำให้บางคนบอกว่า บอร์ดนี้เป็นอาร์ดุยโนปลอม เพราะว่าตัวบอร์ด Made in Italy นั้นจะใช้ชิป FTDI หรือ ATMega8U2 หรือ ATMega16U2 แล้วแต่รุ่นเป็นตัวติดต่อกับพอร์ท USB ของคอมพิวเตอร์  แต่ตัวที่ว่าปลอมนี้ใช้ CH340G ซึ่งทำให้ราคาถูกลงมาก แต่ถ้ามันทำงานได้เหมือนกัน ครูฟิสิกส์ว่า จะไปสนใจมันทำไม (แรงมั๊ย! ) บางคนอาจเป็นกังวลใจว่า เฮ้ย!  แล้วมันไปละเมิดลิขสิทธิ์เขาหรือเปล่า คำตอบ คือ เปล่าเลย โปรเจคต์ของ อาร์ดุยโน เป็นโอเพ่นซอร์ส ทั้งฮาร์ดแวร์/ซอฟท์แวร์ ใครจะเอาไปต่อยอดไปพัฒนาต่อก็ได้ ขอให้อยู่ในเงื่อนไขคือ ต้องเป็นโอเพ่นซอร์สต่อไป เพราะฉะนั้นนี่ไม่ใช่ของปลอมหรอกครับ ถ้าจะเรียกให้เหมาะ ครูว่าน่าจะเรียกว่า บอร์ดที่เลียนแบบอาร์ดุยโน น่าจะถูกต้องกว่า (ประเภทของบอร์ด ครูจะได้พูดถึงอีกที เพราะสับสนกันพอสมควร)

ถ้าอยากเห็นตัวชิปนี้ ก็ดูรูปข้างบน ตัวที่อยู่เหนือขึ้นไปจาก ATMega328P วางในแนวขวาง ถัดลงมาด้านล่างจากพอร์ท USB

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

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

28 กรกฎาคม 2556

สนุกกับฟิสิกส์ : หาค่า g โดยการวิเคราะห์ภาพวิดีโอจากโทรศัพท์มือถือ ตอนจบ

ก่อนจะดำเนินการต่อ ครูมีรายการให้ตรวจสอบตามนี้ก่อนนะครับ ว่าเราได้ทำครบถ้วนหรือยัง

  • รู้ 35mm Equivalent ของกล้องบนมือถือเรา
  • บันทึกภาพการตกของวัตถุเป็นวิดีโอคลิปแล้วโอนไฟล์เข้าไปไว้ในฮาร์ดดิสก์ของเครื่อง หรือไม่ก็ถอดเมมโมรีการ์ดของกล้องมาต่อการ์ดรีดเดอร์(ก็แล้วแต่เทคนิคของใครของมัน)
  • และมีโปรแกรมแยกภาพวิดีโอออกมาเป็นภาพนิ่ง(FreeVideo to JPG converter)และโปรแกรมวัดระยะในภาพ ImageJ 
เมื่อเรียบร้อยแล้วก็ดำเนินการต่อไปได้เลย ถ้ายังไม่มีก็ย้อนกลับไปอ่านตอนที่แล้วก่อน

การตรวจสอบจำนวนอัตราการแสดงภาพของคลิปวิดีโอ

คลิปวิดีโอก็คือชุดของภาพนิ่งที่มาแสดงด้วยอัตราการแสดงภาพนิ่งเฉพาะจำนวนหนึ่ง (หรือต่อๆไปครูจะเรียกว่า frame rate) ได้เจ้า frame rate นี้มันมีมาตรฐานของมันอยู่ เช่น ภาพยนตร์ในยุคฟิล์ม frame rate ก็คือ 24 ภาพ/วินาที (ต่อๆไป จะใช้คำย่อว่า fps) ส่วนภาพจากโทรทัศน์ในประเทศไทยเราก็จะแสดงภาพ 25 fps เป็นต้น แต่ภาพจากคลิปวิดีโอมักไม่ค่อยอิงมาตรฐานสักเท่าไหร่ เราต้องตรวจสอบเอง วิธีการตรวจสอบก็ง่ายมาก โดยเฉพาะอย่างยิ่งใครที่ใช้ Wndows 7 เป็นโอเอสของเครื่อง วิชาการก็คือคลิกขวาที่คลิปวิดีโอของเรา คลิก Properties แล้วก็เลือกแท็บ Details ดังภาพ


จะเห็นว่าคลิปวิดีโอของครูมีขนาดภาพ 640x480 pixels มี Frame rate  เท่ากับ 17 fps  
อันที่จริงมีหลายวิธีในการดูค่า frame rate นี้ ให้ปรึกษาครูสอนคอมพิวเตอร์เอา ถามว่าเอาค่านี้มาทำอะไร ก็ต้องอธิบายต่อว่า นี่คือฐานเวลาที่เราจะเอาไปคำนวณหาความเร็วไงครับ เพราะว่า 17 fps ความหมายของมันคือ มันแสดงภาพ 17 ภาพต่อวินาที ดังนั้น ระยะเวลาแต่ละภาพนั้นจะห่างกัน 1/17 วินาที นั่นเอง  เคลียร์นะครับ เอาล่ะไปขั้นตอนต่อไป

ใช้โปรแกรมแยกคลิปวิดีโอมาเป็นภาพนิ่ง

เปิดโปรแกรม FreeVideo to jpg ขึ้นมาครับ แล้วเลือกปุ่มคำสั่ง Add Files.... 


ไปเลือกเอาไฟล์ที่เป็นคลิปวิดีโอของเราแล้วเปิดมันขึ้นมา

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



เสร็จแล้วก็คลิกปุ่มดังแสดงในภาพ เพื่อเปิดโฟลเดอร์ที่โปรแกรมมันไปสร้างไว้ให้


จบขั้นตอนการแยกคลิปวิดีโอไปเป็นภาพนิ่ง

ทำความเข้าใจกับภาพที่ได้

เมื่อเปิดโฟลเดอร์ดูไฟล์ภาพนิ่งที่แยกออกมาจากคลิป จะเห็นภาพต่างๆ เป็นจำนวนมาก


ใช้โปรแกรมเปิดดูภาพที่เราชอบใช้ (ครูใช้ FastStone) ดูภาพ จะเห็นภาพตัววัตถุ(น็อต) ที่เราปล่อยลงมาอยู่ในตำแหน่งต่างๆ ที่ไม่ซ้ำกันในแต่ละภาพ ถ้าเลื่อนปุ่มลูกศรซ้าย-ขวา เร็วๆ เราก็จะเห็นเป็นแอนิเมชั่น อีกแบบหนึ่ง 

เราจะนำภาพเหล่านี้ออกมา 2 คู่ คู่แรกเอาตอนต้นๆ คู่หลังก็ถัดออกมาอีก ถามว่าเอามาทำอะไร คำตอบก็คือ เอามาหา u (ความเร็วต้นของวัตถุ) และหา v (ความเร็วปลาย) จากการพิจารณาภาพแล้ว ครูเลือกเอาคู่แรกคือ ภาพที่ 1-2 มาหาความเร็วต้นและภาพที่ 6-7 มาหาความเร็วปลาย  ซึ่งความเร็วต้น(u) และความเร็วปลาย(v) ที่ครูใช้นั้นห่างกัน 5 เฟรม หรือคิดเป็นเวลาก็คือ 5*1/17=5/17 วินาที นั่นเอง หรือถ้าเขียนเป็นสมการก็จะได้ว่า
t = t2-t1
จะได้  t = 5/17  s
จดตัวเลขหรือจำตัวเลขนี้ไว้ครับว่า เป็นเวลาระหว่างระหว่างการวัดความต้น(u) และความเร็วปลาย(v)

ใช้ ImageJ วัดระยะในหน่วยของพิกเซลในภาพ

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

  1. เลือก File>Open แล้วก็เลือกไฟล์ภาพที่ 1 แล้วกดปุ่ม Ctrl+A แล้วก็ Ctrl+C (เลือกทั้งหมดแล้วก๊อปปี้) แล้วปิดไฟล์นี้ได้เลยครับ
  2. เลือก File>Open แล้วเลือกไฟล์ภาพที่ 2 แล้วคลิก Edit>Paste control... แล้วเลือก diferent
  3. แล้วคลิก Edit>Paste อีกครั้ง มันจะเป็นภาพมืดๆ แล้วจะมีขาว-เทาๆ บริเวณที่ภาพทั้งสองมันแตกต่างกัน คลิก File > Save As > .jpeg บันทึกไฟล์นี้เก็บไว้ ครูเรียกมันว่า "u.jpg"
  4. ต่อมาให้เลือกปุ่มวัดระยะแนวตรงบนแถบเครื่องมือ ดังภาพ


    แต่ถ้าภาพมันเล็กไปก็ใช้แว่นขยาย(ถัดมาทางขวาอีก 5 ปุ่ม) ไปคลิกซ้ายบริเวณภาพ ถ้าจะย่อก็คลิกขวาที่บริเวณภาพ
  5. เอาเมาส์ไปคลิกตำแหน่งที่รอยเทาๆ ด้านซ้ายก่อนแล้วลากไปทางขวากะให้กึ่งกลางรอยเทาๆ ด้านขวา ดังภาพ
  6. กดปุ่ม Ctrl+M หรือไม่ก็คลิก Analyze > Measure


    สิ่งที่ได้คือ ระยะทางในหน่วยของพิกเซลที่วัตถุเคลื่อนที่ได้ระหว่างภาพ1-2
  7. ทำแบบเดียวกันตั้งแต่ขั้นตอนที่ 1 จนถึง 7 แต่ครานี้ให้ทำกับภาพที่ 6-7 แต่ตั้งกันในขั้นตอนที่ 3 ที่เราตั้งชื่อให้ตั้งไฟล์ว่า "v.jpg"
  8. สิ่งที่เราได้จากการวัดระยะในหน่วย pixels จากภาพทั้งสองคู่

การคำนวณหา u , v และ g

จำบทความนี้ตอนแรกได้ไหมครับ ที่ครูบอกว่าต้องวัดระยะระหว่างระนาบกล้องกับเส้นทางที่วัตถุตก ตอนนี้ เราจะเอามาใช้ สำหรับการทดลองของครูคือ 157 cm 


จากภาพทางซ้ายมือก็คือ ภาพบน ccd ส่วนภาพทางขวามือก็คือระยะที่วัตถุเคลื่อนที่ได้ แต่จากความละเอียดของภาพที่เราได้จากภาพนิ่ง และขนาดของ ccd เราจะได้ความสัมพันธ์ดังภาพด้านล่างนี้


ดังนั้นในตอนนี้เราจึงหาขนาดของภาพ(ด้านขวามือ) ที่ปรากฎบน CCD ได้ดังนี้ 
ขนาดความสูงของภาพด้านขวามือ = 157*3.59/4.31cm=130.77 cm
และขนาด 130.77 cm นี้จะไปปรากฎเต็ม CCD ที่มีความละเอียด 640 pixels ฉะนั้น เมื่อเรารู้หน่วย pixels บน ccd (จากการวัดด้วย ImageJ) เราก็สามารถหาระยะในหน่วยของ cm ได้ทันทีด้วยการเทียบอัตราส่วน

ตัวอย่าง การหาระยะทางที่วัตถุเคลื่อนที่ได้จากภาพคู่แรก = 35.002*130.77/640 cm = 7.15cm
ความเร็วของวัตถุจากภาพคู่แรกคือ 7.15cm*1/17s = 7.15*17 cm/s = 121.55 cm/s หรือ 1.2155 m/s
(ตัวเลข 1/17 s มาจากการหา frame rate ที่ปรากฎในบทความตอนแรก) 

ในทำนองเดียวกันเราก็สามารถหา v ได้ โดยหาระยะก่อน(ได้เท่ากับ 116.25*130.77/640=23.75cm) ความเร็วของวัตถุก็คำนวณได้เท่ากับ 23.75*17=4.0380 m/s

ทีนี้ขั้นตอนสุดท้ายก็มาหาความเร่งของค่า g ซึ่งคำนวณจากความสัมพันธ์ดังนี้

g = (v-u)/t
 ทีนี้ก็แทนค่าลงไป  จะได้
g = (4.0380-1.2155)/(5/17) = 9.5965 m/s2

นี่คือค่าจากการทดลองของกล้องดิจิทัลจาก LG Opitimus one P500 ครับ

คาดเคลื่อนไปเท่าไร

 ก็คำนวณลองดู
 % error = |9.81-9.5965|*100/9.81 = 2.17%

ก็ไม่เลวนะครับ

เอ้ สงสัยจะต้องโละ ticker timer ที่ห้องแล็บทิ้งซะ แล้วหันมาใช้กล้องจากโทรศัพท์มือถือมาทำการทดลองแทนดีน้าาา