0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ElfBoard开源项目|智能消防车项目

ElfBoard 2025-01-04 16:43 次阅读

智慧城市的建设推动了城市各个领域的智能化发展,消防领域也不例外。智慧消防作为智慧城市的重要组成部分,其建设和发展与智慧城市的建设紧密相连。

在此背景下,ElfBoard团队完成了一个创新性的开源项目——利用ELF 1开发板打造的智慧消防车。该项目展现了物联网、数据处理等前沿技术在消防领域的应用潜力,下面就和各位小伙伴展示一下这个开源项目是怎样实现的。

项目简介

智能消防车通过阿里云平台实现远程控制,使得用户可以远程控制车到达指定地点进行灭火,或者通过火焰传感器检测到火焰时自动响应灭火操作。

功能特性

1、数据监测与显示:实时监测车运行状态,并直观地显示在Web界面上。

2、Web可视化界面:用户可以通过Web界面远程控制车的移动。

3、远程控制:通过阿里云物联网平台向车发送指令,实现远程操作和控制。

4、自动灭火:根据火焰传感器检测到的火焰情况,自动触发灭火操作。

环境说明

1、开发环境操作系统:Ubuntu18.04 64位版

2、交叉编译工具链:arm-poky-linux-gnueabi-gcc 5.3.0

3、开发板使用Bootloader版本:u-boot-2016.03

4、开发板内核版本:linux-4.1.15

5、开发板移植QT版本:qt5.6.2

硬件配置

1、小车驱动装置

小车驱动装置主要由TB6612FNG双电机驱动板、TT马达、车轮等组成。

(1)TB6612FNG双电机驱动板

wKgZO2d46b6AAHi0AADv1SL2vms777.png

2、灭火装置

灭火装置主要由火焰传感器、继电器、水泵等组成。

(1)火焰传感器

wKgZPGd46cqAfSX7AACxkeCzNQg379.png

(2)继电器

wKgZPGd46daATI0vAACnXAwpQCA603.png

(3)水泵

wKgZPGd46fCAVdcEAACjkRlG4do278.png

3、整体连接示意图

内核适配

1、实现正常驱动小车的功能

消防车驱动装置主要由TB6612FNG双电机驱动板,驱动板中pwm引脚接受板卡输出的pwm信号,‌通过调整pwm信号的占空比‌来控制输出电压,‌进而控制电机的转速,从而‌控制小车速度,AIN0/AIN1:‌连接板卡的IO端口,‌用于控制电机的转动方向。‌通过控制这两个引脚的电平状态,‌可以实现电机的正转、‌反转或停止。下面来介绍如何使用EFL 1板卡进行pwm复用以及gpio复用。

(1)复用pwm

1)拷贝

ELF1开发板资料包\02-Linux 源代码\02-0 出厂内核和uboot源码\内核源码\linux-4.1.15-elf1.tar.bz2内核源码到开发环境/home/elf/work/目录下解压。

elf@ubuntu:~/work$ tar -xvf linux-4.1.15-elf1.tar.bz2

2)修改顶层设备树文件arch/arm/boot/dts/imx6ull.dtsi。

elf@ubuntu:~/work$ cd linux-4.1.15-elf1/ elf@ubuntu:~/work/linux-4.1.15-elf1$ vi arch/arm/boot/dts/imx6ull.dtsi

wKgZO2d46l6AWc_RAAHFWwLD2vc478.png

3)修改设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts。

elf@ubuntu:~/work/linux-4.1.15-elf1$ vi arch/arm/boot/dts/imx6ull-elf1-emmc.dts

添加设备节点

&pwm5 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm5>; status = "okay"; }; &pwm6 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm6>; status = "okay"; }; &pwm7 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm7>; status = "okay"; }; &pwm8 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm8>; status = "okay"; };

wKgZPGd46oSAYYXhAAC-Oc1HBc4625.png

在iomux节点下面添加引脚复用

pinctrl_pwm5: pwm5grp { fsl,pins = < MX6UL_PAD_ENET1_TX_DATA1__PWM5_OUT 0x110b0 >; }; pinctrl_pwm6: pwm6grp { fsl,pins = < MX6UL_PAD_ENET1_TX_EN__PWM6_OUT 0x110b0 >; }; pinctrl_pwm7: pwm7grp { fsl,pins = < MX6UL_PAD_CSI_VSYNC__PWM7_OUT 0x110b0 >; }; pinctrl_pwm8: pwm8grp { fsl,pins = < MX6UL_PAD_CSI_HSYNC__PWM8_OUT 0x110b0 >; };

