Skip to content

support different acceleration sensors onboard MCUS2 #487

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions src/components/Blockly/blocks/sensebox-sensors.js
Original file line number Diff line number Diff line change
Expand Up @@ -740,14 +740,14 @@ Blockly.Blocks["sensebox_esp32s2_light"] = {
};

/**
* senseBox-MCU ESP32-S2 onBoard MPU6050
* senseBox-MCU ESP32-S2 onBoard accelerometer
*
*
*/

Blockly.Blocks["sensebox_esp32s2_mpu6050"] = {
Blockly.Blocks["sensebox_esp32s2_accelerometer"] = {
init: function () {
this.appendDummyInput().appendField("ESP32-S2 MPU6050");
this.appendDummyInput().appendField(Blockly.Msg.senseBox_accelerometer);
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.senseBox_value)
Expand All @@ -762,9 +762,9 @@ Blockly.Blocks["sensebox_esp32s2_mpu6050"] = {
);
this.setOutput(true, Types.DECIMAL.typeName);
this.setColour(getColour().sensebox);
this.setTooltip(Blockly.Msg.senseBox_mpu6050_tooltip);
this.setHelpUrl(withBoardParam(Blockly.Msg.senseBox_mpu6050_helpurl));
this.data = { name: "mpu6050" };
this.setTooltip(Blockly.Msg.senseBox_accelerometer_tooltip);
this.setHelpUrl(withBoardParam(Blockly.Msg.senseBox_accelerometer_helpurl));
this.data = { name: "acceleration" };
},
};

Expand Down Expand Up @@ -805,8 +805,8 @@ Blockly.Blocks["sensebox_sensor_icm20948"] = {
);
this.setOutput(true, Types.DECIMAL.typeName);
this.setColour(getColour().sensebox);
this.setTooltip(Blockly.Msg.senseBox_mpu6050_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_mpu6050_helpurl);
this.setTooltip(Blockly.Msg.senseBox_accelerometer_tooltip);
this.setHelpUrl(Blockly.Msg.senseBox_accelerometer_helpurl);
this.data = { name: "icm20948" };
},
};
140 changes: 93 additions & 47 deletions src/components/Blockly/generator/sensebox-sensors.js
Original file line number Diff line number Diff line change
Expand Up @@ -1037,56 +1037,102 @@ Blockly.Generator.Arduino.forBlock["sensebox_esp32s2_light"] = function () {
};

/**
* senseBox MCU-S2 onboard MPU6050
* senseBox MCU-S2 onboard accelerometer
*
**/

