找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 lxf 于 2020-8-15 17:10 编辑

第49课 HC-06蓝牙小车


目标

1、HC-06蓝牙模块的连接
2、Arduino蓝牙小车程序编写
3、APP Inventor小车控制组件界面和逻辑设计
4、手机APP远程控制小车

实验材料

Arduino UNO开发板
HC-06蓝牙模块
L298N电机驱动板
9V充电锂电池和9V电池扣子
装有两个直流电机马达小车
配套USB数据线
配套杜邦线若干
Arduino IDE软件
APP Inventor软件
手机/平板

微信图片_20200720150538.png
硬件对照图

内容

APP Inventor制作手机APP,控制小车前进、后退、左转、右转、停止。

微信图片_20200720150648.png

当按下向上键时,小车全速前进,按下向下键时,全速后退,按下向左键时,大幅度左转弯,按下右键时,大幅度右转弯,当按下S键时,小车停止,按下B键时小车减速前进,按下D键时,小车减速后退,按下A键时,小车小幅度左转弯,按下C键时,小车小幅度右转弯。

过程一、App 制作:手机连接HC-06 蓝牙模块,蓝牙小车遥控器APP制作。

1、App 组件设计:

32个水平布局
8个垂直布局
一个列表选择框
一个标签,命名为状态显示
九个按钮,分别命名为上、下、左、右、A、B、C、DE
一个蓝牙客户端组件
上传素材,素材下载链接:https://pan.baidu.com/s/1kZVmNJ8ordoJVv4jA85TzA
提取码:wkpv

2、App 逻辑设计:

1)蓝牙连接

图片3.png

2)按钮设置

图片4.png

APP Inventor HC-06蓝牙遥控手机App下载链接:https://pan.baidu.com/s/1kZVmNJ8ordoJVv4jA85TzA
提取码:wkpv

过程二:硬件连接及Arduino IDE程序编写

接线图

图片5.png

备注: L298N电机驱动板的ENA接Arduino UNO4号引脚,ENB接Arduino UNO12号引脚。

接线方式

Arduino UNO     <------>   HC-06蓝牙模块
           5V             <------>           VCC
         GND           <------>           GND
        RX←0          <------>            TXD
        TX→1          <------>            RXD
Arduino UNO     <------>  L298N电机驱动板
           5V             <------>             5V
         GND           <------>             GND
         ENA            <------>               4
          IN1            <------>               5
          IN2            <------>               6
         ENB            <------>              12
         IN3             <------>              10      
         IN4             <------>              11
L298N电机驱动板   <------>    直流减速电机A
       OUT1              <------>        一端接口
       OUT2              <------>      另一端接口
L298N电机驱动板   <------>    直流减速电机B
       OUT3              <------>        一端接口
       OUT4              <------>      另一端接口
9V充电锂电池   <------>    L298N电机驱动板
            正极     <------>              +12V
            负极     <------>              GND

程序实现代码

  1. String item;   //声明一个字符串变量item
  2. void setup(){
  3.   item = "";  //变量item赋值为空
  4.   Serial.begin(9600);  //设置串口波特率为9600
  5. pinMode(4, OUTPUT);   //定义4号引脚为输出
  6. pinMode(5, OUTPUT);   //定义5号引脚为输出
  7. pinMode(6, OUTPUT);   //定义6号引脚为输出
  8. pinMode(10, OUTPUT);  //定义10号引脚为输出
  9. pinMode(11, OUTPUT);  //定义11号引脚为输出
  10. pinMode(12, OUTPUT);  //定义12号引脚为输出
  11. }
  12. void loop(){
  13.   if (Serial.available() > 0) {     //如果串口收到字符数大于零,即串口接收到数据
  14.     item = Serial.readString();   //那么将获取串口接收到的数据赋值给变量item
  15.     if (item == "U") {       //如果接收到的数据是U,那么小车全速前进
  16.       digitalWrite(4,HIGH);
  17.       digitalWrite(5,HIGH);
  18.       digitalWrite(6,LOW);     
  19.       digitalWrite(12,HIGH);
  20.       digitalWrite(10,HIGH);
  21.       digitalWrite(11,LOW);
  22.     }  else if (item == "D") {   //如果接收到的数据是D,那么小车全速后退
  23.       digitalWrite(4,HIGH);
  24.       digitalWrite(5,LOW);
  25.       digitalWrite(6,HIGH);     
  26.       digitalWrite(12,HIGH);
  27.       digitalWrite(10,LOW);
  28.       digitalWrite(11,HIGH);  
  29.     }
  30.     else if (item == "L") {     //如果接收到的数据是L,那么小车大幅度左转弯
  31.       digitalWrite(4,HIGH);
  32.       analogWrite(5,80);
  33.       digitalWrite(6,LOW);
  34.       digitalWrite(12,LOW);
  35.     }
  36.      else if (item == "R") {   //如果接收到的数据是R,那么小车大幅度右转弯
  37.       digitalWrite(4,LOW);
  38.       digitalWrite(12,HIGH);
  39.       analogWrite(10,80);
  40.       analogWrite(11,LOW);
  41.     }
  42.     else if (item == "S") {    //如果接收到的数据是S,那么小车停止
  43.       digitalWrite(4,LOW);
  44.       digitalWrite(12,LOW);  
  45.     }
  46.     else if (item == "Q") {    //如果接收到的数据是Q,那么小车减速前进
  47.       digitalWrite(4,HIGH);
  48.       analogWrite(5,80);
  49.       digitalWrite(6,LOW);
  50.       digitalWrite(12,HIGH);
  51.       analogWrite(10,80);
  52.       digitalWrite(11,LOW);
  53.     }
  54.      else if (item == "T") {     //如果接收到的数据是T,那么小车减速后退
  55.       digitalWrite(4,HIGH);
  56.       digitalWrite(5,LOW);
  57.       analogWrite(6,80);
  58.       digitalWrite(12,HIGH);
  59.       digitalWrite(10,LOW);
  60.       analogWrite(11,80);
  61.     }
  62.     else if (item == "Z") {     //如果接收到的数据是Z,那么小车小幅度左转弯
  63.       digitalWrite(4,HIGH);
  64.       analogWrite(5,80);
  65.       digitalWrite(6,LOW);
  66.       digitalWrite(12,HIGH);
  67.       analogWrite(10,60);
  68.       digitalWrite(11,LOW);
  69.     }
  70.      else if (item == "Y") {    //如果接收到的数据是Y,那么小车小幅度右转弯
  71.       digitalWrite(4,HIGH);
  72.       analogWrite(5,60);
  73.       digitalWrite(6,LOW);
  74.       digitalWrite(12,HIGH);
  75.       analogWrite(10,80);
  76.       digitalWrite(11,LOW);
  77.     }
  78.   }
  79. }
复制代码
分享至 : QQ空间
收藏

0 个回复

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