赞
踩
用红外光电传感器,探测到物体即输出脉冲,输入到单片机中处 理一下,再对电机驱动模块进行控制,实现壁障的功能,这样的避障小车又称为简单的避障机器人。
各种避障方法:
1、红外线避障 2、超声波避障
基本硬件 红外发射管和接收管:分离式和一体式
变送电路:模拟量;数字量:将模拟量经过比较器输出开关量
不怕光HJ-IR2传感器 • 1、HJ-IR2相当于一个红外电子开关,检测到障碍输出低电平,平 时高电平。。 • 2、前方有障碍物时,红外管发出的红外信号经红外接收管接收 回来后,经集成的芯片放大,比较后,输出一低电平,点亮模块 上的LED发光管,同时可以输出一个低平信号,信号可以作为单 片机的信号输入检测控制外部各种驱动模块之用。 • 3、模块三线制,VCC为电原+5V,OUT为信号输出端,GND接电源 负极。 • 4、探测距离大概为1~30CM(探测距离的长短和供电电压、电流还 有周围环境有关,这里只作为参考) • 5、工作电压5V 工作电流 18-30ma左右。
在一般电子设计比赛等对壁障模块功能要求不高的场合,完全可 以采用比较器输出开关量,这样编程简单,易于实现; 1路壁障模块模块则输出1路开关量,可以接单片机的普通输入IO 口;
根据小车的运行情况有以下几种运动方式:
若没有被任何一个探头检测到,小车直行; 左边探头检测到物体时小车向右转 ; 右这探头检测到物体时小车向左转 •;上述算法描述是最简单的红外壁障算法,如果有一定的速度需求, 则在以上算法上进行改进。
将2路探头呈一行布置在智能车前方,探头朝前面, 可以采用铜柱+螺丝方式固定; 将中控板固定在车身上; 正确连接中控板和探头的杜邦线; 正确连接控制主板; 将小车放到地面上,前方10CM处放物体,调节电位器, 保证某探头在经过物体时,LED的状态不同。 若无论怎么调节电位器,LED状态都不变化,则应该 是杜邦线接触不好,要更换。
主程序:
#include "stm32f10x.h" #include "interface.h" #include "LCD1602.h" #include "IRCtrol.h" #include "motor.h" #include "UltrasonicCtrol.h" #include "redvoid.h" //全局变量定义 unsigned int speed_count=0;//占空比计数器 50次一周期 char front_left_speed_duty=SPEED_DUTY; char front_right_speed_duty=SPEED_DUTY; char behind_left_speed_duty=SPEED_DUTY; char behind_right_speed_duty=SPEED_DUTY; unsigned char tick_5ms = 0;//5ms计数器,作为主函数的基本周期 unsigned char tick_1ms = 0;//1ms计数器,作为电机的基本计数器 unsigned char tick_200ms = 0;//刷新显示 char ctrl_comm = COMM_STOP;//控制指令 char ctrl_comm_last = COMM_STOP;//上一次的指令 unsigned char continue_time=0; int main(void) { delay_init(); GPIOCLKInit(); UserLEDInit(); // LCD1602Init(); // IRCtrolInit(); TIM2_Init(); MotorInit(); //UltraSoundInit(); RedRayInit(); ServoInit(); while(1) { if(tick_5ms >= 5) { tick_5ms = 0; tick_200ms++; if(tick_200ms >= 40) { tick_200ms = 0; LEDToggle(LED_PIN); } VoidRun(); } } }
串口部分:
#include "uart.h" #include "interface.h" //UART function //UART1 TxD GPIOA9 RxD GPIOA10 void USART1Conf(u32 baudRate) { USART_InitTypeDef USART_InitSturct;//定义串口1的初始化结构体 GPIO_InitTypeDef GPIO_InitStruct;//定义串口对应管脚的结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE);//打开串口管脚时钟 //USART1_Tx_Pin Configure GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;//输出引脚 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//设置最高速度50MHz GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//推挽复用输出 GPIO_Init(GPIOA , &GPIO_InitStruct);//将初始化好的结构体装入寄存器 //USART1_Rx_Pin Configure GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO模式悬浮输入 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;//输入引脚 GPIO_Init(GPIOA, &GPIO_InitStruct);//将初始化好的结构体装入寄存器 //USART1 Configure RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);//时钟使能 USART_InitSturct.USART_BaudRate = baudRate;//波特率19200 USART_InitSturct.USART_WordLength = USART_WordLength_8b;//数据宽度8位 USART_InitSturct.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitSturct.USART_Parity = USART_Parity_No;//无奇偶校验 USART_InitSturct
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。