基于树莓派的嵌入式智能安全帽设计 python 实时通信 GPS 卫星

环境搭建参考树莓派的

内网穿透技术

不需要实名认证

https://www.i996.me/

设备

file

使用 ngrok

官网:https://dashboard.ngrok.com/get-started/your-authtoken

具体实现

基于树莓派的嵌入式智能安全帽设计

在工业生产中,安全帽是保护工人头部安全的重要装备。随着技术的发展,将智能技术嵌入到传统安全帽中,不仅能够提供基础的头部保护,还能增加实时定位、通讯、照明和视频监控等智能功能。本文将探讨如何基于树莓派等智能硬件设计一个不改变安全帽防护功能的基础上添加智能模块的嵌入式智能安全帽。

1. 概述

嵌入式智能安全帽的设计旨在通过集成先进的通讯和传感技术,实现对穿戴者环境和状态的实时监控,从而提高工作场所的安全性和效率。利用树莓派这类小型计算机作为核心控制单元,可以实现高度集成且功能丰富的智能安全帽。

2. 硬件组成

2.1 核心控制单元

  • 树莓派:树莓派4B或更高版本作为智能安全帽的核心,负责处理数据和控制其他模块。它具有强大的处理能力、丰富的接口和低功耗特性,非常适合作为嵌入式项目的核心。

2.2 通讯模块

  • Wi-Fi/蓝牙模块:内置于树莓派中,用于实现安全帽与外部设备的数据通讯,如传送视频流和接收指令。

  • GPS模块:用于实时定位,确保穿戴者的位置信息可以实时获取。

  • 使用内置的蓝牙模块进行连接

linux 开发需要安装开发包 PortAudio 需要用户播放扬声器

sudo apt-get install portaudio19-dev
sudo apt-get install vlc # 用来进行播放 mp3 或者音频测试
sudo apt-get install mpv # 轻量级的播放器
sudo apt-get install alsa-utils  # 录音的ALSA的工具集
  • 如何使用 bluetoothctl, 在命令行输入 bluetoothctl 进入命令行
  1. 开启蓝牙:power on
  2. 启用代理:agent on
  3. 设置默认代理:default-agent
  4. 开始扫描设备:scan on
  5. 找到你的蓝牙设备后,使用pair 设备的MAC地址配对设备。
  6. 配对成功后,使用trust 设备的MAC地址信任设备。
  7. 最后,用connect 设备的MAC地址命令连接设备。

file

如果出现 connect 不上可以参考下面的方法

https://blog.csdn.net/ZeroSwift/article/details/115151743

  • 配置好后使用
pactl load-module module-bluetooth-discover # 连接之前只用
alsamixer # 调节音量在命令行模式下面
mpv test.mp3 #调节音量

注意配置 x11 转发, xshell 上面

file

  • 注意树莓派蓝牙模块的范围,

  • 安装蓝牙模块


sudo apt-get update
sudo apt-get install bluetooth bluez blueman

ATGM336H-5N定位模块

sudo apt-get install minicom
sudo minicom -s # 第一次使用配置

    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/ttyUSB0                              |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      : 9600                                      |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 115200 8N1                                |
    | F - Hardware Flow Control : Yes                                       |
    | G - Software Flow Control : No                                        |
    | H -     RS485 Enable      : No                                        |
    | I -   RS485 Rts On Send   : No                                        |
    | J -  RS485 Rts After Send : No                                        |
    | K -  RS485 Rx During Tx   : No                                        |
    | L -  RS485 Terminate Bus  : No                                        |
    | M - RS485 Delay Rts Before: 0                                         |
    | N - RS485 Delay Rts After : 0  

file

我们可以提取以下定位信息:

时间:04:10:42 UTC
日期:2024年2月19日
纬度:29度 30.75615分 北纬
经度:106度 38.21323分 东经
定位状态:有效
使用卫星数量:8
HDOP(水平精度因子):1.0
海拔高度:3.245米
要在网上查看这个位置,您可以使用在线地图服务,比如Google Maps。您可以将纬度和经度转换为十进制格式,然后在Google Maps的搜索框中输入。

