2017-10-07 11:50:42 changer_WE 阅读数 5755
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    725 人正在学习 去看看 王全

本人比较懒,纯文本

首先材料,L298N,步进电机,杜邦线,HC-05蓝牙模块,arduino模块

制作智能小车的连线部分网上都有,

这里只说蓝牙部分,首先你要依照网上所说的把hc-05进入AT调成从模式,别的随意

然后就是arduino与蓝牙模块的连接:5v---5v ,GND----GND,tx---rx,rx---tx

然后就是代码了:

#define IN1 2
#define IN2 4
#define IN3 5
#define IN4 7
#define ENA 3
#define ENB 6
#define TURNSPEED 100
#define RUNSPEED 60
void go_forward();
void turn_left();
void turn_right();
void go_back();
void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  Serial.begin(9600); 
  Serial.println("BT is ready!");
}
  int val;
void loop() {
  if (Serial.available()) {
  val = Serial.read();
  switch(val){
  case '0':
  stop_s();delay(100);break;
  case '1':
  go_forward(RUNSPEED,RUNSPEED);delay(100);break;
  case '2':
  turn_left(TURNSPEED,TURNSPEED);delay(100);break;
  case '3':
  go_back(RUNSPEED,RUNSPEED);delay(100);break;
  case '4':
  turn_right(TURNSPEED,TURNSPEED);delay(100);break;
  default:
  Serial.println("error");delay(100);break;
           }
    }
}
void stop_s(){
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,LOW);    
  }
void go_forward(int L,int R){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
  analogWrite(ENA, L);//control speed
  analogWrite(ENB, R);//control speed
}
//the connection of my L298N is wrong
//IN1,IN2 is right,IN3,IN4 is left;
void turn_left(int L,int R){
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
  analogWrite(ENA, L);
  analogWrite(ENB, R);
}
void turn_right(int L,int R){
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
  analogWrite(ENA, L);
  analogWrite(ENB, R);
}
void go_back(int L,int R){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
  analogWrite(ENA, L);
  analogWrite(ENB, R);
}



手机上下载蓝牙串口spp,键盘的界面进行设置信号输入到arduino的信号按钮,呵呵

在我尝试的过程中发现使用使用if语句达不到效果必须要使用case语句。

还有我的电机的连线是反的,IN1和IN2控制的是右边的电机。

最后感谢贴吧和CSDN的大佬们,也希望这篇文章对小伙伴们也有所帮助。




 

 

 

2019-01-18 18:04:17 xiang_123_ 阅读数 1948
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    725 人正在学习 去看看 王全

一、蓝牙模块与Arduino
主要分两步,第一步设置蓝牙模块(AT模式),如,设置成从动任何设备可连接,设置名称及密码等;第二步,编写相应的控制程序;
HC05(ZS-040)蓝牙模块与手机连接参考链接参考1

蓝牙模块AT设置相关参考3

蓝牙模块与手机进行通信参考2

以上几个参考链接,即可完成用手机蓝牙与arduino的通信,并控制对应舵机与led灯; (未在ubuntu上运行,待后续。。)

2019-01-26 12:53:51 weixin_44607444 阅读数 1866
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    725 人正在学习 去看看 王全

Arduino连接TGAM(蓝牙脑波模块)

因为从淘宝上购买以后,很多网店都没有与Arduino连接的代码,经历千辛万苦终于找到了官网的一段与Arduino通讯的代码。下面把资料以及连接附在这里,供大家学习。
这里附上官网链接:http://developer.neurosky.com/docs/doku.php?id=mindwave_mobile_and_arduino

百度网盘链接:https://pan.baidu.com/s/18fkeSE6d1n24q9dkD6HQAQ
提取码:ijdo
在这里插入图片描述

Arduino代码说明

TGAM套件自带一个蓝牙,我们需要在Arduino板上再接一个蓝牙。两个蓝牙之间相互通讯。即设置两个蓝牙,一个为主机,一个为从机。

这里需要注意:主机和从机之间可以互发数据。最主要的区别在于,蓝牙主机是主动搜索,而蓝牙从机只能被动连接。

在这里插入图片描述

连接图

在这里插入图片描述
在这里插入图片描述
Arudino代码

