STM32F103C8T6自制四路寻迹小车

一、首先我们需要对硬件部分进行一些认识:

1、先看视频基于STM32F103C8T6之四路循迹小车_哔哩哔哩_bilibiliicon-default.png?t=M3C8https://www.bilibili.com/video/BV1yi4y1U7xi?spm_id_from=444.41.list.card_archive.click

先看整体架构:

2、车板:

 

拼夕夕买的车板,相比亚克力板结实并附上链接https://mobile.yangkeduo.com/goods2.html?goods_id=299110162535&page_from=101&pxq_secret_key=DQU3RWM2L2TBTML7WPPDVOAARAKRNELGF2SDRWFP5KVY6AR4NLWQ&share_uin=UUW2TPLXBKQOF5F6BPJT5TAYUA_GEXDA&_wv=1&refer_share_id=e95a072d5de04c5f8b4051187eec589e&refer_share_uid=7917629832595&refer_share_uin=UUW2TPLXBKQOF5F6BPJT5TAYUA_GEXDA&refer_share_channel=qq&refer_share_form=card&_wvx=10
3、车轮采用最普遍的,这个我就不阐述了,经济好的小伙伴可以买麦轮。

4、寻迹模块我采用的是TCRT5000

 产品链接:https://mobile.yangkeduo.com/goods1.html?goods_id=207412396227&page_from=101&pxq_secret_key=DQU3RWM2L2TBTML7WPPDVOAARBCUHAQBHQPBVC3N5GSSKATVTN2Q&share_uin=UUW2TPLXBKQOF5F6BPJT5TAYUA_GEXDA&_wv=1&refer_share_id=e5341d8ffe6540e4a460ea88421ca7d0&refer_share_uid=7917629832595&refer_share_uin=UUW2TPLXBKQOF5F6BPJT5TAYUA_GEXDA&refer_share_channel=qq&refer_share_form=card&_wvx=10

5、芯片:STM32F103C8T6

价格不一,有好有坏,房主自寻吧

6、电池:18650

7、驱动:L298N,这个咱们得仔细拾掇拾掇,

 链接:https://mobile.yangkeduo.com/goods1.html?goods_id=300701192594&page_from=101&pxq_secret_key=DQU3RWM2L2TBTML7WPPDVOAARBRA6NXWXXCM4TC2W7GER344VGPA&share_uin=UUW2TPLXBKQOF5F6BPJT5TAYUA_GEXDA&_wv=1&refer_share_id=14fd10e9bb654f7ab6ab7ac2736cb4f5&refer_share_uid=7917629832595&refer_share_uin=UUW2TPLXBKQOF5F6BPJT5TAYUA_GEXDA&refer_share_channel=qq&refer_share_form=card&_wvx=10

 

 

 到此硬件就结束了,下节我们进行软件部分的讲解

```c // 引脚定义 #define IN1 PA0 #define IN2 PA1 #define IN3 PA2 #define IN4 PA3 #define LSA PA4 #define LSB PA5 #define LSC PA6 #define ENA PA7 #define ENB PB0 #define IR PA8 // 红外避障函数 void IR_avoidance() { if (GPIO_ReadInputDataBit(GPIOA, IR) == 0) // 红外检测到障碍物 { TIM_SetCompare1(TIM3, 0); // 左轮停止 TIM_SetCompare2(TIM3, 0); // 右轮停止 delay_ms(500); // 停顿0.5秒 TIM_SetCompare1(TIM3, 500); // 左轮前进 TIM_SetCompare2(TIM3, 500); // 右轮前进 delay_ms(1000); // 前进1秒 TIM_SetCompare1(TIM3, 0); // 左轮停止 TIM_SetCompare2(TIM3, 0); // 右轮停止 delay_ms(500); // 停顿0.5秒 TIM_SetCompare1(TIM3, 500); // 左轮后退 TIM_SetCompare2(TIM3, 500); // 右轮后退 delay_ms(1000); // 后退1秒 TIM_SetCompare1(TIM3, 0); // 左轮停止 TIM_SetCompare2(TIM3, 0); // 右轮停止 delay_ms(500); // 停顿0.5秒 TIM_SetCompare1(TIM3, 500); // 左轮后退 TIM_SetCompare2(TIM3, 0); // 右轮前进 delay_ms(1000); // 左转1秒 } } // 红外寻迹函数 void IR_tracking() { if (GPIO_ReadInputDataBit(GPIOA, LSA) == 0 && GPIO_ReadInputDataBit(GPIOA, LSB) == 0 && GPIO_ReadInputDataBit(GPIOA, LSC) == 0) // 左偏 { TIM_SetCompare1(TIM3, 500); // 左轮前进 TIM_SetCompare2(TIM3, 0); // 右轮停止 } else if (GPIO_ReadInputDataBit(GPIOA, LSA) == 0 && GPIO_ReadInputDataBit(GPIOA, LSB) == 0 && GPIO_ReadInputDataBit(GPIOA, LSC) == 1) // 左偏 { TIM_SetCompare1(TIM3, 500); // 左轮前进 TIM_SetCompare2(TIM3, 200); // 右轮前进 } else if (GPIO_ReadInputDataBit(GPIOA, LSA) == 0 && GPIO_ReadInputDataBit(GPIOA, LSB) == 1 && GPIO_ReadInputDataBit(GPIOA, LSC) == 0) // 直行 { TIM_SetCompare1(TIM3, 500); // 左轮前进 TIM_SetCompare2(TIM3, 500); // 右轮前进 } else if (GPIO_ReadInputDataBit(GPIOA, LSA) == 0 && GPIO_ReadInputDataBit(GPIOA, LSB) == 1 && GPIO_ReadInputDataBit(GPIOA, LSC) == 1) // 直行 { TIM_SetCompare1(TIM3, 500); // 左轮前进 TIM_SetCompare2(TIM3, 500); // 右轮前进 } else if (GPIO_ReadInputDataBit(GPIOA, LSA) == 1 && GPIO_ReadInputDataBit(GPIOA, LSB) == 0 && GPIO_ReadInputDataBit(GPIOA, LSC) == 0) // 右偏 { TIM_SetCompare1(TIM3, 0); // 左轮停止 TIM_SetCompare2(TIM3, 500); // 右轮前进 } else if (GPIO_ReadInputDataBit(GPIOA, LSA) == 1 && GPIO_ReadInputDataBit(GPIOA, LSB) == 0 && GPIO_ReadInputDataBit(GPIOA, LSC) == 1) // 右偏 { TIM_SetCompare1(TIM3, 200); // 左轮前进 TIM_SetCompare2(TIM3, 500); // 右轮前进 } } int main() { // 初始化GPIO GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = IN1 | IN2 | IN3 | IN4 | LSA | LSB | LSC | ENA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ENB; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = IR; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化定时器 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_Prescaler = 71; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_Cmd(TIM3, ENABLE); while (1) { IR_avoidance(); // 红外避障 IR_tracking(); // 红外寻迹 } } ``` --相关问题--: 1. 如何调试stm32f103c8t6红外线避障寻迹小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值