/********* Pleasedontcode.com **********
Pleasedontcode thanks you for automatic code generation! Enjoy your code!
- Terms and Conditions:
You have a non-exclusive, revocable, worldwide, royalty-free license
for personal and commercial use. Attribution is optional; modifications
are allowed, but you're responsible for code maintenance. We're not
liable for any loss or damage. For full terms,
please visit pleasedontcode.com/termsandconditions.
- Project: Acceleration Alert
- Source Code NOT compiled for: Arduino Nano ESP32
- Source Code created on: 2024-08-19 16:59:16
********* Pleasedontcode.com **********/
/****** SYSTEM REQUIREMENTS *****/
/****** SYSTEM REQUIREMENT 1 *****/
/* Read the values from the accelerometer. Hold the */
/* values as reference values to be compaired with */
/* the active values. Monitor the active values for a */
/* change that is greater than 10% in any direction */
/* for a period of 3 seconds. sound the buzzer when */
/* true */
/****** END SYSTEM REQUIREMENTS *****/
/****** DEFINITION OF LIBRARIES *****/
#include
#include
#include
/****** FUNCTION PROTOTYPES *****/
void setup(void);
void loop(void);
void updateOutputs();
void checkAccelerationChange();
/***** DEFINITION OF DIGITAL OUTPUT PINS *****/
const uint8_t Buzzer_ActiveBuzzer_output_PIN_D2 = 2;
/***** DEFINITION OF OUTPUT RAW VARIABLES *****/
/***** used to store raw data *****/
bool Buzzer_ActiveBuzzer_output_PIN_D2_rawData = 0;
/***** DEFINITION OF OUTPUT PHYSICAL VARIABLES *****/
/***** used to store data after characteristic curve transformation *****/
float Buzzer_ActiveBuzzer_output_PIN_D2_phyData = 0.0;
// MPU6050 object
Adafruit_MPU6050 mpu;
// Reference acceleration values
float referenceAccel[3] = {0.0, 0.0, 0.0}; // X, Y, Z
unsigned long changeStartTime = 0; // Time when change started
bool changeDetected = false; // Flag for detecting change
void setup(void)
{
// Initialize serial communication
Serial.begin(115200);
pinMode(Buzzer_ActiveBuzzer_output_PIN_D2, OUTPUT);
// Initialize MPU6050
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
// Set accelerometer range
mpu.setAccelerometerRange(MPU6050_RANGE_2_G);
delay(100);
// Read initial values for reference
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
referenceAccel[0] = a.acceleration.x;
referenceAccel[1] = a.acceleration.y;
referenceAccel[2] = a.acceleration.z;
}
void loop(void)
{
// Refresh output data
updateOutputs();
// Check for acceleration changes
checkAccelerationChange();
}
void updateOutputs()
{
// Write the state of the buzzer
digitalWrite(Buzzer_ActiveBuzzer_output_PIN_D2, Buzzer_ActiveBuzzer_output_PIN_D2_rawData);
}
void checkAccelerationChange()
{
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Calculate percentage change for each axis
float changeX = abs(a.acceleration.x - referenceAccel[0]) / referenceAccel[0];
float changeY = abs(a.acceleration.y - referenceAccel[1]) / referenceAccel[1];
float changeZ = abs(a.acceleration.z - referenceAccel[2]) / referenceAccel[2];
// Check if any change exceeds 10%
if ((changeX > 0.1 || changeY > 0.1 || changeZ > 0.1) && !changeDetected) {
changeDetected = true; // Set flag for change detected
changeStartTime = millis(); // Record the time change started
}
// If change is detected, check if it has been for 3 seconds
if (changeDetected) {
if (millis() - changeStartTime >= 3000) {
Buzzer_ActiveBuzzer_output_PIN_D2_rawData = true; // Activate buzzer
}
}
// Reset if no change is detected
if (changeX <= 0.1 && changeY <= 0.1 && changeZ <= 0.1) {
changeDetected = false; // Reset change detected flag
Buzzer_ActiveBuzzer_output_PIN_D2_rawData = false; // Deactivate buzzer
}
}
/* END CODE */