////////////////////////////////////////////////////////////////////////
// Arduino Bluetooth Interface with Mindwave
// 
// This is example code provided by NeuroSky, Inc. and is provided
// license free.
////////////////////////////////////////////////////////////////////////

#define LED 13
#define BAUDRATE 57600
#define DEBUGOUTPUT 0
// checksum variables
byte generatedChecksum = 0;
byte checksum = 0; 
int payloadLength = 0;
byte payloadData[64] = {0};
byte poorQuality = 0;
byte attention = 0;
byte meditation = 0;
int raw=0;
// system variables
long lastReceivedPacket = 0;
boolean bigPacket = false;

//////////////////////////
// Microprocessor Setup //
//////////////////////////
void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(BAUDRATE);           // USB

}

////////////////////////////////
// Read data from Serial UART //
////////////////////////////////
byte ReadOneByte() {
  int ByteRead;
  while(!Serial.available());
    digitalWrite(13,HIGH);
  ByteRead = Serial.read();
  return ByteRead;
}

/////////////
//MAIN LOOP//
/////////////
void loop() {


  // Look for sync bytes
  if(ReadOneByte() == 170) {
    if(ReadOneByte() == 170) {

      payloadLength = ReadOneByte();
      if(payloadLength > 169)                      //Payload length can not be greater than 169
          return;

      generatedChecksum = 0;        
      for(int i = 0; i < payloadLength; i++) {  
        payloadData[i] = ReadOneByte();            //Read payload into memory
        generatedChecksum += payloadData[i];
      }   

      checksum = ReadOneByte();                      //Read checksum byte from stream      
      generatedChecksum = 255 - generatedChecksum;   //Take one's compliment of generated checksum

        if(checksum == generatedChecksum) {    

        poorQuality = 200;
        attention = 0;
        meditation = 0;

        for(int i = 0; i < payloadLength; i++) {    // Parse the payload
          switch (payloadData[i]) {
          case 2:
            i++;            
            poorQuality = payloadData[i];
            bigPacket = true;            
            break;
          case 4:
            i++;
            attention = payloadData[i];                        
            break;
          case 5:
            i++;
            meditation = payloadData[i];
            break;
          case 0x80:
            i = i + 3;
           raw=payloadData[i-1]*256+payloadData[i];
           if(raw>=32768)
           raw=raw-65536;
            break;
          case 0x83:
            i = i + 25;      
            break;
          default:
            break;
          } // switch
        } // for loop

#if !DEBUGOUTPUT

        // *** Add your code here ***

        if(bigPacket) {
          if(poorQuality == 0)
            digitalWrite(LED, HIGH);
          else
            digitalWrite(LED, LOW);
          Serial.print("PoorQuality: ");
          Serial.print(poorQuality, DEC);
          Serial.print(" Attention: ");
          Serial.print(attention, DEC);
          Serial.print(" raw ");
          Serial.print(raw);
          Serial.print(" Time since last packet: ");
          Serial.print(millis() - lastReceivedPacket, DEC);
          lastReceivedPacket = millis();
          Serial.print(" Att: ");
          int att=Serial.print(attention,DEC);
          Serial.print("\n");

          switch(attention / 10) {
          case 0:
      digitalWrite(LED, HIGH);        
            break;
          case 1:
        digitalWrite(LED, HIGH);
            break;
          case 2:
           digitalWrite(LED, HIGH);
            break;
          case 3:              
            digitalWrite(LED, HIGH);       
            break;
          case 4:
         digitalWrite(LED, HIGH);           
            break;
          case 5:
     digitalWrite(LED, HIGH);           
            break;
          case 6:              
        digitalWrite(LED, HIGH);       
            break;
          case 7:
        digitalWrite(LED, HIGH);        
            break;    
          case 8:
     digitalWrite(LED, HIGH);
            break;
          case 9:
            digitalWrite(LED, HIGH);
            break;
          case 10:
            
            digitalWrite(LED, HIGH);
            break;           
          }  
          Serial.flush();                   
        }
#endif        
        bigPacket = false;        
      }
      else {
        
           }  
           Serial.flush();
    } 
  } 
}


这里从Arduino串口读取到专注度。从而可以还控制LED灯的开关,还有小车的运动。

关于蓝牙主从机的连接我会稍后发。

