Python을 사용하여 VEX 두뇌 및 센서를 사용한 데이터 로깅

소개

이 글에서는 VEX 로봇이 VEX Brain으로 데이터를 수집하고 데이터 분석을 위해 SD 카드에 CSV 파일로 저장하도록 지시하는 데이터 로깅 프로젝트를 생성하는 방법에 대해 설명합니다.

데이터 로깅은 과학 연구를 지원하고, 자체 실험을 수행하고, 특정 문제를 해결하는 데 사용할 수 있는 강력한 도구입니다. 데이터 로깅을 통해 VEX 로봇을 구동하여 수행할 수 있는 재미있고 흥미로운 작업이 다양합니다. 다음은 몇 가지 예입니다.

  • 거리 센서로 데이터를 수집하여 로봇의 속도를 계산합니다.
  • 로봇을 교실 안을 돌아다니며 광센서로 데이터를 수집해 다양한 위치의 빛의 변화를 관찰합니다.
  • 로봇을 모험에 데려가 GPS 좌표 데이터를 기록하면 지도가 생성됩니다.

데이터 로깅 프로젝트 개발에 필요한 코딩 기술

  • 다양한 명령어를 사용하여 VEX Brain/Sensor로 데이터를 수집하고 데이터 구조에 추가합니다.
  • SD 카드의 CSV(쉼표로 구분된 값) 파일에 데이터를 씁니다.

데이터 로깅에 필요한 하드웨어:

  • VEX 두뇌(IQ, V5, EXP)
  • SD 카드
  • 센서 또는 여러 센서(선택 사항, 필수 데이터에 따라)

센서에서 데이터 가져오기

VEX 로봇(IQ, V5, EXP)을 프로그래밍하여 다음 센서에서 데이터를 캡처할 수 있습니다.

  • 관성 센서
  • 거리 센서
  • 광학 센서
  • 비전 센서
  • 회전 센서(V5, EXP)
  • GPS 센서(V5)

참고: VEX IQ(2세대) Brain과 VEX EXP Brain에는 관성 센서가 내장되어 있습니다. 이러한 VEX Brain을 사용하여 관성 센서 데이터를 수집할 수 있습니다.

이번 글에서는 VEX IQ Brain(2세대)로 가속도 데이터를 수집하여 SD 카드에 저장하는 데이터 로깅 프로젝트를 개발하겠습니다. 

먼저, VEX IQ Brain(2세대)에 내장된 타이머와 관성 센서로부터 판독값을 얻기 위한 짧은 프로그램을 작성해야 합니다.

  • 이 프로그램을 시작할 때 VEX IQ Brain(2세대)을 제어하고 여기에서 데이터를 가져오기 위해 Python 모듈을 가져와야 합니다. 따라서 먼저 프로젝트에 이러한 지침을 추가하세요.

    이미지5.png

  • 다음으로, 기록할 데이터 항목 수를 저장하기 위해 변수 numOfDataEntries 선언하고, 데이터를 읽는 시간 간격 값을 저장하기 위해 변수 polling_delay_msec 선언하고, 저장하기 위해 빈 문자열 변수 data_buffer 생성하는 코드를 추가합니다. 센서에서 읽은 데이터입니다.

    image9.png

  • 타이머의 현재 값을 사용하여 데이터에 타임스탬프를 추가할 것이므로 데이터 수집을 시작하기 전에 타이머 값을 다시 0초로 재설정해야 합니다.

    이미지13.png

  • VEX IQ Brain(2차)에서 데이터를 가져와서 버퍼에 기록하는 명령어를 사용하기 전에 먼저 이에 대한 이해가 필요합니다.
    다음 명령어는 현재 타이머 값을 특정 형식으로 data_buffer 변수에 추가합니다.

    이미지14.png

    형식 문자열 “%1.3f”분석해 보겠습니다. 

    • "%": 변환 지정자를 도입합니다.
    • "1": 문자열에 포함될 최소 자릿수를 나타냅니다.
    • ".3": 형식화된 숫자에 포함할 소수 자릿수를 지정합니다.
    • "f": 형식화할 값이 부동 소수점 숫자임을 나타냅니다.

    따라서 형식 문자열 “%1.3f”을 사용하여 최소 너비가 1자리이고 정밀도가 소수점 이하 3자리인 부동 소수점 숫자의 형식을 지정할 수 있습니다.

  • 이제 VEX IQ Brain(2세대)에 내장된 관성 센서의 타이머와 가속도 값을 읽은 다음 해당 데이터를 지정된 형식으로 data_buffer 변수에 추가할 수 있습니다.

    image7.png

    참고: "\n"는 개행 문자입니다. 여기서 줄이 끝나고 새 줄이 시작됨을 나타냅니다.

  • 그런 다음 특정 수의 데이터 항목을 data_buffer 변수에 기록하기 위해 for 루프 사용하여 데이터를 가져오고 여러 반복 동안 데이터를 data_buffer 변수에 추가하는 명령을 반복적으로 실행할 수 있습니다. 우리의 전략은 변수 numOfDataEntries 의 값을 사용하여 반복 횟수를 결정하는 것입니다.

    이미지12.png

  • 지금까지 우리 프로그램은 가능한 한 빨리 데이터를 기록했습니다. 그러나 우리는 특정 시간 간격으로 데이터를 기록하고 싶습니다. 따라서 루프 의 에서 wait() 함수를 사용하여 프로그램을 일시 중지하고 두 판독값 사이에 특정 시간 간격을 추가할 수 있습니다. 시간 간격의 값을 결정하기 위해 변수 polling_delay_msec 의 값을 사용합니다.

    image8.png

