• Arduino智能小车——蓝牙小车  上一章我们完成了小车的运动控制,虽然小车已经可以运动,但是不能远程遥控,不够高大上。在这一篇,我们将尝试用手机蓝牙遥控小车。蓝牙模块  蓝牙( Bluetooth® ):是一种无线...

    Arduino智能小车——蓝牙小车

      上一章我们完成了小车的运动控制,虽然小车已经可以运动,但是不能远程遥控,不够高大上。在这一篇,我们将尝试用手机蓝牙遥控小车。

    蓝牙模块

      蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。

      我们在此使用的蓝牙模块(HC-05)已经在内部实现了蓝牙协议,不用我们再去自己开发调试协议。这类模块一般都是借助于串口协议通信,因此我们只需借助串口将我们需要发送的数据发送给蓝牙模块,蓝牙模块会自动将数据通过蓝牙协议发送给配对好的蓝牙设备。

    SouthEast

    串口通信

      由于要借助串口实现蓝牙通信功能,所以我们在此要先了解下Arduino的串口通信。

      Arduino UNO开发板上的串口为0->RX,1->TX,在开发板内部也已经配置好了串口的功能,我们只需调用函数借口即可。以下列出串口通信里面常用的函数,并加以简单解释,详细用法可在用到时自行查询。

    开启串行通信接口并设置通信波特率

    Serial.begin(speed); 
    

    关闭串口通信

    Serial.end();    
    

    判断串口缓冲器是否有数据写入

    Serial.available();
    

    读取串口数据

    Serial.read();    
    

    返回下一字节(字符)输入数据,但不删除它

    Serial.peek();   
    

    清空串口缓存

    Serial.flush();    
    

    写入字符串数据到串口

    Serial.print();    
    

    写入字符串数据+换行到串口

    Serial.println(); 
    

    写入二进制数据到串口

    Serial.write();     
    

    read时触发的事件函数

    Serial.SerialEvent();
    

    读取固定长度的二进制流

    Serial.readBytes(buffer,length);
    

    打印接到数据十进制表示的ascii码

    Serial.println(incomingByte, DEC);
    

    蓝牙模块连接

    SouthEast

    TX: 接Arduino UNO开发板"RX"引脚
    RX: 接Arduino UNO开发板"TX"引脚
    GND: 接Arduino UNO开发板"GND"引脚
    VCC: 接Arduino UNO开发板"5V"或"3.3V"引脚

    SouthEast

    手机蓝牙助手

      想实现手机蓝牙遥控小车,手机APP是必不可少的,目前网上有很多蓝牙串口助手,省去了我们自己写APP的时间,当然如果朋友你有能力或者想自己DIY的话也可以尝试自己写APP,在这里我推荐大家用这款手机蓝牙助手(百度上搜手机蓝牙串口助手就可以搜到,挺好用的)

    SouthEast
      如果不想自己去找的话可以到我的百度网盘下载 [点击这里下载](http://pan.baidu.com/s/1pKClRTL)

      下载并安装后打开APP,在这里可能会提示你有新版本请求更新,建议点击以后再说(暂时不更新),以我的经验,一般点击立即更新都会更新失败。

    SouthEast
      进入主界面,左上角会提示"蓝牙未连接",这个时候我们可以先对蓝牙助手的界面进行自定义设置。点击右下角的三个点(在我这里是这样的,其他手机可能不同,如果没有这三个点可以试着点击手机的功能键),选择“更多”。
    SouthEast
      然后选择“地面站设置”进入自定义界面,往下拖动,找到“自定义按键[x]”,在此我们对按键[1][2][3][4][6]进行自定义设置。
    SouthEast
    **  点击自定义按键[1],将其“显示名称”属性改为“停止”,“点击发送”属性改为“00”,并点击“确定”保存**
    SouthEast
    同理更改其他按键:

    点击自定义按键[2],将其“显示名称”属性改为“前进”,“点击发送”属性改为“01”,并点击“确定”保存
    点击自定义按键[4],将其“显示名称”属性改为“左转”,“点击发送”属性改为“03”,并点击“确定”保存
    点击自定义按键[5],将其“显示名称”属性改为“后退”,“点击发送”属性改为“02”,并点击“确定”保存
    点击自定义按键[6],将其“显示名称”属性改为“右转”,“点击发送”属性改为“04”,并点击“确定”保存

      以上修改的属性值即为我们点击对应按键之后,蓝牙串口助手自动通过蓝牙发送的数据,与上一篇所定义的小车的几个状态一致,这样方便在Arduino在接收到蓝牙模块的数据后对小车的状态进行控制。

    #define STOP      0
    #define FORWARD   1
    #define BACKWARD  2
    #define TURNLEFT  3
    #define TURNRIGHT 4
    

    修改后属性如下图

    SouthEast

    下面就来看看我们修改的效果吧,点击“模式切换”

    SouthEast
    这时候你就可以看到我们自定义的按键咯,看看修改前后的对比吧。
    SouthEastSouthEast
      接下来我们将连接蓝牙,仍然点击右下角的三个点,然后点击“连接”
    SouthEast
      一般没有连接过蓝牙模块的时候“已配对的设备”下面没有可选择的设备名称,因此我们要点击“扫描新设备”来检测我们的蓝牙模块,扫描成功后蓝牙模块的名称将显示在“已配对的设备”一栏中
    SouthEast
      点击我们的蓝牙模块的名称,输入密码进行配对。配对成功后在蓝牙串口助手的左上角会显示“蓝牙已连接”字样,恭喜你,这时候你已经连接成功。
    SouthEast

    小科普:
      蓝牙模块上电(只简单连接"VCC"和"GND"引脚)之后,其他蓝牙设备即可与其连接,一般蓝牙模块默认初始连接密码为"0000"或"1234",如果连接不上蓝牙,请尽快与厂商或者店家联系。蓝牙模块上电后LED指示灯不断闪亮,当有设备连接预期连接之后会隔一段闪两下,蓝牙串口助手也会有相应已连接的提示。

    ##Arduino代码编写
    新建一个工程,将下面代码复制到工程内

    #define STOP      0
    #define FORWARD   1
    #define BACKWARD  2
    #define TURNLEFT  3
    #define TURNRIGHT 4
    
    int leftMotor1 = 4;
    int leftMotor2 = 5;
    int rightMotor1 = 6;
    int rightMotor2 = 7;
    
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      pinMode(leftMotor1, OUTPUT);
      pinMode(leftMotor2, OUTPUT);
      pinMode(rightMotor1, OUTPUT);
      pinMode(rightMotor2, OUTPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      //usart read
      if(Serial.available()>0)
      {
        char cmd = Serial.read();//读取蓝牙模块发送到串口的数据
      
        Serial.print(cmd);
        motorRun(cmd);
          
      }  
    }
    void motorRun(int cmd)
    {
      switch(cmd){
        case FORWARD:
          Serial.println("FORWARD"); //输出状态
          digitalWrite(leftMotor1, HIGH);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, HIGH);
          digitalWrite(rightMotor2, LOW);
          break;
         case BACKWARD:
          Serial.println("BACKWARD"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, HIGH);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, HIGH);
          break;
         case TURNLEFT:
          Serial.println("TURN  LEFT"); //输出状态
          digitalWrite(leftMotor1, HIGH);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, HIGH);
          break;
         case TURNRIGHT:
          Serial.println("TURN  RIGHT"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, HIGH);
          digitalWrite(rightMotor1, HIGH);
          digitalWrite(rightMotor2, LOW);
          break;
         default:
          Serial.println("STOP"); //输出状态
          digitalWrite(leftMotor1, LOW);
          digitalWrite(leftMotor2, LOW);
          digitalWrite(rightMotor1, LOW);
          digitalWrite(rightMotor2, LOW);
      }
    }
    

      朋友们大概也发现了,这个代码和上一篇的代码基本上相同,只不过增加了串口的内容。

    ##代码详解
      串口初始化函数,想要通过串口的库函数对串口进行操作,必须在void set_up()函数中对其进行初始化。

    Serial.begin(9600);
    

      在void loop()函数内,加入了检测串口接收内容的函数,并将接收到的命令输入到 void motorRun(int cmd)函数中控制小车运动。

    if(Serial.available()>0)
      {
        char cmd = Serial.read();
      
        Serial.print(cmd);
        motorRun(cmd);
      }  
    

    蓝牙小车测试

      下载程序之后,重新连接蓝牙模块,切换到我们自定义的按键界面,快试试蓝牙遥控小车吧。

    附件

    安卓手机蓝牙串口点击下载,也可以复制链接 https://download.csdn.net/download/qq_16775293/11165678 到浏览器下载。

    欢迎各位有兴趣的朋友加入Q群1:789127261点评、交流

    展开全文
  • arduino教程-13. 蓝牙

    2019-04-11 16:53:16
    智能移动设备和Arduino微电脑,两者相辅相成,可各自发挥所长。例如,用手机当成Arduino的显示器或输入设备,Arduino当做手机的硬件扩展口,控制灯光和自走车,或者返回温湿度传感器的数据给手机。 电波、频段和无线...


    智能移动设备和Arduino微电脑,两者相辅相成,可各自发挥所长。例如,用手机当成Arduino的显示器或输入设备,Arduino当做手机的硬件扩展口,控制灯光和自走车,或者返回温湿度传感器的数据给手机。

    13.1 电波、频段和无线传输简介

    利用电波或红外线来传输数据。可见光、红外线和电波都是一种电磁波,并非所有的频段和无线电设备都需要使用执照,世界各国都有保留某些给工业(industrial)、科学研究(Scientific)和医疗(Medical)方面的频段,简称ISM频段,2.4GHZ是世界各国共同的ISM频段,因此市面上许多无线通信产品都采用2.4GHZ。
    NFC是一种采用电磁波,用于1~2米内的短距离无线通信技术,全名是Near Field Communicatin(进场通信,或近距离无线通信)。在联机范围内的两台机器要相连时,只要在屏幕上点选是否接收另一方的联机即可。

    13.2 认识蓝牙(Bluetooth)

    蓝牙是一种近距离无线数据和语音传输技术,主要用于取代线材和红外线传输。蓝牙主要用于无线耳机和数据传输,蓝牙技术联盟(Bluetooth Special Interest Group,简称SIG),定义了多种蓝牙规范(Profile,或译为“协议”):

    • HID:制定鼠标、键盘和游戏杆等人机接口设备(human interface device)所要遵循的规范。
    • HFP: 泛指用于行动设备,支持语音拨号和重拨等功能的免提听筒设备
    • A2DP: 可传输16位、44.1kHZ取样频率的高质量立体声音乐,主要用于随身听和影音设备。
    • SPP:用于取代有线串口的蓝牙设备规范。Bluetooth 2.1 + EDR代表“加强资料传输率(Enhanced Data Rate)

    动手做13-1 使用软件串口程序连接Arduino与蓝牙模块

    **实验说明:**在电脑上通过蓝牙与Arduino板联机,控制端口13上的LED。
    蓝牙模块通过串口和Arduino板联机,不过,Arduino的程序和“串口监控窗口”也是通过串口传输。Arduino微电脑板默认只有一个串口(简称“系统串口”),应保留给串口监控窗口使用,本单元将通过SoftwareSerial(软件串口)扩展库,把其他端口变成串口给蓝牙模块使用。
    **实验电路:**数字0和1是Arduino自带的串口端口,我们可以连接蓝牙模块。蓝牙模块的发送端(Tx)接Arduino的接收端(Rx),这种方式会占用系统串口,应该避免使用。
    实验程序: Arduino软件自带的SoftwareSerial扩展库,能让我们指定任意两个端口充当串口

    //蓝牙模块其实就是无线串口,程序写法和有线的串口相同。
    #include <SoftwareSerial.h>
    SoftwareSerial BT(10, 9);  //自定义SoftwareSerial类型对象,参数(接收端,发送端)
    const byte ledPin = 13;
    char val;
    void setup() {
      pinMode(ledPin, OUTPUT); //
      /*初始化串口,请依照你的蓝牙模块设置联机速率,笔者的模块采用9600bps速率联机。*/
      BT.begin(9600);
      BT.print("BT is ready!"); //
    }
    
    void loop() {
      if (BT.available()) {
        val = BT.read();
        switch (val) {
          case '0':
            digitalWrite(ledPin, LOW);
            break;
          case '1':
            digitalWrite(ledPin, HIGH);
            break;
        }
      }
    }
    

    动手做14-2 用Android手机蓝牙遥控机器人

    **实验说明:本单元的遥控机器采用Android手机蓝牙控制,架构图如下:
    控制原理是从手机蓝牙传递字符给机器人,机器人的微电脑将依照收到的’w’、'a’等字符,执行前进和转弯等动作。
    实验材料:
    具备蓝牙的Android智能手机、采用两个碳刷电机的模型动力玩具、L298N电机模块、蓝牙接口模块、电池盒

    展开全文
  • 实验器材:Arduino Pro Mini,JDY-08蓝牙4.0模块,USB-TTL串口由于Arduino下载程序的波特率为57600,所以蓝牙模块的波特率先要设置成57600。两个4.0蓝牙之间透传,要设置主从透传模式从机透传(APP)模式 AT+HOSTEN...

    实验器材:Arduino Pro Mini,JDY-08蓝牙4.0模块,USB-TTL串口

    由于Arduino下载程序的波特率为57600,所以蓝牙模块的波特率先要设置成57600。

    两个4.0蓝牙之间透传,要设置主从透传模式


    从机透传(APP)模式     AT+HOSTEN0
    获取MAC地址                 AT+MAC


    主机透传模式                  AT+HOSTEN1
    绑定从机MAC地址          AT+BAND587A6226C8A1
                                                           0CB2B73E8F7D


    给arduino下载程序,两个蓝牙要设置波特率为57600
                                          AT+BOUD1
                                                           0——115200
                                                           1——57600
                                                           2——38400
                                                           3——19200
                                                           4——9600

                                                           默认值: 0

    如果取消绑定                  AT+CLRBAND

    展开全文
  • 半小时搞定Arduino环境(含蓝牙模块与Android通讯)

    1.    我的硬件

    Arduino UNO R3,蓝牙模块,电脑(ubuntu 12.04),手机(Android)

    2.    下载软件

    由于用apt-get在ubuntu中安装的arduino软件可能版本过低,没有相应硬件对应的设置,所以请在arduino网站下载最新软件
    http://arduino.cc/en/Main/Software#.UyfR0ZFGeBs

    3.    电脑连接arduino

    连好线,打开arduino软件
    设置:菜单->Tools->Board->Arduino Uno
    设置:菜单->Tools->Serial port->/dev/ttyACM0

    4.    调试简单程序

    写界面中输入程序
    void setup() { // put your setup code here, to run once:
            Serial.begin(9600);
    }
    void loop() {
      // put your main code here, to run repeatedly:    
      Serial.println("hello");
    }
    点工具栏上的对勾:开始编译
    点工具栏上右键头:把程序安装到开发板
    点工具栏右上角的放大镜:看到程序执行后的打印信息

    5.    通过蓝牙连接手机和Arduino

    a)    接线
    VCC:接Arduino的5V
    GND:接Arduino的GND
    TXD:发送端,一般表示为自己的发送端,接Arduino的RX
    RXD:接收端,一般表示为自己的接收端,接Arduino的TX。
     
    b)    写Arduino端程序
    void setup()
    {
    Serial.begin(9600);
    }

    void loop()
    {
      while(Serial.available())
       {
         char c=Serial.read();
          if(c=='A')
            {
              Serial.println("Hello I am amarino");
            }
       }
    }
    把程序安装到Ardunio开发板时,请先断开蓝牙模块,因为它们的数据都走串口,会引起冲突造成安装失败。
    c)    手机安装对应软件
    http://amarino.googlecode.com/files/Amarino_2_v0_55.apk
    在手机设置中打开蓝牙,然后点击应用左下角的Add BT Device,选定自己的蓝牙模块,密码为1234,连接后点击右下边的Monitoring,点Send即可。
    d)    参考文档
    http://www.bhubbs.com/thread-1055-1-1.html


    展开全文
  • 有时候需要蓝牙串口SPP提供无线通信方式进行机器人或者物联网硬件的控制。 掌握此部分内容需要先阅读下列参考文献: arduino bluetooth and ubuntu linux:https://forum.arduino.cc/index.php?topic=24680.0 ...

    ROS1 Melodic(kinetic)和ROS2 Dashing通用。

    有时候需要蓝牙串口SPP提供无线通信方式进行机器人或者物联网硬件的控制。

    掌握此部分内容需要先阅读下列参考文献:

    1. arduino bluetooth and ubuntu linuxhttps://forum.arduino.cc/index.php?topic=24680.0
    2. How to setup serial communication in Processing to /dev/rfcomm0https://stackoverflow.com/questions/15464475/how-to-setup-serial-communication-in-processing-to-dev-rfcomm0

    3. How to ROS messages via bluetooth? (arduino):https://answers.ros.org/question/228869/how-to-ros-messages-via-bluetooth-arduino/

    4. error connection rosserial via bluetooth arduino notebook:https://answers.ros.org/question/169366/error-connection-rosserial-via-bluetooth-arduino-notebook/

    5. connect two separate computers using bluetooth:https://answers.ros.org/question/11877/connect-two-separate-computers-using-bluetooth/

    理解之后,配置正确即可。

    BT04-A
    rosserial

    AD口采集信息如下:

    AD~1
    AD~2

    同样适用于ROS2Dashing^_^


     

    展开全文
  • Unity 实现蓝牙通信 1.话不多说上效果,目前开发的是Android版本的蓝牙和带蓝牙电子设备连接,下图展示的蓝牙控制机器小车运动,由于上传完整视频会比较玛法,所以选择截屏展示,望大家见谅。 2.首先导入一个...
  • 接线方法 先上代码 #define AT 2 #define LED 13 void setup() { pinMode(LED,OUTPUT); pinMode(AT,OUTPUT); digitalWrite(AT,HIGH); Serial.begin(38400);//这里应该和你的模块通信波特率一致 delay(10...
  • 树莓派和arduino蓝牙通信 树莓派上使用pybluez蓝牙模块 树莓派上使用蓝牙通信模块来进行通信 pybluez的安装 使用pip工具安装,python2 使用 sudo pip install pybluez 进行安装,python版本使用 sudo pip3 ...
  • 基于arduino 和 app inverter制作蓝牙开关 (方案二) 链接:https://blog.csdn.net/m0_37738838/article/details/85164468
  • 我买了个蓝牙适配器和机器人上的蓝牙进行了连接,蓝牙配对成功后 有两个串口, 然后我尝试通过c#的SerialPorts和机器人连接,但失败了,两个都试了了下,报的错误是没找到。求解决方法 这是我的代码 ![图片说明]...
  • 最近在做一个农业机器人的项目,上位机采用的是树莓派3B,下位机采用的是Arduino Mega,一开始用的UDP协议进行数据交换,后来发现UDP传输数据不是很稳定,就决定使用串口通讯,由于树莓派3B集成了蓝牙模块,所以一切...
  • 制作需要:用AppInventor制作App,小车硬件以Arduino Nano为主控板,接蓝牙模块,超声波模块,两个直流电机。 功能:用手机App控制小车前进,后退,左转,右转,自动避障,并且可以通过滑动条调速。(其中自动巡线...
  • 由于自己用Arduino板做小车,由于设计要求需要让两个板子进行蓝牙通讯,在网上找了好多教程,但是由于本人太笨还是做了好久才做出来。这里给大家说一下我进过的坑,对于其他网上能找到的信息我就不再赘述了。 首先...
  • 蓝牙控制arduino的安卓软件(基于app inventor )
  • 在本教程中,您将学习如何将ESP32蓝牙经典版与Arduino IDE结合使用,以在ESP32和Android智能手机之间交换数据。 我们将控制ESP32输出,并使用Bluetooth Classic将传感器读数发送到Android智能手机。 更多了解:ESP32...
  • Arduino】开发入门【十】蓝牙模块  首先show一下新入手的蓝牙模块    【淘宝】【HC-06蓝牙模块】 【淘宝】【辉盛MG995 55G金属铜齿轮舵机】 【淘宝】【Arduino入门套件 Arduino UNO R3】 ...
  • Arduino+HC-05蓝牙模块AT模式设置一. HC-05引脚说明 STATE:蓝牙连接状态指示,连接成功此引脚为高电平,没有连接则为低电平 RX:接收端 TX:发送端 GND:接地端 +5V:5V电源输入端 EN:使能端,需要进入AT模式时接3.3V。其实...
  • 遥控小车是每个人童年的最爱,不仅好奇它的奇妙,更是喜欢它...本文为基于arduino的手机蓝牙遥控小车 基于arduino的手机蓝牙遥控小车 基于arduino的红外遥控小车 基于arduino的无线NRF24L01遥控小车 基于ardu...
  • 实验目的:用Android实现蓝牙连接通过Arduino串口输出信息 这次使用的是蓝牙HC-06从模块,就是从机模块,这都因为买之前没有问清楚什么叫从什么叫住。 所以在这解释一下,如有错误请指正。谢谢 HC-05是主...
  • ---- 电路连接 ---- HC-06 Arduino Uno R3 引脚 TX 2 RX 3 VCC +5v GND GND 注意:须使用分压电路,确保HC-06 RX信号电压为3.3伏特。 ---- 接线图---- ---- AT指令 ---- 指令 ...
1 2 3 4 5 ... 20
收藏数 2,827
精华内容 1,130