×

DIY Arduino转向信号自行车安全背心

消耗积分:2 | 格式:zip | 大小:0.71 MB | 2022-11-15

王凯

分享资料个

描述

“LightVest”是一款 开源的 Arduino转向信号自行车安全背心,旨在成为一种可穿戴技术。该产品是一种自行车套装,旨在增加骑车人的能见度,尤其是在夜间。此外,改善骑自行车者与路上其他驾车者和行人的沟通和意图。

背景背景:

这是一个有点奇怪的挑战。我想看看我们如何将项目变成解决现实世界问题的“产品”。自举500美元的投资。4 周后,介绍 LightVest。

注意:本项目是为您改进和开发而设计的。随意贡献,并探索更多用例。(下面的 GitHub 回购)

现在我们已经解决了所有问题,让我们开始吧!

LightVest 概述

总体而言,LightVest 是一种由微控制器控制的灯带,可安全地应用于可穿戴织物,例如背心。从这一点出发,我们可以在这个想法的基础上,使其防风雨、轻便、便携,甚至可以与其他设备通信。

特征

  • 轻便的防风雨 LED 背心(带有 IP67 级 LED)
  • 转向信号灯– 完全可编程的 RGB LED
  • 用于控制灯光的无线遥控器(带有四个完全可定制的按钮)
  •  连接到您的自行车的自行车支架
  • 开/关开关按钮
  • Go Hand's Free 使用内置加速度计- 控制来自自行车把手的转向信号。
  • SmartMode – 通过电话发送数据并跟踪您的旅程

LightVest 包括:

  • 背面的菱形指示器
  • 肩部前灯条

下表解释了每个 LED 段的功能:

pYYBAGNy3i-AT9xRAAA_ojchRLA874.png
转向信号指示的基本功能概述
 

详细来说,Bike Remote 和 LED Bike Vest 有两个 Arduino(微控制器),它们通过蓝牙相互通信。

LED背心的工作原理是使用Arduino根据用户的动作控制一组LED灯条(WS2812B)。Arduino 还可以通过 LED 灯条控制可单独寻址的 RGB LED。

自行车遥控器有四个可定制的按钮。当按下按钮时,会向 LightVest 的 Arduino 发送一个值,根据接收到的特定值触发 LED 灯条/WS2812B 以特定方式点亮。

示例 #1:

动作:当您按下遥控器的右按钮时

通信:值“R”(代表 Right 通过蓝牙发送到 LED Vest 微控制器)

结果:LED 灯条将点亮 LED 灯条的右箭头。

但您可能也想知道,“这意味着您每次需要转弯时都需要按下遥控器……如果我骑自行车怎么办?!”

这就是陀螺仪(MPU6050)发挥作用的地方。使用 MPU6050 的相对位置/方向,我们可以确定自行车是左转还是右转。因此,基于上述相同的原理,我们可以将遥控器安装到自行车把手上并做同样的事情。

示例 #2

行动:当您向右转动车把时。

微控制器:陀螺仪检测向右方向的相对变化。值“R”(代表右)通过蓝牙发送到 LED Vest 微控制器。

结果:LED 灯条将点亮 LED 灯条的右箭头。

您可以通过查看由人类手势控制的机械臂来了解更多关于加速度计如何工作的信息,这将在这方面进行更详细的介绍。

零件清单侧重于 Prototype 的面包板实现,这是开发/实验背心的理想选择。有关零件清单的更多详细信息,请访问Building Lightvest 原创文章

工作原理 - WS2812B LED 灯条。

仔细看,WS2812B LED 灯条由 5050 个 RGB LED 灯组成,集成了一个更小的 WS2812B LED 驱动器。

由于它由 RGB 灯组成,我们可以控制 RGB(红、绿、蓝)十六进制值的强度,以提供我们喜欢的颜色色调以及要点亮的单个 LED。

令人兴奋的部分是我们可以只用数据线上的一个 Arduino 引脚来控制整个条带。此外,当前 LED 的数据输出焊盘连接到下一个 LED 的输入焊盘。

注意:具有讽刺意味的是(尽管很漂亮),所有 LED 都依赖于一条线(5V、DATA、GND)。单个 LED 的任何破损/问题都会影响 LED 的其余部分。

LED线路的分类:

  • 5V
  • 数据(迪)
  • 接地

每个 LED 在全亮度下消耗 ~ 20mA。鉴于此 LightVest 有多达 90 个 LED。我们需要在 5V 电压下运行约 2000maH。