축하해요! VEX Brain에 내장된 관성 센서로부터 판독값(가속도 데이터)을 가져오는 프로그램을 완료했습니다. 다음으로 SD 카드의 CSV 파일에 데이터를 쓰는 방법을 살펴보겠습니다.

이미지1.png




VEX Brain에 SD 카드 연결하기

SD 카드의 파일에 데이터를 쓰기 전에 먼저 VEX Brain의 SD 카드 슬롯에 SD 카드를 삽입하세요.

이미지2.png

참고: 데이터 쓰기를 위해 SD 카드를 FAT32로 포맷하세요. 32GB 이하의 SD 카드 사용을 권장합니다.

적절한 조건에서 SD 카드의 파일에 데이터 쓰기가 수행될 수 있도록 하려면 SD 카드가 VEX IQ Brain(2세대)에 올바르게 삽입되었는지 확인하는 코드를 추가해야 합니다.

  • SD 카드가 삽입되었는지 확인하려면 Brain.sdcard.is_inserted() 함수를 사용하세요. SD 카드가 삽입되지 않은 경우 VEX IQ 브레인 화면에 해당 메시지를 표시하고 프로그램을 보류합니다.

    image17.png


    참고: Brain.sdcard.is_inserted() 함수는 SD 카드가 Brain에 삽입되면 True를 반환합니다.

SD 카드의 CSV 파일에 데이터 쓰기

지금까지 우리 프로그램은 VEX IQ Brain(2세대)을 사용하여 데이터를 수집할 수 있습니다. 데이터 로깅 프로젝트를 완료하려면 향후 조사 및 분석을 위해 SD 카드의 CSV(쉼표로 구분된 값) 파일에 데이터를 기록해야 합니다.

  • 다양한 유형의 데이터를 CSV 파일에 쓸 때 각 열에 어떤 유형의 데이터가 포함되어 있는지 알고 싶습니다. 이를 위해 데이터를 기록하기 전에 CSV 헤더 텍스트를 data_buffer 변수에 추가할 수 있습니다.
    따라서 변수를 선언하는 코드를 추가합니다. csvHeaderText CSV 헤더 텍스트를 저장하여 CSV 파일의 열 이름을 지정하고 변수 sd_file_name 에 쓸 CSV 파일의 이름을 담습니다. SD 카드.

    이미지10.png

