嵌入式 智能小车 物联网 智能嵌入式
回帖(1)
2021-12-27 10:15:22
一、实验内容:
1.完成智能小车的组装;2.为组装好的小车进行系统录入,并确认板子焊接完好,无断线;3.通过小车的电路图,并利用keil uVision5和STM32Cube MX等软件对小车的各个模块进行编写程序;4.应用微控制器的端口、外部中断、定时器等基本模块对小车实现基本控制;5.通过控制按键来实现小车上灯光的闪烁控制;6.结合电源板、电机驱动板来控制电机的转动,实现小车的行进;7.加上红外线传感器,来实现小车的测距,加上蜂鸣器实现小车的报警;8.加上摄像头和舵机,来实现摄像头的360度旋转;9.实现小车与PC机的串口通信;10. 对小车加上WiFi模块可以连接手机APP,通过控制手机APP来实现小车的基本功能:前进、后退、转弯、红外线测距。 二、实验过程介绍
1.硬件准备:
将小车组装好,检查各模块焊接无误:电源模块、单片机模块、红外线传感器模块、电机模块。
2.系统的总电路图:
(1) 芯片模块:
(2) 电源模块:
(3) 电机模块:
(4) 蜂鸣器模块:
(5) 超声波模块:
3.分模块功能:
(1)小车灯模块:
1>通过按键来控制小车的灯的颜色变换。
·相关实验步骤截图:
2>通过按键来控制小车的灯的闪烁及亮度(即添加中断)。
·原理图:
·相关实验步骤截图:
3>通过按键来控制小车的灯实现呼吸灯效果。
·原理图:
·相关实验步骤截图:
·实验代码思路:
1)启动定时器:HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
2)设置CMP的值:
for(i=0;i<=100;i++){
__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,i);
HAL_Delay(50);
}
(2)电机模块:
通过控制电机的转动来实现小车的行进。 ·原理图:
·相关实验步骤截图:
·实验代码思路:
1)设置制动(即刹车):
void car_init(void){ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); //left __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); //right __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0); } 2)设置速度:
void car_front(int speed){ __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,speed); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,speed);} 3)设置前进:
void car_front(int speed){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,speed); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,speed);} 4)设置后退:
`void car_back(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,30); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,30);} 5)设置左转:
void car_turn_left(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,30);} 6)设置右转:
void car_turn_right(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,30); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0);} 7)设置停止:
void car_stop(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0);} 8)调用函数
car_init(); while (1) { car_stop(); HAL_Delay(5000); car_front(30); HAL_Delay(5000); car_front(90); HAL_Delay(5000); car_back(); HAL_Delay(5000); car_turn_left(); HAL_Delay(5000); car_turn_right(); HAL_Delay(5000); } (3)舵机模块:
通过加入摄像头和舵机实现摄像头的360度旋转。 ·相关实验步骤截图:
·实验代码思路:
1)启动定时器:
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
2)设置CMP:
for(i=5;i<=25;i++)
{
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i);
HAL_Delay(1000);
}
for(i=25;i>=5;i–)
{
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i);
HAL_Delay(1000);
}
(4)通信模块:
实现的功能:pc发送消息给STM32,STM32返回数据 ·实验原理图:
·相关实验步骤截图:
·实验代码思路:
1)uint8_t rx_data[6];
2)使能接收:HAL_UART_Receive_IT(&huart1,rx_data,6);
//表示每收6个字节才产生中断
3)串口中断函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef huart)
//产生中断后,使数据保存
4)发送函数:
HAL_UART_Transmit_IT(&huart1,(uint8_t)“I love me too!”,strlen(“I love me too!”));
5)重新接收使用:
HAL_UART_Receive_IT(&huart1,rx_data,6);
(5)蜂鸣器模块:
实现的功能:利用红外线传感器实现当出现“悬崖”时实现蜂鸣器响。 ·相关实验步骤截图:
·实验代码思路:
1)先启动定时器 HAL_TIM_Base_Start_IT(&htim2);
2)写中断函数
(6)超声波模块:
实现的功能:连接超声波传感器并且在PC上接收数据。 ·实验原理图:
·相关实验步骤截图:
·实验代码思路:
1)拉低PC3,并关灯
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
2)拉高PC3,并启动定时器
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);
HAL_TIM_Base_Start_IT(&htim2);
3)实现定时器中断
void HAL_TIM_PeroidElapsedCallback(TIM_HandleTypeDef *htim2)
{
}
4)在中断中进行判断:
5)设置标志位
4.整体设计:
(1)手机APP界面:
(2)整体实现的功能、思路及步骤:
·功能:
通过手机APP控制小车,实现小车的前进、后退、左转、右转。并且利用超声波检测到障碍物时小车自动停止。
·思路:
·步骤:
(3)实验主要代码:
5.实验中遇到的问题及解决方法:
实验中小车APP控制时按键不太灵验,而且经常出现按键抖动,而且连接线有时候经常出现问题,影响实验的进度。在控制小车时,手机上的控制位刚开始不太准确,经过调整后确定为第三位为控制位而进行实验成功。
一、实验内容:
1.完成智能小车的组装;2.为组装好的小车进行系统录入,并确认板子焊接完好,无断线;3.通过小车的电路图,并利用keil uVision5和STM32Cube MX等软件对小车的各个模块进行编写程序;4.应用微控制器的端口、外部中断、定时器等基本模块对小车实现基本控制;5.通过控制按键来实现小车上灯光的闪烁控制;6.结合电源板、电机驱动板来控制电机的转动,实现小车的行进;7.加上红外线传感器,来实现小车的测距,加上蜂鸣器实现小车的报警;8.加上摄像头和舵机,来实现摄像头的360度旋转;9.实现小车与PC机的串口通信;10. 对小车加上WiFi模块可以连接手机APP,通过控制手机APP来实现小车的基本功能:前进、后退、转弯、红外线测距。 二、实验过程介绍
1.硬件准备:
将小车组装好,检查各模块焊接无误:电源模块、单片机模块、红外线传感器模块、电机模块。
2.系统的总电路图:
(1) 芯片模块:
(2) 电源模块:
(3) 电机模块:
(4) 蜂鸣器模块:
(5) 超声波模块:
3.分模块功能:
(1)小车灯模块:
1>通过按键来控制小车的灯的颜色变换。
·相关实验步骤截图:
2>通过按键来控制小车的灯的闪烁及亮度(即添加中断)。
·原理图:
·相关实验步骤截图:
3>通过按键来控制小车的灯实现呼吸灯效果。
·原理图:
·相关实验步骤截图:
·实验代码思路:
1)启动定时器:HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
2)设置CMP的值:
for(i=0;i<=100;i++){
__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,i);
HAL_Delay(50);
}
(2)电机模块:
通过控制电机的转动来实现小车的行进。 ·原理图:
·相关实验步骤截图:
·实验代码思路:
1)设置制动(即刹车):
void car_init(void){ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); //left __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); //right __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0); } 2)设置速度:
void car_front(int speed){ __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,speed); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,speed);} 3)设置前进:
void car_front(int speed){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,speed); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,speed);} 4)设置后退:
`void car_back(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,30); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,30);} 5)设置左转:
void car_turn_left(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,30);} 6)设置右转:
void car_turn_right(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,30); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0);} 7)设置停止:
void car_stop(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0);} 8)调用函数
car_init(); while (1) { car_stop(); HAL_Delay(5000); car_front(30); HAL_Delay(5000); car_front(90); HAL_Delay(5000); car_back(); HAL_Delay(5000); car_turn_left(); HAL_Delay(5000); car_turn_right(); HAL_Delay(5000); } (3)舵机模块:
通过加入摄像头和舵机实现摄像头的360度旋转。 ·相关实验步骤截图:
·实验代码思路:
1)启动定时器:
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
2)设置CMP:
for(i=5;i<=25;i++)
{
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i);
HAL_Delay(1000);
}
for(i=25;i>=5;i–)
{
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i);
HAL_Delay(1000);
}
(4)通信模块:
实现的功能:pc发送消息给STM32,STM32返回数据 ·实验原理图:
·相关实验步骤截图:
·实验代码思路:
1)uint8_t rx_data[6];
2)使能接收:HAL_UART_Receive_IT(&huart1,rx_data,6);
//表示每收6个字节才产生中断
3)串口中断函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef huart)
//产生中断后,使数据保存
4)发送函数:
HAL_UART_Transmit_IT(&huart1,(uint8_t)“I love me too!”,strlen(“I love me too!”));
5)重新接收使用:
HAL_UART_Receive_IT(&huart1,rx_data,6);
(5)蜂鸣器模块:
实现的功能:利用红外线传感器实现当出现“悬崖”时实现蜂鸣器响。 ·相关实验步骤截图:
·实验代码思路:
1)先启动定时器 HAL_TIM_Base_Start_IT(&htim2);
2)写中断函数
(6)超声波模块:
实现的功能:连接超声波传感器并且在PC上接收数据。 ·实验原理图:
·相关实验步骤截图:
·实验代码思路:
1)拉低PC3,并关灯
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
2)拉高PC3,并启动定时器
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);
HAL_TIM_Base_Start_IT(&htim2);
3)实现定时器中断
void HAL_TIM_PeroidElapsedCallback(TIM_HandleTypeDef *htim2)
{
}
4)在中断中进行判断:
5)设置标志位
4.整体设计:
(1)手机APP界面:
(2)整体实现的功能、思路及步骤:
·功能:
通过手机APP控制小车,实现小车的前进、后退、左转、右转。并且利用超声波检测到障碍物时小车自动停止。
·思路:
·步骤:
(3)实验主要代码:
5.实验中遇到的问题及解决方法:
实验中小车APP控制时按键不太灵验,而且经常出现按键抖动,而且连接线有时候经常出现问题,影响实验的进度。在控制小车时,手机上的控制位刚开始不太准确,经过调整后确定为第三位为控制位而进行实验成功。
举报
更多回帖