wKgZO2d48gmADVBqAAClj-T_EyQ260.png

取消其它用到csi、enet1功能的地方

wKgZPGd48h6AXahsAABFWU6-sx0080.pngwKgZO2d48h-AEMNcAAC-AxpStWY273.pngwKgZPGd48h-APj3ZAAgjBfSP18U747.png

至此pwm已经复用完成。

(2)复用gpio

1)修改设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts

elf@ubuntu:~/work$ cd linux-4.1.15-elf1/ elf@ubuntu:~/work/linux-4.1.15-elf1$ vi arch/arm/boot/dts/imx6ull-elf1-emmc.dts

在iomux节点下面添加引脚复用

MX6UL_PAD_CSI_DATA00__GPIO4_IO21 0x17059 MX6UL_PAD_CSI_DATA01__GPIO4_IO22 0x17059 MX6UL_PAD_CSI_DATA02__GPIO4_IO23 0x17059 MX6UL_PAD_CSI_DATA03__GPIO4_IO24 0x17059 MX6UL_PAD_CSI_DATA04__GPIO4_IO25 0x17059 MX6UL_PAD_CSI_DATA05__GPIO4_IO26 0x17059 MX6UL_PAD_CSI_DATA06__GPIO4_IO27 0x17059 MX6UL_PAD_CSI_DATA07__GPIO4_IO28 0x17059 MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0x17059 MX6UL_PAD_UART2_RX_DATA__GPIO1_IO21 0x17059 MX6UL_PAD_CSI_MCLK__GPIO4_IO17 0x17059 MX6UL_PAD_CSI_PIXCLK__GPIO4_IO18 0x17059

wKgZO2d48meAVTRFAAFs0JMReSY610.png

取消其它用到csi、uart2功能的地方

wKgZPGd48h6AXahsAABFWU6-sx0080.pngwKgZO2d48h-AEMNcAAC-AxpStWY273.pngwKgZPGd48oWACInLAABpBR_wMO8871.png

至此gpio已经复用完成

(3)编译并替换设备树

1)执行环境变量

elf@ubuntu:~/work/linux-4.1.15-elf1$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

2)编译设备树和内核

elf@ubuntu:~/work/linux-4.1.15-elf1$ make imx6ull_elf1_defconfig elf@ubuntu:~/work/linux-4.1.15-elf1$ make dtbs

3)将arch/arm/boot/dts/路径下的imx6ull-elf1-emmc.dtb放到U盘,通过U盘拷贝到开发板

root@ELF1:~# cp /run/media/sda1/imx6ull-elf1-emmc.dtb /run/media/mmcblk1p1/

4)保存并重启开发板

root@ELF1:~# sync root@ELF1:~# reboot

配基于云平台的远程数据监测和设备控制

1、配置阿里云物联网平台

(1)注册并登录阿里云账号(2)开通物联网平台服务(3)开通公共实例(4)创建产品(5)添加设备(6)发布产品

2、配置IoT Stdio

(1)领取IoT Stdio体验版免费试用机会(2)新建项目(3)关联物联网平台产品、设备(4)新建Web应用(5)配置Web显示界面(6)发布应用

3、程序设计

wKgZPGd48yiAZTvVAADq_fn1oh4213.png

主函数的实现main.cpp

