实现Android平台的手机用重力感应蓝牙遥控小车
实现Android平台的手机用重力感应蓝
牙邑小车
最早接触重力感应是几年前刚买诺基亚的5800,玩上面的一款重力感应控制的游戏。最近突发奇想,我何不自己做个真实的重力感应控制的赛车呢。于是就有了这个小东西。小车车架是买的现成的,我觉得自己做的没这个好看,哈哈。上面有马达和舵机。马达提供前后动力,舵机负责转向。
手机端软件是java写的,小车部分单片机是用的C。
原理很简单:手机检测手机的运动,判定后发送指定的编码给小车上蓝牙拈,蓝牙拈直接串口透传给单片机,单片机分析命令,然后通过L298N芯片控制马达正反转和转速,和控制舵机。
首先你要懂点编程的知识,需要用到C和Java。电路知识懂点就行,像我。。电路知识一塌糊涂啊。。
我用的是51单片机的最小系统板。单片机我用的是STC89C52RC。其实我也是刚接触单片机,其实可以用可以直接提供PWM的单片机,这样就不用那么麻烦了。下文说。
还要有一块L298N电机驱动板。其他的驱动板我不太了解,应该有比较高级的。
蓝牙转串口的拈。我用的HC-06.买从机就行
y1t8d 多宝平台 http://www.ok888.co/
杜邦线,电池∩以的话要两块,动力电一块,信号电一块。
一般舵机调试PWM脉宽在1-2ms之间,给的值不同,转动角度也不同。50Hz,20ms的周期一般不用改.马达调速也是PWM。也就是占空比的概念,简单的说比如:给马达1秒的电,然后断9秒,再重复这个过程,这时占空比为1/10.如果给9秒的电断1秒,占空比为9/10.这时肯定比刚才转的快。当然实际不会到秒级,
一般都是毫秒级。
马达我用的是20Hz,50ms的周期。
privatefinalbyteGO_LEFT=(byte)0x20;//左转
privatefinalbyteGO_RIGHT=(byte)0x30;//右转
privatefinalbyteGO_MIDDLE=(byte)0x40;//回中
y1t8d 多宝平台 http://www.ok888.co/
privatefinalbyteGO_DRIVE=(byte)0x71;//前进0x51
privatefinalbyteGO_BACK=(byte)0x70;//倒车0x50
privatefinalbyteGO_NULL=(byte)0x10;//停车
这些事我定义的编码,可以自己定义。
下面对应的是单片机接收部分代码
switch(cmd&0xF0){
case0x20://左转00100000B
turn=left;//1.8ms
turn_right=0;
servo_num=0;
isOK=0;
y1t8d 多宝平台 http://www.ok888.co/
if(!TR0)
TR0=1;
break;
case0x30://右转00110000B turn=right;
turn_right=1;
servo_num=0;
isOK=0;
if(!TR0)
TR0=1;
L298N很简单,稍微了解一下就知道。我买的是能带2个直流电机。端口有IN1,IN2,ENA这是一个马达用的。另一个IN3,IN4,ENB。这里我们只用了一个。
y1t8d 多宝平台 http://www.ok888.co/
比如正转:IN1个1,IN2给0,ENA给1就是正传,反转就是011.具体大家可以看他的真值表。
还有就是注意设置蓝牙超出范围断开时的操作。别让小车跑飞了啊,哈哈。
HC-06拈未连接蓝牙时有一个指示灯闪烁,也是输出脉冲。配对连接后常亮也就是高电平。然后有一个STATE脚就是从这并联出来的。把这个脚接到89c52的外部中断0脚。设置下降沿有效。
在串口中断函数里开启。如果断开蓝牙,输出脉冲,下降沿低电平就会触发中断,然后在这里设置停车等操作。
y1t8d 多宝平台 http://www.ok888.co/