/********* 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: Car_Alarm
- Source Code compiled for: Arduino Uno
- Source Code created on: 2024-11-19 22:09:59
- Source Code generated by: Alessandro
********* Pleasedontcode.com **********/
/****** SYSTEM REQUIREMENTS *****/
/****** SYSTEM REQUIREMENT 1 *****/
/* Upon powering on, the system must take 10 readings */
/* from the accelerometer across all three axes (X, */
/* Y, Z). Compute the average of these readings and */
/* use it to offset gravity from subsequent periodic */
/* accelerometer measurements. */
/****** SYSTEM REQUIREMENT 2 *****/
/* On startup, the car alarm must be disengaged by */
/* default. If an authorized RFID car is scanned */
/* using the RFID card reader: 1) enable the car */
/* alarm it it is currently disabled. 2) Disable the */
/* car alarm if it is currently enabled. */
/****** SYSTEM REQUIREMENT 3 *****/
/* When the car alarm is enabled: 1) Periodically */
/* read the accelerometer measurements. 2) If the */
/* absolute value of any axis (X, Y, or Z) exceeds a */
/* predefined threshold (set by calibration), trigger */
/* the alarm. */
/****** SYSTEM REQUIREMENT 4 *****/
/* When the alarm is triggered, the relay must */
/* control the car horn. The relay will toggle the */
/* car horn ON and OFF for 10 cycles. Each ON/OFF */
/* cycle must have a delay of 500 milliseconds. */
/****** END SYSTEM REQUIREMENTS *****/
/********* User code review feedback **********
#### Feedback 1 ####
- complete checkRFID() code
********* User code review feedback **********/
/* START CODE */
/****** DEFINITION OF LIBRARIES *****/
#include
#include
#include //https://github.com/electroniccats/mpu6050
#include //https://github.com/rafaelnsantos/Relay
#include //https://github.com/miguelbalboa/rfid
/****** FUNCTION PROTOTYPES *****/
void setup(void);
void loop(void);
void calibrateAccelerometer();
void readAccelerometer();
void checkRFID();
void triggerAlarm();
void controlHorn();
/***** DEFINITION OF DIGITAL INPUT PINS *****/
const uint8_t accelerometer_MPU6050_Interrupt_PIN_D2 = 2;
const uint8_t card_reader_MFRC522_IRQ_PIN_D5 = 5;
/***** DEFINITION OF DIGITAL OUTPUT PINS *****/
const uint8_t car_horn_RelayModule_Signal_PIN_D3 = 3;
const uint8_t card_reader_MFRC522_RST_PIN_D4 = 4;
/***** DEFINITION OF I2C PINS *****/
const uint8_t accelerometer_MPU6050_I2C_PIN_SDA_A4 = A4;
const uint8_t accelerometer_MPU6050_I2C_PIN_SCL_A5 = A5;
/***** DEFINITION OF OUTPUT RAW VARIABLES *****/
bool car_horn_RelayModule_Signal_PIN_D3_rawData = 0;
bool card_reader_MFRC522_RST_PIN_D4_rawData = 0;
/***** DEFINITION OF ACCELEROMETER VARIABLES *****/
MPU6050 accelerometer;
float accelOffset[3] = {0.0, 0.0, 0.0}; // Offset for X, Y, Z axes
bool alarmEnabled = false; // Alarm state
const float threshold = 1.5; // Threshold for triggering alarm
// Create an instance of the MFRC522 class
MFRC522 rfid(card_reader_MFRC522_IRQ_PIN_D5, card_reader_MFRC522_RST_PIN_D4);
/****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/
void setup(void)
{
// Initialize pins
pinMode(accelerometer_MPU6050_Interrupt_PIN_D2, INPUT);
pinMode(card_reader_MFRC522_IRQ_PIN_D5, INPUT_PULLUP);
pinMode(car_horn_RelayModule_Signal_PIN_D3, OUTPUT);
pinMode(card_reader_MFRC522_RST_PIN_D4, OUTPUT);
// Start the SPI library:
SPI.begin();
// Initialize the RFID reader
rfid.PCD_Init();
// Initialize the accelerometer
accelerometer.initialize();
calibrateAccelerometer();
}
void loop(void)
{
// Check for RFID
checkRFID();
// If alarm is enabled, read accelerometer data
if (alarmEnabled) {
readAccelerometer();
}
}
void calibrateAccelerometer() {
// Take 10 readings from the accelerometer
int16_t ax, ay, az;
for (int i = 0; i < 10; i++) {
accelerometer.getAcceleration(&ax, &ay, &az);
accelOffset[0] += ax;
accelOffset[1] += ay;
accelOffset[2] += az;
delay(100);
}
// Compute average
accelOffset[0] /= 10.0;
accelOffset[1] /= 10.0;
accelOffset[2] /= 10.0;
}
void readAccelerometer() {
int16_t ax, ay, az;
accelerometer.getAcceleration(&ax, &ay, &az);
// Offset gravity
ax -= accelOffset[0];
ay -= accelOffset[1];
az -= accelOffset[2];
// Check if any axis exceeds the threshold
if (abs(ax) > threshold || abs(ay) > threshold || abs(az) > threshold) {
triggerAlarm();
}
}
void checkRFID() {
// Look for a new card
if (!rfid.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if (!rfid.PICC_ReadCardSerial()) {
return;
}
// Check if the scanned RFID is authorized (for simplicity, using a specific UID)
// Replace with actual authorization logic
byte authorizedUID[] = {0xDE, 0xAD, 0xBE, 0xEF}; // Example UID
if (memcmp(rfid.uid.uidByte, authorizedUID, sizeof(authorizedUID)) == 0) {
alarmEnabled = !alarmEnabled; // Toggle alarm state
}
// Stop reading the card
rfid.PICC_HaltA();
}
void triggerAlarm() {
controlHorn();
}
void controlHorn() {
for (int i = 0; i < 10; i++) {
digitalWrite(car_horn_RelayModule_Signal_PIN_D3, HIGH);
delay(500);
digitalWrite(car_horn_RelayModule_Signal_PIN_D3, LOW);
delay(500);
}
}
/* END CODE */