闪电云方案

闪电云是这样的一个装置,基本的功能是当有人经过的时候,会做出闪电的效果。

闪电云这个项目算是做的次数和种类最多的一个项目了,做过能知道实时天气的,能留言的,能发生的,加大的,joint版的、ESP8266版的。。。。

其实闪电云的技术难度是很低的,很适合各种年龄段的人做。这个教程是用最常见的材料实现最基本的功能的一种闪电云。

物料清单

  1. Arduino Nano
  2. 热释电传感器
  3. WS2812灯条
  4. 直径20cm灯笼
  5. PP棉
  6. 杜邦线6根(针对孔3,孔对孔3)

制作步骤

电路连接图

逻辑部分
电路部分

连接电路

清单

焊接杜邦线和灯带

焊接完成的样子

连接传感器灯带和Arduino





选择对应的Arduino型号和端口

烧写程序

查看效果

撑起灯笼

装入灯笼中查看效果

几个需要注意的地方

  1. Arduino Nano上有标注的只有一个5v。但是灯条和传感器都需要有5v的电压供电,这时候可以将其中的一个引脚连接到ICSP上。


    ICSP上5V和GND引脚的位置
  2. 杜邦线焊接的位置一定要是灯条上标有Din的那一端而不能是Dout的那一端。

外形制作

其实主要就是粘棉花了。。。

为了让外形开起来更像云而不是一个球,也可以增加两个透明的吸管。

将两个吸管插到一起以增加长度

如果想长期使用的话,为了保险建议用热熔胶加固一下链接部分

然后用热熔胶把Arduino固定在灯笼的横梁上

同样用热熔胶把热释电传感器固定在下面的横梁上


将吸管横穿灯笼,在连接处用热熔胶固定

在灯笼上涂热熔胶,然后将棉花粘贴在上面

完成图案

效果展示

注意的地方

  1. 尽量用大片的棉花粘,这样出来的外形会好看一些,更像云,不然会很像绵羊。。。
  2. 由于重力的原因,初期粘的时候尽量在上半边多粘一些,后面会下移一点,如果主要的棉花粘到了下面,过一段时间棉花就会往下掉。。。
  3. 热熔胶棒使用很快,我做这一个大概要用三根热熔胶棒。

程序烧写 下面是闪电云需要的程序

这个程序会在有人经过闪电云附近的时候随机触发4种效果,其中一种七彩效果的概率很低(概率是1/61),然后每隔100秒就触发一次自亮点效果,如果你想做出自己的效果,也可以自己改代码。另外运行这个代码需要下载Adafruit NEOpixel 的库,下载地址在这里:https://github.com/adafruit/Adafruit_NeoPixel

#include <Adafruit_NeoPixel.h>
   

#define PIXEL_PIN    6  //灯条链接引脚
#define SENSOR_PIN   9  //传感器链接引脚

#define PIXEL_COUNT 8  //灯珠的个数

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

int randomNumber;






void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'

  pinMode(SENSOR_PIN, INPUT);
  randomSeed(analogRead(0));
  
  Serial.begin(9600);

}

void loop() {
  
  
  if( digitalRead(SENSOR_PIN) == HIGH){
    randomNumber = random(300);
    Serial.println(randomNumber % 61);
    thunder_strike(randomNumber % 61);
 
    delay(3000);

  }else{

    if(millis() % 100000 == 0){
      for(int i=20; i<100; i++){
        colorWipe(strip.Color(i,i-20,0),0);
          
      }
      for(int i=100; i>20; i--){
        colorWipe(strip.Color(i,i-20,0),0);
          
      }
      colorWipe(strip.Color(0,0,0),0);
      
      delay(3000);
       
    }

  }
        
    

      
  
}


void thunder_strike( int type) {
  if(type < 20){
      
        colorWipe_short(0, PIXEL_COUNT, strip.Color(73, 147, 255), 3);
        colorWipe(strip.Color(0, 0, 0), 0);
        delay(500);
        colorWipe_short(0, PIXEL_COUNT, strip.Color(73, 147, 255), 3);
        delay(20);
        colorWipe(strip.Color(0, 0, 0), 0);
        delay(500);

  }else if(type < 40){
      
        colorWipe(strip.Color(104, 94, 94), 3);
        colorWipe(strip.Color(0,0,0), 0);
        delay(500);
        colorWipe(strip.Color(104, 94, 94), 3);
        delay(20);
        colorWipe(strip.Color(0,0,0), 0);
        delay(500);
  }else if(type < 60){   
        colorWipe(strip.Color(181, 165, 95), 3);
        delay(1000);
        colorWipe(strip.Color(0,0,0), 0);
        delay(100);
        colorWipe(strip.Color(181, 165, 95), 3);
        delay(500);
        colorWipe(strip.Color(0,0,0), 0);
        delay(500);
  }else{
        rainbowCycle(5);
        colorWipe(strip.Color(0,0,0), 0);
  }
}


void colorWipe_short(uint16_t be, uint16_t en, uint32_t c, uint8_t wait){
  for (uint16_t i = be; i < en; i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }

}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 256; j++) {
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 10; j++) { //do 10 cycles of chasing
    for (int q = 0; q < 3; q++) {
      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, c);  //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0);      //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j = 0; j < 256; j++) {   // cycle all 256 colors in the wheel
    for (int q = 0; q < 3; q++) {
      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, Wheel( (i + j) % 255)); //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0);      //turn every third pixel off
      }
    }
  }
}

// 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) {
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容