纬度和经度的转换方式如下:

纬度:29 + 30.75615/60 = 29.5126025度
经度:106 + 38.21323/60 = 106.6368871667度
转换为十进制后的坐标是:

纬度:29.5126025
经度:106.6368871667
您可以将这些十进制坐标输入到Google Maps的搜索框中来查看位置。下面是一个可以在浏览器中直接使用的格式化网址:

https://www.google.com/maps?q=29.5126025,106.6368871667

只需点击链接,或者将它复制并粘贴到浏览器的地址栏中,即可查看这个坐标点在Google Maps上的位置。请注意,因为定位数据是动态的,如果你需要最新的位置信息,你应该使用实时数据来获取最新的坐标。

2.3 视频监控模块

  • 摄像头:连接到树莓派的CSI接口,用于实时视频监控和拍照。可以选用树莓派官方摄像头,因其兼容性和性能均较好。

2.4 安全照明模块

  • LED灯:可以安装在安全帽的前部或侧面,通过树莓派GPIO端口控制,用于夜间照明或紧急情况下的警示。

2.5 电源管理

  • 移动电源:考虑到便携性和安全性,使用充电式锂电池作为电源供应,确保设备能够持续工作数小时。

3. 软件设计

3.1 操作系统和开发环境

  • Raspberry Pi OS:树莓派的官方操作系统,提供了丰富的开发库和工具,便于开发和测试智能安全帽的软件。

3.2 功能实现

  • 实时通讯:通过Wi-Fi或蓝牙模块实现与其他设备的通讯,如发送警报、接收指令等。
  • 实时定位:通过GPS模块获取位置信息,并通过网络发送到监控中心。
  • 视频监控:实时捕捉视频流,并通过Wi-Fi发送到监控中心或存储在本地。
  • 安全照明:根据环境光线或特定指令控制LED灯的开关和亮度。

WEBRTC socktio 实现实时语音通信

  • 我把视频显示和通话以及监听分别写的,原因这里不说了非常的复杂, 首先 webrtc 能接受到前端发送过来的数据利用 pyaudio 来进行播放但是这里添加音轨出了问题导致无法录音
  • 后面我转变思路重新监听单独来发送麦克风的录音, 这里具体 来说就是先建立了一个长连接,然后前端通过这个长连接来接受后端的二进制音频帧

def create_wav(pcm_data, channels=1, sampwidth=2, framerate=44100):
    buffer = io.BytesIO()
    with wave.open(buffer, 'wb') as wf:
        wf.setnchannels(channels)
        wf.setsampwidth(sampwidth)
        wf.setframerate(framerate)
        wf.writeframes(pcm_data)
    return buffer.getvalue()

# 定义一个异步函数来不断读取音频数据并发送给前端
async def stream_audio_to_frontend(sid, rate=44100, channels=1):
    stream, pyaudio_instance = capture_audio(rate, channels)
    try:
        while audio_streaming_status.get(sid, False):  # 检查状态是否为True
            pcm_data = stream.read(1024, exception_on_overflow=False)
            wav_data = create_wav(pcm_data, channels=channels,
                                  sampwidth=pyaudio_instance.get_sample_size(pyaudio.paInt16), framerate=rate)
            await sio.emit("audio_data", wav_data, room=sid)
            await asyncio.sleep(0.01)
    finally:
        # 如果循环结束,关闭流并终止PyAudio实例
        stream.stop_stream()
        stream.close()
        pyaudio_instance.terminate()

@sio.event
async def start_audio_stream(sid):
    logger.info(f"开始发送音频流到客户端: {sid}")
    audio_streaming_status[sid] = True  # 设置状态为True以开始发送
    asyncio.create_task(stream_audio_to_frontend(sid))

