创意之星模块化机器人实验程序.docx
- 文档编号:23904687
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:28
- 大小:18.76KB
创意之星模块化机器人实验程序.docx
《创意之星模块化机器人实验程序.docx》由会员分享,可在线阅读,更多相关《创意之星模块化机器人实验程序.docx(28页珍藏版)》请在冰豆网上搜索。
创意之星模块化机器人实验程序
第一次实验:
MultiFLEX控制卡编程实验
蜂鸣器实验
#include
#defineBEEP_ONPORTG|=_BV(PG3)
#defineBEEP_OFFPORTG&=~_BV(PG3)
intmain(void)
{
inti,j;
PORTG=0;
DDRG=0xff;
while
(1)
{
for(i=0;i<0xFF;i++)
{for(j=0;j<0xFF;j++);}
BEEP_ON;
for(i=0;i<0xFF;i++)
{for(j=0;j<0xFF;j++);}
BEEP_OFF;
}
}
IO口控制实验
#include"Public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8io_in;
uint8io_out;
uint8temp8;
uint16temp16;
gpio_mode_set(0x00FF);
write_gpio(0xFF00);
while
(1)
{
temp16=read_gpio();
io_in=(uint8)(temp16>>8);
temp8=(io_in&0x80);
if(temp8==0)
{
io_out=0x01;
while(io_out)
{
write_gpio(~((uint16)io_out));
delay(5);//延时5×20MS=0.1s
io_out<<=1;
write_gpio(~((uint16)io_out));
delay(5);
}
}
elsewrite_gpio(0xFF00);
}
}
第二次实验:
多自由度串联式机械手
#include"Public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8array_rc[23]={0};//舵机控制数组长度为24,可控制12路舵机,舵机运动函数要求array_rc[偶数]为舵机目标角度值,array_rc[奇数]为舵机运动速度值
array_rc[0]=90;//舵机1,中位为0度(对应数值90),目标角度+20度。
取值范围0-180,超过此范围程序会丢弃此数据
array_rc[1]=170;//舵机1,速度为170。
取值范围0-255,超过范围程序会丢弃此数据
array_rc[2]=90;//舵机2目标角度设置
array_rc[3]=170;//舵机2转动速度设置
array_rc[4]=90+90;//舵机3
array_rc[5]=170;
rc_moto_control(array_rc);//将舵机运动信息交给舵机运动函数,实现舵机运动
delay(50);//延时50*20MS=1S,给舵机提供反应时间,此反应时间应大于舵机实际运动所需时间
array_rc[0]=90-90;
array_rc[1]=170;
array_rc[2]=90-90;
array_rc[3]=170;
array_rc[4]=90+90;
array_rc[5]=170;
rc_moto_control(array_rc);
delay(50);
array_rc[0]=90;
array_rc[1]=170;
array_rc[2]=90;
array_rc[3]=170;
array_rc[4]=90;
array_rc[5]=170;
rc_moto_control(array_rc);
delay(50);
array_rc[0]=90-90;
array_rc[1]=170;
array_rc[2]=90-90;
array_rc[3]=170;
array_rc[4]=90;
array_rc[5]=170;
rc_moto_control(array_rc);
delay(50);
}
第三次实验:
简易四足机器人
#include"Public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8array_rc[23]={0};//舵机控制数组长度为24,可控制12路舵机,舵机运动函数要求array_rc[偶数]为舵机目标角度值,array_rc[奇数]为舵机运动速度值
array_rc[0]=90+45;//舵机1,中位为0度(对应数值90),目标角度+20度。
取值范围0-180,超过此范围程序会丢弃此数据
array_rc[1]=255;//舵机1,速度为170。
取值范围0-255,超过范围程序会丢弃此数据
array_rc[2]=90-45;//舵机2目标角度设置
array_rc[3]=255;//舵机2转动速度设置
array_rc[4]=90-45;//舵机3
array_rc[5]=255;
array_rc[6]=90+45;//舵机4
array_rc[7]=255;
rc_moto_control(array_rc);//将舵机运动信息交给舵机运动函数,实现舵机运动
delay(50);//延时50*20MS=1S,给舵机提供反应时间,此反应时间应大于舵机实际运动所需时间
array_rc[0]=90;
array_rc[1]=255;
array_rc[2]=90;
array_rc[3]=255;
array_rc[4]=90;
array_rc[5]=255;
array_rc[6]=90;
array_rc[7]=255;
rc_moto_control(array_rc);
delay(50);
}
第四次实验:
轮式机器人运动控制实验
走正方形:
#include"Public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8array_dc[7]={0};//电机控制数组长度为8,可控制4路舵机,电机运动函数要求array_dc[偶数]为电机转动速度,array_rc[奇数]为电机转动时间
array_dc[0]=0;//电机1,正转最大速度(0为正转最大转速,0xFE=254为反转最大转速,0x80=128代表电机停止)。
范围为0-254,超过此范围程序会丢弃此数据
array_dc[1]=10;//电机1,转动时间30×0.1=3秒。
范围为0-255,超过此范围程序会丢弃此数据
array_dc[2]=0;//电机2,反转最大速度
array_dc[3]=10;
array_dc[4]=0;//电机3,正转最大速度
array_dc[5]=10;
array_dc[6]=0;//电机4,反转最大速度
array_dc[7]=10;
dc_moto_control(array_dc);//调用直流电机运动控制函数dc_moto_control(),参数为电机控制数组名
delay(150);//给电机反应时间150×20MS=3s,此反应时间应不小于电机实际运动时间
array_dc[0]=0;
array_dc[1]=60;
array_dc[2]=0xFE;
array_dc[3]=60;
array_dc[4]=0xFE;
array_dc[5]=60;
array_dc[6]=0;
array_dc[7]=60;
dc_moto_control(array_dc);
delay(150);
}
走“8”字形:
#include"Public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8array_dc[7]={0};//电机控制数组长度为8,可控制4路舵机,电机运动函数要求array_dc[偶数]为电机转动速度,array_rc[奇数]为电机转动时间
uint8i;
for(i=0;i<3;i++)
{
array_dc[0]=0;
array_dc[1]=60;
array_dc[2]=0xFE;
array_dc[3]=60;
array_dc[4]=0xFE;
array_dc[5]=60;
array_dc[6]=0;
array_dc[7]=60;
dc_moto_control(array_dc);
delay(150);
array_dc[0]=0;
array_dc[1]=10;
array_dc[2]=0;
array_dc[3]=10;
array_dc[4]=0;
array_dc[5]=10;
array_dc[6]=0;
array_dc[7]=10;
dc_moto_control(array_dc);
delay(150);//给电机反应时间150×20MS=3s,此反应时间应不小于电机实际运动时间
}
array_dc[0]=0;
array_dc[1]=60;
array_dc[2]=0xFE;
array_dc[3]=60;
array_dc[4]=0xFE;
array_dc[5]=60;
array_dc[6]=0;
array_dc[7]=60;
dc_moto_control(array_dc);
delay(150);
array_dc[0]=0xFE;
array_dc[1]=10;
array_dc[2]=0xFE;
array_dc[3]=10;
array_dc[4]=0xFE;
array_dc[5]=10;
array_dc[6]=0xFE;
array_dc[7]=10;
dc_moto_control(array_dc);
delay(150);
for(i=0;i<3;i++)
{
array_dc[0]=0;
array_dc[1]=60;
array_dc[2]=0xFE;
array_dc[3]=60;
array_dc[4]=0xFE;
array_dc[5]=60;
array_dc[6]=0;
array_dc[7]=60;
dc_moto_control(array_dc);
delay(150);
array_dc[0]=0xFE;
array_dc[1]=10;
array_dc[2]=0xFE;
array_dc[3]=10;
array_dc[4]=0xFE;
array_dc[5]=10;
array_dc[6]=0xFE;
array_dc[7]=10;
dc_moto_control(array_dc);
delay(150);
}
array_dc[0]=0;
array_dc[1]=60;
array_dc[2]=0xFE;
array_dc[3]=60;
array_dc[4]=0xFE;
array_dc[5]=60;
array_dc[6]=0;
array_dc[7]=60;
dc_moto_control(array_dc);
delay(150);
array_dc[0]=0;
array_dc[1]=10;
array_dc[2]=0;
array_dc[3]=10;
array_dc[4]=0;
array_dc[5]=10;
array_dc[6]=0;
array_dc[7]=10;
dc_moto_control(array_dc);
delay(150);
}
第五次实验:
机器人传感系统实验
实验程序1:
#include"Public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8AD0_in;
uint8rc_array[23]={0};
uint16temp;
uint8i;
for(i=0;i<24;i=i+2)
{
rc_array[i]=90;
rc_array[i+1]=128;
}
while
(1)
{
ADC_Read(0,&AD0_in);
temp=((uint16)AD0_in*180)/255;
rc_array[0]=(uint8)temp;
rc_array[1]=80;
rc_moto_control(rc_array);
delay(25);
}
}
实验程序2:
#include"Public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8AD0_in;
uint8rc_array[23]={0};
uint8i=0;
while
(1)
{
ADC_Read(0,&AD0_in);
rc_array[0]=i*180;
rc_array[1]=AD0_in;
rc_moto_control(rc_array);
delay(25);
i++;
if(i>1)i=0;
}
}
实验程序3:
#include"Public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8AD0_in,AD1_in,AD2_in,AD3_in;
uint8rc_array[23]={0};
while
(1)
{
ADC_Read(0,&AD0_in);
ADC_Read(1,&AD1_in);
ADC_Read(2,&AD2_in);
ADC_Read(3,&AD3_in);
rc_array[0]=(uint8)((uint16)AD0_in*180)/255;
rc_array[1]=100;
rc_array[2]=(uint8)((uint16)AD1_in*180)/255;
rc_array[3]=100;
rc_array[4]=(uint8)((uint16)AD2_in*180)/255;
rc_array[5]=100;
rc_array[6]=(uint8)((uint16)AD3_in*180)/255;
rc_array[7]=100;
rc_moto_control(rc_array);
delay(25);
}
}
第六次实验:
自主避障机器人实验
#include"public.h"
#include"Usertask.h"
voiduser_task(void)
{
uint8array_dc[7]={0};//电机控制数组,格式参考实验指导书
uint8array_rc[23]={0};//舵机控制数组,格式参考实验指导书
uint16temp16;
gpio_mode_set(0);//设置16位IO模式全为输入
temp16=read_gpio();//读取16位IO信息至temp16
if((temp16&0x0003)==3)//IO0、1均为高电平时(红外传感器检测到没有障碍时为输出高)电机转动5秒
{
array_dc[0]=0;//电机1,正转最大速度(0为正转最大转速,0xFE=254为反转最大转速,0x80=128代表电机停止)。
范围为0-254,超过此范围程序会丢弃此数据
array_dc[1]=50;//电机1,50×0.1秒转动时间。
范围为0-255,超过此范围程序会丢弃此数据
array_dc[2]=0xFE;//电机2
array_dc[3]=50;
array_dc[4]=0;//电机3
array_dc[5]=50;
array_dc[6]=0xFE;//电机4
array_dc[7]=50;
dc_moto_control(array_dc);
}
elseif(((temp16&0x0003)==2)||((temp16&0x0003)==0))//IO0为低电平(右红外传感器检测到障碍)或者IO0、IO1均为低电平(两个传感器都检测到障碍)电机左转,蜂鸣器发声
{
beep_set(5);//蜂鸣器发声0.5秒
//以最高速度后退
array_dc[0]=0xFE;
array_dc[1]=5;//0.5秒
array_dc[2]=0;
array_dc[3]=5;
array_dc[4]=0xFE;
array_dc[5]=5;
array_dc[6]=0;
array_dc[7]=5;
dc_moto_control(array_dc);
delay(30);//给电机反应时间30×20MS=0.6s,此反应时间应大于电机实际运动时间
//机器人转向
array_rc[0]=90-20;//舵机1,中位为0度(对应数值90),目标角度+20度。
取值范围0-180,超过此范围程序会丢弃此数据
array_rc[1]=170;//舵机1,速度为170。
取值范围0-255,超过此范围程序会丢弃此数据
array_rc[2]=90+20;//舵机2目标角度设置
array_rc[3]=170;//舵机2转动速度设置
array_rc[4]=90+20;//舵机3
array_rc[5]=170;
array_rc[6]=90-20;//舵机4
array_rc[7]=170;
rc_moto_control(array_rc);
delay(50);//延时50*20MS=1S,给舵机提供反应时间,此反应时间应大于舵机实际运动所需时间
array_dc[0]=254;//电机速度为+55
array_dc[1]=10;
array_dc[2]=254;
array_dc[3]=10;
array_dc[4]=254;
array_dc[5]=10;
array_dc[6]=254;
array_dc[7]=10;
dc_moto_control(array_dc);
delay(50);//延时50*20MS=1S
//机器人恢复直线运动
array_rc[0]=90;
array_rc[1]=170;
array_rc[2]=90;
array_rc[3]=170;
array_rc[4]=90;
array_rc[5]=170;
array_rc[6]=90;
array_rc[7]=170;
rc_moto_control(array_rc);
delay(50);//延时50*20MS=1S,给舵机提供反应时间,此反应时间应大于舵机实际运动所需时间
}
else//GPIO0低电平(右侧红外传感器检测到障碍)电机左转,蜂鸣器发声
{
beep_set(5);//蜂鸣器发声0.5秒
array_dc[0]=0xFE;//后退0.5秒
array_dc[1]=5;
array_dc[2]=0;
array_dc[3]=5;
array_dc[4]=0xFE;
array_dc[5]=5;
array_dc[6]=0;
array_dc[7]=5;
dc_moto_control(array_dc);
delay(30);//给电机反应时间30×20MS=0.6s
array_rc[0]=90-20;//舵机1,中位为0度(对应数值90),目标角度+20度。
取值范围0-180,超过此范围程序会丢弃此数据
array_rc[1]=170;//舵机1,速度为170。
取值范围0-255,超过此范围程序会丢弃此数据
array_rc[2]=90+20;//舵机2目标角度设置
array_rc[3]=170;//舵机2转动速度设置
array_rc[4]=90+20;//舵机3
array_rc[5]=170;
array_rc[6]=90-20;//舵机4
array_rc[7]=170;
rc_moto_control(array_rc);
delay(50);//延时50*20MS=1S,给舵机提供反应时间,此反应时间应大于舵机实际运动所需时间
array_dc[0]=0;//电机速度为+55
array_dc[1]=10;
array_dc[2]=0;
array_dc[3]=10;
array_dc[4]=0;
array_dc[5]=10;
array_dc[6]=0;
array_dc[7]=11;
dc_moto_control(array_dc);
delay(50);//延时50*20MS=1S
array_rc[0]=90;
array_rc[1]=170;
array_rc[2]=90;
array_rc[3]=170;
array_rc[4]=90;
array_rc[5]=170;
array_rc[6]=90;
array_rc[7]=170;
rc_moto_control(array_rc);//机器人转向
delay(50);//延时50*20MS=1S,给舵机提供反应时间,此反应时间应大于舵机实际运动所需时间
}
}
第七次实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 创意 模块化 机器人 实验 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)