找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 846|回复: 1
收起左侧

STM32单片机+Android实现的智能家政机器人设计资料 程序原理图和文档

[复制链接]
ID:432864 发表于 2024-12-10 10:45 | 显示全部楼层 |阅读模式
系统实现功能
本次设计为研究探索性课题,旨在为后续的家政机器人产品设计提供一个原型,故本系统仅为智能家政机器人的雏形,并非具有完善功能的机器人。
本系统已实现通过安卓手机进行语音识别,并将语音识别结果发送至机器人,机器人控制器按照接收到的指令驱动舵机完成用户的命令。机器人可以前后左右的移动,并且机器人携带的机械臂可以完成5个自由度的受控运动。上述命令为简单的用户命令,最终系统实现能够完成特定的复杂用户命令。比如当用户命令机器人取来某个位置的盒子,机器人会自动运动到该位置抓取盒子,送到用户手中。
6.2 系统实物图
下图为机器人正常启动之后的效果图:

机器人运行效果图

机器人运行效果图
2.jpg

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);    //系统时钟设置
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)            //接收到一次数据了
  {
    //printf("%c",tt);
     reclen=USART2_RX_STA&0X7FFF;    //得到数据长度
     USART2_RX_BUF[reclen]=0;         //加入结束符
     USART2_RX_STA=0;
     if(tt=='1')                        //前进
     {
      Forward();
     }
     if(tt=='3')                         //后退
     {
      Back();
     }
     if(tt=='0')                         //停止
     {
      LED0=1;LED1=1;
      Stop();
     }
     while(tt=='4')                        //右转
     {
      USART2_RX_STA=0;
      TurnRight();      
     }
     if(tt=='2')                         //左转
     {
      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')                 //手臂右转
     {
      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')                 //手臂左转
     {
      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实现的智能家政机器人电路代码文档.7z (7.68 MB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:876606 发表于 2025-1-7 13:27 | 显示全部楼层
NB人物
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表