今回は、mBot2プログラミングシリーズ(Python編)の第5回です。
前回は、クアッドRGBセンサーを活用したライントレースプログラムについてご紹介しました。
今回は、前回紹介しきれなかった、クアッドRGBセンサーで自己定義の色を認識させる方法や、キャリブレーション方法をご紹介します。

ライントレース用の黒色ラインの作成には、反射の少ない黒色マスキングテープがお勧めです。
(黒色マジックペンでは、反射してセンサーが黒色を認識しないことがあります)
全講座の一覧はこちら
この記事で分かること
- クアッドRGBセンサーとは何か?
- 以下のPython API
- フィルライトの発光方法
- 色を認識する方法
- キャリブレーション方法
- 各APIを使ったプログラミング例
クアッドRGBセンサーとは
クアッドRGBセンサーに関する説明は、前回の記事をご覧ください。
クアッドRGBセンサーの使用用途を次の6つに分類して、前回は1~3のライントレースでの使い方を解説しました。
今回は、残りの4~6について解説します。
- 【初級】L1とR1(中央の2つのセンサー)でライントレースする場合
- 【中級】4つ全てのセンサーでライントレースする場合
- 【上級】『偏差』を用いてライントレースする場合
- フィルライトを発光させる場合
- 色を認識させる場合
- キャリブレーションする場合
APIとは
API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。
cyberpiライブラリをインポートすることで、CyberPiや、mBot2、センサーなどの各機能を簡単に利用できます。
フィルライトを発光させる場合
フィルライト発光に関するAPI
quad_rgb_sensor.set_led(color = "white", index = 1)
フィルライトの色を設定します。
colorの設定値 | 略称 | 表示される色 |
---|---|---|
red | r | 赤 |
yellow | y | 黄 |
green | g | 緑 |
cyan | c | 藍紫 |
blue | b | 青 |
purple | p | 紫 |
white | w | 白 |
black | k | 黒 |
quad_rgb_sensor.off_led(index = 1)
フィルライトを消灯します。
色を認識させる場合
色のRGBとは
色の認識には、RGBの数値を用います。
RGBは光の三原色で、赤(Red)、緑(Green)、青(Blue)の3つの値を組み合わせて色を作ります。
各値は0から255の範囲で指定します。

