우리는 .NET의 Lego Mindstorms EV3를 사용하여 작업합니다. 두 개 이상의 EV3 브릭 연결 Wi-Fi를 통해 연결

USB 연결

LEGO Mindstorms EV3는 USB 연결을 통해 PC 또는 다른 EV3에 연결할 수 있습니다. 이 경우 연결 속도와 안정성은 Bluetooth를 포함한 다른 방법보다 좋습니다.

LEGO Mindstorms EV3에는 두 개의 USB 포트가 있습니다.

데이지 체인 모드에서 LEGO EV3와 다른 LEGO EV3 블록 간의 통신.

데이지 체인 모드는 두 개 이상의 LEGO EV3 블록을 연결하는 데 사용됩니다.

이 모드:

  • 둘 이상의 LEGO Mindstorms EV3를 연결하도록 설계되었습니다.
  • 더 많은 센서, 모터 및 기타 장치를 연결하는 역할을 합니다.
  • 여러 LEGO Mindstorms EV3(최대 4개) 간의 통신을 허용하며 최대 16개의 외부 포트와 동일한 수의 내부 포트를 제공합니다.
  • 주요 LEGO Mindstorms EV3에서 전체 체인을 제어할 수 있습니다.
  • Wi-Fi 또는 Bluetooth가 활성화되어 있으면 작동할 수 없습니다.

데이지 체인 연결 모드를 활성화하려면 프로젝트 설정 창으로 이동하여 확인란을 선택하세요.

이 모드를 선택하면 모든 모터에 대해 사용할 EV3 블록과 필요한 센서를 선택할 수 있습니다.

표에는 EV3 블록 사용 옵션이 나와 있습니다.

행동

미디엄 모터

큰 모터

조종

독립경영

자이로스코프

적외선

초음파

모터 회전

온도

에너지 미터

소리

블루투스를 통한 연결

Bluetooth를 사용하면 LEGO Mindstorms EV3를 PC, 기타 LEGO Mindstorms EV3, 스마트폰 및 기타 Bluetooth 장치에 연결할 수 있습니다. Bluetooth를 통한 통신 범위는 최대 25m입니다.

하나의 LEGO Mindstorms EV3에 최대 7개의 블록을 연결할 수 있습니다. EV3 마스터 브릭을 사용하면 각 EV3 슬레이브에 메시지를 보내고 받을 수 있습니다. EV3 슬레이브는 EV3 마스터 브릭에만 메시지를 보낼 수 있으며 서로에게는 보낼 수 없습니다.

Bluetooth를 통한 EV3 연결 순서

Bluetooth를 통해 두 개 이상의 EV3 블록을 서로 연결하려면 다음 단계를 수행해야 합니다.

1. 탭을 엽니다 설정.

2. 선택 블루투스그리고 가운데 버튼을 누르세요.

3. 우리는 체크박스 시계블루투스.

4. 블루투스 표시("<") виден на верхней левой стороне.

5. 필요한 수의 EV3 브릭에 대해 위 절차를 수행합니다.

6. 연결 탭으로 이동합니다.

7. 검색 버튼을 클릭합니다:

8. 연결하려는(또는 연결하려는) EV3를 선택하고 가운데 버튼을 누릅니다.

9. 첫 번째와 두 번째 블록을 액세스 키로 연결합니다.

모든 작업을 올바르게 수행하면 아이콘이 왼쪽 상단에 나타납니다.<>", 두 개 이상의 다른 EV3 블록이 있는 경우 동일한 방법으로 연결합니다.

LEGO EV3를 끄면 연결이 끊어지고 모든 단계를 반복해야 합니다.

중요: 각 블록에는 자체 프로그램이 작성되어야 합니다.

예제 프로그램:

첫 번째 블록: 터치 센서를 누르면 첫 번째 EV3 블록이 3초 지연 후 두 번째 블록(메인 블록)에 텍스트를 전송합니다.

블록 2의 예제 프로그램:

