【Arduino】Arduinoとジャイロセンサー(ADXL345)を使ったリアルタイムバイク画像制御【Processing編】

Arduinoとジャイロセンサー(ADXL345)を組み合わせ、センサーのデータを元にリアルタイムでバイクの画像を制御する方法をご紹介します。Processingを使って、ジャイロセンサーのデータに応じてバイクの画像を回転させ、視覚的にバイクの傾きを確認できます。

目次

概要

ADXL345は、加速度センサーで、3軸の加速度を測定できます。これを使って、バイクの傾きやウイリーなどの動きをリアルタイムで表現します。Processingを使うことで、Arduinoで取得したデータをグラフィカルに表現し、バイクの画像を制御します。

必要なもの

  • Arduino UNO(またはお好きなArduinoボード)
  • ADXL345ジャイロセンサー
  • Processingソフトウェア
  • シリアル通信用のコード

ArduinoとADXL345の接続方法

ADXL345はI2C通信を使用するため、以下のように接続します。

  • GNDArduinoのGND
  • VCCArduinoの5V
  • SDAArduinoのA4(I2Cデータライン)
  • SCLArduinoのA5(I2Cクロックライン)

Arduinoコード

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_U(12345); // センサーの初期化

void setup() {
  Serial.begin(9600);
  
  if (!accel.begin()) {
    Serial.println("ADXL345 not detected. Check your wiring!");
    while (1);
  }

  Serial.println("ADXL345 detected!");
}

void loop() {
  sensors_event_t event; 
  accel.getEvent(&event);
  
  // X, Y, Zの加速度データをシリアル通信で送信
  Serial.print(event.acceleration.x);
  Serial.print(",");
  Serial.print(event.acceleration.y);
  Serial.print(",");
  Serial.println(event.acceleration.z);
  
  delay(100); // 少し待機
}

Processingでのバイク画像制御

上記のArduinoコードで取得したX、Y、Z軸の加速度データをProcessingで受け取り、バイクの画像をリアルタイムに回転させます。画像が指定された角度を超えると、異なる画像を表示するように制御します。

バイクの画像(bike_front.png,bile_side.png)はjavaファイルと同じフォルダに置いています。好きな画像をダウンロードしてください。

import processing.serial.*;  // シリアル通信用ライブラリ

PImage bikeFront;          // 正面のバイク画像
PImage bikeSide;           // 横から見たバイク画像
PImage bikeSide45;         // 傾き45度の横画像
PImage currentSide;        // 現在の横画像

Serial myPort;             // シリアルポートオブジェクト
String input;              // シリアルからの入力データ
float x = 0, y = 0, z = 0; // X, Y, Zデータ
float angle = 0;           // 傾きの角度
float sideAngle = 0;       // 横画像の傾き角度

void settings() {
  size(800, 800); // ウィンドウサイズ
}

void setup() {
  // バイクの画像を読み込む
  bikeFront = loadImage("bike_front.png"); // 正面のバイク画像
  bikeSide = loadImage("bike_side.png");   // 横のバイク画像
  bikeSide45 = loadImage("bike_side_45angle.png"); // 傾き45度の横画像
  bikeFront.resize(300, 150); // 正面画像のサイズを変更
  bikeSide.resize(300, 150);  // 横画像のサイズを変更

  // シリアルポートを指定
  String portName = "COM4"; // Arduinoが接続されているポート(適切なポートに変更)
  myPort = new Serial(this, portName, 9600); // シリアル通信を開始
  myPort.bufferUntil('\n'); // 行末(改行)まで受信を待機
}

void draw() {
  background(200); // 背景色を灰色に設定
  
  // バイクの正面画像を傾ける
  angle = atan2(y, z); // YとZデータから傾き角度を計算
  translate(width / 3, height / 2); // 画面中央に移動
  rotate(-angle); // 画像を傾ける
  imageMode(CENTER); // 画像の中心を回転軸にする
  image(bikeFront, 0, 0); // バイクの正面画像を描画

  // 横画像の処理
  pushMatrix(); // 現在の描画設定を保存
  translate(width * 2 / 3 - 150, height / 2 + 75); // 横画像の位置を画面右側に設定
  sideAngle = atan2(y, z); // YとZデータからウイリー角度を計算
  if (degrees(sideAngle) > 45) {
    currentSide = bikeSide45; // 傾きが45度を超えたら画像を切り替え
  } else {
    currentSide = bikeSide; // デフォルト画像を使用
  }
  rotate(-sideAngle); // 横画像を傾ける
  image(currentSide, 0, 0); // 横画像を描画
  popMatrix();
}

// シリアルデータを受信
void serialEvent(Serial myPort) {
  input = trim(myPort.readStringUntil('\n')); // 改行までのデータを取得
  println("Received: " + input); // 受信データをコンソールに表示(デバッグ用)
  
  // カンマ区切りで分割
  String[] values = split(input, ',');
  if (values.length == 3) { // XYZデータが正しく受信できている場合のみ処理
    x = float(values[0]); // X軸データ(今回は使用しない)
    y = float(values[1]); // Y軸データ
    z = float(values[2]); // Z軸データ
  }
}

コードの解説

  1. bikeFrontbikeSide の画像を読み込む
    • bikeFront は正面画像、bikeSide は横画像として読み込みます。追加で、45度の横画像 bikeSide45 も読み込みます。
  2. atan2(y, z) 関数で角度を計算
    • Y軸とZ軸の加速度データを基に、atan2() 関数で傾きの角度を計算します。この角度により、バイクの画像を回転させます。
  3. 傾きが45度を超えた場合に画像を切り替え
    • 横からの画像は、傾きが45度を超えると bikeSide45 に切り替え、傾きがそれ以下の場合は bikeSide を表示します。
  4. シリアル通信でのデータ受信
    • Arduinoから送信された加速度データ(X, Y, Z)を受け取り、リアルタイムでバイクの画像を制御します。

まとめ

この方法を使うと、ADXL345ジャイロセンサーから得たデータをリアルタイムにProcessingでグラフィカルに表示できます。バイクの画像を傾けたり、画像を切り替えたりすることが可能です。このアプローチは、センサーから得たデータに基づいて動的なビジュアルを作成する際に非常に効果的です。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

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

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次