查看: 2921|回复: 0

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

[复制链接]
本帖最后由 安卓机器人 于 2018-12-17 17:52 编辑

魔幻玫瑰

IMG_20180403_113957.jpg


IMG_20180403_113932.jpg

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

各种各样的准备小礼物的办法,其中一种有意思的是DIY!因为
狠简单,更有趣”
造 起 来...
为了做成“永不凋谢的玫瑰”,3D打印小白的我开始搜索打印资料
rose-0.png
rose.stl
rose-1.png
rose-closed.stl
ROSE模型文件链接【包含花柄支架等】

Screenshot_2018-03-31-21-.png

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

8888.jpg
“永不凋谢”已经完成,那么
怎么做到魔幻色彩呢?才是根本!
1600万种颜色变换、颜色渐变,非RGB_LED莫属
魔法手势变换,也做得简单、灵敏
准备清单:

【注】RGB_LED实测应该是共极吧,接线如下图所示
IMG_20180331_182250.jpg

IMG_20180331_213451_HDR.jpg

简单的手势,快速的反应

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

[C++] 纯文本查看 复制代码
/****************************************************************
 * 20180330Bir.
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
[url=https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor]https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor[/url]

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
}
////////////////////////////////////////////////

RGBLED.zip (2.8 KB, 下载次数: 35)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

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

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

mail