テクノロジー

img_technologyTop01

製品をもっと詳しく知りたい方へ
技術研究所

IRセンサーの利用方法②-Seek(ビーコン)モード

EV3RTパッケージ β7ではEV3のIRセンサーとビーコンが制御できるようになりました。

 

(2017/04/27現在、EV3RTパッケージはβ7が最新です。)
EV3RTパッケージのダウンロードはこちら
http://dev.toppers.jp/trac_user/ev3pf/wiki/Download#ダウンロード

 

ここではSeek(ビーコン)モードの利用方法を紹介します。
Distance(接近度)モードの利用方法はこちらを、
Remote(遠隔)モードの利用方法はこちらをご覧ください。

 

Seek(ビーコン)モードでは、IRセンサーでビーコンの距離と方位を測定します。

 

IRセンサーでビーコンの距離と方位を測定する関数は以下のとおりです。

関数 ir_seek_t ev3_infrared_sensor_seek ( sensor_port_t port )
引数 port:センサーポート
戻り値 全て(4つ)のチャンネルの方位と距離。戻り値は構造体ir_seek_tに格納します。
解説 IRセンサーでIRビーコンの方位と距離を測定します。
不正なセンサーポートを指定した場合、0の方位と-128の距離を返します。

 

戻り値を格納する構造体は以下のとおりです。

構造体 ir_seek_t
フィールド int8_t heading [4]:全て(4つ)のチャンネルの方位(-25~25)
int8_t distance [4]:全て(4つ)のチャンネルの距離
(0~100または-128)

 

以下のプログラムはビーコンの距離と方位を測定してEV3の画面に表示します。
測定する

#include “ev3api.h”
#include “app.h”

 

#if defined(BUILD_MODULE)
#include “module_cfg.h”
#else
#include “kernel_cfg.h”
#endif

 

// センサーのポートを設定
#define ir_sensor EV3_PORT_4

 

// 待機時間の設定 [msec]
const uint32_t WAIT_TIME_MS = 100;

 

void run_task(intptr_t unused)
{
 // IRビーコンの各チャンネルの方位と距離をLCDに表示する。
 ir_seek_t ir_seek_val;
 int ch = 0;
 char ch_str[20];
 char h_str[20];
 char d_str[20];
 ev3_lcd_draw_string( “Channel select: ” , 0 , 0 );
 ev3_lcd_draw_string( “up:1 right:2 down:3 left:4” , 0 , 10 );
 ev3_lcd_draw_string( “CH:” , 0 , 30 );
 ev3_lcd_draw_string( “Heading:” , 0 , 40 );
 ev3_lcd_draw_string( “Distance:” , 0 , 50 );

 

 while (!ev3_button_is_pressed(ENTER_BUTTON)) {
  // ビーコンのチャンネルをEV3のボタンで切り替える
  // 上:1CH、右:2CH、下:3CH、左:4CH
  if (ev3_button_is_pressed(UP_BUTTON)){
   ch = 0;
  } else if (ev3_button_is_pressed(RIGHT_BUTTON)) {
   ch = 1;
  } else if (ev3_button_is_pressed(DOWN_BUTTON)) {
   ch = 2;
  } else if (ev3_button_is_pressed(LEFT_BUTTON)) {
   ch = 3;
  }

 

  // ビーコンの距離と方位を取得
  ir_seek_val = ev3_infrared_sensor_seek(ir_sensor);
  // 選択されたチャンネルの情報をEV3の画面に表示
  sprintf(ch_str, “%d”, ch + 1);
  sprintf(h_str , “%d “, ir_seek_val.heading[ch] );
  sprintf(d_str , “%d “, ir_seek_val.distance[ch]);
  ev3_lcd_draw_string( ch_str , 20 , 30 ); // チャンネル
  ev3_lcd_draw_string( h_str , 60 , 40 ); // 方位
  ev3_lcd_draw_string( d_str , 60 , 50 ); // 距離

 

  tslp_tsk(WAIT_TIME_MS);
 }
}

 

void main_task(intptr_t unused) {
 // センサーの設定
 ev3_sensor_config( ir_sensor , INFRARED_SENSOR );

 

 // run_taskを開始する
 act_tsk(RUN_TASK);
}

※サンプルプログラムは一例として紹介しています。誤り等が含まれていた場合はご了承ください。

(2017/04/27現在)

お問い合わせ

CONTACT

株式会社アフレル

本社/カスタマーセンター

〒918-8231 福井市問屋町3-111
TEL.0776-25-0303 FAX.0776-25-0309 info@afrel.co.jp
カスタマーセンター電話受付  9:30-17:30 (土日・祝日・年末年始を除く) MAP

東京支社

〒103-0001
東京都中央区日本橋小伝馬町2-8 新小伝馬町ビル5F
TEL.03-6661-9251 FAX.03-3249-3741 MAP

大阪事業所

〒532-0011
大阪府大阪市淀川区西中島3-7-8 NLC新大阪17号館302
TEL.06-4805-8788 FAX.06-4805-8789 MAP
  • 正規代理店

    LEGO education logo

  • PITSCO logo

  • NI logo

  • virtual robotics toolkit logo

資料内容の無断転載、複製を禁じます。
製作・著作 株式会社アフレル

Copyright 2017 Afrel Co.,Ltd. All Rights Reserved.

© LEGO, the LEGO logo, MINDSTORMS and the MINDSTROMS logo are trademarks of the LEGO Group.
© 2017 The LEGO Group.
レゴ、レゴのロゴマーク、レゴ マインドストームは、 レゴグループの登録商標です。