2017-09-18 10:32:16 weixin_37272286 阅读数 46340
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    725 人正在学习 去看看 王全

通过本文,可以了解到以下内容:

  • 进入 AT 模式进行蓝牙基本参数设置
  • Arduino 蓝牙控制 LED 电路设计以及代码编写
  • 利用 Andorid 蓝牙串口调试软件测试功能

进入 At 模式进行蓝牙基本参数设置

想要使用 Arduino 的蓝牙模块,首先要对蓝牙模块进行基本参数设置。基本参数设置主要包含:蓝牙名称、模式以及匹配密码等。设置蓝牙模块可以使用 USB-TTL 连接电脑使用串口调试软件进入 AT 模式进行设置,也可以使用 Arduino 连接蓝牙模块进行设置,本文主要介绍后一种方法。

注意事项

在连接蓝牙的时候,要注意线的连接是否正确,检查清楚再进行通电,除此之外,还要主要不要让针脚短路,我在首次使用蓝牙模块的时候,因为没注意接线,导致一个蓝牙模块损坏了,只能发信息不能收信息,所以为了避免不必要的损失,这里要注意。

Arduino HC05 AT模式接线

进入 AT 模式设置蓝牙的接线如下:
Arduino 5V - VCC
Arduino GND - GND
Arduino Pin10 - TXD
Arduino Pin11 - RXD
在通电前检查接线是否正确连接
hc05_at_mode.jpg

Arduino 进入 AT 模式代码

接下来,我们需要为使用 Arduino 设置蓝牙模块 AT 模式编写程序,这个程序是让我们可以通过 Arduino IDE 提供的串口监视器来设置蓝牙模块。详细的 Arduino 代码如下:

#include <SoftwareSerial.h> 

// Pin10为RX,接HC05的TXD
// Pin11为TX,接HC05的RXD
SoftwareSerial BT(10, 11); 
char val;

void setup() {
  Serial.begin(38400); 
  Serial.println("BT is ready!");
  // HC-05默认,38400
  BT.begin(38400);
}

void loop() {
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
}

利用 Arduino IDE 串口监视器进行调试

首先,将 Arduino 断电,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频率闪烁,表明蓝牙模块已经正确进入 AT 模式。
打开 Arduino IDE 的串口监视器,选择正确的端口,将输出格式设置为 Both: NL & CR ,波特率设置为 38400 ,可以看到串口监视器中显示 BT is ready! 的信息。
然后,输入 AT ,如果一切正常,串口显示器会显示 OK
接下来,我们即可对蓝牙模块进行设置,常用 AT 命令如下:

AT+ORGL    # 恢复出厂模式
AT+NAME=<Name>    # 设置蓝牙名称
AT+ROLE=0    # 设置蓝牙为从模式
AT+CMODE=1    # 设置蓝牙为任意设备连接模式
AT+PSWD=<Pwd>    # 设置蓝牙匹配密码

正常情况下,命令发送后,会返回 OK ,如果没有返回任何信息,请检查接线是否正确,蓝牙模块是否已经进入 AT 模式,如果上述两点都没有问题,可能是蓝牙模块的问题,可以找蓝牙模块供应商咨询。
设置完毕后,断开电源,再次通电,这是,蓝牙模块指示灯会快速闪烁,这表明蓝牙已经进入正常工作模式。

利用 Andorid 手机连接 Arduino 并控制 LED灯开关

我们完成了对蓝牙模块的设置后,我们将做一个可以通过手机蓝牙连接,控制 Arduino 开关 LED 灯的小实验。

Arduino 电路设计

这里的电路设计比较简单,主要是两部分:
- Arduino 与 HC05 模块连接
- Arduino 与 LED 连接

这里有两点需要注意,Arduino 上的 TXD 应与 HC05 模块上的 RXD 端连接,Arduino 上的 RXD 应与 HC05 模块上的 TXD 连接。
在下面的图例中,我的 LED 是直接连接在 Arduino Pin13 上,而实际电路连接中,因根据连接的 Led 灯的设计考虑是否需要串联电阻。
Hc05_Led.jpg

Arduino 蓝牙控制 LED 灯 程序设计

Arduino 程序代码如下:

void setup()
{
  // 设置波特率为 38400
  Serial.begin(38400);
  pinMode(13, OUTPUT);
}


