การบันทึกข้อมูลด้วยสมอง VEX และเซ็นเซอร์โดยใช้ 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 เหล่านี้

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

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

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

    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 ก่อน

image2.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 (2nd gen) ได้ เพื่อให้โครงการบันทึกข้อมูลเสร็จสมบูรณ์ เราจำเป็นต้องเขียนข้อมูลลงในไฟล์ 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(): ฟังก์ชั่นบันทึกอาร์เรย์ไบต์ลงในไฟล์ที่มีชื่อบนการ์ด 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 (รุ่นที่ 2) และจัดเก็บไว้ในไฟล์ 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 (รุ่นที่ 2) และบันทึกเป็นไฟล์ 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: