1. 智能小车:让小车动起来(360.64)
硬件接线
- B-2A – PB0
- B-1A – PB1
- A-1B – PB2
- A-1A – PB10
- 其余接线参考上官一号小车项目。
cubemx配置
![STM32F103C8T6第7天:智能小车项目_第1张图片](http://img.e-com-net.com/image/info8/5aae0726ec6c4a1bb602ef15eee5d28f.jpg)
![STM32F103C8T6第7天:智能小车项目_第2张图片](http://img.e-com-net.com/image/info8/08eca372dc304669a27b02e4dc0b370f.jpg)
![STM32F103C8T6第7天:智能小车项目_第3张图片](http://img.e-com-net.com/image/info8/aad58de4ea464d1582691a4d3c85afc6.jpg)
![STM32F103C8T6第7天:智能小车项目_第4张图片](http://img.e-com-net.com/image/info8/15a53d385a9c41469cb49b18307de36f.jpg)
- 代码(28.smartCar_project1/MDK-ARM)
2. 智能小车:串口控制小车(361.65)
- 在 smartCar_project1 的基础上:
![STM32F103C8T6第7天:智能小车项目_第5张图片](http://img.e-com-net.com/image/info8/ece4a9fd47ee4262824d3c1bd65a68c9.jpg)
- 代码(28.smartCar_project2/MDK-ARM)(拷贝 4g_led_project 中串口接收数据相关的代码)
3. 智能小车:点动控制小车(362.66)
- 提升滴答定时器的优先级,降低串口的优先级
![STM32F103C8T6第7天:智能小车项目_第6张图片](http://img.e-com-net.com/image/info8/18e9087a18044214a81cf96041e02544.jpg)
![STM32F103C8T6第7天:智能小车项目_第7张图片](http://img.e-com-net.com/image/info8/49e7d0f6c7d9451192730d7a777ecdb1.jpg)
- 代码(28.smartCar_project3/MDK-ARM)(添加延时函数)
![STM32F103C8T6第7天:智能小车项目_第8张图片](http://img.e-com-net.com/image/info8/de037f1c10ad4faa85dc9b10e7e2a9ef.jpg)
4. 智能小车:硬件PWM调速(363.67)
硬件接线
- B-1A – PA0
- A-1A – PA1
- B-1A – PB1
- A-1A – PB10
![STM32F103C8T6第7天:智能小车项目_第9张图片](http://img.e-com-net.com/image/info8/875991c0e8d844bca5ea69ad3e07c0ed.jpg)
![STM32F103C8T6第7天:智能小车项目_第10张图片](http://img.e-com-net.com/image/info8/f7fb514381a6429d853d3e22fe6f86c1.jpg)
- 代码(28.smartCar_project4/MDK-ARM)(修改arr即可调速)
![STM32F103C8T6第7天:智能小车项目_第11张图片](http://img.e-com-net.com/image/info8/fb0a0e555e5f4122a140fd221e7330c4.jpg)
- 将控制车轮的4个 GPIO 口配置修改如下,否则小车动不起来。
- 原因:L9110每个控制口需要一高一低才可以动起来,如果PWM有效电平为高电平,则另一个GPIO口则需要输出低电平才可以驱动轮子。
![STM32F103C8T6第7天:智能小车项目_第12张图片](http://img.e-com-net.com/image/info8/dc604ab62f73449f95aa7c42ec8dd03b.jpg)
5. 智能小车:左右轮各自调速(364.68)
- 代码(28.smartCar_project5/MDK-ARM)
while (1)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,80);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,150);
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,150);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,80);
HAL_Delay(1000);
}
6. 智能小车:循迹小车基本实现(365.69)
硬件接线
- B-2A – PB0
- B-1A – PB1
- A-1B – PB2
- A-1A – PB10
- 循迹模块(左)DO – PB3
- 循迹模块(右)DO – PB4
代码实现
- 基于 smartCar_project1
- 代码(28.smartCar_project6/MDK-ARM)
#define LeftWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)
#define RightWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)
while (1)
{
if (LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_RESET)
goForward();
if (LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_RESET)
goLeft();
if (LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_SET)
goRight();
if (LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_SET)
stop();
}
7. 智能小车:循迹小车解决转弯不平滑问题(366.70)
硬件接线
- B-1A – PA0
- A-1A – PA1
- B-1A – PB1
- A-1A – PB10
代码实现
- 基于smartCar_project5(因为用到pwm)
![STM32F103C8T6第7天:智能小车项目_第13张图片](http://img.e-com-net.com/image/info8/da8ffe09f5854664bb090f6fe2890aa7.jpg)
- 代码(28.smartCar_project7/MDK-ARM)
#define LeftWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)
#define RightWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)
while (1)
{
if(LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_RESET)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,199);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,199);
}
if(LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_RESET)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,150);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,80);
}
if(LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_SET)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,80);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,150);
}
if(LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_SET)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,0);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,0);
}
}
}
8. 智能小车:跟随小车的实现(367.71)
硬件接线
- B-2A – PB0
- B-1A – PB1
- A-1B – PB2
- A-1A – PB10
- 红外跟随模块(左)OUT – PB5
- 红外跟随模块(右)OUT – PB6
代码实现
- 基于smartCar_project6(基本一致)
![STM32F103C8T6第7天:智能小车项目_第14张图片](http://img.e-com-net.com/image/info8/19e42617860d4ea9bca22bd503c39273.jpg)
- 代码(28.smartCar_project8/MDK-ARM)
#define LeftWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5)
#define RightWheel_Value HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6)
while (1)
{
if(LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_RESET)
goForward();
if(LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_RESET)
goRight();
if(LeftWheel_Value == GPIO_PIN_RESET && RightWheel_Value == GPIO_PIN_SET)
goLeft();
if(LeftWheel_Value == GPIO_PIN_SET && RightWheel_Value == GPIO_PIN_SET)
stop();
}
}
9. 智能小车:摇头避障小车舵机封装(368.72)
硬件接线
cubeMX配置
![STM32F103C8T6第7天:智能小车项目_第15张图片](http://img.e-com-net.com/image/info8/2037249080a145d4b002605f63488be5.jpg)
![STM32F103C8T6第7天:智能小车项目_第16张图片](http://img.e-com-net.com/image/info8/f4a29c570ec34a5e8362f819a1b14094.jpg)
![STM32F103C8T6第7天:智能小车项目_第17张图片](http://img.e-com-net.com/image/info8/37467b12b9c24abc829884b9ca56197f.jpg)
![STM32F103C8T6第7天:智能小车项目_第18张图片](http://img.e-com-net.com/image/info8/1bd4388ea91c4b459029ad4820a60eab.jpg)
![STM32F103C8T6第7天:智能小车项目_第19张图片](http://img.e-com-net.com/image/info8/d22dc0752ee7457c980f8153390d9c27.jpg)
![STM32F103C8T6第7天:智能小车项目_第20张图片](http://img.e-com-net.com/image/info8/28602aa91d9b41b48c139982fe356ee0.jpg)
- 代码(28.smartCar_project9_1/MDK-ARM)
#include "sg90.h"
#include "gpio.h"
#include "tim.h"
void initSG90(void)
{
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 15);
}
void sgMiddle(void)
{
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 15);
}
void sgRight(void)
{
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 5);
}
void sgLeft(void)
{
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 25);
}
initSG90();
HAL_Delay(1000);
while (1)
{
sgLeft();
HAL_Delay(1000);
sgMiddle();
HAL_Delay(1000);
sgRight();
HAL_Delay(1000);
sgMiddle();
HAL_Delay(1000);
}
10. 智能小车:摇头避障小车超声波传感器封装(369.73)
硬件接线
cubeMX配置
- 基于 smartCar_project9_1
![STM32F103C8T6第7天:智能小车项目_第21张图片](http://img.e-com-net.com/image/info8/fd24fe0249eb43d7a2c22f5fd9d23ca2.jpg)
代码实现
- 代码(28.smartCar_project9_2/MDK-ARM)
#include "sr04.h"
#include "gpio.h"
#include "tim.h"
void TIM2_Delay_us(uint16_t n_us)
{
__HAL_TIM_ENABLE(&htim2);
__HAL_TIM_SetCounter(&htim2, 0);
while(__HAL_TIM_GetCounter(&htim2) < ((1 * n_us)-1) );
__HAL_TIM_DISABLE(&htim2);
}
double get_distance(void)
{
int cnt=0;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
TIM2_Delay_us(20);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_RESET);
HAL_TIM_Base_Start(&htim2);
__HAL_TIM_SetCounter(&htim2,0);
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_SET);
HAL_TIM_Base_Stop(&htim2);
cnt = __HAL_TIM_GetCounter(&htim2);
return (cnt*340/2*0.000001*100);
}
while (1)
{
if(dir != MIDDLE){
sgMiddle();
dir = MIDDLE;
HAL_Delay(300);
}
disMiddle = get_distance();
if(disMiddle > 35){
}
else
{
sgLeft();
HAL_Delay(300);
disLeft = get_distance();
sgMiddle();
HAL_Delay(300);
sgRight();
dir = RIGHT;
HAL_Delay(300);
disRight = get_distance();
}
}
11. 智能小车:摇头避障小车封装电机驱动模块(370.74)
硬件接线
- B-2A – PB0
- B-1A – PB1
- A-1B – PB2
- A-1A – PB10
代码实现
- 基于 smartCar_project9_2
![STM32F103C8T6第7天:智能小车项目_第22张图片](http://img.e-com-net.com/image/info8/300eacd99fcd40d88cea163e382e044f.jpg)
- 代码(28.smartCar_project9_3/MDK-ARM)
while (1)
{
if(dir != MIDDLE){
sgMiddle();
dir = MIDDLE;
HAL_Delay(300);
}
disMiddle = get_distance();
if(disMiddle > 35){
goForward();
}else if(disMiddle < 10){
goBack();
}else
{
stop();
sgLeft();
HAL_Delay(300);
disLeft = get_distance();
sgMiddle();
HAL_Delay(300);
sgRight();
dir = RIGHT;
HAL_Delay(300);
disRight = get_distance();
if(disLeft < disRight){
goRight();
HAL_Delay(150);
stop();
}
if(disRight < disLeft){
goLeft();
HAL_Delay(150);
stop();
}
}
HAL_Delay(50);
}
12. 智能小车:测速数据通过串口发送到上位机(371.75)
硬件接线
- 测速模块:
- VCC – 3.3V (不能接 5V,否则遮挡一次会触发 3 次中断)
- OUT – PB14
代码实现
![STM32F103C8T6第7天:智能小车项目_第23张图片](http://img.e-com-net.com/image/info8/6f62850189124d2693a2271111c742ad.jpg)
![STM32F103C8T6第7天:智能小车项目_第24张图片](http://img.e-com-net.com/image/info8/32c873f6cba244faab7d3850ce3baec7.jpg)
![STM32F103C8T6第7天:智能小车项目_第25张图片](http://img.e-com-net.com/image/info8/7a3e2b16a3424796a757d19f71003ecc.jpg)
- 代码(28.smartCar_project10/MDK-ARM)
unsigned int speedCnt = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_14)
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14) == GPIO_PIN_RESET)
speedCnt++;
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
printf("speed: %d\r\n", speedCnt);
speedCnt = 0;
}
HAL_TIM_Base_Start_IT(&htim2);
![STM32F103C8T6第7天:智能小车项目_第26张图片](http://img.e-com-net.com/image/info8/021cf1c8db4b4384b40229d7db166798.jpg)
13. 智能小车:OLED代码二次开发(372.76)
硬件接线
封装Oled模块
- 代码(28.smartCar_project11_1/MDK-ARM)
14. 智能小车:实现测速并使用Oled显示速度(373.77)
- 代码(28.smartCar_project11_2/MDK-ARM)
![STM32F103C8T6第7天:智能小车项目_第27张图片](http://img.e-com-net.com/image/info8/1e9f667bf4f4407c98da7eb76b9f7692.jpg)
![STM32F103C8T6第7天:智能小车项目_第28张图片](http://img.e-com-net.com/image/info8/d29143b24eca420b92b266117ce1d0de.jpg)
15. 智能小车:Wifi测速小车并本地Oled显示(374.78)
硬件接线
代码实现
![STM32F103C8T6第7天:智能小车项目_第29张图片](http://img.e-com-net.com/image/info8/503ba61b99f54f16aed9e324dfe8f546.jpg)
![STM32F103C8T6第7天:智能小车项目_第30张图片](http://img.e-com-net.com/image/info8/fc75d7839be7458aa0e755b8a55dfe03.jpg)
- 代码(28.smartCar_project12/MDK-ARM)