|
系統(tǒng)實現(xiàn)功能
本次設(shè)計為研究探索性課題,旨在為后續(xù)的家政機器人產(chǎn)品設(shè)計提供一個原型,故本系統(tǒng)僅為智能家政機器人的雛形,并非具有完善功能的機器人。
本系統(tǒng)已實現(xiàn)通過安卓手機進(jìn)行語音識別,并將語音識別結(jié)果發(fā)送至機器人,機器人控制器按照接收到的指令驅(qū)動舵機完成用戶的命令。機器人可以前后左右的移動,并且機器人攜帶的機械臂可以完成5個自由度的受控運動。上述命令為簡單的用戶命令,最終系統(tǒng)實現(xiàn)能夠完成特定的復(fù)雜用戶命令。比如當(dāng)用戶命令機器人取來某個位置的盒子,機器人會自動運動到該位置抓取盒子,送到用戶手中。
6.2 系統(tǒng)實物圖
下圖為機器人正常啟動之后的效果圖:
1.jpg (48.9 KB, 下載次數(shù): 0)
下載附件
機器人運行效果圖
2024-12-10 23:08 上傳
2.jpg (52.18 KB, 下載次數(shù): 0)
下載附件
2024-12-10 23:08 上傳
int main(void)
{
u8 reclen=0;
unsigned short int distance=520;
unsigned short int height=750;
unsigned short int weight=512;
Stm32_Clock_Init(9); //系統(tǒng)時鐘設(shè)置
delay_init(72); //延時初始化
IIC_Init(); //初始化I2C接口
uart_init(72,1000000); //串口1初始化為1M
LED_Init(); //初始化與LED連接的硬件接口
EXTIX_Init(); //外部中斷初始化
MPU6050_initialize();
HMC5883L_SetUp();
delay_ms(50);
HMC5883L_SetUp();
SetMode(1,0,0);delay_ms(30);
SetMode(2,0,0);delay_ms(30);
SetMode(3,0,0);delay_ms(30);
SetMode(4,0,0);delay_ms(30);
SetMode(5,0,1023);delay_ms(30);
SetMode(6,0,1023);delay_ms(30);
SetMode(7,0,1023);delay_ms(30);
SetMode(8,0,1023);delay_ms(30);
SetMode(9,0,1023);delay_ms(30);
HC05_Init();
delay_ms(1000);
PostureInit();
while(1)
{
int reach=0;
//printf("ANGLE: angle=%d \n",jiao);
//delay_ms(500);
if(USART2_RX_STA&0X8000) //接收到一次數(shù)據(jù)了
{
//printf("%c",tt);
reclen=USART2_RX_STA&0X7FFF; //得到數(shù)據(jù)長度
USART2_RX_BUF[reclen]=0; //加入結(jié)束符
USART2_RX_STA=0;
if(tt=='1') //前進(jìn)
{
Forward();
}
if(tt=='3') //后退
{
Back();
}
if(tt=='0') //停止
{
LED0=1;LED1=1;
Stop();
}
while(tt=='4') //右轉(zhuǎn)
{
USART2_RX_STA=0;
TurnRight();
}
if(tt=='2') //左轉(zhuǎn)
{
TurnLeft();
}
if(tt=='5') //打開爪子 f
{
SetMode(9,0,1023);
delay_ms(30);
OpenPaw();
LED0=0;
}
if(tt=='6') //抓取
{
SetMode(9,0,1023);
delay_ms(30);
ClosePaw();
}
while(tt=='8') //收回
{
USART2_RX_STA=0;
distance-=10;
if(distance<=200)distance=200;
SetMode(7,0,1023);
delay_ms(30);
PawGoFar(distance);
delay_ms(75);
LED1=0;
}
while(tt=='7') //伸出
{
USART2_RX_STA=0;
distance+=10;
if(distance>=520)distance=520;
SetMode(7,0,1023);
delay_ms(30);
PawGoNear(distance);
delay_ms(75);
LED0=0;
}
while(tt=='9') //機器人手臂抬起
{
USART2_RX_STA=0;
height+=10;
if(height>=750)height=750;
SetMode(6,0,1023);
delay_ms(30);
ArmRaiseUp(height);
delay_ms(75);
LED0=0;
}
while(tt=='a') //機器人手臂放下
{
USART2_RX_STA=0;
height-=10;
if(height<=500)height=500;
SetMode(6,0,1023);
delay_ms(30);
ArmSetDown(height);
delay_ms(75);
LED1=0;
}
while(tt=='b') //手臂右轉(zhuǎn)
{
USART2_RX_STA=0;
weight-=10;
if(weight<=20)weight=20;
SetMode(5,0,1023);
delay_ms(30);
ArmLeft(weight);
delay_ms(75);
}
while(tt=='c') //手臂左轉(zhuǎn)
{
USART2_RX_STA=0;
weight+=10;
if(weight>=1000)weight=1000;
SetMode(5,0,1023);
delay_ms(30);
ArmRight(weight);
delay_ms(75);
}
if(tt=='d') //取北方1M處物體
{
TurnRight();
reach=0;
while(!reach)
{
USART2_RX_STA=0;
IICreadBytes(HMC58X3_ADDR,HMC58X3_R_XM,6,hbuffer);
hx=(((int16_t)hbuffer[0]) << 8) | hbuffer[1];
hz=(((int16_t)hbuffer[2]) << 8) | hbuffer[3];
hy=(((int16_t)hbuffer[4]) << 8) | hbuffer[5];
if(hx==0)
{
if(hy & 0x8000)
angle=270;
else
angle=90;
}
else
{
if(hy & 0x8000)
angle=360-atan2(-hy,hx)*(180/3.141592653);
else
angle=atan2(hy,hx)*(180/3.141592653);
}
jiao=(int)angle;
if(jiao==86||jiao==87)
{
reach=1;
Stop();
delay_ms(1500);
times=0;sig=0;
Forward();
Forward();
while(sig==0);
Stop();
delay_ms(30);
SetMode(9,0,1023);
delay_ms(30);
OpenPaw();
delay_ms(300);
SetMode(6,0,1023);
delay_ms(30);
ArmSetDown(500);
delay_ms(1000);
SetMode(7,0,1023);
delay_ms(30);
PawGoNear(520);
delay_ms(1000);
SetMode(9,0,1023);
delay_ms(30);
ClosePaw();
delay_ms(500);
SetMode(6,0,1023);
delay_ms(30);
ArmRaiseUp(750);
delay_ms(1000);
sig=0;times=0;
Back();
while(sig==0);
Stop();
tt='0';
}
}
}
while(tt=='e')
{
sweep();
Stop();
tt='0';
}
}
}
}
word文檔和程序原理圖下載:
STM32 Android實現(xiàn)的智能家政機器人電路代碼文檔.7z
(7.68 MB, 下載次數(shù): 0)
2024-12-10 23:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|