int main(int argc, char *argv[]) { pthread_t gpio_tid, mqtt_tid; // 信号处理 signal(SIGTERM, SignHandler); signal(SIGINT, SignHandler); // 初始化控制参数 if (-1 == init_controller_data()) goto to_end; // 初始化MQTT并建立连接 init_mqtt(); // 将设备数据同步到MQTT服务器 demo_mqtt_send_handler(SET_STRAIGHT_TO_SEND); demo_mqtt_send_handler(SET_LEFT_TO_SEND); demo_mqtt_send_handler(SET_RIGHT_TO_SEND); demo_mqtt_send_handler(SET_BACK_TO_SEND); demo_mqtt_send_handler(SET_STOP_TO_SEND); demo_mqtt_send_handler(SET_WATER_TO_SEND); set_controller(Upperleft, 5.0); set_controller(Lowerleft, 5.0); set_controller(Upperright, 5.0); set_controller(Lowerright, 5.0); set_controller(left, 1.0); set_controller(right, 1.0); set_controller(c8, 1.0); demo_mqtt_send_handler(SET_UPPERLEFT_TO_SEND); demo_mqtt_send_handler(SET_LOWERLEFT_TO_SEND); demo_mqtt_send_handler(SET_UPPERRIGHT_TO_SEND); demo_mqtt_send_handler(SET_LOWERRIGHT_TO_SEND); // 创建GPIO线程 if (pthread_create(&gpio_tid, NULL, gpio_thread, NULL) != 0) { perror("pthread_create for gpio_thread"); goto to_end; } // 创建MQTT线程 if (pthread_create(&mqtt_tid, NULL, mqtt_thread, NULL) != 0) { perror("pthread_create for mqtt_thread"); goto to_end; } pthread_join(gpio_tid, NULL); pthread_join(mqtt_tid, NULL); to_end: // 遇到异常,退出进程前,回收资源 release_mqtt(); release_controller_devices(); sleep(1); exit(1); }

初始化控制器参数

int init_controller_data(void) { controller.left.value = 0; controller.right.value = 0;

controller.Upperleft.value = 0; controller.Upperright.value = 0;

controller.Lowerleft.value = 0; controller.Lowerright.value = 0;

controller.go_straight.value = 0; controller.turn_left.value = 0;

controller.turn_right.value = 0;

controller.go_back.value = 0; controller.go_stop.value = 0;

controller.spray_water.value = 0; controller.left.flag = 0;

controller.right.flag = 0; controller.Upperleft.flag = 0;

controller.Upperright.flag = 0; controller.Lowerleft.flag = 0; controller.Lowerright.flag = 0; controller.go_straight.flag = 0;

controller.turn_left.flag = 0; controller.turn_right.flag = 0;

controller.go_back.flag = 0; controller.go_stop.flag = 0;

controller.spray_water.flag = 0; return 0; }

初始化MQTT

/* init_mqtt, 初始化,跟mqtt服务器建立链接,设置订阅,创建通道管理线程,创建接收处理线程 */ int init_mqtt(void)

{ int32_t res = STATE_SUCCESS; uint16_t port = 443; /* 无论设备是否使用TLS连接阿里云平台, 目的端口都是443 */

aiot_sysdep_network_cred_t cred; /* 安全凭据结构体, 如果要用TLS, 这个结构体中配置CA证书等参数 */ char sub_topic[100] = {0}; /* 配置SDK的底层依赖 */

aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); /* 配置SDK的日志输出 */

aiot_state_set_logcb(demo_state_logcb); /* 创建SDK的安全凭据, 用于建立TLS连接 */ memset(&cred, 0, sizeof(aiot_sysdep_network_cred_t)); cred.option = AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA; /* 使用RSA证书校验MQTT服务端 */ cred.max_tls_fragment = 16384; /* 最大的分片长度为16K, 其它可选值还有4K, 2K, 1K, 0.5K */

cred.sni_enabled = 1; /* TLS建连时, 支持Server Name Indicator */ cred.x509_server_cert = ali_ca_cert; /* 用来验证MQTT服务端的RSA根证书 */ cred.x509_server_cert_len = strlen(ali_ca_cert);

/* 用来验证MQTT服务端的RSA根证书长度 */ /* 创建1个MQTT客户端实例并内部初始化默认参数 */

mqtt_handle = aiot_mqtt_init(); if (mqtt_handle == NULL) { printf("aiot_mqtt_init failed\n"); return -1; } /* TODO: 如果以下代码不被注释, 则例程会用TCP而不是TLS连接云平台 */

{ memset(&cred, 0, sizeof(aiot_sysdep_network_cred_t)); cred.option = AIOT_SYSDEP_NETWORK_CRED_NONE; } /* 配置MQTT服务器地址 */ aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_HOST, (void *)mqtt_host); /* 配置MQTT服务器端口 */ aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_PORT, (void *)&port); /* 配置设备productKey */

aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_PRODUCT_KEY, (void *)product_key);

/* 配置设备deviceName */

aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_DEVICE_NAME, (void *)device_name);

/* 配置设备deviceSecret */ aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_DEVICE_SECRET, (void *)device_secret); /* 配置网络连接的安全凭据, 上面已经创建好了 */

aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_NETWORK_CRED, (void *)&cred); /* 配置MQTT默认消息接收回调函数 */ aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_RECV_HANDLER, (void *)demo_mqtt_default_recv_handler); /* 配置MQTT事件回调函数 */

aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_EVENT_HANDLER, (void *)demo_mqtt_event_handler);

/* 与服务器建立MQTT连接 */

res = aiot_mqtt_connect(mqtt_handle);

if (res < STATE_SUCCESS) { /* 尝试建立连接失败, 销毁MQTT实例, 回收资源 */ aiot_mqtt_deinit(&mqtt_handle); printf("aiot_mqtt_connect failed: -0x%04X\n\r\n", -res); printf("please check variables like mqtt_host, produt_key, device_name, device_secret in demo\r\n"); return -1; } 

/* MQTT 订阅topic功能示例, 请根据自己的业务需求进行使用 */

{ strcpy(sub_topic, "/sys/k1l0mrfjkHG/control_unit_1/thing/service/property/set"); res = aiot_mqtt_sub(mqtt_handle, sub_topic, NULL, 1, NULL); if (res < 0) { printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res); return -1; } } 

/* 创建一个单独的线程, 专用于执行aiot_mqtt_process, 它会自动发送心跳保活, 以及重发QoS1的未应答报文 */

g_mqtt_process_thread_running = 1; res = pthread_create(&g_mqtt_process_thread, NULL, demo_mqtt_process_thread, mqtt_handle); if (res < 0) { printf("pthread_create demo_mqtt_process_thread failed: %d\n", res); return -1; } /* 创建一个单独的线程用于执行aiot_mqtt_recv, 它会循环收取服务器下发的MQTT消息, 并在断线时自动重连 */ g_mqtt_recv_thread_running = 1; res = pthread_create(&g_mqtt_recv_thread, NULL, demo_mqtt_recv_thread, mqtt_handle); if (res < 0) { printf("pthread_create demo_mqtt_recv_thread failed: %d\n", res); return -1; } return 0; }

同步设备数据到MQTT服务器

demo_mqtt_send_handler(SET_STRAIGHT_TO_SEND); demo_mqtt_send_handler(SET_LEFT_TO_SEND); demo_mqtt_send_handler(SET_RIGHT_TO_SEND); demo_mqtt_send_handler(SET_BACK_TO_SEND); demo_mqtt_send_handler(SET_STOP_TO_SEND); demo_mqtt_send_handler(SET_WATER_TO_SEND); demo_mqtt_send_handler(SET_UPPERLEFT_TO_SEND); demo_mqtt_send_handler(SET_LOWERLEFT_TO_SEND); demo_mqtt_send_handler(SET_UPPERRIGHT_TO_SEND); demo_mqtt_send_handler(SET_LOWERRIGHT_TO_SEND);

设置控制器参数

set_controller(Upperleft, 5.0); set_controller(Lowerleft, 5.0); set_controller(Upperright, 5.0); set_controller(Lowerright, 5.0); set_controller(left, 1.0); set_controller(right, 1.0); set_controller(c8, 1.0);

GPIO线程

// GPIO线程函数 void *gpio_thread(void *arg) { while (1) { int value = 0; set_gpio(c9, 114); value = read_gpio_value(c9_GPIO_VALUE); pthread_mutex_lock(&gpio_mutex); printf("Value: %d\n", value); if (value == -1) { printf("Error occurred while reading file: %s\n", c9_GPIO_VALUE); } if (value == 0) { cspray_water(); } pthread_mutex_unlock(&gpio_mutex); usleep(100000); } return NULL; } // 创建GPIO线程 if (pthread_create(&gpio_tid, NULL, gpio_thread, NULL) != 0) { perror("pthread_create for gpio_thread"); goto to_end; }

MQTT线程

// MQTT线程函数 void *mqtt_thread(void *arg) { while (1) { pthread_mutex_lock(&mqtt_mutex); if (controller.Upperleft.flag == 1) { demo_mqtt_send_handler(SET_UPPERLEFT_TO_SEND); controller.Upperleft.flag = 0; } if (controller.Lowerleft.flag == 1) { demo_mqtt_send_handler(SET_LOWERLEFT_TO_SEND); controller.Lowerleft.flag = 0; } if (controller.Upperright.flag == 1)

{ demo_mqtt_send_handler(SET_UPPERRIGHT_TO_SEND); controller.Upperright.flag = 0; } if (controller.Lowerright.flag == 1) { demo_mqtt_send_handler(SET_LOWERRIGHT_TO_SEND); controller.Lowerright.flag = 0; } if (controller.go_straight.flag == 1)

{ demo_mqtt_send_handler(SET_STRAIGHT_TO_SEND); controller.go_straight.flag = 0;

} if (controller.turn_left.flag == 1) { demo_mqtt_send_handler(SET_LEFT_TO_SEND);

controller.turn_left.flag = 0; } if (controller.turn_right.flag == 1) { demo_mqtt_send_handler(SET_RIGHT_TO_SEND); controller.turn_right.flag = 0;

} if (controller.go_back.flag == 1) { demo_mqtt_send_handler(SET_BACK_TO_SEND);

controller.go_back.flag = 0; } if (controller.go_stop.flag == 1) { demo_mqtt_send_handler(SET_STOP_TO_SEND);

controller.go_stop.flag = 0; } if (controller.spray_water.flag == 1) { demo_mqtt_send_handler(SET_WATER_TO_SEND); controller.spray_water.flag = 0; } pthread_mutex_unlock(&mqtt_mutex); usleep(100000); } return NULL; } // 创建MQTT线程 if (pthread_create(&mqtt_tid, NULL, mqtt_thread, NULL) != 0) { perror("pthread_create for mqtt_thread"); goto to_end; }

4、应用编译

(1)拷贝car.tar.bz2到开发环境/home/elf/work目录下解压

elf@ubuntu:~/work$ tar xvf car.tar.bz2

(2)执行环境变量

elf@ubuntu:~/work$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

(3)编译

elf@ubuntu:~/work$ cd car/ elf@ubuntu:~/work/car$ make

(4)拷贝mqtt_test到开发板/home/root路径下

root@ELF1:~# cp /run/media/sda1/mqtt_test ./

设项目测试

1、设置Wi-Fi连接

root@ELF1:~# elf1_cmd_wifi.sh -i 8723 -s 账号 -p 密码

2、执行应用

root@ELF1:~# ./mqtt_test

wKgZO2d49C6Aam45AHxoz3BXuzA759.png

此时可以通过Web界面下发指令控制小车运行

wKgZO2d49DyAV5qvAADTPySxEk4533.png

Web界面将实时显示小车的运行状态

wKgZPGd49FSAVFJTAASkfkpRBm0873.png

至此,就已完成了对智能消防车这一开源项目的详细介绍。衷心希望这份指南能为有志于学习嵌入式技术的小伙伴们提供实质性的帮助与启发。

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

    关注

    6037

    文章

    44569

    浏览量

    636186
  • 嵌入式
    +关注

    关注

    5086

    文章

    19141

    浏览量

    305975
  • 开发板
    +关注

    关注

    25

    文章

    5074

    浏览量

    97661
  • 智慧城市
    +关注

    关注

    21

    文章

    4269

    浏览量

    97436
  • 开源项目
    +关注

    关注

    0

    文章

    38

    浏览量

    7208
