できること

ギリギリの距離で止めよう!Arduinoと距離センサで作るチキンレーサー!(第1回)

デバプラでは、これまでもArduinoの使い方や応用例をご紹介していますが、今回はArduinoでセンサを動かす電子工作を見ていきたいと思います。教えてくれるのは、デバプラでも過去に「Arduino電子工作の基本」などを連載してくれた福田和宏さんです!

◆◆◆

みなさん、こんにちは。早速ですが、マイコンと電子部品を何点か組み合わせれば、様々な作品を実現することができます。ロボットやドローンといった話題の機器から目覚まし時計やおもちゃなど、あらゆる物が作ることができるのです。今回は「チキンレーサー」という車のロボットの制作を紹介していきたいと思います。

作品の概要

01

今回の作品は、壁に向かって「チキンレーサー」と命名した車型のロボットを走らせ、ロボットを止めた場所から壁までの距離がどのくらい短かったかを競うゲームができるものです。車型のロボットはボタンで操作できるようにすることで、誰でも簡単にゲームが楽しめるようになっています。

このチキンレーサーにはモータが搭載されており、スイッチで前進します。ゲームをする人はボタンを持ち、壁ギリギリに達したところでボタンを押してチキンレーサーを止めます。

どの程度壁の手前で止められたかは、距離センサを使って計測するようにします。壁までの距離を計測すれば、複数人で遊んだ場合でも、誰がギリギリで止めたかを競うと面白いのではないでしょうか。

また、失敗したら壁にぶつかったことを検知する仕組みも用意しておきます。チキンレーサーの先頭にスイッチを取り付けておき、壁にぶつかったらスイッチが押されるようにします。もし押されたら失敗したと知らせるようにします。

02

電子部品の構成

チキンレーサーの大まかな動きを決めたら利用する電子部品を決めましょう。今回は、Arduinoを利用して制御することとします。なお、「Arduino UNO」などはサイズが大きいため、このような小型の作品に載せるには向きません。そこで、小型の「Arduino Nano」を利用することとします。「Arduino Nano」は45×18mmと人差し指の上にのせられる程度なので、サイズを気にせずに作品に搭載できます。また、大きさが小さくなりますが、「Arduino Uno」同等の機能を備えているところもポイントです。

動かすためのモータには、ギアを搭載したものを使います。ギアによって動かす力が強くなっているので、電池など重い部品を乗せても問題なく動かせます。また、モータを動かすにはモータドライバが必要となります。

チキンレーサーを止める操作にはボタンスイッチを使います。今回は配線を長く伸ばし、遠くからでも制御できるようにしたいと思います。

チキンレーサーが壁にぶつかったかを判断するスイッチとしては、マイクロスイッチを使います。マイクロスイッチは、金属製のプレートが取り付けられているものを選択します。金属プレートがあることで、ぶつかる角度を気にせず、確実にスイッチを押すことができます。また、前方右と左の二つのマイクロスイッチを取り付けておくことで、衝突した際にスイッチを押す確実性を向上させます。

停止したら壁までの距離を計測します。これには距離センサを利用します。今回は超音波を使って距離を計測できる距離センサを利用することとします。

また、計測した距離をプレイヤーに知らせるため、結果をディスプレイに表示するようにします。これはキャラクタ液晶ディスプレイを使うことで、比較的簡単に文字の表示が可能です。

スタートのタイミングや、成功したかをプレイヤーに知らせるにはLEDを利用します。緑色を一つ、赤色を三つ取り付けます。スタートのタイミングは、カウントダウンで知らせます。赤色のLEDをすべて点灯させてから一つずつ消してゆき、スタートのタイミングで緑色のLEDを点灯して走り出すようにします。また、成功したら緑色のLEDを点灯、失敗したら赤色のLEDを点灯して結果を知らせます。

このほか、モータの速度の調節や距離の設定をする機能を備えるようにします。

03

次に、チキンレーサーの構成を踏まえて、電子部品を選択します。今回利用した電子部品は次の通りです。

04

Arduino Nano Every

制御するマイコンとして「Arduino Nano Every」を使います。Arduino Nano Everyは、2019年5月に販売を開始した新しいArduino Nanoです。なお、Arduino Nano Everyでなくても、旧来のArduino Nano、Arduino Nanoに互換がある製品でも問題ありません。

 

05

超音波距離センサ

超音波を発信して、壁で反射した超音波を受けるまでの時間を計測することで対象物までの距離を計測します。

 

06

キャラクタ液晶ディスプレイ

文字や記号を表示できるディスプレイです。今回利用する「AQM1602Y-FLW-FBW」は、16文字2行まで表示できます。また、バックライトを搭載しており、暗闇でも表示した文字を確認できます。

 

07

円形ロボットシャーシキット

モータや車輪、筐体がワンセットとなったキットです。モータにはギアードモータが使われており、力強く動かせます。説明書通りに組み立てることで、容易にチキンレーサーの筐体が作れます。この筐体に電子回路やセンサなどを取り付けて完成させていきます。なお、モータを単体で購入し、独自の筐体を製作しても問題ありません。

 

08

モータドライバ