void loop()
{
  while(Serial.available())
  {
    char c=Serial.read();
      if(c=='1')
      {
        Serial.println("BT is ready!");
        // 返回到手机调试程序上
        Serial.write("Serial--13--high");
        digitalWrite(13, HIGH);
      }
     if(c=='2')
     {
       Serial.write("Serial--13--low");
       digitalWrite(13, LOW);
     }
  }
}

Android 手机端调试

在 Android 端上进行调试,需要下载蓝牙串口调试 APP,可以根据喜好在各大应用商场搜索下载。
下载安装完成 APP 后,我们先打开手机的蓝牙设置,搜索并匹配好我们的蓝牙模块。然后打开 蓝牙串口调试APP ,让 APP 连接上蓝牙模块,然后我们可以在 APP 中输入 1,接下来可以看到 LED 等亮了,并且能在 APP 中看到 Serial--13--high 的返回(有些 APP 返回值可能不是返回在同一行)。我们再在 APP 中输入 2,可以看到 LED 熄灭, APP 中返回 Serial--13--low

小结

在这篇文章中,我们了解了在 Arduino 中使用 HC05 蓝牙模块的两个主要步骤,首先是进入 AT模式 对蓝牙模块进行设置,这里要注意接线的正确性,设置完成后,就可以将蓝牙模块的 TXArduino RX 连接,RXArduino TX 连接,再通过 Arduino 程序中的 Serial 来实现数据的传输与读取。最后,在通过 Android 上的蓝牙串口调试APP,来测试我们的试验是否成功。

参考资料

蓝牙模块HC05
Arduino Bluetooth Basic Tutorial


本文为原创内容,由同一作者于早前发表于简书,Arduino使用HC05蓝牙模块与手机连接

2019-12-17 10:19:56 weixin_42279993 阅读数 9
  • 少儿编程:Scratch中的Arduino开发

    本门课程将介绍如何以Scratch的编程方式进行Arduino开发(需购买硬件,详情可以参考教程内容)。 课程包含16个小模块的调用,并以案例形式发散思维,对应生活中随处可见的场景。(如红绿灯、楼道声控开灯,火焰报警、电动车碰撞报警、触摸传感器开启灯/风扇、高温开启风扇、天黑打开路灯,厕所冲水设备等) 每节正式课程包含连接硬件和代码编写两个环节,如果是孩子学习,请家长做好监督看护工作。 我相信,编程对孩子的思维培养和好奇心的激发是确实存在益处的,希望每一个观众能够有所收获。 课程适合人群:对编程感兴趣的青少年;有意培养子女编程兴趣的家长;有意从事少儿编程相关工作的朋友。

    725 人正在学习 去看看 王全

目标:让Andriod手机蓝牙控制灯的亮灭

所用材料:Arduino UNO,笔记本,HC05蓝牙模块,Arduino bluetooth controller的安卓应用程序,LED灯和若干杜邦线

第一步:硬件连接

01 蓝牙模块和Arduino板连接(注意RXD和TXD不要接反了)

VCC 接 Arduino +5V

GND 接 Arduino GND

RXD 接 Arduino TX

TXD 接 Arduino RX

这里,有一点需要说明一下,HC05蓝牙模块的电压范围是3.6V-6V,最好别长时间用5V,可以连接一个简单的7分压电路进行分压,把电压降低。

02 LED灯和Arduino板连接

使用Arduino的11号端口,接到LED灯正极,LED灯负极接Arduino的GND

第二步:程序

int ledpin=11;
void setup() 
{
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(ledpin,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  while(Serial.available())
  {
  char c=Serial.read();
  if(c=='A')
  {
    Serial.println("亮灯");
    digitalWrite(ledpin,HIGH);
  }
    if(c=='B')
  {
    Serial.println("灭灯");
    digitalWrite(ledpin,LOW);
  }
   if(c=='C')
  {
    Serial.println("闪灯");
    digitalWrite(ledpin,HIGH);
    delay(1000);
    digitalWrite(ledpin,LOW);
  }
  }
}

第三步:结果

通过手机应用程序Arduino bluetooth controlle,向Arduino板发送“A”、“B”、“C”指令,实现灯的亮灭。

 

没有更多推荐了,返回首页