7489浏览
查看: 7489|回复: 0

魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]

[复制链接]
魔幻玫瑰

魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]图7


魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]图8

了解玫瑰,我们才懂欣赏它的美:
原产地中国,多达一百多种
有红色、粉色、白色、黑色、黄色,紫色、
浅绿色,橙色,蓝色,橘红色,彩虹色等
名称有“黑美人”“碧海云天”“紫影”
“红衣主教”“海洋之歌”“蓝色妖姬”
“金香玉”“冷美人”......

各种各样的准备小礼物的办法,其中一种有意思的是DIY!因为
“买狠简单,造更有趣”
造 起 来...
为了做成“永不凋谢的玫瑰”,3D打印小白的我开始搜索打印资料
魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]图3
rose.stl
魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]图2
rose-closed.stl
ROSE模型文件链接【包含花柄支架等】

魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]图4

打印过程中,碰巧有小伙伴来做客。
在等待打印中,聆听着“咝咝”“嗡嗡”
探着小脑袋仔细瞅瞅这儿,还想摸摸这儿摸摸那儿
不时地问这问那的...

魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]图5
“永不凋谢”已经完成,那么
怎么做到魔幻色彩呢?变才是根本!
1600万种颜色变换、颜色渐变,非RGB_LED莫属
魔法手势变换,也做得简单、灵敏
准备清单:

【注】RGB_LED实测应该是共阴极吧,接线如下图所示
魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]图6

魔幻玫瑰[RGB_LED+3D打印+Arduino红外手势传感器]图1

简单的手势,快速的反应

UNO 可提供两朵花的颜色渐变【D9D10D11,D3D5D6】

[mw_shl_code=cpp,true]/****************************************************************

* 20180330Bir.

APDS-9960 RGB and Gesture Sensor

Shawn Hymel @ SparkFun Electronics

May 30, 2014



Tests the gesture sensing abilities of the APDS-9960. Configures

APDS-9960 over I2C and waits for gesture events. Calculates the

direction of the swipe (up, down, left, right) and displays it

on a serial console.


To perform a NEAR gesture, hold your hand

far above the sensor and move it close to the sensor (within 2

inches). Hold your hand there for at least 1 second and move it

away.


To perform a FAR gesture, hold your hand within 2 inches of the

sensor for at least 1 second and then move it above (out of

range) of the sensor.


Hardware Connections:


Arduino Pin  APDS-9960 Board  Function


3.3-5V         VCC              Power

GND          GND              Ground

A4           SDA              I2C Data

A5           SCL              I2C Clock

2            INT              Interrupt



*******************Modify the description**********************

3.3V-5V     VCC       Power

Void loop () to increase serial port statement causes the wave, will not stop

Library function will be waved in recognition of the changed

***************************

eg."myledRoseW" RGB_LED Connection:

     R-D9

     G-D10

     B-D11

     GND-Gnd

***************************/

#include <RGBLED.h>

#include <Wire.h>

#include <SparkFun_APDS9960.h>


// Pins

#define APDS9960_INT    2 // Needs to be an interrupt pin


// Constants


// Global Variables

RGBLED myledRoseW = RGBLED(9,10,11); //White big flower 9:Red  10:Green   11:Blue

RGBLED myledRoseY = RGBLED(7,8,12); // Yellow big flower

RGBLED myledRoseWS = RGBLED(3,5,6); // White small

RGBLED myledRoseYS = RGBLED(A0,A1,A2); // Yellow small

SparkFun_APDS9960 apds = SparkFun_APDS9960();

int isr_flag = 0;


void setup() {


  // Initialize Serial port

  Serial.begin(9600);

  Serial.println();

  Serial.println(F("--------------------------------"));

  Serial.println(F("SparkFun APDS-9960 - GestureTest"));

  Serial.println(F("--------------------------------"));


  // Initialize interrupt service routine

  attachInterrupt(0, interruptRoutine, FALLING);


  // Initialize APDS-9960 (configure I2C and initial values)

  if ( apds.init() ) {

    Serial.println(F("APDS-9960 initialization complete"));

  } else {

    Serial.println(F("Something went wrong during APDS-9960 init!"));

  }


  // Start running the APDS-9960 gesture sensor engine

  if ( apds.enableGestureSensor(true) ) {

    Serial.println(F("Gesture sensor is now running"));

  } else {

    Serial.println(F("Something went wrong during gesture sensor init!"));

  }

}

////////////////////////////////////////////////

void loop() {

  if( isr_flag == 1 ) {

    handleGesture();

      if(digitalRead(APDS9960_INT) == 0){

      apds.init();

      apds.enableGestureSensor(true);

    }

    isr_flag = 0;

  }

}

////////////////////////////////////////////////

void interruptRoutine() {

  isr_flag = 1;

}

