無いものを作る趣味の工作やバイクいじり、お出かけネタなどを取り扱っています。

バイク用の高度計&温度計+時計を作るよ①

| コメント(0)

こんにちは
管理人のかいざーです

バイクに乗っていると急に気温変わってビビったりすることありますよね
一般的には高度100m上がるごとに気温は0.6℃下がるそうなので
高度と気温のモニターはしておきたいところです

つい先日Amazon見てたらこんなの見つけました

ESP32.png


モニター付きの小型のマイコンボードで
センサーとかいろいろ接続して様々な用途に使えるらしい
もちろん気圧やGPSも繋げるので、これを使えば希望のものが作れそう

電源やプログラムの書き込みはUSBでPCや電源に繋げたら大丈夫なので
3Dプリンタでケース作ったりすればいい感じのが出来上がりそうだよね
プロブラムはClaude先生に丸投げすれば大丈夫だしw


そんなわけでこれと気圧センサーとGPSセンサー注文しました

BMP280.png

GPSはまだ届いてないから
高度のセットとGPS時計はまだ使えないですが
とりあえず線繫いでテスト

20260719_112634794.jpg

見た目がダサすぎるwww
Claud先生にやり直しを要求!!

こんな感じのにして

AltMeter.png


って言ったらさすがCaude先生
うまく仕上げてくれました

最終的に自分で微調整して出来上がったのがコレ

20260719_132915129.jpg

ヤバいかっこいい(自画自賛)
フォントはいろいろ試したけど、これぐらいが限界でした

この気圧センサー結構高性能で
1m高さ変わるだけでも拾ってくれる
最近のテクノロジーすげぇな

あとはGPSセンサー届くの待つだけ

書き込んだコードはこれになります(まだ途中だよ?)


ESP32 高度計プログラム


#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_BMP280.h>

#define LGFX_USE_V1
#include <LovyanGFX.hpp>

class LGFX_Waveshare19 : public lgfx::LGFX_Device {
lgfx::Panel_ST7789 _panel_instance;
lgfx::Bus_SPI _bus_instance;
public:
LGFX_Waveshare19() {
{
auto cfg = _bus_instance.config();
cfg.spi_host = SPI2_HOST;
cfg.spi_mode = 0;
cfg.freq_write = 40000000;
cfg.pin_sclk = 18;
cfg.pin_mosi = 23;
cfg.pin_miso = -1;
cfg.pin_dc = 2;
this->_bus_instance.config(cfg);
_panel_instance.setBus(&_bus_instance);
}
{
auto cfg = _panel_instance.config();
cfg.pin_cs = 15;
cfg.pin_rst = 4;
cfg.pin_busy = -1;
cfg.panel_width = 170;
cfg.panel_height = 320;
cfg.offset_x = 35;
cfg.offset_y = 0;
// 色順の設定を修正(背景黒・水色文字を確実にする設定)
cfg.rgb_order = false;
cfg.invert = true;
this->_panel_instance.config(cfg);
}
setPanel(&_panel_instance);
}
};

LGFX_Waveshare19 lcd;
Adafruit_BMP280 bmp;

// --- 表示用カラー定義(これで確実に黒背景+水色文字になります) ---
#define COLOR_MAIN TFT_CYAN // 水色
#define COLOR_LABEL TFT_CYAN // 水色
#define COLOR_LINE TFT_CYAN // 水色
#define COLOR_BG TFT_BLACK // 漆黒の黒

void setup() {
Serial.begin(115200);
delay(1000);

lcd.init();
lcd.setRotation(1); // 横長画面に設定
lcd.fillScreen(COLOR_BG); // 画面全体を黒で塗りつぶす

// 気圧センサーの起動
Wire.begin(21, 22);
if (!bmp.begin(0x76)) {
Serial.println("センサーエラー");
while (1);
}

// --- 固定グラフィック(枠線やラベル)を描画 ---
// 外枠の角丸四角形(【修正】画面の端から5ピクセル内側に小さくしました)
lcd.drawRoundRect(5, 5, 310, 160, 15, COLOR_LINE);

// 横の仕切り線(枠が小さくなったので位置調整)
lcd.drawFastHLine(5, 110, 310, COLOR_LINE);
// 縦の仕切り線
lcd.drawFastVLine(155, 110, 55, COLOR_LINE);

// 「Alt」ラベル
lcd.setFont(&fonts::Font4); // 読みやすいゴシック体
lcd.setTextColor(COLOR_LABEL, COLOR_BG);
lcd.setCursor(20, 50);
lcd.print("Alt");

// 「m」単位ラベル
lcd.setCursor(255, 50); // 数字がArial調になり幅が変わるため位置調整
lcd.print("m");

// 「Temp」ラベル
lcd.setFont(&fonts::Font2);
lcd.setCursor(15, 130);
lcd.print("Temp");

// 「Time」ラベル
lcd.setFont(&fonts::Font2);
lcd.setCursor(165, 130);
lcd.print("Time");
}

void loop() {
// センサーデータの取得
float temperature = bmp.readTemperature();
float altitude = bmp.readAltitude(1013.25);

// --- 1. 高度(Alt)の表示(まっすぐ太字仕様) ---
lcd.setFont(&fonts::DejaVu56);
lcd.setTextColor(COLOR_MAIN, COLOR_BG);
// ど真ん中に表示
lcd.drawCentreString(String((int)altitude), 160, 30);

// --- 2. 温度(Temp)の表示 ---
// ★次の文字に影響が出ないように、太字(フチ取り)を解除してバトンタッチ
lcd.setTextPadding(2);
lcd.setFont(&fonts::DejaVu24);
lcd.setTextSize(1.3);
lcd.setCursor(62, 125);
lcd.print((int)temperature);
lcd.setFont(&fonts::Font2);
lcd.setCursor(105, 125);
lcd.print(" `C"); // 「°C」表示

// --- 3. 時間(Time)の表示(現在はダミー) ---
lcd.setFont(&fonts::DejaVu24);
lcd.setCursor(210, 125);
lcd.print("15:00");

delay(500);
}




この手のガジェット
Claude先生がいればだいたい何とかなるね、さすがAI
間違いも多いけど

あとはケース作って収めるだけだけど
ここが一番大変そう、防水も考えなくちゃいけないし
完全にふさいだら気圧測れなくなるし、GPSのアンテナもなんか考えないといけないし


それではまた

コメントする

月別 アーカイブ

2026年7月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

この記事について

このページは、かいざーが2026年7月19日 14:00に書いた記事です。

ひとつ前の記事は「ネットワーク を10Gにアップグレード! (だいたい固まった)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ブログランキング・にほんブログ村へにほんブログ村 バイクブログ バイク 修理・整備へ
にほんブログ村 バイクブログ ソロツーリング(バイク)へ
にほんブログ村 IT技術ブログ Webサイト構築へ