亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Arduion DIY时间捕捉手套

发布时间:2021-04-29
分享到:

基于Arduion DIY时间捕捉手套

发布时间:2021-04-29
分享到:

通过使用Arduino、加速度计和LED制作时间手套,通过倾斜双手,使其看起来像是在时间上静止,并在时间前后进行移动。

通过以特定频率闪烁LED来创建一种幻觉。计划将时间段设置为等于重复自身的时间段。如,在使用风扇的情况下,只要叶片到达特定位置,我们就会闪烁此灯。就像拍摄对象的时间点快照一样。如果频率等于旋转风扇的频率,我们将看到风扇静止不动,并感觉到它被及时冻结了。如果频率高一点,我们会感觉风扇向后旋转。如果频率稍低,我们会感觉风扇在向前旋转。您所要做的就是调整物体频率的频率闪烁LED。

所需组件:

  • Arduino
  • 加速度计
  • 光源–尝试使用5V LED和Neopixel 环
  • 9V电池

 

一、步骤:

1、连接9V电池或DC电源适配器。此电压输入连接到7805稳压器,该稳压器会将未稳压的7到32V的DC电压转换为5V的DC电源。然后将这5 V电源连接到Arduino和指示灯LED以及加速度计。

二、PCB布局、焊接

三、编码

1、Arduino LED项目的代码。先调用运行代码所需的库和头文件。由于使用的是neo pixel库,因此必须包括其头文件,引脚配置以及用于控制neopixel环的库。

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h>
#endif
#define PIN        9 
#define NUMPIXELS 16 
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int x,y,ontime,offtime;

void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  pixels.begin();
  Serial.begin(9600);
  
  lightnormal(); // 打开灯5分钟,然后开始闪烁
  delay(5000);
}

void loop() {

y=map(analogRead(A1), 250, 410, 10, 100);
Serial.print("Y = ");
Serial.println(y);

ontime = y/128;
offtime = y;
lightup();
}


void lightup()
{
  pixels.clear();
  pixels.show();
  delay(offtime);
  pixels.fill(pixels.Color(255, 255, 255), 0, 15);
  pixels.show();
  delay(ontime);

/* // 连接到D9的LED代码(如果您不使用Neopix环)
  digitalWrite(D9, HIGH);
  delay(ontime);
  digitalWrite(D9, LOW);
  delay(offtime);
  */
}

void lightnormal()
{
  pixels.fill(pixels.Color(120, 120, 120), 0, 15);
  pixels.show();

/* // 连接到D9的LED代码(如果您不使用Neopix环)
  digitalWrite(D9, LOW);
  */ 
}
(不使用Neopixel LED环并与普通LED一起使用,则无需使用任何这些代码) 

2、带LED的Arduino项目–代码说明
声明4个变量X,Y,ON时间和OFF时间,在设置功能中,将初始化neopixel振铃,开始串行通信并打开LED或振铃5秒钟,然后开始闪烁。 

void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  pixels.begin();
  Serial.begin(9600);
  
  lightnormal(); // 打开灯5分钟,然后开始闪烁
  delay(5000);
}

在循环中,该功能将获取连接加速度计输出的引脚A1的模拟读数(其值在250到410之间变化),并将其映射到10到100之间的值。

y=map(analogRead(A1), 250, 410, 10, 100);

然后将该值除以128,然后按时存储在变量中,将值y保存在时间变量中。 

ontime = y/128;
offtime = y;

打开和关闭neopixel环上的LED,其开启时间和关闭时间的值与关闭延迟相同。

在点亮功能中,将打开环网中的所有LED并等待一段时间(通常为几毫秒)。之后,它将清除所有LED并等待一段时间。这整个过程一次又一次地重复。

void lightup()
{
  pixels.clear();
  pixels.show();
  delay(offtime);
  pixels.fill(pixels.Color(255, 255, 255), 0, 15);
  pixels.show();
  delay(ontime);

/* // 连接到D9的LED代码(如果您不使用Neopix环)
  digitalWrite(D9, HIGH);
  delay(ontime);
  digitalWrite(D9, LOW);
  delay(offtime);
  */
}
唯一改变的是接通时间和断开时间,它们与加速度计的Y输出值成正比。这就是通过倾斜手来改变闪烁频率的方式。 

正常照明功能将打开新像素环的所有LED。

3、Arduino LED项目的编码技巧

如果使用的是LED而不是新像素环,则可以使用这些代码代替此新像素代码。

在本节中,仅需进行调整。

y=map(analogRead(A1), 250, 410, 10, 100);
可以使用这些值,一旦知道正确的频率,就可以微调和调整这些值。首先,将打开时间和关闭时间设置为y。但经过如此多的试验,发现最好将导通时间的值设置得尽可能低。将其设置为与时间相比较低的值将获得更清晰的图像。这就是LED灯Arduino项目的代码。

四、上传代码

选择正确的端口和板,上传代码。

五、组装

将所有东西连接到手套了。可以使用胶枪将neopixel环固定在手套的手掌中,并将板子和电池固定在手套的背面。

六、视频演示

 

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论