色認識に関するAPI
色検出のセンサー値
mbuild.quad_rgb_sensor.get_white_sta(position, index = 1) #白の検出
mbuild.quad_rgb_sensor.get_red_sta(position, index = 1) #赤の検出
mbuild.quad_rgb_sensor.get_yellow_sta(position, index = 1) #黄の検出
mbuild.quad_rgb_sensor.get_green_sta(position, index = 1) #緑の検出
mbuild.quad_rgb_sensor.get_cyan_sta(position, index = 1) #藍紫の検出
mbuild.quad_rgb_sensor.get_blue_sta(position, index = 1) #青の検出
mbuild.quad_rgb_sensor.get_purple_sta(position, index = 1) #紫の検出
mbuild.quad_rgb_sensor.get_black_sta(position, index = 1) #黒の検出
mbuild.quad_rgb_sensor.get_custom_sta(position, index = 1) #自己定義色の検出
指定したセンサー位置における、色の検出結果を返します。
- position:検出するセンサー位置
- “middle”:L1,R1
- “all”:L2,L1,R1,R2
- 戻り値:0000から1111までの2進数に対応する0~15の範囲の整数
- 0:色を識別しない
- 1:色を識別する
センサー値 | 2進数 | 線の検出状態 |
---|---|---|
0 | 00 | ![]() |
1 | 01 | ![]() |
2 | 10 | ![]() |
3 | 11 | ![]() |
センサー値 | 2進数 | 線の検出状態 |
---|---|---|
0 | 0000 | ![]() |
1 | 0001 | ![]() |
2 | 0010 | ![]() |
3 | 0011 | ![]() |
4 | 0100 | ![]() |
5 | 0101 | ![]() |
6 | 0110 | ![]() |
7 | 0111 | ![]() |
8 | 1000 | ![]() |
9 | 1001 | ![]() |
10 | 1010 | ![]() |
11 | 1011 | ![]() |
12 | 1100 | ![]() |
13 | 1101 | ![]() |
14 | 1110 | ![]() |
15 | 1111 | ![]() |
色の検出判定
quad_rgb_sensor.is_line(ch, index = 1) #線の検出判定
quad_rgb_sensor.is_background(ch, index = 1) #背景の検出判定
quad_rgb_sensor.is_color(color = "white", ch, index = 1) #指定色の検出判定
指定したセンサーで、線/背景/指定色が検出されたかを判定します。
- ch:指定するセンサー
- “any”/”L2″/”L1″/”R1″/”R2″/”l2″/”l1″/”r1″/”r2″/4/3/2/1
- 戻り値
- True:検出した
- False:検出されない
colorの設定値 | 略称 | 検出する色 |
---|---|---|
red | r | 赤 |
yellow | y | 黄 |
green | g | 緑 |
cyan | c | 藍紫 |
blue | b | 青 |
purple | p | 紫 |
white | w | 白 |
black | k | 黒 |
色の値の検出
以下に紹介するAPIの引数の意味は次の通りです。
- 引数
- ch:指定するセンサー
- “L2″/”L1″/”R1″/”R2″/”l2″/”l1″/”r1″/”r2″/4/3/2/1
- ch:指定するセンサー
quad_rgb_sensor.get_gray(ch, index = 1)
指定したセンサーが検出したグレースケールを取得します。
グレースケール値は、光を反射する程度を値で示します。
- 戻り値:0~100
quad_rgb_sensor.get_color(ch, index = 1)
指定したセンサーが検出した色の16進数値(カラーコード)を取得します。
- 戻り値:0x000000~0xFFFFFF
これは、赤・緑・青(RGB)の順でRGB値をつなげた値です。
例えば、色の光度が、赤:0x24、緑:0x68、青:0xA0の場合、カラーコードは0x2468A0となります。
quad_rgb_sensor.get_color_sta(ch, index = 1)
指定したセンサーが検出した色の名前(文字列)を取得します。
戻り値(文字列) | 検出した色 |
---|---|
red | 赤 |
yellow | 黄 |
green | 緑 |
cyan | 藍紫 |
blue | 青 |
purple | 紫 |
white | 白 |
black | 黒 |
quad_rgb_sensor.get_light(ch, index = 1)
指定したセンサーが検出した周囲光の強度を取得します。
- 戻り値:0~100
RGB値の検出
quad_rgb_sensor.get_red(ch, index = 1) #R値の取得
quad_rgb_sensor.get_green(ch, index = 1) #G値の取得
quad_rgb_sensor.get_blue(ch, index = 1) #B値の取得
指定したセンサーが検出した色のR値/G値/B値を取得します。
- ch:指定するセンサー
- “L2″/”L1″/”R1″/”R2″/”l2″/”l1″/”r1″/”r2″/4/3/2/1
- 戻り値
- センサーが検出した色(R/G/B)の値
- 範囲:0~255
- センサーが検出した色(R/G/B)の値
色の自己定義
quad_rgb_sensor.set_custom_color(r, g, b, tolerance, index = 1)
0~255の範囲で、色をRGB値で定義します。
- r,g,b:自己定義する色のRGB値
- tolerance:自己定義色の許容値
許容値=10とした場合 | R | G | B |
---|---|---|---|
設定 | 255 | 50 | 50 |
RGB値の上限 | 255 | 60 | 60 |
RGB値の下限 | 245 | 40 | 40 |
特定の色を認識するプログラム