Blockly.Generator.Arduino.forBlock["sensebox_esp32s2_mpu6050"] = function () {
var code = "";
var dropdown = this.getFieldValue("value");
Blockly.Generator.Arduino.libraries_["esp32s2_mpu6050"] =
`#include <Adafruit_MPU6050.h>`;
Blockly.Generator.Arduino.libraries_["Adafruit_Sensor"] =
`#include <Adafruit_Sensor.h>`;
Blockly.Generator.Arduino.libraries_["library_wire"] = `#include <Wire.h>`;
Blockly.Generator.Arduino.definitions_["define_Adafruit_mpu6050"] =
"Adafruit_MPU6050 mpu;";
Blockly.Generator.Arduino.definitions_["define_sensor_events"] =
"sensors_event_t a, g, temp;";
Blockly.Generator.Arduino.setupCode_["Wire1.begin()"] = "Wire1.begin();";
Blockly.Generator.Arduino.setupCode_["mpu.begin()"] =
"mpu.begin(0x68, &Wire1);";
Blockly.Generator.Arduino.setupCode_["mpu.setAccelerometerRange()"] =
"mpu.setAccelerometerRange(MPU6050_RANGE_8_G);";
Blockly.Generator.Arduino.loopCodeOnce_["mpu.getEvent"] =
"mpu.getEvent(&a, &g, &temp);";
switch (dropdown) {
case "accelerationX":
code = "a.acceleration.x";
break;
case "accelerationY":
code = "a.acceleration.y";
break;
case "accelerationZ":
code = "a.acceleration.z";
break;
case "gyroscopeX":
code = "g.gyro.x";
break;
case "gyroscopeY":
code = "g.gyro.y";
break;
case "gyroscopeZ":
code = "g.gyro.z";
break;
case "temperature":
code = "temp.temperature";
break;
default:
code = "";
}
return [code, Blockly.Generator.Arduino.ORDER_ATOMIC];
};
Blockly.Generator.Arduino.forBlock["sensebox_esp32s2_accelerometer"] =
function () {
var code = "";
var dropdown = this.getFieldValue("value");
Blockly.Generator.Arduino.libraries_["esp32s2_mpu6050"] =
`#include <Adafruit_MPU6050.h>`;
Blockly.Generator.Arduino.libraries_["esp32s2_icm42670"] =
`#include "ICM42670P.h"`;
Blockly.Generator.Arduino.libraries_["esp32s2_icm20948"] =
`#include <ICM20948_WE.h>`;
Blockly.Generator.Arduino.libraries_["Adafruit_Sensor"] =
`#include <Adafruit_Sensor.h>`;
Blockly.Generator.Arduino.libraries_["library_wire"] = `#include <Wire.h>`;
Blockly.Generator.Arduino.definitions_["define_Adafruit_mpu6050"] =
"Adafruit_MPU6050 mpu;";
Blockly.Generator.Arduino.definitions_["define_ICM42670P"] =
"ICM42670 icm = ICM42670(Wire1, 0);";
Blockly.Generator.Arduino.definitions_["define_ICM20948"] =
"ICM20948_WE myIMU = ICM20948_WE(&Wire1, 0x68);";
Blockly.Generator.Arduino.definitions_["define_acceleration_switch"] =
"int sensorActive = 0; // 0: none, 1: MPU6050, 2: ICM42670P, 3: ICM20948";
Blockly.Generator.Arduino.setupCode_["Wire1.begin()"] = "Wire1.begin();";
Blockly.Generator.Arduino.setupCode_["begin_acceleration"] =
"if (mpu.begin(0x68, &Wire1)) // Try MPU6050 first\n" +
" {\n" +
" mpu.setAccelerometerRange(MPU6050_RANGE_8_G);\n" +
" mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);\n" +
" sensorActive = 0;\n" +
" }\n" +
" else if (icm.begin() == 0) // If MPU6050 fails, try ICM42670P\n" +
" {\n" +
" icm.startAccel(21, 8); // Accel ODR = 100 Hz, Range = 8G\n" +
" sensorActive = 1;\n" +
" }\n" +
" else\n" +
" {\n" +
" myIMU.init();\n" +
" myIMU.autoOffsets();\n" +
" myIMU.setAccRange(ICM20948_ACC_RANGE_8G);\n" +
" myIMU.setAccSampleRateDivider(4); // 100 Hz sample rate\n" +
" sensorActive = 2;\n" +
" }";
Blockly.Generator.Arduino.codeFunctions_["sensebox_requestAcceleration"] =
"float getAcceleration(String sensorValueType) {\n" +
"if (sensorActive == 0) {\n" +
"sensors_event_t a, g, temp;\n" +
"mpu.getEvent(&a, &g, &temp);\n" +
'if (sensorValueType == "accelerationX") {\n' +
"return a.acceleration.x;\n" +
'} else if (sensorValueType == "accelerationY") {\n' +
"return a.acceleration.y;\n" +
'} else if (sensorValueType == "accelerationZ") {\n' +
"return a.acceleration.z;\n" +
'} else if (sensorValueType == "temperature") {\n' +
"return temp.temperature;\n" +
"} else {\n" +
"return 0.0;\n" +
"}\n" +
"} else if (sensorActive == 1) {\n" +
"inv_imu_sensor_event_t imu_event;\n" +
"icm.getDataFromRegisters(imu_event);\n" +
'if (sensorValueType == "accelerationX") {\n' +
"return (imu_event.accel[0]*9.81)/4096.0;\n" +
'} else if (sensorValueType == "accelerationY") {\n' +
"return (imu_event.accel[1]*9.81)/4096.0;\n" +
'} else if (sensorValueType == "accelerationZ") {\n' +
"return (imu_event.accel[2]*9.81)/4096.0;\n" +
'} else if (sensorValueType == "temperature") {\n' +
"return (imu_event.temperature/132.48)+25.0;\n" +
"} else {\n" +
"return 0.0;\n" +
"}\n" +
"} else {\n" +
"myIMU.readSensor();\n" +
"xyzFloat accRaw;\n" +
"myIMU.getAccRawValues(&accRaw);\n" +
'if (sensorValueType == "accelerationX") {\n' +
"return accRaw.x * 9.81 / 4096.0;\n" +
'} else if (sensorValueType == "accelerationY") {\n' +
"return accRaw.y * 9.81 / 4096.0;\n" +
'} else if (sensorValueType == "accelerationZ") {\n' +
"return accRaw.z * 9.81 / 4096.0;\n" +
'} else if (sensorValueType == "temperature") {\n' +
"return myIMU.getTemperature();\n" +
"} else {\n" +
"return 0.0;\n" +
"}\n" +
"}\n" +
"}\n";
var code = 'getAcceleration("' + dropdown + '")';
return [code, Blockly.Generator.Arduino.ORDER_ATOMIC];
};

