arduino使用ASRPro智能语音控制倒车雷达

接线说明

  1. 各传感器的GND接arduino板载的GND
  2. 各传感器的VCC接arduino板载的5V
  3. 雷达的Echo — arduino的2
  4. 雷达的Trig — arduino的3
  5. 3色LED的R或G或B — arduino的4
  6. ASRPro的PB6(RX接收) — arduino的10
  7. ASRPro的PB5(TX发送) — arduino的11

 

源代码

/*
Arduino与ASR01语音识别模块的串口通讯实验
*/
#include <SoftwareSerial.h>
//倒车部分
const int TrigPin = 2;
const int EchoPin = 3;
float cm;  //测量出来的距离
int inteval;
#define Buzzer 4  //有缘蜂鸣IO阵脚
int daocheFlag;   //倒车开关标志
// 定义引脚
SoftwareSerial mySerial(10, 11);  // RX, TX ,ASRPro 通信引脚
const int LedPin = 13;            // led连接的引脚,作为LED灯的正极
String st = “”;                   //串口读取的字符数据的字符串变量
//初始化
void setup() {
  //设置串口
  mySerial.begin(9600);  //ASRPro 通信,设置串口波特率9600
  Serial.begin(9600);    //串口调试
  //设置灯
  pinMode(LedPin, OUTPUT);  //设置板载led,
  //设置蜂鸣器
  pinMode(Buzzer, OUTPUT);     //蜂鸣器为IO输出
  digitalWrite(Buzzer, HIGH);  //蜂鸣器初始为不鸣叫,HIGH不鸣,LOW鸣
  //设置倒车雷达
  daocheFlag = 0;
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT);
}
void loop() {
  if (daocheFlag == 1) {
    //倒车雷达检测
    daocheDetect();
  } else {
    digitalWrite(Buzzer, HIGH);
  }
  //读取智能语音传输的内容
  st = “”;
  while (mySerial.available() > 0) {  //当串口缓冲区有数据
    st += char(mySerial.read());      //将缓冲区数据累加读入st
    delay(2);
  }
  //读取的内容会有空格,需要去掉
  st.trim();
  //st为空
  if (st.length() <= 0) { return; }
  Serial.println(st);
  if (st == “ledon”) digitalWrite(LedPin, HIGH);  //st为“t001”则LedPin置高电平,即开灯
  if (st == “ledoff”) digitalWrite(LedPin, LOW);  //st为“t002”则LedPin置低电平,即关灯
  if (st == “dcon”) daocheFlag = 1;
  if (st == “dcoff”) daocheFlag = 0;
  if (st == “hello”) {  //st为“hello”则Led灯闪3下
    for (int i = 0; i < 3; i++) {
      digitalWrite(LedPin, HIGH);
      delay(100);
      digitalWrite(LedPin, LOW);
      delay(100);
    }
  }
}
void daocheDetect() {
  digitalWrite(TrigPin, LOW);  //低高低电平发一个短时间脉冲去TrigPin
  delayMicroseconds(2);
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(TrigPin, LOW);        //通过这里控制超声波的发射
  cm = pulseIn(EchoPin, HIGH) / 58;  //将回波时间换算成cm
                                     //  cm = (int(cm * 100)) / 100; //保留两位小数
  Serial.print(cm);
  Serial.println(“cm”);
  if (cm < 20) {
    inteval = 100;
    BuzzerDi();
  } else if (cm > 20 && cm < 40) {
    inteval = 300;
    BuzzerDi();
  } else if (cm > 40) {
    delay(1000);
    BuzzerDown();
  }
}
//关闭蜂鸣器
void BuzzerDown() {
  digitalWrite(13, LOW);
  digitalWrite(Buzzer, HIGH);  //蜂鸣器响
}
void BuzzerDi() {
  digitalWrite(13, HIGH);
  digitalWrite(Buzzer, LOW);  //蜂鸣器响
  delay(100);
  digitalWrite(13, LOW);
  digitalWrite(Buzzer, HIGH);  //蜂鸣器关闭
  delay(inteval);              //延时inteval毫秒
}
Author: bkdwei