モータを駆動するために出力1.0A1モータ用可逆転モータドライバを利用します。今回は以下のスペックのものを使用しています。

【絶対最大定格(Ta=25℃)】
電源電圧(VCC):18V
電源電圧(VM):18V
出力電流(lomax):1A
動作温度範囲:-20〜75℃
保存温度範囲:-55〜150℃
【推奨動作範囲】
電源電圧(VCC):6.5〜15V
電源電圧(VM):6.5〜15V
出力H電圧設定:<VCC,VM

番号 端子名 機能
1 VREF 出力H電圧設定端子
2 OUT2 出力端子
3 RNF 出力部GND
4 OUT1 出力端子
5 VM 電源(モータ出力部)
6 VCC 電源(小信号部)
7 FIN 制御入力(正)
8 GND GND
9 RIN 制御入力(逆)

なお、モータは右、左の車輪を動作させるため、二つ利用します。

 

赤色LED
緑色LED

カウントダウンや結果を知らせるために利用します。赤色を3個、緑色を1個準備します。

 

10

押しボタンスイッチ

プレーヤがチキンレーサーを制御するのに利用します。押しやすいよう、パネルに取り付ける形状などを選択すると良いでしょう。

 

11

マイクロスイッチ

壁に衝突したことを検知するのに利用します。前方左右二つ搭載します。

そのほか以下のような電子部品を利用します。

電子部品名 個数 URL
タクトスイッチ 1 http://akizukidenshi.com/catalog/g/gP-03649/
スライドスイッチ 2 https://www.amazon.co.jp/Zhejiang-Jianfu-Electronics-Co-%E5%9F%BA%E6%9D%BF%E7%94%A8%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81-SS-12D00-G5-10%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88/dp/B01L3MJZGS
半固定抵抗 2 http://akizukidenshi.com/catalog/g/gP-14855/
ダイオード 1 http://akizukidenshi.com/catalog/g/gI-07699/
抵抗 330Ω 6 http://akizukidenshi.com/catalog/g/gR-25331/
コンデンサー 0.1μF 4 http://akizukidenshi.com/catalog/g/gP-10147/
ピンヘッダー 3P 1 https://www.amazon.co.jp/%E6%9C%AD%E5%B9%8C%E8%B2%BF%E6%98%93-%E3%83%94%E3%83%B3%E3%83%98%E3%83%83%E3%83%80-1%C3%973-3P-2%E5%80%8B%E5%85%A5%E3%82%8A%EF%BC%9Ccon-000%EF%BC%9E/dp/B00TP91KLK
ジャンパーピン 1 http://akizukidenshi.com/catalog/g/gP-03690/
電池スナップ 2 https://www.marutsu.co.jp/pc/i/14367/
電池(006P) 2 http://akizukidenshi.com/catalog/g/gB-03257/
ユニバーサルボード 95×72mm 1 https://www.marutsu.co.jp/pc/i/237293/
ユニバーサルボード 72×47mm 1 https://www.marutsu.co.jp/pc/i/144023/

また、以下のようなソケットを使って各電子部品同士をケーブルでつないでいます。直接配線をはんだ付けする場合は不要です。

電子部品名 個数 URL
L型ピンヘッダー 6P 1 http://akizukidenshi.com/catalog/g/gC-05336/
ピンソケット 42P 1 http://akizukidenshi.com/catalog/g/gC-05779/
XHコネクタ ベース 2P 4 https://www.digikey.jp/product-detail/ja/jst-sales-america-inc/B2B-XH-A-LF-SN/455-2247-ND/1651045
XHコネクタハウジング 2P 4 https://www.digikey.jp/product-detail/ja/jst-sales-america-inc/XHP-2/455-2266-ND/555485
XHコネクタ ベース 4P 3 https://www.digikey.jp/product-detail/ja/jst-sales-america-inc/B4B-XH-A-LF-SN/455-2249-ND/1651047
XHコネクタハウジング 4P 3 https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=2AP6-4SFL#
XHコネクタコンタクト 20 https://www.digikey.jp/product-detail/ja/jst-sales-america-inc/SXH-001T-P0.6/455-1135-1-ND/527370
コネクタハウジング 4P 1 http://akizukidenshi.com/catalog/g/gC-12153/
ケーブル用コネクタ 4 http://akizukidenshi.com/catalog/g/gC-12160/

なお、同じような機能が実現できれば別の電子部品を選択しても問題ありません。この場合は、それぞれの電子部品によって接続方法や制御方向が異なるので注意しましょう。

 

Arduinoへの電源供給

まず、Arduinoに供給する電源の確保が必要となります。今回は動く作品となるため、電池など電源を作品自体に搭載します。Arduino Nanoは、USBケーブルを接続して電源を供給できます。このため、モバイルバッテリなどを取り付けて供給することも可能です。しかし、現在販売されているモバイルバッテリはスマートフォンを対象としていることもあり、大きく重い傾向にあります。また、Arduinoが消費する電力は少ないため、モバイルバッテリほど容量が大きい必要がありません。

