3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TOPPERS/EV3RTでEV3の超音波センサーを使ってみる

Last updated at Posted at 2017-02-24

TOPPERS/EV3RT環境でC言語を使って、EV3基本セット付属の超音波センサーを使ってみます。環境開発の記事はこちら

#EV3超音波センサーの特徴

EV3超音波センサーは、センサーから3cm~250cmの間にある物体までの距離を、誤差±1cmで計測してくれます。

Usonic-sensor.png

これが超音波センサーです。使用中は正面の目玉のようなパーツが赤色に発光します。
このセンサーは、正面から向かって左側から超音波を発信し、右側で超音波を受信します。
左側から発信された超音波が物体に反射して、戻ってきたものを右側で受信して距離を測定しているのです。
そのため、もし他に超音波を発信している物があり、その超音波を受信してしまうと、距離が正しく計測できません。

また、このセンサーは超音波の受信機能のみの利用が可能になっています。
この機能を使えば、開けた場所でゴール地点に超音波発振器を設置し、そこに向かって進むロボットとかも作れそうですね。

今回は、物体までの距離を測って表示するだけのアプリ(sonic-test)を作成しようと思います。
#超音波センサーと本体の接続

connect.png

上の画像のように接続しました。センサーポート1に超音波センサーをつなぎます。
今回はLCDと超音波センサーがあればアプリを作れるので、他のセンサーやモーターは必要ありません。

#ソースコード

以下ソースコードになります。センサーとセンサーポートを接続した後無限ループに入り、LCDに測定距離を表示し続けます。

app.c

/**
 ******************************************************************************
 ** ファイル名   : app.c
 ** 説明       : 距離を測定する 
 ******************************************************************************
 **/

#include "ev3api.h"
#include "app.h"
#include "stdlib.h"

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

#define DEBUG

#ifdef DEBUG
#define _debug(x) (x)
#else
#define _debug(x)
#endif


/* センサーの設定 */
static const sensor_port_t
    ultrasonic_sensor = EV3_PORT_1;

/* メインタスク */
void main_task(intptr_t unused)
{
    /* 反射光値格納用の変数 */
    static int distance = 0;
    char distance_buffer[30];

    /* ループに入る前にセンサーとセンサーポートを接続する */
    ev3_sensor_config (ultrasonic_sensor, ULTRASONIC_SENSOR);
    //ev3_lcd_set_font (EV3_FONT_MEDIUM);
    /* 接続が完了したら合図として本体LEDをオレンジ色に変える */
    ev3_led_set_color(LED_ORANGE); 

    /* ループの中に入る */
    while(1)
    {   /* 距離を測定して表示し続ける */
        /* 反射値を測って変数に格納 */
        distance = ev3_ultrasonic_sensor_get_distance(ultrasonic_sensor);
        /* 文字配列に読み取った値を格納する */
        sprintf(distance_buffer, "DISTANCE:%d   ",distance);
        /* 正面ディスプレイに文字配列の中身を描写させる */
        ev3_lcd_draw_string(distance_buffer, 0,10);
    	
    }
    ext_tsk();
}

#動作確認

distance-test.png

こんな感じで、測定対象とセンサーの間をメジャーで測定しました。

result.png

精度はかなりいいみたいです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?