TCRT5000红外反射传感器:
引脚定义
D0:TTL开关信号输出
A0:模拟信号输出(不同距离输出不同的电压,此引脚可以不接)
工作原理:
TCRT5000传感器的红外发射二极管不断发射红外线,黑色是不反射红外线的,也就是说循迹模块遇到黑线,模块D0输出高电平,输出指示灯熄灭;
反之D0输出低电平
应用范围场景
黑白线检测,(循迹小车)
障碍检测,(手扫开关)
实现代码
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(GPIO_PIN_RESET==HAL_GPIO_ReadPin(D0_GPIO_Port,D0_Pin))
{
printf("black\r\n");
}
if(GPIO_PIN_SET==HAL_GPIO_ReadPin(D0_GPIO_Port,D0_Pin))
{
printf("white\r\n");
}
HAL_Delay(200);
}
SG90舵机:
引脚定义
工作原理:
通过定时器PWM控制,给相应的占空比旋转相应角度
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
CUBEMX配置
实现代码
// /*舵机参数:f=50hz,t=20ms
// --------------------------
// |0 |45 |90 |135|180| 度|
// -------------------------
// |0.5 |1.0|1.5|2.0|2.5| 毫秒|
// --------------------------
// angle:角度值,0~180
void Servo_Control(uint8_t angle)
{
float temp;
//占空比值 = 1/9 * 角度 + 5
temp =(1.0 / 9.0) * angle + 5.0;
//200脉宽 0.1ms一单位
//修改占空比
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, (uint16_t )temp);
}
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(ststus==0)
{
i++;
if(i==180)
{
ststus=1;
}
}
else if(ststus==1)
{
i--;
if(i==0)
{
ststus=0;
}
}
Servo_Control(i);
HAL_Delay(1);
}