收藏 人收藏

    评论

    相关推荐

    基于单片机的新型消防车的研究

    系统功能要求1. 设计并制作消防车的车体结构、车轮的制作、电机的选择安装等;2. 设计并制作可完成人机交互工作的控制电路板;3. 消防车上安装有摄像头,在一些特定场所消防人员难以进入到事故现场,不仅
    发表于 07-31 22:00

    毕业设计:新型消防车研究

    的提高了工作效率。 2、消费车上安装有摄像头,在一些特定场所消费人员难以进入到事故现场,在消防车上安装摄像头,不仅可以实时监测事故现场的状况,而且可以通过无线模块实现对消防车的远程控制。以前没做过无线视频传输,我想问下怎么实现摄像头的数据通过无线模块存到单片机发送到电脑上
    发表于 03-05 18:18

    基于JetsoN Nano开发套件的开源智能车项目

    JetBot 项目是NVIDIA(英伟达)基于JetsoN Nano开发套件而设计的一款开源智能车项目, 为初步上手Jetson Nano,并渴望做出自己的第一个AI
    发表于 11-04 07:40

    基于EPC2000的消防车控制系统

    基于EPC2000的消防车控制系统 现场环境是影响火灾救援工作的一个重要因素之一,如现场的气温、风向、风速等。在以往,现场环境的测量往往是独立的,而且
    发表于 03-26 17:17 41次下载

    简析倾角传感器在消防车的云梯的作用

    随着传感技术和自动控制技术的发展,消防车辆的智能化水平在不断升高。9月8日,新疆阿勒泰市政府便斥资200多万元购置了一辆32米的云梯消防车。同时,这也是阿勒泰地区首辆云梯消防车。一般来
    发表于 09-22 16:11 5次下载

    特斯拉的驾驶系统看不到消防车

    在洛杉矶郡405高速公路上,一辆特斯拉Model S撞上了停在路边的消防车。司机告诉消防部门,当时汽车处于Autopilot模式。这次事故再次表明了半自动驾驶系统的缺陷。目前,能让汽车在特定条件
    的头像 发表于 01-29 10:52 3885次阅读

    特斯拉再次撞上消防车,自动驾驶系统就这么的不安全吗?

    在上周六,美国当地时间8月25日,一辆特斯拉Model S在加州圣何塞的101公路上,撞上一辆停在路边的消防车,车内两名乘客受了轻伤,37岁的司机因涉嫌酒后驾车被捕。这起事故,是今年特斯拉第三次撞上消防车了,特斯拉为啥老喜欢撞消防车
    发表于 08-30 15:26 1696次阅读

    国产特种消防车是否可以采用国产底盘

    国产三一重工48/62米大跨度举高喷射消防车,中联重科DG113型登高平台消防车,以及徐工大跨距石化专用举喷消防车JP62。这三种消防车中,整车重量最大、高平台最大作业高度最高的中联重
    的头像 发表于 05-06 14:11 7416次阅读

    世界上第一辆电动消防车,奥地利声称价值600万美元

    电气化正在接管交通的每一个环节,现在甚至连消防车也开始电动了。美国新泽西州的门罗公园消防部门正计划购入一辆价值600万美元的电动消防车
    的头像 发表于 12-13 14:04 3232次阅读

    无线电控制开源项目

    电子发烧友网站提供《无线电控制开源项目.zip》资料免费下载
    发表于 07-08 09:22 3次下载
    无线电控制<b class='flag-5'>车</b><b class='flag-5'>开源</b><b class='flag-5'>项目</b>

    用于诊断皮尔斯消防车消防

    想跟大家分享一个PicoScope的截图,诊断非传统汽车获取的波形图。我是一名工程验证的工程师,我们城市拥有大约200辆的消防相关车辆和约120辆救护车。此次截图用于诊断皮尔斯消防车消防梯,使用者抱怨说梯子会在控制杆回到原位后
    的头像 发表于 09-15 11:46 854次阅读

    WIFI Nodemcu移动控制开源项目

    电子发烧友网站提供《WIFI Nodemcu移动控制开源项目.zip》资料免费下载
    发表于 10-27 09:27 0次下载
    WIFI Nodemcu移动控制<b class='flag-5'>车</b><b class='flag-5'>开源</b><b class='flag-5'>项目</b>

    泡沫消防车电控系统方案

    必备的装备。泡沫消防车电控系统以长沙硕博电子科技股份有限公司的7寸显示屏SPD-070-Bx、IO模块SPC-SDIO-S1212、硅胶面板SPM-KEYP-A12为核心,通过CAN总线进行通信,辅以整
    的头像 发表于 12-14 15:24 1015次阅读
    泡沫<b class='flag-5'>消防车</b>电控系统方案

    ElfBoard开源项目|“智慧光伏”开源项目技术文档

    【基于ELF1开发板完成的“智慧光伏”项目】“智慧光伏”项目能够智能追踪阳光的移动轨迹。通过内置的光敏传感器和智能控制系统,实时感知周围光源的变化,并驱动太阳能板精准调整角度,确保每一
    的头像 发表于 10-11 15:52 419次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>开源</b><b class='flag-5'>项目</b>|“智慧光伏”<b class='flag-5'>开源</b><b class='flag-5'>项目</b>技术文档

    5G 联网赋能消防车调度,推动高效智能消防救援

    当熊熊烈火肆虐,每一秒都关乎生命与财产的安危之际,消防车借助5G工业路由器构建的联网,可以实时传输火灾现场的高清画面,让指挥中心如临现场;能够精准定位,迅速规划最优救援路径;与多辆消防车协同作战
    的头像 发表于 12-18 16:26 252次阅读
    5G <b class='flag-5'>车</b>联网赋能<b class='flag-5'>消防车</b>调度,推动高效<b class='flag-5'>智能</b><b class='flag-5'>消防</b>救援