두 번째 블록은 첫 번째 블록에서 텍스트를 받기를 기다리고, 일단 텍스트를 받으면 10초 동안 단어(이 예에서는 "Hello"라는 단어)를 표시합니다(슬레이브 블록).

Wi-Fi를 통해 연결

Wi-Fi 동글을 EV3의 USB 포트에 연결하면 더 먼 거리의 통신이 가능합니다.

Wi-Fi를 사용하려면 USB 커넥터(Wi-Fi 어댑터(Netgear N150 무선 어댑터(WNA1100))를 사용하여 EV3 블록에 특수 모듈을 설치하거나 Wi-Fi 동글을 연결할 수 있습니다.

화면 모드 선택

모드 선택
블록 텍스트 필드
입력
미리보기 버튼

모드 선택기를 사용하여 보려는 텍스트 또는 그래픽 유형을 선택하십시오. 모드를 선택한 후 입력값을 선택할 수 있습니다. 사용 가능한 입력은 모드에 따라 달라집니다. 모드와 입력은 아래에 설명되어 있습니다.

미리보기 버튼을 클릭하면 디스플레이 블록이 EV3 화면에 표시되는 내용을 미리 볼 수 있습니다. 블록에 대한 입력 값을 선택하는 동안 뷰를 열어 둘 수 있습니다.

화면 좌표

많은 화면 블록 모드에서는 X 및 Y 좌표를 사용하여 요소의 위치를 ​​결정합니다. 좌표는 EV3 브릭 화면의 픽셀 위치를 결정합니다. 위치 (0, 0)은 아래 이미지와 같이 화면의 왼쪽 상단에 있습니다.

화면 크기: 너비 178픽셀, 높이 128픽셀. X 좌표 값의 범위는 왼쪽 화면의 0부터 오른쪽 화면의 177까지입니다. Y좌표 값의 범위는 상단의 0부터 하단의 127까지이다.

팁과 요령

화면 블록의 왼쪽 상단에 있는 미리보기 버튼을 사용하면 올바른 화면 좌표를 찾는 데 도움이 됩니다.

텍스트 - 픽셀

텍스트 - 픽셀 모드를 사용하면 EV3 브릭 화면의 어느 곳에나 텍스트를 표시할 수 있습니다.

재설정 창

윈도우 초기화 모드는 EV3 브릭 화면을 프로그램이 실행되는 동안 표시되는 표준 정보 화면으로 되돌립니다. 이 화면에는 프로그램 이름과 기타 피드백 정보가 표시됩니다. EV3 브릭에서 프로그램을 실행하면 프로그램의 첫 번째 화면 블록이 실행되기 전에 이 화면이 나타납니다.

표시된 요소의 가시성 보장

EV3 프로그램이 완료되면 EV3 브릭 화면이 사라지고 EV3 브릭 메뉴 화면으로 돌아갑니다. 프로그램에 표시된 모든 텍스트나 그래픽이 지워집니다. 예를 들어, 프로그램에 "스크린" 블록이 하나만 있고 다른 블록은 없다면 프로그램 종료 직후 화면이 너무 빨리 지워지므로 "스크린" 블록의 결과를 볼 수 없습니다.

프로그램이 완료된 후에도 화면이 계속 표시되도록 하려면 다음 예와 같이 프로그램이 즉시 종료되지 않도록 프로그램 끝에 블록을 추가해야 합니다.

여러 항목 표시

여러 텍스트나 그래픽 요소를 화면에 동시에 표시하려면 요소 사이에 EV3 브릭 화면을 지우지 않는 것이 중요합니다. 스크린 블록의 각 모드에는 클리어 스크린 입력이 있습니다. Clear Screen이 true인 경우 항목이 표시되기 전에 전체 화면이 지워집니다. 즉, 여러 항목을 표시하려면 첫 번째 항목을 제외한 모든 화면 블록에 대해 Clear Screen을 False로 설정해야 합니다.

숫자 표시

프로그램에 숫자 값을 표시하려면 데이터 버스를 텍스트 디스플레이 블록의 텍스트 입력에 연결하십시오. 숫자 데이터 버스는 데이터 버스 유형 변환을 사용하여 자동으로 텍스트로 변환됩니다(섹션 참조).

디자이너의 마이크로컴퓨터를 비글본이나 다른 것으로 교체한다는 아이디어는 새로운 것이 아닙니다. 하지만 EV3가 출시되면서 100% 아날로그를 얻을 수 있을 뿐만 아니라 레고로봇의 성능을 향상시키는 것도 가능해졌습니다.

프로젝트 비디오 프레젠테이션:

E VB는 하드웨어 및 소프트웨어 수준 모두에서 Lego Mindstorms Ev3 시스템을 완벽하게 지원하며 모든 LEGO 센서 및 모터와 100% 호환됩니다. 이 블록은 Lego Mindstorms EV3 블록과 동일하게 작동합니다.

비글본 블랙— 단일 보드 Linux 컴퓨터.라즈베리파이의 경쟁자입니다. 강력한 프로세서 AM335x 720MHz ARM® 프로세서, 대형 입력/출력 수, 추가 보드를 통해 기능을 확장할 수 있습니다.

Lego Mindstorms EV3에는 ARM9(TI Sitara AM180x) 300MHz 프로세서가 있으므로 ARM Cortex-A8(TI Sitara AM335x) 1GHz BeagleBone Black 프로세서로 이동합니다. 생산성을 높인다, 추가 확장 카드 연결도 가능해졌습니다!

가장 중요한 점은 레고 마인드스톰 EV3에는 모든 소프트웨어와 하드웨어에 대한 공개 설명이 있다는 것입니다!

예를 들어, 유명한 루빅스 큐브 해결 로봇이 조립되어 시연되었습니다. EV3 대신에 개발된 EVB만 설치했습니다. 다음 동영상을 시청해 보세요.

프로젝트 작성자는 이미 EVB를 생산 및 판매하고 있습니다. 그들은 2015년 4월 말까지 생산을 대폭 확대할 계획입니다. 또한 여러 호환 가능한 센서를 개발하여 생산하고 있습니다.

전통적으로 플랫폼을 기반으로 구축된 로봇은 레고 마인드스톰 EV3는 LabVIEW 그래픽 환경을 사용하여 프로그래밍됩니다. 이 경우 프로그램은 EV3 컨트롤러에서 실행되고 로봇은 자율적으로 작동합니다. 여기서는 컴퓨터에서 실행되는 .NET 플랫폼을 사용하여 로봇을 제어하는 ​​다른 방법에 대해 설명하겠습니다.

하지만 프로그래밍을 시작하기 전에 이것이 유용할 수 있는 몇 가지 사례를 살펴보겠습니다.

  • 노트북에서 로봇을 원격으로 제어해야 합니다(예: 버튼 누르기).
  • EV3 컨트롤러에서 데이터를 수집하고 이를 외부 시스템(예: IoT 시스템)에서 처리해야 합니다.
  • .NET에서 제어 알고리즘을 작성하고 EV3 컨트롤러에 연결된 컴퓨터에서 실행하려는 기타 상황

.NET용 LEGO MINDSTORMS EV3 API

EV3 컨트롤러는 직렬 포트로 명령을 전송하여 외부 시스템에서 제어됩니다. 명령 형식 자체는 통신 개발자 키트에 설명되어 있습니다.

하지만 이 프로토콜을 수동으로 구현하는 것은 지루합니다. 따라서 Brian Peek가 신중하게 작성한 기성 .NET 래퍼를 사용할 수 있습니다. 이 라이브러리의 소스 코드는 Github에서 호스팅되며 즉시 사용 가능한 패키지는 Nuget에서 찾을 수 있습니다.

EV3 컨트롤러에 연결

Brick 클래스는 EV3 컨트롤러와 통신하는 데 사용됩니다. 이 객체를 생성할 때 ICommunication 인터페이스 구현을 생성자(EV3 컨트롤러에 연결하는 방법을 설명하는 객체)에 전달해야 합니다. UsbCommunication, BluetoothCommunication 및 NetworkCommunication(WiFi 연결) 구현이 가능합니다.

가장 널리 사용되는 연결 방법은 Bluetooth를 통한 연결입니다. 이 연결 방법을 자세히 살펴 보겠습니다.

Bluetooth를 통해 프로그래밍 방식으로 컨트롤러에 연결하려면 운영 체제 설정을 사용하여 컨트롤러를 컴퓨터에 연결해야 합니다.

컨트롤러가 연결된 후 Bluetooth 설정으로 이동하여 COM 포트 탭을 선택하십시오. 우리는 컨트롤러를 찾았습니다. 나가는포트. BluetoothCommunication 객체를 생성할 때 이를 지정하겠습니다.

컨트롤러에 연결하는 코드는 다음과 같습니다.

공용 비동기 작업 Connect(ICommunication 통신) ( var communications = new BluetoothCommunication("COM9"); var brick = _brick = new Brick(communication); wait _brick.ConnectAsync(); )

선택적으로 컨트롤러에 대한 연결 시간 초과를 지정할 수 있습니다.

_brick.ConnectAsync(TimeSpan.FromSeconds(5))를 기다립니다.

USB 또는 WiFi를 통한 장치 연결은 UsbCommunication 및 NetworkCommunication 개체가 사용된다는 점을 제외하고 동일한 방식으로 수행됩니다.

컨트롤러에서 수행되는 모든 추가 작업은 Brick 개체를 통해 수행됩니다.

엔진을 돌려보자

EV3 컨트롤러에서 명령을 실행하기 위해 Brick 개체의 DirectCommand 속성에 액세스합니다. 먼저 엔진을 시동해 보겠습니다.

모터가 컨트롤러의 포트 A에 연결되어 있다고 가정하고 이 모터를 50% 전력으로 실행하면 다음과 같습니다.

_brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50)를 기다립니다.

