🎂

電子工作初心者がARDUINOで誕生日をお祝いするまで

2024/12/15に公開

はじめに

こんにちは、株式会社ハックツのインターン生してます、いっせいです。

いつもはWebアプリケーションを作っていますが、色々あってハードウェア開発に手を出しました!
ついでに両親の誕生日が近かったので、電子工作でお祝いしてみました。
右も左も分からずだったのですが、周りに詳しい人がいて色々助かったので、
自分が色々触ってみた際の詰まりポイントや魅力などを共有できたら幸いです😀

(本当はタイトルを「アルディーノに花束を」にしたかった。)

ARDUINO(アルディーノ)とは?

マイクロコンピューターといわれるものの一つです。

技術者でなくても、とても扱いやすく、統合開発環境(IDE)も備えており初学者などに人気があります。

似たようなもので、Raspberry Pi(ラズベリーパイ)があります。

ARDUINOを購入💸

社内イベントの景品でもらったぁ🤪

⬇️ Amazonリンク
https://amzn.asia/d/eBsK4bJ

専用のオンライン教材📖

これのおかげで楽しく進められました☺️
https://docs.sunfounder.com/projects/elite-explorer-kit/ja/latest/

ARDUINO専用のIDE(統合開発環境)をインストール💻

https://www.arduino.cc/en/software

IDEを開くとモデルの選択項目があるので、自分が使ってる「Arduino UNO R4 Wifi」を選択

パソコンとARDUINOをUSBで繋げる🫱‍🫲

なんか色々光った

Lチカ(Hello World的なやつ)

まずはプログラムを書いていく

サンプルコード
void setup () {
  pinMode(13, OUTPUT);
}

void loop () {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

小さく「L」と書いてあるところがオレンジ色で光ってるところがチカチカしやがります

LEDを光らせよう(最初の感動ポイント😄)

回路を作っていくよぉ!

用意するもの
ジャンパーワイヤー
抵抗器
LED(今回は220Ωの金属皮膜抵抗器)

光りましたぁ!

波線の箇所は電気が通ってる向きで、上下は横、真ん中は縦の向きで電気が通る状態です。
このイメージができてれば、回路を作りやすくなります🙆‍♂️

抵抗とは

抵抗は、回路に流れる電流を制限してLEDや電子部品を守る役割があります。
今回は、Arduinoからの電流(5V)から、一定の電流抑えてLEDが壊れないようにしています。

これみたらなんとなくわかりました
https://www.youtube.com/watch?v=P6s0WI7jkKM&t=8s

上手に焼けました🔥

(めっちゃ見えにくいけど、LEDの中央の黒いやつが焦げてる部分。
バチンっと音がして、光らなくなった。)

この後もよく分からんけど、5個くらい壊しました💥

なんか面白い折り方してたらしい

モニターにお祝いメッセージを表示

他にも色々と触ったあと、今回のメインであるお祝いのモノを作っていきます。

用意するもの
LCD(モニター)
リモコン
赤外線レシーバー
LED
LEDストリップ
ジャンパーワイヤー
抵抗器(今回は220Ωの金属皮膜抵抗器)

サンプルコード

void loop() {
  if (IrReceiver.decode()) {
    String keyValue = decodeKeyValue(IrReceiver.decodedIRData.command);
    if (keyValue == "PLAY/PAUSE") {
      leds[0] = CRGB(50, 0, 100);
      leds[1] = CRGB(55, 55, 55);
      leds[2] = CRGB(100, 42, 0);
      leds[3] = CRGB(0, 100, 0);
      leds[4] = CRGB(30, 0, 0);
      leds[5] = CRGB(0, 0, 10);
      leds[6] = CRGB(30, 30, 0);
      leds[7] = CRGB(0, 0, 100);
      FastLED.show();
      digitalWrite(9, HIGH);
      digitalWrite(12, HIGH);
      digitalWrite(11, HIGH);
      digitalWrite(10, HIGH);
      lcd.setCursor(0, 0);  //Set cursor to character 2 on line 0
      lcd.print("my father & my mother happy birthday ! ");
      delay(3000);
      digitalWrite(9, LOW);
      digitalWrite(12, LOW);
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);

      digitalWrite(9, HIGH);
      lcd.setCursor(0, 0);  //Set cursor to character 2 on line 0
      lcd.print("y father & my mother happy birthday ! ");
      delay(500);
      digitalWrite(9, LOW);

      digitalWrite(12, HIGH);
      lcd.setCursor(0, 0);  //Set cursor to character 2 on line 0
      lcd.print(" father & my mother happy birthday !  ");
      delay(500);
      digitalWrite(12, LOW);

      digitalWrite(11, HIGH);
      lcd.setCursor(0, 0);  //Set cursor to character 2 on line 0
      lcd.print("father & my mother happy birthday !   ");
      delay(500);
      digitalWrite(11, LOW);

      ...

      digitalWrite(10, HIGH);
      lcd.setCursor(0, 0);  //Set cursor to character 2 on line 0
      lcd.print("                                      ");
      delay(500);
      digitalWrite(10, LOW);
    } else {
      Serial.print("Key pressed: ");
      Serial.println(keyValue);
    }

    IrReceiver.resume();
  }
}

String decodeKeyValue(long result) {
  switch (result) {
    case 0x16:
      return "0";
    case 0xC:
      return "1";
    case 0x18:
      return "2";
    case 0x5E:
      return "3";
    case 0x8:
      return "4";
    case 0x1C:
      return "5";
    case 0x5A:
      return "6";
    case 0x42:
      return "7";
    case 0x52:
      return "8";
    case 0x4A:
      return "9";
    case 0x9:
      return "+";
    case 0x15:
      return "-";
    case 0x7:
      return "EQ";
    case 0xD:
      return "U/SD";
    case 0x19:
      return "CYCLE";
    case 0x44:
      return "PLAY/PAUSE";
    case 0x43:
      return "FORWARD";
    case 0x40:
      return "BACKWARD";
    case 0x45:
      return "POWER";
    case 0x47:
      return "MUTE";
    case 0x46:
      return "MODE";
    case 0x0:
      return "ERROR";
    default:
      return "ERROR";
  }
}

動作の流れとしては、
まずリモコンのボタンを「赤外線レシーバ」に向けて押下する。
そのあと、プログラムを組んだ通りにモニターの文字列が横移動、LED点滅などを行う。

リモコンのボタンを押下🔘

キラキラ光りながら、モニターの文字が移動します。

(動画載せれないので画像😞)

あとは、撮った動画をお祝いしたい人に贈りましょう!!

【おまけ】ESP32でwifi接続して、webからLEDを操作してみよう

今回入手したArduinoはESP32も付属されたマイコンで、これを使えばwifi接続できるということで、
スマホからweb操作でLEDを光らせることができました💡

詰まりポイント

おわり

いかがだったでしょうか。
初学者が少しでも沼ったりすることを減らせたらいいなという思いで、注意書きを意識して書いたので、そこが役に立てばいいなと思ってます👍

オンライン教材に関しては、指定通りに回路を組んで、動いてくれることが多かったので楽しく電子工作をすることができました。

今回の電子工作のおかげで、普段Webアプリ開発をしてる身からすると、開発の幅が増えて嬉しいです😄
東京に秋月電子というお店があり、色んな電子パーツがあるみたいなので、機会があれば行ってみたいですね。

Hackz Inc.

Discussion