找了很多单片机和Arduino和蓝牙模块的资料,根据自己已完成的经验简单说明下,希望帮助有理想又能坚持的人做出自己想要玩具。
孩子捡到一个Q7遥控车,用5节5号电池带差速,质量还不错。可没遥控器怎么办,总不能再去捡个吧,我有那么好的运气吗?得,还是自己想办法吧。
早年曾买过一套单片机的资料,带很多零散硬件,于是想用单片机加蓝牙模块连手机,找资料买硬件搭环境,终于成功运行了!30s。。。必死机,换了一套成品单片机最小环境依旧必死。分离电源也尝试了。我觉得可能是电机运行对单片机有影响吧。算了,上第三套方案。
材料:
遥控玩具车,
Arduino nano,
L298n红板,
HC06模块,
手机端用蓝牙串口助手。如果你想高大上一些就用App Inventor 2 WxBit 汉化增强版在线搭个程序吧,后面有详细步骤。呃,就这些了。
开工了!放鞭炮!!!!!!!!!!!!!!!
这个玩具车电压是7.5v的,符合系统供电要求,如果低于5v还要改电源。它有2个电机,后驱+前转向,就是普通5v电机,不是舵机,其实没区别。首先当然是拆开它把他的遥控模块扔掉啦。
然后,电池仓正极接L298n 12v输入,
L298n 5v输出到nano和HC06,
L298n动力输出接2个电机,方向无所谓,代码里能调整,
L298n逻辑输出接nano,注意下后电机,在D3、D5、D6、D9、D10、D11中选2个接上,因为它们支持PWM,没错,这台车能调速哦!所以L298n上的神马使能就不用了;
HC06的TX和RX交叉连接nano的RX和TX,注意,刷写程序时要断开和蓝牙的连接,因为nano的串口和usb是共用的,会冲突导致上传失败;
大灯和倒车灯正极分别串个220Ω电阻接Arduino(当然如果车灯是5v就不用电阻了或者你的玩具没车灯就省掉这一步);
以上除了电机,负极汇在一起接L298n地。
硬件搭建完了,复制粘贴下面代码吧:
//后电机
const int MA01 = 5 ;
const int MA02 = 6 ;
//前电机
const int MB01 = 3 ;
const int MB02 = 4 ;
//定义马达引脚名称
const int Spotlight = 12 ;//大灯
const int Taillight = 13 ;//倒车灯
//定义车灯引脚名称
boolean TaillightState;
void setup() {
Serial.begin(9600);
//定义通讯频率
pinMode(MA01, OUTPUT);
pinMode(MA02, OUTPUT);
pinMode(MB01, OUTPUT);
pinMode(MB02, OUTPUT);
//定义马达引脚模式
pinMode(Spotlight, OUTPUT);
digitalWrite(Spotlight, LOW);
pinMode(Taillight, OUTPUT);
digitalWrite(Taillight, LOW);
}
void loop() {
while (Serial.available())
//循环检测蓝牙输入信息
{
char C = Serial.read();
switch ©
{
//进入循环体,检测蓝牙指令。
//定义前进信号
case’A’:
Serial.println(“go on”);
analogWrite(MA01, 150);//初始半速,最大255,可根据马达体质调整
break;
case’E’:
Serial.println(“go on-stop”);
digitalWrite(MA01, LOW);
break;
//前进
//定义后退信号
case’B’:
Serial.println(“go back”);
analogWrite(MA02, 150);
digitalWrite(Taillight, HIGH);
TaillightState = true ;
break;
case’F’:
Serial.println(“go back-stop”);
digitalWrite(MA02, LOW);
digitalWrite(Taillight, LOW);
TaillightState = false;
break;
//后退
//定义转左信号
case’C’:
Serial.println(“go left”);
digitalWrite(MB02, HIGH);
break;
case’G’:
Serial.println(“go left-stop”);
digitalWrite(MB02, LOW);
break;
//转左
//定义转右信号
case’D’:
Serial.println(“go right”);
digitalWrite(MB01, HIGH);
break;
case’H’:
Serial.println(“go right-stop”);
digitalWrite(MB01, LOW);
break;
//转右
case’T’:
Serial.println(“go tubor”);
analogWrite(MA01, 250);
break;
case’X’:
Serial.println(“go tubor-shop”);
digitalWrite(MA01, LOW);
break;
//定义开关车头大灯
case’L’:
if (digitalRead (Spotlight) == HIGH)
{
Serial.println(“Colse Spotlight”);
digitalWrite(Spotlight, LOW);
}
else if (digitalRead (Spotlight) == LOW)
{
Serial.println(“Open Spotlight”);
digitalWrite(Spotlight, HIGH);
}
break;
//开关车头大灯
default:
break;
}//switch
}//while
}
动下脑筋差不多就能理解代码的意思,需要说明的是,每个信号都有2个按键定义,分别是按下和松开的状态。
现在拿出手机打开蓝牙串口助手,按照代码里的设定自定义按键试试吧。
现在你已经有一台能用手机控制的智障玩具车了,其实还可以添加其他有趣的模比如超声波红外,让它更智能。
下面是我自己搭的app,适合装13,其实是为孩子玩方便,麻烦一点点也值得!
超级兔子是我很喜欢的软件,就用它全速前进啦。
打开这个网址https://app.wxbit.com/,新建个项目,按下图添加组件,图标布局啥的自己弄吧。
切到逻辑设计照下图搭。
生成apk开始炫耀吧!!!
总觉得用Arduino做这么个东东太委屈它了。第二套方案是啥呢?其实是我最先想到的,应该是第一套方案吧。CC2541是集51单片机和低功耗蓝牙为一体的小东东,真的很小,我觉得更适合这种玩具应用,可软件方面感觉复杂些,至少我还要好好的学习一阵,资料也不多,很希望有朋友能带带我。拜托了!