对于较少数量的 LED,Arduino 5V 可以处理这个问题。

对于此实施,我们使用 5V、22000maH RC 电池作为外部电源。

下图显示了 Arduino 设置和 LED 灯条,以生成如下所示的彩虹 LED 灯条。

注意:在 LED 和灯带之间使用了一个 330 欧姆的电阻器,以减少该线路上的噪声,以避免颜色出现故障。

此外,5V 和 GND(接地)之间的 100uF 以平滑电源。

笔记:

  • LED灯条是IP67防水保护的LED灯条,可以承受很好的暴雨。但是,请勿尝试浸入水中。
  • 虽然 WS2812B/LED 灯带非常灵活,但请避免反复弯曲灯带,这可能会导致连接松动/断裂。

您可以在下面的示例中找到 LED 灯条 Neo-Pixel 的代码。有关 LED 灯条的更多上下文和其他用途,请访问带有转向信号指示灯的电动滑板

切割 WS2812B LED 灯条

 
pYYBAGNy3jiAfp1yAAEreOtY9CI113.jpg
在连接器焊盘处切割 LED 灯条
 

这个 LED 灯条需要以某种方式连接到可穿戴的衣服上。然而,LED 灯条和电子设备需要以某种方式拆卸以进行清洗。防水且足够小,可以将电子设备安全地放入背心。

幸运的是,这些是灵活的 LED 灯条,可以切割成任何长度并重新连接成任何形状。请记住,重新连接 LED 灯条的主要方法有两种:

  • 焊接
  • 使用夹式连接器

无论哪种方式都很好。然而,对于这个版本,夹子连接器用于重新连接 LED 灯条,因为它是一种更清洁的解决方案,只需简单的夹子即可。

 
poYBAGNy3juAXNZeAACjlesZMFA950.jpg
LightVest - 重新连接 LED 灯条
 

LightVest – 面包板实现:

LightVest 包括:

  • LED 自行车背心 – LED 灯条,我是 Arduino
  • 自行车套装遥控器 - 通过蓝牙控制 LED 灯条

下图显示了面包板的实现。

 
pYYBAGNy3j6AcgsUAAEqQGtY4vY484.png
LightVest 遥控器的 Fritzing 图 - (面包板)
 

完成所有设置后,当您按下四个按钮之一(每个按钮代表一个方向)时,遥控器代码将用作具有四个按钮的无线遥控器。

自行车背心遥控器

对应的 LED 灯会亮起,表示按键已成功按下。结果,将使用 HC05 蓝牙模块通过蓝牙将值从远程 Arduino 发送到 Bike Vest Arduino。

 
poYBAGNy3kKACy-WAAEV_EeoxFY544.png
带 MPU6050 的 LightVest 遥控器的 Fritzing 图 - (面包板)
 

自行车背心套装 - 代码概述

LED Vest 接收远程发送的值。根据提供的值:

L - 左

D – 向下

U - 向上

R – 右

LightVest 远程 Arduino 将调用与接收到的值相关的函数。例如值 'L' 调用 stripLeft(); 功能

电池,安全

当谈到 LightVest 时,牢记安全很重要。因此,电池需要足够小以适合自行车背心,并且足够耐用以承受剧烈跌落和外部撞击。

Li-Po 是最初的选择。它小巧紧凑。但它落下的地方是它没有太多的保护,如果它被损坏或刺破,可能会成为一个问题。

作为替代方案,Lion RC 电池组被用作次佳替代方案。它坚固耐用,可以承受更恶劣的条件。我们必须妥协的唯一因素是尺寸。因此,LED 遥控器和 Suit 电子设备的占用空间会稍大一些。

但是,为了保持一定的安全水平,这是值得的。如果您还有其他选择,请在评论中留下。

设计 – 背心组装

LightVest 是完全可定制的,可以应用于选择的可穿戴设备。

注意:请记住隐藏任何明线并使用防风雨材料,例如 IP67 防风雨涂层 LED 灯条。在您对背心的耐候性完全满意之前,请避免在雨天使用这款 LightVest。

您可以使用 3D 打印外壳保护电路,并用塑料套管覆盖裸露的 L 型连接器,使其免受“菱形”指示器的影响。

LED灯条是如何可拆卸的?

对于这个初始原型,我们的目标是让灯带易于拆卸,以便清洁衣物。考虑到这一点,通过反复试验——最好的方法是使用 Velcro 紧固件将条带固定到位。