////////////////////////////////////////////////

void handleGesture() {

    if ( apds.isGestureAvailable() ) {

    switch ( apds.readGesture() ) {

      case DIR_UP:

        Serial.println("Red");

        myledRoseW.colorRGB(255,0,0);

        myledRoseY.colorRGB(255,0,0);

        myledRoseWS.colorRGB(255,0,0);

        myledRoseYS.colorRGB(255,0,0);

        break;

      case DIR_DOWN:

        Serial.println("OFF");

        myledRoseW.colorRGB(0,0,0);

        myledRoseY.colorRGB(0,0,0);

        myledRoseWS.colorRGB(0,0,0);

        myledRoseYS.colorRGB(0,0,0);

        break;

      case DIR_LEFT:

        Serial.println("Green");

        myledRoseW.colorRGB(0,255,0);

        myledRoseY.colorRGB(0,255,0);

        myledRoseWS.colorRGB(0,255,0);

        myledRoseYS.colorRGB(0,255,0);

        break;

      case DIR_RIGHT:

        Serial.println("Blue");

        myledRoseW.colorRGB(0,0,255);

        myledRoseY.colorRGB(0,0,255);

        myledRoseWS.colorRGB(0,0,255);

        myledRoseYS.colorRGB(0,0,255);

        break;

      case DIR_NEAR:

        Serial.println("Breath");

        breathLED();

        break;

      case DIR_FAR:

        Serial.println("VARITY");

        colorLedHSV();

        break;

      default:

        Serial.println("NONE");  // WHITE LIGHT

        myledRoseW.colorRGB(255,255,255);

        myledRoseY.colorRGB(255,255,255);

        myledRoseWS.colorRGB(255,255,255);

        myledRoseYS.colorRGB(255,255,255);

        break;

    }

  }

}

////////////////////////////////////////////////

void colorLedHSV(){  

for(int j = 0;j < 360; j++){  

myledRoseW.colorHSV(j,255,255); //H:0-360   S:0-255  V:0-255

myledRoseY.colorHSV(j,255,255);

myledRoseWS.colorHSV(j,255,255);

myledRoseYS.colorHSV(j,255,255);

delay(20);

}

}

////////////////////////////////////////////////

void breathLED(){

  for(int i = random(0,10);i <= 255;i++){

    myledRoseW.colorRGB(i,i,i);

    myledRoseY.colorRGB(i,i,i);

    myledRoseWS.colorRGB(i,i,i);

    myledRoseYS.colorRGB(i,i,i);

    delay(20);

  }

  for(int i = 255;i >= random(0,10);i--){

    myledRoseW.colorRGB(i,i,i);

    myledRoseY.colorRGB(i,i,i);

    myledRoseWS.colorRGB(i,i,i);

    myledRoseYS.colorRGB(i,i,i);

    delay(20);

  } // WHITE

  delay(200);

  for(int i = random(0,10);i <= 255;i++){

    myledRoseW.colorRGB(i,0,0);

    myledRoseY.colorRGB(i,0,0);

    myledRoseWS.colorRGB(i,0,0);

    myledRoseYS.colorRGB(i,0,0);

    delay(20);

  }

  for(int i = 255;i >= random(0,10);i--){

    myledRoseW.colorRGB(i,0,0);

    myledRoseY.colorRGB(i,0,0);

    myledRoseWS.colorRGB(i,0,0);

    myledRoseYS.colorRGB(i,0,0);

    delay(20);

  } // RED  

  delay(200);

  for(int i = random(0,10);i <= 255;i++){

    myledRoseW.colorRGB(0,i,0);

    myledRoseY.colorRGB(0,i,0);

    myledRoseWS.colorRGB(0,i,0);

    myledRoseYS.colorRGB(0,i,0);

    delay(20);

  }

  for(int i = 255;i >= random(0,10);i--){

    myledRoseW.colorRGB(0,i,0);

    myledRoseY.colorRGB(0,i,0);

    myledRoseWS.colorRGB(0,i,0);

    myledRoseYS.colorRGB(0,i,0);

    delay(20);

  } // GREEN

  delay(200);

  for(int i = random(0,10);i <= 255;i++){

    myledRoseW.colorRGB(0,0,i);

    myledRoseY.colorRGB(0,0,i);

    myledRoseWS.colorRGB(0,0,i);

    myledRoseYS.colorRGB(0,0,i);

    delay(20);

  }

  for(int i = 255;i >= random(0,10);i--){

    myledRoseW.colorRGB(0,0,i);

    myledRoseY.colorRGB(0,0,i);

    myledRoseWS.colorRGB(0,0,i);

    myledRoseYS.colorRGB(0,0,i);

    delay(20);

  } // BLUE

}

////////////////////////////////////////////////


[/mw_shl_code]


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail