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

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

3天内不再提示

LED领带的制作

454398 来源:网络整理 作者:网络整理 2019-11-28 17:31 次阅读

概述

使领带像VU计一样亮起来!这个Flora项目使用驻极体麦克风放大器触发沿着领带长度用导电线缝制的16个Flora NeoPixels。

在开始这个项目之前,我们建议阅读以下指南:

开始于FLORA

Adafruit麦克风放大器突破

导电线

图片由johngineer拍摄。

工具和用品

材料清单:

16 Flora NeoPixels

Flora主板

麦克风放大器突破

聚合物电池

用于电池袋的碎布

3层导电线

标准棉/多股线

丝带电缆或导电线带

断裂式领带或其他形式的领带

您将使用针头来缝合电路。

必须使用锋利的剪刀!您还需要一个长尺子,一些裁缝的粉笔和一个拆缝刀。

不要忘了剥线钳,钳子和齐平剪线!

您将需要高质量的基本万用表,可以测量电压和连续性。

单击此处购买基本万用表。

单击此处购买顶级万用表。

单击此处购买袖珍万用表。

也不要忘记学习如何使用您的万用表!

您可能会在本地五金店找到的任何入门级“多合一”焊铁都可以使用。与生活中的大多数事物一样,您可以买得到。

升级到高端电烙铁设置,例如我们在商店中购买的Hakko FX-888,将使焊接变得既轻松又有趣。

请勿使用“冷热”烙铁!它们不适合用于精密的电子工作,并且会损坏植物群(请参阅此处)。

单击此处购买我们的入门级可调30W 110V烙铁。

单击此处可升级到原装的Hakko FX-888可调温度烙铁。

学习如何使用大量教程进行焊接!

您将需要60/40焊料的松香芯。好的焊料是一件好事。不良的焊锡会导致桥接和冷焊点很难找到。

单击此处购买一盘含铅焊料(建议初学者使用)。

单击此处购买一盘无铅焊料。

span》

电路图

Flora像素都连接到公共接地总线,以及连接到VBATT的公共电源总线。 Flora像素数据总线连接到D6。麦克风放大器连接到3.3V,GND和D9。

电池袋和植物

使用一块碎布缝一个小袋,装上您的锂电池。小袋应缝在领带的背面,就在Flora所在的上方,并在顶部有一个开口,以便于取出电池进行充电。使用接缝裂开器稍微打结领带的后接缝,以便您可以将JST插头和电线穿入领带内并向下到Flora。

插头在领带的褶皱处加入了Flora,因此不会被抓住

通过在领带上缝一些未使用的垫子,用普通线将Flora固定在适当的位置。尝试只缝到领带的背面,使前部织物保持光滑。

缝纫像素

使用标尺在裁缝的粉笔下沿着领带的中心划一条线,并沿着这条线均匀分配您的16个Flora像素。

用粉笔标记每个像素的位置。

在D6旁边将一长段导电线缝到GND,仅刺穿背面领带。缝合到第一个像素的(-)垫上并固定(但不要切断螺纹)。

通过将此长接地线连接到像素上的(-)焊盘来添加更多像素。

将数据总线从D6缝到第一个像素上的输入板(标有向内箭头)。捆扎,密封结,并剪断线。

在每个像素之间缝制一小段导电线,将一个像素的输出连接到下一个输入。

查看我们的《导电线》指南以获取更多提示

使用另一长段导电线将Flora的VBATT焊盘连接到像素上的(+)焊盘。

缝合好几个像素后,请用万用表测试短路(确保长电源和地线没有接触),并启动NeoPixel库测试代码,以确保到目前为止您的初毛电路都正常。 br》

将其余部分缝合起来像素-您将有一条较长的接地总线,一条较长的电源总线以及每个输入/输出数据板之间的短线段。

添加麦克风

要配合领带,请在麦克风放大器上涂一点黑色指甲油。

将带状电缆的长度比扎带的主要部分长。

将三根电线与麦克风放大器一起使用,剥线将束缚在扎带的结上。

将带状电缆穿过扎带的内部插入。在领带结内用接缝撕开器切一个小孔,并将带状电缆穿过其中。

剥去导线末端并焊接直到麦克风放大器上的三个孔。

使用大螺纹通过大安装孔将麦克风固定在领带上。

回到板的Flora端,焊接相应的导线连接到3.3V,GND和D9。

代码

准备就绪

此项目需要NeoPixel库。对于较新的Arduino IDE版本,请选择“库管理器”,滚动到“ Adafruit_NeoPixel”并安装最新版本。

对于非常旧的Arduino IDE版本,请单击NeoPixel Github存储库页面上的ZIP按钮进行下载,然后重命名

有关对Flora板进行编程的更多信息(包括所需的软件),请转到Flora入门指南。

代码

我们对该项目感到非常兴奋,我们制作了两个Arduino草图来测量房间的体积(Phil Burgess,James DeVito和Andy Doro)。您可以在LED Ampli-Tie Github存储库中下载它们。您可以从下面的清单中下载代码。第一个动态调整以适应发生的任何情况:

下载:Project Zip 或Ampli_Tie_Dynamic.ino | 在Github上查看

复制代码

/*

LED VU meter for Arduino and Adafruit NeoPixel LEDs. More info: http://learn.adafruit.com/led-ampli-tie/

Hardware requirements:

- Most Arduino or Arduino-compatible boards (ATmega 328P or better)。

- Adafruit Electret Microphone Amplifier (ID: 1063)

- Adafruit Flora RGB Smart Pixels (ID: 1260)

OR

- Adafruit NeoPixel Digital LED strip (ID: 1138)

- Optional: battery for portable use (else power through USB or adapter)

Software requirements:

- Adafruit NeoPixel library

Connections:

- 3.3V to mic amp +

- GND to mic amp -

- Analog pin to microphone output (configurable below)

- Digital pin to LED data input (configurable below)

See notes in setup() regarding 5V vs. 3.3V boards - there may be an

extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries. Distributed under the BSD license.

This paragraph must be included in any redistribution.

*/

#include

#define N_PIXELS 16 // Number of pixels in strand

#define MIC_PIN A9 // Microphone is attached to this analog pin

#define LED_PIN 6 // NeoPixel LED strand is connected to this pin

#define DC_OFFSET 0 // DC offset in mic signal - if unusure, leave 0

#define NOISE 10 // Noise/hum/interference in mic signal

#define SAMPLES 60 // Length of buffer for dynamic level adjustment

#define TOP (N_PIXELS + 2) // Allow dot to go slightly off scale

#define PEAK_FALL 40 // Rate of peak falling dot

byte

peak = 0, // Used for falling dot

dotCount = 0, // Frame counter for delaying dot-falling speed

volCount = 0; // Frame counter for storing past volume data

int

vol[SAMPLES], // Collection of prior volume samples

lvl = 10, // Current “dampened” audio level

minLvlAvg = 0, // For dynamic adjustment of graph low & high

maxLvlAvg = 512;

Adafruit_NeoPixel

strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

// This is only needed on 5V Arduinos (Uno, Leonardo, etc.)。

// Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this

// line. Audio samples are ‘cleaner’ at 3.3V.

// COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):

// analogReference(EXTERNAL);

memset(vol, 0, sizeof(vol));

strip.begin();

}

void loop() {

uint8_t i;

uint16_t minLvl, maxLvl;

int n, height;

n = analogRead(MIC_PIN); // Raw reading from mic

n = abs(n - 512 - DC_OFFSET); // Center on zero

n = (n 《= NOISE) ? 0 : (n - NOISE); // Remove noise/hum

lvl = ((lvl * 7) + n) 》》 3; // “Dampened” reading (else looks twitchy)

// Calculate bar height based on dynamic min/max levels (fixed point):

height = TOP * (lvl - minLvlAvg) / (long)(maxLvlAvg - minLvlAvg);

if(height 《 0L) height = 0; // Clip output

else if(height 》 TOP) height = TOP;

if(height 》 peak) peak = height; // Keep ‘peak’ dot at top

// Color pixels based on rainbow gradient

for(i=0; i if(i 》= height) strip.setPixelColor(i, 0, 0, 0);

else strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));

}