4 个放置的 Velcro 紧固件可以环绕 LED 指示灯以将指示灯固定到位。

3D 打印和缩小外形

如果您希望 3D 打印相同的外壳,您可以在下面找到指向 .STL 文件的链接:

PCB设计

 
poYBAGNy3keAFNiXAAEvQxLBr2A805.jpg
LightVest PCB 组装
 

PCB 旨在最终确定我们对面包板实施的了解并保持所有部件就位。如果您想创建自己的,可以在此处获取 Light Vest PCB 的原理图。(Fritzing & Eagle CAD 文件)。

使用 JLCPCB 构建您自己的 PCB:https ://jlcpcb.com/DEK

代码

下面的代码概述了 LightVest 如何工作的基本功能,以及如何对 LED 灯条进行编程。以及与遥控器通信:

LED 套装

#include 
#ifdef __AVR__
#include  // Required for 16 MHz Adafruit Trinket
#endif
#define LED_BACK    5
#define LED_LEFT    4
#define LED_RIGHT   6
// How many NeoPixels are attached to the Arduino?
#define LED_COUNT 52 // Define the number of LEDs in the strip
char state = 0; // Changes value from ASCII to char
int light_delay = 50; //How long to keep the LED on for (ms)

将 NeoPixel 条带声明为对象

// Declare our NeoPixel strip_back object:
Adafruit_NeoPixel strip_back(LED_COUNT, LED_BACK, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_left(LED_COUNT, LED_LEFT, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_right(LED_COUNT, LED_RIGHT, NEO_GRB + NEO_KHZ800);

初始化 NeoPixels 并设置 LED 灯条的亮度。将串口设置为波特率 9600 以启动蓝牙通信

void setup() {
// These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
// Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
strip_back.begin();           // INITIALIZE NeoPixel strip_back object (REQUIRED)
strip_back.show();            // Turn OFF all pixels ASAP
strip_back.setBrightness(150); // Set BRIGHTNESS to about 1/5 (max = 255)
strip_left.begin();           // INITIALIZE NeoPixel strip_back object (REQUIRED)
strip_left.show();            // Turn OFF all pixels ASAP
strip_left.setBrightness(150); // Set BRIGHTNESS to about 1/5 (max = 255)
strip_right.begin();           // INITIALIZE NeoPixel strip_back object (REQUIRED)
strip_right.show();            // Turn OFF all pixels ASAP
strip_right.setBrightness(150); // Set BRIGHTNESS to about 1/5 (max = 255)
Serial.begin(9600);
delay(1000);
}

机械臂实现类似,在循环部分,我们不断评估是否有任何新数据来自遥控器的蓝牙。如果为真,我们将传入变量存储在“状态变量”中。根据发送的值,这将触发 LED 灯条以指示左、右、刹车或危险灯。

// loop() function -- runs repeatedly
void loop() {
if (Serial.available() > 0) { // Checks whether data is comming from the serial port
state = Serial.read(); // Reads the data from the serial port
Serial.print(state); // Prints out the value sent
//Indcate Left
if (state == 'L') {
leftBlink();
delay(light_delay);
}
//Indicate Right
if (state == 'R') {
rightBlink();
delay(light_delay);
}
}
}

资源

访问 Git 上的完整存储库以访问以下内容:

代码

  • LightVest – 自行车遥控器
  • LightVest – 背心

链接到原理图

  • LightVest – 自行车遥控器
  • LightVest – 背心

图表(Fritzing)

  • LightVest – 自行车遥控器
  • LightVest – 背心

Git 回购

  • 带有所有链接的回购

轻便背心链接:lightvest.io

结论

 

文章写到此结束。如果您想了解 LightVest 是如何启动的,包括挑战和业务重心。这是LightVest 创业文章(从商业角度来看)。

LightVest 的目的是成为一个可以构建和创新的开源项目。您看到的当前版本是 V1.0。虽然,它本身很实用。仍有相当大的空间可以改进。

如:

  • 占用空间更小的遥控器
  • 可穿戴技术占用空间更小
  • 移除 LED 灯条的新设计
  • 灯光指示功能
  • 添加很酷的新功能

如果您想构建自己的,或贡献更多功能,请随时在此 repo 上构建。我们可以进一步优化什么会很有趣!

最后,支持我在 Patreon 上的未来项目


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

评论(0)
发评论

下载排行榜

全部0条评论

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