123d CircuitsとArduino実機で電子工作(2)
はじめに
前回は、シミュレーションツール「123d Circuits」と「Arduino Uno」の実機を使用した電子工作に取り組みました。今回も、前回に引き続き123d CircuitsとArduino Uno実機を使用した電子工作を行います。
なお、今回は新たにRGBのカラーLEDを使用します。通常のLEDとは異なり、金属の足が4本あります。
http://akizukidenshi.com/catalog/g/gI-02476/各色(RGB)の3つのLEDが内蔵されており、各色を調整することで様々な色を表現することが可能になっています。
LEDは小さくて分かりにくいので、中を拡大してみましょう。右から赤、青、緑です。一番長いリードがGNDなので配置の目安にします。
LEDを点灯させてみよう
では、実際にLEDを点灯させてみましょう。今回も、まず123d CircuitsでLEDの点灯をシミュレーションしてみます。今回使用する部品は以下の3点です。抵抗は忘れずに数値を設定するようにしてください。
実体配線図は、以下のとおりです。実際の操作方法等は第3回、第4回を参照してください。
配線が終了したら、画面上部の「Code Editor」をクリックして、以下のスケッチを記述します。
// 光の3原色による7色に対応
enum Color {red, green, blue, yellow, cyan, magenta, white};
int ledGreen = 9;
int ledBlue = 10;
int ledRed = 11;
int onTime = 25; //点灯時間
int power = 0;
void setup() {
pinMode(ledGreen, OUTPUT);
pinMode(ledBlue, OUTPUT);
pinMode(ledRed, OUTPUT);
}
void loop() {
power = random(0, 256);
ledColor(red, power);
power = random(0, 256);
ledColor(green, power);
power = random(0, 256);
ledColor(blue, power);
int tempTime = onTime * random(1 , 15);
delay(tempTime);
}
//-------------------------------------
void ledColor(byte color, byte power) {
switch (color) {
case red:
analogWrite(ledRed, power);
break;
case green:
analogWrite(ledGreen, power);
break;
case blue:
analogWrite(ledBlue, power);
break;
case yellow:
analogWrite(ledRed, power);
analogWrite(ledGreen, power);
break;
case cyan:
analogWrite(ledBlue, power);
analogWrite(ledGreen, power);
break;
case magenta:
analogWrite(ledBlue, power);
analogWrite(ledRed, power);
break;
case white:
analogWrite(ledBlue, power);
analogWrite(ledGreen, power);
analogWrite(ledRed, power);
break;
default:
break;
}
}
スケッチを記述できたら、「Code Editor」の「Upload & Run」もしくは画面上部の「Start Simulation」をクリックしてみましょう。LEDが様々な色で点灯することを確認できます。
なお、Arduino Unoでは乱数をrandom関数で生成します。
random(min, max) 乱数を生成する関数
min:生成する乱数の下限
max:生成する乱数の上限
256段階のアナログ出力なので0~-255の値で乱数を作り(上限の戻り値は-1されるため256)、ランダムにすることで様々な色を不規則に点灯させています。また、onTimeを調整するとお好みの点灯時間に変更できます。
Arduino Unoの実機でも動作を確認してみます。当然ですが、シミュレーションよりも綺麗に点灯します。少々分かりにくいですが、色が変わっています。
また紙コップを被せて照明を暗くすると、より綺麗に映ります。
モーターを動かしてみよう
次に、モーターを動作させてみたいと思います。今回使用するのは、DC(Direct-current:直流)モーターとしておなじみのマブチモーターです。
DCモーターは流す電流の方向で回転方向が変わり、電圧を切り替えることで回転方向をコントロールします。また電圧値を上げることで回転速度を速くできます。Arduino Unoなどのマイコンボードでは、アナログ出力(PWM)によって電圧値を小刻みに変化させることで回転速度をコントロールすることが可能です。
ただし、Arduino Unoからの出力だけではDCモーターを動作できません。Arduino Unoは40mAまでしか出力できないため、電流が足らないのです。DCモーターを動作させるためには200mA~程度の電流が必要になります。
そこでモータードライバを使用してモーターを制御するのですが、モータードライバにも外部から電源(バッテリーなど)を供給する必要があります。今回は乾電池3本のバッテリーボックスを使用します。
また、123d Circuitsでは「L293D」というモータードライバを利用します。
L293Dは単品では入手し辛いですが、秋月電子ではL293D互換の「SN754410NE」という部品を取り扱っています。
SN754410NE (L293D)の各ピンの役割は以下のとおりです。モーターを2つ動作させることができます。上下は窪みを目印にします。まずは各ピンの役割を把握しておきましょう。
それでは、シミュレーション上でモーターを動作させてみましょう。123d Circutsでは回転が分かりやすい以下のDCモーターを使用します。
実体配線図は、以下のとおりです。「Components」から前述の電池ボックス、モータードライバ、DCモーターを選択して配線してみましょう。
配線が終了したら、画面上部の「Code Editor」をクリックして、以下のスケッチを記述します。
const int motorA1 = 10;
const int motorA2 = 7;
int enablePin = 255; // 回転速度(0~255段階)
void setup()
{
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(6, OUTPUT);
}
void loop()
{
// 正転
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
analogWrite(6, enablePin);
// 2秒間回転
delay(2000);
// 逆転
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, HIGH);
analogWrite(6, enablePin);
// 2秒間回転
delay(2000);
}
スケッチを記述できたら、「Code Editor」の「Upload & Run」もしくは画面上部の「Start Simulation」をクリックしてみましょう。DCモーターの回転を確認できたでしょうか。少し小さいですが、モーターが回転するとモーターの中心部(黄色の部分)に回転数がrpm(revolution per minute:1分間に繰り返される回転数)で表示されます(注意:ご利用のPCや回線によってシミュレーション上のモーターの動作に若干の差が生じる可能性があります)。
また、逆回転の場合はマイナス表示になります。このスケッチでは、正転と逆転を2秒間で切り替えて動作します。
Arduino Unoの実機でもモーターを回してみました。写真では分かりづらいので、動画でご覧ください(動画でも少し分かりづらいですが)。
続いて、モーターの回転速度を変化させてみます。「Code Editor」のスケッチを以下のように書き換えましょう。
const int motorA1 = 10;
const int motorA2 = 7;
int enablePin = 50; // 回転速度(0~255段階)
int motorSpeed = 5;
void setup()
{
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(6, OUTPUT);
}
void loop()
{
//正転
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
for (enablePin = 0 ; enablePin
モーター中心部(黄色)の回転数を見ると、徐々に回転速度が速くなっているのが分かると思います。
2つのモーターを同時に回転させる
では、モーターを同時に2つ動作させてみます。以下の実体配線図にならって配線しましょう。
配線が終了したら、画面上部の「Code Editor」をクリックして、以下のスケッチを記述します。
const int motorA1 = 10;
const int motorA2 = 7;
const int motorB1 = 13;
const int motorB2 = 12;
int enablePin = 255; // 回転速度(0~255段階)
void setup()
{
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(6, OUTPUT);
pinMode(motorB1, OUTPUT);
pinMode(motorB2, OUTPUT);
pinMode(5, OUTPUT);
}
void loop()
{
// 正転
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
analogWrite(6, enablePin);
// 正転
digitalWrite(motorB1, HIGH);
digitalWrite(motorB2, LOW);
analogWrite(5, enablePin);
// 2秒間回転
delay(2000);
// 逆転
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, HIGH);
analogWrite(6, enablePin);
// 逆転
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, HIGH);
analogWrite(5, enablePin);
// 2秒間回転
delay(2000);
}
スケッチを記述できたら、「Code Editor」の「Upload & Run」もしくは画面上部の「Start Simulation」をクリックしてみましょう。2つモーターを動作させることができました!
DCモーターでビークルを動作させてみよう
最後に、デモとしてDCモーターを使用した、二輪駆動のビークルを動作させてみます(Arduino Uno)。 ビークルの部品一覧はこちらを参照してください。なお、実際に試す場合はモーターと配線の接続にハンダ付けが必要となるため、完成させるにはハンダセット一式が必要になります)。
なお、ここでは前述したマブチのDCモーターとは種類が異なる、アイテンドーで取り扱っているDC減速型モーター「DG01D-A130」(http://www.aitendo.com/product/10661)を使用しています。
また、DCモーターを動作させる際はノイズが発生するので、その対策として0.1μFのセラミックコンデンサを付けています。もしコンデンサをハンダ付けするのが手間の場合、とりあえずは気にしなくてもモーターは動作します。
ビークルの外観は以下のようになります(屋根がなく各ユニットも雑な配置で大変シンプルな構成です)。
実際の動作は、動画をご覧ください。
おわりに
今回は、LEDの点灯と単純なモーターの動作について紹介しました。Arudino Unoの実機をお持ちの方は、ぜひ実際に様々な形でLEDを点灯させたり、モーターを動かしたりしてみましょう。シミュレーションでも十分に楽しめますが、実機ではもっと楽しさを実感できると思います。なお、本連載の内容をスグに試せる電子工作キットも販売中です!
次回は、今回よりもう少し進めて、モーターとセンサを組み合わせた電子工作を紹介したいと思います。次回もお楽しみに!
本連載で紹介した電子工作をスグに試せる電子工作キットを販売しています。
記事内の画像や説明だけではもの足りない、という方は、本キットを通してお手元で確認してみてはいかがでしょうか。きっと、電子工作の楽しさをもっと実感できるはずです!
電子工作キットは、下記のWebサイトから購入できます!
商品サイトはこちら→→https://blooomin.stores.jp/