Project 2 Adaptive Cruise Control
Aim:- To develop the Adaptive Cruise Control feature as per the Requirement Document using MATLAB Simulink.
Explanation:-
- By refering the requirement 1 we build a model by using the suitable blocks.

- By reffering the second requirement we crate the model.

- by fulfilling the requiremennt 1&2 we created a subsystem .

- after requirement 1& 2 we move on to make the chart and we maked a chart by using the given requirement.

- in the reuirement 3 we have six subparts from where we use to give the various output signals.

- after the whole requirement we make a subsystem in which the reuirement is been fitted.

Result:- We get the model advisor report with 23 warnings items and 120 passed item for performing MAB test.

With the help of app file we generated the code also.

Conclusion:- The Adaptive cruise control is designed according to the requirements. The code is generated by using embedded coder. The model is checked for MAB test using Model Advisor and report is added. The requirement blocks are linked to selection in the Word document. There are many advancements in the Adaptive cruise control like turn by turn ACC, the vehicle automatically changes the speed according to the road condition, traffic, turning and slope.
/*
* File: Project_1.c
*
* Code generated for Simulink model 'Project_1'.
*
* Model version : 1.10
* Simulink Coder version : 9.7 (R2022a) 13-Nov-2021
* C/C++ source code generated on : Wed Oct 12 10:53:07 2022
*
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "Project_1.h"
#include "rtwtypes.h"
#include "Project_1_private.h"
/* Named constants for Chart: '<S2>/Chart' */
#define IN_LeadVehicle_Detected_Follow ((uint8_T)1U)
#define IN_LeadVehicle_Detected_Resume ((uint8_T)2U)
#define IN_LeadVehicle_Not_Detected_Res ((uint8_T)4U)
#define IN_LeadVehicle_Speed_equal_Set_ ((uint8_T)5U)
#define IN_LeadVehicle_Speed_lessthan_S ((uint8_T)6U)
#define Pro_IN_LeadVehicle_Not_Detected ((uint8_T)3U)
#define Project_1_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
#define Project_1_IN_OFF_MODE ((uint8_T)1U)
#define Project_1_IN_ON_MODE ((uint8_T)2U)
#define Project_1_IN_STANDBY_MODE ((uint8_T)3U)
/* Exported data definition */
/* Definition for custom storage class: ExportToFile */
uint8_T Acceleration_Mode; /* '<S2>/Chart' */
uint8_T DriveVehicle_Speed; /* '<S5>/Add2' */
uint8_T LeadVehicle_Detected; /* '<S1>/Unit Delay' */
uint8_T LeadVehicle_Speed; /* '<S6>/Add' */
/* Block states (default storage) */
DW_Project_1_T Project_1_DW;
/* Real-time model */
static RT_MODEL_Project_1_T Project_1_M_;
RT_MODEL_Project_1_T *const Project_1_M = &Project_1_M_;
/* Model step function */
void Project_1_step(void)
{
/* UnitDelay: '<S1>/Unit Delay' */
LeadVehicle_Detected = Acceleration_Mode;
/* Sum: '<S5>/Add2' incorporates:
* Inport: '<Root>/CameraInput_DriveVehicle'
* Inport: '<Root>/RadarInput_DriveVehicle'
* Sum: '<S5>/Add1'
*/
DriveVehicle_Speed = (uint8_T)((uint8_T)(CameraInput_DriveVehicle +
RadarInput_DriveVehicle) + LeadVehicle_Detected);
/* Sum: '<S6>/Add' incorporates:
* Inport: '<Root>/CameraInput_LeadVehicle'
* Inport: '<Root>/RadarInput_LeadVehicle'
*/
LeadVehicle_Speed = (uint8_T)(CameraInput_LeadVehicle + RadarInput_LeadVehicle);
/* Chart: '<S2>/Chart' incorporates:
* Inport: '<Root>/CruiseSwitch'
* Inport: '<Root>/SetSwitch'
* Inport: '<Root>/Set_Gap'
* Inport: '<Root>/Set_Speed'
* Inport: '<Root>/Time_Gap'
*/
if (Project_1_DW.is_active_c3_Project_1 == 0U) {
Project_1_DW.is_active_c3_Project_1 = 1U;
Project_1_DW.is_c3_Project_1 = Project_1_IN_OFF_MODE;
Acceleration_Mode = 0U;
} else {
switch (Project_1_DW.is_c3_Project_1) {
case Project_1_IN_OFF_MODE:
Acceleration_Mode = 0U;
if (CruiseSwitch) {
Project_1_DW.is_c3_Project_1 = Project_1_IN_STANDBY_MODE;
Acceleration_Mode = 1U;
}
break;
case Project_1_IN_ON_MODE:
if (!CruiseSwitch) {
Project_1_DW.is_ON_MODE = Project_1_IN_NO_ACTIVE_CHILD;
Project_1_DW.is_c3_Project_1 = Project_1_IN_OFF_MODE;
Acceleration_Mode = 0U;
} else if (!SetSwitch) {
Project_1_DW.is_ON_MODE = Project_1_IN_NO_ACTIVE_CHILD;
Project_1_DW.is_c3_Project_1 = Project_1_IN_STANDBY_MODE;
Acceleration_Mode = 1U;
} else {
switch (Project_1_DW.is_ON_MODE) {
case IN_LeadVehicle_Detected_Follow:
Acceleration_Mode = 2U;
if (LeadVehicle_Detected == 0) {
Project_1_DW.is_ON_MODE = Pro_IN_LeadVehicle_Not_Detected;
Acceleration_Mode = 1U;
} else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
Set_Speed)) || (Time_Gap < Set_Gap)) {
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Acceleration_Mode = 4U;
}
break;
case IN_LeadVehicle_Detected_Resume:
Acceleration_Mode = 3U;
/* . */
if ((DriveVehicle_Speed == Set_Speed) && (LeadVehicle_Speed >=
Set_Speed) && (Time_Gap >= Set_Gap)) {
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Detected_Follow;
Acceleration_Mode = 2U;
} else if (LeadVehicle_Detected == 0) {
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Not_Detected_Res;
Acceleration_Mode = 1U;
} else if ((DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed >
DriveVehicle_Speed) && (Time_Gap >= Set_Gap)) {
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Speed_equal_Set_;
Acceleration_Mode = 5U;
}
break;
case Pro_IN_LeadVehicle_Not_Detected:
Acceleration_Mode = 1U;
if ((LeadVehicle_Detected == 1) && (DriveVehicle_Speed == Set_Speed) &&
(LeadVehicle_Speed >= Set_Speed) && (Time_Gap >= Set_Gap)) {
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Detected_Follow;
Acceleration_Mode = 2U;
} else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
Set_Speed)) || (Time_Gap < Set_Gap)) {
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Acceleration_Mode = 4U;
}
break;
case IN_LeadVehicle_Not_Detected_Res:
Acceleration_Mode = 1U;
break;
case IN_LeadVehicle_Speed_equal_Set_:
Acceleration_Mode = 5U;
if ((LeadVehicle_Detected == 0) || (DriveVehicle_Speed <= Set_Speed))
{
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Not_Detected_Res;
Acceleration_Mode = 1U;
} else if (((DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed >
DriveVehicle_Speed)) || (Time_Gap >= Set_Gap)) {
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Detected_Resume;
Acceleration_Mode = 3U;
} else if (((LeadVehicle_Speed < Set_Speed) && (LeadVehicle_Speed <
DriveVehicle_Speed)) || (0.75 * (real_T)Set_Gap ==
Time_Gap)) {
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Acceleration_Mode = 4U;
}
break;
default:
/* case IN_LeadVehicle_Speed_lessthan_Set_Speed: */
Acceleration_Mode = 4U;
if ((LeadVehicle_Detected == 0) && (DriveVehicle_Speed == Set_Speed))
{
Project_1_DW.is_ON_MODE = Pro_IN_LeadVehicle_Not_Detected;
Acceleration_Mode = 1U;
} else if (((real_T)LeadVehicle_Speed * 1.25 >= DriveVehicle_Speed) &&
((real_T)LeadVehicle_Speed * 0.75 <= DriveVehicle_Speed) &&
(DriveVehicle_Speed < Set_Speed) && ((Time_Gap <= 1.25 *
(real_T)Set_Gap) && (Time_Gap >= 0.75 * (real_T)Set_Gap)))
{
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Speed_equal_Set_;
Acceleration_Mode = 5U;
}
break;
}
}
break;
default:
/* case IN_STANDBY_MODE: */
Acceleration_Mode = 1U;
if (SetSwitch) {
Project_1_DW.is_c3_Project_1 = Project_1_IN_ON_MODE;
Project_1_DW.is_ON_MODE = IN_LeadVehicle_Detected_Follow;
Acceleration_Mode = 2U;
} else if (!CruiseSwitch) {
Project_1_DW.is_c3_Project_1 = Project_1_IN_OFF_MODE;
Acceleration_Mode = 0U;
}
break;
}
}
/* End of Chart: '<S2>/Chart' */
}
/* Model initialize function */
void Project_1_initialize(void)
{
/* (no initialization code required) */
}
/* Model terminate function */
void Project_1_terminate(void)
{
/* (no terminate code required) */
}
/*
* File trailer for generated code.
*
* [EOF]
*/