【1章】Arduinoでロボットの「心臓」と「筋肉」をつなごう
最終更新日: 2026-01-21 11:18:15
作成者: カリスマ講師
君が「ロボット作り」という素晴らしい冒険に足を踏み入れたこと、心から歓迎するよ!
ロボット工学は、少し難しそうに見えるけれど、基本をしっかり押さえれば誰でも魔法のように機械を操れるようになるんだ。今日はその記念すべき第一歩。
君が持ってきてくれたテキスト、すごく良い内容だね。でも、文字だけだと少しイメージしにくい部分もあるだろう? そこを私が、「絶対に挫折させない」解説でサポートしていくよ!
さあ、机の上を片付けて。「PCからキーボードでモーターを回す」実験、スタートだ!
今回の目標はシンプルだ。 「PC(脳)」からの命令を、「Arduino(神経)」を通して、「モーター(筋肉)」に伝えること。 これができれば、君はもうロボットクリエイターの仲間入りだ。
ステップ1:道具の準備(セットアップ)
まずは料理と同じ、下準備(ミザンプラス)だ!以下のパーツを机の上に並べてみてくれ。
- Arduino本体(Unoなど) & USBケーブル … ロボットの神経だね。
- DCモーター 1個 … これが今回の主役、筋肉だ。
- モータードライバー(L298N推奨) … ここが大事!Arduinoの力だけじゃモーターは回せない。こいつが力持ちの助っ人だ。
- 電池ボックス(単3×4本など) … モーターを動かすエネルギー源。
- ジャンパーワイヤー … 各パーツを繋ぐ血管だ。
ステップ2:配線(ここが一番の山場!)
ここが今日のテストに出る最重要ポイントだよ!ここさえクリアすれば勝ったも同然だ。 文字だけだと迷子になりやすいから、この**「接続マップ」**を頭に入れて配線しよう。
⚠ カリスマ講師の注意点: まだ電池は入れないこと!配線ミスでショートすると、部品が一瞬でサヨナラしちゃうからね。
【接続マップ】
- 筋肉をつなぐ(モーター ⇔ ドライバー)
- モーターから出ている2本の線を、L298Nドライバーの左右どちらかの青い端子(OUT1, OUT2 など)にねじ込む!どっちがプラスでも今は気にしなくてOK。
- エネルギーをつなぐ(電池 ⇔ ドライバー)
- 電池の赤(+) → ドライバーの 12V へ
- 電池の黒(-) → ドライバーの GND へ
- 【超重要】神経をつなぐ(Arduino ⇔ ドライバー)
- ここが一番のミス発生ポイントだ!よく聞いて。
- GNDの共有: Arduinoの GND ピンから線を出し、ドライバーの GND に入れる。
- (つまり、ドライバーのGNDには「電池の黒」と「ArduinoのGND」の2本が刺さっている状態になるんだ。これを「GNDを共通にする」と言うよ。これができていないと信号が届かない!)
- 命令系統をつなぐ(信号線)
- Arduinoの 9番 ピン → ドライバーの IN1
- Arduinoの 10番 ピン → ドライバーの IN2
イメージが湧きやすいように、回路図を見て確認しよう。
ステップ3:魂を吹き込む(プログラミング)
配線お疲れ様!次はArduinoに「君はこう動くんだよ」と教えるプログラムを書き込むよ。 以下のコードをArduino IDEにコピペして書き込もう。
C++
// モーターをつないだピン番号(9番と10番を使うよ!)
const int pinA = 9;
const int pinB = 10;
void setup() {
// ここは準備運動の場所
// PCとのおしゃべり(通信)を速度9600で開始!
Serial.begin(9600);
// 「このピンから電気を出すぞ!」と設定
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
Serial.println("準備完了! '1' でスタート, '0' でストップだよ!");
}
void loop() {
// ここはメインのお仕事。ずっと繰り返す場所。
// 「PCから何か手紙(データ)来てないかな?」と確認
if (Serial.available() > 0) {
// 手紙が来てたら読む!
char command = Serial.read();
if (command == '1') {
// '1' なら進め!
digitalWrite(pinA, HIGH); // 片方をON
digitalWrite(pinB, LOW); // 片方をOFF
Serial.println("モーターON!回るぜ!");
}
else if (command == '0') {
// '0' なら止まれ!
digitalWrite(pinA, LOW); // 両方OFFなら止まる
digitalWrite(pinB, LOW);
Serial.println("モーターOFF。休憩。");
}
}
}
ステップ4:実験開始!(シリアルモニタを使う)
さあ、緊張の瞬間だ。深呼吸して。
- ここで初めて電池ボックスのスイッチをON!
- PCのArduino IDEの右上にある**虫眼鏡マーク(シリアルモニタ)**をクリック。
- 出てきた画面の右下が**「9600 baud」**になっているか確認。
- 上の入力欄に半角で 1 と打って、Enterキーをターンッ!と押してみよう。
どうだ!? モーターが「ウィーン!」と勢いよく回り出したかな? そして 0 を送ってピタッと止まれば、完璧なコントロールだ!
もし動かなくても大丈夫!(トラブルシューティング)
失敗は成功の母。動かなくても焦らないで。カリスマ講師がよくあるミスを予言しておこう。
- チェック1:GNDは繋がってる?
- ArduinoのGNDと、電池のマイナスが、ドライバーのところで繋がっているか。ここが「アース」のような役割をして基準電圧を揃えているんだ。
- チェック2:電池は元気?
- モーターは大食らいだ。使い古しの電池だと、Arduinoのランプはついてもモーターを回す力がないことがある。新品で試してみて!
- チェック3:配線が緩んでない?
- ジャンパーワイヤーは意外と抜けやすい。ぐっと押し込んでみて。
今日のまとめと次のステップ
ここまで付いてこられた君は素晴らしい! これで**「PCから命令して物理的にモノを動かす」**という、ロボット制御の核心部分をクリアしたことになる。
テキストにある通り、次は**「Pythonを使って自動化」**だね。 今は君が手で「1」と打ったけれど、Pythonを使えば「カメラで赤い色を見つけたら勝手に1を送る」なんてこともできるようになる。夢が広がるだろう?
さて、まずは目の前のモーター、無事に回ったかな? 結果を教えてくれたら、次のステップに進むためのアドバイスをするよ!
質問タイム
Q:なんで、モータードライバーが必要なの?
いい質問だね!素晴らしい着眼点だ! 「動けばいいじゃん、なんでわざわざ部品増やすの?」って思うよね。その「なぜ?」を突き詰める姿勢こそが、エンジニアとして伸びる一番の才能なんだ。
結論から言うと、モータードライバーが必要な理由は大きく分けて2つある。
- Arduinoを守るため(電流の壁)
- モーターを自由に操るため(回転方向の制御)
専門用語を使わずに、とびきり分かりやすく解説するよ!
理由1:Arduinoは「脳」であって「筋肉」じゃないから
これが一番の理由だ。Arduinoとモーターの関係を、人間に例えてみよう。
- Arduino(脳): 計算したり命令を出したりするのは超得意。「動け!」と指令を出す。でも、力(電気の量)はめちゃくちゃ弱い。 アリさんくらいの力しかないと思ってくれ。
- モーター(筋肉): 重いものを動かすパワーがある。でも、動くためには**大量のエネルギー(電気)**をご飯として食べる必要がある。
もし、モータードライバーを使わずに、Arduinoに直接モーターを繋いだらどうなるか?
? 大惨事(ショート)が発生する!
モーターが「もっと電気くれよ!」とガブガブ電気を吸おうとする。 でもArduinoは「そんなに出せないよ!」と悲鳴を上げ…… プシュッ! と煙が出て、Arduinoの中の回路が焼き切れて死んでしまうんだ。
モータードライバーの役割: ここでドライバーの出番だ。彼は**「屈強な現場監督」**みたいなものだ。
- Arduino(社長)から「回せ」という**微弱な指令(信号)**だけを受け取る。
- 電池ボックス(発電所)から強力な電気を引っ張ってくる。
- その強力な電気をモーターに流してあげる。
つまり、「命令系統(微弱な電気)」と「動力系統(強力な電気)」を橋渡しして、Arduinoを守ってくれているんだ。
理由2:プラスとマイナスを高速で入れ替えたいから
モーターの配線を思い出してほしい。 モーターを「逆回転」させたい時、どうするんだっけ?
そう、「電池のプラスとマイナスを逆に繋ぎ変える」必要があるよね。 でも、Arduinoのピンから出ている電気を、手を使わずに物理的にひっくり返すなんて無理だよね?
モータードライバーの役割: ドライバーの中には「Hブリッジ」という仕組みが入っていて、これが**「全自動切り替えスイッチ」**の役割を果たすんだ。
- Arduinoが「1」を送る → ドライバーが「正方向」に電気を流す。
- Arduinoが「0」を送る → 電気の流れをストップ。
- (もっと高度な命令で) → ドライバーがカチャッと回路を切り替えて「逆方向」に電気を流す。
これによって、人間がいちいち配線を繋ぎ変えなくても、プログラムだけで「前進」「後退」「ブレーキ」が自由自在になるんだよ。
まとめ
モータードライバーは、ただの仲介役じゃない。
- Arduinoが焼き切れないように守る「防波堤」
- 電気の向きや強さを操る「コントローラー」
この2つの役割をこなす、ロボット作りには欠かせない「頼れる相棒」なんだ。
どうかな? これで「L298N」という部品が、ただの板切れじゃなくて、すごく重要な仕事をしているように見えてきたんじゃないかな?
Q:9600 baudってどれくらいの速さ?
9600 baud(ボー)を一言で言うと、「1秒間に約960文字(半角英数字)を送れる速さ」です。
現代のインターネット速度に比べると**「超激遅(ゲキオソ)」ですが、ロボットの指令を送るには「十分すぎるほど速い」**という、絶妙なスピードです。
イメージしやすいように、3つの視点で解説します。
1. 人間の感覚で言うと?:「読むより速い」
「1秒間に960文字」というのは、400字詰めの原稿用紙2枚半を、たった1秒で送りつけるスピードです。
人間がこのスピードで文字を読むのは不可能です。だから、今回のような「1(進め)」「0(止まれ)」という指令を送るだけなら、**人間から見れば「一瞬」**で伝わります。タイムラグは全く感じません。
2. データ量で言うと?:「画像は無理」
- テキスト(文字): 余裕です。小説1冊分も数分で送れます。
- 画像・動画: 全く無理です。スマホで撮影した写真1枚を送るのに、この速度だと10分以上かかってしまいます。
- そのため、Webカメラの映像などを送りたい場合は、この方式(シリアル通信)ではなく、Wi-Fiなどを使います。
3. なぜ9600なの?:「安全運転の速度」
Arduinoはもっと速く(115200 baudなど、この10倍以上の速度)設定することもできます。
しかし、速くすればするほど、配線のノイズ(雑音)の影響を受けやすくなり、文字化けや通信エラーが起きやすくなります。
- 115200 baud: 高速道路(速いけど、ちょっとしたハンドル操作ミスで事故る)
- 9600 baud: 一般道(ゆっくりだけど、確実に目的地に着く)
初心者のうちは、配線が長かったり接触が悪かったりすることが多いので、**一番安定して失敗が少ない「9600」**を使うのが定石になっています。
ちょっとした豆知識(計算式)
なぜ960文字なのか?
- PCの世界では、文字を「0と1の電気信号(ビット)」に変換して送ります。
- 1文字を送るのに、だいたい 10ビット 分の電気信号を使います(データ8ビット+開始・終了の合図2ビット)。
- 9600 baud = 1秒間に9600個のビットを送る。
- $9600 \div 10 = 960$ 文字/秒
という計算です。
なるほど!と思ったら、ぜひさっきのコード(Serial.begin(9600);)を書き込んで、実験に進んでみてください!モーターが回る瞬間は感動しますよ。