@sio.event
async def stop_audio_stream(sid):
    logger.info(f"停止发送音频流到客户端: {sid}")
    if sid in audio_streaming_status:
        audio_streaming_status[sid] = False  # 设置状态为False以停止发送
  • 前端这里需要拿到数据然后把流播放出来

 socket.on('audio_data', function (arrayBuffer) {
                if (!audioContext) {
                    audioContext = new (window.AudioContext || window.webkitAudioContext)();
                }

                // 确保接收到的数据是ArrayBuffer类型
                if (!(arrayBuffer instanceof ArrayBuffer)) {
                    console.error("Received data is not an ArrayBuffer");
                    return;
                }

                // 使用AudioContext解码接收到的WAV格式音频数据
                audioContext.decodeAudioData(arrayBuffer.slice(0), function (buffer) {
                    // 在创建新的BufferSource之前,先断开并清除旧的source(如果有)
                    if (source) {
                        source.disconnect();
                    }
                    source = audioContext.createBufferSource(); // 重新创建一个新的source实例
                    source.buffer = buffer; // 将解码后的音频数据赋给音频源
                    source.connect(audioContext.destination); // 将音频源连接到音频输出(扬声器)
                    source.start(0); // 播放音频
                }, function (e) {
                    console.error("Error with decoding audio data: ", e);
                });
            });
  • 注意这里虽然是能听到但是太卡了,需要优化一下

发布项目到公网

  • 项目实现了一个面板来管理 debian 的进程和硬件设备一键重启, ngrok 和 cpolar 这里是分别动态获取然后赋值给面板以及通信的,注意这里需要分开, cpolar 虽然有多个隧道但是对于一些静态文件不好处理, 然后就是 ngrok 来代理后台

file

最终实现的效果

file

4. 实现步骤

  1. 硬件组装:根据安全帽的结构合理布置树莓派及各模块,确保不影响安全帽的原有防护功能。
  2. 系统安装与配置:在树莓派上安装操作系统并配置网络等基础环境。
  3. 模块集成与测试:分别对GPS、摄像头和LED灯等模块进行编程和测试,确保其正常工作。
  4. 功能开发与优化:开发实时通讯、定位、视频监控和照明控制等功能,并进行综合测试和优化。
  5. 现场部署与调试:将智能安全帽部署在实际工作环境中,根据使用反馈进行调试和优化。

5. 结论

基于树莓派的嵌入式智能安全帽设计,通过集成通讯、定位、视频监控和照明模块,能够有效提高工作场所的安全性和效率。该项目不仅展示了树莓派在嵌入式系统中的应用潜力,也为智能穿戴设备的开发提供了参考。通过不断的技术迭代和优化,未来的智能安全帽将拥有更多创新功能,为工人提供全方位的安全保障。

1. 本站提供资源以极具性价比的价格出售,我们的定价远低于市场常见价格。无论是单独购买还是购买永久会员以下载全站资源,我们不提供任何相关技术服务。
2. 若遇到资源下载链接失效,请及时通过联系站长QQ以获取补发。
3. 所有本站资源仅供学习和研究目的使用。用户必须在24小时内删除所下载的资源,并严禁将其用于任何商业活动。对于因违反此规定引发的任何法律问题及连带责任,本站及发布者不承担任何责任。除非特别注明为原创,本站资源大多来源于网络,版权归原作者所有。若有侵权,请联系我们以便进行删除处理。
4. 本站提供的所有下载资源(包括软件等),我们保证未进行任何负面修改(不包括为改善功能或修复bug等正向优化或二次开发)。然而,我们无法保证资源的准确性、安全性和完整性。用户下载后应自行判断。本站旨在促进学习交流,并不保证所有源码完全无误或无bug。用户应明白,除非特别注明,【雾码资源】对提供下载的软件等不持有任何权利,其版权属于相应合法拥有者。
5. 请您仔细阅读以上内容,购买即表示您同意以上所有条款。
雾码资源 » 基于树莓派的嵌入式智能安全帽设计 python 实时通信 GPS 卫星

提供最优质的资源集合

立即查看 了解详情