PD実践2021:ジャイロセンサの使い方

ジャイロセンサの使い方を学びます。

  • API
    • ポート4のジャイロセンサの角位置をリセットする。
      •  ev3_gyro_sensor_reset(EV3_PORT_4);
    •  ポート4のジャイロセンサで角度[°]を測定する。
      •  int16_t rate = ev3_gyro_sensor_get_angle(EV3_PORT_4);
    •  ポート4のジャイロセンサで角速度[°/s]を測定する。
      •  int16_t rate = ev3_gyro_sensor_get_rate(EV3_PORT_4);
  • サンプルプログラム
    1.  /gyro_angle/app.c:ジャイロセンサーの角位置の計測値をLCDに表示する。
      #include "ev3api.h"
      #include "app.h"
      
      #define GYRO_PORT EV3_PORT_4
      
      void main_task(intptr_t exinf) {
          int16_t angle;                                      /* 角位置の値[deg] */
          char angle_str[32];                                 /* 角位置を表示するための文字列 */
      	
          ev3_sensor_config(GYRO_PORT, GYRO_SENSOR);          /* PORTにジャイロセンサを設定 */
          ev3_lcd_set_font(EV3_FONT_MEDIUM);                  /* LCDフォント設定 */
          ev3_gyro_sensor_reset(GYRO_PORT);                   /* ジャイロセンサの角位置をゼロにリセット */
      	
          while(1){
      	angle = ev3_gyro_sensor_get_angle(GYRO_PORT);   /* 角位置を取得 */
      	sprintf(angle_str, "ANGLE[deg]: %4d", angle);
      	syslog(LOG_NOTICE, "angle=%d", angle);          /* ログ取得 */
      	ev3_lcd_draw_string(angle_str, 0, 10);          /* 角位置の値を表示 */
      	tslp_tsk(10000);                                /* 10000us刻みで実行 */
          }
      	
          ext_tsk();                                          /* タスク終了処理 */
      }
      
    2.  /gyro_rate/app.c:ジャイロセンサーの角速度の計測値をLCDに表示する。
      #include "ev3api.h"
      #include "app.h"
      
      #define GYRO_PORT EV3_PORT_4
      
      void main_task(intptr_t exinf) {
          int16_t angular_velocity;                                    /* 角速度の値[deg/s] */
          char angular_velocity_str[32];                               /* 角速度を表示するための文字列 */
      	
          ev3_sensor_config(GYRO_PORT, GYRO_SENSOR);                  /* PORT1にジャイロセンサを設定 */
          ev3_lcd_set_font(EV3_FONT_MEDIUM);                           /* LCDフォント設定 */
          ev3_gyro_sensor_reset(GYRO_PORT);                           /* ジャイロセンサの角位置をゼロにリセット */
      	
          while(1){
      	angular_velocity = ev3_gyro_sensor_get_rate(GYRO_PORT); /* 角速度を取得 */
      	sprintf(angular_velocity_str, "RATE[deg/s]: %d", angular_velocity);
      	ev3_lcd_draw_string(angular_velocity_str, 0, 10);        /* 角速度の値を表示 */
      	syslog(LOG_NOTICE, "RATE[deg/s]: %d", angular_velocity);
      	tslp_tsk(10000);                                         /* 10000us刻みで実行 */
          }
      	
          ext_tsk();                                                   /* タスク終了処理 */
      }
      
  •  演習
    • ジャイロセンサーをEV3(ポート1)に接続した後、サンプルプログラム1をEV3にアップロードし動作を確認する。
    • ジャイロセンサーをEV3(ポート1)に接続した後、サンプルプログラム2をEV3にアップロードし動作を確認する。
  • 参考

終わり

コメント

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