そこで、今回は電池を利用します。Arduinoでは、VINという端子が搭載さ入れており、21Vまでの電源に接続すると、5Vに変換してArduinoに電源を供給するようになっています。そこで、9Vの電圧を出力できる006P電池を利用して電源供給するようにします。

電池スナップのプラス側(赤線)を「VIN」端子へ、マイナス側(黒線)を「GND」端子に接続することで動作します。

12

 

電子部品の動作を確認する

電子部品を準備できたら、それぞれの電子部品が動作できるかを確認します。動作ができないことがあれば、他の電子部品に変更するなどの対策は必要となるためです。

確認する場合は、ブレッドボードを利用して接続するようにすると良いでしょう。また、実際に作品を動作させる動きが可能かも確かめておくとプログラムを作成する際に安心できます。

まず、LEDとスイッチが動作できるかを確認します。また、スイッチを押すとスタートのカウントを実現してみます。

LEDは、Arduinoのデジタル出力端子に接続することで、点灯・消灯を切り替えられます。また、LEDには抵抗を接続して電流が流れすぎないようにします(詳しいLEDの使い方については、「Arduino電子工作の基本③ デジタル出力でLEDを点灯制御しよう」を参照)。

今回は、赤色のLEDを3個、緑色のLEDを利用します。このLEDはそれぞれArduinoのデジタル出力端子の8、9、10、11に接続します。

プレイヤーが操作に利用する押しボタンスイッチは、デジタル入力端子に接続することで状態を読み取ることができます。また、もう一方をGNDに接続しておくことで、ボタンを押すとデジタル入力端子の状態が0Vとなります。さらに、ボタンを押していない場合に5Vの状態になるよう、プログラムでプルアップを有効にしておきます(詳しくは「Arduino電子工作の基本⑥ スイッチの状態を読み取る」を参照)。今回は、デジタル入力の7番端子に接続します。

では、ブレッドボードにLEDとスイッチを接続してカウントしてみましょう。以下のように電子部品を接続します。スイッチはブレッドボードに接続できないため、配線をはんだ付けして接続します。

13

接続したら次のプログラムを作成します。プログラムでは、スイッチを押すと、赤色LEDがすべて点灯し、1秒ごとにLEDを一つずつ消し、最後に緑色LEDを点灯するようにしています。

const int LED_RED1_PIN = 8;
const int LED_RED2_PIN = 9;
const int LED_RED3_PIN = 10;
const int LED_GREEN_PIN = 11;
const int SW_PIN = 7

void setup()
{
    pinMode( LED_RED1_PIN, OUTPUT );
    pinMode( LED_RED2_PIN, OUTPUT );
    pinMode( LED_RED3_PIN, OUTPUT );
    pinMode( LED_GREEN_PIN, OUTPUT );

    pinMode( SW_PIN, INPUT_PULLUP );

    digitalWrite( LED_RED1_PIN, LOW);
    digitalWrite( LED_RED2_PIN, LOW);
    digitalWrite( LED_RED3_PIN, LOW);
    digitalWrite( LED_GREEN_PIN, LOW);

}

void loop()
{
    if( digitalRead( SW_PIN ) == LOW ){
        while( digitalRead( SW_PIN ) == LOW ){
            delay( 10 );
        }

        digitalWrite( LED_RED1_PIN, HIGH );
        digitalWrite( LED_RED2_PIN, HIGH );
        digitalWrite( LED_RED3_PIN, HIGH );
        digitalWrite( LED_GREEN_PIN, LOW );
        delay( 3000 );

        digitalWrite( LED_RED1_PIN, LOW );
        delay( 1000 );
        digitalWrite( LED_RED2_PIN, LOW );
        delay( 1000 );
        digitalWrite( LED_RED3_PIN, LOW );
        digitalWrite( LED_GREEN_PIN, HIGH );
}

Arduinoにプログラムを転送して、ボタンを押したらLEDが思ったように動作することを確認しましょう。

◆◆◆

今回は、「チキンレーサー」の概要と電子部品の準備をしました。次回は、超音波距離センサなどの電子部品の動作の確認や、電子回路全体の作成について説明します。

 

 

今回の連載の流れ

第1回:ギリギリの距離で止めよう!Arduinoと距離センサで作るチキンレーサー!(今回)
第2回:ギリギリの距離で止めよう!Arduinoと距離センサで作るチキンレーサー!
第3回:ギリギリの距離で止めよう!Arduinoと距離センサで作るチキンレーサー!

アバター画像

札幌在住のライター。電子工作やパソコン、Linux、スマートフォンなどの記事を執筆。「ラズパイマガジン」や「日経Linux」へ記事の執筆。著書として「これ1冊でできる!ラズベリー・パイ 超入門 」(ソーテック社)、「電子部品ごとの制御を学べる!Arduino 電子工作 実践講座」(ソーテック社)、「Arduino[実用]入門」(技術評論社)など。 現在、ものづくりをしたいメンバーを集めて電子工作を利用した作品などを制作する「サッポロ電子クラフト部」を主催(https://sapporo-elec.com/)。誰でも参加可能ですので、ご参加をお待ちしています。

高専ロボコン2015 出場ロボット解剖計画