使用Arduino Uno和超声波传感器制作智能盲杆

描述

  障碍物检测是盲人最关心的问题之一。这里展示的是使用 Arduino Uno 和超声波传感器的智能盲杆。该项目的主要目标是帮助盲人轻松行走,并在他们的行走路径被其他物体或人阻碍时提醒他们。作为警告信号,电路中连接了一个语音模块,它根据物体的方向发出语音警告,例如,如果物体在左侧,那么它会说“小心物体在左侧”。

  这款智能摇杆将在左侧、右侧和中心连接三个超声波传感器,以感知与任何障碍物的距离,一个 JQ6500 语音声音模块用于发出警告信号,以及一个 9V 电池为设置供电。

  智能盲杆所需组件

  Arduino纳米

  3×超声波传感器

  JQ6500 语音发声模块

  8Ω扬声器

  1 KΩ 电阻器

  JQ6500 语音发声模块

  JQ6500 语音模块非常适合在扬声器上播放消息,如火警、火车和公共汽车警报系统、营业厅提示、设备故障警报等。它可以将 MP3、硬编码 MP3 或 WMV 格式文件解码为可听语音格式。它配备 24 位数模转换器,动态范围为 90dB,支持 8 / 11.025 / 12/16 / 22.05 / 24/32 / 44.1 / 48 kHz 采样率。MP3 文件可以通过按钮或通过串行通信协议进行控制。

障碍物检测

  将 MP3 文件上传到板载内存:

  可以使用 Windows 计算机将 MP3 文件上传到 JQ6500 的板载内存中(Mac 或 Linux 用户需要使用 JQ6500-28p 和 SD 卡)。下面给出了相同的步骤:

  通过 Mini USB 连接器将开发板连接到您的计算机。

  一个新的“CD-ROM”驱动器将出现在您的计算机上,双击它并打开名为“ MusicDownload.exe ”的应用程序。

障碍物检测

  部分JQ6500-16P设备没有安装MusicDownload.exe,如果找不到MusicDownload.exe程序;您可以下载包含它的 zip 文件。

  该应用程序是中文的,因此要上传文件,请打开 .exe 文件,然后单击左侧的第二个选项卡。

障碍物检测

  然后单击右上角的文件选择器选项卡。

障碍物检测

  文件选择器将打开,选择您要上传的所有 mp3 文件单击文件选择器上的打开按钮

障碍物检测

  单击返回第一个选项卡,然后单击按钮上传文件

障碍物检测

  智能盲杆电路图

  智能盲杆的完整电路图如下所示。非常简单,我们只需要连接三个超声波传感器和一个JQ6500语音模块。

障碍物检测

  整个电路板由 9V 电池供电。电路的大脑是 Arduino Nano。三个超声波传感器用于检测摇杆左、右、前的障碍物。这三个传感器的四个引脚中的两个,即 VCC 和 GND,连接到 Arduino 的 5V 和 GND。其余两个引脚——TRIG 和 ECHO 连接到 Arduino,如下所示。

 障碍物检测

  JQ5600 MP3模块是一个3.3V的逻辑模块,所以不能直接连接到Arduino的IO管脚,但是用Arduino的5V电源线供电就可以了。MP3 模块的 RX 和 TX 引脚连接到 Arduino Nano 的数字引脚 9 和 8。在 Arduino 数字引脚 9 和 MP3 模块 RX 之间放置一个 1kΩ 电阻,以降低 Arduino 的 5V 电压。

障碍物检测

用于智能盲杆的 Arduino 程序

一旦我们准备好硬件,我们就可以将 Arduino 连接到我们的计算机并开始编程。该项目的完整代码在本页底部给出;您可以将其直接上传到您的 Arduino 板。但是,如果您想知道代码是如何工作的,请进一步阅读。

该代码使用JQ6500_Serial.h和SoftwareSerial.h库。SoftwareSerial 库与 Arduino IDE 一起预安装,而JQ6500 串行库可以从给定的链接安装。

像往常一样,通过包含所有必需的库并定义此项目中使用的所有引脚来启动代码。

 

#include 
#include 
#include 
JQ6500_Serial mp3(8,9);
int left_trigPin = 6;
int left_echoPin = 7;
int right_trigPin = 2;
int right_echoPin = 3;
int center_trigPin = 4;
int center_echoPin = 5;

 