// Draw peak dot

if(peak 》 0 && peak 《= N_PIXELS-1) strip.setPixelColor(peak,Wheel(map(peak,0,strip.numPixels()-1,30,150)));

strip.show(); // Update strip

// Every few frames, make the peak pixel drop by 1:

if(++dotCount 》= PEAK_FALL) { //fall rate

if(peak 》 0) peak--;

dotCount = 0;

}

vol[volCount] = n; // Save sample for dynamic leveling

if(++volCount 》= SAMPLES) volCount = 0; // Advance/rollover sample counter

// Get volume range of prior frames

minLvl = maxLvl = vol[0];

for(i=1; i if(vol[i] 《 minLvl) minLvl = vol[i];

else if(vol[i] 》 maxLvl) maxLvl = vol[i];

}

// minLvl and maxLvl indicate the volume range over prior frames, used

// for vertically scaling the output graph (so it looks interesting

// regardless of volume level)。 If they‘re too close together though

// (e.g. at very low volume levels) the graph becomes super coarse

// and ’jumpy‘。..so keep some minimum distance between them (this

// also lets the graph go to zero when no sound is playing):

if((maxLvl - minLvl) 《 TOP) maxLvl = minLvl + TOP;

minLvlAvg = (minLvlAvg * 63 + minLvl) 》》 6; // Dampen min/max levels

maxLvlAvg = (maxLvlAvg * 63 + maxLvl) 》》 6; // (fake rolling average)

}

// Input a value 0 to 255 to get a color value.

// The colors are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

if(WheelPos 《 85) {

return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

} else if(WheelPos 《 170) {

WheelPos -= 85;

return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

} else {

WheelPos -= 170;

return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

}

}

/*

LED VU meter for Arduino and Adafruit NeoPixel LEDs. More info: http://learn.adafruit.com/led-ampli-tie/

Hardware requirements:

- Most Arduino or Arduino-compatible boards (ATmega 328P or better)。

- Adafruit Electret Microphone Amplifier (ID: 1063)

- Adafruit Flora RGB Smart Pixels (ID: 1260)

OR

- Adafruit NeoPixel Digital LED strip (ID: 1138)

- Optional: battery for portable use (else power through USB or adapter)

Software requirements:

- Adafruit NeoPixel library

Connections:

- 3.3V to mic amp +

- GND to mic amp -

- Analog pin to microphone output (configurable below)

- Digital pin to LED data input (configurable below)

See notes in setup() regarding 5V vs. 3.3V boards - there may be an

extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries. Distributed under the BSD license.

This paragraph must be included in any redistribution.

*/

#include

#define N_PIXELS 16 // Number of pixels in strand

#define MIC_PIN A9 // Microphone is attached to this analog pin

#define LED_PIN 6 // NeoPixel LED strand is connected to this pin

#define DC_OFFSET 0 // DC offset in mic signal - if unusure, leave 0

#define NOISE 10 // Noise/hum/interference in mic signal

#define SAMPLES 60 // Length of buffer for dynamic level adjustment

#define TOP (N_PIXELS + 2) // Allow dot to go slightly off scale

#define PEAK_FALL 40 // Rate of peak falling dot

byte

peak = 0, // Used for falling dot

dotCount = 0, // Frame counter for delaying dot-falling speed

volCount = 0; // Frame counter for storing past volume data

int

vol[SAMPLES], // Collection of prior volume samples

lvl = 10, // Current “dampened” audio level

minLvlAvg = 0, // For dynamic adjustment of graph low & high

maxLvlAvg = 512;

Adafruit_NeoPixel

strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

// This is only needed on 5V Arduinos (Uno, Leonardo, etc.)。

// Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this

// line. Audio samples are ’cleaner‘ at 3.3V.

// COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):

// analogReference(EXTERNAL);

memset(vol, 0, sizeof(vol));

strip.begin();

}

void loop() {

uint8_t i;

uint16_t minLvl, maxLvl;

int n, height;

n = analogRead(MIC_PIN); // Raw reading from mic

n = abs(n - 512 - DC_OFFSET); // Center on zero

n = (n 《= NOISE) ? 0 : (n - NOISE); // Remove noise/hum

lvl = ((lvl * 7) + n) 》》 3; // “Dampened” reading (else looks twitchy)

// Calculate bar height based on dynamic min/max levels (fixed point):

height = TOP * (lvl - minLvlAvg) / (long)(maxLvlAvg - minLvlAvg);

if(height 《 0L) height = 0; // Clip output

else if(height 》 TOP) height = TOP;

if(height 》 peak) peak = height; // Keep ’peak‘ dot at top

// Color pixels based on rainbow gradient

for(i=0; i if(i 》= height) strip.setPixelColor(i, 0, 0, 0);

else strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));

}

// Draw peak dot

if(peak 》 0 && peak 《= N_PIXELS-1) strip.setPixelColor(peak,Wheel(map(peak,0,strip.numPixels()-1,30,150)));

strip.show(); // Update strip

// Every few frames, make the peak pixel drop by 1:

if(++dotCount 》= PEAK_FALL) { //fall rate

if(peak 》 0) peak--;

dotCount = 0;

}

vol[volCount] = n; // Save sample for dynamic leveling

if(++volCount 》= SAMPLES) volCount = 0; // Advance/rollover sample counter

// Get volume range of prior frames

minLvl = maxLvl = vol[0];

for(i=1; i if(vol[i] 《 minLvl) minLvl = vol[i];

else if(vol[i] 》 maxLvl) maxLvl = vol[i];

}

// minLvl and maxLvl indicate the volume range over prior frames, used

// for vertically scaling the output graph (so it looks interesting

// regardless of volume level)。 If they’re too close together though

// (e.g. at very low volume levels) the graph becomes super coarse

// and ‘jumpy’。..so keep some minimum distance between them (this

// also lets the graph go to zero when no sound is playing):

if((maxLvl - minLvl) 《 TOP) maxLvl = minLvl + TOP;

minLvlAvg = (minLvlAvg * 63 + minLvl) 》》 6; // Dampen min/max levels

maxLvlAvg = (maxLvlAvg * 63 + maxLvl) 》》 6; // (fake rolling average)

}

// Input a value 0 to 255 to get a color value.

// The colors are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

if(WheelPos 《 85) {

return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

} else if(WheelPos 《 170) {

WheelPos -= 85;

return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

} else {

WheelPos -= 170;

return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

}

}

第二个允许您调整VU表的灵敏度:

下载:Project Zip 或 Ampli_Tie_Adjustable.ino | 在Github上查看

复制代码

/*

LED VU meter for Arduino and Adafruit NeoPixel LEDs. More info: http://learn.adafruit.com/led-ampli-tie/

Hardware requirements:

- Most Arduino or Arduino-compatible boards (ATmega 328P or better)。

- Adafruit Electret Microphone Amplifier (ID: 1063)

- Adafruit Flora RGB Smart Pixels (ID: 1260)

OR

- Adafruit NeoPixel Digital LED strip (ID: 1138)

- Optional: battery for portable use (else power through USB or adapter)

Software requirements:

- Adafruit NeoPixel library

Connections:

- 3.3V to mic amp +

- GND to mic amp -

- Analog pin to microphone output (configurable below)

- Digital pin to LED data input (configurable below)

See notes in setup() regarding 5V vs. 3.3V boards - there may be an

extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries. Distributed under the BSD license.

This paragraph must be included in any redistribution.

fscale function:

Floating Point Autoscale Function V0.1

Written by Paul Badger 2007

Modified from code by Greg Shakar

*/

#include

#include

#define N_PIXELS 16 // Number of pixels in strand

#define MIC_PIN A9 // Microphone is attached to this analog pin

#define LED_PIN 6 // NeoPixel LED strand is connected to this pin

#define SAMPLE_WINDOW 10 // Sample window for average level

#define PEAK_HANG 24 //Time of pause before peak dot falls

#define PEAK_FALL 4 //Rate of falling peak dot

#define INPUT_FLOOR 10 //Lower range of analogRead input

#define INPUT_CEILING 300 //Max range of analogRead input, the lower the value the more sensitive (1023 = max)

byte peak = 16; // Peak level of column; used for falling dots

unsigned int sample;

byte dotCount = 0; //Frame counter for peak dot

byte dotHangCount = 0; //Frame counter for holding peak dot

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup()

{

// This is only needed on 5V Arduinos (Uno, Leonardo, etc.)。

// Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this

// line. Audio samples are ‘cleaner’ at 3.3V.

// COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):

// analogReference(EXTERNAL);

// Serial.begin(9600);

strip.begin();

strip.show(); // Initialize all pixels to ‘off’

}

void loop()

{

unsigned long startMillis= millis(); // Start of sample window

float peakToPeak = 0; // peak-to-peak level

unsigned int signalMax = 0;

unsigned int signalMin = 1023;

unsigned int c, y;

// collect data for length of sample window (in mS)

while (millis() - startMillis 《 SAMPLE_WINDOW)

{

sample = analogRead(MIC_PIN);

if (sample 《 1024) // toss out spurious readings

{

if (sample 》 signalMax)

{

signalMax = sample; // save just the max levels

}

else if (sample 《 signalMin)

{

signalMin = sample; // save just the min levels

}

}

}

peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude

// Serial.println(peakToPeak);

//Fill the strip with rainbow gradient

for (int i=0;i《=strip.numPixels()-1;i++){

strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));

}

//Scale the input logarithmically instead of linearly

c = fscale(INPUT_FLOOR, INPUT_CEILING, strip.numPixels(), 0, peakToPeak, 2);

if(c 《 peak) {

peak = c; // Keep dot on top

dotHangCount = 0; // make the dot hang before falling

}

if (c 《= strip.numPixels()) { // Fill partial column with off pixels

drawLine(strip.numPixels(), strip.numPixels()-c, strip.Color(0, 0, 0));

}

// Set the peak dot to match the rainbow gradient

y = strip.numPixels() - peak;

strip.setPixelColor(y-1,Wheel(map(y,0,strip.numPixels()-1,30,150)));

strip.show();

// Frame based peak dot animation

if(dotHangCount 》 PEAK_HANG) { //Peak pause length

if(++dotCount 》= PEAK_FALL) { //Fall rate

peak++;

dotCount = 0;

}

}

else {

dotHangCount++;

}

}

//Used to draw a line between two points of a given color

void drawLine(uint8_t from, uint8_t to, uint32_t c) {

uint8_t fromTemp;

if (from 》 to) {

fromTemp = from;

from = to;

to = fromTemp;

}

for(int i=from; i《=to; i++){

strip.setPixelColor(i, c);

}

}

float fscale( float originalMin, float originalMax, float newBegin, float

newEnd, float inputValue, float curve){

float OriginalRange = 0;

float NewRange = 0;

float zeroRefCurVal = 0;

float normalizedCurVal = 0;

float rangedValue = 0;

boolean invFlag = 0;

// condition curve parameter

// limit range

if (curve 》 10) curve = 10;

if (curve 《 -10) curve = -10;

curve = (curve * -.1) ; // - invert and scale - this seems more intuitive - postive numbers give more weight to high end on output

curve = pow(10, curve); // convert linear scale into lograthimic exponent for other pow function

/*

Serial.println(curve * 100, DEC); // multply by 100 to preserve resolution

Serial.println();

*/

// Check for out of range inputValues

if (inputValue 《 originalMin) {

inputValue = originalMin;

}

if (inputValue 》 originalMax) {

inputValue = originalMax;

}

// Zero Refference the values

OriginalRange = originalMax - originalMin;

if (newEnd 》 newBegin){

NewRange = newEnd - newBegin;

}

else

{

NewRange = newBegin - newEnd;

invFlag = 1;

}

zeroRefCurVal = inputValue - originalMin;

normalizedCurVal = zeroRefCurVal / OriginalRange; // normalize to 0 - 1 float

// Check for originalMin 》 originalMax - the math for all other cases i.e. negative numbers seems to work out fine

if (originalMin 》 originalMax ) {

return 0;

}

if (invFlag == 0){

rangedValue = (pow(normalizedCurVal, curve) * NewRange) + newBegin;

}

else // invert the ranges

{

rangedValue = newBegin - (pow(normalizedCurVal, curve) * NewRange);

}

return rangedValue;

}

// Input a value 0 to 255 to get a color value.

// The colours are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

if(WheelPos 《 85) {

return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

}

else if(WheelPos 《 170) {

WheelPos -= 85;

return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

}

else {

WheelPos -= 170;

return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

}

}

/*

LED VU meter for Arduino and Adafruit NeoPixel LEDs. More info: http://learn.adafruit.com/led-ampli-tie/

Hardware requirements:

- Most Arduino or Arduino-compatible boards (ATmega 328P or better)。

- Adafruit Electret Microphone Amplifier (ID: 1063)

- Adafruit Flora RGB Smart Pixels (ID: 1260)

OR

- Adafruit NeoPixel Digital LED strip (ID: 1138)

- Optional: battery for portable use (else power through USB or adapter)

Software requirements:

- Adafruit NeoPixel library

Connections:

- 3.3V to mic amp +

- GND to mic amp -

- Analog pin to microphone output (configurable below)

- Digital pin to LED data input (configurable below)

See notes in setup() regarding 5V vs. 3.3V boards - there may be an

extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries. Distributed under the BSD license.

This paragraph must be included in any redistribution.

fscale function:

Floating Point Autoscale Function V0.1

Written by Paul Badger 2007

Modified from code by Greg Shakar

*/

#include

#include

#define N_PIXELS 16 // Number of pixels in strand

#define MIC_PIN A9 // Microphone is attached to this analog pin

#define LED_PIN 6 // NeoPixel LED strand is connected to this pin

#define SAMPLE_WINDOW 10 // Sample window for average level

#define PEAK_HANG 24 //Time of pause before peak dot falls

#define PEAK_FALL 4 //Rate of falling peak dot

#define INPUT_FLOOR 10 //Lower range of analogRead input

#define INPUT_CEILING 300 //Max range of analogRead input, the lower the value the more sensitive (1023 = max)

byte peak = 16; // Peak level of column; used for falling dots

unsigned int sample;

byte dotCount = 0; //Frame counter for peak dot

byte dotHangCount = 0; //Frame counter for holding peak dot

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup()

{

// This is only needed on 5V Arduinos (Uno, Leonardo, etc.)。

// Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this

// line. Audio samples are ‘cleaner’ at 3.3V.

// COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):

// analogReference(EXTERNAL);

// Serial.begin(9600);

strip.begin();

strip.show(); // Initialize all pixels to ‘off’

}

void loop()

{

unsigned long startMillis= millis(); // Start of sample window

float peakToPeak = 0; // peak-to-peak level

unsigned int signalMax = 0;

unsigned int signalMin = 1023;

unsigned int c, y;

// collect data for length of sample window (in mS)

while (millis() - startMillis 《 SAMPLE_WINDOW)

{

sample = analogRead(MIC_PIN);

if (sample 《 1024) // toss out spurious readings

{

if (sample 》 signalMax)

{

signalMax = sample; // save just the max levels

}

else if (sample 《 signalMin)

{

signalMin = sample; // save just the min levels

}

}

}

peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude

// Serial.println(peakToPeak);

//Fill the strip with rainbow gradient

for (int i=0;i《=strip.numPixels()-1;i++){

strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));

}

//Scale the input logarithmically instead of linearly

c = fscale(INPUT_FLOOR, INPUT_CEILING, strip.numPixels(), 0, peakToPeak, 2);

if(c 《 peak) {

peak = c; // Keep dot on top

dotHangCount = 0; // make the dot hang before falling

}

if (c 《= strip.numPixels()) { // Fill partial column with off pixels

drawLine(strip.numPixels(), strip.numPixels()-c, strip.Color(0, 0, 0));

}

// Set the peak dot to match the rainbow gradient

y = strip.numPixels() - peak;

strip.setPixelColor(y-1,Wheel(map(y,0,strip.numPixels()-1,30,150)));

strip.show();

// Frame based peak dot animation

if(dotHangCount 》 PEAK_HANG) { //Peak pause length

if(++dotCount 》= PEAK_FALL) { //Fall rate

peak++;

dotCount = 0;

}

}

else {

dotHangCount++;

}

}

//Used to draw a line between two points of a given color

void drawLine(uint8_t from, uint8_t to, uint32_t c) {

uint8_t fromTemp;

if (from 》 to) {

fromTemp = from;

from = to;

to = fromTemp;

}

for(int i=from; i《=to; i++){

strip.setPixelColor(i, c);

}

}

float fscale( float originalMin, float originalMax, float newBegin, float

newEnd, float inputValue, float curve){

float OriginalRange = 0;

float NewRange = 0;

float zeroRefCurVal = 0;

float normalizedCurVal = 0;

float rangedValue = 0;

boolean invFlag = 0;

// condition curve parameter

// limit range

if (curve 》 10) curve = 10;

if (curve 《 -10) curve = -10;

curve = (curve * -.1) ; // - invert and scale - this seems more intuitive - postive numbers give more weight to high end on output

curve = pow(10, curve); // convert linear scale into lograthimic exponent for other pow function

/*

Serial.println(curve * 100, DEC); // multply by 100 to preserve resolution

Serial.println();

*/

// Check for out of range inputValues

if (inputValue 《 originalMin) {

inputValue = originalMin;

}

if (inputValue 》 originalMax) {

inputValue = originalMax;

}

// Zero Refference the values

OriginalRange = originalMax - originalMin;

if (newEnd 》 newBegin){

NewRange = newEnd - newBegin;

}

else

{

NewRange = newBegin - newEnd;

invFlag = 1;

}

zeroRefCurVal = inputValue - originalMin;

normalizedCurVal = zeroRefCurVal / OriginalRange; // normalize to 0 - 1 float

// Check for originalMin 》 originalMax - the math for all other cases i.e. negative numbers seems to work out fine

if (originalMin 》 originalMax ) {

return 0;

}

if (invFlag == 0){

rangedValue = (pow(normalizedCurVal, curve) * NewRange) + newBegin;

}

else // invert the ranges

{

rangedValue = newBegin - (pow(normalizedCurVal, curve) * NewRange);

}

return rangedValue;

}

// Input a value 0 to 255 to get a color value.

// The colours are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

if(WheelPos 《 85) {

return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

}

else if(WheelPos 《 170) {

WheelPos -= 85;

return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

}

else {

WheelPos -= 170;

return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

}

}

戴上它!

带你去镇上打领带!非常适合举办聚会,音乐会,婚礼,圣餐仪式。..

如果您需要洗领带,取下电池并轻轻点清洁-像素,线和植物区系可以处理变湿(然后干透) ,但不要让水进入麦克风。
责任编辑:wv

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

    关注

    237

    文章

    22444

    浏览量

    645840
收藏 人收藏

    评论

    相关推荐

    LED小夜灯的制作和调试

    电子发烧友网站提供《LED小夜灯的制作和调试.pdf》资料免费下载
    发表于 11-06 08:31 2次下载
    <b class='flag-5'>LED</b>小夜灯的<b class='flag-5'>制作</b>和调试

    LED点阵电子显示屏制作

    电子发烧友网站提供《LED点阵电子显示屏制作.doc》资料免费下载
    发表于 11-02 11:47 4次下载
    <b class='flag-5'>LED</b>点阵电子显示屏<b class='flag-5'>制作</b>

    LED七彩变色灯的制作

    电子发烧友网站提供《LED七彩变色灯的制作.pdf》资料免费下载
    发表于 10-30 11:19 1次下载
    <b class='flag-5'>LED</b>七彩变色灯的<b class='flag-5'>制作</b>

    点阵LED显示屏的原理与制作

    电子发烧友网站提供《点阵LED显示屏的原理与制作.doc》资料免费下载
    发表于 10-30 10:15 2次下载
    点阵<b class='flag-5'>LED</b>显示屏的原理与<b class='flag-5'>制作</b>

    虚拟制作中的LED屏幕:创造真实虚拟世界的关键

    中,LED屏幕是非常重要的设备之一。这些LED屏幕可以用来模拟各种实际场景,如城市街道、室内或外景、湖泊或海洋等。通过使用LED屏幕,制作团队可以更加真实地表现出各种实际场景,而不需要
    的头像 发表于 09-11 17:25 267次阅读

    LED虚拟拍摄:提升影视制作的新境界

    LED虚拟拍摄:提升影视制作的新境界 在当今的影视制作领域,LED虚拟拍摄技术已经成为了一个备受关注的话题。这种技术的出现,使得影视制作人员
    的头像 发表于 09-01 14:50 329次阅读

    LED虚拟制作在电影制作中的重要作用

    随着科技的进步,电影制作技术也在不断提升,其中一个具有革命性的技术改变就是LED虚拟制作的使用。LED虚拟制作的使用已经在革新电影
    的头像 发表于 08-01 17:43 302次阅读

    基于PIR制作的自动太阳能LED

    这篇文章解释了一个简单的电路,使用被动红外或PIR来制作自动太阳能LED灯,该灯可用于在日落时自动照亮您的家,并且仅在有人类成员在场的情况下。
    的头像 发表于 07-25 17:51 589次阅读
    基于PIR<b class='flag-5'>制作</b>的自动太阳能<b class='flag-5'>LED</b>灯

    LED虚拟制作的无限可能性:优势与未来展望

    随着科技的不断进步,LED虚拟制作技术已经成为现代娱乐产业的重要组成部分。LED虚拟制作以其独特的优势,已经在全球范围内改变了影视、直播和舞台表演的
    的头像 发表于 07-21 17:28 282次阅读

    使用4017以更少的组件轻松制作LED灯罩

    电子发烧友网站提供《使用4017以更少的组件轻松制作LED灯罩.zip》资料免费下载
    发表于 07-12 10:05 0次下载
    使用4017以更少的组件轻松<b class='flag-5'>制作</b><b class='flag-5'>LED</b>灯罩

    使用螺栓模块制作LED玩具

    电子发烧友网站提供《使用螺栓模块制作LED玩具.zip》资料免费下载
    发表于 07-11 16:23 0次下载
    使用螺栓模块<b class='flag-5'>制作</b>的<b class='flag-5'>LED</b>玩具

    使用LDR制作LED闪光灯电路的方法

    电子发烧友网站提供《使用LDR制作LED闪光灯电路的方法.zip》资料免费下载
    发表于 07-06 10:28 0次下载
    使用LDR<b class='flag-5'>制作</b><b class='flag-5'>LED</b>闪光灯电路的方法

    使用LED和纸巾管制作万圣节项目

    电子发烧友网站提供《使用LED和纸巾管制作万圣节项目.zip》资料免费下载
    发表于 06-29 10:23 0次下载
    使用<b class='flag-5'>LED</b>和纸巾管<b class='flag-5'>制作</b>万圣节项目

    制作Hexabitz RGB LED项链

    电子发烧友网站提供《制作Hexabitz RGB LED项链.zip》资料免费下载
    发表于 06-12 14:42 0次下载
    <b class='flag-5'>制作</b>Hexabitz RGB <b class='flag-5'>LED</b>项链

    为架子鼓制作动画灯/LED

    电子发烧友网站提供《为架子鼓制作动画灯/LED.zip》资料免费下载
    发表于 06-09 10:48 0次下载
    为架子鼓<b class='flag-5'>制作</b>动画灯/<b class='flag-5'>LED</b>