实现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/

相关文档
最新文档