通過使用Arduino、加速度計(jì)和LED制作時(shí)間手套,通過傾斜雙手,使其看起來像是在時(shí)間上靜止,并在時(shí)間前后進(jìn)行移動。
通過以特定頻率閃爍LED來創(chuàng)建一種幻覺。計(jì)劃將時(shí)間段設(shè)置為等于重復(fù)自身的時(shí)間段。如,在使用風(fēng)扇的情況下,只要葉片到達(dá)特定位置,我們就會閃爍此燈。就像拍攝對象的時(shí)間點(diǎn)快照一樣。如果頻率等于旋轉(zhuǎn)風(fēng)扇的頻率,我們將看到風(fēng)扇靜止不動,并感覺到它被及時(shí)凍結(jié)了。如果頻率高一點(diǎn),我們會感覺風(fēng)扇向后旋轉(zhuǎn)。如果頻率稍低,我們會感覺風(fēng)扇在向前旋轉(zhuǎn)。您所要做的就是調(diào)整物體頻率的頻率閃爍LED。
所需組件:
Arduino
加速度計(jì)
光源–嘗試使用5V LED和Neopixel 環(huán)
9V電池
一、步驟:
1、連接9V電池或DC電源適配器。此電壓輸入連接到7805穩(wěn)壓器,該穩(wěn)壓器會將未穩(wěn)壓的7到32V的DC電壓轉(zhuǎn)換為5V的DC電源。然后將這5 V電源連接到Arduino和指示燈LED以及加速度計(jì)。
二、PCB布局、焊接
三、編碼
1、Arduino LED項(xiàng)目的代碼。先調(diào)用運(yùn)行代碼所需的庫和頭文件。由于使用的是neo pixel庫,因此必須包括其頭文件,引腳配置以及用于控制neopixel環(huán)的庫。
#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環(huán))
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環(huán))
digitalWrite(D9, LOW);
*/
}
(不使用Neopixel LED環(huán)并與普通LED一起使用,則無需使用任何這些代碼)
2、帶LED的Arduino項(xiàng)目–代碼說明
聲明4個(gè)變量X,Y,ON時(shí)間和OFF時(shí)間,在設(shè)置功能中,將初始化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);
}
在循環(huán)中,該功能將獲取連接加速度計(jì)輸出的引腳A1的模擬讀數(shù)(其值在250到410之間變化),并將其映射到10到100之間的值。
y=map(analogRead(A1), 250, 410, 10, 100);
然后將該值除以128,然后按時(shí)存儲在變量中,將值y保存在時(shí)間變量中。
ontime = y/128;
offtime = y;
打開和關(guān)閉neopixel環(huán)上的LED,其開啟時(shí)間和關(guān)閉時(shí)間的值與關(guān)閉延遲相同。
在點(diǎn)亮功能中,將打開環(huán)網(wǎng)中的所有LED并等待一段時(shí)間(通常為幾毫秒)。之后,它將清除所有LED并等待一段時(shí)間。這整個(gè)過程一次又一次地重復(fù)。
void lightup()
{
pixels.clear();
pixels.show();
delay(offtime);
pixels.fill(pixels.Color(255, 255, 255), 0, 15);
pixels.show();
delay(ontime);
/* // 連接到D9的LED代碼(如果您不使用Neopix環(huán))
digitalWrite(D9, HIGH);
delay(ontime);
digitalWrite(D9, LOW);
delay(offtime);
*/
}
唯一改變的是接通時(shí)間和斷開時(shí)間,它們與加速度計(jì)的Y輸出值成正比。這就是通過傾斜手來改變閃爍頻率的方式。
正常照明功能將打開新像素環(huán)的所有LED。
3、Arduino LED項(xiàng)目的編碼技巧
如果使用的是LED而不是新像素環(huán),則可以使用這些代碼代替此新像素代碼。
在本節(jié)中,僅需進(jìn)行調(diào)整。
y=map(analogRead(A1), 250, 410, 10, 100);
可以使用這些值,一旦知道正確的頻率,就可以微調(diào)和調(diào)整這些值。首先,將打開時(shí)間和關(guān)閉時(shí)間設(shè)置為y。但經(jīng)過如此多的試驗(yàn),發(fā)現(xiàn)最好將導(dǎo)通時(shí)間的值設(shè)置得盡可能低。將其設(shè)置為與時(shí)間相比較低的值將獲得更清晰的圖像。這就是LED燈Arduino項(xiàng)目的代碼。
四、上傳代碼
選擇正確的端口和板,上傳代碼。
五、組裝
將所有東西連接到手套了??梢允褂媚z槍將neopixel環(huán)固定在手套的手掌中,并將板子和電池固定在手套的背面。
責(zé)任編輯:pj
-
led
+關(guān)注
關(guān)注
240文章
22905瀏覽量
650079 -
穩(wěn)壓器
+關(guān)注
關(guān)注
24文章
4163瀏覽量
92987 -
Arduino
+關(guān)注
關(guān)注
187文章
6453瀏覽量
185915
發(fā)布評論請先 登錄
相關(guān)推薦
評論