การบันทึกข้อมูลด้วย VEX Brain/เซ็นเซอร์ (เวอร์ชัน Python)

การแนะนำ

ในบทความนี้ เราจะพูดถึงวิธีสร้างโปรเจ็กต์การบันทึกข้อมูลที่สั่งให้ 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 Brians เหล่านี้ได้

ในบทความนี้ เราจะพัฒนาโครงการบันทึกข้อมูลที่รวบรวมข้อมูลความเร่งด้วย VEX IQ Brain (2nd) และจัดเก็บไว้ในการ์ด SD 

ก่อนอื่น เราต้องเขียนโปรแกรมสั้นๆ เพื่อรับค่าที่อ่านได้จาก Timer และ Inertial Sensor ที่สร้างใน VEX IQ Brain (ตัวที่ 2)

  • ในตอนเริ่มต้นของโปรแกรมนี้ เราจะต้องนำเข้าโมดูล Python เพื่อควบคุม VEX IQ Brain (2nd) และดึงข้อมูลจากโมดูลดังกล่าว ดังนั้น ให้เริ่มด้วยการเพิ่มคำแนะนำเหล่านี้ลงในโปรเจ็กต์

    image5.png

  • ถัดไป เพิ่มโค้ดเพื่อประกาศตัวแปร numOfDataEntries เพื่อจัดเก็บจำนวนรายการข้อมูลสำหรับการบันทึก ประกาศตัวแปร polling_delay_msec เพื่อจัดเก็บค่าช่วงเวลาสำหรับการอ่านข้อมูล และสร้างตัวแปรสตริงว่าง data_buffer เพื่อจัดเก็บ ข้อมูลที่อ่านจากเซ็นเซอร์

    image9.png

  • เนื่องจากเราจะใช้ค่าปัจจุบันของ Timer เพื่อเพิ่ม Timestamp ให้กับข้อมูล เราจึงต้องรีเซ็ตค่าตัวจับเวลากลับเป็น 0 วินาทีก่อนที่จะเริ่มรวบรวมข้อมูล

    รูปภาพ13.png

  • ก่อนที่จะใช้คำสั่งดึงข้อมูลจาก VEX IQ Brain (ตัวที่ 2) และบันทึกข้อมูลลงในบัฟเฟอร์ เราต้องทำความเข้าใจก่อน
    คำสั่งต่อไปนี้จะเพิ่มค่าตัวจับเวลาปัจจุบันต่อท้ายตัวแปร data_buffer ในรูปแบบเฉพาะ

    รูปภาพ14.png

    มาแจกแจงสตริงรูปแบบ “%1.3f”

    • “%”: แนะนำตัวระบุการแปลง
    • “1”: ระบุจำนวนหลักขั้นต่ำที่จะปรากฏในสตริง
    • “.3”: ระบุจำนวนตำแหน่งทศนิยมที่จะรวมไว้ในตัวเลขที่จัดรูปแบบ
    • “f”: ระบุว่าค่าที่จะจัดรูปแบบเป็นตัวเลขทศนิยม

    ดังนั้นเราจึงสามารถใช้สตริงรูปแบบ “%1.3f” เพื่อจัดรูปแบบตัวเลขทศนิยมที่มีความกว้างขั้นต่ำ 1 หลักและมีทศนิยม 3 ตำแหน่ง

  • ตอนนี้เราสามารถอ่าน Timer และค่าความเร่งของ Inertial Sensor ที่สร้างขึ้นใน VEX IQ Brain (ตัวที่ 2) แล้วจึงผนวกข้อมูลเข้ากับตัวแปร data_buffer ในรูปแบบที่ระบุ

    image7.png

    หมายเหตุ: “\n” คืออักขระขึ้นบรรทัดใหม่ เป็นการระบุว่าบรรทัดสิ้นสุดที่นี่และเป็นจุดเริ่มต้นของบรรทัดใหม่

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

    image12.png

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

    image8.png

ยินดีด้วย! เราได้เสร็จสิ้นโปรแกรมเพื่อรับการอ่าน (ข้อมูลความเร่ง) จากเซ็นเซอร์เฉื่อยที่สร้างขึ้นในสมอง VEX ต่อไป เราจะมาดูวิธีเขียนข้อมูลลงในไฟล์ CSV บนการ์ด SD

image1.png




การแนบการ์ด SD เข้ากับสมอง VEX

ก่อนที่จะเขียนข้อมูลลงไฟล์ในการ์ด SD ให้ใส่การ์ด SD ลงในช่องเสียบการ์ด SD ของ VEX Brain ก่อน

เครื่องอ่านการ์ด IQ คำบรรยายภาพ (1).png

หมายเหตุ: ฟอร์แมตการ์ด SD เป็น FAT32 เพื่อการเขียนข้อมูล เราขอแนะนำให้ใช้การ์ด SD ที่มีขนาด 32GB หรือน้อยกว่า

เพื่อให้แน่ใจว่าการเขียนข้อมูลลงไฟล์ในการ์ด SD สามารถทำได้ภายใต้สภาวะที่เหมาะสม เราจะต้องเพิ่มโค้ดเพื่อตรวจสอบว่าใส่การ์ด SD ลงใน VEX IQ Brain อย่างถูกต้องหรือไม่ (อันดับที่ 2)

  • ใช้ฟังก์ชัน brain.sdcard.is_inserted() เพื่อตรวจสอบว่าเสียบการ์ด SD แล้วหรือไม่ หากไม่ได้ใส่การ์ด SD ให้แสดงข้อความที่เกี่ยวข้องบนหน้าจอ VEX IQ Brain และกดโปรแกรมค้างไว้

    image17.png


    หมายเหตุ: brain.sdcard.is_inserted() ฟังก์ชันจะคืนค่า True ถ้าใส่การ์ด SD เข้าไปใน Brain

