diff --git a/stick_cplus/ex52_rpm/ex52_rpm.ino b/stick_cplus/ex52_rpm/ex52_rpm.ino new file mode 100644 index 0000000..a1bc9fe --- /dev/null +++ b/stick_cplus/ex52_rpm/ex52_rpm.ino @@ -0,0 +1,301 @@ +/****************************************************************************** +Example 52: 加速度センサMPU6886で回転数を測定し、Wi-Fiで送信する +・ + + 使用機材(例):M5StickC Plus (加速度センサは本体内蔵品) + + Copyright (c) 2024 Wataru KUNINO +******************************************************************************* +本ソフトウェアには下記のソースコードの一部(MPU6886に関する)が含まれています。 +This code was forked by Wataru KUNINO from the following authors: +******************************************************************************* +* Copyright (c) 2021 by M5Stack +* Equipped with M5StickC-Plus sample source code +* 配套 M5StickC-Plus 示例源代码 +* Visit for more information: https://docs.m5stack.com/en/core/m5stickc_plus +* 获取更多资料请访问: https://docs.m5stack.com/zh_CN/core/m5stickc_plus +* +* Describe: MPU6886. +* Date: 2021/9/14 +******************************************************************************* +*/ + +#include +#include // ESP32用WiFiライブラリ +#include // UDP通信を行うライブラリ + +#define SSID "1234ABCD" // 無線LANアクセスポイントSSID +#define PASS "password" // パスワード +#define PORT 1024 // 送信のポート番号 +#define DEVICE "accem_5," // デバイス名(5字+"_"+番号+",") +#define UDP_TX_MS 5000 // UDP送信間隔(ms) +#define RADIUS_CM 13 // プラッタの中心からM5Stickまでの距離(cm) +#define AVR_N 30 // 平均回数 +#define INTERVAL_MS 200 // 測定間隔(ms) +#define GRAV_MPS2 9.80665 // 重力加速度(m/s2) +#define DEG_MAX 6.0 // 水平レベル測定用最大角度 +#define ERR_MAX 20. // RPM測定用最大誤差(%) +#define RPM_TYP 33.333 // RPM測定用基準値(RPM) +#define BUF_N 10 // 残像表示用バッファ数 + +RTC_DATA_ATTR float CAL_GyroX = 0.; // 角速度Xキャリブレーション値 +RTC_DATA_ATTR float CAL_GyroY = 0.; // 角速度Yキャリブレーション値 +RTC_DATA_ATTR float CAL_GyroZ = 0.; // 角速度Zキャリブレーション値 +RTC_DATA_ATTR float CAL_AccmX = 0.; // 加速度Xキャリブレーション値(加算値) +RTC_DATA_ATTR float CAL_AccmY = 0.; // 加速度Yキャリブレーション値(加算値) +RTC_DATA_ATTR float CAL_AccmZ = 1.; // 加速度Zキャリブレーション値(乗算値) + +WiFiUDP udp; // UDP通信用のインスタンスを定義 +IPAddress UDPTO_IP = {255,255,255,255}; // UDP宛先 IPアドレス + +int pos_x_prev[BUF_N]; // = 120; +int pos_y_prev[BUF_N]; // = 67; +int rpm1_y_prev[BUF_N]; // = 67; +int rpm2_y_prev[BUF_N]; // = 67; +int udp_len_prev = 1; +unsigned long started_time_ms = millis(); +int disp_mode = 0; // 表示モード(ボタンで切り替わる) +int line_x = 27; // 折れ線グラフのX座標 + +void buf_init(){ + for(int i=0; i= 3) disp_mode = 0; + lcd_init(disp_mode); + } + + float gyroX = 0.; float gyroY = 0.; float gyroZ = 0.; + float accX = 0.; float accY = 0.; float accZ = 0.; + float temp = 0.; + float gx, gy, gz, ax, ay, az, t; + for( int i=0; i= 2 && rpm1_y <= 132){ + M5.Lcd.drawLine(192, rpm1_y, 207, rpm1_y, RED); + buf_append(rpm1_y_prev, rpm1_y); + } + if(rpm2_y >= 2 && rpm2_y <= 132){ + M5.Lcd.drawLine(217, rpm2_y, 232, rpm2_y, RED); + buf_append(rpm2_y_prev, rpm2_y); + } + break; + case 1: // 回転数のグラフ表示 + M5.Lcd.setCursor(0, 31); + if(line_x > 238) break; + if(rpm1_y >= 2 && rpm1_y <= 132){ + if(line_x > 27) M5.Lcd.drawLine(line_x-1, rpm1_y_prev[BUF_N-1], line_x, rpm1_y, RED); + buf_append(rpm1_y_prev, rpm1_y); + flag_dx = 1; + } + if(rpm2_y >= 2 && rpm2_y <= 132){ + if(line_x > 27) M5.Lcd.drawLine(line_x-1, rpm2_y_prev[BUF_N-1], line_x, rpm2_y, BLUE); + buf_append(rpm2_y_prev, rpm2_y); + flag_dx = 1; + } + if(flag_dx) line_x++; + break; + case 2: // 回転数の数値表示 + M5.Lcd.setCursor(24, 31); + M5.Lcd.printf("%04.1f",rpm1); + break; + } + if(rpm1 > 10. && millis()-started_time_ms > UDP_TX_MS && WiFi.status() == WL_CONNECTED){ + started_time_ms = millis(); + String S = String(DEVICE) + + String(accX,1) + "," + String(accY,1) + "," + String(accZ,1) + + "," + String(rpm1,2)+ "," + String(rpm2,2); + if(S.length() > 9){ + udp_len_prev = S.length() - 8; + udp.beginPacket(UDPTO_IP,PORT); // UDP送信先を設定 + udp.println(S); // 送信データSをUDP送信 + udp.endPacket(); // UDP送信の終了(実際に送信する) + } + if(disp_mode == 0){ + M5.Lcd.println("[CSVxUDP]"); + M5.Lcd.fillRect(6, 126, 6*udp_len_prev, 8, BLACK); + M5.Lcd.setCursor(6, 126); + M5.Lcd.print(S.substring(8)); // 送信データSを表示 + } + } +} + +/****************************************************************************** +CSVxUDP 受信結果の一例 +UDPデータは、「加速度X,Y,Z,回転数」の形式で送信される +******************************************************************************* +YYYY/MM/dd hh:mm, IP Address, Accelerometer X(m/s2), Accelerometer Y(m/s2), Accelerometer Z(m/s2) +2024/06/08 15:26, 192.168.1.4, -0.1, -1.3, 10.6, 34.29 +2024/06/08 15:26, 192.168.1.4, -0.1, -1.3, 10.6, 34.23 +2024/06/08 15:26, 192.168.1.4, -0.2, -1.4, 10.6, 34.2 +2024/06/08 15:27, 192.168.1.4, -0.2, -1.4, 10.5, 34.19 +2024/06/08 15:27, 192.168.1.4, -0.5, -1.4, 9.8, 1.1 +2024/06/08 15:27, 192.168.1.4, 0, -0.3, 10.5, 34.26 +2024/06/08 15:27, 192.168.1.4, 0, -0.3, 10.6, 34.29 +2024/06/08 15:27, 192.168.1.4, 0, -0.2, 10.5, 34.24 +2024/06/08 15:27, 192.168.1.4, 0, -0.2, 10.5, 34.19 +2024/06/08 15:27, 192.168.1.4, -0.1, -0.2, 10.5, 34.23 +2024/06/08 15:27, 192.168.1.4, -0.1, -0.3, 10.6, 34.21 +2024/06/08 15:27, 192.168.1.4, -0.1, -0.3, 10.5, 34.26 +2024/06/08 15:27, 192.168.1.4, -0.2, -0.4, 10.5, 34.24 +2024/06/08 15:27, 192.168.1.4, -0.1, -0.4, 10.6, 34.19 +2024/06/08 15:28, 192.168.1.4, -0.1, -0.4, 10.5, 34.13 +2024/06/08 15:28, 192.168.1.4, 0, -0.4, 10.6, 34.17 +2024/06/08 15:28, 192.168.1.4, 0, -0.4, 10.5, 34.18 +2024/06/08 15:28, 192.168.1.4, 0.1, -0.4, 10.5, 34.21 +2024/06/08 15:28, 192.168.1.4, 0, -0.3, 10.6, 34.2 +2024/06/08 15:28, 192.168.1.4, 0, -0.3, 10.5, 34.14 +2024/06/08 15:28, 192.168.1.4, 0, -0.2, 10.6, 34.13 +2024/06/08 15:28, 192.168.1.4, -0.1, -0.2, 10.6, 34.16 +2024/06/08 15:28, 192.168.1.4, -0.1, -0.2, 10.5, 34.21 +2024/06/08 15:28, 192.168.1.4, -0.2, -0.3, 10.5, 34.14 +2024/06/08 15:28, 192.168.1.4, -0.1, -0.4, 10.6, 34.08 +******************************************************************************/