工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino UNOで作るLCDアニメーション&ゲーム入門

必要な部品

部品数量
Arduino UNO1
アルファベット数字LCD 16×2文字1

使用ソフトウェア

プロジェクト概要

Arduinoと16×2キャラクタLCDを使ったアニメーションの基礎から、簡単なゲーム制作までをステップバイステップで解説します。他のサイズのLCDにも応用可能です。

Step 1: LCDの配線

Arduino UNOで作るLCDアニメーション&ゲーム入門

電源・コントラスト・制御ピン(まずはここだけ接続)

LCDピン機能接続先
1VSS (GND)ブレッドボードのマイナスレール(Arduino GNDもこちら)
2VDD (VCC)ブレッドボードのプラスレール(Arduino 5Vもこちら)
3VO (コントラスト)ポテンショメータのワイパー(両端をプラス/マイナスレールへ)
4RS (レジスタ選択)Arduino D12
5R/W (読/書)マイナスレール(GND固定=書き込み専用)
6E (イネーブル)Arduino D11
15A (バックライトアノード)プラスレール(220Ω抵抗経由)
16K (バックライトカソード)マイナスレール

この状態で電源を入れ、下段(2行目)が光ればLCD自体は正常です。光らない場合ははんだ付け・配線を見直し、それでもダメならLCD不良の可能性があります。

データピン(4ビットモード)

LCDピン機能接続先
11D4Arduino D4
12D5Arduino D5
13D6Arduino D6
14D7Arduino D7

動作確認スケッチ

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // rs, e, d4, d5, d6, d7

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 1);
  lcd.print("Working");
}

void loop() {}

「Working」と表示されれば配線成功です。文字化けや無表示の場合はコントラスト調整、データピンのはんだブリッジ、ピン番号の一致を確認してください。

Step 2: コード解説

LiquidCrystal lcd(12, 11, 4, 5, 6, 7);

LCDオブジェクトを生成。引数は (RS, E, D4, D5, D6, D7) の順。

lcd.begin(16, 2);

16桁×2行のLCDとして初期化。他サイズの場合は数値を変更。

lcd.setCursor(0, 1);

カーソル位置を設定(列0、行1=2行目)。C++は0始まり。

lcd.print("Welcome");

カーソル位置に文字列を出力。

Step 3: スクロールテキスト

広告看板のように右から左へ文字を流すアニメーション。

void setup() {
  lcd.begin(16, 2);
}

void loop() {
  int n = 15;
  char message[] = "scrolling text!";
  char* ptr = message;
  while (n != -14) {
    lcd.clear();
    lcd.setCursor(n, 1);
    if (n < 0) ptr++;
    lcd.print(ptr);
    n--;
    delay(250);
  }
}

ポインタ操作で文字列の表示開始位置をずらし、スクロールを実現。delay(250)で速度調整可能。

Step 4: カスタムキャラクタ(自作文字)

8×5ドットのパターンを定義して独自の絵文字を作成。

byte dino[] = {
  B01110,
  B01110,
  B01100,
  B01111,
  B11101,
  B01010,
  B01010,
  B01010
};

作成支援ツール:LCD Character Creator

表示方法

void setup() {
  lcd.createChar(0, dino); // スロット0に登録
  lcd.begin(16, 2);
  lcd.setCursor(0, 1);
  lcd.write(byte(0));      // 登録済みキャラクタを出力
}

lcd.print()では出力できず、lcd.write(byte(スロット番号))を使用します。

Step 5: 矢印アニメーション(シューティング)

3つのカスタムキャラクタ(矢尻・矢身・矢尻)を組み合わせて矢を飛ばすアニメーション。

byte arrowhead[] = { B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000 };
byte arrowbody[] = { B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000 };
byte arrowtail[] = { B00011, B00111, B11111, B11111, B11111, B00111, B00011, B00000 };

void setup() {
  lcd.createChar(0, arrowhead);
  lcd.createChar(1, arrowbody);
  lcd.createChar(2, arrowtail);
  lcd.begin(16, 2);
}

void loop() {
  int n = 15;
  while (n != -1) {
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.write(byte(0));
    lcd.write(byte(1));
    lcd.write(byte(2));
    n--;
    delay(50);
  }
}

残像で矢が長く見えることがありますが仕様です。

Step 6: LCDゲーム「矢よけ」

ゲームルール

キーポイント:割り込みと乱数

attachInterrupt(0, buttonin, CHANGE); // D2ピンの変化で割り込み
randomSeed(analogRead(A0));           // A0未接続のノイズをシードに真の乱数生成

割り込みにより、メインループのどこにいてもボタン入力を即座に検知。CHANGEはHIGH↔LOW両エッジで発火。

完全なゲームコード

元記事の「Code」セクションに全文掲載。主要構成:

回路図

Arduino UNOで作るLCDアニメーション&ゲーム入門

発展のヒント

製造プロセス

  1. Arduboyクローンで作る自作携帯ゲーム機 – PCB設計から実装まで
  2. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  3. Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
  4. Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
  5. Arduino Nanoと128x64 OLEDで実行するセルラーオートマトン「ライフゲーム」
  6. Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
  7. DHT センサで作る信頼性の高い Arduino 気象ステーション
  8. Arduino UNOで作るクラシックLCDアーケードゲーム(ブザー・ジョイスティック付き)
  9. MKR1000 + DHT22: 温湿度データをAzureへリアルタイム送信
  10. Raspberry Pi 3とArduinoで作る自作ノートPC:ステップバイステップガイド
  11. Arduinoセンサー:種類、応用、実世界プロジェクト