mBot2のセットに付属されているコースには、赤・黄・緑・青のポイントがあります。
これらを認識するためには、以下のようにプログラムします。
from cyberpi import quad_rgb_sensor
while 1:
if quad_rgb_sensor.is_color("red", "any", 1) == True:
#どれかのセンサーが「赤」を検出したときの動作
elif quad_rgb_sensor.is_color("blue", "any", 1) == True:
#どれかのセンサーが「青」を検出したときの動作
elif quad_rgb_sensor.is_color("yellow", "any", 1) == True:
#どれかのセンサーが「黄」を検出したときの動作
elif quad_rgb_sensor.is_color("green", "any", 1) == True:
#どれかのセンサーが「緑」を検出したときの動作
センサーの場所を "any"
に設定することで、4つのセンサーのうちのどれかが指定した色を検出すると、任意の動作をさせることができます。
自己定義の色を作成するプログラム
自己定義の色を作成するといっても、そもそも定義させたい色のRGB値が分からなければ、自己定義できません。
ここでは、定義する色のRGB値をセンサーで読み取った後に、そのRGB値で定義するプログラムをご紹介します。
from cyberpi import quad_rgb_sensor, event
@event.is_press('b')
def callback():
#RGB値の検出
r = quad_rgb_sensor.get_red("L1",1)
g = quad_rgb_sensor.get_green("L1",1)
b = quad_rgb_sensor.get_blue("L1",1)
#色の自己定義
quad_rgb_sensor.set_custom_color(r, g, b, 20, 1) #許容差±20
定義させたい色の上にmBot2(このプログラムではセンサーL1)を置き、Bボタンを押すことで色を定義できます。
例題:自己定義した色でmBot2を動作させる
- 例題
- 解答例
任意の色のRGB値をクアッドRGBセンサーで読み取って、その値を自己定義してみましょう。
自己定義した色を認識して、mBot2を動作制御するプログラムを自由に作ってみましょう。
自己定義した色のRGB値はCyberPiのディスプレイに表示させてみてください。
from cyberpi import quad_rgb_sensor, event, table, mbot2
@event.is_press('b')
def callback():
#RGB値の検出
r = quad_rgb_sensor.get_red("L1",1)
g = quad_rgb_sensor.get_green("L1",1)
b = quad_rgb_sensor.get_blue("L1",1)
#色の自己定義
quad_rgb_sensor.set_custom_color(r, g, b, 20, 1) #許容差±20
#ディスプレイ表示
table.add(1,1,"R値")
table.add(2,1,"G値")
table.add(3,1,"B値")
table.add(1,2,r)
table.add(2,2,g)
table.add(3,2,b)
『色の自己定義プログラム』は例で示したプログラムに、CyberPiディスプレイへの表示処理を追加しています。
@event.is_press('a')
def callback():
while 1:
if quad_rgb_sensor.get_custom_sta("middle", 1): #自己定義色の検出
mbot2.EM_stop("all")
else:
mbot2.forward(50)
『自己定義した色での動作プログラム』は、L1,R1が「自己定義した色」を検出したらmBot2を停止させます。

キャリブレーションする場合
キャリブレーションとは
キャリブレーションとは、センサーが正しい値を計測できるように調整する作業のことです。
クアッドRGBセンサーの性能は、周囲光、背景、対象物との距離などによって大きく影響を受ける場合があります。
したがって、センサーを使用する条件でキャリブレーションを実行すると、検出精度を向上させることができます。
キャリブレーションに関するAPI
quad_rgb_sensor.adjust(index = 1)
クアッドRGBセンサーのキャリブレーションを行います。
キャリブレーション方法
- 強い光ではなく、一般的な部屋の光の場所で行ってください。
- mBot2を白紙(mBot2ライントレースマップの白い部分)に置きます。
- 以下のプログラムを実行して、キャリブレーションを開始します。
from cyberpi import quad_rgb_sensor
@event.is_press('b')
def callback():
quad_rgb_sensor.adjust(1)
- キャリブレーションが完了すると、CyberPiのディスプレイに完了した旨のメッセージが表示されます。
まとめ
今回は、クアッドRGBセンサーのフィルライトの発光や、色の自己定義、キャリブレーション方法を解説しました。
これらは、基本的なプログラミングでの使用頻度は少ないかもしれませんが、応用的なプログラムを作成する際には、覚えておいて損のない内容です。
必要に応じて使用できるよう覚えておいてください。
mBlockを使ったmBot2のプログラミング方法を丁寧に解説していておススメです。
CyberPi単体でもプログラミング教育に非常に役立ちます!
