PD実践2021:カラーセンサの使い方

カラーセンサの使い方を学びます。

  • API
    • ポート2のカラーセンサを初期化
      •  ev3_sensor_config(EV3_PORT_2, COLOR_SENSOR);
      • ポート2がカラーセンサであることを設定
    •  ポート2のカラーセンサから明度(環境光)を取得。
      •  uint8_t light = ev3_color_sensor_get_ambient(EV3_PORT_2);
    •  ポート2のカラーセンサから明度(反射光)を取得
      •  uint8_t light = ev3_color_sensor_get_reflect(EV3_PORT_2);
    • ポート2のカラーセンサからカラー情報を取得
      •  colorid_t color = ev3_color_sensor_get_color(EV3_PORT_2);
  • サンプルプログラム
    • /light/app.c: カラーセンサから取得した環境光と反射光の計測値をLCDに表示する。
      #include "ev3api.h"
      #include "app.h"
      
      #define COLOR_SENSOR_PORT  EV3_PORT_2
      
      void main_task(intptr_t exinf) {
          uint8_t reflect;                                        /* 反射光の強さの値 */
          char reflect_str[32];                                   /* 反射光の強さを表示するための文字列 */
      	
          ev3_sensor_config(COLOR_SENSOR_PORT, COLOR_SENSOR);     /* ポートにカラーセンサを設定 */
          ev3_lcd_set_font(EV3_FONT_MEDIUM);                      /* LCDフォント設定 */
      
          while(1){
      	reflect = ev3_color_sensor_get_reflect(COLOR_SENSOR_PORT); /* 反射光の強さを取得 */                             
       	sprintf(reflect_str, "REFLECT: %3d", reflect);
       	ev3_lcd_draw_string(reflect_str, 0, 30);            /* 反射光の強さの値を表示 */
      	tslp_tsk(100000);                                   /* 100us刻みで実行 */
          }
      
          ext_tsk();                                              /* タスク終了処理 */
      }
      
    • /color/app.c: カラーセンサから取得したカラーの種類をLCDに表示する。
      #include "ev3api.h"
      #include "app.h"
      
      #define COLOR_SENSOR_PORT EV3_PORT_2
      
      void main_task(intptr_t exinf) {
          colorid_t color;                                        /* カラーの値 */
          char color_str[32];                                     /* 色を表示するための文字列 */
      	
          ev3_sensor_config(COLOR_SENSOR_PORT, COLOR_SENSOR);     /* PORT2にカラーセンサを設定 */
          ev3_lcd_set_font(EV3_FONT_MEDIUM);                      /* LCDフォント設定 */
      
          while(1){
      	color = ev3_color_sensor_get_color(COLOR_SENSOR_PORT);     /* カラー情報の取得 */
      	switch(color) {
      	    case COLOR_NONE:
      		sprintf(color_str, "COLOR:   NONE(%d)", color);
      		break;
      	    case COLOR_BLACK:
      		sprintf(color_str, "COLOR:  BLACK(%d)", color);
      		break;
      	    case COLOR_BLUE:
      		sprintf(color_str, "COLOR:   BLUE(%d)", color);
      		break;
      	    case COLOR_GREEN:
      		sprintf(color_str, "COLOR:  GREEN(%d)", color);
      		break;
      	    case COLOR_YELLOW:
      		sprintf(color_str, "COLOR: YELLOW(%d)", color);
      		break;
      	    case COLOR_RED:
      		sprintf(color_str, "COLOR:    RED(%d)", color);
      		break;
      	    case COLOR_WHITE:
      		sprintf(color_str, "COLOR:  WHITE(%d)", color);
      		break;
      	    case COLOR_BROWN:
      		sprintf(color_str, "COLOR:  BROWN(%d)", color);
      		break;
      	    default:
      		sprintf(color_str, "COLOR:   NONE(%d)", color);
      		break;
              }
      	ev3_lcd_draw_string(color_str, 0, 10);              /* 色表示 */
      	tslp_tsk(100000);                                   /* 100000us刻みで実行 */
          }
      	
          ext_tsk();                                              /* タスク終了処理 */
      }
      
  • 演習4
    1. カラーセンサーをEV3(ポート1)に接続した後、サンプルプログラム(/light/app.c)の動作を確認してください。
    2.  サンプルプログラムを改造し、以下の機能を実現してください。
      『カラーセンサー(環境光)の値が5以下になったら、「Finished!」を表示する。』
  • レポート1
    • 下のカラーセンサー(環境光と反射光)の組立例を組み立ててください。フタが開いたら好きな曲が流れ、閉じたら止まるプログラムを作成しよう!

      •  ヒント:この演習では、割り込みやマルチタスクプログラミングは使いません。緑の検出にすぐ反応するためには、1曲分のRingTone関数を続けて実行するのではなく、分割して実行したら、すぐ、カラーセンサーの値をチェックする必要があります。曲の周波数とテンポを2次元配列としてまとめるとスッキリしたプログラムになります。
    • カラーセンサーをEV3(ポート1)に接続した後、サンプルプログラム(/color/app.c)をEV3にアップロードし、動作を確認してください。
  • 参考

終わり

コメント

タイトルとURLをコピーしました