智能小车舵机控制
// 只利用一个定时器T0 ,定时时间为,定义一个角度标识,数值为1 、2、3、4、5,// 实现、1ms、、2ms、高电平的输出,再定义一个变量,数值最大为40 ,实现周期为// 每次进入定时中断,判断此时的角度标识,进行
// 相应的操作。比如此时为5 ,则进入的前5 次中断期间,信号输出为高电平,即为
// 高电平。剩下的35 次中断期间,信号输出为低电平,即为的低电平。这样总的时间// 是
20ms,为一个周期。
// 用51 板上s1 和s2 按键
// 用P1^7 输出PWM信号控制舵机
#include ""
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e
void delay(unsigned char i)// {
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void Time0_Init() //
{
TMOD = 0x01; //
IE= 0x82;
TH0= 0xfe;
TL0= 0x33; //
TR0=1; //
}
void Time0_Int() interrupt 1 //
{
TH0 = 0xfe; //
TL0 = 0x33;
if(count pwm=1; // else pwm=0; // count=(count+1); // count=count%40; // 延时 定时器初始化 定时器0 工作在方式1 晶振,定时器开始 中断程序 重新赋值 判断次数是否小于角度标识 确实小于,PWM输出高电平大于则 输出低电平 次数加1 次数始终保持为40 即保持周期为20ms 20ms。 的 unsigned char count; // sbit pwm =P1^7 ; //PWM sbit jia =P3^0; // sbit jan =P3^1; // sbit jianwei=P3^4; // unsigned char jd; // 次数标识 信号输出角度增加按键检测IO 口角度减少按键检测IO 口按键位 角度标识 按键扫描 角度增加按键是否按下 按下延时,消抖 确实按下 角度标识加 1 按键按下 则 20ms 周期从新开始 已经是 180 度,则保持 等待按键放开 角度减小按键是否按下 , 角度标识减 1 已经是 0 度,则保持 数码管显示函数 根据角度标识显示相应的数值 为 1 ,角度为 0,前 3 个数码管显示 ge=0; break; case 2: bai=0; shi=4; ge=5; break; case 3: bai=0; shi=9; ge=0; } void keyscan() // { if(jia==0) // { delay(10); // if(jia==0) // { jd++; // count=0; // if(jd==6) jd=5; // while(jia==0); // } } if(jan==0) // { delay(10); if(jan==0) { jd--; // count=0; if(jd==0) jd=1; // while(jan==0); } } } void display() // { unsigned char bai,shi,ge; switch(jd) // { case 1: // bai=0; shi=0; 000 break; case 4: bai=1; shi=3; ge=5; break; case 5: // bai=1; shi=8; ge=0; break; } dula=0; 为5,角度为180 ,前 3 个数码管显示 180 P0=table[bai]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=table[shi]; dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(5); P0=table[ge]; dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(5); } void main() { jd=1; jianwei=0; count=0; Time0_Init(); while(1) { keyscan(); // display(); } 按键扫描 } 2 #include<> #define uint unsigned int #define uchar unsigned char uint count; uchar jd; sbit le1=P1^0; //* 光电传感器*// sbit PWM=P3^5; // 舵机pwm// init() { TMOD=0x01;// 设定定时器 TH0 = 0xFE; TL0 = 0x0c;// 设定定时初始值 EA=1; ET0=1; TR0=1; } void delay(uint z) // 延时 { uint x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void timer0() interrupt 1 // 产生pwm信号控制舵机,周期 20ms { TH0 = 0xFE; TL0 = 0x0c; // 设定定时初始值if(count PWM=1; // 确定小于,pwm输出高电平 // delay(180); // 延时一会,可以减慢舵机转速} else PWM=0; // 大于则输出低电平count=count+1; // 次数加1 count=count%40; // 次数始终保持为40 即保持周期为20ms } void xunji() // 循迹函数,读取光电管状态{ if(le1!=0) { delay(10); if(le1==0) { jd++; count=0; while(le1==0); } } // 分析光电管状态,看你的电路检测到黑线输出1 或者是0 else { count=0; jd=3; // 舵机归中 } } void main() { jd=3; // 角度初始化90°:1= 舵机为0° 2=1ms 舵机为45°3、4、5、同上count=0; // 初始化赋值零 init(); // 定时器初始化 while(1) { xunji(); // 舵机检测 } } #include "reg52.h" unsigned char count; //0.5ms次数标识 sbit pwm =P2^7 ; //PWM信号输出 sbit jia =P2^4; //角度增加按键检测IO口 sbit jan =P2^5; //角度减少按键检测IO口 unsigned char jd=5; //角度标识 void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE = 0x82; TH0 = 0xfe; TL0 = 0x33; //11.0592MZ晶振,0.5ms TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count< jd) //判断0.5ms次数是否小于角度标识 pwm=1; //确实小于,PWM输出高电平 else pwm=0; //大于则输出低电平 count=(count+1); //0.5ms次数加1 count=count%40; //次数始终保持为40 即保持周期为20ms } void keyscan() //按键扫描 { if(jia==0) //角度增加按键是否按下 { delay(10); //按下延时,消抖 if(jia==0) //确实按下 { jd++; //角度标识加1 count=0; //按键按下则20ms周期从新开始 if(jd==6) jd=5; //已经是180度,则保持 while(jia==0); //等待按键放开 智能小车舵机控制精编 版 MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】 1 //只利用一个定时器 T0,定时时间为,定义一个角度标识,数值为 1、2、3、4、5, //实现、1ms、、2ms、高电平的输出,再定义一个变量,数值最大为 40,实现周期为 20ms。 //每次进入定时中断,判断此时的角度标识,进行 //相应的操作。比如此时为 5,则进入的前 5 次中断期间,信号输出为高电平,即为的 //高电平。剩下的 35 次中断期间,信号输出为低电平,即为的低电平。这样总的时间 //是 20ms,为一个周期。 //用51板上s1和s2按键 //用P1^7输出 PWM信号控制舵机 #include "" unsigned char count; //次数标识 sbit pwm =P1^7 ; //PWM信号输出 sbit jia =P3^0; //角度增加按键检测IO口 sbit jan =P3^1; //角度减少按键检测IO口 sbit jianwei=P3^4; //按键位 unsigned char jd; //角度标识 sbit dula=P2^6; sbit wela=P2^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE= 0x82; TH0= 0xfe; TL0= 0x33; //晶振, TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count /**********************舵机增量式PID算法*********************** double ref = 0;//设置参数设定值 double feb = 0;//采样反馈过程值 int pwm_var = 0; //PID调整量 int PWM_out = 0; //PWM输出量 double Uo = 0; double Ek = 0; double Ei = 0; double Ed = 0; #define Kp 8 //PID调节的比例常数 #define Ti 0.05 //PID调节的积分常数 #define Td 0.02 //PID调节的微分时间常数 #define T 0.02 //采样周期 #define Kpp Kp * ( 1 + (T / Ti) + (Td / T) ) #define Ki (-Kp) * ( 1 + (2 * Td / T ) ) #define Kd Kp * Td / T //#define Kpp 4 //#define Ki 0.8 //#define Kd 20 //误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡 #define Emin 3 //调整值限幅,防止积分饱和 #define Umax 100 #define Umin -100 //输出值限幅 #define Pmax 15500 #define Pmin 200 /////////////////////////////////////////////////////////////////// ////// PID运算 /////// #i n c l u d e"r e g52.h" unsigned char count; //0.5ms次数标识 sbit pwm =P2^7 ; //PWM信号输出 sbit jia =P2^4; //角度增加按键检测IO口 sbit jan =P2^5; //角度减少按键检测IO口 unsigned char jd=5; //角度标识 void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void Time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE = 0x82; TH0 = 0xfe; TL0 = 0x33; //11.0592MZ晶振,0.5ms TR0=1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count< jd) //判断0.5ms次数是否小于角度标识 pwm=1; //确实小于,PWM输出高电平 else pwm=0; //大于则输出低电平 count=(count+1); //0.5ms次数加1 count=count%40; //次数始终保持为40 即保持周期为20ms } void keyscan() //按键扫描 { if(jia==0) //角度增加按键是否按下 { delay(10); //按下延时,消抖 if(jia==0) //确实按下 { jd++; //角度标识加1 count=0; //按键按下则20ms周期从新开始 if(jd==6) jd=5; //已经是180度,则保持 while(jia==0); //等待按键放开 } 实验五:树莓派平台-------按键控制小车启动实验 1、实验前准备 图1-1 树莓派主控板 图1-2 按键开关 2、实验目的 ssh服务登录树莓派系统之后,编译运行按键控制小车启动实验后,按下KEY 启动小车,小车会自动先前进1s,后退1s,左转2s,右转2s,原地左转3s,原地右转3s,接着停止0.5s。 3、实验原理 按键消抖:通常我们的按键开关一般都是机械弹性开关,当机械触点断开,闭合时,由于机械触点的弹性作用,一个按键开关子在闭合时不会马上就能稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开时会伴随着一连串的抖动。 图3-1 按键抖动状态图 抖动时间一般都是由按键的机械特性决定的,一般都会在10ms以内,为了确保程序对按键的一次闭合后一次断开只响应一次,必须进行按键的消抖处理,有硬件消抖和软件消抖。 其中,软件消抖指的是检测出键闭合后执行一个延时程序,产生5ms~10ms 的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。 硬件消抖是在开关两段接一个0.1uf的电容。本次实验我们采取的是软件延时去抖。 4、实验步骤 4-1.看懂原理图 图4-1 树莓派主控板电路图 图4-2 按键 图4-3 树莓派40pin引脚对照表 4-2 由电路原理图可知按键是直接连接到主控板上的wiringPi编码的10口。我们设置10口为输入模式,并当按下按键时通过检测该引脚的电平状态,来判断按键是否被按下。 4-3 程序代码如下: /*实现前进与后退功能*/ /*控制智能车向前行驶10秒,然后停3秒,再向后行驶6秒,停止*/ /********************************************************/ #include { go(); //前进 delay(10000); //前进10秒 stop(); //停止 delay(3000); //停3秒 back(); //后退 delay(6000); //后退6秒 stop(); //停止 } 单片机控制舵机 修改浏览权限 | 删除.什么是舵机: 舵机如下所示: 有三根线,一般依次是地,电源(5V左右),信号(信号的幅值>=3.3V),不清楚各个脚打开舵机一测量就知道了。 2.其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏 置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 3.舵机的控制: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关 系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 重要说明: 1:上面部分还是成线形关系的,Y=90X-45(X单位是ms,Y单位是度数:) 2:上面所说的0度45度等是指度45度位置(什么意思呢:我说明一下就知道了,就拿45度位置来说,若舵机停在0度位置,下载45度位置程序后则舵机停在45度,即顺时针走了45度,若当时舵机在135度位置,则反转90度到45度位置。所以舵机不存在正转反转问题。这点非常重要。 3:若想转动到45度位置,要一直产生1.0ms的高电平(即PA0=1; Delay(1ms);PA0=0;Delay(20ms);要不停的产生这个高低电平,产生PWM脉冲 请看下形象描述吧: 下面是我在ATMEGA32上的测试程序,开发软件:ICC AVR #include 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片, 获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制信号是PWM信号,利用占 空比的变化改变舵机的位置。一般舵机的控制要求如图1所示。 图1 舵机的控制要求 单片机实现舵机转角控制可以使用FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA成本高且电路复杂。对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放 器件的选择有较高要求,从电路体积和功耗考虑也不易采用。5mV 以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波 电路的精度难以达到舵机的控制精度要求。 也可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。 单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的PWM周期信号,本设计是产生20ms的周期信号;其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。 具体的设计过程: 例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为 20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在 一、前言 设计背景: 在科学探索和紧急抢险中经常会遇到对与一些危险或人类不能直接到达的地域的探测,这些就需要用机器人来完成。而在机器人在复杂地形中行进时自动避障是一项必不可少也是最基本的功能。因此,自动避障系统的研发就应运而生。我们的自动避障小车就是基于这一系统开发而成的。意义随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人的自动避障有了重大的意义。我们的自动避障小车就是自动避障机器人中的一类。自动避障小车可以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物。成员情况本组三位成员均为2005级基地班学生,都选修过数字电路课程。二、总体方案设计 1、设计要求 小车从无障碍地区启动前进,感应前进路线上的障碍物后,根据障碍物的位置选择下一步行进方向。并可通过两个独立按键对小车进行控速。 2、小车自动避障的原理 小车车头处装有三个光电开关,中间一个光电开关对向正前方,两侧的光电开关向两边各分开30度,(如右图所示)。小车在行进过程中由光电开关向前方发射出红外线,当红外线遇到障碍物时发生漫反射,反射光被光电开关接收。小车根据三个光电开关接受信号的情况来判断前方障碍物的分布并做出相应的动作。光电开关的平均探测距离为30cm。 3、模块方案比较及论证 根据设计要求,我们的自动避障小车主要由六个模块构成:车体框架、电源 及稳压模块、主控模块、逻辑模块、探测模块、电机驱动模块组成。各模块分述如下: 3.1车体框架 在设计车体框架时,我们有两套起始方案,自己制作和直接购买玩具电动车。方案一:自己设计制作车架自己制作小车底盘,用两个直流减速电机作为主动轮,利用两电机的转速差完成直行、左转、右转、左后转、右后转、倒车等动作。减速电机扭矩大,转速较慢,易于控制和调速,符合避障小车的要求。而且自己制作小车框架,可以根据电路板及传感器安装需求设计空间,使得车体美观紧凑。但自己制作小车设计制作周期较长,且费用较高,因而我们放弃这一方案。方案二:购买玩具电动车 玩具电动车价格低廉,有完整的驱动、传动和控制单元,其中传动装置是我们所需的,缩短了开发周期。但玩具电动车采用普通直流电机驱动,带负载能力差,调速方面对程序要求较高。同时,玩具电动车转向 依靠前轮电机带动前轮转向完成,精度低。 考虑到利用玩具电动小车做车架开发周期短,可留够充分的时间用于系统调试,且硬件上的不足我们有信心用优良的算法来弥补,故我们选择方案二。 智能小车控制系统设计 ——ARM控制模块设计 EasyARM615是一款基于32位ARM处理器,集学习和研发于一体的入门级开发套件,该套件采用Luminary Micro(流明诺瑞)公司生产的Stellaris系列微控制器LM3S615。本系统设计是以EasyARM615开发板为核心,通过灰度传感器检测路面上的黑线,运用PWM直流电机调速技术,完成对小车运动轨迹等一系列的控制。同时利用外扩的液晶显示器显示出各个参数。以达到一个简易的智能小车。 本文叙述了系统的设计原理及方法,讨论了ISR集成开发环境的使用,系统调试过程中出现的问题及解决方法。 据观察,普通的玩具小车一般需要在外加条件下才能按照自己的的设想轨迹去行驶,而目前可借助嵌入式技术让小车无需外加条件便可完成智能化。在小车行驶之前所需作的准备工作是在地面上布好黑线轨迹,设计好的小车便可按此黑线行驶,即为智能小车。其设计流程如下: 1、电机模块 采用由达林顿管组成的H型PWM电路。PWM电路由四个大功率晶体管组成,H桥电路构成,四个晶体管分为两组,交替导通和截止,用单片机控制达林顿管使之工作在开关状态,根据调整输入控制脉冲的占空比,精确调整电机转速。这种电路由于管子工作只在饱和和截止状态下,效率非常没。H型电路使实现转速和方向的控制简单化,且电子开关的速度很快,稳定性也极强,是一种广泛采用的PWM调整技术。 具体电路如下图所示。本电路采用的是基于PWM原理的H型驱动电路。该电路采用TIP132大功率达林顿管,以保证电动机启动瞬间的8安培电流要求。 2、传感器模块 灰度测量模块,是一种能够区分出不同颜色的的电子部件。灰度测量模块是专为机器人设计的灰度传感器。例如:沿着黑色轨迹线行走,不偏离黑色轨迹线;沿着桌面边沿行走,不掉到地上,等等。足球比赛时,识别场地中灰度不同的地面,以便于进行定位。不同的物体对红外线的反射率不同,黑色最低,白色最高;它通过发射红外线并测量红外线被反射的强度来输出反映物体颜色的电压信号,有效距离3-30毫米。 其技术规格如下: 已知灰度传感器的输出电压为0-3.3V,所以可通过ARM615开发板上的ADC 模块转换成数字信号,最后通过不断测试得出黑线与白线的大概参数值,完成对小车传感器部分的设计。 在本次设计中选择二个灰度传感器,其实现效果与布局如下所示。 智能车转角与速度控制算法 1.检测黑线中点Center:设黑、白点两个计数数组black、white,从第一个白点开始,检测到一个白点,白点计数器就加1,检测到第一个黑点,黑点计数器就加1,并且白点计数器停止,以此类推扫描每一行;黑线中点=白点个数+(黑点的个数/2) 2.判断弯直道: 找出黑线的平均位置avg (以每10行或者20…作为参照,行数待定) 算出相对位移之和(每一行黑线中点与黑线平均位置距离的绝对值之和) 然后用Curve的大小来确定是否弯直道(Curve的阀值待定)。 3.控制速度: 根据弯度的大小控制速度大小。 //*****************************弯度检测函数*******************************// Curvecontrol () { int black[N]; //黑点计数器 int white[N]; //白点计数器 int center[N]; //黑线中点位置 int avg; //黑线中点平均位置 int curve;//N行的相对位移之和 if(白点) ++white[N]; //判断黑白点的个数 else ++black[N]; center[N]=white[N]+black[N]/2; //每一行的黑线中点avg=(center[1]+center[2]+...+center[N])/N; //求出黑线中点的平均位置 curve=(|avg-center[1]|+|avg-center[2]|+...+|avg-center[N]|)/N //求出N行的相对位移之和 return curve; //返回弯度大小 简易教程 前言 往届全国大学生电子设计竞赛曾多次出现了集光、机、电于一体的简易智能小车题目,此次,笔者在通过多次论证、比较与实验之后,制作出了简易小车的寻迹电路系统。 整个系统基于普通玩具小车的机械结构,利用小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。系统分为检测、控制、驱动三个模块。首先利用光电对接收管和路面信号进行检测,然后经过比较器处理,对软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。 智能小车能在画有黑线的白纸“路面”上行驶,这是由于黑线和白纸对光线的反射系数不同,小车可根据接收到的反射光的强弱来判断“道路”---黑线,最终实现简单的循迹运动。 个人水平有限,有错误不足之处,还望各位前辈同学多多包含,指出修正,完善。谢谢! 李学云王维 2016年7月27号 目录 前言 (1) 第一部分硬件设计 (1) 1.1 车模选择 (1) 1.2传感器选择 (1) 1.3 控制模块选择 (2) 第二部分软件设计及调试 (3) 2.1 开发环境 (3) 2.2总体框架 (3) 2.3 舵机程序设计与调试 (3) 2.3.1 程序设计 (3) 2.3.2 调试 (3) 2.3.3 程序代码 (4) 2.4 传感器调试 (5) 2.4.1 传感器好坏的检测 (5) 2.4.2 单片机能否识别信号并输出信号 (5) 2.5 综合调试 (7) 附录1 (9) 第一篇舵机(舵机及转向控制原理) (9) 1.1概述 (9) 1.2舵机的组成 (10) 1.3舵机工作原理 (11) 1.4舵机使用中应注意的事项 (12) 1.5如何利用程序实现转向 (12) 1.6舵机测试程序 (13) 附录2 (14) 第二篇光电红外传感器 (14) 2.1传感器的原理 (14) 2.2红外光电传感器ST188 结构图 (15) 2.3传感器的选择 (15) 2.4传感器的安装 (16) 2.5使用方法 (16) 2.7红外传感器输入输出调试程序 (17) #include #include 【机器人创意工作室教程一】WIFI智能小车机器人基本原理 [复制链接] liuv ikin g 管 理 员 做 中 国 人 自 己 的 W I F I 机 器 人 ! 贡献 2 4 9 电梯直达 楼主 发表于 2012-5-13 11:58:55 |只看该作者|倒序浏览 分享到:11 WIFI智能小车机器人是很多人童年时的梦想,就好比当年看着《小鬼当家》里面的那个视频遥控车一样,看着就激动! 然而对于大部分初学者而言,本身并非电子专业,也不是计算机专业,可是却对WIFI/蓝牙控制的智 能小车机器人情有独钟,怎么办呢?对于一个专业不对的人来说,确实是隔行如隔山,但是没有关系,从今天起,WIFI机器人网·机器人创意工作室不间断地推出一系列教程,手把手教你如何DIY一个属 于自己的智能小车机器人。 鉴于蓝牙智能车和WIFI智能车其实很类似的,只是把WIFI模块换成了蓝牙模块,所以蓝牙车就不再 详细阐述了,弄明白了WIFI车,蓝牙车也一样的。 OK,进入正题,机器人创意工作室教程第一讲《WIFI智能小车机器人基本原理》 我们的这款WIFI智能小车机器人采用的路由器+PC或者手机、网页控制方式。其基本原理分为4大块: 1、把普通的无线路由器通过刷入开源的Openwrt系统,使之成为一个运行了Linux系统的小电脑,何 为Openwrt? 请看: 什么是OpenWRT? 1. 关于 OpenWrt 当Linksys 释放 WRT54G/GS 的源码后,网上出现了很多 不同版本的 Firmware 去增强原有的功能。大多数的 Firmware 都是99%使用 Linksys的源码,只有 1%是加上去的,每一种 Firmware 都是针对特定的市场而设计,这样做有2个缺点,第一个是难以集 合各版本Firmware的长处,第二个是这版本距离 Linux 正式发行版越来越远。OpenWrt 选择了另一 条路,它从零开始,一点一点的把各软件加入去,使其接近 Linksys 版 Firmware的功能,而OpenWrt 的成功之处是它的文件系统是可写的,开发者无需在每一次修改后重新编译,令它更像一个小型的 Linux 电脑系统,也加快了开发速度。 以上解释摘自百度百科。简而言之,就是从思科的路由源码改造过来的,一个适用于某些特定芯片的 路由器的小型Linux系统,有了这个系统,我们的路由就不再是上网那么简单了,我们可以在上面安 装各种程序、驱动,以路由为平台,用户可以自由地加载USB摄像头、网卡、声卡、等等设备。 我们的WIFI板上运行着一款程序,叫做mjpg-streamer,这个程序可以把USB摄像头的视频进行编码,然后通过WIFI返回给上位机,这样,我们就可以看到来自机器人的视频了。 同时路由一般都预留有TTL串口,TTL串口是用来调试或者刷机用的,我们把这个TTL串口引出来, 然后通过安装在路由里面的Ser2net软件,就能把来自WIFI信道的指令转到串口输出,而串口在这里 的作用就是与单片机芯片MCU通信,让单片机知道用户要让他做什么动作。关于TTL的介绍,请看后 文。 WIFI(路由)模块: 飞思卡尔--智能车舵机讲解 2.2 舵机的安装 完成了玩具车的拆卸之后要做的第二步就是安装舵机,现在市场上卖的玩具车虽然也具有转向 功能,但是前轮的转向多是依靠直流电机来驱动,无论向哪个方向转都是一下打到底,无法控制转 过固定的角度,因此根据我们的设计需求,需要将原有的转向部分替换成现有的舵机,以实现固定 转角的转向。舵机的实物图如图 2.1所示。 需要说明的是由于小车系玩具车改装,在安装舵机是需要合理的利用小车的结构,将舵机安装 牢固,同时还需注意合理利用购买舵机是附赠的齿轮,从而将舵机固定在合适的位置。舵机的安装 方式有俯式、卧式多种,不同的安装方法力臂长短、响应速度都有所不同,这一点请自己根据实际 情况合理选择,图 2.2 为舵机的安装图。 5 图 2.1 舵机实物图图 2.2 舵机安装图 舵机安装过程中有一点需要尤其注意,由于舵机不是360°可转的,因此必须保证车轮左右转 的极限在舵机的转角范围之内。 舵机安装完毕之后就可以对小车的转角进行控制了,但是由于玩具车的车体设计往往限制了小 车的转角,因此可以对小车进行局部的“破坏”来增大前轮的转角,要知道在比赛中追求速度的同 时一个大的转角对小车的可控性会有一个很大的提升,如图2.3 所示,就是对增加小车转角的一个 改造,这是我在去年小车比赛中的用法。将阻碍前轮转角的一部分用烙铁直接烫掉。 但是这种做法也有风险,由于你的改造会破坏小车的整体 7 结构,有可能会对小车的硬件结构造 成破坏,因此如果你的小车在改造之后显得过于脆弱的话那你就要对你的小车采取些加固措施了。 3.4 舵机转向模块设计 舵机是小车转向的控制机构,具有体积小、力矩大、外部机械设计简单、稳定性高等特 点,无论是在硬件还是软件舵机设计是小车控制部分的重要组成部分,舵机的主要工作流程 为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。图 3.11 为舵机的实物图。 751单片机程序:按键控制舵机角度
智能小车舵机控制精编版
智能车舵机PD运算
单片机程序按键控制舵机角度
5.智能小车-按键控制小车的启动
智能小车控制程序1
智能车中的舵机入门
舵机控制程序
智能小车原理
智能小车控制系统设计
智能车控制算法
51红外循迹小车报告(舵机版)最终版
51控制舵机程序大全
智能小车控制基本原理
飞思卡尔--智能车舵机讲解
单片机按键控制舵机转动