可以吹灭的LED

网友投稿 2018-08-20 16:04

LED被广泛应用,可以说是现代社会如此色彩绚丽的最大功臣。虽然LED成本低,也没有火灾隐患。但它不能像蜡烛一样,被直接吹灭。

https://cdn.china-scratch.com/timg/180822/1604525948-0.jpg

国外创客Paul Dietz展示了一种超级简单地方法让LED像蜡烛一样被吹灭。这种方法,不需要添加任何额外的传感器。

https://cdn.china-scratch.com/timg/180822/1604524950-1.jpg

https://cdn.china-scratch.com/timg/180822/1604525F8-2.gif

这种方法的原理很简单:

当电流通过LED时,其温度会升高。 上升量取决于冷却效率。 当你对着发热的LED吹气时,会降低LED温度。 我们可以检测到这一点,因为LED的压降随着温度的降低而增加。

https://cdn.china-scratch.com/timg/180822/1604525G7-3.jpg

https://cdn.china-scratch.com/timg/180822/1604533Q2-4.jpg

整个电路非常简单,跟正常的LED驱动电路几乎一样。 唯一的区别是是多了一条额外的电线来测量LED的压降。 为了得到最优效果,最好使用一个非常小的LED(建议使用0402封装的贴片LED),用最细点电线连接。 这样能使LED非常快速地加热和冷却,并最大限度地减少热量在电线上的损失。 电压变化仅为毫伏 - 我们可以通过Arduino UNO的模拟引脚检测。 

感兴趣的同学可以亲手试一试哦,代码如下:

// Blow Out LED Ave creates an LED that you can blow out. It automatically relights after 2 seconds

//

// Copyright 2018, Paul H. Dietz

// LED Connections

#define PLUS A1               // High side of the resistor

#define MEASURE A0            // Low side of resistor and anode of LED

// Cathode of LED goes to ground

#define NUMSAMPLES 10         // Number of samples to keep

#define MINJUMP 150           // Minimum jump for blow out

long int sensedata[NUMSAMPLES];

int dataptr = 0;

int buffull = 0;

void setup() {

  Serial.begin(250000);                     // Initialize serial communication

  pinMode(MEASURE, INPUT);

  pinMode(PLUS, OUTPUT);

  digitalWrite(PLUS, HIGH);                 // Turn on the LED

}

void loop() {

  int cnt;

  long int sum = 0;

  // Sum 256 adc readings (to reduce adc noise)

  for (cnt = 0; cnt < 256; cnt++) {

    sum = sum + analogRead(MEASURE);

  }

  Serial.println(sum);                      // Output sum so we can watch with Serial Plotter

  // Compare current measurement to oldest if buffer full

  if (buffull && (sum > (sensedata[dataptr] + MINJUMP))) {

    // Temperature drop exceeded minimum - turn off

    digitalWrite(PLUS, LOW);

    dataptr = 0;                            // Reinitialize the buffer

    buffull = 0;

    delay(2000);                            // off time for LED

    digitalWrite(PLUS, HIGH);

  }

  else {

    sensedata[dataptr] = sum;               // Store the latest data in the buffer

    dataptr++;                              // Update buffer pointer

    if (dataptr == NUMSAMPLES) {            // Check if dataptr went past end

      dataptr = 0;                          // Reset the dataptr to beginning

      buffull = 1;                          // Mark that buffer is full

    }

  }

}

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com