การเขียนข้อมูลลงในไฟล์ CSV บนการ์ด SD

จนถึงตอนนี้โปรแกรมของเราสามารถรวบรวมข้อมูลด้วย VEX IQ Brain (ตัวที่ 2) ได้แล้ว เพื่อให้โครงการบันทึกข้อมูลเสร็จสมบูรณ์ เราจำเป็นต้องเขียนข้อมูลลงในไฟล์ Comma-Separated Values ​​(CSV) บนการ์ด SD เพื่อการตรวจสอบและวิเคราะห์ในอนาคต

  • เมื่อเขียนข้อมูลประเภทต่างๆ ลงในไฟล์ CSV เราต้องการทราบว่าแต่ละคอลัมน์มีข้อมูลประเภทใด ในการทำเช่นนี้ เราสามารถเพิ่มข้อความส่วนหัว CSV ต่อท้ายตัวแปร data_buffer ก่อนที่จะบันทึกข้อมูล
    ดังนั้นให้เพิ่มโค้ดเพื่อประกาศตัวแปร csvHeaderText เพื่อจัดเก็บข้อความส่วนหัว CSV เพื่อระบุชื่อคอลัมน์สำหรับไฟล์ CSV และประกาศตัวแปร sd_file_name เพื่อเก็บชื่อของไฟล์ CSV ที่จะเขียนลงใน การ์ด SD

    รูปภาพ10.png

หมายเหตุ: ตรวจสอบให้แน่ใจว่าส่วนหัวอยู่ในลำดับเดียวกันกับข้อมูลที่จัดเก็บไว้ในตัวแปร data_buffer

  • จากนั้น ให้เพิ่มข้อความส่วนหัว CSV ต่อท้ายสตริง data_buffer ก่อนสตริง สำหรับลูป สำหรับการรวบรวมข้อมูล

    image15.png

  • ก่อนที่จะเขียนข้อมูลลงไฟล์ในการ์ด SD เรามาทำความเข้าใจเกี่ยวกับการใช้ฟังก์ชัน brain.sdcard.savefile() กันก่อน

    image4.png


    คำสั่งนี้เขียนข้อมูลที่จัดเก็บไว้ในตัวแปร data_buffer ลงในไฟล์ CSV ที่มีชื่อบนการ์ด SD
    มาทำลายมันกัน:
    • brain.sdcard.savefile(): ฟังก์ชั่นบันทึก bytearray ลงในไฟล์ที่มีชื่อบนการ์ด 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 เพื่อรับข้อมูลจริง ข้อเสนอแนะเวลา

    image6.png


    หมายเหตุ: ฟังก์ชัน brain.sdcard.savefile() ส่งคืนจำนวนไบต์ที่เขียนลงในไฟล์ ในโปรเจ็กต์นี้ เราใช้มันเพื่อเขียนข้อมูลที่รวบรวมไปยังไฟล์ CSV ดังนั้นจำนวนไบต์ที่เขียนลงในไฟล์จะต้องมากกว่าศูนย์ กล่าวอีกนัยหนึ่ง หากฟังก์ชัน brain.sdcard.savefile() ส่งคืนค่า 0 เราสามารถสรุปได้ว่าข้อมูลยังเขียนลงไฟล์ไม่สำเร็จ มิฉะนั้นข้อมูลจะถูกเขียนลงในไฟล์

ยินดีด้วย! เราได้พัฒนาโครงการบันทึกข้อมูลที่รวบรวมข้อมูลความเร่งด้วย VEX IQ Brain (2nd) และจัดเก็บไว้ในไฟล์ CSV ในการ์ด SD ต่อไป เราจะมาดูวิธีเปิดไฟล์ CSV เพื่อการวิเคราะห์ข้อมูล 

image16.png

การเปิดไฟล์ 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

    image11.png

  • (ไม่บังคับ) วิธีง่ายๆ วิธีหนึ่งในการวิเคราะห์ข้อมูลคือการวาดกราฟ จากนั้นมองหาแนวโน้มของข้อมูล ในสเปรดชีต ให้เปิดเมนู “แทรก” และเลือก “แผนภูมิ” เพื่อวาดกราฟโดยใช้ข้อมูลในไฟล์ CSV กราฟต่อไปนี้เป็นผลจากข้อมูลความเร่งที่รวบรวมด้วย VEX IQ Brain (อันดับที่ 2)

    image3.png


    หมายเหตุ: เราสามารถใช้ เครื่องมือแก้ไขแผนภูมิ เพื่อเลือกประเภทแผนภูมิอื่นหรือแก้ไขแผนภูมิตามความต้องการของเรา

เมื่อถึงจุดนี้ เราได้เสร็จสิ้นโครงการบันทึกข้อมูลที่รวบรวมข้อมูลด้วย VEX IQ Brain (2nd) และบันทึกเป็นไฟล์ CSV บนการ์ด SD นอกจากนี้เรายังได้เรียนรู้วิธีอ่านไฟล์ CSV บนการ์ด SD โดยใช้ Google ชีต และยังได้สร้างกราฟสำหรับการวิเคราะห์เพิ่มเติมอีกด้วย อะไรต่อไป? เรามาลองวางแผนการทดลองที่น่าตื่นเต้นยิ่งขึ้นโดยใช้ VEX Robot สำหรับการบันทึกข้อมูล เพื่อสังเกตว่าปัจจัยด้านสิ่งแวดล้อมที่เปลี่ยนแปลงส่งผลต่อข้อมูลประเภทต่างๆ อย่างไร และทำความเข้าใจโลกรอบตัวเราให้ลึกซึ้งยิ่งขึ้น

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: