LCDディスプレイで中二病デバイスを作ってみた話

PR広告を含みます

Aliexpressの100円ショップというコーナーで6月の月初くらいから電子工作のパーツをよく見かけるようになりました。Arduinoボード、LCD、センサー、、とあれもこれも取り扱いがありました。
しかも、安いんですよね。そして爆速配送という。100円ショップコーナーの製品は基本早く届きます。。

目次

今回つくるもの

厨二病ですねこれ、Xfileっていう海外ドラマの機会の中のゴーストというEPで
これみたいなやつが出てくるんですよね()



PCケースの中に入れたら面白いんじゃねみたいな

まずは、TinkerCADでシミュレーション

AutoDeskが提供する無料のWebツールでArduinoをシミュレーションすることができます。
こちらで動くのかなぁ〜とやってみるといいと思います

巻き戻しがきくので、練習にもいいという、、
分解中にあーーここだけ直せば良かったのか!となると萎えますから、、、

本番環境では修正が必要な場合が多いですが、頭の中で考えてやるかはいいのかなと思います。

今回購入したパーツ

今回購入したのは次の2点です。
お値段も激安でした。

Arduinodeでボードはatmega328p Xplained miniを選択してください。

LCDは500円でした。

組み立て

組み立てといってもハンダ付けをするだけですが、ピン数が多いのでちょっとめんどくさいですね()
LCDは付属の基盤をここにはんだ付けします。

LCDの方のハンダはお見せできないレベルで雑になったので闇に葬ろうかと思います。

続いて以下のようにLCDと接続します。

Connect…
Arduino            LCD
-------------        ------------
GND ---------------- GND
5V  ---------------- VCC
A4  ---------------- SDA
A5  ---------------- SCL

Test Code

接続が完了したらとりあえずテストコードを使います。

ライブラリLiquidCrystal_I2Cをインストールしてから以下のコードを実行します。
このコードは無保証です。

C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// I2Cアドレスが0x27の16x4 LCDを定義します 必要に応じて変更
//今回の場合16と4に接続中
LiquidCrystal_I2C lcd(0x27, 16, 4);

void setup() {
  // LCDを初期化します
  lcd.begin(16, 4);  // 引数に列数と行数を渡します
  // バックライトを点灯させます
  lcd.backlight();
  // LCDにメッセージを表示します
  lcd.setCursor(0, 0);
  lcd.print("Line 1: Hello");
  lcd.setCursor(0, 1);
  lcd.print("Line 2: World!");
  lcd.setCursor(0, 2);
  lcd.print("Line 3: Arduino");
  lcd.setCursor(0, 3);
  lcd.print("Line 4: Nano");
}

void loop() {
  // メインループ内に何も書く必要はありません
}

これでアップロードして動作すれば問題なく接続されています。
バックライトは点灯するけど文字が薄い、表示されない場合は、コントラスト調整用のダイヤルをドライバで調整してみてください。文字が表示されるかなと思います。

調整方法

この青色ボックスの中にある灰色のネジを調整します。

本番Code

このコードも無保証です。

C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// I2Cアドレスが0x27の16x4 LCDを定義します
//必要に応じてアドレス、ピンを変更してください
LiquidCrystal_I2C lcd(0x27, 16, 4);

void setup() {
  lcd.begin(16, 4);
  lcd.backlight();
  
  bootSequence();
}

void loop() {
  displayTXT();
}

void bootSequence() {
  lcd.setCursor(0, 0);
  lcd.print("Booting up");
  lcd.setCursor(0, 1);
  lcd.print("PC Waiting");

  for (int i = 0; i < 3; i++) {
    delay(1000); // 1秒ごとにドットを追加
    lcd.setCursor(10 + i, 0);
    lcd.print(".");
    lcd.setCursor(10 + i, 1);
    lcd.print(".");
  }

  for (int i = 0; i < 3; i++) {
    delay(1000); // 1秒ごとにドットを削除
    lcd.setCursor(12 - i, 0);
    lcd.print(" ");
    lcd.setCursor(12 - i, 1);
    lcd.print(" ");
  }
  
  delay(2000); // 合計で5秒待つために残りの時間待機
}

void displayTXT() {
  lcd.setCursor(0, 0);
  lcd.print("Scanning ");

  unsigned long startMillis = millis(); // 開始時刻を記録
  unsigned long currentMillis = startMillis;

  while (currentMillis - startMillis < 30000) { // 30秒間ループを実行
    lcd.setCursor(0, 1);
    lcd.print("DATA A1> "); // 2行目の固定テキスト
    displayRandomChars(6); // 6文字のランダムな英数字データを表示

    lcd.setCursor(0, 2);
    lcd.print("DATA B2> "); // 3行目の固定テキスト
    displayRandomChars(6); // 6文字のランダムな英数字データを表示

    lcd.setCursor(0, 3);
    lcd.print("DATA C3> "); // 4行目の固定テキスト
    displayRandomChars(6); // 6文字のランダムな英数字データを表示

    delay(100); // 更新速度を0.1秒ごとに更新
    currentMillis = millis(); // 現在の時刻を更新
  }
}

void displayRandomChars(int length) {
  for (int i = 0; i < length; i++) {
    char randChar = getRandomAlphaNumChar(); // ランダムな英数字文字
    lcd.print(randChar);
  }
}

char getRandomAlphaNumChar() {
  const char charset[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  return charset[random(sizeof(charset) - 1)];
}

これでちょっとした中二病デバイスの完成です。

おまけ

実は2行バーションも購入していました。
この前に推しからもらったサインの横においておきます。。

まぁ誰からもらったサインか忘れることなんてまず無いとは思いますが、、

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次