การแนะนำ
ในบทความนี้ เราจะพูดถึงวิธีสร้างโปรเจ็กต์การบันทึกข้อมูลที่สั่งให้ VEX Robot รวบรวมข้อมูลด้วย VEX Brain และบันทึกเป็นไฟล์ CSV บนการ์ด SD เพื่อการวิเคราะห์ข้อมูล
การบันทึกข้อมูลเป็นเครื่องมืออันทรงพลังที่เราสามารถใช้เพื่อช่วยเหลือการวิจัยทางวิทยาศาสตร์ ดำเนินการทดลองของเราเอง และแก้ปัญหาเฉพาะได้ มีงานที่สนุกสนานและน่าตื่นเต้นมากมายที่เราสามารถขับเคลื่อน VEX Robot ให้สำเร็จได้ด้วยการบันทึกข้อมูล ต่อไปนี้เป็นตัวอย่างบางส่วน:
- รวบรวมข้อมูลด้วย Distance Sensor เพื่อคำนวณความเร็วของหุ่นยนต์
- ขับเคลื่อนหุ่นยนต์ไปรอบๆ ห้องเรียนและรวบรวมข้อมูลด้วย Optical Sensor เพื่อสังเกตการเปลี่ยนแปลงของแสงในสถานที่ต่างๆ
- พาหุ่นยนต์ออกผจญภัยและบันทึกข้อมูลพิกัด GPS เพื่อสร้างแผนที่
ทักษะการเขียนโค้ดที่จำเป็นสำหรับการพัฒนาโครงการบันทึกข้อมูล
- ใช้คำสั่งต่างๆ เพื่อรวบรวมข้อมูลด้วย VEX Brain/Sensors และเพิ่มลงในโครงสร้างข้อมูล
- เขียนข้อมูลลงในไฟล์ Comma-Separated Values (CSV) บนการ์ด SD
ฮาร์ดแวร์ที่จำเป็นสำหรับการบันทึกข้อมูล:
- สมอง VEX (IQ, V5, EXP)
- การ์ด SD
- เซ็นเซอร์หนึ่งตัวหรือเซ็นเซอร์หลายตัว (อุปกรณ์เสริมตามข้อมูลที่ต้องการ)
รับข้อมูลจากเซ็นเซอร์
เราสามารถตั้งโปรแกรม VEX Robot (IQ, V5, EXP) เพื่อจับข้อมูลจากเซ็นเซอร์ต่อไปนี้:
- เซ็นเซอร์เฉื่อย
- เซ็นเซอร์วัดระยะ
- ออปติคัลเซนเซอร์
- วิชันเซนเซอร์
- เซนเซอร์ตรวจจับการหมุน (V5, EXP)
- เซ็นเซอร์ GPS (V5)
หมายเหตุ: สมอง VEX IQ (รุ่นที่ 2) และสมอง VEX EXP มีเซ็นเซอร์เฉื่อยในตัว เราสามารถรวบรวมข้อมูลเซ็นเซอร์เฉื่อยด้วยสมอง VEX เหล่านี้
ในบทความนี้ เราจะพัฒนาโครงการบันทึกข้อมูลที่รวบรวมข้อมูลความเร่งด้วย VEX IQ Brain (รุ่นที่ 2) และจัดเก็บไว้ในการ์ด SD
ขั้นแรก เราต้องเขียนโปรแกรมสั้นๆ เพื่อรับค่าที่อ่านได้จาก Timer และ Inertial Sensor ที่สร้างใน VEX IQ Brain (รุ่นที่ 2)
- ในตอนเริ่มต้นของโปรแกรมนี้ เราจะต้องนำเข้าโมดูล Python เพื่อควบคุม VEX IQ Brain (รุ่นที่ 2) และดึงข้อมูลจากโมดูลดังกล่าว ดังนั้น ให้เริ่มด้วยการเพิ่มคำแนะนำเหล่านี้ลงในโปรเจ็กต์
- ถัดไป เพิ่มโค้ดเพื่อประกาศตัวแปร
numOfDataEntries
เพื่อจัดเก็บจำนวนรายการข้อมูลสำหรับการบันทึก ประกาศตัวแปรpolling_delay_msec
เพื่อจัดเก็บค่าช่วงเวลาสำหรับการอ่านข้อมูล และสร้างตัวแปรสตริงว่างdata_buffer
เพื่อจัดเก็บ ข้อมูลที่อ่านจากเซ็นเซอร์ - เนื่องจากเราจะใช้ค่าปัจจุบันของ Timer เพื่อเพิ่ม Timestamp ให้กับข้อมูล เราจึงต้องรีเซ็ตค่าตัวจับเวลากลับเป็น 0 วินาทีก่อนที่จะเริ่มรวบรวมข้อมูล
- ก่อนที่จะใช้คำสั่งดึงข้อมูลจาก VEX IQ Brain (ตัวที่ 2) และบันทึกข้อมูลลงในบัฟเฟอร์ เราต้องทำความเข้าใจก่อน
คำสั่งต่อไปนี้จะเพิ่มค่าตัวจับเวลาปัจจุบันต่อท้ายตัวแปรdata_buffer
ในรูปแบบเฉพาะมาแจกแจงสตริงรูปแบบ
“%1.3f”
:- “%”: แนะนำตัวระบุการแปลง
- “1”: ระบุจำนวนหลักขั้นต่ำที่จะปรากฏในสตริง
- “.3”: ระบุจำนวนตำแหน่งทศนิยมที่จะรวมไว้ในตัวเลขที่จัดรูปแบบ
- “f”: ระบุว่าค่าที่จะจัดรูปแบบเป็นตัวเลขทศนิยม
ดังนั้นเราจึงสามารถใช้สตริงรูปแบบ “%1.3f” เพื่อจัดรูปแบบตัวเลขทศนิยมที่มีความกว้างขั้นต่ำ 1 หลักและมีทศนิยม 3 ตำแหน่ง
- ตอนนี้เราสามารถอ่าน Timer และค่าความเร่งของ Inertial Sensor ที่สร้างขึ้นใน VEX IQ Brain (รุ่นที่ 2) แล้วจึงผนวกข้อมูลเข้ากับตัวแปร
data_buffer
ในรูปแบบที่ระบุหมายเหตุ: “\n” คืออักขระขึ้นบรรทัดใหม่ เป็นการระบุว่าบรรทัดสิ้นสุดที่นี่และเป็นจุดเริ่มต้นของบรรทัดใหม่
- จากนั้น เพื่อบันทึกรายการข้อมูลจำนวนหนึ่งลงในตัวแปร
data_buffer
เราสามารถใช้สำหรับลูป
เพื่อดำเนินการคำสั่งซ้ำๆ เพื่อดึงข้อมูลและผนวกข้อมูลเข้ากับตัวแปรdata_buffer
สำหรับการวนซ้ำจำนวนหนึ่ง กลยุทธ์ของเราคือการใช้ค่าของตัวแปรnumOfDataEntries
เพื่อกำหนดจำนวนการวนซ้ำ
- จนถึงขณะนี้ โปรแกรมของเราจะบันทึกข้อมูลโดยเร็วที่สุด อย่างไรก็ตาม เราต้องการบันทึกข้อมูลในช่วงเวลาที่กำหนด ดังนั้นเราจึงสามารถใช้ฟังก์ชัน
wait()
ในสำหรับลูป
เพื่อหยุดโปรแกรมชั่วคราวเพื่อเพิ่มช่วงเวลาเฉพาะระหว่างการอ่านสองครั้ง เราใช้ค่าของตัวแปรpolling_delay_msec
เพื่อกำหนดค่าของช่วงเวลา
ยินดีด้วย! เราได้เสร็จสิ้นโปรแกรมเพื่อรับการอ่าน (ข้อมูลความเร่ง) จากเซ็นเซอร์เฉื่อยที่สร้างขึ้นในสมอง VEX ต่อไป เราจะมาดูวิธีเขียนข้อมูลลงในไฟล์ CSV บนการ์ด SD
การแนบการ์ด SD เข้ากับสมอง VEX
ก่อนที่จะเขียนข้อมูลลงไฟล์ในการ์ด SD ให้ใส่การ์ด SD ลงในช่องเสียบการ์ด SD ของ VEX Brain ก่อน
หมายเหตุ: ฟอร์แมตการ์ด SD เป็น FAT32 เพื่อเขียนข้อมูล เราขอแนะนำให้ใช้การ์ด SD ที่มีขนาด 32GB หรือน้อยกว่า
เพื่อให้แน่ใจว่าการเขียนข้อมูลลงไฟล์ในการ์ด SD สามารถทำได้ภายใต้สภาวะที่เหมาะสม เราจะต้องเพิ่มโค้ดเพื่อตรวจสอบว่าใส่การ์ด SD ลงใน VEX IQ Brain (รุ่นที่ 2) อย่างถูกต้องหรือไม่
- ใช้ฟังก์ชัน
brain.sdcard.is_inserted()
เพื่อตรวจสอบว่าเสียบการ์ด SD แล้วหรือไม่ หากไม่ได้ใส่การ์ด SD ให้แสดงข้อความที่เกี่ยวข้องบนหน้าจอ VEX IQ Brain และกดโปรแกรมค้างไว้
หมายเหตุ:brain.sdcard.is_inserted()
ฟังก์ชันจะคืนค่า True ถ้าใส่การ์ด SD เข้าไปใน Brain
การเขียนข้อมูลลงในไฟล์ CSV บนการ์ด SD
จนถึงตอนนี้โปรแกรมของเราสามารถรวบรวมข้อมูลด้วย VEX IQ Brain (2nd gen) ได้ เพื่อให้โครงการบันทึกข้อมูลเสร็จสมบูรณ์ เราจำเป็นต้องเขียนข้อมูลลงในไฟล์ Comma-Separated Values (CSV) บนการ์ด SD เพื่อการตรวจสอบและวิเคราะห์ในอนาคต
- เมื่อเขียนข้อมูลประเภทต่างๆ ลงในไฟล์ CSV เราต้องการทราบว่าแต่ละคอลัมน์มีข้อมูลประเภทใด ในการทำเช่นนี้ เราสามารถเพิ่มข้อความส่วนหัว CSV ต่อท้ายตัวแปร
data_buffer
ก่อนที่จะบันทึกข้อมูล
ดังนั้นให้เพิ่มโค้ดเพื่อประกาศตัวแปรcsvHeaderText
เพื่อจัดเก็บข้อความส่วนหัว CSV เพื่อระบุชื่อคอลัมน์สำหรับไฟล์ CSV และประกาศตัวแปรsd_file_name
เพื่อเก็บชื่อของไฟล์ CSV ที่จะเขียนลงใน การ์ด SD
หมายเหตุ: ตรวจสอบให้แน่ใจว่าส่วนหัวอยู่ในลำดับเดียวกันกับข้อมูลที่จัดเก็บไว้ในตัวแปร data_buffer
- จากนั้น ให้เพิ่มข้อความส่วนหัว CSV ต่อท้ายสตริง
data_buffer
ก่อนสตริงสำหรับลูป
สำหรับการรวบรวมข้อมูล
- ก่อนที่จะเขียนข้อมูลลงไฟล์ในการ์ด SD ให้เราทำความเข้าใจวิธีใช้ฟังก์ชัน
brain.sdcard.savefile()
ก่อน
คำสั่งนี้เขียนข้อมูลที่จัดเก็บไว้ในตัวแปรdata_buffer
ลงในไฟล์ CSV ที่มีชื่อบนการ์ด SD
เรามาแจกแจงกัน:-
brain.sdcard.savefile(): ฟังก์ชั่นบันทึกอาร์เรย์ไบต์ลงในไฟล์ที่มีชื่อบนการ์ด SD ฟังก์ชันส่งคืนจำนวนไบต์ที่เขียนลงในไฟล์
-
sd_file_name: พารามิเตอร์แรกของฟังก์ชัน ระบุชื่อไฟล์ที่จะเขียน ในโปรเจ็กต์นี้ ชื่อไฟล์จะถูกจัดเก็บไว้ในตัวแปร
sd_file_name
-
bytearray(datat_buffer,'utf-8'): พารามิเตอร์ตัวที่สองของฟังก์ชัน แสดงถึง bytearray ที่จะเขียนลงในไฟล์
-
- bytearray(): วิธีการสร้าง bytearray ที่ไม่แน่นอน ในคำสั่งนี้ เราใช้มันเพื่อแปลงสตริงเป็นไบต์เทียร์เรย์โดยระบุการเข้ารหัส
- data_buffer: พารามิเตอร์แรกของวิธีการ บ่งชี้แหล่งที่มาที่จะแปลงเป็นไบต์เทียร์เรย์ ในโปรเจ็กต์นี้ แหล่งที่มาคือข้อมูลที่จัดเก็บไว้ในตัวแปร
data_buffer
- 'utf-8': พารามิเตอร์ตัวที่สองของเมธอด ระบุการเข้ารหัสที่ระบุซึ่งใช้ในการเข้ารหัสสตริง การเข้ารหัสคือ 'utf-8' ในคำสั่งนี้
-
-
- หลังจาก
สำหรับลูป
สำหรับการรวบรวมข้อมูล ให้ใช้ฟังก์ชันbrain.sdcard.savefile()
เพื่อเขียนข้อมูลที่จัดเก็บไว้ในตัวแปรdata_buffer
ไปยังไฟล์ CSV บนการ์ด SD นอกจากนี้ ให้เพิ่มโค้ดเพื่อตรวจสอบค่าที่ส่งคืนจากฟังก์ชันbrain.sdcard.savefile()
เพื่อตรวจสอบว่าข้อมูลถูกเขียนลงไฟล์สำเร็จหรือไม่ และแสดงข้อความที่เกี่ยวข้องบนหน้าจอ VEX IQ Brain เพื่อรับข้อมูลจริง ข้อเสนอแนะเวลา
หมายเหตุ: ฟังก์ชันbrain.sdcard.savefile()
ส่งคืนจำนวนไบต์ที่เขียนลงในไฟล์ ในโปรเจ็กต์นี้ เราใช้มันเพื่อเขียนข้อมูลที่รวบรวมไปยังไฟล์ CSV ดังนั้นจำนวนไบต์ที่เขียนลงในไฟล์จะต้องมากกว่าศูนย์ กล่าวอีกนัยหนึ่ง หากฟังก์ชันbrain.sdcard.savefile()
ส่งคืนค่า 0 เราสามารถสรุปได้ว่าข้อมูลยังเขียนลงไฟล์ไม่สำเร็จ มิฉะนั้นข้อมูลจะถูกเขียนลงในไฟล์
ยินดีด้วย! เราได้พัฒนาโครงการบันทึกข้อมูลที่รวบรวมข้อมูลการเร่งความเร็วด้วย VEX IQ Brain (รุ่นที่ 2) และจัดเก็บไว้ในไฟล์ CSV บนการ์ด SD ต่อไป เราจะมาดูวิธีเปิดไฟล์ CSV เพื่อการวิเคราะห์ข้อมูล
การเปิดไฟล์ CSV เพื่อการวิเคราะห์ข้อมูล
เมื่อเขียนข้อมูลลงในไฟล์ CSV บนการ์ด SD แล้ว เราสามารถใช้แอปพลิเคชันสเปรดชีตเพื่อเปิดไฟล์สำหรับอ่านและวิเคราะห์ข้อมูลได้
หมายเหตุ: แอปพลิเคชันสเปรดชีตที่พบบ่อยที่สุด 2 รายการคือ Google ชีตและ Microsoft Excel ในบทความนี้ เราจะใช้ Google ชีต (บนเว็บ) เพื่อเปิดไฟล์ CSV บนการ์ด SD ขั้นตอนการใช้งานแอพพลิเคชั่นอื่นก็คล้ายกัน
- ถอดการ์ด SD ออกจากช่องเสียบการ์ด SD ของ VEX IQ Brain หากคอมพิวเตอร์มีช่องเสียบการ์ด Micro SD ในตัว เราสามารถใส่การ์ด SD ลงในช่องนั้นได้โดยตรง มิฉะนั้น ให้เสียบการ์ด SD ลงในอะแดปเตอร์การ์ด SD จากนั้นเชื่อมต่ออะแดปเตอร์เข้ากับคอมพิวเตอร์
- ลงชื่อเข้าใช้บัญชี Google ของเราและเปิด Google ชีต สร้างสเปรดชีตใหม่
- ในสเปรดชีต ให้เปิดเมนู “ไฟล์” เลือก “นำเข้า” -> “อัปโหลด” -> “เรียกดู” จากนั้นเลือกไฟล์ CSV บนคอมพิวเตอร์ หลังจากอัปโหลดไฟล์ CSV แล้ว ให้คลิกปุ่ม “นำเข้าข้อมูล” หลังจากนำเข้าข้อมูลแล้ว คลิก “เปิดทันที” เพื่อดูข้อมูลที่รวบรวมไว้ในไฟล์ CSV
- (ไม่บังคับ) วิธีง่ายๆ วิธีหนึ่งในการวิเคราะห์ข้อมูลคือการวาดกราฟ จากนั้นมองหาแนวโน้มของข้อมูล ในสเปรดชีต ให้เปิดเมนู “แทรก” และเลือก “แผนภูมิ” เพื่อวาดกราฟโดยใช้ข้อมูลในไฟล์ CSV กราฟต่อไปนี้เป็นผลจากข้อมูลความเร่งที่รวบรวมด้วย VEX IQ Brain (รุ่นที่ 2)
หมายเหตุ: เราสามารถใช้ เครื่องมือแก้ไขแผนภูมิ เพื่อเลือกประเภทแผนภูมิอื่นหรือแก้ไขแผนภูมิตามความต้องการของเรา
เมื่อถึงจุดนี้ เราได้เสร็จสิ้นโครงการบันทึกข้อมูลที่รวบรวมข้อมูลด้วย VEX IQ Brain (รุ่นที่ 2) และบันทึกเป็นไฟล์ CSV บนการ์ด SD นอกจากนี้เรายังได้เรียนรู้วิธีอ่านไฟล์ CSV บนการ์ด SD โดยใช้ Google ชีต และยังได้สร้างกราฟสำหรับการวิเคราะห์เพิ่มเติมอีกด้วย อะไรต่อไป? ให้เราลองวางแผนการทดลองที่น่าตื่นเต้นมากขึ้นโดยใช้ VEX Robot สำหรับการบันทึกข้อมูล เพื่อสังเกตว่าปัจจัยด้านสิ่งแวดล้อมที่เปลี่ยนแปลงส่งผลต่อข้อมูลประเภทต่างๆ อย่างไร และทำความเข้าใจโลกรอบตัวเราให้ลึกซึ้งยิ่งขึ้น