참고: 헤더가 data_buffer 변수에 저장된 데이터와 동일한 순서인지 확인하세요.

  • 그런 다음 데이터 수집을 위해 루프앞에 있는 data_buffer 문자열에 CSV 헤더 텍스트를 추가합니다.

    이미지15.png

  • SD 카드의 파일에 데이터를 쓰기 전에 먼저 Brain.sdcard.savefile() 함수 사용법을 이해해 봅시다.

    이미지4.png


    이 명령어는 data_buffer 변수에 저장된 데이터를 SD 카드의 명명된 CSV 파일에 씁니다.
    분석해 보겠습니다.
    • Brain.sdcard.savefile(): 이 함수는 바이트 배열을 SD 카드의 명명된 파일에 저장합니다. 이 함수는 파일에 기록된 바이트 수를 반환합니다.

    • sd_file_name: 함수의 첫 번째 매개변수입니다. 쓸 파일의 이름을 나타냅니다. 이 프로젝트에서는 파일 이름이 변수 sd_file_name에 저장됩니다.

    • bytearray(datat_buffer,'utf-8'): 함수의 두 번째 매개변수입니다. 파일에 기록될 bytearray를 나타냅니다.

        • bytearray(): 이 메서드는 변경 가능한 bytearray를 생성합니다. 이 명령어에서는 인코딩을 지정하여 문자열을 바이트 배열로 변환하는 데 사용합니다.
        • data_buffer: 메소드의 첫 번째 매개변수입니다. bytearray로 변환할 소스를 나타냅니다. 이 프로젝트에서 소스는 변수 data_buffer에 저장된 데이터입니다. 
        • 'utf-8': 메소드의 두 번째 매개변수입니다. 문자열을 인코딩하는 데 사용되는 지정된 인코딩을 나타냅니다. 이 명령어의 인코딩은 'utf-8'입니다. 
  • 데이터 수집을 위한 for 루프 이후에 Brain.sdcard.savefile() 함수를 사용하여 data_buffer 변수에 저장된 데이터를 SD 카드의 CSV 파일에 씁니다. 또한 Brain.sdcard.savefile() 함수의 반환 값을 확인하는 코드를 추가하여 데이터가 파일에 성공적으로 기록되었는지 확인하고 해당 메시지를 VEX IQ Brain Screen에 표시하여 실제 시간 피드백.

    image6.png


    참고: Brain.sdcard.savefile() 함수는 파일에 기록된 바이트 수를 반환합니다. 이 프로젝트에서는 이를 사용하여 수집된 데이터를 CSV 파일에 기록하므로 파일에 기록되는 바이트 수는 0보다 커야 합니다. 즉, Brain.sdcard.savefile() 함수가 0을 반환하면 데이터가 파일에 성공적으로 기록되지 않았다고 결론을 내릴 수 있습니다. 그렇지 않으면 데이터가 파일에 기록되었습니다.

축하해요! VEX IQ Brain(2세대)으로 가속도 데이터를 수집하여 SD 카드에 CSV 파일로 저장하는 데이터 로깅 프로젝트를 개발했습니다. 다음으로 데이터 분석을 위해 CSV 파일을 여는 방법을 살펴보겠습니다. 

이미지16.png

데이터 분석을 위해 CSV 파일 열기

데이터가 SD 카드의 CSV 파일에 기록되면 스프레드시트 애플리케이션을 사용하여 파일을 열어 데이터를 읽고 분석할 수 있습니다. 

참고: 가장 일반적인 스프레드시트 애플리케이션 중 두 가지는 Google Sheets와 Microsoft Excel입니다. 이 문서에서는 Google 스프레드시트(웹 기반)를 사용하여 SD 카드에 있는 CSV 파일을 엽니다. 다른 애플리케이션을 사용하는 과정도 비슷합니다.

  • VEX IQ Brain의 SD 카드 슬롯에서 SD 카드를 제거하세요. 컴퓨터에 Micro SD 카드 슬롯이 내장되어 있는 경우 해당 슬롯에 SD 카드를 직접 삽입할 수 있습니다. 그렇지 않은 경우 SD 카드를 SD 카드 어댑터에 삽입한 다음 어댑터를 컴퓨터에 연결하십시오. 
  • Google 계정에 로그인하고 Google 스프레드시트를 엽니다. 새 스프레드시트를 만듭니다.
  • 스프레드시트에서 "파일" 메뉴를 열고 "가져오기" -> "업로드" -> "찾아보기" 버튼을 선택한 다음 컴퓨터에서 CSV 파일을 선택합니다. CSV 파일을 업로드한 후 “데이터 가져오기” 버튼을 클릭합니다. 데이터를 가져온 후 “지금 열기” 클릭하면 CSV 파일로 수집된 데이터를 볼 수 있습니다.

    이미지11.png

  • (선택 사항) 데이터를 분석하는 쉬운 방법 중 하나는 그래프를 그린 다음 데이터의 추세를 찾는 것입니다. 스프레드시트에서 “삽입” 메뉴를 열고 “차트”를 선택하여 CSV 파일의 데이터를 이용하여 그래프를 그립니다. 다음 그래프는 VEX IQ Brain(2세대)로 수집한 가속도 데이터의 결과입니다.

    image3.png


    참고: 차트 편집기 을 사용하여 다른 차트 유형을 선택하거나 필요에 따라 차트를 편집할 수 있습니다.

지금까지 VEX IQ Brain(2세대)로 데이터를 수집하여 SD 카드에 CSV 파일로 저장하는 데이터 로깅 프로젝트를 완료했습니다. 또한 Google Sheets를 사용하여 SD 카드에 있는 CSV 파일을 읽는 방법과 추가 분석을 위한 그래프를 만드는 방법도 배웠습니다. 다음은 무엇입니까? 데이터 로깅을 위해 VEX 로봇을 사용하여 더욱 흥미로운 실험을 계획하고 변화하는 환경 요인이 다양한 유형의 데이터에 어떤 영향을 미치는지 관찰하고 우리 주변 세계에 대해 더 깊이 이해해 봅시다.

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

Last Updated: