日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣用Arduino將手勢(shì)傳感器和LED環(huán)組合

454398 ? 來(lái)源:工程師吳畏 ? 2019-08-14 10:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

步驟1:組件

1。 Arduino UNO

2。 usb cable

3. APDS9960手勢(shì)傳感器

4。 24 led neopixel led ring

5. 雄性 - 男性,男性 - 男性面包板電纜

6。 面包板

7. LED環(huán)的5 V電源(我正在使用4節(jié)電池)

8 。 要將新像素環(huán)連接到面包板,您需要將三個(gè)公引腳焊接到它:GND,PWR和控制引腳。為此你需要一個(gè)烙鐵和助焊劑

這里的主要部件是APDS-9960手勢(shì)傳感器和24個(gè)新像素環(huán)。您可以根據(jù)需要切換不同的arduinos,usb線纜電源和面包板。

步驟2:組裝和上傳

匯編

在開(kāi)始之前,請(qǐng)確保您擁有所有組件。我們將有一些很好的步驟:)我還將Fritzing原理圖作為圖片和fritzing格式附加。

1。將3個(gè)公引腳焊接到新像素環(huán)(GND,PWR,控制引腳)

2。將新像素環(huán)連接到面包板上

3。將APDS9960傳感器連接到面包板

4。接地:電池組,arduino UNO,APDS9960和neopixel到面包板地面

5。連接電源:arduino UNO 3V至APDS9960電源引腳,neopixel至電池組電源

6。將neopixel控制引腳連接到arduino D6引腳

7。將APDS9960的SDA和SCL分別連接到A4和A5

8。將APDS9960中斷引腳連接到arduino D2

代碼上傳

首先,您需要下載并安裝必要的arduino庫(kù):

1。 Neopixel ring library

2。手勢(shì)傳感器庫(kù)

如果您不知道如何安裝arduino庫(kù),請(qǐng)查看本教程。

在下一節(jié)中,我將把代碼直接嵌入到本教程中,所以如果你愿意,你可以從那里復(fù)制并粘貼它。

最后使用usb線將arduino連接到電腦,將1.5伏電池放入電池組,然后將草圖上傳到arduino。

第3步:它是如何工作的?

在最后一部分中,我們將學(xué)習(xí)如何將這些組件組合在一起,如何使用它們的庫(kù)以及我如何使用它們構(gòu)建我的代碼:

首先讓我們快速瀏覽一下傳感器和我們將使用的neopixel庫(kù)API方法

1 。來(lái)自adafruit的 Neopixel API

從這個(gè)庫(kù)我們將使用控制單個(gè)led顏色的方法并應(yīng)用它們

- 包括庫(kù):

#include

- 聲明庫(kù)

#define NEOPIXED_CONTROL_PIN 6

#define NUM_LEDS 24

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800);

- 初始化

#typically inside the setup block

void setup() {

strip.begin();

# maybe some other stuff here # 。..。

}

- 點(diǎn)亮單個(gè)像素然后應(yīng)用所有修改條帶(以某種方式呈現(xiàn))

# set up pixel 0 to be red

strip.setPixelColor(0, strip.Color(255, 0, 0));

# set up pixel 1 to be green

strip.setPixelColor(1, strip.Color(0, 255, 0));

# set up pixel 2 to be blue

strip.setPixelColor(2, strip.Color(0, 0 255));

strip.show();

2。 APDS 9960手勢(shì)傳感器

從這個(gè)庫(kù)我們將使用“讀取手勢(shì)”功能。此功能將能夠區(qū)分左右,上下,近遠(yuǎn)命令。這里有一個(gè)技巧,我們不會(huì)連續(xù)詢問(wèn)傳感器的最后一個(gè)手勢(shì)。電路板能夠通過(guò)已發(fā)現(xiàn)手勢(shì)的中斷“ping”。

- 包括庫(kù),類似于neopixel

- 將庫(kù)聲明為中斷引腳,和中斷標(biāo)志

#define APDS9960_INT 2

SparkFun_APDS9960 apds = SparkFun_APDS9960();

int isr_flag = 0;

- 初始化庫(kù),通常在設(shè)置函數(shù)內(nèi)

void setup()

{

# declare the interrupt pin as INPUT and attach a function to it

pinMode(APDS9960_INT, INPUT);

attachInterrupt(0, interruptRoutine, FALLING);

if ( apds.init() && apds.enableGestureSensor(true)) {

Serial.println(“APDS-9960 initialization complete”);

} else {

Serial.println(“Something went wrong during APDS-9960 init!”);

}

# initialize other things maybe

}

- 定義中斷函數(shù),這里我們只設(shè)置一個(gè)flag

void interruptRoutine() {

isr_flag = 1;

}

- 在循環(huán)函數(shù)內(nèi)部定期檢查標(biāo)志以查看是否已檢測(cè)到手勢(shì)

void loop()

{

# check the flag

if( isr_flag == 1 ) {

# if the flag is set, remove the interrupt, make the necessary processing inside handleGesture() function

# and then reset the flag and reattach the interrupt

detachInterrupt(0);

handleGesture();

isr_flag = 0;

attachInterrupt(0, interruptRoutine, FALLING);

}

# some other code here maybe

}

- 定義handleGesture()函數(shù)我們?cè)谀睦锟梢砸笞詈笠粋€(gè)手勢(shì)

void handleGesture() {

# if no gesture is avalible return, this is only a safe check

if ( !apds.isGestureAvailable() ) {

return;

}

# reads the last gesture, compares with the known ones and print a message

switch ( apds.readGesture() ) {

case DIR_UP:

Serial.println(“UP”);

break;

case DIR_DOWN:

Serial.println(“DOWN”);

break;

case DIR_LEFT:

Serial.println(“LEFT”);

break;

case DIR_RIGHT:

Serial.println(“RIGHT”);

break;

case DIR_FAR:

Serial.println(“FAR”);

break;

}

}

現(xiàn)在讓我們看看整個(gè)代碼的運(yùn)行情況:

所以我已經(jīng)解釋了手勢(shì)傳感器的基本API和新像素環(huán)現(xiàn)在讓我們把事情放在一起:

算法運(yùn)行如下:

- 初始化庫(kù)(參見(jiàn)上面的代碼)

- 創(chuàng)建一個(gè)led數(shù)組強(qiáng)度被稱為“l(fā)edStates”。該陣列將包含24個(gè)LED強(qiáng)度,以150到2的遞減方式排列

- 在主循環(huán)內(nèi)部檢查中斷引腳是否已被修改,如果是,則需要更改LED的動(dòng)畫或顏色

- “handleGesture()”函數(shù)檢查最后一個(gè)手勢(shì)并為UP -DOWN手勢(shì)調(diào)用函數(shù)“toggleColor”或?yàn)長(zhǎng)EFT - RIGHT手勢(shì)設(shè)置全局變量“l(fā)edDirection”

- “toggleColor()”函數(shù)只是改變一個(gè)名為“colorSelection”的全局變量,其中一個(gè)值為0,1,2

- 在主循環(huán)函數(shù)中也有另一個(gè)名為“animateLeds();”的函數(shù)。叫做。此函數(shù)檢查是否超過(guò)100毫秒,如果是,則使用“rotateLeds()”函數(shù)旋轉(zhuǎn)LED,然后重新繪制它們

- “rotateLeds()”將向前或向后“旋轉(zhuǎn)”LED使用另一個(gè)名為“intermediateLedStates”的數(shù)組。

旋轉(zhuǎn)“效果”將如下所示:

# after initialization

{150, 100, 70, 50, 40, 30, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

# after rotateLeds() is called

{0, 150, 100, 70, 50, 40, 30, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

# after rotateLeds() is called again

{0, 0, 150, 100, 70, 50, 40, 30, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

# and so on

首先創(chuàng)建新陣列并復(fù)制新位置上的舊led強(qiáng)度(增加位置)或減少它)。之后用“intermediateLedStates”覆蓋“l(fā)edStates”數(shù)組,這樣過(guò)程將在100毫秒后繼續(xù)。

#include “SparkFun_APDS9960.h”

#include “Adafruit_NeoPixel.h”

#include “Wire.h”

#define NEOPIXED_CONTROL_PIN 6

#define NUM_LEDS 24

#define APDS9960_INT 2

#define LED_SPEED_STEP_INTERVAL 100

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800);

SparkFun_APDS9960 apds = SparkFun_APDS9960();

unsigned long lastLedChangeTime = 0;

short ledDirection = 0;

short colorSelection = 0;

byte ledStates[] = {150, 100, 70, 50, 40, 30, 10, 2, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

int isr_flag = 0;

void setup()

{

Serial.begin(9600);

Serial.println(“Program started”);

strip.begin();

pinMode(APDS9960_INT, INPUT);

attachInterrupt(0, interruptRoutine, FALLING);

if ( apds.init() && apds.enableGestureSensor(true)) {

Serial.println(“APDS-9960 initialization complete”);

} else {

Serial.println(“Something went wrong during APDS-9960 init!”);

}

lastLedChangeTime = millis();

Serial.println(“Init succesfully”);

}

void loop()

{

if( isr_flag == 1 ) {

detachInterrupt(0);

handleGesture();

isr_flag = 0;

attachInterrupt(0, interruptRoutine, FALLING);

}

animateLeds();

}

void interruptRoutine()

{

isr_flag = 1;

}

/**

* This will handle gestures from the APDS9960 sensor

* Up and Down gestures will call toggleColor function

* Left and Right gestures will change the led animation

*/

void handleGesture() {

if ( !apds.isGestureAvailable() ) {

return;

}

switch ( apds.readGesture() ) {

case DIR_UP:

Serial.println(“UP”);

toggleColor();

break;

case DIR_DOWN:

Serial.println(“DOWN”);

toggleColor();

break;

case DIR_LEFT:

ledDirection = 1;

Serial.println(“LEFT”);

break;

case DIR_RIGHT:

ledDirection = -1;

Serial.println(“RIGHT”);

break;

case DIR_FAR:

ledDirection = 0;

Serial.println(“FAR”);

break;

}

}

/**

* Change current leds color

* Each time this function is called will change the leds state

*/

void toggleColor()

{

if (colorSelection == 0) {

colorSelection = 1;

} else if (colorSelection == 1) {

colorSelection = 2;

} else {

colorSelection = 0;

}

}

/**

* The animation will run after LED_SPEED_STEP_INTERVAL millis

* First the rotateLeds function is called, then the leds colors are set using the strip api

*/

void animateLeds()

{

if (millis() - lastLedChangeTime 《 LED_SPEED_STEP_INTERVAL) {

return;

}

rotateLeds();

for (int i=0; i 《 NUM_LEDS; i++) {

strip.setPixelColor(i, getColor(ledStates[i]));

strip.show();

}

lastLedChangeTime = millis();

}

/**

* Using a secondary array “intermediateLedStates”, leds intensities are animated

* First the values from “l(fā)edStates” are copied on “intermediateLedStates” like so

* let‘s sat the “l(fā)edStates” array is {100, 80, 60, 0, 0, 0} and the ledDirection is 1

* then after this function is called “l(fā)edStates” array is {0, 100, 80, 60, 0, 0} simulating a rotation effect

*/

void rotateLeds()

{

byte intermediateLedStates[NUM_LEDS];

for (int i=0; i 《 NUM_LEDS; i++) {

intermediateLedStates[i] = 0;

}

for (int i=0; i 《 NUM_LEDS; i++) {

if (ledDirection == 1) {

if (i == NUM_LEDS -1) {

intermediateLedStates[0] = ledStates[i];

} else {

intermediateLedStates[i + 1] = ledStates[i];

}

} else {

if (i == 0) {

intermediateLedStates[NUM_LEDS - 1] = ledStates[i];

} else {

intermediateLedStates[i - 1] = ledStates[i];

}

}

}

for (int i=0; i 《 NUM_LEDS; i++) {

ledStates[i] = intermediateLedStates[i];

}

}

uint32_t getColor(int intensity)

{

switch (colorSelection) {

case 0:

return strip.Color(intensity, 0, 0);

case 1:

return strip.Color(0, intensity, 0);

default:

return strip.Color(0, 0, intensity);

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    244

    文章

    24731

    瀏覽量

    692642
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6527

    瀏覽量

    197518
  • 手勢(shì)傳感器
    +關(guān)注

    關(guān)注

    1

    文章

    13

    瀏覽量

    13048
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文讀懂手勢(shì)識(shí)別傳感器:原理、優(yōu)勢(shì)與應(yīng)用場(chǎng)景

    、消費(fèi)電子、醫(yī)療健康等領(lǐng)域獲得了廣泛應(yīng)用。實(shí)現(xiàn)手勢(shì)識(shí)別的技術(shù)路徑并非單一,其中最為成熟且成本可控的方案主要依托兩類傳感器——紅外接近傳感器與飛行時(shí)間(TOF)傳感器
    的頭像 發(fā)表于 04-28 17:41 ?1218次閱讀
    一文讀懂<b class='flag-5'>手勢(shì)</b>識(shí)別<b class='flag-5'>傳感器</b>:原理、優(yōu)勢(shì)與應(yīng)用場(chǎng)景

    化工園區(qū)環(huán)網(wǎng)箱局放傳感器——應(yīng)用實(shí)踐

    文章由山東華科信息技術(shù)有限公司提供在化工園區(qū)電力基礎(chǔ)設(shè)施中,環(huán)網(wǎng)箱作為配電網(wǎng)絡(luò)的關(guān)鍵節(jié)點(diǎn),其運(yùn)行穩(wěn)定性直接影響園區(qū)生產(chǎn)安全與能源供應(yīng)效率。局放傳感器作為環(huán)網(wǎng)箱狀態(tài)監(jiān)測(cè)的核心設(shè)備,通過(guò)檢測(cè)局部放電現(xiàn)象
    的頭像 發(fā)表于 04-22 11:13 ?107次閱讀
    化工園區(qū)<b class='flag-5'>環(huán)</b>網(wǎng)箱局放<b class='flag-5'>傳感器</b>——應(yīng)用實(shí)踐

    霍爾傳感器磁鐵哪種材質(zhì)好?磁力要很強(qiáng)嗎?

    什么是傳感器磁鐵?霍爾傳感器是不是要專用的磁鐵磁鋼?霍爾傳感器磁鐵哪種材質(zhì)好呢?霍爾傳感器與磁鋼之間有什么關(guān)系?帶著這幾個(gè)磁鐵問(wèn)題,我們一
    的頭像 發(fā)表于 03-30 16:34 ?187次閱讀
    霍爾<b class='flag-5'>傳感器</b>磁鐵<b class='flag-5'>用</b>哪種材質(zhì)好?磁力要很強(qiáng)嗎?

    探索OPT3001環(huán)境光傳感器:高精度與靈活性的完美結(jié)合

    測(cè)量。今天,我們深入探討德州儀器(TI)的OPT3001環(huán)境光傳感器,它以其卓越的性能和豐富的功能,為電子工程師帶來(lái)了更多的設(shè)計(jì)可能性。 文件下載: opt3001.pdf 產(chǎn)品特性:精準(zhǔn)匹配人類視覺(jué) 光譜響應(yīng)與人眼匹配 OP
    的頭像 發(fā)表于 02-25 11:40 ?349次閱讀

    霍爾傳感器環(huán)的極數(shù)決定了脈沖信號(hào)的多少

    由此可以看出,磁環(huán)的極數(shù)決定了脈沖信號(hào)的多少,磁環(huán)極數(shù)越多轉(zhuǎn)子轉(zhuǎn)一圈所產(chǎn)生的脈沖信號(hào)個(gè)數(shù)就越多,霍爾水流量傳感器的精度也就越高?,F(xiàn)有霍爾雙極性的可以實(shí)現(xiàn)S極和N極各輸出一個(gè)脈沖信號(hào),比單極鎖存輸出的脈沖信號(hào)翻倍。
    的頭像 發(fā)表于 01-14 17:07 ?735次閱讀
    霍爾<b class='flag-5'>傳感器</b>磁<b class='flag-5'>環(huán)</b>的極數(shù)決定了脈沖信號(hào)的多少

    STM32驅(qū)動(dòng)PAJ7620手勢(shì)識(shí)別傳感器

    原文鏈接:[https://www.yourcee.com/newsinfo/2925937.html] 傳感器簡(jiǎn)介 PAJ-7620U2是由原相科技公司開(kāi)發(fā)的一款手勢(shì)識(shí)別芯片, 內(nèi)集成了光學(xué)數(shù)組式
    的頭像 發(fā)表于 01-06 09:16 ?1222次閱讀
    STM32驅(qū)動(dòng)PAJ7620<b class='flag-5'>手勢(shì)</b>識(shí)別<b class='flag-5'>傳感器</b>

    探索Thermometrics壓力與溫度組合傳感器:卓越性能與廣泛應(yīng)用

    壓力與溫度組合傳感器壓力和溫度測(cè)量功能集成于一個(gè)傳感器組件中。為實(shí)現(xiàn)可靠且精確的測(cè)量,該傳感器采用NTC熱敏電阻技
    的頭像 發(fā)表于 12-15 09:55 ?720次閱讀

    不同溫度傳感器的類型和公差

    溫度傳感器類型和公差:傳感器公差和溫度系數(shù)的組合定義了溫度傳感器的溫度特性,元件公差越大,傳感器與廣義曲線偏差越大,
    的頭像 發(fā)表于 11-24 17:47 ?1022次閱讀
    不同溫度<b class='flag-5'>傳感器</b>的類型和公差

    #紅外傳感器有哪幾種?怎么怎樣才能選對(duì)?

    傳感器
    iczoom
    發(fā)布于 :2025年09月02日 10:52:41

    什么是照度傳感器和接近傳感器

    近年來(lái),照度傳感器和接近傳感器在我們身邊各類設(shè)備中的應(yīng)用越來(lái)越廣泛。除了單獨(dú)使用照度傳感器和接近傳感器外,這些
    的頭像 發(fā)表于 08-22 14:46 ?3136次閱讀
    什么是照度<b class='flag-5'>傳感器</b>和接近<b class='flag-5'>傳感器</b>

    Texas Instruments IWRL6432工業(yè)毫米波雷達(dá)傳感器數(shù)據(jù)手冊(cè)

    Texas Instruments IWRL6432工業(yè)毫米波雷達(dá)傳感器是 基于調(diào)頻連續(xù)波雷達(dá)技術(shù)的集成式單芯片毫米波傳感器。這些傳感器的工作頻段為57GHz至63.9GHz,連續(xù)帶寬為7GHz
    的頭像 發(fā)表于 07-31 09:23 ?1437次閱讀
    Texas Instruments IWRL6432工業(yè)<b class='flag-5'>用</b>毫米波雷達(dá)<b class='flag-5'>傳感器</b>數(shù)據(jù)手冊(cè)

    基于鎖相環(huán)的無(wú)軸承同步磁阻電機(jī)無(wú)速度傳感器檢測(cè)技術(shù)

    使用場(chǎng)合。為實(shí)現(xiàn)無(wú)軸承同步磁阻電機(jī)高速超高速、低成本、實(shí)用化運(yùn)行,提出了一種基于鎖相環(huán)法的無(wú)速度傳感自檢測(cè)技術(shù)。通過(guò)應(yīng)用鎖相環(huán)原理,設(shè)計(jì)出無(wú)軸承同步磁阻電機(jī)無(wú)速度傳感器,并基于 Mat
    發(fā)表于 07-29 16:22

    如何為您的應(yīng)用選擇光傳感器

    ,到向安全系統(tǒng)發(fā)送可能的入侵警報(bào)。 本文討論了在常見(jiàn)例中選擇光傳感器所需的功能,例如篡改檢測(cè)、晝夜檢測(cè)、LED 亮度調(diào)節(jié)、顯示屏亮度調(diào)節(jié)和顏色調(diào)節(jié)。 篡改檢測(cè) 篡改檢測(cè)應(yīng)用中的光傳感器
    的頭像 發(fā)表于 06-11 10:14 ?818次閱讀
    如何為您的應(yīng)用選擇光<b class='flag-5'>傳感器</b>

    德州儀器光傳感器選擇指南

    ,到向安全系統(tǒng)發(fā)送可能的入侵警報(bào)。本文討論了在常見(jiàn)例中選擇光傳感器所需的功能,例如篡改檢測(cè)、晝夜檢測(cè)、LED 亮度調(diào)節(jié)、顯示屏亮度調(diào)節(jié)和顏色調(diào)節(jié)。
    的頭像 發(fā)表于 06-09 14:36 ?2753次閱讀
    德州儀器光<b class='flag-5'>傳感器</b>選擇指南

    示波器測(cè)量傳感器的放大電路及供電

    傳感器放大電路的測(cè)量傳感器信號(hào)一般都比較小,示波器直接測(cè)量可能難以檢測(cè),但傳感器的主板上面都有信號(hào)放大部分,找到這個(gè)放大器的輸出端,示波器就可以測(cè)量這個(gè)被放大后的信號(hào)。
    的頭像 發(fā)表于 05-19 13:24 ?1014次閱讀
    <b class='flag-5'>用</b>示波器測(cè)量<b class='flag-5'>傳感器</b>的放大電路及供電
    玉溪市| 福建省| 深州市| 泸定县| 麻阳| 渝中区| 石嘴山市| 武定县| 邵武市| 扎赉特旗| 通州区| 峨眉山市| 科技| 新化县| 西城区| 丹阳市| 拜城县| 蛟河市| 富顺县| 扎囊县| 清河县| 深州市| 辽阳县| 新乡市| 西峡县| 荔波县| 边坝县| 类乌齐县| 新疆| 九江县| 海宁市| 蚌埠市| 阳江市| 铁岭县| 金塔县| 麟游县| 额尔古纳市| 南城县| 监利县| 绥德县| 雷山县|