모터를 제어하는 ​​다른 방법이 있습니다. 예를 들어 StepMotorAtPowerAsync() 및 StepMotorAtSpeedAsync() 메서드를 사용하여 모터를 지정된 각도로 회전할 수 있습니다. 시간, 속도, 전력 등에 따라 모터를 켜는 모드를 변형하는 여러 가지 방법이 있습니다.

강제 중지는 StopMotorAsync() 메서드를 사용하여 수행됩니다.

_brick.DirectCommand.StopMotorAsync(OutputPort.A, true)를 기다립니다.

두 번째 매개변수는 브레이크 사용을 나타냅니다. false로 설정하면 모터가 관성 정지합니다.

센서에서 값 읽기

EV3 컨트롤러에는 센서 연결을 위한 4개의 포트가 있습니다. 이 외에도 모터에는 인코더가 내장되어 있어 센서로 사용할 수 있습니다. 결과적으로 값을 읽을 수 있는 포트가 8개 있습니다.

값을 읽기 위한 포트는 Brick 객체의 Ports 속성을 통해 접근할 수 있습니다. 포트는 컨트롤러에서 사용할 수 있는 포트 모음입니다. 따라서 특정 포트를 사용하려면 해당 포트를 선택해야 합니다. InputPort.One ...InputPort.Four는 센서 포트이고,InputPort.A...InputPort.D는 모터 인코더입니다.