然后在setup()函数中,初始化输入输出引脚。在我们的程序中,所有三个传感器的触发引脚都是输出设备,回声引脚是输入设备。我们还初始化了串口监视器和 JQ6500 语音模块。

 

  pinMode(left_trigPin,输出);
  pinMode(left_echoPin,INPUT);
  pinMode(right_trigPin,输出);
  pinMode(right_echoPin,输入);
  pinMode(center_trigPin,输出);
  pinMode(center_echoPin,输入);
  序列号.开始(115200);
  mp3.开始(9600);
  mp3.reset();

 

在主循环中,我们正在读取所有三个传感器的数据,即左、右和中心。我们首先读取超声波传感器的传感器数据以了解距离,然后使用触发和接收到 ECHO 之间的时间计算距离。距离计算公式如下:

 

数字写入(left_trigPin,HIGH);
延迟微秒(10);
 数字写入(left_trigPin,低);
 持续时间=脉冲输入(left_echoPin,HIGH);
 距离 = (持续时间/2) / 29.1;

 

如果测量距离超过 50 厘米,则不会发出警告。但是,如果小于 50cm,就会触发语音模块播放语音警告。

 

如果(距离 < 50){
    Serial.print("左距离");
    Serial.print(距离);
     mp3.playFileByIndexNumber(2);
    }

 

所有三个传感器都使用相同的逻辑。通过更改我们用来比较的值,该程序可以很容易地适应您的应用程序。如果触发了错误警报,您可以使用串行监视器进行调试。

  测试智能 Arduino 盲杆

  最后,是时候测试我们的盲杆 Arduino 项目了。确保按照电路图完成连接并成功上传程序。现在,使用 9V 电池为设置供电,您应该开始看到结果。将盲人手杖移近物体,您会注意到根据物体方向的语音警告。例如,如果对象在左侧,那么它会说“小心左侧对象”。

障碍物检测

#include

#include

#include

JQ6500_Serial mp3(8,9);

int left_trigPin = 7;

int left_echoPin = 6;

int right_trigPin = 2;

int right_echoPin = 3;

int center_trigPin = 4;

int center_echoPin = 5;

无效设置(){

pinMode(left_trigPin,OUTPUT);

pinMode(left_echoPin,INPUT);

pinMode(right_trigPin,输出);

pinMode(right_echoPin,输入);

pinMode(center_trigPin,输出);

pinMode(center_echoPin,输入);

序列号.开始(115200);

mp3.开始(9600);

mp3.reset();

mp3.setVolume(50);

mp3.setLoopMode(MP3_LOOP_NONE);

}

无效循环(){

左();

正确的();

中央();

}

void left(){

delay(500);// 读取将在 ....miliseconds 之后进行

Serial.println("\n");

int 持续时间,距离;

数字写入(left_trigPin,HIGH);

延迟微秒(10);

数字写入(left_trigPin,低);

持续时间=脉冲输入(left_echoPin,HIGH);

距离 = (持续时间/2) / 29.1;

//距离=持续时间*0.034/2;

if (distance < 30) { // 更改长距离或短距离的数字。

Serial.print("左距离");

Serial.print(距离);

mp3.playFileByIndexNumber(2);

}

}

void right(){

delay(500);// 读取将在 ....miliseconds 之后进行

Serial.println("\n");

int 持续时间,距离;

数字写入(right_trigPin,HIGH);

延迟微秒(10);

数字写入(right_trigPin,低);

持续时间=脉冲输入(right_echoPin,HIGH);

距离 = (持续时间/2) / 29.1;

if (distance <30) { // 更改长距离或短距离的数字。

Serial.print("正确的距离");

Serial.print(距离);

mp3.playFileByIndexNumber(3);

}

}

void center(){

delay(500);// 读取将在 ....毫秒后进行

序列号.println("\n");

int 持续时间,距离;

数字写入(center_trigPin,HIGH);

延迟微秒(10);

数字写入(center_trigPin,低);

持续时间=脉冲输入(center_echoPin,HIGH);

距离 = (持续时间/2) / 29.1;

if (distance <30) { // 更改长距离或短距离的数字。

Serial.print("中心距");

Serial.print(距离);

mp3.playFileByIndexNumber(1);

}

}
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分