IoT奮闘記1日目:Arduinoデビュー戦。LEDを光らせてみた
お久しぶりです。前回の記事から2カ月ぶりになります。
記事を書くのって結構大変ですね。今後はchatgptみたいなAIに頼りながら効率よく書いていければなと思います。
さて、前回の「0日目」記事では、IoTに興味を持ったきっかけや今後の目標をお話ししました。今回は「1日目」として、Arduinoを使った簡単な電子工作に挑戦します。
目指すのは、「LEDを光らせる」という超シンプルなプロジェクトですが、
実際にやってみると「GNDって?」「アノード?」「カソード?」「デジタルピン?」と混乱だらけでした。
この記事は、電子工作初心者をメインのターゲットにしており、同じようにArduinoに触れてみたい人の参考になれば嬉しいです。写真もちょっと入れていきますので、よろしくお願いいたします。
1. はじめに
1.1 0日目の振り返り
- 家庭菜園にIoTを取り入れたいという思いから、この奮闘記をスタート。
- 目標は、遠隔で作物の状態をモニタリングしたり管理したりできる仕組みを作ること。
- とはいえ、私はIoT初心者&電子工作の経験もゼロ。試行錯誤を通じて学んでいきます。
1.2 1日目のゴール
- Arduinoと電子工作の基礎を体験
- LEDを光らせる回路を組んでみる
- スイッチでのLED制御にもトライ
「LEDを光らせる」と聞くと簡単に感じるかもしれません。実際私も簡単だろうと思っていました。
ですが、部品の扱い方・配線方法・プログラムの書き方など、初心者に覚えることがたくさんで、まさに奮闘記です。
2. Arduino環境の整理
まずは、環境の整備からスタートです。
PC側の環境を整えてあげないと、Arduinoを使用したプログラミングをすることができません。
2.1 Arduino IDEのインストール
- 以下の公式サイトから、Arduino IDEをダウンロードしてインストールします。
- インストールが完了したら、IDEを起動します。
- ボードの定義を設定します。
- IDEが「これはArduino UNO R4 WiFi用のプログラムだ」と認識できるようにする。
- ボード固有のCPUやメモリ仕様などの情報を取り込む。
- 上部メニューの「ツール」→「ボード」→「ボードマネージャ」を選択。
- 「uno r4」などで検索し、表示された「Arduino UNO R4 Boards」をインストール。
- 「ツール」→「ボード」から「Arduino UNO R4 WiFi」を選択。
- シリアルポートを設定します。
- IDEから書き込み命令を出す際に、どのボードへ送るかを指定する。
- USB接続先のポートが複数ある場合、誤ったポートを選ぶとアップロードに失敗してしまう。
- 「ツール」→「シリアルポート」で接続中のポートを選択。
- WindowsならCOM3等、Macなら/dev/tty.usbmodemXXXX等
- 「ツール」→「シリアルポート」で接続中のポートを選択。
Arduino IDEでは、使用するボードごとの設定ファイルやコンパイラ設定を「ボードマネージャ」でインストールする必要があります。
特定のボード(例えばUNO R4 WiFi)に対応したコンパイル方法や書き込み方法をIDEに教えるための作業で、要するにIDEとボードのペアリングが必要ということです。
もしこの手順を省略すると、IDEが「どのボード用にコンパイルすべきか分からない」「どのシリアルポートに書き込みをすればいいか分からない」という状態となり、正しくコードをアップロードできなくなってしまいます。
私の環境だと、最初はボード一覧に「UNO R4 WiFi」がなくて、どこにあるんだ?と軽く迷子に。
でも、ボードマネージャで探してインストールする手順がわかれば問題なく設定できました。
3. LED点滅回路の作成
今回のメインイベント。Arduino本体とブレッドボードを使った実習です。
3.1 使用部品の説明
- Arduino UNO R4 WiFi ×1
- ブレッドボード ×1
- ジャンパワイヤー (オス-オス×3、オス-メス×1)
- LED(発光ダイオード) ×1
- 抵抗器(220Ω) ×1
- タクトスイッチ ×1(後で使う)
- USBケーブル ×1
Arduino以外の部品については以下のスターターキットみたいなやつを購入しました
3.1.1 そもそもブレッドボードとは
- ブレッドボード:穴がたくさん空いていて、差し込むだけで回路を組める板。
- 列・行で電気的に繋がっている部分があって、見慣れないと「どこが繋がってるんだ?」と困惑しがち。
- 私も最初は「e15?何が何だか...」と混乱しまくり。抵抗器を挿す場所もLEDの足を挿す場所も同じ行に挿していいのか? みたいな感じでどういうこと?ってなりました。。
3.2 配線のポイント
3.2.1 LEDの極性について
-
アノード(+) と カソード(-)
- 長い足が+(アノード)、短い足が-(カソード)と言われます。
- 向きを間違えると点灯しません。
-
GND(グラウンド)
- 「回路の-側」。
- ArduinoのGNDピンとLEDの-側を繋ぐことで電流の帰り道を作ります。
- 電子工作では、電流はプラス(V+)側から流れて、マイナス(GND)側に戻るという一連の流れを作る必要があります。
- たとえばLEDを光らせるには、電源(Arduinoのデジタルピンなど)からLEDを通り、最後にGNDに流れ落ちるルートを確保しないと、電流は流れずLEDも光りません。
3.2.2 抵抗器の役割
- LEDに流れる電流を制限して、過電流による焼損を防ぐために使います。
- 最初に抵抗なしで試してみたところ、やたら強い光で発光して感動はしたのですが、制御できず危ないので基本的に必須です。
3.3 実際にやってみましょう
- Arduinoのデジタルピン(例:9番ピン)からジャンパワイヤをブレッドボードに接続。
- 同じ列に抵抗器の片方を挿す。
- 抵抗器のもう片方を、LEDのアノード(+側)と同じ列へ挿す。
- LEDのカソード(-側)は、GNDに繋げるための列へジャンパワイヤで接続。
- その列をArduinoのGNDピンへジャンパワイヤで接続。
3.3.1 コードを書いてアップロード
- Arduino IDEで、以下のようなサンプルコード(通称Blink)を書いてみます。
void setup() {
pinMode(9, OUTPUT); // デジタル9番ピンを出力に設定
}
void loop() {
digitalWrite(9, HIGH); // LED ON
delay(3000); // 3秒待機
digitalWrite(9, LOW); // LED OFF
delay(1000); // 1秒待機
}
- ボードを「Arduino UNO R4 WiFi」に設定
- シリアルポートも正しく選択
- 上記コードをコンパイル(コンソールのチェックマークボタン) → アップロード(コンソールの右矢印ボタン)
- 「書き込みが完了しました」と表示されると、プログラムがArduino上で動き始めます。
ここまでの流れで、LEDが1秒ごとに点滅すれば成功です!
4. スイッチ操作でLEDを制御してみる
次は、タクトスイッチを使って、LEDのオン・オフを手動でコントロールしてみます。部屋の照明のように、押すたびに点灯状態が切り替わる「トグル動作」を実装してみます。
4.1 追加部品
- タクトスイッチ
- スイッチを押すと2つの端子が電気的に繋がり、離すと切断される構造になっています。
- 端子配置が初心者には分かりづらいかもしれません。
4.2 サンプル配線例
- Arduinoのデジタルピン(例:2番ピン)をブレッドボードにジャンパワイヤで接続。
- タクトスイッチの片側端子を、2番ピンと同じ列に挿す。
- タクトスイッチのもう片側端子は、GNDにつなぐ。
- 回路的には、スイッチの片方を2番ピンに、もう片方をGNDに繋ぐだけでOK(抵抗不要)。
- 今回の配線はArduinoの内部プルアップを活用する方法で実施しました。
- スイッチを押すとLOWになります。そのタイミングでLEDを点灯させる仕組みです。
4.2.1 コードを書いてアップロード
- Arduino IDEで、以下のようなコードを書きます。
- 部屋の照明のように「押すたびにON/OFFを切り替える」には、スイッチが押された瞬間を検出して状態を反転させる工夫が必要です。
// スイッチ: D2 (内部プルアップ使用: 押すとLOW)
// LED: D9 (トグルで点灯/消灯)
// 1回押すごとにLEDの状態を変える
const int SWITCH_PIN = 2;
const int LED_PIN = 9;
// LEDの現在の状態を記憶しておく変数 (false = 消灯, true = 点灯)
bool ledState = false;
// スイッチの前回の読み取り結果 (HIGH or LOW)
int lastSwitchState = HIGH;
void setup() {
pinMode(SWITCH_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
// 初期は消灯 (ledState = false)
digitalWrite(LED_PIN, LOW);
}
void loop() {
// スイッチの現在状態を読み取る
int currentSwitchState = digitalRead(SWITCH_PIN);
// "立ち下がり" を検出する:
// 前回HIGH→今回LOWに変化した瞬間が「ボタンが押された」合図
if (currentSwitchState == LOW && lastSwitchState == HIGH) {
// LED状態を反転する
ledState = !ledState; // false→true / true→false
// 反転した結果に応じてLEDを点灯/消灯
if (ledState) {
digitalWrite(LED_PIN, HIGH); // LED ON
} else {
digitalWrite(LED_PIN, LOW); // LED OFF
}
}
// 次のループに向けて、"今の状態"を"前回の状態"として記憶
lastSwitchState = currentSwitchState;
}
- 正常にアップロードが完了すると、部屋の照明スイッチと同じような感覚が味わえます!
5. 今回のつまずきと奮闘
- ブレッドボードの行列の仕組みが分かりにくかった。
- e15にLEDを挿して、同じe15に抵抗器を挿すと聞いた時、普通に意味不明でした(笑)
- 実際には同じ行の穴はすべて電気的に繋がっているので、そこに複数の部品を挿すと、部品同士が繋がる仕組みになっていました。
- 少し配線を抜き差しすると「このパターンだと光るけど、こっちは光らない!」なんてハッキリ分かって、ようやく納得できました。
- GNDって何?
- 「電流の帰り道」という説明が個人的にはしっくりきました。
- 抵抗器の有無で光り方が違うことを体験できた。
- 抵抗器なしで繋ぐとめちゃくちゃ明るく光って、一見成功したような感じだけど危ない。
- 電流を正しく制限しないと、パーツが破損したり事故の原因にもなるので要注意。
6. まとめと次回について
6.1 今回できるようになったこと
- Arduino IDEのインストール&ボード設定。
- LEDの点滅回路を組むための最低限の電子工作。
- タクトスイッチを使った基本的な入力制御。
最初は戸惑うことも多かったですが、結果を目の当たりにすると、初心者でもやる気が上がりますね。
また、スイッチでのON/OFF制御は少しずつ制御の感覚が掴めてきて楽しかったです。
6.2 次回のやりたいこと
- センサー(温度、湿度、土壌水分など)を導入してみる。
- Wi-Fiに繋いで、クラウド上にデータを送信してみる。
ゆっくりペースですが、今後も「IoT奮闘記」として記事を増やしていきます。
次回は、LEDだけでなくセンサーも繋いでみて、データを取得&活用するところにチャレンジしてみようかと思います。
以上、IoT奮闘記1日目のレポートでした!
Discussion