Var 포트1 = _brick.Ports;

EV3의 센서는 다양한 모드에서 작동할 수 있습니다. 예를 들어, EV3 컬러 센서를 사용하여 주변광을 측정하거나, 반사광을 측정하거나, 색상을 감지할 수 있습니다. 따라서 센서에 정확히 어떻게 사용하고 싶은지 "알려주기" 위해서는 센서의 모드를 설정해야 합니다.

Brick.Ports.SetMode(ColorMode.Reflective);

이제 센서가 연결되고 작동 모드가 설정되었으므로 센서에서 데이터를 읽을 수 있습니다. "원시" 데이터, 처리된 값 및 백분율 값을 얻을 수 있습니다.

부동 si = _brick.Ports.SIValue; int raw = _brick.Ports.RawValue; 바이트 백분율 = _brick.Ports.PercentValue;

SIValue 속성은 처리된 데이터를 반환합니다. 그것은 모두 어떤 센서가 사용되는지, 어떤 모드에서 사용되는지에 따라 다릅니다. 예를 들어 반사광을 측정할 때 반사광의 강도(흑백/흑백)에 따라 0부터 100까지의 값을 얻게 됩니다.

RawValue 속성은 ADC에서 얻은 원시 값을 반환합니다. 때로는 후속 처리 및 사용에 사용하는 것이 더 편리합니다. 그런데 EV3 개발 환경에서는 "원시" 값을 얻는 것도 가능합니다. 이를 위해서는 파란색 패널의 블록을 사용해야 합니다.

