注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

hellorobot

全民机器人,零起步实现你童年的梦想

 
 
 

日志

 
 

智能篇(3)  

2011-12-18 18:22:29|  分类: 51单片机与机器人 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

机器人的红外避障是跟单片机里按键检测触发是一样的,当红外避障模块遇到障碍物后会发送一个低电平给单片机,单片机按照设定好的触发条件执行结果。

智能篇(3) - 懒猫侠 - hellorobot

红外避障模块

智能篇(3) - 懒猫侠 - hellorobot

 改装一下红外避障模块

 
智能篇(3) - 懒猫侠 - hellorobot
 
自制一个单片机最小系统,上面那块烧程序时才发现只有2K容量,下面这块重新做的,容量足够了
智能篇(3) - 懒猫侠 - hellorobot
 
 

 左边引脚是供电和串口,右边3列分别是IO口,5V,GND

 
智能篇(3) - 懒猫侠 - hellorobot
 

 按照图上标识装在六足上

下面是参考程序,只需将调好的步态在对应函数里更换就可以使用,晶振11.0592,波特率115200。



#include <STC12C5A60S2.h>
#define uint unsigned int
#define uchar unsigned char
#include <string.h> //字符串处理

sbit LED = P5^0; //前方
sbit LEDL = P2^4; //左前腿
sbit LEDR = P2^3; //右前腿

void DELAY_MS (unsigned int a)
{
unsigned int i;
while( a-- != 0)
{
for(i = 0; i < 600; i++);
}
}

void UART_init (void)
{
EA = 1;
ES = 1;
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD &= 0x0f; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}

void UART_R (void) interrupt 4 using 1
{
unsigned char UART_data;
RI = 0;
UART_data = SBUF;

}

void UART_T (unsigned char UART_data)
{
SBUF = UART_data;
while(TI == 0);
TI = 0;
}

void UART_TC (unsigned char *str)
{
while(*str != '\0')
{
UART_T(*str);
*str++;
}
*str = 0;
}

void forward () //前进
{
UART_TC("#1P1500#2P1500#3P838#4P894#6P1500#7P1000#8P781#10P1500#11P810#12P838#13P1500#14P1852#15P2106#17P1500#18P2331#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1200#3P838#4P894#6P1500#7P1000#8P781#10P1200#11P810#12P838#13P1500#14P1852#15P2106#17P1800#18P2331#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1200#3P1034#4P894#6P1500#7P1000#8P781#10P1200#11P1100#12P838#13P1500#14P1852#15P2106#17P1800#18P1966#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1500#7P781#8P781#10P1500#11P1100#12P838#13P1500#14P2219#15P2106#17P1500#18P1966#19P2106#21P1500#22P2247#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1200#7P781#8P781#10P1500#11P1100#12P838#13P1800#14P2219#15P2106#17P1500#18P1966#19P2106#21P1800#22P2247#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1200#7P1007#8P781#10P1500#11P1100#12P838#13P1800#14P1852#15P2106#17P1500#18P1966#19P2106#21P1800#22P2021#23P2021T300\r\n");
DELAY_MS (200);
}

void back () //后退
{
UART_TC("#1P1500#2P1500#3P838#4P894#6P1500#7P1000#8P781#10P1500#11P810#12P838#13P1500#14P1852#15P2106#17P1500#18P2331#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1800#3P838#4P894#6P1500#7P1000#8P781#10P1800#11P810#12P838#13P1500#14P1852#15P2106#17P1200#18P2331#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1800#3P1034#4P894#6P1500#7P1000#8P781#10P1800#11P1100#12P838#13P1500#14P1852#15P2106#17P1200#18P1966#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1500#7P781#8P781#10P1500#11P1100#12P838#13P1500#14P2219#15P2106#17P1500#18P1966#19P2106#21P1500#22P2247#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1800#7P781#8P781#10P1500#11P1100#12P838#13P1200#14P2219#15P2106#17P1500#18P1966#19P2106#21P1200#22P2247#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1800#7P1007#8P781#10P1500#11P1100#12P838#13P1200#14P1852#15P2106#17P1500#18P1966#19P2106#21P1200#22P2021#23P2021T300\r\n");
DELAY_MS (200);
}

void left () //左转
{
UART_TC("#1P1500#2P1500#3P838#4P894#6P1500#7P1000#8P781#10P1500#11P810#12P838#13P1500#14P1852#15P2106#17P1500#18P2331#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1200#3P838#4P894#6P1500#7P1000#8P781#10P1200#11P810#12P838#13P1500#14P1852#15P2106#17P1200#18P2331#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1200#3P1034#4P894#6P1500#7P1000#8P781#10P1200#11P1100#12P838#13P1500#14P1852#15P2106#17P1200#18P1966#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1500#7P781#8P781#10P1500#11P1100#12P838#13P1500#14P2219#15P2106#17P1500#18P1966#19P2106#21P1500#22P2247#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1200#7P781#8P781#10P1500#11P1100#12P838#13P1200#14P2219#15P2106#17P1500#18P1966#19P2106#21P1200#22P2247#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1200#7P1007#8P781#10P1500#11P1100#12P838#13P1200#14P1852#15P2106#17P1500#18P1966#19P2106#21P1200#22P2021#23P2021T300\r\n");
}

void right () //右转
{
UART_TC("#1P1500#2P1500#3P838#4P894#6P1500#7P1000#8P781#10P1500#11P810#12P838#13P1500#14P1852#15P2106#17P1500#18P2331#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1800#3P838#4P894#6P1500#7P1000#8P781#10P1800#11P810#12P838#13P1500#14P1852#15P2106#17P1800#18P2331#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1800#3P1034#4P894#6P1500#7P1000#8P781#10P1800#11P1100#12P838#13P1500#14P1852#15P2106#17P1800#18P1966#19P2106#21P1500#22P1993#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1500#7P781#8P781#10P1500#11P1100#12P838#13P1500#14P2219#15P2106#17P1500#18P1966#19P2106#21P1500#22P2247#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1800#7P781#8P781#10P1500#11P1100#12P838#13P1800#14P2219#15P2106#17P1500#18P1966#19P2106#21P1800#22P2247#23P2021T300\r\n");
DELAY_MS (200);
UART_TC("#1P1500#2P1500#3P1034#4P894#6P1800#7P1007#8P781#10P1500#11P1100#12P838#13P1800#14P1852#15P2106#17P1500#18P1966#19P2106#21P1800#22P2021#23P2021T300\r\n");
DELAY_MS (200);
}

void main (void)
{
UART_init();
while(1)
{
if(LED==0)
{
DELAY_MS (300); //参照视频,当手在六足面前前后移动,时间不超过300ms六足就会前进,超过300ms就后退
if(LED==0)
{
back ();
DELAY_MS (100);
//while(LED==0); //可以把双斜杠去掉试试效果
}
else
{
forward ();
DELAY_MS (100);
}
}

if(LEDL==0)
{
DELAY_MS (10);
if(LEDL==0)
{
left ();
//while(LEDL==0);
DELAY_MS (100);
}
}
if(LEDR==0)
{
DELAY_MS (10);
if(LEDR==0)
{
right ();
//while(LEDR==0);
DELAY_MS (100);
}
}
}
}



红外避障演示

 

 点击回目录

 

 

 


 

  评论这张
 
阅读(3937)| 评论(7)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017