找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5152|回复: 7
打印 上一主题 下一主题
收起左侧

迷你蓝牙小坦克

[复制链接]
跳转到指定楼层
楼主
ID:102668 发表于 2016-1-11 03:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个很精致的小坦克(转自电子牛人小七)



炮塔是可以旋转的哦

前面还有小机枪:哒哒哒。。。一扫一大片,嘿嘿。还有个小钢铲,估计开坦克的那家伙开到哪,就在哪儿种菜。

除了铲子,还有很多工具,做工都很精致
盖子还可以打开哦

上面的图看不出有多大?那跟打火机做个对比吧

坦克是履带带动的,最左边的那个是主动轮,是马达驱动的,最右边的是从动轮,中间的那些小轮应该叫承重轮吧,不是很清楚这些叫法。是不是觉得这么小了还做得那么精致很难得?更难得的是:这些轮子全部都可以转动




履带细节

拆开炮塔,里面有个黑色的塑料罩子


拿开它




拆开了

看懂了一堆三极管组成的H桥,用于驱动小电机的


好古董的电池。。。不知道这个小坦克是不是也是2002年产的



动力来源,两个小电机,分别驱动左边和右边的主动轮,带动履带来让坦克行走。

当两边都正转的时候,坦克就前进
当左边正转,右边反转时,坦克就原地右转
当左边反转,右边正转时,坦克就原地左转
当两边都反转的时候,坦克就后退



把所有的电路都拆下来,准备改造它


  由于驱动电机需要用到H桥,而我们手头上只有L298,这玩意儿太大,塞进去就没空间放其他东西了,所以专门找了 L9110 这个小芯片。。。

热转印,准备做电路板,除了坦克所需的PCB外,还做了些其他的东西。。。






焊上 贴片的 STC11F102E 和 11.0592MHZ晶振,以及两个 L9110 来驱动电机
一个L9110 可以控制电机的正转或者反转

蓝牙模块需要3.3V的电压,所以要做一个3.3V稳压电路给它

装在这里刚刚好  





尾部装上小开关,在不用的时候可以断掉电源


把蓝牙模块接上


在这期间对电路的接线改了一下,所以和上面的相比会有些变化,这个接口是用来充电和下载程序的。对了,那块黑黑的电池原来是 palm 手机的,单独用来给小电机供电。


装上外壳,准备收工了


尾部原来充电的地方改成了指示灯


来一个帅气的侧面照
虽然它各种霸气外漏,但归根到底还是一个死物,所以我们要用程序让它动起来



首先是 drive.h 头文件,声明了几个接口,分别是左转,右转,前进,后退。具体由drive.c来实现相应的功能。

#ifndef __DRIVE_H__
#define __DRIVE_H__

void Left();
void Right();
void Forward();
void Backward();
void Stop();

#endif
然后是 drive.c,里面负责控制相应的电路,来实现小电机的转向,从而实现小坦克的左右转,前后退等

#include <reg52.h>
#include "drive.h"

sbit L_A = P1^7;
sbit L_B = P1^6;
sbit R_A = P1^5;
sbit R_B = P1^4;

void Left()
{
    L_A = 1;
    L_B = 0;

    R_A = 0;
    R_B = 1;
}

void Right()
{
    L_A = 0;
    L_B = 1;

    R_A = 1;
    R_B = 0;
}


void Forward()
{
    L_A = 1;
    L_B = 0;

    R_A = 1;
    R_B = 0;   
}

void Backward()
{
    L_A = 0;
    L_B = 1;

    R_A = 0;
    R_B = 1;   
}

void Stop()
{
    L_A = 0;
    L_B = 0;

    R_A = 0;
    R_B = 0;   
}
最后是 main.c 也就是主模块。

#include<reg51.h>
#include "drive.h"

sfr P1M1 = 0x91;    //这两个是让P1口设置为推挽输出
sfr P1M0 = 0x92;               

sbit L_A = P1^7;      //定义L9110所接的引脚,关于L9110的详细驱动方式见其PDF(其实跟L298差不多)
sbit L_B = P1^6;
sbit R_A = P1^5;
sbit R_B = P1^4;
sbit led_pin = P3^5;   //定义led所接的引脚

unsigned char cmd;    //全局变量,用于存放蓝牙传过来的命令

void led() interrupt 1   //led闪烁函数,由定时器T0产生中断,大约1.5秒闪烁一下
{
    unsigned char i;
    i++;
    if(i==15)
    {
        led_pin = !led_pin;
        i=0;
    }
    TH0 = (65536-50000)/256;
    TL0 = (65536-50000)%256;
}

void com() interrupt 4    //串口中断函数,当蓝牙传命令过来的时候执行
{
    RI  = 0;
    cmd = SBUF;       //把收到的命令放到全局变量里面
}

void com_init()    //串口初始化函数,波特率9600bps
{
    TMOD = 0x00;
    TMOD = 0x21;
    TH1  = 0xfd;
    TL1  = 0xfd;
    TR1  = 1;

    REN  = 1;
    SM0  = 0;
    SM1  = 1;
    EA   = 1;
    ES   = 1;
}

void led_init()    //定时器0初始化函数,用于led闪烁
{

    TH0  = (65536-50000)/256;
    TL0  = (65536-50000)%256;
    ET0  = 1;
    TR0  = 1;
}

void main()    //主函数
{
P1M1 = 0x00;    //设置P1口为推挽输出模式
P1M0 = 0xff;
com_init();    //串口初始化
led_init();    //led闪烁定时器初始化


    while(1)       //死循环,等待蓝牙传命令过来
    {
    switch(cmd)    //判断收到的命令是干嘛的,其中 1 是前进 2是后退 3是右转 4是左转,0是停止,以后还可以扩展其他的功能
        {
        case 1:Forward();break;        //前进
        case 2:Backward();break;    //后退
        case 3:Right();break;        //右转
        case 4:Left();break;        //左转
        case 0:Stop();break;        //停止
        }
    }
}

程序写完后在keil 里编译一下,然后下载到单片机就OK了。

我的手机是安卓的,所以用蓝牙连接我们的小坦克,通过蓝牙给它发送 1、2、3、4 小坦克就会执行相应的命令了

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:58106 发表于 2016-1-11 08:00 | 只看该作者
楼主V5  顶一个!
回复

使用道具 举报

板凳
ID:103242 发表于 2016-1-14 18:54 | 只看该作者
大哥····这是我的帖子啊····你搬过来也不写转载??
回复

使用道具 举报

地板
ID:72781 发表于 2016-1-16 00:57 | 只看该作者
mhy137701272 发表于 2016-1-14 18:54
大哥····这是我的帖子啊····你搬过来也不写转载??

可是明明你一个帖子都没发过啊?你在那个论坛发的贴?
回复

使用道具 举报

5#
ID:102668 发表于 2016-1-16 04:06 | 只看该作者
mhy137701272 发表于 2016-1-14 18:54
大哥····这是我的帖子啊····你搬过来也不写转载??

原来您就是作者啊,佩服 佩服,已经注明了。
回复

使用道具 举报

6#
ID:103810 发表于 2016-1-19 19:35 | 只看该作者
有视频就好了
回复

使用道具 举报

7#
ID:130345 发表于 2017-8-31 10:33 | 只看该作者
很强啊
回复

使用道具 举报

8#
ID:230223 发表于 2017-8-31 14:28 | 只看该作者
很好        
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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