사용 중인 센서가 백분율로 값을 수신할 것으로 예상하는 경우 PercentValue 속성을 사용할 수도 있습니다.

일괄적으로 명령 실행

바퀴가 두 개인 로봇 카트가 있고 이를 제자리에 배치하려고 한다고 가정해 보겠습니다. 이 경우 두 바퀴는 반대 방향으로 회전해야 합니다. DirectCommand를 사용하고 두 개의 명령을 컨트롤러에 순차적으로 보내는 경우 실행 사이에 약간의 시간이 걸릴 수 있습니다.

_brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50)를 기다립니다. wait _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

이 예에서는 모터 A를 50의 속도로 회전하라는 명령을 보냅니다. 이 명령을 성공적으로 보낸 후 포트 B에 연결된 모터에 대해 동일한 작업을 반복합니다. 문제는 명령 전송이 즉시 발생하지 않는다는 것입니다. 다른 시간에 회전을 시작할 수 있습니다. 명령이 포트 B에 대해 전송되는 동안 모터 A 이미회전을 시작합니다.

모터를 동시에 회전시키는 것이 중요한 경우 "번들"로 컨트롤러에 명령을 보낼 수 있습니다. 이 경우 DirectCommand 대신 BatchCommand 속성을 사용해야 합니다.

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _brick.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); _brick.BatchCommand.SendCommandAsync()를 기다립니다.

이제 두 개의 명령이 한 번에 준비된 후 하나의 패킷으로 컨트롤러로 전송됩니다. 이 명령을 수신한 컨트롤러는 동시에 모터를 회전하기 시작합니다.

너는 어떤 다른 일을 할 수 있니

모터를 회전하고 센서 값을 읽는 것 외에도 EV3 컨트롤러에서 다양한 작업을 수행할 수 있습니다. 각각에 대해 자세히 설명하지는 않고 수행할 수 있는 작업 목록만 나열하겠습니다.

  • CleanUIAsync(), DrawTextAsync(), DrawLineAsync() 등 - EV3 컨트롤러의 내장 화면 조작
  • PlayToneAsync() 및 PlaySoundAsync() - 내장 스피커를 사용하여 사운드 재생
  • WriteFileAsync() , CopyFileAsync() , DeleteFileAsync() (SystemCommand에서) - 파일 작업

결론

.NET을 사용하여 Mindstorms EV3 로봇을 제어하는 ​​것은 "다른 세계"의 기술이 어떻게 함께 작동할 수 있는지 잘 보여줍니다. .NET용 EV3 API를 연구한 결과, 컴퓨터에서 EV3 로봇을 제어할 수 있는 작은 애플리케이션이 만들어졌습니다. 불행하게도 NXT에도 유사한 애플리케이션이 존재하지만 EV3는 이를 우회했습니다. 동시에 로봇 축구와 같은 통제된 로봇 대회에도 유용합니다.

다음 링크에서 애플리케이션을 다운로드하고 설치할 수 있습니다.