tag 标签: 舵机

相关博文
  • 2024-9-24 17:54
    223 次阅读|
    0 个评论
    物联网系统中为什么要使用电机 物联网系统中使用电机可以提高设备的智能化水平,实现远程控制、自动化控制、故障诊断、预测维护等功能,从而提高生产效率、降低维护成本、提高生活质量。 物联网系统中的电机应用方案通常涉及到电机控制、监测和维护等方面。以下是一些常见的物联网电机应用方案: 1、 智能家居 :在智能家居中,物联网电机可以用于控制窗帘、窗户、门锁等设备的开关。通过物联网技术,可以实现远程控制、定时控制、场景控制等功能,提高家居的智能化水平。 2、 工业自动化 :在工业自动化中,物联网电机可以用于控制生产线、物流输送线等设备的运行。通过物联网技术,可以实现设备的远程监控、故障诊断、预测维护等功能,提高生产效率和降低维护成本。 3、 智能交通 :在智能交通中,物联网电机可以用于控制信号灯、路灯、广告牌等设备的开关。通过物联网技术,可以实现设备的远程控制、自适应控制等功能,提高交通的安全性和效率。 4、 智能农业 :在智能农业中,物联网电机可以用于控制灌溉系统、通风系统、遮阳系统等设备的运行。通过物联网技术,可以实现设备的远程监控、自动化控制等功能,提高农业的生产效率和降低劳动成本。 本文会为大家详解电机家族中的重要成员——舵机。 舵机的定义 首先,舵机”这个名号其实是一个俗称,是那些玩航模、船模的人起的名字,因为这种电机常被用于舵面控制。舵机其实就是一个简单的伺服电机系统,也是最常见的伺服电机系统。 舵机是一种位置(角度)伺服的驱动器,适用于需要角度不断变化并可以保持的控制系统,由下壳、控制电路、电机、中壳、齿轮组、轴承以及上壳组成。舵机是一个闭环控制系统。控制电路板接收来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴与位置反馈电位计相连,舵盘转动的同时带动位 置反馈电位计,电位计将输出一个电压信号到控制电路板进行反馈,然后控制电路板根据所在位置决定电机转动的方向和速度,从而达到目标停止。 舵机的结构 类似舵机这样的伺服系统通常由 小型电动机 , 电位计 , 嵌入式控制系统 和变速箱组成。电机输出轴的位置由内部电位计不断采样测量,并与微控制器(例如STM32,Arduino)设置的目标位置进行比较;根据相应的偏差,控制设备会调整电机输出轴的实际位置,使其与目标位置匹配。这样就形成了 闭环控制系统 。 闭环系统 变速箱降低了电机的转速,从而增加了输出轴上的输出扭矩。输出轴的最大速度通常约为60 RPM。 具体结构如下图所示; 内部结构 ①:信号线:接收来自微控制器的控制信号; ②:电位器:可以测量输出轴的位置量,属于整个伺服机构的反馈部分; ③:内部控制器:处理来自外部控制的信号,驱动电机以及处理反馈的位置信号,是整个伺服机构的核心; ④:电机:作为执行机构,输出多少转速,转矩,位置; ⑤:传动机构/舵机系统:该机构根据一定传动比,将电机输出的行程缩放到最终输出的角度上; 舵机的原理 舵机内部的控制电路接收来自信号线的PWM控制脉冲,控制电机旋转,电机带动减速齿轮组,最后传动输出至舵盘,进而使舵机转动角度并保持。控制流程如下图所示: 舵机内部基准电路产生了周期为20ms、脉宽为1.5ms的基准信号,其体现为反馈基准电压Vref; 控制电路捕获外部PWM控制信号,经处理后输出一个直流偏置电压Vin; 将直流偏置电压Vin和反馈基准电压Vref进行比较,输出电压差; 电压差输出到电机驱动芯片驱动电机,其中电压差的正负决定电机的正反转,压差大小决定旋转的角度,电压差为0时,电机停止转动; 特别注意:采集的控制信号主要是脉冲的宽度,要使舵机输出轴角度发生变化,改变的是脉冲宽度(PWM控制时是控制占空比) 标准的舵机有3条导线,分别是:电源线(红色)、地线 (黑色或棕色)、控制线(黄色); PWM信号由接收通道进入信号解调电路进行解调,获得一个直流偏置电压。直流偏置电压与电位器的电压比较,获得电压差并输出。该输出送入电机驱动集成电路以驱动电机正反转。当电机转动时,通过级联减速齿轮带动电位器旋转,直到电压差为O,电机停止转动。 舵机的控制信号是PWM信号,利用占空比的变化,改变舵机的位置。 舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如下图: 角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。例如:1.5毫秒脉冲会到转动到中间位置(对于180°舵机来说,就是90°位置)。当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让他角度产生变化,但是这个是由上限的,上限就是他的最大扭力。除非控制系统不停的发出脉冲稳定舵机的角度,舵机的角度不会一直不变。 当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。如下图: 舵机一般用单片机或者数字电路控制。舵机工作主要跟控制线的高电平持续时间有关系,一般按0.5ms(毫秒)划分,如果持续时间为0.5ms,1ms,1.5ms,2ms,2.5ms时,舵机会转过不同的角度。 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是为:脉冲 设置为 0.5ms旋转角度为0度;脉冲 设置为 1.0ms旋转角度为45度;脉冲 设置为 1.5ms旋转角度为90度;脉冲 设置为 2.0ms旋转角度为135度;脉冲 设置为 2.5ms旋转角度为180度。 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 舵机的追随特性 假设现在舵机稳定在A点,这时候CPU发出一个PWM信号,舵机全速由A点转向B点,在这个过程中需要一段时间,舵机才能运动到B点。 保持时间为Tw 当Tw≥△T时,舵机能够到达目标,并有剩余时间; 当Tw≤△T时,舵机不能到达目标; 理论上:当Tw=△T时,系统最连贯,而且舵机运动的最快。 实际过程中w不尽相同,连贯运动时的极限△T比较难以计算出来。当PWM信号以最小变化量即(1DIV=8us)依次变化时,舵机的分辨率最高,但是速度会减慢。 相关舵机的说明 SG90舵机 32单片机驱动单个舵机源码 C++ /* 单片机:STM32F103RCT6/STM32F103C8T6 倍频 72M 8路舵机控制 舵机IO PA0~PA3 PB3~PB6 */ #include "stm32f10x_conf.h" #define tb_interrupt_open() {__enable_irq();} //总中断打开 void rcc_init(void); //主频设置 void delay_ms(unsigned int t); //毫秒级别延时 void dj_io_init(void); //舵机 IO 口初始化 void dj_io_set(u8 index, u8 level); //舵机 IO 口高低电平设置 void TIM2_Int_Init(u16 arr,u16 psc);//舵机 定时器初始化 void gpioA_pin_set(unsigned char pin, unsigned char level); void gpioB_pin_set(unsigned char pin, unsigned char level); //舵机脉冲数组 int duoji_pulse = {1500,1500,1500,1500,1500,1500,1500,1500} , i; int main(void) { rcc_init(); dj_io_init(); TIM2_Int_Init(20000,71); tb_interrupt_open(); while(1) { for(i=0;i<8;i++) { duoji_pulse = 1000;//循环把8个舵机位置设定到1000 } delay_ms(1000); for(i=0;i<8;i++) { duoji_pulse = 2000;//循环把8个舵机位置设定到2000 } delay_ms(1000); } } void rcc_init(void) { ErrorStatus HSEStartUpStatus; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); HSEStartUpStatus = RCC_WaitForHSEStartUp(); while(HSEStartUpStatus == ERROR); RCC_HCLKConfig(RCC_SYSCLK_Div1);//SYSCLK RCC_PCLK1Config(RCC_HCLK_Div2);//APB1 MAX = 36M RCC_PCLK2Config(RCC_HCLK_Div1);//APB2 MAX = 72M RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); } void delay_ms(unsigned int t) { int t1; while(t--) { t1 = 7200; while(t1--); } } void dj_io_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6 | GPIO_Pin_14; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); } void dj_io_set(u8 index, u8 level) { switch(index) { case 0:gpioA_pin_set(0, level);break; case 1:gpioA_pin_set(1, level);break; case 2:gpioA_pin_set(2, level);break; case 3:gpioA_pin_set(3, level);break; case 4:gpioB_pin_set(3, level);break; case 5:gpioB_pin_set(4, level);break; case 6:gpioB_pin_set(5, level);break; case 7:gpioB_pin_set(6, level);break; default:break; } } void gpioA_pin_set(unsigned char pin, unsigned char level) { if(level) { GPIO_SetBits(GPIOA,1 << pin); } else { GPIO_ResetBits(GPIOA,1 << pin); } } void gpioB_pin_set(unsigned char pin, unsigned char level) { if(level) { GPIO_SetBits(GPIOB,1 << pin); } else { GPIO_ResetBits(GPIOB,1 << pin); } } void TIM2_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //①时钟 TIM2 使能 //定时器 TIM2 初始化 TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //②初始化 TIM2 TIM_ARRPreloadConfig(TIM2, DISABLE); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //③允许更新中断 //中断优先级 NVIC 设置 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2 中断 //NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0000); NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占优先级 0 级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //从优先级 2 级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能 NVIC_Init(&NVIC_InitStructure); //④初始化 NVIC 寄存器 TIM_Cmd(TIM2, ENABLE); //⑤使能 TIM2 } void TIM2_IRQHandler(void) { static u8 flag = 0; static u8 duoji_index1 = 0; int temp; if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查 TIM2 更新中断发生与否 { TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除 TIM2 更新中断标志 if(duoji_index1 == 8) { duoji_index1 = 0; } if(!flag) { ARR = ((unsigned int)(duoji_pulse )); dj_io_set(duoji_index1, 1); } else { temp = 2500 - (unsigned int)(duoji_pulse ); if(temp < 20)temp = 20; ARR = temp; dj_io_set(duoji_index1, 0); duoji_index1 ++; } flag = !flag; } } 原文链接:https://blog.csdn.net/m0_73931287/article/details/130445572 舵机的分类 舵机根据电子分类可以分为模拟舵机与数字舵机。模拟舵机通过简单地发送开关脉冲来调节电机的速度,对小指令的反应迟缓,马达旋转较慢快。数字舵机相对于传统模拟舵机可以根据微处理器的程序运算而调整激励马达的动力,以适应不同的功能要求,并优化舵机的性能,能提供更高的精度以及更快的响应和加速效果。根据信号类型可以分为PWM信号舵机、RS-485串口型舵机、TTL串口型舵机。主要有普通型、超小型,强力型和特殊用途型等几种。 PWM信号舵机 相对于模拟通讯对噪声的抵抗能力更强,从模拟信号转向PWM信号可以极大地延长通信距离。在接收端通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式,实现了用数字方式来控制模拟信号,其高频率、高效率、高可靠性的特点大大降低了成本和功耗。 RS-485 串口型舵机 采用平衡发送和差分接收,具有良好的抗干扰能力,信号能传输上千米。一条总线上允许挂载多个舵机,且总线上每个舵机都有一个唯一的 ID(0~250),控制器通过舵机 ID 对特定的舵机进行访问,也可以通过广播 ID(254)向总线上的全部舵机发送数据,另外可以使用超级ID(253)向总线上的舵机发送查询命令,不同 ID 的舵机进行分时应答。 TTL串口型舵机 采用并行数据传输方式,对于计算机处理器控制设备内部的数据传输较好,同时对于电源的要求不高以及热损耗也较低,另外TTL电平信号直接与集成电路连接而不需要价格昂贵的线路驱动器以及接收器电路。 CAN总线舵机 采用串行异步通信,同一时刻只能有一个发送或接收信息,由CAN_H和CAN_L两条信号线,以差分信号的形式进行通讯, 抗干扰能力强。高低电平幅度低,数据传输速度相对较高。 舵机与伺服电机区别 舵机和伺服电机虽然都是用于控制旋转角度的装置,但两者在构造、应用和工作原理等方面存在显著的差异。 构造 :舵机主要由外壳、电路板、无核心马达、齿轮与位置检测器构成。其中,位置检测器是可变电阻,当舵机转动时,电阻值会随之改变,从而可以检测转动的角度。而伺服电机通常由定子、转子和其他控制电路组成。伺服控制电路位于电机之外,使得伺服电机在某种程度上可以被视为一个系统。 应用 :舵机在航模、小型机器人等领域中常用,具有轻量、小型、简化和廉价的特点,并配备有减速机构。伺服电机则广泛应用于各种需要精确控制旋转角度的场合,如工业自动化、机器人技术、数控机床等。 工作原理 :舵机的工作原理基于可变电阻来检测转动的角度,并通过PWM信号进行控制。伺服电机则通过控制脉冲时间的长短来控制转动角度,其精度取决于编码器的精度。此外,步进电机和伺服电机在工作流程上也存在不同,步进电机需要信号脉冲和方向脉冲,而伺服电机则通过电源连接开关进行控制。 总的来说,舵机和伺服电机虽然都是用于控制旋转角度的装置,但它们在构造、应用和工作原理等方面存在明显的区别。舵机更适合用于轻量、小型和廉价的场合,而伺服电机则适用于需要高精度和快速响应的应用。 舵机的选型参数 舵机选型的参数主要包括以下几个方面: 工作电压 :这是舵机正常工作的电压范围,不同型号的舵机有不同的工作电压要求。例如,一些常见的舵机工作电压范围在4.8V到6V或4.8V到7.2V之间。 工作角度 :这是指舵机可以旋转的角度范围。一般来说,舵机的旋转角度有90度、180度等不同的选择。 扭矩 :扭矩是舵机产生的转动力矩,表现为旋转力的大小,通常以N·cm或kg/cm为单位。扭矩的大小决定了舵机能够拉动多大的负载。 速度 :速度是指舵机在没有负载的情况下旋转的速度,通常以秒/60度为单位。速度参数对于需要快速响应的应用来说非常重要。 工作电流 :这是舵机在工作时消耗的电流大小,是评估舵机功耗和选择电源的重要参数。 尺寸和重量 :尺寸和重量是考虑舵机安装空间和整体设备重量的重要因素。一般来说,尺寸越大、重量越重的舵机,扭矩也会越大。 死区 使舵机转动的最小脉冲宽度,低于该参数,舵机不转动; 停止角度的精确度,该数值越小,控制精度越高; 理解说明: 此参数是用于吸收舵机在最终停止位置往返振荡所设置的。舵机接收到控制输入信号,然后与基准信号做差值,然后输出差值脉冲用于控制舵机内部直流电机正反转,经过齿轮组减速后,驱动舵盘和电位器转动,电位器输出反馈基准信号,直到电位器反馈的基准信号与输入信号完全一致时,舵机停止转动。 舵机实际运行到停止位置时,由于存在运动惯量,电位器输出的反馈基准信号与输入信号不能完全一致,差值脉冲在很小的范围内输出,导致舵机在停止位置附近往返振荡。 最小脉冲宽度的由来:为了解决往返振荡问题,在接近停止位附近用电路方式将差值脉冲吸收。 精确度误差的由来:由于差值脉冲被吸收掉,导致实际位置与目标位置存在差异;限值的差值脉冲越小,越接近目标位置。 死区参数优缺点 : 优点:消除舵机在停止位置的往返振荡; 缺点:死区越小,精度越高,意味着死区范围内的差值脉冲调整越频繁;加剧对齿轮组和电位器的磨损; 在选择舵机时,需要根据实际项目需求,综合考虑以上参数。例如,如果项目需要舵机拉动的负载较大,就需要选择扭矩较大的舵机;如果项目对速度有要求,就需要选择速度较快的舵机。同时,还需要考虑舵机的尺寸和重量是否适合项目的安装空间和要求。 此外,还需要注意舵机的控制信号类型和控制方式。一般来说,舵机的控制信号是PWM信号,需要设置PWM的周期为50Hz。控制方式可以是模拟信号控制或数字信号控制,具体选择取决于项目的控制需求。 常见的舵机型号有SG90、MG996R、DS3218、MG90S、DS3225、FS5109M和MG995等,每种型号都有其特定的参数和应用场景。因此,在选择舵机时,需要综合考虑项目需求和实际应用场景,选择最适合的舵机型号和参数。 舵机的应用场景 舵机在多个领域都有广泛的应用,主要包括以下几个方面: 机器 人:在机器人领域中,舵机通常用于控制运动关节的转动,实现机器人的动作控制。通过精确控制舵机的角度和速度,可以使机器人完成各种复杂的动作和任务。 航模 :在航模领域中,舵机用于控制舵面的转动,从而改变飞机的飞行姿态。航模爱好者可以通过调整舵机的参数和角度,实现飞机的起飞、爬升、俯冲、翻滚等各种飞行动作。 汽车 :在汽车领域中,舵机用于控制方向盘的转动,实现车辆的转向。一些高性能汽车或智能驾驶汽车可能会使用舵机来实现更精确和快速的方向控制。 船舶 :在船舶领域中,舵机用于控制舵轮的转动,实现船舶的转向。舵机在船舶航行中发挥着至关重要的作用,可以帮助船舶保持正确的航向和稳定性。 此外,舵机还广泛应用于玩具、飞机、潜艇模型等领域。随着技术的不断发展,舵机的应用场景也在不断扩展。总之,舵机作为一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在各种需要精确控制旋转角度的场合中,舵机都发挥着不可或缺的作用。 实例 舵机在机电系统中作为基本的输出执行机构,简单的控制和输出使得单片机系统能轻松与其进行对接,其优越的角度控制性能在飞机、潜艇模型,遥控机器人、物流、机器人、人工智能、汽车等领域中被广泛使用。例如,在无人机或航模中,舵机可以控制机翼的上下、左右转动,从而控制飞行方向、高度等。 在机器人中,舵机可以控制机器人的关节运动,使机器人能够完成各种复杂的动作,如抓取、拍摄、移动等。 供应商A:东莞市德晟智能科技有限公司 https://www.dspower.net/pd45594901.html 1、产品能力 (1)选型手册 https://www.dspower.net/pl3684832.html (2)主推型号1:DS-S006 对应的产品详情介绍 SG90舵机高精度防烧防抖遥控飞机无人机伺服器玩具车模9g数字舵机小重量,小尺寸全塑料外壳两色可选,全新外观+轻薄机身高精度全塑胶齿轮一体成型,强度高、咬合性好、有效防扫齿采用进口电位器,精度高、寿命长;(有效寿命超过五十万次,可升级为磁编码器)堵转时间和电流超过预设值,做降流和断电处理,防堵防烧 三防处理(防水等级可定制) 产品尺寸 产品规格 点击图片可查看完整电子表格 使用场景 (如有侵权,联系删除)
  • 热度 24
    2016-1-26 10:33
    1254 次阅读|
    0 个评论
    在本项目中,我将从头开始打造一个能够使用蓝牙进行控制的四足乌龟机器人。该机器人拥有两个自由度,采用的是爬行的方式进行运动,所以在不平坦的地面可能不能正常工作。 第一步:3D打印组件 本机器人的部分机身是采用的3D打印技术制作的,我在这里提供了这些3D打印部件的.stl文件和.ipt文件,你可以根据自己的需要对这些文件修改。你需要打印的文件包含一个基板、一个盖板、3个前后接头、一个前面板、4个腿部接口、4个腿部折叠构件、一个后面板、4个侧面和基板接头、2个侧面板、4个上部构件。 第二步:其它组件及成本 下面我列出了本项目所需要的主要部件以及成本。(当然,在中国购买的话,大部分都会便宜一点。) ·3D打印部件~ 40-60美元 ·Arduino Uno~ 20美元 ·Arduino 5V传感器扩展板~ 11美元 ·HC-06蓝牙模组~ 10美元 ·8个Futaba S3003标准舵机~ 80美元 ·超声波传感器~ 7美元 ·4枚AA电池(驱动舵机)~ 6美元 ·AA电池套~ 5美元 ·9V电池(驱动Arduino)~ 8美元 ·9V电池连接器~ 5美元 ·4个母口对母口线(连接传感器和扩展板)~ 5美元 ·计算机 总共大约在197美元~217美元之间。 第三步:腿的组装 原料备齐了之后就可以开始组装了,我们从腿部开始。8个舵机分成2组,每组4个分别安装在机器人的“大腿关节”和“膝盖关节”处。 其中“大腿关节”处4个的舵机需要固定在机器人的基板上。 第四步:连线 之后再将带有扩展板的Arduino和电池等安装到基板上,将蓝牙模组、舵机和超声波传感器对应连接在Arduino的相应位置上,最后连接电池。具体的连接方式如下图所示: 连接好了是这样: 第五步:运动模式设计 设计一款机器人,为其设计合适的运动模式当然是至关重要的。我的机器人是这样运动的: 当机器人向前运动时,它首先移动其右前足向前,同时机器人会将左前足向后推。这会将整个机器人的右部向前推动。然后机器人再向前移动其左后足,这时又会将其右后足向后推。这种运动会将机器人的左部推向前。接下来机器人会左前足向前、右前足后推;然后再右后足向前、左后腿后;如此往复。这种方式能让机器人以比较快的速度向前运动。如下图所示: 而当机器人倒退时,只需要反过来执行整个过程就行了。 如果机器人需要右转,则机器人移动右前足向前,同时又移动右后足向前,然后在左后足不动的情况下让右前足向后运动。接下来前移左前足,然后后移右后足,同时前移其左前足。右转即完成。 同理,当机器人需要左转时,可以让机器人线移动左前足向前,并移动左后足向前,然后在右后足保持不动的状态下让左前足向后运动。接下来,机器人继续移动右前足向前,然后移动左后足向后的同时后移其右前腿。左转即完成。 第六步:代码 代码分为两个部分:The_Social_Quadruped.ino和Quad_Functions.ino。 第一个包含了Servo.h库(Arduino IDE自带)和NewPing.h。我首先定义了触发引脚、相应引脚以及超声波传感器的最大距离;之后我又定义了一个布尔变量,可以用来切换机器人的自动模式。之后又定义了舵机。在设置函数中,我初始化了串口检测器,让我可以将命令发送到Arduino上。在循环函数中,我设置超声波传感器发送最近物体的距离给串口检测器,然后检查用户输入。如果用户输入字符为 f, b, r, l, w, s, u 或a,那么则将分别执行前进、后退、右转、左转、挥手、睡眠、站立或自动工作这几个不同的功能。这些功能函数是在Quad_Functions.ino中定义的,可以轻松地调用。另外,需要提及的是当用户按了a之后,机器人将进入自动模式;要取消自动模式则需要用户再点击一次a。 第二部分Quad_Functions.ino则包含了所有功能的函数定义。其中包括机器人的各种运动模式。前进、后退、右转、左转等函数都很好理解,挥手功能包含wave2 和wave两个函数,可以让机器人分别使用左前足和右前足挥手。waveAuto函数是机器人在自动模式下挥手,使用的是右前足。睡眠模式是指机器人将舵机的位置运动到让机器人平躺到地面的模式。readPing函数则用来读取超声波传感器传递的数据。 第七步:无线控制 首先当然要确保蓝牙模块是按以上描述正确安装的。 接下来,启动你电脑上的蓝牙并将其和Arduino上的蓝牙连接配对。配对完成之后,进入控制面板,在设备中找到HC-06。右键点击并选择“属性”,选择“服务”选项,将该接口的串口通信勾线上。 然后进入Arduino IDE,选择路径Tools - Port,将上面“服务”选项中的接口设置上去。然后就大功告成了! 打开串口监视器,你可以查看超声波传感器的读数,并且可以将机器人通过USB连接到电脑上进行控制。
  • 热度 2
    2016-1-15 11:12
    3226 次阅读|
    1 个评论
    现在世面上有很多机械臂和机械手,不同品牌,不同型号,有面向工业用的,也有面向生活用的,这些产品的性能各有差异,然而制造商是不会主动把缺点告诉用户的,只会把优点夸大。那么不同的机械臂的区别在哪里?知乎网友@Yifan Hou从用户的角度谈了自己的看法。 @Yifan Hou:我是用机械臂的,不是造机械臂的,只能从用户的角度讲讲差别。 一、驱动器 驱动器的差别是根本的差别。除了扭矩、功率这些显而易见的因素外,还有 1. 静态精度差别。 面向生活用的机械臂(比如PR2)用普通舵机就行了,转角精度误差1度以内都行。死区也影响很大,舵机用旧了齿轮间隙能到3~5度,用手来回拧,晃动空隙明显。而工业机械臂,比如Motoman,UR等,那些机械臂上力后,用手拧根本感觉不到空隙。 2. 动态性能差别。 这个看控制器的频率、传感器误差等等因素,好的机械臂在转时根本感觉不到抖动、超调。 3. 是否具有柔性。 Stiffness这点现在正越来越受重视,因为直接关系到和人交互时的安全性问题。普通伺服电机木有柔性,Serial Elastic Actuator是柔性驱动器的最主流解决方案,还有通过控制系统,用电来实现机械上的刚度变化的产品。 4. 是否能back drive ,就是在上力的情况下,用外力将其拧动。这个也主要是在和人交互时有用。 二、机械臂 1. 精度。 前面的精度指旋转精度,这里指笛卡尔坐标系下末端作用器的精度。传动结构的质量同样影响机械臂的最终精度。工业机械臂,比如Motoman,UR,ABB等,其产品一般都能精确到毫米级。 2. 结构。 不仅是自由度配置,那个的话大家基本都是6~7自由度,更重要的是内部结构的紧凑,能把相同性能的机器人做得越“瘦”越好,实际使用更加自由。比如Rethink Robotics新机器人Sawyer比Baxter小了很多。 3. 使用寿命。 工业机器人的使用寿命一般在30,000小时以上。移动机器人平台可能不太在乎这一点。
相关资源