/**
* Block for Truebner STM50 on MCUS2
Expand Down
18 changes: 6 additions & 12 deletions src/components/Blockly/msg/de/sensebox-sensors.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,17 +243,12 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver
senseBox_esp32_photodiode_helpurl:
"https://docs.sensebox.de/docs/hardware/sensors/photodiode",
/**
* MPU6050 */
senseBox_mpu6050_tooltip:
"Der MPU6050 ist ein Beschleunigungs- und Gyroskopsensor. Schließe den Sensor an einen der I2C Anschlüsse an. Der Sensor gibt dir die Beschleunigung in m/s² und die Winkelgeschwindigkeit in °/s zurück.",
senseBox_mpu6050_helpurl: "https://docs.sensebox.de/docs/hardware/sensors/mpu6050",

/**
* MPU6050 */
senseBox_mpu6050_tooltip:
"Der MPU6050 ist ein Beschleunigungs- und Gyroskopsensor. Schließe den Sensor an einen der I2C Anschlüsse an. Der Sensor gibt dir die Beschleunigung in m/s² und die Winkelgeschwindigkeit in °/s zurück.",
senseBox_mpu6050_helpurl:
"https://docs.sensebox.de/docs/hardware/sensors/mpu6050/",
* accelerometer MCUS2(ESP32) */
senseBox_accelerometer: "ESP32-S2 Beschleunigungssensor",
senseBox_accelerometer_tooltip:
"Die senseBox MCU S2 hat einen der folgenden Beschleunigungssensoren an Bord: MPU6050, ICM-42670-P oder ICM-20948. Diese Sensoren geben dir die Beschleunigung in m/s² zurück.",
senseBox_accelerometer_helpurl:
"https://docs.sensebox.de/docs/hardware/sensors/mpu6050", // TODO: mpu6050 is just one of the supported acceleration sensors of this block

/**
* ToF Imager
Expand All @@ -272,5 +267,4 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver
* ICM Accel/Gyro
*/
senseBox_icm20948: "Beschleunigungs-/Gyroskopsensor (ICM20948)",

};
8 changes: 8 additions & 0 deletions src/components/Blockly/msg/en/sensebox-sensors.js
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,14 @@ The measured values for temperature, humidity and air pressure can be used direc
senseBox_esp32_photodiode_helpurl:
"https://docs.sensebox.de/en/docs/hardware/sensors/photodiode",

/**
* accelerometer MCUS2(ESP32) */
senseBox_accelerometer: "ESP32-S2 Accelerometer",
senseBox_accelerometer_tooltip:
"The senseBox MCU S2 has one of the following accelerometers on board: MPU6050, ICM-42670-P or ICM-20948. These sensor gives you the acceleration in m/s².",
senseBox_accelerometer_helpurl:
"https://docs.sensebox.de/docs/hardware/sensors/mpu6050", // TODO: mpu6050 is just one of the supported acceleration sensors of this block

/**
* ToF Imager
*
Expand Down
2 changes: 1 addition & 1 deletion src/components/Blockly/toolbox/ToolboxEsp.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export const ToolboxEsp = () => {
<Block type="sensebox_sensor_temp_hum" />
<Block type="sensebox_sensor_uv_light" />
<Block type="sensebox_esp32s2_light" />
<Block type="sensebox_esp32s2_mpu6050" />
<Block type="sensebox_esp32s2_accelerometer" />
<Block type="sensebox_sensor_sds011" />
<Block type="sensebox_sensor_sps30" />
<Block type="sensebox_sensor_pressure" />
Expand Down